Skip to content

Commit ebf83cb

Browse files
committed
feat: individual myself button
1 parent d73db5e commit ebf83cb

File tree

2 files changed

+78
-76
lines changed

2 files changed

+78
-76
lines changed

src/components/Select.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,18 +11,20 @@ import clsx from 'clsx'
1111
interface SelectProps<T> extends Select2Props<T> {
1212
selectedItem?: T
1313
resetButtonProps?: ButtonProps
14+
canReset?: boolean
1415
onReset?: () => void
1516
}
1617

1718
export const Select = <T,>({
1819
className,
1920
selectedItem,
21+
canReset,
2022
onReset,
2123
resetButtonProps,
2224
inputProps,
2325
...props
2426
}: SelectProps<T>) => {
25-
const canReset = selectedItem !== undefined
27+
canReset ??= selectedItem !== undefined
2628

2729
return (
2830
<Label className={clsx('!flex items-center !mb-0', className)}>

src/components/UserFilter.tsx

Lines changed: 75 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import { Button, Classes, IconSize, MenuItem, Spinner } from '@blueprintjs/core'
2-
import { Classes as Popover2Classes } from '@blueprintjs/popover2'
32

43
import clsx from 'clsx'
54
import { useAtomValue } from 'jotai'
@@ -51,80 +50,81 @@ export const UserFilter: FC<UserFilterProps> = ({
5150
}, [auth.token, user, onChange])
5251

5352
return (
54-
<Select<MaaUserInfo>
55-
className={clsx('items-stretch', className)}
56-
items={users}
57-
itemListPredicate={() => (error ? [] : users)} // 有 error 时用 noResults 显示错误信息
58-
query={query}
59-
onQueryChange={(query) => updateQuery(query, false)}
60-
onReset={() => onChange(undefined)}
61-
itemsEqual={(a, b) => a.id === b.id}
62-
itemRenderer={(item, { handleClick, handleFocus, modifiers }) => (
63-
<MenuItem
64-
roleStructure="listoption"
65-
className={clsx(modifiers.active && Classes.ACTIVE)}
66-
key={item.id}
67-
text={item.userName}
68-
onClick={handleClick}
69-
onFocus={handleFocus}
70-
onMouseDown={onOptionMouseDown}
71-
selected={item === user}
72-
/>
73-
)}
74-
selectedItem={user}
75-
onItemSelect={(user) => onChange(user)}
76-
noResults={
77-
<MenuItem
78-
disabled
79-
text={
80-
isLoading
81-
? '正在搜索...'
82-
: error
83-
? '搜索失败:' + formatError(error)
84-
: query && debouncedQuery
85-
? '查无此人 (゚Д゚≡゚д゚)!?'
86-
: '输入用户名以搜索'
87-
}
88-
/>
89-
}
90-
inputProps={{
91-
placeholder: '用户名称',
92-
leftElement: isValidating ? (
93-
<Spinner className="m-[7px] mr-[9px]" size={IconSize.STANDARD} />
94-
) : undefined,
95-
rightElement: auth.token ? (
96-
<Button
97-
minimal
98-
className={clsx(
99-
!isMyself(user) &&
100-
'opacity-75 ' + Popover2Classes.POPOVER2_DISMISS,
101-
)}
102-
active={isMyself(user)}
103-
intent={isMyself(user) ? 'primary' : 'none'}
104-
onClick={() => {
105-
if (isMyself(user)) {
106-
onChange(undefined)
107-
} else {
108-
onChange(MYSELF)
109-
}
110-
}}
111-
>
112-
我自己
113-
</Button>
114-
) : undefined,
115-
}}
116-
popoverProps={{
117-
minimal: true,
118-
}}
119-
>
120-
<Button
121-
minimal
122-
className="!pl-3 !pr-2"
123-
icon="person"
124-
rightIcon="chevron-down"
53+
<>
54+
<Select<MaaUserInfo>
55+
className={clsx('items-stretch', className)}
56+
items={users}
57+
itemListPredicate={() => (error ? [] : users)} // 有 error 时用 noResults 显示错误信息
58+
query={query}
59+
onQueryChange={(query) => updateQuery(query, false)}
60+
onReset={() => onChange(undefined)}
61+
itemsEqual={(a, b) => a.id === b.id}
62+
itemRenderer={(item, { handleClick, handleFocus, modifiers }) => (
63+
<MenuItem
64+
roleStructure="listoption"
65+
className={clsx(modifiers.active && Classes.ACTIVE)}
66+
key={item.id}
67+
text={item.userName}
68+
onClick={handleClick}
69+
onFocus={handleFocus}
70+
onMouseDown={onOptionMouseDown}
71+
selected={item === user}
72+
/>
73+
)}
74+
canReset={user && !isMyself(user)}
75+
onItemSelect={(user) => onChange(user)}
76+
noResults={
77+
<MenuItem
78+
disabled
79+
text={
80+
isLoading
81+
? '正在搜索...'
82+
: error
83+
? '搜索失败:' + formatError(error)
84+
: query && debouncedQuery
85+
? '查无此人 (゚Д゚≡゚д゚)!?'
86+
: '输入用户名以搜索'
87+
}
88+
/>
89+
}
90+
inputProps={{
91+
placeholder: '用户名称',
92+
leftElement: isValidating ? (
93+
<Spinner className="m-[7px] mr-[9px]" size={IconSize.STANDARD} />
94+
) : undefined,
95+
}}
96+
popoverProps={{
97+
minimal: true,
98+
}}
12599
>
126-
{user ? user.userName : '作者'}
127-
</Button>
128-
</Select>
100+
<Button
101+
minimal
102+
className="!pl-3 !pr-2"
103+
icon="person"
104+
rightIcon="chevron-down"
105+
>
106+
{user && !isMyself(user) ? user.userName : '作者'}
107+
</Button>
108+
</Select>
109+
{!!auth.token && (
110+
<Button
111+
minimal
112+
icon="user"
113+
className="!px-3"
114+
title="查看我自己的作业"
115+
active={isMyself(user)}
116+
intent={isMyself(user) ? 'primary' : 'none'}
117+
onClick={() => {
118+
if (isMyself(user)) {
119+
onChange(undefined)
120+
} else {
121+
onChange(MYSELF)
122+
}
123+
}}
124+
>
125+
看看我的
126+
</Button>
127+
)}
128+
</>
129129
)
130130
}

0 commit comments

Comments
 (0)