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<string> { 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<string> { + 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(<GotifyItem apiUri={apiUri} />); break; case "ntfy": setSelectedConnectorElement(<NtfyItem apiUri={apiUri} />); break; case "lunasea": setSelectedConnectorElement(<LunaseaItem apiUri={apiUri} />); break; + case "pushover": setSelectedConnectorElement(<PushoverItem apiUri={apiUri} />); break; } }}> <option value="default">Generic REST</option> <option value="gotify">Gotify</option> <option value="ntfy">Ntfy</option> <option value="lunasea">Lunasea</option> + <option value="pushover">Pushover</option> </select> {selectedConnectorElement} </div>; 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<IPushoverRecord>({ + apptoken: "", + user: "" + }); + const [loading, setLoading] = useState(false); + return <div className="NotificationConnectorItem"> + <input className="NotificationConnectorItem-Name" value="Pushover" disabled={true} /> + <div className="NotificationConnectorItem-Ident"> + <input type="text" className="NotificationConnectorItem-Apptoken" placeholder="Apptoken" onChange={(e) => setInfo({...info, apptoken: e.currentTarget.value})} /> + <input type="text" className="NotificationConnectorItem-User" placeholder="User" onChange={(e) => setInfo({...info, user: e.currentTarget.value})} /> + </div> + <> + <button className="NotificationConnectorItem-Save" onClick={(e) => { + if(info === null || Validate(info) === false) + return; + setLoading(true); + NotificationConnectorFunctions.CreatePushover(apiUri, info) + .finally(() => setLoading(false)); + }}>Add</button> + <Loader loading={loading} style={{width:"40px",height:"40px",margin:"25vh calc(sin(70)*(50% - 40px))"}}/> + </> + </div>; +} \ No newline at end of file