diff --git a/.run/Production build.run.xml b/.run/Production build.run.xml new file mode 100644 index 0000000..b8017b7 --- /dev/null +++ b/.run/Production build.run.xml @@ -0,0 +1,24 @@ + + + + + + + true + true + false + false + + + \ No newline at end of file diff --git a/src/main/frontend/components/administration/NotificationManagement.tsx b/src/main/frontend/components/administration/NotificationManagement.tsx index 76e8487..3d3db43 100644 --- a/src/main/frontend/components/administration/NotificationManagement.tsx +++ b/src/main/frontend/components/administration/NotificationManagement.tsx @@ -1,24 +1,38 @@ -import React from "react"; +import React, {useState} from "react"; import withConfigPage from "Frontend/components/administration/withConfigPage"; import * as Yup from 'yup'; import ConfigFormField from "Frontend/components/administration/ConfigFormField"; import Section from "Frontend/components/general/Section"; -import {Button, Input, Select, SelectItem} from "@nextui-org/react"; -import {NotificationEndpoint} from "Frontend/generated/endpoints"; -import EmailCredentialsDto from "Frontend/generated/de/grimsi/gameyfin/notifications/dto/EmailCredentialsDto"; +import { + Button, + Card, + Modal, + ModalBody, + ModalContent, + ModalFooter, + ModalHeader, + Textarea, + useDisclosure +} from "@nextui-org/react"; +import {ConfigEndpoint, NotificationEndpoint} from "Frontend/generated/endpoints"; import {toast} from "sonner"; +import ConfigEntryDto from "Frontend/generated/de/grimsi/gameyfin/config/dto/ConfigEntryDto"; +import {Pencil} from "@phosphor-icons/react"; -function NotificationManagementLayout({getConfig, formik}: any) { +function NotificationManagementLayout({getConfig, getConfigs, formik}: any) { - async function testMailSettings() { - const credentials: EmailCredentialsDto = { - host: formik.values.notifications.email.host, - port: formik.values.notifications.email.port, - username: formik.values.notifications.email.username, - password: formik.values.notifications.email.password + const {isOpen, onOpen, onOpenChange} = useDisclosure(); + const [selectedTemplate, setSelectedTemplate] = useState(null); + + async function verifyCredentials(provider: string) { + const credentials: Record = { + host: formik.values.notifications.providers.email.host, + port: formik.values.notifications.providers.email.port, + username: formik.values.notifications.providers.email.username, + password: formik.values.notifications.providers.email.password } - const areCredentialsValid = await NotificationEndpoint.verifyEmailCredentials(credentials); + const areCredentialsValid = await NotificationEndpoint.verifyCredentials(provider, credentials); if (areCredentialsValid) { toast.success("Credentials are valid") @@ -27,6 +41,19 @@ function NotificationManagementLayout({getConfig, formik}: any) { } } + async function openModal(template: ConfigEntryDto) { + let templateContent = await ConfigEndpoint.get(template.key); + setSelectedTemplate({ + ...template, + value: templateContent + }); + onOpen(); + } + + async function saveTemplate(template: ConfigEntryDto) { + await ConfigEndpoint.set(template.key, template.value); + } + return (
@@ -36,36 +63,83 @@ function NotificationManagementLayout({getConfig, formik}: any) {
- - - - - + formik.values.notifications.providers.email.host && + formik.values.notifications.providers.email.port && + formik.values.notifications.providers.email.username)}>Test
-
- {/* TODO: Evaluate need and options if need is given */} - - - +
+
+ {getConfigs("notifications.templates").map((template: ConfigEntryDto) => + + +

{template.description}

+
+ )} +
+ + + + {(onClose) => ( + <> + Edit {selectedTemplate?.description.toLowerCase()} + +