({
className,
error,
onChange,
selected,
setFilter,
users,
}: InnerAutocompleteProps<T>)
| 93 | }; |
| 94 | |
| 95 | const InnerMultiSelect = <T extends SelectedUser>({ |
| 96 | className, |
| 97 | error, |
| 98 | onChange, |
| 99 | selected, |
| 100 | setFilter, |
| 101 | users, |
| 102 | }: InnerAutocompleteProps<T>) => { |
| 103 | const [inputValue, setInputValue] = useState(""); |
| 104 | const { debounced, cancelDebounce } = useDebouncedFunction( |
| 105 | (nextFilter: string) => { |
| 106 | setFilter(nextFilter); |
| 107 | }, |
| 108 | DEBOUNCE_MS, |
| 109 | ); |
| 110 | |
| 111 | return ( |
| 112 | <div className={cn("flex flex-col gap-4", className)}> |
| 113 | <SearchField |
| 114 | className="h-12 w-full rounded-lg" |
| 115 | value={inputValue} |
| 116 | aria-label="Search users" |
| 117 | onChange={(query) => { |
| 118 | setInputValue(query); |
| 119 | debounced(query); |
| 120 | }} |
| 121 | onClear={() => { |
| 122 | cancelDebounce(); |
| 123 | setInputValue(""); |
| 124 | setFilter(""); |
| 125 | }} |
| 126 | placeholder="Search users..." |
| 127 | /> |
| 128 | <div className="h-96 w-full rounded-lg border border-border border-solid"> |
| 129 | <div className="h-full overflow-hidden p-px"> |
| 130 | <div |
| 131 | className="h-full overflow-y-auto overflow-x-hidden overscroll-contain" |
| 132 | onWheel={(event) => { |
| 133 | event.stopPropagation(); |
| 134 | }} |
| 135 | > |
| 136 | <UsersTable |
| 137 | error={error} |
| 138 | onChange={onChange} |
| 139 | selected={selected} |
| 140 | users={users} |
| 141 | /> |
| 142 | </div> |
| 143 | </div> |
| 144 | </div> |
| 145 | </div> |
| 146 | ); |
| 147 | }; |
| 148 | |
| 149 | type UsersTable<T extends SelectedUser> = { |
| 150 | error: unknown; |
nothing calls this directly
no test coverage detected