initial commit
This commit is contained in:
@@ -0,0 +1,125 @@
|
||||
from rio import Component, Rectangle, Column, Text, Row, PointerEventListener, TextInput
|
||||
from rio.event import on_populate
|
||||
|
||||
from elm.types import UserSession
|
||||
from elm.components import ElmButton
|
||||
from elm.services import UserService
|
||||
|
||||
|
||||
class AccountInfoBox(Component):
|
||||
mail: str = ""
|
||||
new_password: str = ""
|
||||
account_info_text: str = " "
|
||||
account_info_is_error: bool = False
|
||||
password_input_blocked: bool = False
|
||||
password_change_in_progress: bool = False
|
||||
|
||||
@on_populate
|
||||
async def on_populate(self) -> None:
|
||||
user = await self.session[UserService].get_user(self.session[UserSession].user_name)
|
||||
if user:
|
||||
self.mail = user.user_mail
|
||||
else:
|
||||
self.session.navigate_to("./login")
|
||||
|
||||
async def set_new_password(self) -> None:
|
||||
self.password_change_in_progress = True
|
||||
self.password_input_blocked = True
|
||||
|
||||
if len(self.new_password) == 0:
|
||||
self.account_info_is_error = True
|
||||
self.account_info_text = "Kein Passwort gesetzt"
|
||||
self.password_input_blocked = False
|
||||
self.password_change_in_progress = False
|
||||
return
|
||||
|
||||
user = await self.session[UserService].get_user(self.session[UserSession].user_name)
|
||||
if not user:
|
||||
self.account_info_is_error = True
|
||||
self.account_info_text = "Unbekannter Fehler"
|
||||
self.password_input_blocked = False
|
||||
self.password_change_in_progress = False
|
||||
return
|
||||
|
||||
result = await self.session[UserService].change_user_password(user.user_name, self.new_password)
|
||||
if result:
|
||||
self.account_info_is_error = False
|
||||
self.account_info_text = "Passwort geändert"
|
||||
self.password_input_blocked = False
|
||||
self.password_change_in_progress = False
|
||||
else:
|
||||
self.account_info_is_error = True
|
||||
self.account_info_text = "Unbekannter Fehler"
|
||||
self.password_input_blocked = False
|
||||
self.password_change_in_progress = False
|
||||
|
||||
def build(self) -> Component:
|
||||
row_col = Row
|
||||
if self.session.is_mobile():
|
||||
row_col = Column
|
||||
|
||||
return Rectangle(
|
||||
content=Column(
|
||||
Rectangle(
|
||||
content=Rectangle(
|
||||
content=Text("Account Informationen", margin=0.5, selectable=False, overflow="wrap"),
|
||||
fill=self.session.theme.header_box_background_color,
|
||||
margin=0.4
|
||||
),
|
||||
stroke_width=0.1,
|
||||
stroke_color=self.session.theme.box_border_color,
|
||||
),
|
||||
Column(
|
||||
TextInput(text=self.session[UserSession].user_name, label="Nutzername", is_sensitive=False),
|
||||
TextInput(text=self.mail, label="E-Mail Adresse", is_sensitive=False),
|
||||
row_col(
|
||||
PointerEventListener(
|
||||
Rectangle(
|
||||
content=Row(Text("Ticket:", margin=1, overflow="wrap", justify="left"), Text("-", margin=1, overflow="wrap", justify="right")),
|
||||
fill=self.session.theme.danger_color_dark,
|
||||
stroke_width=0.1,
|
||||
stroke_color=self.session.theme.danger_color,
|
||||
hover_fill=self.session.theme.danger_color,
|
||||
hover_stroke_width=0.1,
|
||||
hover_stroke_color=self.session.theme.danger_color_dark,
|
||||
transition_time=0.2,
|
||||
cursor="pointer"
|
||||
),
|
||||
on_press=lambda _: self.session.navigate_to("./tickets")
|
||||
),
|
||||
PointerEventListener(
|
||||
Rectangle(
|
||||
content=Row(Text("Sitzplatz:", margin=1, overflow="wrap", justify="left"), Text("-", margin=1, overflow="wrap", justify="right")),
|
||||
fill=self.session.theme.danger_color_dark,
|
||||
stroke_width=0.1,
|
||||
stroke_color=self.session.theme.danger_color,
|
||||
hover_fill=self.session.theme.danger_color,
|
||||
hover_stroke_width=0.1,
|
||||
hover_stroke_color=self.session.theme.danger_color_dark,
|
||||
transition_time=0.2,
|
||||
cursor="pointer"
|
||||
),
|
||||
on_press=lambda _: self.session.navigate_to("./seating")
|
||||
),
|
||||
spacing=1
|
||||
),
|
||||
row_col(
|
||||
TextInput(text=self.bind().new_password, label="Neues Passwort", is_secret=True, is_sensitive=not self.password_input_blocked, grow_x=True),
|
||||
ElmButton(
|
||||
text="Speichern",
|
||||
style="normal",
|
||||
wrap=self.session.is_mobile(),
|
||||
on_press=self.set_new_password,
|
||||
is_loading=self.password_change_in_progress
|
||||
),
|
||||
spacing=1
|
||||
),
|
||||
Text(text=self.account_info_text, fill=self.session.theme.danger_color if self.account_info_is_error else self.session.theme.success_color),
|
||||
spacing=1,
|
||||
margin=1
|
||||
)
|
||||
),
|
||||
fill=self.session.theme.box_color,
|
||||
stroke_width=0.1,
|
||||
stroke_color=self.session.theme.box_border_color
|
||||
)
|
||||
Reference in New Issue
Block a user