import React, { useEffect } from 'react';
import { ComboBox, InlineNotification, SelectSkeleton, Column, TextInput } from '@carbon/react';
import { Controller, useFormContext } from 'react-hook-form';
import { useTranslation } from 'react-i18next';
import { type User } from '../../../core/api/types/identity/User';
import { useDebounce } from '../../../core/hooks/debounce-hook';
import { otherUser } from '../../../core/utils/utils';
import { useUser } from '../../../stock-lookups/stock-lookups.resource';
import useSearchUser from '../hooks/useSearchUser';
const UsersSelector = () => {
const { isLoading, userList, setSearchString } = useSearchUser();
const { t } = useTranslation();
const debouncedSearch = useDebounce((query: string) => {
setSearchString(query);
}, 1000);
const form = useFormContext<{ responsiblePersonUuid: string; responsiblePersonOther: string }>();
const observableresponsiblePersonUuid = form.watch('responsiblePersonUuid');
const observableresponsiblePersonOther = form.watch('responsiblePersonOther');
const {
data,
isLoading: isLoadingUser,
error: userError,
} = useUser(observableresponsiblePersonUuid ?? null, 'custom:(uuid,display,person:(uuid,display))');
useEffect(() => {
// Whenever person uuid changes and not equal to other person, the other is reset to initial default value
if (observableresponsiblePersonUuid && observableresponsiblePersonUuid !== otherUser.uuid) {
form.resetField('responsiblePersonOther');
}
}, [observableresponsiblePersonUuid, form]);
if (isLoadingUser && observableresponsiblePersonUuid !== otherUser.uuid && observableresponsiblePersonUuid)
return ;
if (observableresponsiblePersonUuid && observableresponsiblePersonUuid !== otherUser.uuid && userError)
return (
);
return (
(
{
field.onChange(data.selectedItem?.uuid);
}}
initialSelectedItem={
field.value
? field.value === otherUser.uuid
? otherUser
: data
: observableresponsiblePersonOther && !observableresponsiblePersonUuid
? otherUser
: ''
}
itemToString={(item) => (typeof item === 'string' ? item : item?.person?.display || '')}
onInputChange={debouncedSearch}
placeholder={t('filter', 'Filter...')}
invalid={!!error?.message}
invalidText={error?.message}
ref={field.ref}
/>
)}
/>
{(observableresponsiblePersonUuid === otherUser.uuid ||
(observableresponsiblePersonOther && !observableresponsiblePersonUuid)) && (
(
)}
/>
)}
// {isLoading && }
);
};
export default UsersSelector;