|
1 | 1 | import { Button, Classes, IconSize, MenuItem, Spinner } from '@blueprintjs/core'
|
2 |
| -import { Classes as Popover2Classes } from '@blueprintjs/popover2' |
3 | 2 |
|
4 | 3 | import clsx from 'clsx'
|
5 | 4 | import { useAtomValue } from 'jotai'
|
@@ -51,80 +50,81 @@ export const UserFilter: FC<UserFilterProps> = ({
|
51 | 50 | }, [auth.token, user, onChange])
|
52 | 51 |
|
53 | 52 | 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 | + }} |
125 | 99 | >
|
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 | + </> |
129 | 129 | )
|
130 | 130 | }
|
0 commit comments