From d358611133131b36970b4e887d3b69b184241556 Mon Sep 17 00:00:00 2001 From: glax Date: Sat, 29 Mar 2025 21:00:33 +0100 Subject: [PATCH] https://github.com/C9Glax/tranga/issues/246 --- .../NotificationConnectorFunctions.tsx | 18 +++++++- .../interfaces/INotificationConnector.tsx | 3 ++ .../interfaces/records/IPushoverRecord.tsx | 43 +++++++++++++++++++ 3 files changed, 63 insertions(+), 1 deletion(-) create mode 100644 Website/modules/interfaces/records/IPushoverRecord.tsx diff --git a/Website/modules/NotificationConnectorFunctions.tsx b/Website/modules/NotificationConnectorFunctions.tsx index d4c6748..9d0a49b 100644 --- a/Website/modules/NotificationConnectorFunctions.tsx +++ b/Website/modules/NotificationConnectorFunctions.tsx @@ -3,6 +3,7 @@ import {deleteData, getData, putData} from "../App"; import IGotifyRecord from "./interfaces/records/IGotifyRecord"; import INtfyRecord from "./interfaces/records/INtfyRecord"; import ILunaseaRecord from "./interfaces/records/ILunaseaRecord"; +import IPushoverRecord from "./interfaces/records/IPushoverRecord"; export default class NotificationConnectorFunctions { @@ -83,7 +84,7 @@ export default class NotificationConnectorFunctions { static async CreateLunasea(apiUri: string, lunasea: ILunaseaRecord) : Promise { if(lunasea === undefined || lunasea === null) { - console.error(`ntfy was not provided`); + console.error(`lunasea was not provided`); return Promise.reject(); } //console.info("Getting Notification Connectors"); @@ -95,4 +96,19 @@ export default class NotificationConnectorFunctions { return (ret); }); } + + static async CreatePushover(apiUri: string, pushover: IPushoverRecord) : Promise { + if(pushover === undefined || pushover === null) { + console.error(`pushover was not provided`); + return Promise.reject(); + } + //console.info("Getting Notification Connectors"); + return putData(`${apiUri}/v2/NotificationConnector/Pushover`, pushover) + .then((json) => { + //console.info("Got Notification Connectors"); + const ret = json as unknown as string; + //console.debug(ret); + return (ret); + }); + } } \ No newline at end of file diff --git a/Website/modules/interfaces/INotificationConnector.tsx b/Website/modules/interfaces/INotificationConnector.tsx index 4f9854a..bad1794 100644 --- a/Website/modules/interfaces/INotificationConnector.tsx +++ b/Website/modules/interfaces/INotificationConnector.tsx @@ -5,6 +5,7 @@ import NotificationConnectorFunctions from "../NotificationConnectorFunctions"; import {LunaseaItem} from "./records/ILunaseaRecord"; import {GotifyItem} from "./records/IGotifyRecord"; import {NtfyItem} from "./records/INtfyRecord"; +import {PushoverItem} from "./records/IPushoverRecord"; export default interface INotificationConnector { name: string; @@ -29,12 +30,14 @@ export function NotificationConnectorItem({apiUri, notificationConnector} : {api case "gotify": setSelectedConnectorElement(); break; case "ntfy": setSelectedConnectorElement(); break; case "lunasea": setSelectedConnectorElement(); break; + case "pushover": setSelectedConnectorElement(); break; } }}> + {selectedConnectorElement} ; diff --git a/Website/modules/interfaces/records/IPushoverRecord.tsx b/Website/modules/interfaces/records/IPushoverRecord.tsx new file mode 100644 index 0000000..32816b9 --- /dev/null +++ b/Website/modules/interfaces/records/IPushoverRecord.tsx @@ -0,0 +1,43 @@ +import {ReactElement, useState} from "react"; +import NotificationConnectorFunctions from "../../NotificationConnectorFunctions"; +import Loader from "../../Loader"; +import "../../../styles/notificationConnector.css"; +import {isValidUri} from "../../../App"; + +export default interface IPushoverRecord { + apptoken: string; + user: string; +} + +function Validate(record: IPushoverRecord) : boolean { + if(record.apptoken.length < 1) + return false; + if(record.user.length < 1) + return false; + return true; +} + +export function PushoverItem ({apiUri} : {apiUri: string}) : ReactElement{ + const [info, setInfo] = useState({ + apptoken: "", + user: "" + }); + const [loading, setLoading] = useState(false); + return
+ +
+ setInfo({...info, apptoken: e.currentTarget.value})} /> + setInfo({...info, user: e.currentTarget.value})} /> +
+ <> + + + +
; +} \ No newline at end of file