mirror of
https://github.com/C9Glax/tranga-website.git
synced 2025-04-19 14:53:20 +02:00
Request Limits Reset
This commit is contained in:
parent
d6e4d1d27f
commit
5385dfd918
@ -1,9 +1,19 @@
|
|||||||
import IBackendSettings from "../../api/types/IBackendSettings.ts";
|
import IBackendSettings from "../../api/types/IBackendSettings.ts";
|
||||||
import {useCallback, useContext, useState} from "react";
|
import {useCallback, useContext, useState} from "react";
|
||||||
import {ApiUriContext} from "../../api/fetchApi.tsx";
|
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 {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}) {
|
export default function RequestLimits({backendSettings}: {backendSettings?: IBackendSettings}) {
|
||||||
const apiUri = useContext(ApiUriContext);
|
const apiUri = useContext(ApiUriContext);
|
||||||
@ -18,18 +28,53 @@ export default function RequestLimits({backendSettings}: {backendSettings?: IBac
|
|||||||
.finally(() => setLoading(false));
|
.finally(() => setLoading(false));
|
||||||
},[apiUri])
|
},[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 (
|
return (
|
||||||
<Accordion>
|
<Accordion>
|
||||||
<AccordionSummary>Request Limits</AccordionSummary>
|
<AccordionSummary>Request Limits<Button loading={backendSettings === undefined} onClick={ResetAll} size={"sm"} variant={"outlined"} endDecorator={<Restore />}>Reset all</Button></AccordionSummary>
|
||||||
<AccordionDetails>
|
<AccordionDetails>
|
||||||
<Stack spacing={1} direction="column">
|
<Stack spacing={1} direction="column">
|
||||||
<Input slotProps={{input: {min: 0, max: 360}}} color={color} startDecorator={<Typography>Default</Typography>} disabled={loading} type={"number"} defaultValue={backendSettings?.requestLimits.Default} placeholder={"Default"} required onKeyDown={(e) => { if(e.key == "Enter") Update(e.target as HTMLInputElement, RequestLimitType.Default);}} />
|
<Item type={RequestLimitType.Default} color={color} backendSettings={backendSettings} loading={loading} Reset={Reset} Update={Update} />
|
||||||
<Input slotProps={{input: {min: 0, max: 360}}} color={color} startDecorator={<Typography>Image</Typography>} disabled={loading} type={"number"} defaultValue={backendSettings?.requestLimits.MangaImage} placeholder={"MangaImage"} required onKeyDown={(e) => { if(e.key == "Enter") Update(e.target as HTMLInputElement, RequestLimitType.MangaImage);}} />
|
<Item type={RequestLimitType.MangaInfo} color={color} backendSettings={backendSettings} loading={loading} Reset={Reset} Update={Update} />
|
||||||
<Input slotProps={{input: {min: 0, max: 360}}} color={color} startDecorator={<Typography>Info</Typography>} disabled={loading} type={"number"} defaultValue={backendSettings?.requestLimits.MangaInfo} placeholder={"MangaInfo"} required onKeyDown={(e) => { if(e.key == "Enter") Update(e.target as HTMLInputElement, RequestLimitType.MangaInfo);}} />
|
<Item type={RequestLimitType.MangaImage} color={color} backendSettings={backendSettings} loading={loading} Reset={Reset} Update={Update} />
|
||||||
<Input slotProps={{input: {min: 0, max: 360}}} color={color} startDecorator={<Typography>Image</Typography>} endDecorator={<img src={"https://mangadex.org/favicon.ico"} />} disabled={loading} type={"number"} defaultValue={backendSettings?.requestLimits.MangaDexImage} placeholder={"MangaDexImage"} required onKeyDown={(e) => { if(e.key == "Enter") Update(e.target as HTMLInputElement, RequestLimitType.MangaDexImage);}} />
|
<Item type={RequestLimitType.MangaDexFeed} color={color} backendSettings={backendSettings} loading={loading} Reset={Reset} Update={Update} />
|
||||||
<Input slotProps={{input: {min: 0, max: 360}}} color={color} startDecorator={<Typography>Feed</Typography>} endDecorator={<img src={"https://mangadex.org/favicon.ico"} />} disabled={loading} type={"number"} defaultValue={backendSettings?.requestLimits.MangaDexFeed} placeholder={"MangaDexFeed"} required onKeyDown={(e) => { if(e.key == "Enter") Update(e.target as HTMLInputElement, RequestLimitType.MangaDexFeed);}} />
|
<Item type={RequestLimitType.MangaDexImage} color={color} backendSettings={backendSettings} loading={loading} Reset={Reset} Update={Update} />
|
||||||
</Stack>
|
</Stack>
|
||||||
</AccordionDetails>
|
</AccordionDetails>
|
||||||
</Accordion>
|
</Accordion>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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 (
|
||||||
|
<Input slotProps={{input: {min: 0, max: 360}}}
|
||||||
|
color={color}
|
||||||
|
startDecorator={<Typography sx={{width:"140px"}}>{type}</Typography>}
|
||||||
|
endDecorator={<Button onClick={() => Reset(type)}>Reset</Button>}
|
||||||
|
disabled={loading} type={"number"}
|
||||||
|
defaultValue={backendSettings?.requestLimits[type]}
|
||||||
|
placeholder={"Default"}
|
||||||
|
required
|
||||||
|
onKeyDown={(e) => {
|
||||||
|
if(e.key == "Enter")
|
||||||
|
Update(e.target as HTMLInputElement, type);
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user