From 44755675e5e26edf66b0645d589746dfd7404a3b Mon Sep 17 00:00:00 2001 From: glax Date: Tue, 1 Apr 2025 18:10:30 +0200 Subject: [PATCH] LocalLibrary Select in Manga Search --- tranga-website/src/Components/Manga.tsx | 2 +- tranga-website/src/Components/Search.tsx | 59 ++++++++++++++++++++---- 2 files changed, 51 insertions(+), 10 deletions(-) diff --git a/tranga-website/src/Components/Manga.tsx b/tranga-website/src/Components/Manga.tsx index cc53b0e..9a7a411 100644 --- a/tranga-website/src/Components/Manga.tsx +++ b/tranga-website/src/Components/Manga.tsx @@ -59,7 +59,7 @@ export function Manga({manga, children} : { manga: IManga | undefined, children? position: "relative", } - const interactiveElements = ["button", "input", "textarea", "a"]; + const interactiveElements = ["button", "input", "textarea", "a", "select", "option", "li"]; return ( diff --git a/tranga-website/src/Components/Search.tsx b/tranga-website/src/Components/Search.tsx index ab34ef1..0e8a81d 100644 --- a/tranga-website/src/Components/Search.tsx +++ b/tranga-website/src/Components/Search.tsx @@ -1,15 +1,19 @@ import { - Avatar, Button, Chip, + Avatar, + Button, + Chip, + CircularProgress, Drawer, Input, ListItemDecorator, Option, - Select, - SelectOption, - Skeleton, Stack, + Select, SelectOption, + Skeleton, + Stack, Step, StepIndicator, - Stepper, Typography + Stepper, + Typography } from "@mui/joy"; import ModalClose from "@mui/joy/ModalClose"; import IMangaConnector from "../api/types/IMangaConnector"; @@ -22,6 +26,9 @@ import {Manga} from "./Manga.tsx"; import Add from "@mui/icons-material/Add"; import React from "react"; import {CreateDownloadAvailableChaptersJob} from "../api/Job.tsx"; +import ILocalLibrary from "../api/types/ILocalLibrary.ts"; +import {GetLibraries} from "../api/LocalLibrary.tsx"; +import { LibraryBooks } from "@mui/icons-material"; export default function Search({open, setOpen}:{open:boolean, setOpen:React.Dispatch>}){ @@ -32,10 +39,10 @@ export default function Search({open, setOpen}:{open:boolean, setOpen:React.Disp const [mangaConnectorsLoading, setMangaConnectorsLoading] = useState(true); const [selectedMangaConnector, setSelectedMangaConnector] = useState(); - useEffect(() => { + const loadMangaConnectors = useCallback(() => { setMangaConnectorsLoading(true); GetAllConnectors(apiUri).then(setMangaConnectors).finally(() => setMangaConnectorsLoading(false)); - },[apiUri]) + }, [apiUri]); const [results, setResults] = useState([]); const [resultsLoading, setResultsLoading] = useState(false); @@ -48,6 +55,25 @@ export default function Search({open, setOpen}:{open:boolean, setOpen:React.Disp SearchNameOnConnector(apiUri, mangaConnector.name, value).then(setResults).finally(() => setResultsLoading(false)); },[apiUri]) + const [localLibraries, setLocalLibraries] = useState(); + const [localLibrariesLoading, setLocalLibrariesLoading] = useState(true); + const [selectedLibraryId, setSelectedLibraryId] = useState(); + + const loadLocalLibraries = useCallback(() => { + setLocalLibrariesLoading(true); + GetLibraries(apiUri).then(setLocalLibraries).finally(() => setLocalLibrariesLoading(false)); + }, [apiUri]); + + useEffect(() => { + loadMangaConnectors(); + loadLocalLibraries(); + },[apiUri]); + + useEffect(() => { + loadMangaConnectors(); + loadLocalLibraries(); + }, []); + function renderValue(option: SelectOption | null) { if (!option) { return null; @@ -63,6 +89,7 @@ export default function Search({open, setOpen}:{open:boolean, setOpen:React.Disp ); } + // @ts-ignore return ( { setStep(2); @@ -118,8 +145,22 @@ export default function Search({open, setOpen}:{open:boolean, setOpen:React.Disp {results.map((result) => - )}