Skip to content

Commit 847c116

Browse files
author
gemini2035
committed
feat: func ready
1 parent 1955168 commit 847c116

File tree

8 files changed

+88
-147
lines changed

8 files changed

+88
-147
lines changed

src/components/editor/operator/EditorSheet.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@ import { CopilotDocV1 } from 'models/copilot.schema'
66

77
import { SheetGroupContainer } from './sheet/SheetGroup'
88
import { SheetOperatorContainer } from './sheet/SheetOperator'
9-
import { SheetContextValue, SheetProvider } from './sheet/SheetProvider'
9+
import { SheetProvider, SheetProviderProp } from './sheet/SheetProvider'
1010

11-
type EditorSheetProps = SheetContextValue
11+
type EditorSheetProps = Omit<SheetProviderProp, 'children'>
1212
export type Group = CopilotDocV1.Group
1313
export type Operator = CopilotDocV1.Operator
1414

src/components/editor/operator/sheet/SheetGroup.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ export interface GroupListModifyProp {
2828
const EditorGroupName: FC = () => {
2929
const [groupName, setGroupName] = useState('')
3030

31-
const { submitGroup } = useSheet()
31+
const { submitGroupInSheet } = useSheet()
3232

3333
const addGroupHandle = () => {
3434
const name = groupName.trim()
@@ -38,7 +38,7 @@ const EditorGroupName: FC = () => {
3838
intent: Intent.DANGER,
3939
})
4040
} else {
41-
submitGroup({ name }, undefined, true)
41+
submitGroupInSheet({ name })
4242
setGroupName('')
4343
}
4444
}

src/components/editor/operator/sheet/SheetOperatorItem.tsx

Lines changed: 0 additions & 96 deletions
This file was deleted.

src/components/editor/operator/sheet/SheetProvider.tsx

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,30 @@ export interface SheetProviderProp {
1515
children: ReactNode
1616
}
1717

18-
export type SheetContextValue = Omit<SheetProviderProp, 'children'>
18+
export type SheetContextValue = {
19+
existedOperators: SheetProviderProp['existedOperators']
20+
existedGroups: SheetProviderProp['existedGroups']
21+
removeOperator: SheetProviderProp['removeOperator']
22+
removeGroup: SheetProviderProp['removeGroup']
23+
submitOperatorInSheet: (value: Operator) => void
24+
submitGroupInSheet: (value: Group) => void
25+
}
1926

2027
const SheetContext = createContext<SheetContextValue>({} as SheetContextValue)
2128

2229
export const SheetProvider: FC<SheetProviderProp> = ({
2330
children,
24-
...providerValue
31+
submitGroup,
32+
submitOperator,
33+
...restValueField
2534
}) => (
26-
<SheetContext.Provider value={{ ...providerValue }}>
35+
<SheetContext.Provider
36+
value={{
37+
submitOperatorInSheet: (value) => submitOperator(value, undefined, true),
38+
submitGroupInSheet: (value) => submitGroup(value, undefined, true),
39+
...restValueField,
40+
}}
41+
>
2742
{children}
2843
</SheetContext.Provider>
2944
)

