feat: TitlesFilterPanel component
All checks were successful
Build and Deploy Go App / build (push) Successful in 6m16s
Build and Deploy Go App / deploy (push) Successful in 37s

This commit is contained in:
nihonium 2025-12-04 05:52:31 +03:00
parent ab29c33f5b
commit 4dd60f3b19
Signed by: nihonium
GPG key ID: 0251623741027CFC
3 changed files with 142 additions and 6 deletions

View file

@ -8,6 +8,7 @@ import { TitleCardHorizontal } from "../../components/cards/TitleCardHorizontal"
import type { CursorObj, Title, TitleSort } from "../../api";
import { LayoutSwitch } from "../../components/LayoutSwitch/LayoutSwitch";
import { Link } from "react-router-dom";
import { type TitlesFilter, TitlesFilterPanel } from "../../components/TitlesFilterPanel/TitlesFilterPanel";
const PAGE_SIZE = 10;
@ -22,6 +23,14 @@ export default function TitlesPage() {
const [sortForward, setSortForward] = useState(true);
const [layout, setLayout] = useState<"square" | "horizontal">("square");
const [filters, setFilters] = useState<TitlesFilter>({
extSearch: false,
status: "",
rating: "",
releaseYear: "",
releaseSeason: "",
});
const fetchPage = async (cursorObj: CursorObj | null) => {
const cursorStr = cursorObj ? btoa(JSON.stringify(cursorObj)).replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '') : "";
@ -30,13 +39,14 @@ export default function TitlesPage() {
cursorStr,
sort,
sortForward,
filters.extSearch,
search.trim() || undefined,
undefined,
undefined,
undefined,
undefined,
filters.status ? [filters.status] : undefined,
filters.rating || undefined,
filters.releaseYear || undefined,
filters.releaseSeason || undefined,
PAGE_SIZE,
PAGE_SIZE,
undefined,
"all"
);
@ -73,7 +83,7 @@ export default function TitlesPage() {
};
initLoad();
}, [search, sort, sortForward]);
}, [search, sort, sortForward, filters]);
const handleLoadMore = async () => {
@ -121,6 +131,7 @@ const handleLoadMore = async () => {
setSortForward={setSortForward}
/>
</div>
<TitlesFilterPanel filters={filters} setFilters={setFilters} />
{loading && <div className="mt-20 font-medium text-black">Loading...</div>}