@@ -12,15 +12,19 @@ import {
12
12
import { Popover2 } from '@blueprintjs/popover2'
13
13
14
14
import clsx from 'clsx'
15
- import { useRef , useState } from 'react'
15
+ import { useAtom , useSetAtom } from 'jotai'
16
+ import { FC , useMemo , useRef , useState } from 'react'
16
17
import { useForm } from 'react-hook-form'
17
18
18
19
import { CardDeleteOption } from 'components/editor/CardOptions'
20
+ import { favGroupAtom } from 'store/useFavGroups'
19
21
20
22
import { Group , Operator } from '../../EditorSheet'
21
23
import { GroupListModifyProp } from '../SheetGroup'
22
24
import { OperatorNoData } from '../SheetNoneData'
23
25
import { OperatorItem } from '../SheetOperatorItem'
26
+ import { useSheet } from '../SheetProvider'
27
+ import { OperatorInGroupItem } from './OperatorInGroupItem'
24
28
import {
25
29
CollapseButton ,
26
30
SheetGroupOperatorSelectProp ,
@@ -64,16 +68,20 @@ export const GroupItem = ({
64
68
< div className = "w-full pt-1" >
65
69
{ groupInfo . opers ?. length
66
70
? groupInfo . opers ?. map ( ( item ) => (
67
- < OperatorItem
68
- key = { item . name }
69
- operator = { item }
70
- name = { item . name }
71
- selected
72
- scaleDisable
73
- interactive = { false }
74
- horizontal
75
- readOnly = { ! exist }
76
- onSkillChange = { changeGroupedOperatorSkillHandle }
71
+ // <OperatorItem
72
+ // key={item.name}
73
+ // operator={item}
74
+ // name={item.name}
75
+ // selected
76
+ // scaleDisable
77
+ // interactive={false}
78
+ // horizontal
79
+ // readOnly={!exist}
80
+ // onSkillChange={changeGroupedOperatorSkillHandle}
81
+ // />
82
+ < OperatorInGroupItem
83
+ operatorInfo = { item }
84
+ onOperatorSkillChange = { changeGroupedOperatorSkillHandle }
77
85
/>
78
86
) )
79
87
: ! editable && OperatorNoData }
@@ -147,13 +155,14 @@ export const GroupItem = ({
147
155
148
156
const GroupTitle = ( {
149
157
groupTitle,
150
- editable,
158
+ // editable,
151
159
renameSubmit,
152
160
} : {
153
161
editable : boolean
154
- renameSubmit : ( newName : string ) => void
162
+ renameSubmit ? : ( newName : string ) => void
155
163
groupTitle : string
156
164
} ) => {
165
+ const editable = ! ! renameSubmit
157
166
const [ editName , setEditName ] = useState ( '' )
158
167
const [ nameEditState , setNameEditState ] = useState ( false )
159
168
const [ alertState , setAlertState ] = useState ( false )
@@ -200,7 +209,7 @@ const GroupTitle = ({
200
209
className = "flex items-center"
201
210
onSubmit = { handleSubmit ( ( ) => {
202
211
ignoreBlur . current = true
203
- renameSubmit ( editName || groupTitle )
212
+ renameSubmit ?. ( editName || groupTitle )
204
213
setNameEditState ( false )
205
214
inputRef . current ?. blur ( )
206
215
} ) }
@@ -240,3 +249,79 @@ const GroupTitle = ({
240
249
</ >
241
250
)
242
251
}
252
+
253
+ type ItemType = 'recommend' | 'selected' | 'fav'
254
+
255
+ export interface SheetGroupItemProp {
256
+ groupInfo : Group
257
+ itemType : ItemType
258
+ }
259
+
260
+ export const SheetGroupItem : FC < SheetGroupItemProp > = ( {
261
+ groupInfo,
262
+ itemType,
263
+ } ) => {
264
+ const { selected, onGroupNameChange } = useSheetGroupItemController ( {
265
+ groupInfo,
266
+ itemType,
267
+ } )
268
+
269
+ return (
270
+ < Card interactive = { ! selected } className = "mt-1 mx-0.5" >
271
+ < div className = "flex items-center justify-between" >
272
+ < GroupTitle
273
+ groupTitle = { groupInfo . name }
274
+ editable
275
+ renameSubmit = { onGroupNameChange }
276
+ />
277
+ < div > </ div >
278
+ </ div >
279
+ </ Card >
280
+ )
281
+ }
282
+
283
+ type SheetGroupItemController = {
284
+ selected : boolean
285
+ onGroupNameChange : ( ( name : string ) => void ) | undefined
286
+ defaultOperatorCollapseOpen : boolean
287
+ }
288
+
289
+ const useSheetGroupItemController = ( {
290
+ groupInfo,
291
+ itemType,
292
+ } : SheetGroupItemProp ) : SheetGroupItemController => {
293
+ const { submitGroup } = useSheet ( )
294
+ const [ favGroup , setFavGroup ] = useAtom ( favGroupAtom )
295
+
296
+ switch ( itemType ) {
297
+ case 'selected' :
298
+ return {
299
+ selected : true ,
300
+ onGroupNameChange : ( name : string ) =>
301
+ submitGroup ( { ...groupInfo , name } , undefined , true ) ,
302
+ defaultOperatorCollapseOpen : true ,
303
+ }
304
+ case 'recommend' :
305
+ return {
306
+ selected : false ,
307
+ onGroupNameChange : undefined ,
308
+ defaultOperatorCollapseOpen : false ,
309
+ }
310
+ case 'fav' :
311
+ return {
312
+ selected : false ,
313
+ onGroupNameChange : ( name : string ) =>
314
+ setFavGroup ( [
315
+ ...favGroup . filter ( ( { name : favName } ) => favName !== name ) ,
316
+ { ...groupInfo , name } ,
317
+ ] ) ,
318
+ defaultOperatorCollapseOpen : false ,
319
+ }
320
+ default :
321
+ return {
322
+ selected : false ,
323
+ onGroupNameChange : undefined ,
324
+ defaultOperatorCollapseOpen : false ,
325
+ }
326
+ }
327
+ }
0 commit comments