glax 2025-03-29 21:00:33 +01:00
parent b0cbb416d6
commit d358611133
3 changed files with 63 additions and 1 deletions

View File

@ -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);
});
}
}

View File

@ -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>;

View File

@ -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>;
}