feat: update ProductSelect to use server-side search value for improved filtering

This commit is contained in:
2025-09-07 00:02:29 +03:00
parent 7a052f7422
commit 6e19d98f81

View File

@@ -16,7 +16,8 @@ type Props = Omit<ObjectSelectProps<ProductSchema>, "data"> & RestProps;
const ProductSelect: FC<Props> = (props: Props) => {
const [searchValue, setSearchValue] = useState("");
const [debounced] = useDebouncedValue(searchValue, 500);
const [searchValueServer, setSearchValueServer] = useState("");
const [debounced] = useDebouncedValue(searchValueServer, 500);
const { products, isLoading } = useProductsList({
clientId: props.clientId,
searchInput: debounced,
@@ -37,19 +38,22 @@ const ProductSelect: FC<Props> = (props: Props) => {
return filterProducts(search).map(product => ({ label: product.name, value: product.id.toString() }));
};
const setSearchValueImpl = (value: string) => {
value = value.toLowerCase().trim();
if (!value) return;
if (filterProducts(value)) return;
setSearchValue(value);
const filtered = filterProducts(value);
if (filtered && filtered.length > 0) {
return;
}
setSearchValueServer(value);
};
return (
<ObjectSelect
rightSection={
isLoading || searchValue !== debounced ? (
isLoading? (
<Loader size={"sm"} />
) : null
}
searchValue={searchValue}
onSearchChange={setSearchValueImpl}
renderOption={getRenderOptions(products)}
searchable