src/components/editor/operator/sheet/sheetGroup/SheetGroupItem.tsx

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -205,7 +205,7 @@ const useSheetGroupItemController = ({
205205
groupInfo: { name, opers = [], ...rest },
206206
itemType,
207207
}: SheetGroupItemProp): SheetGroupItemController => {
208-
const { submitGroup, removeGroup, existedGroups } = useSheet()
208+
const { submitGroupInSheet, removeGroup, existedGroups } = useSheet()
209209
const [favGroup, setFavGroup] = useAtom(favGroupAtom)
210210

211211
switch (itemType) {
@@ -228,7 +228,7 @@ const useSheetGroupItemController = ({
228228
return {
229229
selected: true,
230230
onGroupNameChange: (name: string) =>
231-
submitGroup({ opers, ...rest, name }, undefined, true),
231+
submitGroupInSheet({ opers, ...rest, name }),
232232
defaultOperatorCollapseOpen: true,
233233
onOperatorSkillChange: (operator: Operator) => {
234234
opers.splice(
@@ -238,7 +238,7 @@ const useSheetGroupItemController = ({
238238
1,
239239
operator,
240240
)
241-
submitGroup({ opers, name, ...rest }, undefined, true)
241+
submitGroupInSheet({ opers, name, ...rest })
242242
},
243243
ActionList: (
244244
<>
@@ -272,7 +272,7 @@ const useSheetGroupItemController = ({
272272
minimal
273273
icon="arrow-left"
274274
title="添加干员组"
275-
onClick={() => submitGroup({ name, opers }, undefined, true)}
275+
onClick={() => submitGroupInSheet({ name, opers })}
276276
/>
277277
</>
278278
),
@@ -329,7 +329,7 @@ const useSheetGroupItemController = ({
329329
: '检测到同名干员组'
330330
: '使用该推荐分组'
331331
}
332-
onClick={() => submitGroup({ name, opers }, undefined, true)}
332+
onClick={() => submitGroupInSheet({ name, opers })}
333333
/>
334334
<GroupPinOption pinned onPinChange={onPinChange} />
335335
</>

src/components/editor/operator/sheet/sheetGroup/SheetOperatorEditor.tsx

Lines changed: 50 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -67,8 +67,12 @@ const SheetOperatorEditorForm: FC<SheetOperatorEditorFormProp> = ({
6767
name,
6868
opers = [],
6969
}) => {
70-
const { existedOperators, existedGroups, removeOperator, submitGroup } =
71-
useSheet()
70+
const {
71+
existedOperators,
72+
existedGroups,
73+
removeOperator,
74+
submitGroupInSheet,
75+
} = useSheet()
7276
const [selectedOperators, setSelectedOperators] = useState<
7377
OperatorInSheetOperatorEditor[]
7478
>(
@@ -90,40 +94,54 @@ const SheetOperatorEditorForm: FC<SheetOperatorEditorFormProp> = ({
9094
React.FormHTMLAttributes<HTMLFormElement>,
9195
HTMLFormElement
9296
>['onSubmit'] = (e) => {
93-
console.log(selectedOperators)
9497
e.preventDefault()
95-
const targetGroup = existedGroups.find(
96-
({ name: exsitedName }) => exsitedName === name,
97-
) || { name, opers: [] }
98-
const deleteArray: number[] = []
99-
// const needModifyGroup: Record<Group['name']>
100-
const opers = selectedOperators.map(({ groupName, operName }) => {
101-
if (groupName) {
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
98+
const needModifyGroups = selectedOperators.reduce(
99+
(acc, { groupName, operName }) => {
100+
const key = groupName || 'noneGrouped'
101+
if (acc[key]) acc[key].push(operName)
102+
else acc[key] = [operName]
103+
return acc
104+
},
105+
{} as Record<Group['name'], OperatorInSheetOperatorEditor['operName'][]>,
106+
)
107+
let newOpers: Group['opers'] = []
108+
Object.entries(needModifyGroups).forEach(([key, value]) => {
109+
if (key === 'noneGrouped') {
110+
removeOperator(
111+
value.map((name) => {
112+
const index = existedOperators.findIndex(
113+
({ name: existedName }) => existedName === name,
114+
)
115+
newOpers?.push(existedOperators[index])
116+
return index
117+
}),
118+
)
117119
} else {
118-
const index = existedOperators.findIndex(
119-
({ name }) => name === operName,
120+
const { opers: otherGroupOpers, ...groupRestField } =
121+
existedGroups.find(
122+
({ name: existedGroups }) => existedGroups === key,
123+
)!
124+
newOpers = newOpers?.concat(
125+
value.map(
126+
(name) =>
127+
otherGroupOpers?.find(
128+
({ name: existedName }) => existedName === name,
129+
)!,
130+
),
120131
)
121-
deleteArray.push(index)
122-
removeOperator(deleteArray)
123-
return existedOperators[index]
132+
if (key !== name)
133+
submitGroupInSheet({
134+
...groupRestField,
135+
opers: otherGroupOpers?.filter(({ name }) => !value.includes(name)),
136+
})
124137
}
125-
}) as Group['opers']
126-
submitGroup({ ...targetGroup, opers }, undefined, true)
138+
})
139+
140+
console.log(newOpers)
141+
submitGroupInSheet({
142+
...existedGroups.find(({ name: existedName }) => existedName === name)!,
143+
opers: newOpers,
144+
})
127145
}
128146

129147
const onReset = () => {

src/components/editor/operator/sheet/sheetOperator/SheetOperatorItem.tsx

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,12 @@ export interface SheetOperatorItemProp {
2020
}
2121

2222
export const SheetOperatorItem: FC<SheetOperatorItemProp> = ({ name }) => {
23-
const { existedOperators, existedGroups, submitOperator, removeOperator } =
24-
useSheet()
23+
const {
24+
existedOperators,
25+
existedGroups,
26+
submitOperatorInSheet,
27+
removeOperator,
28+
} = useSheet()
2529
const [favOperators, setFavOperators] = useAtom(favOperatorAtom)
2630

2731
const operatorNoneGroupedIndex = existedOperators.findIndex(
@@ -58,7 +62,7 @@ export const SheetOperatorItem: FC<SheetOperatorItemProp> = ({ name }) => {
5862
else {
5963
if (selected) {
6064
removeOperator(operatorNoneGroupedIndex)
61-
} else submitOperator(operator, undefined, true)
65+
} else submitOperatorInSheet(operator)
6266
}
6367
}
6468

@@ -77,7 +81,7 @@ export const SheetOperatorItem: FC<SheetOperatorItemProp> = ({ name }) => {
7781
...[...favOperators].filter(({ name }) => name !== formattedValue.name),
7882
{ ...formattedValue },
7983
])
80-
submitOperator(formattedValue, undefined, true)
84+
submitOperatorInSheet(formattedValue)
8185
}
8286

8387
const onPinnedChange = () => {
@@ -151,7 +155,7 @@ export const SheetOperatorItem: FC<SheetOperatorItemProp> = ({ name }) => {
151155
<SkillAboutTrigger
152156
{...{
153157
operator,
154-
onSkillChange: (value) => submitOperator(value, undefined, true),
158+
onSkillChange: (value) => submitOperatorInSheet(value),
155159
disabled: grouped,
156160
}}
157161
/>

src/components/editor/operator/sheet/sheetOperator/toolBox/OperatorMutipleSelect.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ export const OperatorMutipleSelect: FC<OperatorMutipleSelectProp> = () => {
1111
const {
1212
operatorFiltered: { data: operatorFilteredData },
1313
} = useOperatorFilterProvider()
14-
const { existedOperators, submitOperator, removeOperator } = useSheet()
14+
const { existedOperators, submitOperatorInSheet, removeOperator } = useSheet()
1515

1616
const { cancelAllDisabled, selectAllDisabled } = useMemo(() => {
1717
const existedOperatorsNames = existedOperators.map(({ name }) => name)
@@ -27,7 +27,7 @@ export const OperatorMutipleSelect: FC<OperatorMutipleSelectProp> = () => {
2727

2828
const selectAll = () =>
2929
operatorFilteredData.forEach((item) => {
30-
submitOperator(item, () => {})
30+
submitOperatorInSheet(item)
3131
})
3232

3333
const cancelAll = () => {

0 commit comments

Comments
 (0)