From 0af9482be961c00139894574a48a552c56e8ca5d Mon Sep 17 00:00:00 2001 From: Rishi Ghan Date: Tue, 24 Feb 2026 15:48:38 -0500 Subject: [PATCH] =?UTF-8?q?=F0=9F=93=9D=20State=20issue=20fixes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/client/components/Dashboard/PullList.tsx | 42 +++++++-- src/client/components/Import/Import.tsx | 89 ++++++++++++++------ src/client/components/Search/Search.tsx | 7 +- 3 files changed, 107 insertions(+), 31 deletions(-) diff --git a/src/client/components/Dashboard/PullList.tsx b/src/client/components/Dashboard/PullList.tsx index 86add52..346c878 100644 --- a/src/client/components/Dashboard/PullList.tsx +++ b/src/client/components/Dashboard/PullList.tsx @@ -9,9 +9,9 @@ import { Link } from "react-router-dom"; import axios from "axios"; import rateLimiter from "axios-rate-limit"; import { setupCache } from "axios-cache-interceptor"; -import { useQuery } from "@tanstack/react-query"; +import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"; import useEmblaCarousel from "embla-carousel-react"; -import { COMICVINE_SERVICE_URI } from "../../constants/endpoints"; +import { COMICVINE_SERVICE_URI, LIBRARY_SERVICE_BASE_URI } from "../../constants/endpoints"; import { Field, Form } from "react-final-form"; import DatePickerDialog from "../shared/DatePicker"; import { format } from "date-fns"; @@ -27,6 +27,8 @@ const http = rateLimiter(axios.create(), { }); const cachedAxios = setupCache(axios); export const PullList = (): ReactElement => { + const queryClient = useQueryClient(); + // datepicker const date = new Date(); const [inputValue, setInputValue] = useState( @@ -55,8 +57,38 @@ export const PullList = (): ReactElement => { }), queryKey: ["pullList", inputValue], }); - const addToLibrary = (sourceName: string, locgMetadata) => - importToDB(sourceName, { locg: locgMetadata }); + + const { mutate: addToLibrary } = useMutation({ + mutationFn: async ({ sourceName, metadata }: { sourceName: string; metadata: any }) => { + const comicBookMetadata = { + importType: "new", + payload: { + rawFileDetails: { + name: "", + }, + importStatus: { + isImported: true, + tagged: false, + matchedResult: { + score: "0", + }, + }, + sourcedMetadata: metadata || null, + acquisition: { source: { wanted: true, name: sourceName } }, + }, + }; + + return await axios.request({ + url: `${LIBRARY_SERVICE_BASE_URI}/rawImportToDb`, + method: "POST", + data: comicBookMetadata, + }); + }, + onSuccess: () => { + // Invalidate and refetch wanted comics queries + queryClient.invalidateQueries({ queryKey: ["wantedComics"] }); + }, + }); const next = () => { // sliderRef.slickNext(); @@ -135,7 +167,7 @@ export const PullList = (): ReactElement => {
- ))} + {(importJobQueue.status === "drained" || + importJobQueue.status === undefined) && ( + + )}
{/* Activity */} @@ -230,6 +263,9 @@ export const Import = (props: IProps): ReactElement => { + @@ -246,9 +282,12 @@ export const Import = (props: IProps): ReactElement => { - {data?.data.map((jobResult, id) => { + {data?.data.map((jobResult: any, index: number) => { return ( - + +
+ # + Time Started
+ {index + 1} + {format( new Date(jobResult.earliestTimestamp), diff --git a/src/client/components/Search/Search.tsx b/src/client/components/Search/Search.tsx index d755bcb..1773b5d 100644 --- a/src/client/components/Search/Search.tsx +++ b/src/client/components/Search/Search.tsx @@ -10,7 +10,7 @@ import { useTranslation } from "react-i18next"; import "../../shared/utils/i18n.util"; import PopoverButton from "../shared/PopoverButton"; import dayjs from "dayjs"; -import { useMutation } from "@tanstack/react-query"; +import { useMutation, useQueryClient } from "@tanstack/react-query"; import { COMICVINE_SERVICE_URI, LIBRARY_SERVICE_BASE_URI, @@ -20,6 +20,7 @@ import axios from "axios"; interface ISearchProps {} export const Search = ({}: ISearchProps): ReactElement => { + const queryClient = useQueryClient(); const formData = { search: "", }; @@ -138,6 +139,10 @@ export const Search = ({}: ISearchProps): ReactElement => { }, }); }, + onSuccess: () => { + // Invalidate and refetch wanted comics queries + queryClient.invalidateQueries({ queryKey: ["wantedComics"] }); + }, }); const addToLibrary = (sourceName: string, comicData) =>