From 5385dfd918ca2a8d6616b827bcbb860960e08d37 Mon Sep 17 00:00:00 2001 From: glax Date: Wed, 2 Apr 2025 01:04:37 +0200 Subject: [PATCH] Request Limits Reset --- .../src/Components/Settings/RequestLimits.tsx | 63 ++++++++++++++++--- 1 file changed, 54 insertions(+), 9 deletions(-) diff --git a/tranga-website/src/Components/Settings/RequestLimits.tsx b/tranga-website/src/Components/Settings/RequestLimits.tsx index 708226b..92b9f84 100644 --- a/tranga-website/src/Components/Settings/RequestLimits.tsx +++ b/tranga-website/src/Components/Settings/RequestLimits.tsx @@ -1,16 +1,26 @@ import IBackendSettings from "../../api/types/IBackendSettings.ts"; import {useCallback, useContext, useState} from "react"; import {ApiUriContext} from "../../api/fetchApi.tsx"; -import {Accordion, AccordionDetails, AccordionSummary, ColorPaletteProp, Input, Stack, Typography} from "@mui/joy"; +import { + Accordion, + AccordionDetails, + AccordionSummary, + Button, + ColorPaletteProp, + Input, + Stack, + Typography +} from "@mui/joy"; import {RequestLimitType} from "../../api/types/EnumRequestLimitType.ts"; -import {UpdateRequestLimit} from "../../api/BackendSettings.tsx"; +import {ResetRequestLimit, ResetRequestLimits, UpdateRequestLimit} from "../../api/BackendSettings.tsx"; +import {Restore} from "@mui/icons-material"; export default function RequestLimits({backendSettings}: {backendSettings?: IBackendSettings}) { const apiUri = useContext(ApiUriContext); const [color, setColor] = useState("neutral"); const [loading, setLoading] = useState(false); - const Update = useCallback((target: HTMLInputElement, limit : RequestLimitType) => { + const Update = useCallback((target: HTMLInputElement, limit: RequestLimitType) => { setLoading(true); UpdateRequestLimit(apiUri, limit, Number.parseInt(target.value)) .then(() => setColor("success")) @@ -18,18 +28,53 @@ export default function RequestLimits({backendSettings}: {backendSettings?: IBac .finally(() => setLoading(false)); },[apiUri]) + const Reset = useCallback((limit: RequestLimitType) => { + setLoading(true); + ResetRequestLimit(apiUri, limit) + .then(() => setColor("success")) + .catch(() => setColor("danger")) + .finally(() => setLoading(false)); + }, [apiUri]); + + const ResetAll = useCallback(() => { + setLoading(true); + ResetRequestLimits(apiUri) + .then(() => setColor("success")) + .catch(() => setColor("danger")) + .finally(() => setLoading(false)); + }, [apiUri]); + return ( - Request Limits + Request Limits - Default} disabled={loading} type={"number"} defaultValue={backendSettings?.requestLimits.Default} placeholder={"Default"} required onKeyDown={(e) => { if(e.key == "Enter") Update(e.target as HTMLInputElement, RequestLimitType.Default);}} /> - Image} disabled={loading} type={"number"} defaultValue={backendSettings?.requestLimits.MangaImage} placeholder={"MangaImage"} required onKeyDown={(e) => { if(e.key == "Enter") Update(e.target as HTMLInputElement, RequestLimitType.MangaImage);}} /> - Info} disabled={loading} type={"number"} defaultValue={backendSettings?.requestLimits.MangaInfo} placeholder={"MangaInfo"} required onKeyDown={(e) => { if(e.key == "Enter") Update(e.target as HTMLInputElement, RequestLimitType.MangaInfo);}} /> - Image} endDecorator={} disabled={loading} type={"number"} defaultValue={backendSettings?.requestLimits.MangaDexImage} placeholder={"MangaDexImage"} required onKeyDown={(e) => { if(e.key == "Enter") Update(e.target as HTMLInputElement, RequestLimitType.MangaDexImage);}} /> - Feed} endDecorator={} disabled={loading} type={"number"} defaultValue={backendSettings?.requestLimits.MangaDexFeed} placeholder={"MangaDexFeed"} required onKeyDown={(e) => { if(e.key == "Enter") Update(e.target as HTMLInputElement, RequestLimitType.MangaDexFeed);}} /> + + + + + ); +} + +function Item({type, color, loading, backendSettings, Reset, Update}: + {type: RequestLimitType, color: ColorPaletteProp, loading: boolean, backendSettings: IBackendSettings | undefined, Reset: (x: RequestLimitType) => void, Update: (a: HTMLInputElement, x: RequestLimitType) => void}) { + return ( + {type}} + endDecorator={} + disabled={loading} type={"number"} + defaultValue={backendSettings?.requestLimits[type]} + placeholder={"Default"} + required + onKeyDown={(e) => { + if(e.key == "Enter") + Update(e.target as HTMLInputElement, type); + }} + /> + ); } \ No newline at end of file