fix(library): reset (X) also clears sort & order, via a shared hook

The mobile ResetFiltersButton and the TV filter header each had their own
active-state and reset logic, and both ignored sort & order — so the reset
chip never appeared for a changed sort and reset never restored it.

Centralise both in useFilterReset(libraryId): the chip now reflects a
non-default sort, and reset restores SortName/Ascending and clears the
per-library persisted sort/order/filter preferences so the reset sticks.
This commit is contained in:
Gauvain
2026-06-24 23:14:55 +02:00
parent b70f644fbc
commit 8a37ec46bf
4 changed files with 101 additions and 40 deletions

View File

@@ -326,7 +326,7 @@ const page: React.FC = () => {
data={[
{
key: "reset",
component: <ResetFiltersButton />,
component: <ResetFiltersButton libraryId={collectionId} />,
},
{
key: "genre",

View File

@@ -39,6 +39,7 @@ import { TVPosterCard } from "@/components/tv/TVPosterCard";
import { useScaledTVPosterSizes } from "@/constants/TVPosterSizes";
import { useScaledTVTypography } from "@/constants/TVTypography";
import useRouter from "@/hooks/useAppRouter";
import { useFilterReset } from "@/hooks/useFilterReset";
import { useOrientation } from "@/hooks/useOrientation";
import { useRefreshLibraryOnFocus } from "@/hooks/useRefreshLibraryOnFocus";
import { useTVItemActionModal } from "@/hooks/useTVItemActionModal";
@@ -521,7 +522,7 @@ const Page = () => {
data={[
{
key: "reset",
component: <ResetFiltersButton />,
component: <ResetFiltersButton libraryId={libraryId} />,
},
{
key: "genre",
@@ -688,19 +689,9 @@ const Page = () => {
],
);
// TV Filter bar header
const hasActiveFilters =
selectedGenres.length > 0 ||
selectedYears.length > 0 ||
selectedTags.length > 0 ||
filterBy.length > 0;
const resetAllFilters = useCallback(() => {
setSelectedGenres([]);
setSelectedYears([]);
setSelectedTags([]);
_setFilterBy([]);
}, [setSelectedGenres, setSelectedYears, setSelectedTags, _setFilterBy]);
// Filter bar reset + visibility, shared with the mobile ResetFiltersButton so
// sort/order can't be forgotten on one path (it used to be reset on neither).
const { hasActiveFilters, resetAllFilters } = useFilterReset(libraryId);
// TV Filter options - with "All" option for clearable filters
const tvGenreFilterOptions = useMemo(