1
- import { NonIdealState } from '@blueprintjs/core'
1
+ import { Callout , Icon , NonIdealState } from '@blueprintjs/core'
2
2
import {
3
3
Active ,
4
4
DndContext ,
@@ -17,12 +17,17 @@ import {
17
17
verticalListSortingStrategy ,
18
18
} from '@dnd-kit/sortable'
19
19
20
- import { uniqueId } from 'lodash-es'
21
- import { FC , useEffect , useState } from 'react'
22
- import { Control , UseFieldArrayMove , useFieldArray } from 'react-hook-form'
20
+ import { compact , uniq , uniqueId } from 'lodash-es'
21
+ import { FC , useEffect , useMemo , useState } from 'react'
22
+ import {
23
+ Control ,
24
+ UseFieldArrayMove ,
25
+ useFieldArray ,
26
+ useWatch ,
27
+ } from 'react-hook-form'
23
28
import { SetRequired } from 'type-fest'
24
29
25
- import type { CopilotDocV1 } from 'models/copilot.schema'
30
+ import { CopilotDocV1 } from 'models/copilot.schema'
26
31
27
32
import { FactItem } from '../../FactItem'
28
33
import { Droppable , Sortable } from '../../dnd'
@@ -52,6 +57,7 @@ const getId = (performer: Operator | Group) => {
52
57
export const EditorPerformer : FC < EditorPerformerProps > = ( { control } ) => {
53
58
const [ editMode , setEditMode ] = useState < PerformerType > ( 'operator' )
54
59
const sensors = useSensors ( useSensor ( PointerSensor ) )
60
+ const actions = useWatch ( { control, name : 'actions' } )
55
61
56
62
const {
57
63
fields : _operators ,
@@ -79,6 +85,25 @@ export const EditorPerformer: FC<EditorPerformerProps> = ({ control }) => {
79
85
const operators : Operator [ ] = _operators
80
86
const groups : Group [ ] = _groups
81
87
88
+ const additionalOperatorsFromActions = useMemo ( ( ) => {
89
+ if ( ! actions ) return [ ]
90
+
91
+ const additionalOperators = actions . map ( ( action ) => {
92
+ if (
93
+ 'name' in action &&
94
+ ! operators . some ( ( { name } ) => name === action . name ) &&
95
+ ! groups . some ( ( { opers } ) =>
96
+ opers ?. some ( ( { name } ) => name === action . name ) ,
97
+ )
98
+ ) {
99
+ return action . name
100
+ }
101
+ return undefined
102
+ } )
103
+
104
+ return uniq ( compact ( additionalOperators ) )
105
+ } , [ actions , operators , groups ] )
106
+
82
107
const [ draggingOperator , setDraggingOperator ] = useState < Operator > ( )
83
108
const [ draggingGroup , setDraggingGroup ] = useState < Group > ( )
84
109
const [ editingOperator , setEditingOperator ] = useState < Operator > ( )
@@ -289,7 +314,7 @@ export const EditorPerformer: FC<EditorPerformerProps> = ({ control }) => {
289
314
addOperator ( )
290
315
} else {
291
316
updateOperator (
292
- operators . findIndex ( ( { name } ) => name === operator . name ) ,
317
+ operators . findIndex ( ( { _id } ) => _id === operator . _id ) ,
293
318
operator ,
294
319
)
295
320
}
@@ -354,14 +379,16 @@ export const EditorPerformer: FC<EditorPerformerProps> = ({ control }) => {
354
379
< >
355
380
< div className = "flex flex-wrap md:flex-nowrap" >
356
381
< div className = "w-full md:w-1/3 md:mr-8 flex flex-col pb-8" >
357
- < EditorSheetTrigger
358
- submitOperator = { submitOperator }
359
- submitGroup = { submitGroup }
360
- existedOperators = { operators }
361
- existedGroups = { groups }
362
- removeOperator = { removeOperator }
363
- removeGroup = { removeGroup }
364
- />
382
+ < div className = "mb-2" >
383
+ < EditorSheetTrigger
384
+ submitOperator = { submitOperator }
385
+ submitGroup = { submitGroup }
386
+ existedOperators = { operators }
387
+ existedGroups = { groups }
388
+ removeOperator = { removeOperator }
389
+ removeGroup = { removeGroup }
390
+ />
391
+ </ div >
365
392
< EditorPerformerAdd
366
393
mode = { editMode }
367
394
operator = { editingOperator }
@@ -377,7 +404,17 @@ export const EditorPerformer: FC<EditorPerformerProps> = ({ control }) => {
377
404
/>
378
405
</ div >
379
406
< div className = "w-full md:w-2/3 pb-8" >
380
- < div className = "p-2 -mx-2 relative" >
407
+ { additionalOperatorsFromActions . length > 0 && (
408
+ < Callout
409
+ className = "flex items-center py-2 mb-2"
410
+ icon = { null }
411
+ intent = "primary"
412
+ >
413
+ < Icon icon = "info-sign" className = "mr-1" />
414
+ 未加入干员:{ additionalOperatorsFromActions . join ( ', ' ) }
415
+ </ Callout >
416
+ ) }
417
+ < div className = "mt-2 relative" >
381
418
< DndContext
382
419
sensors = { sensors }
383
420
onDragStart = { handleDragStart }
0 commit comments