@@ -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,6 +77,14 @@ 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 > ,
@@ -85,6 +96,7 @@ const SheetOperatorEditorForm: FC<SheetOperatorEditorFormProp> = ({
85
96
( { name : exsitedName } ) => exsitedName === name ,
86
97
) || { name, opers : [ ] }
87
98
const deleteArray : number [ ] = [ ]
99
+ // const needModifyGroup: Record<Group['name']>
88
100
const opers = selectedOperators . map ( ( { groupName, operName } ) => {
89
101
if ( groupName ) {
90
102
const { opers : otherGroupOpers , ...rest } = existedGroups . find (
@@ -94,7 +106,12 @@ const SheetOperatorEditorForm: FC<SheetOperatorEditorFormProp> = ({
94
106
otherGroupOpers ?. findIndex (
95
107
( { name : otherOpersName } ) => otherOpersName === operName ,
96
108
) || - 1
97
- const target = otherGroupOpers ?. splice ( targetIndex , 1 ) [ 0 ]
109
+ const target = otherGroupOpers ?. splice (
110
+ Math . max ( targetIndex - 1 , 0 ) ,
111
+ 1 ,
112
+ ) [ 0 ]
113
+ console . log ( target )
114
+ console . log ( otherGroupOpers )
98
115
submitGroup ( { ...rest , opers : otherGroupOpers } , undefined , true )
99
116
return target
100
117
} else {
@@ -147,42 +164,42 @@ const SheetOperatorEditorForm: FC<SheetOperatorEditorFormProp> = ({
147
164
< OperatorSelectorSkeleton
148
165
icon = "people"
149
166
title = "其他分组干员"
150
- collapseDisabled = { ! existedOperators ?. length }
167
+ collapseDisabled = { ! otherGroups ?. length }
151
168
>
152
- { existedGroups
153
- . filter (
154
- ( { name : existedName , opers } ) =>
155
- existedName !== name && ! ! opers ?. length ,
156
- )
157
- . map ( ( { name : otherGroupName , opers } ) => (
158
- < div key = { otherGroupName } >
159
- < div className = "flex flex-row-reverse items-center" >
160
- < H6 className = "p-0 m-0" > { otherGroupName } </ H6 >
161
- < Button
162
- minimal
163
- icon = "arrow-top-left"
164
- title = "全选"
165
- onClick = { ( ) =>
166
- opers ?. forEach ( ( { name } ) => {
167
- if (
168
- selectedOperators . find (
169
- ( { operName } ) => operName === name ,
170
- )
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 ,
171
182
)
172
- return
173
- setSelectedOperators ( ( prev ) => [
174
- ...prev ,
175
- { operName : name , groupName : otherGroupName } ,
176
- ] )
177
- } )
178
- }
179
- />
180
- </ div >
181
- < OperatorSelectorItem
182
- { ...{ selectedOperators, setSelectedOperators, opers } }
183
+ )
184
+ return
185
+ setSelectedOperators ( ( prev ) => [
186
+ ...prev ,
187
+ { operName : name , groupName : otherGroupName } ,
188
+ ] )
189
+ } )
190
+ }
183
191
/>
184
192
</ div >
185
- ) ) }
193
+ < OperatorSelectorItem
194
+ { ...{
195
+ selectedOperators,
196
+ setSelectedOperators,
197
+ opers,
198
+ groupName : otherGroupName ,
199
+ } }
200
+ />
201
+ </ div >
202
+ ) ) }
186
203
</ OperatorSelectorSkeleton >
187
204
</ div >
188
205
< div className = "flex p-0.5" >
@@ -276,12 +293,17 @@ const OperatorSelectorSkeleton: FC<{
276
293
< CollapseButton
277
294
isCollapse = { isOpen }
278
295
onClick = { ( ) => setIsOpen ( ( prev ) => ! prev ) }
296
+ disabled = { collapseDisabled }
279
297
/>
280
298
}
281
299
>
282
- < Collapse isOpen = { isOpen } className = "m-0.5" >
283
- { children }
284
- </ Collapse >
300
+ { collapseDisabled ? (
301
+ OperatorNoData
302
+ ) : (
303
+ < Collapse isOpen = { isOpen } className = "m-0.5" >
304
+ { children }
305
+ </ Collapse >
306
+ ) }
285
307
</ SheetContainerSkeleton >
286
308
)
287
309
}
0 commit comments