sync mvp-dev to main #2

Merged
Typhus merged 85 commits from mvp-dev into main 2025-01-23 19:25:01 +00:00
3 changed files with 55 additions and 51 deletions
Showing only changes of commit a1fb68c976 - Show all commits

View File

@ -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"
)

View File

@ -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(

View File

@ -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)