Skip to content

Commit 9df7256

Browse files
author
GeorgeZhang2035
committed
temp storage
1 parent 8bd95e3 commit 9df7256

File tree

5 files changed

+214
-113
lines changed

5 files changed

+214
-113
lines changed
Lines changed: 76 additions & 100 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,20 @@
1-
import {
2-
Alert,
3-
Button,
4-
Divider,
5-
H5,
6-
H6,
7-
InputGroup,
8-
Intent,
9-
} from '@blueprintjs/core'
1+
import { Button, Divider, H6, InputGroup, Intent } from '@blueprintjs/core'
102

11-
import { useAtom } from 'jotai'
3+
import { useAtomValue } from 'jotai'
124
import { FC, useMemo, useState } from 'react'
135

146
import { AppToaster } from 'components/Toaster'
157
import { OPERATORS, PROFESSIONS } from 'models/operator'
168
import { favGroupAtom } from 'store/useFavGroups'
179

18-
import { Group } from '../EditorSheet'
19-
import { SheetContainerSkeleton } from './SheetContainerSkeleton'
10+
import { Group, Operator } from '../EditorSheet'
11+
import {
12+
SheetContainerSkeleton,
13+
SheetContainerSkeletonProps,
14+
} from './SheetContainerSkeleton'
2015
import { GroupNoData } from './SheetNoneData'
2116
import { useSheet } from './SheetProvider'
22-
import { SheetGroupItem } from './sheetGroup/SheetGroupItem'
17+
import { SheetGroupItem, SheetGroupItemProp } from './sheetGroup/SheetGroupItem'
2318

2419
export interface SheetGroupProps {}
2520

