improve news and news manager
This commit is contained in:
parent
947a05ad14
commit
a1fb68c976
@ -2,7 +2,7 @@ from datetime import datetime
|
|||||||
from functools import partial
|
from functools import partial
|
||||||
from typing import Optional, Callable
|
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):
|
class NewsPost(Component):
|
||||||
@ -94,56 +94,59 @@ class EditableNewsPost(NewsPost):
|
|||||||
self.__setattr__(prop, value)
|
self.__setattr__(prop, value)
|
||||||
|
|
||||||
def build(self) -> Component:
|
def build(self) -> Component:
|
||||||
return Rectangle(
|
return ThemeContextSwitcher(
|
||||||
content=Column(
|
content=Rectangle(
|
||||||
Row(
|
content=Column(
|
||||||
TextInput(
|
Row(
|
||||||
text=self.title,
|
TextInput(
|
||||||
label="Titel",
|
text=self.title,
|
||||||
style="rounded",
|
label="Titel",
|
||||||
min_width=15,
|
style="rounded",
|
||||||
on_change=lambda e: self.set_prop("title", e.text)
|
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(
|
TextInput(
|
||||||
text=self.author,
|
text=self.subtitle,
|
||||||
label="Autor",
|
label="Untertitel",
|
||||||
style="rounded",
|
style="rounded",
|
||||||
grow_x=True,
|
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")),
|
MultiLineTextInput(
|
||||||
Rectangle(content=Button(icon="material/save", style="major", color="success", shape="rectangle", on_press=partial(self.save_cb, self)), fill=Color.from_hex("0b7372"))
|
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,
|
color="primary"
|
||||||
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
|
|
||||||
)
|
)
|
||||||
|
|||||||
@ -63,7 +63,7 @@ class ManageNewsPage(Component):
|
|||||||
self.news_posts = (await self.session[NewsService].get_news())[:8]
|
self.news_posts = (await self.session[NewsService].get_news())[:8]
|
||||||
|
|
||||||
def build(self) -> Component:
|
def build(self) -> Component:
|
||||||
posts = sorted([EditableNewsPost(
|
posts = [EditableNewsPost(
|
||||||
news_id=news.news_id,
|
news_id=news.news_id,
|
||||||
title=news.title,
|
title=news.title,
|
||||||
subtitle=news.subtitle,
|
subtitle=news.subtitle,
|
||||||
@ -72,7 +72,7 @@ class ManageNewsPage(Component):
|
|||||||
author=news.author.user_name,
|
author=news.author.user_name,
|
||||||
save_cb=self.on_news_post_changed,
|
save_cb=self.on_news_post_changed,
|
||||||
delete_cb=self.on_news_post_deleted
|
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(
|
return Column(
|
||||||
MainViewContentBox(
|
MainViewContentBox(
|
||||||
Column(
|
Column(
|
||||||
|
|||||||
@ -17,12 +17,13 @@ class NewsService:
|
|||||||
return
|
return
|
||||||
await self._db_service.add_news(news)
|
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:
|
if not dt_end:
|
||||||
dt_end = date.today()
|
dt_end = date.today()
|
||||||
if not dt_start:
|
if not dt_start:
|
||||||
dt_start = date(1900, 1, 1)
|
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:
|
async def update_news(self, news: News) -> None:
|
||||||
return await self._db_service.update_news(news)
|
return await self._db_service.update_news(news)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user