diff --git a/tranga-website/src/Components/Settings/ChapterNamingScheme.tsx b/tranga-website/src/Components/Settings/ChapterNamingScheme.tsx new file mode 100644 index 0000000..0adab93 --- /dev/null +++ b/tranga-website/src/Components/Settings/ChapterNamingScheme.tsx @@ -0,0 +1,35 @@ +import {ReactNode, useContext, useState} from "react"; +import {SettingsContext, SettingsItem} from "./Settings.tsx"; +import {ApiContext} from "../../apiClient/ApiContext.tsx"; +import {ColorPaletteProp, Input} from "@mui/joy"; +import * as React from "react"; +import MarkdownPreview from "@uiw/react-markdown-preview"; + +export default function () : ReactNode { + const settings = useContext(SettingsContext); + const Api = useContext(ApiContext); + + const [scheme, setScheme] = useState("neutral"); + const timerRef = React.useRef>(undefined); + const schemeChanged = (e : React.ChangeEvent) => { + clearTimeout(timerRef.current); + setScheme("warning"); + timerRef.current = setTimeout(() => { + Api.settingsChapterNamingSchemePartialUpdate(e.target.value) + .then(response => { + if (response.ok) + setScheme("success"); + else + setScheme("danger"); + }) + .catch(() => setScheme("danger")); + }, 1000); + } + + return ( + + + + + ); +} \ No newline at end of file diff --git a/tranga-website/src/Components/Settings/DownloadLanguage.tsx b/tranga-website/src/Components/Settings/DownloadLanguage.tsx new file mode 100644 index 0000000..3ec7453 --- /dev/null +++ b/tranga-website/src/Components/Settings/DownloadLanguage.tsx @@ -0,0 +1,33 @@ +import {ReactNode, useContext, useState} from "react"; +import {SettingsContext, SettingsItem} from "./Settings.tsx"; +import {ApiContext} from "../../apiClient/ApiContext.tsx"; +import {ColorPaletteProp, Input} from "@mui/joy"; +import * as React from "react"; + +export default function () : ReactNode { + const settings = useContext(SettingsContext); + const Api = useContext(ApiContext); + + const [color, setColor] = useState("neutral"); + const timerRef = React.useRef>(undefined); + const languageChanged = (e : React.ChangeEvent) => { + clearTimeout(timerRef.current); + setColor("warning"); + timerRef.current = setTimeout(() => { + Api.settingsDownloadLanguagePartialUpdate(e.target.value) + .then(response => { + if (response.ok) + setColor("success"); + else + setColor("danger"); + }) + .catch(() => setColor("danger")); + }, 1000); + } + + return ( + + + + ); +} \ No newline at end of file diff --git a/tranga-website/src/Components/Settings/FlareSolverr.tsx b/tranga-website/src/Components/Settings/FlareSolverr.tsx new file mode 100644 index 0000000..a3a1d16 --- /dev/null +++ b/tranga-website/src/Components/Settings/FlareSolverr.tsx @@ -0,0 +1,33 @@ +import {ReactNode, useContext, useState} from "react"; +import {SettingsContext, SettingsItem} from "./Settings.tsx"; +import {ColorPaletteProp, Input} from "@mui/joy"; +import * as React from "react"; +import {ApiContext} from "../../apiClient/ApiContext.tsx"; + +export default function () : ReactNode { + const settings = useContext(SettingsContext); + const Api = useContext(ApiContext); + + const [uriColor, setUriColor] = useState("neutral"); + const timerRef = React.useRef>(undefined); + const uriChanged = (e : React.ChangeEvent) => { + clearTimeout(timerRef.current); + setUriColor("warning"); + timerRef.current = setTimeout(() => { + Api.settingsFlareSolverrUrlCreate(e.target.value) + .then(response => { + if (response.ok) + setUriColor("success"); + else + setUriColor("danger"); + }) + .catch(() => setUriColor("danger")); + }, 1000); + } + + return ( + + + + ); +} \ No newline at end of file diff --git a/tranga-website/src/Components/Settings/ImageCompression.tsx b/tranga-website/src/Components/Settings/ImageCompression.tsx new file mode 100644 index 0000000..01e9d85 --- /dev/null +++ b/tranga-website/src/Components/Settings/ImageCompression.tsx @@ -0,0 +1,13 @@ +import {ReactNode, useContext} from "react"; +import {SettingsContext, SettingsItem} from "./Settings.tsx"; +import {Slider} from "@mui/joy"; + +export default function () : ReactNode { + const settings = useContext(SettingsContext); + + return ( + + + + ); +} \ No newline at end of file diff --git a/tranga-website/src/Components/Settings/NotificationConnectors.tsx b/tranga-website/src/Components/Settings/NotificationConnectors.tsx new file mode 100644 index 0000000..fc030a4 --- /dev/null +++ b/tranga-website/src/Components/Settings/NotificationConnectors.tsx @@ -0,0 +1,16 @@ +import {ReactNode} from "react"; +import {SettingsItem} from "./Settings.tsx"; +import {Button} from "@mui/joy"; +import NotificationConnectors from "./AddNotificationConnector.tsx"; +import * as React from "react"; + +export default function () : ReactNode { + const [notificationConnectorsOpen, setNotificationConnectorsOpen] = React.useState(false); + + return ( + + + + + ); +} \ No newline at end of file diff --git a/tranga-website/src/Components/Settings/Settings.tsx b/tranga-website/src/Components/Settings/Settings.tsx index 75ad178..4470bda 100644 --- a/tranga-website/src/Components/Settings/Settings.tsx +++ b/tranga-website/src/Components/Settings/Settings.tsx @@ -10,28 +10,31 @@ import { } from "@mui/joy"; import './Settings.css'; import * as React from "react"; -import {createContext, Dispatch, useContext, useEffect, useState} from "react"; +import {createContext, Dispatch, ReactNode, useContext, useEffect, useState} from "react"; import {Article} from '@mui/icons-material'; import {TrangaSettings} from "../../apiClient/data-contracts.ts"; import {ApiContext} from "../../apiClient/ApiContext.tsx"; -import NotificationConnectors from "./AddNotificationConnector.tsx"; +import NotificationConnectors from "./NotificationConnectors.tsx"; import {SxProps} from "@mui/joy/styles/types"; +import ImageCompression from "./ImageCompression.tsx"; +import FlareSolverr from "./FlareSolverr.tsx"; +import DownloadLanguage from "./DownloadLanguage.tsx"; +import ChapterNamingScheme from "./ChapterNamingScheme.tsx"; -export const SettingsContext = createContext({}); +export const SettingsContext = createContext(undefined); export default function Settings({setApiUri} : {setApiUri: Dispatch>}) { const Api = useContext(ApiContext); - const [settings, setSettings] = useState({}); + const [settings, setSettings] = useState(); const [open, setOpen] = React.useState(false); const [apiUriColor, setApiUriColor] = useState("neutral"); const timerRef = React.useRef>(undefined); - const [apiUriAccordionOpen, setApiUriAccordionOpen] = React.useState(true); useEffect(() => { Api.settingsList().then((response) => { - setSettings(response.data) + setSettings(response.data); }); }, []); @@ -44,15 +47,13 @@ export default function Settings({setApiUri} : {setApiUri: Dispatch + setOpen(false)}> @@ -60,21 +61,19 @@ export default function Settings({setApiUri} : {setApiUri: DispatchSettings - setApiUriAccordionOpen(expanded)}> - ApiUri - - - - - - - - + + + + + + + +
Swagger Doc @@ -82,6 +81,17 @@ export default function Settings({setApiUri} : {setApiUri: Dispatch - + + ); +} + +export function SettingsItem({title, children} : {title: string, children: ReactNode}) { + return ( + + {title} + + {children} + + ); } \ No newline at end of file