32 lines
1.1 KiB
Python
32 lines
1.1 KiB
Python
from typing import Callable
|
|
from decimal import Decimal
|
|
|
|
import rio
|
|
from rio import Component, Row, Text, IconButton, TextStyle
|
|
|
|
from src.ez_lan_manager import AccountingService
|
|
|
|
MAX_LEN = 24
|
|
|
|
class CateringCartItem(Component):
|
|
article_name: str
|
|
article_price: Decimal
|
|
article_id: int
|
|
list_id: int
|
|
remove_item_cb: Callable
|
|
|
|
@staticmethod
|
|
def ellipsize_string(string: str) -> str:
|
|
if len(string) <= MAX_LEN:
|
|
return string
|
|
|
|
return string[:MAX_LEN - 3] + "..."
|
|
|
|
def build(self) -> rio.Component:
|
|
return Row(
|
|
Text(self.ellipsize_string(self.article_name), align_x=0, overflow="wrap", min_width=19, style=TextStyle(fill=self.session.theme.background_color, font_size=0.9)),
|
|
Text(AccountingService.make_euro_string_from_decimal(self.article_price), style=TextStyle(fill=self.session.theme.background_color, font_size=0.9)),
|
|
IconButton(icon="material/close", min_size=2, color=self.session.theme.danger_color, style="plain-text", on_press=lambda: self.remove_item_cb(self.list_id)),
|
|
proportions=(19, 5, 2)
|
|
)
|