@@ -73,46 +68,32 @@ const EditorGroupName: FC = () => {
7368
const SheetGroup: FC<SheetGroupProps> = () => {
7469
const { existedGroups, existedOperators } = useSheet()
7570

76-
const [coverGroup, setCoverGroup] = useState<Group>()
77-
78-
const defaultGroup = useMemo<Group[]>(() => {
79-
const result: Group[] = []
80-
PROFESSIONS.forEach((proItem) => {
81-
proItem.sub?.forEach((subProItem) => {
82-
const operators = existedOperators.filter(
83-
(opItem) =>
84-
OPERATORS.find((opInfoItem) => opInfoItem.name === opItem.name)
85-
?.subProf === subProItem.id,
86-
)
87-
if (operators.length) {
88-
const groupName = proItem.name + '-' + subProItem.name
89-
if (!existedGroups.find(({ name }) => name === groupName))
90-
result.push({
91-
name: groupName,
92-
opers: operators,
93-
})
94-
}
95-
})
96-
})
97-
const otherOperators = existedOperators.filter(
98-
(opItem) =>
99-
!OPERATORS.find((opInfoItem) => opInfoItem.name === opItem.name),
100-
)
101-
if (otherOperators.length)
102-
result.push({
103-
name: '其它',
104-
opers: otherOperators,
105-
})
106-
return result
107-
}, [existedOperators, existedGroups])
108-
109-
const updateFavGroup = (value: Group) =>
110-
setFavGroups([
111-
...[...favGroups].filter(({ name }) => name !== value.name),
112-
{ ...value },
113-
])
71+
const defaultGroup = useMemo<Group[]>(
72+
() =>
73+
Object.entries(
74+
existedOperators.reduce(
75+
(acc, { name, ...rest }) => {
76+
const { prof = '', subProf = '' } =
77+
OPERATORS.find(({ name: OPERName }) => OPERName === name) || {}
78+
const profInfo = PROFESSIONS.find(({ id }) => id === prof)
79+
const subProfName = profInfo?.sub?.find(
80+
({ id }) => id === subProf,
81+
)?.name
82+
const key = (profInfo?.name || '其它') + '-' + (subProfName || '')
83+
if (!acc[key]) acc[key] = []
84+
acc[key].push({ name, ...rest })
85+
return acc
86+
},
87+
{} as Record<string, Operator[]>,
88+
),
89+
).map(([key, value]) => ({
90+
name: key,
91+
opers: value,
92+
})),
93+
[existedOperators],
94+
)
11495

115-
const [favGroups, setFavGroups] = useAtom(favGroupAtom)
96+
const favGroups = useAtomValue(favGroupAtom)
11697

11798
return (
11899
<>
@@ -127,60 +108,38 @@ const SheetGroup: FC<SheetGroupProps> = () => {
127108
>
128109
<EditorGroupName />
129110
</SheetContainerSkeleton>
130-
<SheetContainerSkeleton title="已设置的干员组" icon="cog" mini>
131-
<div>
132-
{existedGroups.length ? (
133-
<>
134-
{existedGroups.map((item) => (
135-
<SheetGroupItem groupInfo={item} itemType="selected" />
136-
))}
137-
<H6 className="my-2 text-center">
138-
已显示全部 {existedGroups.length} 个干员组
139-
</H6>
140-
</>
141-
) : (
142-
GroupNoData
143-
)}
144-
</div>
145-
</SheetContainerSkeleton>
111+
<SheetGroupItemsWithSkeleton
112+
title="已设置的干员组"
113+
icon="cog"
114+
mini
115+
groups={existedGroups}
116+
itemType="selected"
117+
/>
118+
{!!existedGroups.length && (
119+
<H6 className="my-2 text-center">
120+
已显示全部 {existedGroups.length} 个干员组
121+
</H6>
122+
)}
146123
</div>
147124
</div>
148125
<Divider />
149126
<div className="flex-1">
150-
<SheetContainerSkeleton title="推荐分组" icon="thumbs-up" mini>
151-
<div>
152-
{defaultGroup.length
153-
? defaultGroup.map((item) => (
154-
<SheetGroupItem groupInfo={item} itemType="recommend" />
155-
))
156-
: GroupNoData}
157-
</div>
158-
</SheetContainerSkeleton>
159-
<SheetContainerSkeleton title="收藏分组" icon="star" mini>
160-
<div>
161-
{favGroups.length
162-
? favGroups.map((item) => (
163-
<SheetGroupItem groupInfo={item} itemType="fav" />
164-
))
165-
: GroupNoData}
166-
</div>
167-
</SheetContainerSkeleton>
127+
<SheetGroupItemsWithSkeleton
128+
title="推荐分组"
129+
icon="thumbs-up"
130+
mini
131+
groups={defaultGroup}
132+
itemType="recommend"
133+
/>
134+
<SheetGroupItemsWithSkeleton
135+
title="收藏分组"
136+
icon="star"
137+
mini
138+
groups={favGroups}
139+
itemType="fav"
140+
/>
168141
</div>
169142
</div>
170-
<Alert
171-
isOpen={!!coverGroup}
172-
confirmButtonText="是"
173-
cancelButtonText="否"
174-
icon="error"
175-
intent={Intent.DANGER}
176-
onConfirm={() => updateFavGroup(coverGroup as Group)}
177-
onClose={() => setCoverGroup(undefined)}
178-
>
179-
<div>
180-
<H5>收藏干员组: </H5>
181-
<p>检测到同名的已收藏干员组 {coverGroup?.name},是否覆盖?</p>
182-
</div>
183-
</Alert>
184143
</>
185144
)
186145
}
@@ -190,3 +149,20 @@ export const SheetGroupContainer: FC<SheetGroupProps> = () => (
190149
<SheetGroup />
191150
</SheetContainerSkeleton>
192151
)
152+
153+
const SheetGroupItemsWithSkeleton: FC<
154+
SheetContainerSkeletonProps & {
155+
groups: SheetGroupItemProp['groupInfo'][]
156+
itemType: SheetGroupItemProp['itemType']
157+
}
158+
> = ({ groups, itemType, ...sheetContainerSkeletonProps }) => (
159+
<SheetContainerSkeleton {...sheetContainerSkeletonProps}>
160+
<div>
161+
{groups.length
162+
? groups.map((item) => (
163+
<SheetGroupItem groupInfo={item} itemType={itemType} />
164+
))
165+
: GroupNoData}
166+
</div>
167+
</SheetContainerSkeleton>
168+
)

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

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,6 @@ import { EditorPerformerGroupProps } from '../EditorPerformerGroup'
55
import { EditorPerformerOperatorProps } from '../EditorPerformerOperator'
66
import { Group, Operator } from '../EditorSheet'
77

8-
export interface OperatorInSheet {}
9-
108
export interface SheetProviderProp {
119
submitOperator: EditorPerformerOperatorProps['submit']
1210
existedOperators: Operator[]

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ export const OperatorInGroupItem: FC<OperatorInGroupItemProp> = ({
1515
onOperatorSkillChange,
1616
operatorInfo: { name, ...restField },
1717
}) => (
18-
<Card className="flex items-center w-full h-full justify-between">
18+
<Card className="flex items-center mb-1 w-full h-full justify-between">
1919
<>
2020
<div className="flex items-center">
2121
<OperatorAvatar name={name} size="large" />

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

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import { Popover2 } from '@blueprintjs/popover2'
1313

1414
import clsx from 'clsx'
1515
import { useAtom } from 'jotai'
16-
import { isEqual, omit } from 'lodash-es'
16+
import { cloneDeep, isEqual, omit } from 'lodash-es'
1717
import { FC, ReactNode, useRef, useState } from 'react'
1818
import { useForm } from 'react-hook-form'
1919

@@ -33,6 +33,7 @@ import {
3333
SheetGroupOperatorSelectProp,
3434
SheetGroupOperatorSelectTrigger,
3535
} from './SheetGroupOperatorSelect'
36+
import { SheetOperatorEditor } from './SheetOperatorEditor'
3637

3738
export interface GroupItemProps
3839
extends SheetGroupOperatorSelectProp,
@@ -293,13 +294,7 @@ export const SheetGroupItem: FC<SheetGroupItemProp> = ({
293294
/>
294295
))
295296
: OperatorNoData}
296-
{/* {editable && (
297-
<SheetGroupOperatorSelectTrigger
298-
groupInfo={groupInfo}
299-
groupUpdateHandle={groupUpdateHandle}
300-
{...rest}
301-
/>
302-
)} */}
297+
{selected && <SheetOperatorEditor {...groupInfo} />}
303298
</div>
304299
</Collapse>
305300
</Card>
@@ -329,10 +324,13 @@ const useSheetGroupItemController = ({
329324
const pinned = isEqual({ name, opers }, findFavByName)
330325

331326
const onPinChange: GroupPinOptionProp['onPinChange'] = () => {
327+
const newFavGroup = [
328+
...favGroup.filter(({ name: nameInFav }) => nameInFav !== name),
329+
]
332330
setFavGroup(
333331
pinned
334-
? favGroup.filter(({ name: nameInFav }) => nameInFav !== name)
335-
: [...favGroup, { name, opers, ...rest }],
332+
? newFavGroup
333+
: [...newFavGroup, cloneDeep({ name, opers, ...rest })],
336334
)
337335
}
338336
return {

0 commit comments

Comments
 (0)