add db service, add member page

This commit is contained in:
David Rodenkirchen 2024-05-27 10:01:27 +02:00
parent a27d28498c
commit 474ec1b211
8 changed files with 121 additions and 0 deletions

View File

@ -6,6 +6,7 @@ import rio
from . import pages
from . import components as comps
from . import services
themes = [
# Grey/Purple
@ -113,6 +114,11 @@ app = rio.App(
page_url='about',
build=pages.About,
),
rio.Page(
name="Member",
page_url='member',
build=lambda: pages.Member(services.DatabaseService()),
)
],
theme=themes[6],
assets_dir=Path(__file__).parent / "assets",

Binary file not shown.

After

Width:  |  Height:  |  Size: 100 KiB

View File

@ -1,3 +1,4 @@
from .navigation import Navigation
from .header import Header
from .news_post import NewsPost
from .member_card import MemberInfo, MemberCard

View File

@ -0,0 +1,36 @@
from pathlib import Path
from dataclasses import dataclass
import rio
@dataclass
class MemberInfo:
picture_path: Path
name: str
position: str
entry_date: str
class MemberCard(rio.Component):
def __init__(self, info: MemberInfo) -> None:
super().__init__()
self._info = info
self.align_y = 0
self.margin_top = 0
self.margin_bottom = 2
self.margin_right = 1
def build(self) -> rio.Component:
return rio.Rectangle(
content=rio.Column(
rio.Image(self._info.picture_path, height=9, margin_bottom=1.3),
rio.Text(self._info.name, margin_bottom=0.4, style=rio.TextStyle(font_weight="bold")),
rio.Text(self._info.position, margin_bottom=0.4, style=rio.TextStyle(italic=True)),
rio.Text(f"Mitglied seit {self._info.entry_date}", style=rio.TextStyle(italic=True), margin_bottom=0.4)
),
fill=self.session.theme.neutral_color,
corner_radius=self.session.theme.corner_radius_medium,
shadow_radius=0.5,
shadow_color=self.session.theme.hud_color,
shadow_offset_y=0
)

View File

@ -1,3 +1,4 @@
from .home import Home
from .about import About
from .member import Member
from .page_builder import build_page

View File

@ -0,0 +1,25 @@
from __future__ import annotations
from typing import * # type: ignore
import rio
from .page_builder import build_page
from .. import components as comps
from .. import services
class Member(rio.Component):
def __init__(self, database_service: services.database_service.DatabaseService) -> None:
super().__init__()
self._database_service = database_service
def build(self) -> rio.Component:
grid = rio.Grid()
for i, member in enumerate(self._database_service.get_members()):
grid.add(
comps.MemberCard(member),
row=i // 2,
column=i % 2,
)
return build_page(grid)

View File

@ -0,0 +1 @@
from .database_service import DatabaseService

View File

@ -0,0 +1,51 @@
from from_root import from_root
from ezgg_website.components import MemberInfo
from ezgg_website.components.member_card import MemberInfo
# @ToDo: Make real database service at some point
class DatabaseService:
def __init__(self):
pass
def get_members(self) -> list[MemberInfo]:
return [
MemberInfo(
picture_path=from_root("ezgg_website/assets/member_pictures/anon.png"),
name="David \"Typhus\" R.",
position="1. Vorsitzender",
entry_date="29.10.2023"
), MemberInfo(
picture_path=from_root("ezgg_website/assets/member_pictures/anon.png"),
name="Julia \"Ravenchild\" A.",
position="2. Vorsitzende",
entry_date="29.10.2023"
), MemberInfo(
picture_path=from_root("ezgg_website/assets/member_pictures/anon.png"),
name="Jessy \"JessySixx\" R.",
position="Schatzmeisterin",
entry_date="29.10.2023"
), MemberInfo(
picture_path=from_root("ezgg_website/assets/member_pictures/anon.png"),
name="Tim \"Matschwicht\" B.",
position="Mitglied",
entry_date="29.10.2023"
), MemberInfo(
picture_path=from_root("ezgg_website/assets/member_pictures/anon.png"),
name="Dennis \"Goodman\" P.",
position="Mitglied",
entry_date="29.10.2023"
), MemberInfo(
picture_path=from_root("ezgg_website/assets/member_pictures/anon.png"),
name="Tom \"Tcprod\" C.",
position="Mitglied",
entry_date="29.10.2023"
), MemberInfo(
picture_path=from_root("ezgg_website/assets/member_pictures/anon.png"),
name="Chris \"Meliodas\" K.",
position="Mitglied",
entry_date="29.10.2023"
)
]