Skip to content

Commit 1955168

Browse files
authored
Merge pull request #14 from GeorgeZhang2035/perf/sheet
feat: onSubmit ready
2 parents cc16c41 + e814442 commit 1955168

File tree

5 files changed

+87
-54
lines changed

5 files changed

+87
-54
lines changed

src/components/editor/operator/EditorPerformer.tsx

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -312,13 +312,6 @@ export const EditorPerformer: FC<EditorPerformerProps> = ({ control }) => {
312312
setError,
313313
fromSheet,
314314
) => {
315-
const removeOperatorByArray = () =>
316-
removeOperator(
317-
group.opers
318-
?.map((item) => operators.findIndex(({ name }) => name === item.name))
319-
.filter((item) => item !== -1),
320-
)
321-
322315
if (
323316
groups.find(({ name, _id }) => name === group.name && _id !== group._id)
324317
) {
@@ -331,7 +324,6 @@ export const EditorPerformer: FC<EditorPerformerProps> = ({ control }) => {
331324
: findGroupById(getId(editingGroup!))
332325
if (existingGroup) {
333326
group._id = getId(existingGroup)
334-
if (fromSheet) removeOperatorByArray()
335327
updateGroup(
336328
groups.findIndex(({ _id }) => _id === existingGroup._id),
337329
group,
@@ -344,7 +336,15 @@ export const EditorPerformer: FC<EditorPerformerProps> = ({ control }) => {
344336
} else {
345337
group._id = uniqueId()
346338
appendGroup(group)
347-
if (group.opers?.length) removeOperatorByArray()
339+
if (group.opers?.length) {
340+
removeOperator(
341+
group.opers
342+
?.map((item) =>
343+
operators.findIndex(({ name }) => name === item.name),
344+
)
345+
.filter((item) => item !== -1),
346+
)
347+
}
348348
}
349349

350350
return true

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

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,6 @@ import { ShowMore } from './sheetOperator/ShowMore'
1212

1313
export interface SheetOperatorProps {}
1414

15-
// const defaultRarityFilter = Array.from(
16-
// new Array(Math.max(...OPERATORS.map(({ rarity }) => rarity)) + 1).keys(),
17-
// ).slice(Math.min(...OPERATORS.map(({ rarity }) => rarity)))
18-
1915
const SheetOperator: FC<SheetOperatorProps> = () => {
2016
const operatorScrollRef = useRef<HTMLDivElement>(null)
2117

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,17 +15,20 @@ export interface SheetGroupOperatorSelectProp {
1515
interface CollapseButtonProps {
1616
isCollapse: boolean
1717
onClick: ButtonProps['onClick']
18+
disabled?: ButtonProps['disabled']
1819
}
1920

2021
export const CollapseButton: FC<CollapseButtonProps> = ({
2122
isCollapse,
2223
onClick,
24+
disabled,
2325
}) => (
2426
<Button
2527
icon={isCollapse ? 'collapse-all' : 'expand-all'}
2628
title={`${isCollapse ? '折叠' : '展开'}所包含干员`}
2729
minimal
2830
className="cursor-pointer ml-1"
31+
disabled={disabled}
2932
onClick={onClick}
3033
/>
3134
)

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,7 @@ export const SheetGroupItem: FC<SheetGroupItemProp> = ({
185185
onOperatorSkillChange={onOperatorSkillChange}
186186
/>
187187
))
188-
: OperatorNoData}
188+
: !selected && OperatorNoData}
189189
{selected && <SheetOperatorEditor {...groupInfo} />}
190190
</div>
191191
</Collapse>

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

Lines changed: 74 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import {
1717
FC,
1818
ReactNode,
1919
SetStateAction,
20+
useMemo,
2021
useState,
2122
} from 'react'
2223

@@ -26,6 +27,7 @@ import {
2627
SheetContainerSkeleton,
2728
SheetContainerSkeletonProps,
2829
} from '../SheetContainerSkeleton'
30+
import { OperatorNoData } from '../SheetNoneData'
2931
import { useSheet } from '../SheetProvider'
3032
import { CollapseButton } from './CollapseButton'
3133

@@ -38,6 +40,7 @@ export const SheetOperatorEditor: FC<SheetOperatorEditorProp> = ({
3840
<Popover2
3941
className="w-full"
4042
content={<SheetOperatorEditorForm {...SheetOperatorEditorFormProps} />}
43+
position={Position.TOP}
4144
>
4245
<Card
4346
className="flex items-center justify-center"
@@ -74,27 +77,53 @@ const SheetOperatorEditorForm: FC<SheetOperatorEditorFormProp> = ({
7477
operName,
7578
})),
7679
)
80+
const otherGroups = useMemo(
81+
() =>
82+
existedGroups.filter(
83+
({ name: existedName, opers }) =>
84+
existedName !== name && !!opers?.length,
85+
),
86+
[existedGroups, name],
87+
)
7788

7889
const onSubmit: DetailedHTMLProps<
7990
React.FormHTMLAttributes<HTMLFormElement>,
8091
HTMLFormElement
8192
>['onSubmit'] = (e) => {
93+
console.log(selectedOperators)
8294
e.preventDefault()
95+
const targetGroup = existedGroups.find(
96+
({ name: exsitedName }) => exsitedName === name,
97+
) || { name, opers: [] }
8398
const deleteArray: number[] = []
99+
// const needModifyGroup: Record<Group['name']>
84100
const opers = selectedOperators.map(({ groupName, operName }) => {
85101
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
90117
} else {
91118
const index = existedOperators.findIndex(
92119
({ name }) => name === operName,
93120
)
94121
deleteArray.push(index)
122+
removeOperator(deleteArray)
95123
return existedOperators[index]
96124
}
97-
})
125+
}) as Group['opers']
126+
submitGroup({ ...targetGroup, opers }, undefined, true)
98127
}
99128

100129
const onReset = () => {
@@ -135,42 +164,42 @@ const SheetOperatorEditorForm: FC<SheetOperatorEditorFormProp> = ({
135164
<OperatorSelectorSkeleton
136165
icon="people"
137166
title="其他分组干员"
138-
collapseDisabled={!existedOperators?.length}
167+
collapseDisabled={!otherGroups?.length}
139168
>
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,
159182
)
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+
}
171191
/>
172192
</div>
173-
))}
193+
<OperatorSelectorItem
194+
{...{
195+
selectedOperators,
196+
setSelectedOperators,
197+
opers,
198+
groupName: otherGroupName,
199+
}}
200+
/>
201+
</div>
202+
))}
174203
</OperatorSelectorSkeleton>
175204
</div>
176205
<div className="flex p-0.5">
@@ -264,12 +293,17 @@ const OperatorSelectorSkeleton: FC<{
264293
<CollapseButton
265294
isCollapse={isOpen}
266295
onClick={() => setIsOpen((prev) => !prev)}
296+
disabled={collapseDisabled}
267297
/>
268298
}
269299
>
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+
)}
273307
</SheetContainerSkeleton>
274308
)
275309
}

0 commit comments

Comments
 (0)