add ListSearchInput component

This commit is contained in:
jeffvli
2025-10-13 18:44:29 -07:00
parent b6bbef3557
commit 1efd39de72
3 changed files with 16 additions and 7 deletions
@@ -5,7 +5,7 @@ import { useListContext } from '/@/renderer/context/list-context';
import { AlbumListHeaderFilters } from '/@/renderer/features/albums/components/album-list-header-filters'; import { AlbumListHeaderFilters } from '/@/renderer/features/albums/components/album-list-header-filters';
import { FilterBar } from '/@/renderer/features/shared/components/filter-bar'; import { FilterBar } from '/@/renderer/features/shared/components/filter-bar';
import { LibraryHeaderBar } from '/@/renderer/features/shared/components/library-header-bar'; import { LibraryHeaderBar } from '/@/renderer/features/shared/components/library-header-bar';
import { SearchInput } from '/@/renderer/features/shared/components/search-input'; import { ListSearchInput } from '/@/renderer/features/shared/components/list-search-input';
import { Group } from '/@/shared/components/group/group'; import { Group } from '/@/shared/components/group/group';
import { Stack } from '/@/shared/components/stack/stack'; import { Stack } from '/@/shared/components/stack/stack';
@@ -30,7 +30,7 @@ export const AlbumListHeader = ({ title }: AlbumListHeaderProps) => {
</LibraryHeaderBar.Badge> </LibraryHeaderBar.Badge>
</LibraryHeaderBar> </LibraryHeaderBar>
<Group> <Group>
<SearchInput /> <ListSearchInput />
</Group> </Group>
</PageHeader> </PageHeader>
<FilterBar> <FilterBar>
@@ -0,0 +1,10 @@
import { SearchInput } from '/@/renderer/features/shared/components/search-input';
import { useSearchTermFilter } from '/@/renderer/features/shared/hooks/use-search-term-filter';
export const ListSearchInput = () => {
const { searchTerm, setSearchTerm } = useSearchTermFilter();
return (
<SearchInput defaultValue={searchTerm} onChange={(e) => setSearchTerm(e.target.value)} />
);
};
@@ -1,4 +1,4 @@
import { useDebouncedValue } from '@mantine/hooks'; import { useDebouncedCallback } from '@mantine/hooks';
import { parseAsString, useQueryState } from 'nuqs'; import { parseAsString, useQueryState } from 'nuqs';
import { FILTER_KEYS } from '/@/renderer/features/shared/utils'; import { FILTER_KEYS } from '/@/renderer/features/shared/utils';
@@ -9,11 +9,10 @@ export const useSearchTermFilter = (defaultValue?: string) => {
defaultValue ? parseAsString.withDefault(defaultValue) : parseAsString, defaultValue ? parseAsString.withDefault(defaultValue) : parseAsString,
); );
const [debouncedSearchTerm] = useDebouncedValue(searchTerm, 300); const debouncedSetSearchTerm = useDebouncedCallback(setSearchTerm, 300);
return { return {
[FILTER_KEYS.SHARED.SEARCH_TERM]: debouncedSearchTerm ?? undefined, [FILTER_KEYS.SHARED.SEARCH_TERM]: searchTerm ?? undefined,
rawSearchTerm: searchTerm ?? undefined, setSearchTerm: debouncedSetSearchTerm,
setSearchTerm,
}; };
}; };