* feat(ui): start assist stats * feat(ui): design mock up for stats * feat(ui): naming... * feat(ui): types, api service, some changes for recs and loaders * feat(ui): csv export button/request * feat(ui): csv export button/request * feat(ui): format dates * feat(ui): some fixes for stats requests * fix(tracker): fix test * fix(tracker): fix ci build * fix(tracker): fix assist tests * fix(tracker): bump test coverage, fix minor bug * fix(ui): more cypress fixes * fix(ui): add proj id to socket connection * fix(ui): remove console log * fix(ui): update filters * feat(ui):fix some api keys for stats * feat(ui): fix type * feat(ui): remove unused * feat(ui): some fixes * feat(ui): some fixes 2 * fix(ui): some search fixes * fix(ui): change api keys * fix(ui): change api keys * fix(ui): pdf button fix * fix(ui): pdf button fix * fix(ui): some ui fixes after review * fix(ui): fix csv export * fix(ui): change header for pds export for stats * fix(ui): change header width for exports
67 lines
1.8 KiB
TypeScript
67 lines
1.8 KiB
TypeScript
import React, { useState } from 'react';
|
|
import { AutoComplete, Input } from 'antd';
|
|
import type { SelectProps } from 'antd/es/select';
|
|
import { observer } from 'mobx-react-lite';
|
|
import { useStore } from 'App/mstore';
|
|
|
|
const UserSearch = ({ onUserSelect }: { onUserSelect: (id: any) => void }) => {
|
|
const [selectedValue, setSelectedValue] = useState<string | undefined>(undefined);
|
|
const { userStore } = useStore();
|
|
const allUsers = userStore.list.map((user) => ({
|
|
value: user.userId,
|
|
label: user.name,
|
|
}));
|
|
const [options, setOptions] = useState<SelectProps<object>['options']>([]);
|
|
|
|
React.useEffect(() => {
|
|
if (userStore.list.length === 0) {
|
|
userStore.fetchUsers().then((r) => {
|
|
setOptions(
|
|
r.map((user: any) => ({
|
|
value: user.userId,
|
|
label: user.name,
|
|
}))
|
|
);
|
|
});
|
|
}
|
|
}, []);
|
|
|
|
const handleSearch = (value: string) => {
|
|
setOptions(
|
|
value ? allUsers.filter((u) => u.label.toLowerCase().includes(value.toLocaleLowerCase())) : []
|
|
);
|
|
};
|
|
|
|
const onSelect = (value?: string) => {
|
|
onUserSelect(value)
|
|
setSelectedValue(allUsers.find((u) => u.value === value)?.label || '');
|
|
};
|
|
|
|
return (
|
|
<AutoComplete
|
|
popupMatchSelectWidth={200}
|
|
style={{ width: 200 }}
|
|
options={options}
|
|
onSelect={onSelect}
|
|
onSearch={handleSearch}
|
|
value={selectedValue}
|
|
onChange={(e) => {
|
|
setSelectedValue(e)
|
|
if (!e) onUserSelect(undefined)
|
|
}}
|
|
onClear={() => onSelect(undefined)}
|
|
onDeselect={() => onSelect(undefined)}
|
|
size="small"
|
|
>
|
|
<Input.Search
|
|
allowClear
|
|
placeholder="Filter by team member name"
|
|
size={'small'}
|
|
classNames={{ input: '!border-0 focus:!border-0' }}
|
|
style={{ width: 200 }}
|
|
/>
|
|
</AutoComplete>
|
|
);
|
|
};
|
|
|
|
export default observer(UserSearch);
|