@@ -17,6 +17,7 @@ import {
17
17
FC ,
18
18
ReactNode ,
19
19
SetStateAction ,
20
+ useMemo ,
20
21
useState ,
21
22
} from 'react'
22
23
@@ -26,6 +27,7 @@ import {
26
27
SheetContainerSkeleton ,
27
28
SheetContainerSkeletonProps ,
28
29
} from '../SheetContainerSkeleton'
30
+ import { OperatorNoData } from '../SheetNoneData'
29
31
import { useSheet } from '../SheetProvider'
30
32
import { CollapseButton } from './CollapseButton'
31
33
@@ -38,6 +40,7 @@ export const SheetOperatorEditor: FC<SheetOperatorEditorProp> = ({
38
40
< Popover2
39
41
className = "w-full"
40
42
content = { < SheetOperatorEditorForm { ...SheetOperatorEditorFormProps } /> }
43
+ position = { Position . TOP }
41
44
>
42
45
< Card
43
46
className = "flex items-center justify-center"
@@ -74,27 +77,53 @@ const SheetOperatorEditorForm: FC<SheetOperatorEditorFormProp> = ({
74
77
operName,
75
78
} ) ) ,
76
79
)
80
+ const otherGroups = useMemo (
81
+ ( ) =>
82
+ existedGroups . filter (
83
+ ( { name : existedName , opers } ) =>
84
+ existedName !== name && ! ! opers ?. length ,
85
+ ) ,
86
+ [ existedGroups , name ] ,
87
+ )
77
88
78
89
const onSubmit : DetailedHTMLProps <
79
90
React . FormHTMLAttributes < HTMLFormElement > ,
80
91
HTMLFormElement
81
92
> [ 'onSubmit' ] = ( e ) => {
93
+ console . log ( selectedOperators )
82
94
e . preventDefault ( )
95
+ const targetGroup = existedGroups . find (
96
+ ( { name : exsitedName } ) => exsitedName === name ,
97
+ ) || { name, opers : [ ] }
83
98
const deleteArray : number [ ] = [ ]
99
+ // const needModifyGroup: Record<Group['name']>
84
100
const opers = selectedOperators . map ( ( { groupName, operName } ) => {
85
101
if ( groupName ) {
86
- const targetGroup = existedGroups . find ( ( { name } ) => name === groupName )
87
- return existedGroups
88
- . find ( ( { name } ) => name === groupName )
89
- ?. opers ?. find ( ( { name } ) => name === operName )
102
+ const { opers : otherGroupOpers , ...rest } = existedGroups . find (
103
+ ( { name } ) => name === groupName ,
104
+ ) || { name : groupName , opers : [ ] }
105
+ const targetIndex =
106
+ otherGroupOpers ?. findIndex (
107
+ ( { name : otherOpersName } ) => otherOpersName === operName ,
108
+ ) || - 1
109
+ const target = otherGroupOpers ?. splice (
110
+ Math . max ( targetIndex - 1 , 0 ) ,
111
+ 1 ,
112
+ ) [ 0 ]
113
+ console . log ( target )
114
+ console . log ( otherGroupOpers )
115
+ submitGroup ( { ...rest , opers : otherGroupOpers } , undefined , true )
116
+ return target
90
117
} else {
91
118
const index = existedOperators . findIndex (
92
119
( { name } ) => name === operName ,
93
120
)
94
121
deleteArray . push ( index )
122
+ removeOperator ( deleteArray )
95
123
return existedOperators [ index ]
96
124
}
97
- } )
125
+ } ) as Group [ 'opers' ]
126
+ submitGroup ( { ...targetGroup , opers } , undefined , true )
98
127
}
99
128
100
129
const onReset = ( ) => {
@@ -135,42 +164,42 @@ const SheetOperatorEditorForm: FC<SheetOperatorEditorFormProp> = ({
135
164
< OperatorSelectorSkeleton
136
165
icon = "people"
137
166
title = "其他分组干员"
138
- collapseDisabled = { ! existedOperators ?. length }
167
+ collapseDisabled = { ! otherGroups ?. length }
139
168
>
140
- { existedGroups
141
- . filter (
142
- ( { name : existedName , opers } ) =>
143
- existedName !== name && ! ! opers ?. length ,
144
- )
145
- . map ( ( { name : otherGroupName , opers } ) => (
146
- < div key = { otherGroupName } >
147
- < div className = "flex flex-row-reverse items-center" >
148
- < H6 className = "p-0 m-0" > { otherGroupName } </ H6 >
149
- < Button
150
- minimal
151
- icon = "arrow-top-left"
152
- title = "全选"
153
- onClick = { ( ) =>
154
- opers ?. forEach ( ( { name } ) => {
155
- if (
156
- selectedOperators . find (
157
- ( { operName } ) => operName === name ,
158
- )
169
+ { otherGroups . map ( ( { name : otherGroupName , opers } ) => (
170
+ < div key = { otherGroupName } >
171
+ < div className = "flex flex-row-reverse items-center" >
172
+ < H6 className = "p-0 m-0" > { otherGroupName } </ H6 >
173
+ < Button
174
+ minimal
175
+ icon = "arrow-top-left"
176
+ title = "全选"
177
+ onClick = { ( ) =>
178
+ opers ?. forEach ( ( { name } ) => {
179
+ if (
180
+ selectedOperators . find (
181
+ ( { operName } ) => operName === name ,
159
182
)
160
- return
161
- setSelectedOperators ( ( prev ) => [
162
- ...prev ,
163
- { operName : name , groupName : otherGroupName } ,
164
- ] )
165
- } )
166
- }
167
- />
168
- </ div >
169
- < OperatorSelectorItem
170
- { ...{ selectedOperators, setSelectedOperators, opers } }
183
+ )
184
+ return
185
+ setSelectedOperators ( ( prev ) => [
186
+ ...prev ,
187
+ { operName : name , groupName : otherGroupName } ,
188
+ ] )
189
+ } )
190
+ }
171
191
/>
172
192
</ div >
173
- ) ) }
193
+ < OperatorSelectorItem
194
+ { ...{
195
+ selectedOperators,
196
+ setSelectedOperators,
197
+ opers,
198
+ groupName : otherGroupName ,
199
+ } }
200
+ />
201
+ </ div >
202
+ ) ) }
174
203
</ OperatorSelectorSkeleton >
175
204
</ div >
176
205
< div className = "flex p-0.5" >
@@ -264,12 +293,17 @@ const OperatorSelectorSkeleton: FC<{
264
293
< CollapseButton
265
294
isCollapse = { isOpen }
266
295
onClick = { ( ) => setIsOpen ( ( prev ) => ! prev ) }
296
+ disabled = { collapseDisabled }
267
297
/>
268
298
}
269
299
>
270
- < Collapse isOpen = { isOpen } className = "m-0.5" >
271
- { children }
272
- </ Collapse >
300
+ { collapseDisabled ? (
301
+ OperatorNoData
302
+ ) : (
303
+ < Collapse isOpen = { isOpen } className = "m-0.5" >
304
+ { children }
305
+ </ Collapse >
306
+ ) }
273
307
</ SheetContainerSkeleton >
274
308
)
275
309
}
0 commit comments