edited mailer and changed orchestration

Co-authored-by: Copilot <copilot@github.com>
This commit is contained in:
2026-04-26 21:52:35 +02:00
parent 5191871681
commit 4291552b6d
14 changed files with 348 additions and 316 deletions
+21
View File
@@ -5,6 +5,8 @@ import {
Alert,
Container,
Text,
VStack,
Spinner,
} from "@chakra-ui/react";
import { useTranslation } from "react-i18next";
import { useState } from "react";
@@ -21,9 +23,21 @@ interface Alert {
export const ContactPage = () => {
const { t } = useTranslation();
const [message, setMessage] = useState("");
const [isSending, setIsSending] = useState(false);
const [alert, setAlert] = useState<Alert | null>(null);
const sendMessage = async () => {
setIsSending(true);
if (message.trim() === "") {
setAlert({
type: "error",
headline: t("contactPage_messageErrorHeadline"),
text: t("contactPage_messageErrorText2"),
});
setIsSending(false);
return;
}
// Logic to send the message
const result = await fetch(`${API_BASE}/api/users/contact`, {
method: "POST",
@@ -55,6 +69,7 @@ export const ContactPage = () => {
text: t("contactPage_errorText"),
});
}
setIsSending(false);
};
return (
@@ -84,6 +99,12 @@ export const ContactPage = () => {
</Alert.Content>
</Alert.Root>
)}
{isSending && (
<VStack colorPalette="teal">
<Spinner color="colorPalette.600" />
<Text color="colorPalette.600">{t("loading")}</Text>
</VStack>
)}
<Button onClick={sendMessage}>{t("contactPage_sendButton")}</Button>
</Container>
);
+11 -9
View File
@@ -133,12 +133,6 @@ export const HomePage = () => {
>
{t("get-borrowable-items")}
</Button>
{isLoadingA && (
<VStack colorPalette="teal">
<Spinner color="colorPalette.600" />
<Text color="colorPalette.600">{t("loading")}</Text>
</VStack>
)}
{borrowableItems.length > 0 && (
<Table.ScrollArea borderWidth="1px" rounded="md">
<Table.Root size="sm" stickyHeader>
@@ -191,9 +185,11 @@ export const HomePage = () => {
)}
{selectedItems.length >= 1 && (
<Button
onClick={() =>
onClick={() => {
setIsLoadingA(true);
createLoan(selectedItems, startDate, endDate, note).then(
(response) => {
setIsLoadingA(false);
if (response.status === "error") {
setMsgStatus("error");
setMsgTitle(response.title || t("error"));
@@ -209,12 +205,18 @@ export const HomePage = () => {
setMsgDescription(t("loan-success"));
setIsMsg(true);
},
)
}
);
}}
>
{t("create-loan")}
</Button>
)}
{isLoadingA && (
<VStack colorPalette="teal">
<Spinner color="colorPalette.600" />
<Text color="colorPalette.600">{t("loading")}</Text>
</VStack>
)}
</Stack>
</Container>
</>
+3 -1
View File
@@ -99,5 +99,7 @@
"contactPage_serviceDeactivatedText": "Der Kontaktservice ist derzeit deaktiviert. Bitte versuchen Sie es später erneut.",
"loan_page_serviceDeactivatedText": "Der Ausleihservice ist derzeit deaktiviert. Bitte versuchen Sie es später erneut.",
"is-deactivated": "ist deaktiviert.",
"deactivated-services": "Deaktivierte Services"
"deactivated-services": "Deaktivierte Services",
"contactPage_messageErrorHeadline": "Fehler bei der Nachrichteneingabe",
"contactPage_messageErrorText2": "Bitte geben Sie eine Nachricht ein, bevor Sie sie senden."
}
+3 -1
View File
@@ -99,5 +99,7 @@
"contactPage_serviceDeactivatedText": "The contact service is currently deactivated. Please try again later.",
"loan_page_serviceDeactivatedText": "The loan service is currently deactivated. Please try again later.",
"is-deactivated": "is deactivated.",
"deactivated-services": "Deactivated services"
"deactivated-services": "Deactivated services",
"contactPage_messageErrorHeadline": "Error submitting message",
"contactPage_messageErrorText2": "Please enter a message before sending it."
}