From 0b0abb38013f9e24966b152adc2176f8a022bae8 Mon Sep 17 00:00:00 2001 From: glax Date: Mon, 17 Mar 2025 21:07:27 +0100 Subject: [PATCH] Add Settings Popup Add NotificationConnector Setting (need to add styling) --- Website/App.tsx | 2 +- Website/modules/Header.tsx | 4 +- Website/modules/MonitorJobsList.tsx | 2 +- Website/modules/QueuePopUp.tsx | 5 +- Website/modules/Settings.tsx | 33 ++++++++++- .../interfaces/INotificationConnector.ts | 7 --- .../interfaces/INotificationConnector.tsx | 57 +++++++++++++++++++ Website/styles/header.css | 4 ++ Website/styles/settings.css | 15 +++++ 9 files changed, 115 insertions(+), 14 deletions(-) delete mode 100644 Website/modules/interfaces/INotificationConnector.ts create mode 100644 Website/modules/interfaces/INotificationConnector.tsx diff --git a/Website/App.tsx b/Website/App.tsx index a607533..2c9daf9 100644 --- a/Website/App.tsx +++ b/Website/App.tsx @@ -39,7 +39,7 @@ export default function App(){ const UpdateList = () => {setUpdateMonitorList(new Date())} return(
-
+
{connected ? <> {showSearch diff --git a/Website/modules/Header.tsx b/Website/modules/Header.tsx index f579062..5a6b5cb 100644 --- a/Website/modules/Header.tsx +++ b/Website/modules/Header.tsx @@ -1,13 +1,15 @@ import React from 'react'; import '../styles/header.css' import IFrontendSettings from "./interfaces/IFrontendSettings"; +import Settings from "./Settings"; -export default function Header({backendConnected, apiUri, settings, changeSettings} : {backendConnected: boolean, apiUri: string, settings: IFrontendSettings, changeSettings(settings: IFrontendSettings): void}){ +export default function Header({backendConnected, apiUri, settings} : {backendConnected: boolean, apiUri: string, settings: IFrontendSettings}){ return (
website image is Blahaj Tranga
+
) } \ No newline at end of file diff --git a/Website/modules/MonitorJobsList.tsx b/Website/modules/MonitorJobsList.tsx index 752d5ba..d67f6ba 100644 --- a/Website/modules/MonitorJobsList.tsx +++ b/Website/modules/MonitorJobsList.tsx @@ -39,7 +39,7 @@ export default function MonitorJobsList({onStartSearch, onJobsChanged, connected return (
Blahaj
-

Add new MangaFunctions

+

Add new Manga

+

); diff --git a/Website/modules/QueuePopUp.tsx b/Website/modules/QueuePopUp.tsx index 56246ad..0d3a769 100644 --- a/Website/modules/QueuePopUp.tsx +++ b/Website/modules/QueuePopUp.tsx @@ -4,7 +4,6 @@ import '../styles/queuePopUp.css'; import '../styles/popup.css'; import JobFunctions from "./JobFunctions"; import IDownloadSingleChapterJob from "./interfaces/Jobs/IDownloadSingleChapterJob"; -import { MangaItem } from "./interfaces/IManga"; import {ChapterItem} from "./interfaces/IChapter"; export default function QueuePopUp({connectedToBackend, children, apiUri} : {connectedToBackend: boolean, children: JSX.Element[], apiUri: string}) { @@ -55,7 +54,7 @@ export default function QueuePopUp({connectedToBackend, children, apiUri} : {con ?

Queue Status

- Close Search setShowQueuePopup(false)}/>
@@ -73,7 +72,7 @@ export default function QueuePopUp({connectedToBackend, children, apiUri} : {con
- : <> + : null } ); diff --git a/Website/modules/Settings.tsx b/Website/modules/Settings.tsx index 75df758..27a7b40 100644 --- a/Website/modules/Settings.tsx +++ b/Website/modules/Settings.tsx @@ -1,7 +1,38 @@ import IFrontendSettings from "./interfaces/IFrontendSettings"; import '../styles/settings.css'; import '../styles/react-toggle.css'; +import React, {useEffect, useState} from "react"; +import INotificationConnector, {NotificationConnectorItem} from "./interfaces/INotificationConnector"; +import NotificationConnectorFunctions from "./NotificationConnectorFunctions"; -export default function Settings({backendConnected, apiUri, settings, changeSettings} : {backendConnected: boolean, apiUri: string, settings: IFrontendSettings, changeSettings: (settings: IFrontendSettings) => void}) { +export default function Settings({backendConnected, apiUri, settings} : {backendConnected: boolean, apiUri: string, settings: IFrontendSettings}) { + let [showSettings, setShowSettings] = useState(false); + let [notificationConnectors, setNotificationConnectors] = useState([]); + useEffect(() => { + if(!backendConnected) + return; + NotificationConnectorFunctions.GetNotificationConnectors(apiUri).then(setNotificationConnectors); + }, []); + + return ( +
+
setShowSettings(true)}> + settings-cogwheel +
+ {showSettings + ?
+
+

Settings

+ Close Settings setShowSettings(false)}/> +
+
+ {notificationConnectors.map(c => )} + +
+
+ : null + } +
+ ); } \ No newline at end of file diff --git a/Website/modules/interfaces/INotificationConnector.ts b/Website/modules/interfaces/INotificationConnector.ts deleted file mode 100644 index 8d2b765..0000000 --- a/Website/modules/interfaces/INotificationConnector.ts +++ /dev/null @@ -1,7 +0,0 @@ -export default interface INotificationConnector { - name: string; - url: string; - headers: Record[]; - httpMethod: string; - body: string; -} \ No newline at end of file diff --git a/Website/modules/interfaces/INotificationConnector.tsx b/Website/modules/interfaces/INotificationConnector.tsx new file mode 100644 index 0000000..1b53265 --- /dev/null +++ b/Website/modules/interfaces/INotificationConnector.tsx @@ -0,0 +1,57 @@ +import {ReactElement, ReactEventHandler, useState} from "react"; + +export default interface INotificationConnector { + name: string; + url: string; + headers: Record[]; + httpMethod: string; + body: string; +} + +export function NotificationConnectorItem({apiUri, notificationConnector} : {apiUri: string, notificationConnector: INotificationConnector | null}) : ReactElement { + const Save : ReactEventHandler = (e) => { + + } + + const AddHeader : ReactEventHandler = (e) => { + const div = e.currentTarget.parentElement as HTMLDivElement; + setHeaderElements([...headerElements, ]) + } + const [headerElements, setHeaderElements] = useState([]); + + return (
+

{notificationConnector ? notificationConnector.name : "New Notification Connector"}

+ + +