fix bug where contact page did not respond

This commit is contained in:
David Rodenkirchen 2025-03-25 23:04:39 +01:00
parent a430c81624
commit b4da6b9729

View File

@ -4,7 +4,6 @@ from typing import Optional
from rio import Text, Column, TextStyle, Component, event, TextInput, MultiLineTextInput, Row, Button from rio import Text, Column, TextStyle, Component, event, TextInput, MultiLineTextInput, Row, Button
from src.ez_lan_manager import ConfigurationService, UserService, MailingService from src.ez_lan_manager import ConfigurationService, UserService, MailingService
from src.ez_lan_manager.components.AnimatedText import AnimatedText
from src.ez_lan_manager.components.MainViewContentBox import MainViewContentBox from src.ez_lan_manager.components.MainViewContentBox import MainViewContentBox
from src.ez_lan_manager.types.SessionStorage import SessionStorage from src.ez_lan_manager.types.SessionStorage import SessionStorage
from src.ez_lan_manager.types.User import User from src.ez_lan_manager.types.User import User
@ -17,6 +16,13 @@ class ContactPage(Component):
display_printing: list[bool] = [False] display_printing: list[bool] = [False]
user: Optional[User] = None user: Optional[User] = None
e_mail: str = ""
subject: str = ""
message: str = ""
submit_button_is_loading: bool = False
response_message: str = ""
is_success: bool = True
@event.on_populate @event.on_populate
async def on_populate(self) -> None: async def on_populate(self) -> None:
await self.session.set_title(f"{self.session[ConfigurationService].get_lan_info().name} - Kontakt") await self.session.set_title(f"{self.session[ConfigurationService].get_lan_info().name} - Kontakt")
@ -24,73 +30,68 @@ class ContactPage(Component):
self.user = await self.session[UserService].get_user(self.session[SessionStorage].user_id) self.user = await self.session[UserService].get_user(self.session[SessionStorage].user_id)
else: else:
self.user = None self.user = None
self.e_mail = "" if not self.user else self.user.user_mail
async def on_send_pressed(self) -> None: async def on_send_pressed(self) -> None:
error_msg = "" error_msg = ""
self.submit_button.is_loading = True self.submit_button_is_loading = True
self.submit_button.force_refresh()
now = datetime.now() now = datetime.now()
if not self.email_input.text: if not self.e_mail:
error_msg = "E-Mail darf nicht leer sein!" error_msg = "E-Mail darf nicht leer sein!"
elif not self.subject_input.text: elif not self.subject:
error_msg = "Betreff darf nicht leer sein!" error_msg = "Betreff darf nicht leer sein!"
elif not self.message_input.text: elif not self.message:
error_msg = "Nachricht darf nicht leer sein!" error_msg = "Nachricht darf nicht leer sein!"
elif (now - self.last_message_sent[0]) < timedelta(minutes=1): elif (now - self.last_message_sent[0]) < timedelta(minutes=1):
error_msg = "Immer mit der Ruhe!" error_msg = "Immer mit der Ruhe!"
if error_msg: if error_msg:
self.submit_button.is_loading = False print(error_msg)
await self.animated_text.display_text(False, error_msg) self.submit_button_is_loading = False
self.is_success = False
self.response_message = error_msg
return return
mail_recipient = self.session[ConfigurationService].get_lan_info().organizer_mail mail_recipient = self.session[ConfigurationService].get_lan_info().organizer_mail
msg = (f"Kontaktformular vom {now.strftime('%d.%m.%Y %H:%M')}:\n\n" msg = (f"Kontaktformular vom {now.strftime('%d.%m.%Y %H:%M')}:\n\n"
f"Betreff: {self.subject_input.text}\n" f"Betreff: {self.subject}\n"
f"Absender: {self.email_input.text}\n\n" f"Absender: {self.e_mail}\n\n"
f"Inhalt:\n" f"Inhalt:\n"
f"{self.message_input.text}\n") f"{self.message}\n")
await self.session[MailingService].send_email("Kontaktformular-Mitteilung", msg, mail_recipient) await self.session[MailingService].send_email("Kontaktformular-Mitteilung", msg, mail_recipient)
self.last_message_sent[0] = datetime.now() self.last_message_sent[0] = datetime.now()
self.submit_button.is_loading = False self.submit_button_is_loading = False
await self.animated_text.display_text(True, "Nachricht erfolgreich gesendet!") self.is_success = True
self.response_message = "Nachricht erfolgreich gesendet!"
def build(self) -> Component: def build(self) -> Component:
self.animated_text = AnimatedText( email_input = TextInput(
margin_top=2,
margin_bottom=1,
align_x=0.1
)
self.email_input = TextInput(
label="E-Mail Adresse", label="E-Mail Adresse",
text="" if not self.user else self.user.user_mail, text=self.bind().e_mail,
margin_left=1, margin_left=1,
margin_right=1, margin_right=1,
margin_bottom=1, margin_bottom=1,
grow_x=True grow_x=True
) )
self.subject_input = TextInput( subject_input = TextInput(
label="Betreff", label="Betreff",
text="", text=self.bind().subject,
margin_left=1, margin_left=1,
margin_right=1, margin_right=1,
margin_bottom=1, margin_bottom=1,
grow_x=True grow_x=True
) )
self.message_input = MultiLineTextInput( message_input = MultiLineTextInput(
label="Deine Nachricht an uns", label="Deine Nachricht an uns",
text="", text=self.bind().message,
margin_left=1, margin_left=1,
margin_right=1, margin_right=1,
margin_bottom=1, margin_bottom=1,
min_height=5 min_height=5
) )
self.submit_button = Button( submit_button = Button(
content=Text( content=Text(
"Absenden", "Absenden",
style=TextStyle(fill=self.session.theme.success_color, font_size=0.9), style=TextStyle(fill=self.session.theme.success_color, font_size=0.9),
@ -102,7 +103,8 @@ class ContactPage(Component):
shape="rectangle", shape="rectangle",
style="major", style="major",
color="primary", color="primary",
on_press=self.on_send_pressed on_press=self.on_send_pressed,
is_loading=self.bind().submit_button_is_loading
) )
return Column( return Column(
MainViewContentBox( MainViewContentBox(
@ -117,12 +119,21 @@ class ContactPage(Component):
margin_bottom=1, margin_bottom=1,
align_x=0.5 align_x=0.5
), ),
self.email_input, email_input,
self.subject_input, subject_input,
self.message_input, message_input,
Row( Row(
self.animated_text, Text(
self.submit_button, text=self.bind().response_message,
style=TextStyle(
fill=self.session.theme.success_color if self.is_success else self.session.theme.danger_color,
font_size=0.9
),
margin_top=2,
margin_bottom=1,
align_x=0.1
),
submit_button,
) )
) )
), ),