48 lines
2.3 KiB
Python
48 lines
2.3 KiB
Python
from typing import Callable
|
|
|
|
from rio import Component, Row, Text, TextStyle, Color, Rectangle, CursorStyle
|
|
from rio.components.pointer_event_listener import PointerEvent, PointerEventListener
|
|
|
|
from src.ezgg_lan_manager.types.CateringOrder import CateringOrderStatus, CateringOrder
|
|
|
|
MAX_LEN = 24
|
|
|
|
class CateringOrderItem(Component):
|
|
order: CateringOrder
|
|
info_modal_cb: Callable
|
|
|
|
def get_display_text_and_color_for_order_status(self, order_status: CateringOrderStatus) -> tuple[str, Color]:
|
|
match order_status:
|
|
case CateringOrderStatus.RECEIVED:
|
|
return "In Bearbeitung", self.session.theme.success_color
|
|
case CateringOrderStatus.DELAYED:
|
|
return "Verspätet", Color.from_hex("eed202")
|
|
case CateringOrderStatus.READY_FOR_PICKUP:
|
|
return "Abholbereit", self.session.theme.success_color
|
|
case CateringOrderStatus.EN_ROUTE:
|
|
return "Unterwegs", self.session.theme.success_color
|
|
case CateringOrderStatus.COMPLETED:
|
|
return "Abgeschlossen", self.session.theme.success_color
|
|
case CateringOrderStatus.CANCELED:
|
|
return "Storniert", self.session.theme.danger_color
|
|
case _:
|
|
return "Unbekannt(wtf?)", self.session.theme.danger_color
|
|
|
|
|
|
def build(self) -> Component:
|
|
order_status, color = self.get_display_text_and_color_for_order_status(self.order.status)
|
|
return PointerEventListener(
|
|
Rectangle(
|
|
content=Row(
|
|
Text(f"ID: {str(self.order.order_id):0>6}", align_x=0, overflow="wrap", min_width=10, style=TextStyle(fill=self.session.theme.background_color, font_size=0.9), margin_right=1),
|
|
Text(order_status, overflow="wrap", min_width=10, style=TextStyle(fill=color, font_size=0.9), margin_right=1),
|
|
Text(self.order.order_date.strftime("%d.%m. %H:%M"), style=TextStyle(fill=self.session.theme.background_color, font_size=0.9), align_x=1)
|
|
),
|
|
fill=self.session.theme.primary_color,
|
|
hover_fill=self.session.theme.hud_color,
|
|
transition_time=0.1,
|
|
cursor=CursorStyle.POINTER
|
|
),
|
|
on_press=lambda _: self.info_modal_cb(self.order),
|
|
)
|