The communications platform that puts data protection first.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
Rocket.Chat/client/components/AutoCompleteDepartment.js

50 lines
1.5 KiB

import { PaginatedSelectFiltered } from '@rocket.chat/fuselage';
import { useDebouncedValue } from '@rocket.chat/fuselage-hooks';
import React, { memo, useMemo, useState } from 'react';
import { useTranslation } from '../contexts/TranslationContext';
import { useRecordList } from '../hooks/lists/useRecordList';
import { AsyncStatePhase } from '../hooks/useAsyncState';
import { useDepartmentsList } from '../views/hooks/useDepartmentsList';
const AutoCompleteDepartment = (props) => {
const { value, onlyMyDepartments = false, onChange = () => { } } = props;
const t = useTranslation();
const [departmentsFilter, setDepartmentsFilter] = useState('');
const debouncedDepartmentsFilter = useDebouncedValue(departmentsFilter, 500);
const { itemsList: departmentsList, loadMoreItems: loadMoreDepartments } = useDepartmentsList(
useMemo(() => ({ filter: debouncedDepartmentsFilter, onlyMyDepartments }), [
debouncedDepartmentsFilter,
onlyMyDepartments,
]),
);
const {
phase: departmentsPhase,
items: departmentsItems,
itemCount: departmentsTotal,
} = useRecordList(departmentsList);
return (
<PaginatedSelectFiltered
value={value}
onChange={onChange}
filter={departmentsFilter}
setFilter={setDepartmentsFilter}
options={departmentsItems}
maxWidth='100%'
placeholder={t('Select_an_option')}
flexGrow={1}
endReached={
departmentsPhase === AsyncStatePhase.LOADING
? () => { }
: (start) => loadMoreDepartments(start, Math.min(50, departmentsTotal))
}
/>
);
};
export default memo(AutoCompleteDepartment);