Skip to content

Commit e3cd8f5

Browse files
author
gemini2035
committed
feat: ui of operator selector completed
1 parent 5d1c634 commit e3cd8f5

File tree

5 files changed

+98
-452
lines changed

5 files changed

+98
-452
lines changed

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

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,10 @@ const SheetGroup: FC<SheetGroupProps> = () => {
7979
const subProfName = profInfo?.sub?.find(
8080
({ id }) => id === subProf,
8181
)?.name
82-
const key = (profInfo?.name || '其它') + '-' + (subProfName || '')
82+
const key =
83+
(profInfo?.name || '其它') +
84+
(profInfo?.name ? '-' : '') +
85+
(subProfName || '')
8386
if (!acc[key]) acc[key] = []
8487
acc[key].push({ name, ...rest })
8588
return acc
@@ -160,7 +163,11 @@ const SheetGroupItemsWithSkeleton: FC<
160163
<div>
161164
{groups.length
162165
? groups.map((item) => (
163-
<SheetGroupItem groupInfo={item} itemType={itemType} />
166+
<SheetGroupItem
167+
key={item.name}
168+
groupInfo={item}
169+
itemType={itemType}
170+
/>
164171
))
165172
: GroupNoData}
166173
</div>
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import { Button, ButtonProps } from '@blueprintjs/core'
2+
3+
import { FC } from 'react'
4+
5+
import { Group, Operator } from '../../EditorSheet'
6+
import { GroupListModifyProp } from '../SheetGroup'
7+
8+
export interface SheetGroupOperatorSelectProp {
9+
existedOperator?: Operator[]
10+
existedGroup?: Group[]
11+
groupInfo: Group
12+
groupUpdateHandle?: GroupListModifyProp['groupUpdateHandle']
13+
}
14+
15+
interface CollapseButtonProps {
16+
isCollapse: boolean
17+
onClick: ButtonProps['onClick']
18+
}
19+
20+
export const CollapseButton: FC<CollapseButtonProps> = ({
21+
isCollapse,
22+
onClick,
23+
}) => (
24+
<Button
25+
icon={isCollapse ? 'collapse-all' : 'expand-all'}
26+
title={`${isCollapse ? '折叠' : '展开'}所包含干员`}
27+
minimal
28+
className="cursor-pointer ml-1"
29+
onClick={onClick}
30+
/>
31+
)

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

Lines changed: 1 addition & 111 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import {
44
Card,
55
Collapse,
66
Icon,
7-
IconName,
87
Intent,
98
Menu,
109
MenuItem,
@@ -24,15 +23,11 @@ import { Group, Operator } from '../../EditorSheet'
2423
import { GroupListModifyProp } from '../SheetGroup'
2524
import { OperatorNoData } from '../SheetNoneData'
2625
import { useSheet } from '../SheetProvider'
26+
import { CollapseButton, SheetGroupOperatorSelectProp } from './CollapseButton'
2727
import {
2828
OperatorInGroupItem,
2929
OperatorInGroupItemProp,
3030
} from './OperatorInGroupItem'
31-
import {
32-
CollapseButton,
33-
SheetGroupOperatorSelectProp,
34-
SheetGroupOperatorSelectTrigger,
35-
} from './SheetGroupOperatorSelect'
3631
import { SheetOperatorEditor } from './SheetOperatorEditor'
3732

3833
export interface GroupItemProps
@@ -42,111 +37,6 @@ export interface GroupItemProps
4237
pinned: boolean
4338
}
4439

45-
export const GroupItem = ({
46-
groupInfo,
47-
exist,
48-
pinned,
49-
groupAddHandle,
50-
groupRemoveHandle,
51-
groupPinHandle,
52-
groupUpdateHandle,
53-
...rest
54-
}: GroupItemProps) => {
55-
const editable = typeof groupRemoveHandle === 'function'
56-
const [showOperators, setShowOperators] = useState(editable)
57-
58-
const renameEventHandle = (name: string) =>
59-
groupUpdateHandle?.({ ...groupInfo, name })
60-
61-
const changeGroupedOperatorSkillHandle = (value: Operator) => {
62-
// deep copy
63-
const groupInfoCopy = JSON.parse(JSON.stringify(groupInfo))
64-
groupInfoCopy.opers![
65-
groupInfoCopy.opers!.findIndex(({ name }) => name === value.name)
66-
] = value
67-
groupUpdateHandle?.(groupInfoCopy)
68-
}
69-
70-
const OperatorsPart = (
71-
<Collapse isOpen={showOperators}>
72-
<div className="w-full pt-1">
73-
{groupInfo.opers?.length
74-
? groupInfo.opers?.map((item) => (
75-
<OperatorInGroupItem
76-
key={item.name}
77-
operatorInfo={item}
78-
onOperatorSkillChange={changeGroupedOperatorSkillHandle}
79-
/>
80-
))
81-
: !editable && OperatorNoData}
82-
{editable && (
83-
<SheetGroupOperatorSelectTrigger
84-
groupInfo={groupInfo}
85-
groupUpdateHandle={groupUpdateHandle}
86-
{...rest}
87-
/>
88-
)}
89-
</div>
90-
</Collapse>
91-
)
92-
93-
const pinText = pinned ? `从收藏分组中移除` : `添加至收藏分组`
94-
const pinIcon: IconName = pinned ? 'star' : 'star-empty'
95-
96-
return (
97-
<Card interactive={!exist} className="mt-1 mx-0.5">
98-
<div className="flex items-center">
99-
<GroupTitle
100-
groupTitle={groupInfo.name}
101-
editable={editable}
102-
renameSubmit={renameEventHandle}
103-
/>
104-
<div className="ml-auto flex items-center">
105-
<CollapseButton
106-
isCollapse={showOperators}
107-
onClick={() => setShowOperators(!showOperators)}
108-
/>
109-
{editable ? (
110-
<CardDeleteOption
111-
className="cursor-pointer"
112-
onClick={() => groupRemoveHandle?.(groupInfo._id || '')}
113-
/>
114-
) : (
115-
<Button
116-
minimal
117-
icon={exist ? 'tick' : 'arrow-left'}
118-
title={exist ? '已选择' : '使用该推荐分组'}
119-
onClick={() => groupAddHandle?.(groupInfo)}
120-
/>
121-
)}
122-
{(editable || pinned) && (
123-
<Popover2
124-
disabled={!pinned}
125-
content={
126-
<Menu className="p-0">
127-
<MenuItem
128-
text={pinText}
129-
icon={pinIcon}
130-
onClick={() => groupPinHandle?.(groupInfo)}
131-
/>
132-
</Menu>
133-
}
134-
>
135-
<Button
136-
minimal
137-
icon={pinIcon}
138-
title={pinText}
139-
onClick={pinned ? undefined : () => groupPinHandle?.(groupInfo)}
140-
/>
141-
</Popover2>
142-
)}
143-
</div>
144-
</div>
145-
{OperatorsPart}
146-
</Card>
147-
)
148-
}
149-
15040
const GroupTitle = ({
15141
groupTitle,
15242
// editable,

0 commit comments

Comments
 (0)