@@ -2,51 +2,51 @@ import "./style.scss"
2
2
import { State } from "../../store" ;
3
3
import Block from "../block/Index"
4
4
import FileState from "./FileState"
5
- import React , { useState } from 'react' ;
5
+ import React , { useState , useMemo , useEffect } from 'react' ;
6
6
import { useDispatch , useSelector } from "react-redux" ;
7
- import { Input , Button , Space , Checkbox , Badge } from 'antd' ;
7
+ import { Space , Checkbox , Badge } from 'antd' ;
8
8
import { PresetStatusColorType } from "antd/es/_util/colors"
9
- import { FileStatus , Commit } from "../../../wailsjs/go/repository/Repository"
9
+ import { FileStatus } from "../../../wailsjs/go/repository/Repository"
10
10
import type { CheckboxChangeEvent } from 'antd/es/checkbox' ;
11
11
import type { CheckboxValueType } from 'antd/es/checkbox/Group' ;
12
12
import { success , warning } from "../../utils/common" ;
13
13
import { setRepositoryStatus , updateWorkZone } from "../../utils/repo" ;
14
14
import { setStatus } from "../../store/sliceMain" ;
15
+ import SubmitView from "./SubmitView" ;
15
16
16
17
17
- const { TextArea} = Input ;
18
-
19
18
20
19
const Changes = ( ) => {
21
20
const dispatch = useDispatch ( ) ;
22
21
const branch = useSelector ( ( state : State ) => state . main . selectedRepositoryBranch ) ;
23
22
const selectedRepositoryId = useSelector ( ( state : State ) => state . main . selectedRepositoryId ) ;
24
- const fileState = useSelector ( ( state : State ) => state . main . currentlyRepositoryFileState ) ;
25
-
26
- const [ commitName , setCommitName ] = useState < string > ( "" )
27
- const [ commitMessage , setCommitMessage ] = useState < string > ( "" )
28
-
29
23
const [ badgeStatus , setBadgeStatus ] = useState < PresetStatusColorType > ( "success" )
30
24
25
+ const fileState = useSelector ( ( state : State ) => state . main . currentlyRepositoryFileState ) ;
26
+
27
+ const changedFileInWorkspace = useMemo ( ( ) => fileState . filter ( r => ( r . worktree != " " ) ) . map ( r => r . path ) , [ fileState ] )
28
+ const unchangedFileInWorkspace = useMemo ( ( ) => fileState . filter ( r => ( r . worktree == " " ) ) . map ( r => r . path ) , [ fileState ] )
31
29
32
- const [ checkedList , setCheckedList ] = useState < CheckboxValueType [ ] > ( [ ] ) ;
30
+ const [ checkedList , setCheckedList ] = useState < string [ ] > ( unchangedFileInWorkspace ) ;
33
31
const [ indeterminate , setIndeterminate ] = useState ( true ) ;
34
32
const [ checkAll , setCheckAll ] = useState ( false ) ;
35
33
36
- const commit = async ( ) => {
37
- if ( commitName . length === 0 ) {
38
- warning ( "Please fill in the title for the submission." )
39
- return
40
- }
41
- if ( checkedList . length === 0 ) {
42
- warning ( "Please check the box for the file you want to submit." )
34
+ useEffect ( ( ) => {
35
+ setCheckedList ( unchangedFileInWorkspace )
36
+ } , [ fileState ] )
37
+
38
+ useEffect ( ( ) => {
39
+ if ( fileState . length === 0 ) {
40
+ setCheckAll ( false ) ;
41
+ setIndeterminate ( false ) ;
43
42
return
44
43
}
44
+ setCheckAll ( checkedList . length === fileState . length ) ;
45
+ setIndeterminate ( checkedList . length !== 0 && checkedList . length < fileState . length ) ;
46
+ } , [ checkedList ] )
47
+
48
+ const commitSuccess = async ( ) => {
45
49
try {
46
- const hash = await Commit ( commitName , commitMessage , checkedList as string [ ] ) ;
47
- success ( "Commit hash:" + hash )
48
- setCommitName ( "" )
49
- setCommitMessage ( "" )
50
50
setCheckedList ( [ ] )
51
51
await updateWorkZone ( selectedRepositoryId , branch )
52
52
} catch ( e ) {
@@ -56,16 +56,12 @@ const Changes = () => {
56
56
}
57
57
58
58
const onChange = ( list : CheckboxValueType [ ] ) => {
59
- setCheckedList ( list ) ;
60
- setIndeterminate ( ! ! list . length && list . length < fileState . length ) ;
61
- setCheckAll ( list . length === fileState . length ) ;
59
+ setCheckedList ( list as string [ ] ) ;
62
60
} ;
63
61
64
62
const onCheckAllChange = ( e : CheckboxChangeEvent ) => {
65
- let file = fileState . filter ( r => ( r . staging == " " || r . staging == "?" ) ) . map ( r => r . path )
66
- setCheckedList ( e . target . checked ? file : [ ] ) ;
67
- setIndeterminate ( false ) ;
68
- setCheckAll ( e . target . checked ) ;
63
+ let checkedList = e . target . checked ? [ ...changedFileInWorkspace , ...unchangedFileInWorkspace ] : unchangedFileInWorkspace
64
+ setCheckedList ( checkedList ) ;
69
65
} ;
70
66
71
67
const getChangesStatus = ( ) => {
@@ -83,18 +79,6 @@ const Changes = () => {
83
79
} )
84
80
}
85
81
86
- const bottom = < div style = { { padding : 12 } } >
87
- < Space direction = "vertical" size = "middle" style = { { display : 'flex' } } >
88
- < Input value = { commitName } onChange = { ( e : React . ChangeEvent < HTMLInputElement > ) => {
89
- setCommitName ( e . target . value )
90
- } } placeholder = "Title" />
91
- < TextArea value = { commitMessage } onChange = { ( e : React . ChangeEvent < HTMLTextAreaElement > ) => {
92
- setCommitMessage ( e . target . value )
93
- } } rows = { 4 } />
94
- < Button block type = "primary" onClick = { async ( ) => { await commit ( ) } } > Commit to { branch } </ Button >
95
- </ Space >
96
- </ div >
97
-
98
82
const action = < Space size = "middle" style = { { display : 'flex' } } >
99
83
< div > { checkedList . length } </ div >
100
84
< Checkbox indeterminate = { indeterminate } onChange = { onCheckAllChange } checked = { checkAll } >
@@ -103,16 +87,14 @@ const Changes = () => {
103
87
</ Space >
104
88
105
89
106
-
107
90
return (
108
91
< Block
109
- // title={<Badge status="success" /><RedoOutlined onClick={getChangesStatus} style={{cursor:'pointer'}} /> }
110
92
title = {
111
93
< div style = { { cursor :'pointer' } } onClick = { getChangesStatus } >
112
94
< Badge status = { badgeStatus } text = "Refresh" />
113
95
</ div >
114
96
}
115
- bottom = { bottom }
97
+ bottom = { < SubmitView checkedList = { checkedList } success = { commitSuccess } unchangedFileInWorkspace = { unchangedFileInWorkspace } /> }
116
98
action = { action } >
117
99
< Checkbox . Group
118
100
value = { checkedList }
0 commit comments