diff --git a/.gitignore b/.gitignore index d2f1769..5702948 100644 --- a/.gitignore +++ b/.gitignore @@ -48,3 +48,4 @@ out/ /src/main/frontend/generated/ /db/ /logs/ +/templates/ diff --git a/src/main/frontend/components/administration/NotificationManagement.tsx b/src/main/frontend/components/administration/NotificationManagement.tsx index 901f251..f3c6e51 100644 --- a/src/main/frontend/components/administration/NotificationManagement.tsx +++ b/src/main/frontend/components/administration/NotificationManagement.tsx @@ -1,4 +1,4 @@ -import React, {useState} from "react"; +import React, {useEffect, useState} from "react"; import withConfigPage from "Frontend/components/administration/withConfigPage"; import * as Yup from 'yup'; import ConfigFormField from "Frontend/components/administration/ConfigFormField"; @@ -6,6 +6,7 @@ import Section from "Frontend/components/general/Section"; import { Button, Card, + Chip, Modal, ModalBody, ModalContent, @@ -14,15 +15,23 @@ import { Textarea, useDisclosure } from "@nextui-org/react"; -import {ConfigEndpoint, NotificationEndpoint} from "Frontend/generated/endpoints"; +import {MessageTemplateEndpoint, 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"; +import MessageTemplateDto from "Frontend/generated/de/grimsi/gameyfin/notifications/templates/MessageTemplateDto"; function NotificationManagementLayout({getConfig, getConfigs, formik}: any) { const {isOpen, onOpen, onOpenChange} = useDisclosure(); - const [selectedTemplate, setSelectedTemplate] = useState(null); + const [availableTemplates, setAvailableTemplates] = useState([]); + const [selectedTemplate, setSelectedTemplate] = useState(null); + const [templateContent, setTemplateContent] = useState(""); + + useEffect(() => { + MessageTemplateEndpoint.getAll().then((response: any) => { + setAvailableTemplates(response as MessageTemplateDto[]); + }); + }, []); async function verifyCredentials(provider: string) { const credentials: Record = { @@ -41,17 +50,22 @@ function NotificationManagementLayout({getConfig, getConfigs, formik}: any) { } } - async function openModal(template: ConfigEntryDto) { - let templateContent = await ConfigEndpoint.get(template.key); - setSelectedTemplate({ - ...template, - value: templateContent - }); + async function openModal(template: MessageTemplateDto) { + setSelectedTemplate(template); + + let templateContent = await MessageTemplateEndpoint.read(template.key); + + if (templateContent === undefined) { + toast.error("Can't read template content"); + return; + } + + setTemplateContent(templateContent); onOpen(); } - async function saveTemplate(template: ConfigEntryDto) { - await ConfigEndpoint.set(template.key, template.value); + async function saveTemplate(template: MessageTemplateDto) { + await MessageTemplateEndpoint.save(template.key, templateContent); } return ( @@ -81,7 +95,7 @@ function NotificationManagementLayout({getConfig, getConfigs, formik}: any) {
- {getConfigs("notifications.templates").map((template: ConfigEntryDto) => + {availableTemplates.map((template: MessageTemplateDto) =>