Skip to content

Commit 578130c

Browse files
author
gemini2035
committed
refactor(sheet): abandon using eventProxyHandle
1 parent f0103bc commit 578130c

File tree

8 files changed

+153
-218
lines changed

8 files changed

+153
-218
lines changed

src/components/editor/operator/EditorSheet.tsx

Lines changed: 0 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -14,25 +14,6 @@ type EditorSheetProps = SheetOperatorProps & SheetGroupProps
1414
export type Group = CopilotDocV1.Group
1515
export type Operator = CopilotDocV1.Operator
1616

17-
export enum OperatorEventType {
18-
BOX,
19-
SKILL,
20-
}
21-
export enum GroupEventType {
22-
ADD,
23-
REMOVE,
24-
PIN,
25-
OPERS,
26-
RENAME,
27-
UPDATE,
28-
}
29-
export type SheetSubmitEventHandleType<
30-
eventType extends OperatorEventType | GroupEventType,
31-
> = (
32-
type: eventType,
33-
value: eventType extends OperatorEventType ? Operator : Group,
34-
) => void
35-
3617
const EditorOperatorSheet = (sheetProps: EditorSheetProps) => (
3718
<article className="overflow-y-auto">
3819
<SheetOperatorContainer {...sheetProps} />

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,13 @@ import { Divider, H3, Icon, IconName, MaybeElement } from '@blueprintjs/core'
33
import clsx from 'clsx'
44
import { ReactNode } from 'react'
55

6-
interface SheetContainerSkeletonProps {
6+
export interface SheetContainerSkeletonProps {
77
title: string
88
icon: IconName | MaybeElement
99
mini?: boolean
1010
className?: string
1111
rightOptions?: ReactNode
12-
children: ReactNode
12+
children?: ReactNode
1313
}
1414

1515
export const SheetContainerSkeleton = ({

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

Lines changed: 80 additions & 96 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,7 @@ import { OPERATORS, PROFESSIONS } from 'models/operator'
1818
import { favGroupAtom, ignoreKeyDic } from 'store/useFavGroups'
1919

2020
import { EditorPerformerGroupProps } from '../EditorPerformerGroup'
21-
import {
22-
Group,
23-
GroupEventType,
24-
Operator,
25-
SheetSubmitEventHandleType,
26-
} from '../EditorSheet'
21+
import { Group, Operator } from '../EditorSheet'
2722
import { SheetContainerSkeleton } from './SheetContainerSkeleton'
2823
import { GroupNoData } from './SheetNoneData'
2924
import { GroupItem } from './sheetGroup/SheetGroupItem'
@@ -35,7 +30,54 @@ export interface SheetGroupProps {
3530
removeGroup: UseFieldArrayRemove
3631
}
3732

38-
export type GroupEventHandleType = SheetSubmitEventHandleType<GroupEventType>
33+
export interface GroupListModifyProp {
34+
groupAddHandle?: (value: Group) => void
35+
groupRemoveHandle?: (_id: string) => void
36+
groupPinHandle?: (value: Group) => void
37+
groupUpdateHandle?: (value: Group) => void
38+
}
39+
40+
const EditorGroupName = ({
41+
groupAddHandle,
42+
}: {
43+
groupAddHandle: GroupListModifyProp['groupAddHandle']
44+
}) => {
45+
const [groupName, setGroupName] = useState('')
46+
47+
const addGroupHandle = () => {
48+
const name = groupName.trim()
49+
if (!name) {
50+
AppToaster.show({
51+
message: '干员组名不能为空',
52+
intent: Intent.DANGER,
53+
})
54+
} else {
55+
groupAddHandle?.({ name })
56+
setGroupName('')
57+
}
58+
}
59+
60+
return (
61+
<div className="flex px-3 items-center">
62+
<InputGroup
63+
type="text"
64+
value={groupName}
65+
placeholder="输入干员组名"
66+
onChange={(e) => setGroupName(e.target.value)}
67+
fill
68+
/>
69+
<div className="flex items-center">
70+
<Button minimal icon="tick" title="添加" onClick={addGroupHandle} />
71+
<Button
72+
minimal
73+
icon="reset"
74+
title="重置"
75+
onClick={() => setGroupName('')}
76+
/>
77+
</div>
78+
</div>
79+
)
80+
}
3981

4082
const SheetGroup = ({
4183
submitGroup,
@@ -116,48 +158,32 @@ const SheetGroup = ({
116158
{ ...value },
117159
])
118160

119-
const eventHandleProxy: GroupEventHandleType = (type, value) => {
120-
switch (type) {
121-
case GroupEventType.ADD: {
122-
if (checkGroupExisted(value.name)) {
123-
AppToaster.show({
124-
message: '干员组已存在!',
125-
intent: Intent.DANGER,
126-
})
127-
} else {
128-
if (checkGroupPinned(value)) changeOperatorOfOtherGroups(value.opers)
129-
submitGroup(value, undefined, true)
130-
}
131-
break
132-
}
133-
case GroupEventType.REMOVE: {
134-
removeGroup(existedGroups.findIndex((item) => item._id === value._id))
135-
break
136-
}
137-
case GroupEventType.PIN: {
138-
if (checkGroupPinned(value))
139-
setFavGroups([...favGroups].filter(({ name }) => name !== value.name))
140-
else {
141-
if (checkSamePinned(value.name)) setCoverGroup(value)
142-
else updateFavGroup(value)
143-
}
144-
break
145-
}
146-
case GroupEventType.RENAME: {
147-
submitGroup(value, undefined, true)
148-
break
149-
}
150-
case GroupEventType.OPERS: {
151-
changeOperatorOfOtherGroups(value.opers)
152-
submitGroup(value, undefined, true)
153-
break
154-
}
155-
case GroupEventType.UPDATE: {
156-
submitGroup(value, undefined, true)
157-
break
158-
}
161+
const groupAddHandle = (value: Group) => {
162+
if (checkGroupExisted(value.name)) {
163+
AppToaster.show({
164+
message: '干员组已存在!',
165+
intent: Intent.DANGER,
166+
})
167+
} else {
168+
if (checkGroupPinned(value)) changeOperatorOfOtherGroups(value.opers)
169+
submitGroup(value, undefined, true)
170+
}
171+
}
172+
const groupRemoveHandle = (_id: string) => {
173+
removeGroup(existedGroups.findIndex((item) => item._id === _id))
174+
}
175+
const groupPinHandle = (value: Group) => {
176+
if (checkGroupPinned(value))
177+
setFavGroups([...favGroups].filter(({ name }) => name !== value.name))
178+
else {
179+
if (checkSamePinned(value.name)) setCoverGroup(value)
180+
else updateFavGroup(value)
159181
}
160182
}
183+
const groupUpdateHandle = (value: Group) => {
184+
changeOperatorOfOtherGroups(value.opers)
185+
submitGroup(value, undefined, true)
186+
}
161187

162188
const [favGroups, setFavGroups] = useAtom(favGroupAtom)
163189

@@ -172,7 +198,7 @@ const SheetGroup = ({
172198
mini
173199
className="sticky top-0 z-10 backdrop-blur-lg py-1"
174200
>
175-
<EditorGroupName {...{ eventHandleProxy }} />
201+
<EditorGroupName {...{ groupAddHandle }} />
176202
</SheetContainerSkeleton>
177203
<SheetContainerSkeleton title="已设置的干员组" icon="cog" mini>
178204
<div>
@@ -184,10 +210,11 @@ const SheetGroup = ({
184210
existedGroup={existedGroups}
185211
existedOperator={existedOperators}
186212
groupInfo={item}
187-
editable
188213
exist={checkGroupExisted(item.name)}
189214
pinned={checkGroupPinned(item)}
190-
eventHandleProxy={eventHandleProxy}
215+
groupRemoveHandle={groupRemoveHandle}
216+
groupPinHandle={groupPinHandle}
217+
groupUpdateHandle={groupUpdateHandle}
191218
/>
192219
))}
193220
<H6 className="my-2 text-center">
@@ -210,9 +237,8 @@ const SheetGroup = ({
210237
<GroupItem
211238
key={item.name}
212239
groupInfo={item}
213-
editable={false}
214240
exist={checkGroupExisted(item.name)}
215-
eventHandleProxy={eventHandleProxy}
241+
groupAddHandle={groupAddHandle}
216242
pinned={false}
217243
/>
218244
))
@@ -226,9 +252,9 @@ const SheetGroup = ({
226252
<GroupItem
227253
key={item.name}
228254
groupInfo={item}
229-
editable={false}
230255
exist={checkGroupExisted(item.name)}
231-
eventHandleProxy={eventHandleProxy}
256+
groupAddHandle={groupAddHandle}
257+
groupPinHandle={groupPinHandle}
232258
pinned
233259
/>
234260
))
@@ -255,48 +281,6 @@ const SheetGroup = ({
255281
)
256282
}
257283

258-
const EditorGroupName = ({
259-
eventHandleProxy,
260-
}: {
261-
eventHandleProxy: GroupEventHandleType
262-
}) => {
263-
const [groupName, setGroupName] = useState('')
264-
265-
const addGroupHandle = () => {
266-
const name = groupName.trim()
267-
if (!name) {
268-
AppToaster.show({
269-
message: '干员组名不能为空',
270-
intent: Intent.DANGER,
271-
})
272-
} else {
273-
eventHandleProxy(GroupEventType.ADD, { name })
274-
setGroupName('')
275-
}
276-
}
277-
278-
return (
279-
<div className="flex px-3 items-center">
280-
<InputGroup
281-
type="text"
282-
value={groupName}
283-
placeholder="输入干员组名"
284-
onChange={(e) => setGroupName(e.target.value)}
285-
fill
286-
/>
287-
<div className="flex items-center">
288-
<Button minimal icon="tick" title="添加" onClick={addGroupHandle} />
289-
<Button
290-
minimal
291-
icon="reset"
292-
title="重置"
293-
onClick={() => setGroupName('')}
294-
/>
295-
</div>
296-
</div>
297-
)
298-
}
299-
300284
export const SheetGroupContainer: FC<SheetGroupProps> = (sheetGroupProps) => (
301285
<SheetContainerSkeleton title="设置干员组" icon="people">
302286
<SheetGroup {...sheetGroupProps} />

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

Lines changed: 18 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,7 @@ import { AppToaster } from 'components/Toaster'
88
import { OPERATORS, PROFESSIONS } from 'models/operator'
99

1010
import { EditorPerformerOperatorProps } from '../EditorPerformerOperator'
11-
import {
12-
Group,
13-
Operator,
14-
OperatorEventType,
15-
SheetSubmitEventHandleType,
16-
} from '../EditorSheet'
11+
import { Group, Operator } from '../EditorSheet'
1712
import { SheetContainerSkeleton } from './SheetContainerSkeleton'
1813
import { OperatorNoData } from './SheetNoneData'
1914
import { OperatorItem } from './SheetOperatorItem'
@@ -25,9 +20,6 @@ export interface SheetOperatorProps {
2520
removeOperator: UseFieldArrayRemove
2621
}
2722

28-
export type OperatorEventHandleType =
29-
SheetSubmitEventHandleType<OperatorEventType>
30-
3123
const defaultProf = [
3224
{
3325
id: 'all',
@@ -113,28 +105,22 @@ const SheetOperator = ({
113105
)
114106
}, [selectedSubProf, operatorsGroupedByProf, checkOperatorSelected])
115107

116-
const eventHandleProxy: OperatorEventHandleType = (type, value) => {
117-
switch (type) {
118-
case OperatorEventType.BOX: {
119-
if (checkOperatorSelected(value.name))
120-
if (existedOperators.find((item) => item.name === value.name))
121-
removeOperator(
122-
existedOperators.findIndex((item) => item._id === value._id),
123-
)
124-
else
125-
AppToaster.show({
126-
message: '该干员已被编组',
127-
intent: Intent.DANGER,
128-
})
129-
else submitOperator(value, undefined, true)
108+
const operatorSelectHandle = (operatorName: string) => {
109+
if (checkOperatorSelected(operatorName))
110+
if (existedOperators.find((item) => item.name === operatorName))
111+
removeOperator(
112+
existedOperators.findIndex(({ name }) => name === operatorName),
113+
)
114+
else
115+
AppToaster.show({
116+
message: `干员 ${operatorName} 已被编组`,
117+
intent: Intent.DANGER,
118+
})
119+
else submitOperator({ name: operatorName }, undefined, true)
120+
}
130121

131-
break
132-
}
133-
case OperatorEventType.SKILL: {
134-
submitOperator(value, undefined, true)
135-
break
136-
}
137-
}
122+
const operatorSkillHandle = (value: Operator) => {
123+
submitOperator(value, undefined, true)
138124
}
139125

140126
// pagination about
@@ -294,9 +280,10 @@ const SheetOperator = ({
294280
>
295281
<OperatorItem
296282
selected={checkOperatorSelected(operatorInfoName)}
297-
submitOperator={eventHandleProxy}
283+
onSkillChange={operatorSkillHandle}
298284
operator={operatorDetail}
299285
name={operatorInfoName}
286+
onClick={() => operatorSelectHandle(operatorInfoName)}
300287
/>
301288
</div>
302289
)

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

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ import { Card, CardProps } from '@blueprintjs/core'
33
import clsx from 'clsx'
44

55
import { OperatorAvatar } from '../EditorOperator'
6-
import { OperatorEventType } from '../EditorSheet'
76
import { SkillAboutProps, SkillAboutTrigger } from './SheetOperatorSkillAbout'
87

98
export interface OperatorItemPorps extends CardProps, SkillAboutProps {
@@ -18,10 +17,10 @@ export const OperatorItem = ({
1817
name,
1918
selected,
2019
operator,
21-
submitOperator,
2220
horizontal,
2321
scaleDisable,
2422
readOnly,
23+
onSkillChange,
2524
...cardProps
2625
}: OperatorItemPorps) => (
2726
<Card
@@ -31,9 +30,6 @@ export const OperatorItem = ({
3130
!horizontal && 'flex-col justify-center',
3231
)}
3332
interactive={!selected}
34-
onClick={() =>
35-
submitOperator?.(OperatorEventType.BOX, operator || { name })
36-
}
3733
{...cardProps}
3834
>
3935
<>
@@ -48,7 +44,7 @@ export const OperatorItem = ({
4844
</p>
4945
</>
5046
{!readOnly && selected && (
51-
<SkillAboutTrigger {...{ operator, submitOperator }} />
47+
<SkillAboutTrigger {...{ operator, onSkillChange }} />
5248
)}
5349
</Card>
5450
)

0 commit comments

Comments
 (0)