From a1fb68c976f39ac327fd38abb53d0fc92051eedc Mon Sep 17 00:00:00 2001 From: David Rodenkirchen Date: Fri, 29 Nov 2024 20:16:12 +0100 Subject: [PATCH] improve news and news manager --- src/ez_lan_manager/components/NewsPost.py | 97 +++++++++++----------- src/ez_lan_manager/pages/ManageNewsPage.py | 4 +- src/ez_lan_manager/services/NewsService.py | 5 +- 3 files changed, 55 insertions(+), 51 deletions(-) diff --git a/src/ez_lan_manager/components/NewsPost.py b/src/ez_lan_manager/components/NewsPost.py index 13e4b49..7d814bd 100644 --- a/src/ez_lan_manager/components/NewsPost.py +++ b/src/ez_lan_manager/components/NewsPost.py @@ -2,7 +2,7 @@ from datetime import datetime from functools import partial from typing import Optional, Callable -from rio import Component, Rectangle, Text, TextStyle, Column, Row, TextInput, DateInput, MultiLineTextInput, IconButton, Color, Button +from rio import Component, Rectangle, Text, TextStyle, Column, Row, TextInput, DateInput, MultiLineTextInput, IconButton, Color, Button, ThemeContextSwitcher class NewsPost(Component): @@ -94,56 +94,59 @@ class EditableNewsPost(NewsPost): self.__setattr__(prop, value) def build(self) -> Component: - return Rectangle( - content=Column( - Row( - TextInput( - text=self.title, - label="Titel", - style="rounded", - min_width=15, - on_change=lambda e: self.set_prop("title", e.text) + return ThemeContextSwitcher( + content=Rectangle( + content=Column( + Row( + TextInput( + text=self.title, + label="Titel", + style="rounded", + min_width=15, + on_change=lambda e: self.set_prop("title", e.text) + ), + DateInput( + value=datetime.strptime(self.date, "%d.%m.%Y"), + style="rounded", + on_change=lambda e: self.set_prop("date", e.value.strftime("%d.%m.%Y")) + ) ), - DateInput( - value=datetime.strptime(self.date, "%d.%m.%Y"), - style="rounded", - on_change=lambda e: self.set_prop("date", e.value.strftime("%d.%m.%Y")) - ) - ), - TextInput( - text=self.subtitle, - label="Untertitel", - style="rounded", - grow_x=True, - on_change=lambda e: self.set_prop("subtitle", e.text) - ), - MultiLineTextInput( - text=self.text, - label="Text", - style="rounded", - grow_x=True, - min_height=12, - on_change=lambda e: self.set_prop("text", e.text) - ), - Row( TextInput( - text=self.author, - label="Autor", + text=self.subtitle, + label="Untertitel", style="rounded", grow_x=True, - on_change=lambda e: self.set_prop("author", e.text) + on_change=lambda e: self.set_prop("subtitle", e.text) ), - Rectangle(content=Button(icon="material/delete", style="major", color="danger", shape="rectangle", on_press=partial(self.delete_cb, self.news_id)), fill=Color.from_hex("0b7372")), - Rectangle(content=Button(icon="material/save", style="major", color="success", shape="rectangle", on_press=partial(self.save_cb, self)), fill=Color.from_hex("0b7372")) - ) + MultiLineTextInput( + text=self.text, + label="Text", + style="rounded", + grow_x=True, + min_height=12, + on_change=lambda e: self.set_prop("text", e.text) + ), + Row( + TextInput( + text=self.author, + label="Autor", + style="rounded", + grow_x=True, + on_change=lambda e: self.set_prop("author", e.text) + ), + Rectangle(content=Button(icon="material/delete", style="major", color="danger", shape="rectangle", on_press=partial(self.delete_cb, self.news_id)), fill=Color.from_hex("0b7372")), + Rectangle(content=Button(icon="material/save", style="major", color="success", shape="rectangle", on_press=partial(self.save_cb, self)), fill=Color.from_hex("0b7372")) + ) + ), + fill=self.session.theme.primary_color, + margin_left=1, + margin_right=1, + margin_top=2, + margin_bottom=1, + shadow_radius=0.2, + shadow_color=self.session.theme.background_color, + shadow_offset_y=0, + corner_radius=0.2 ), - fill=self.session.theme.primary_color, - margin_left=1, - margin_right=1, - margin_top=2, - margin_bottom=1, - shadow_radius=0.2, - shadow_color=self.session.theme.background_color, - shadow_offset_y=0, - corner_radius=0.2 + color="primary" ) diff --git a/src/ez_lan_manager/pages/ManageNewsPage.py b/src/ez_lan_manager/pages/ManageNewsPage.py index fa20800..36c51bf 100644 --- a/src/ez_lan_manager/pages/ManageNewsPage.py +++ b/src/ez_lan_manager/pages/ManageNewsPage.py @@ -63,7 +63,7 @@ class ManageNewsPage(Component): self.news_posts = (await self.session[NewsService].get_news())[:8] def build(self) -> Component: - posts = sorted([EditableNewsPost( + posts = [EditableNewsPost( news_id=news.news_id, title=news.title, subtitle=news.subtitle, @@ -72,7 +72,7 @@ class ManageNewsPage(Component): author=news.author.user_name, save_cb=self.on_news_post_changed, delete_cb=self.on_news_post_deleted - ) for news in self.news_posts], key=lambda p: p.date) + ) for news in self.news_posts] return Column( MainViewContentBox( Column( diff --git a/src/ez_lan_manager/services/NewsService.py b/src/ez_lan_manager/services/NewsService.py index 1211af5..8ac089a 100644 --- a/src/ez_lan_manager/services/NewsService.py +++ b/src/ez_lan_manager/services/NewsService.py @@ -17,12 +17,13 @@ class NewsService: return await self._db_service.add_news(news) - async def get_news(self, dt_start: Optional[date] = None, dt_end: Optional[date] = None) -> list[News]: + async def get_news(self, dt_start: Optional[date] = None, dt_end: Optional[date] = None, newest_first: bool = True) -> list[News]: if not dt_end: dt_end = date.today() if not dt_start: dt_start = date(1900, 1, 1) - return await self._db_service.get_news(dt_start, dt_end) + fetched_news = await self._db_service.get_news(dt_start, dt_end) + return sorted(fetched_news, key=lambda news: news.news_date, reverse=newest_first) async def update_news(self, news: News) -> None: return await self._db_service.update_news(news)