Verified Commit d3042fd1 authored by Jakob Moser's avatar Jakob Moser
Browse files

Keep sort state on reload

Closes #29
parent 7daac4fe
Loading
Loading
Loading
Loading
+19 −10
Original line number Diff line number Diff line
@@ -10,6 +10,16 @@ from textual.widgets.data_table import ColumnKey
from poolpay.model.Person import Person


def to_decimal_if_numeric(thing: str | Text) -> str | Decimal:
    str_value = thing.plain if isinstance(thing, Text) else thing
    str_value_no_currency_symbol = re.sub(r"\s*€$", "", str_value)

    try:
        return parse_decimal(str_value_no_currency_symbol)
    except NumberFormatError:
        return str_value


def to_chunked_hex(i: int) -> str:
    i_hex = hex(i).removeprefix("0x")

@@ -44,16 +54,15 @@ class PersonsTable(DataTable):
    def add_all_persons(self) -> None:
        self.add_rows(to_row(p) for p in Person.get_all())

    def on_data_table_header_selected(self, event: DataTable.HeaderSelected) -> None:
        def convert_to_decimal_if_numeric(thing: str | Text) -> str | Decimal:
            str_value = thing.plain if isinstance(thing, Text) else thing
            str_value_no_currency_symbol = re.sub(r"\s*€$", "", str_value)

            try:
                return parse_decimal(str_value_no_currency_symbol)
            except NumberFormatError:
                return str_value
    def reload(self) -> None:
        self.clear()
        self.add_all_persons()
        if self.sort_key:
            self.sort(
                self.sort_key, key=to_decimal_if_numeric, reverse=self.sort_reversed
            )

    def on_data_table_header_selected(self, event: DataTable.HeaderSelected) -> None:
        if self.sort_key == event.column_key:
            self.sort_reversed = not self.sort_reversed
        else:
@@ -62,5 +71,5 @@ class PersonsTable(DataTable):
        self.sort_key = event.column_key

        self.sort(
            self.sort_key, key=convert_to_decimal_if_numeric, reverse=self.sort_reversed
            self.sort_key, key=to_decimal_if_numeric, reverse=self.sort_reversed
        )
+1 −2
Original line number Diff line number Diff line
@@ -28,8 +28,7 @@ class PoolPayAdminApp(App):

    def action_reload(self) -> None:
        table = self.query_one(PersonsTable)
        table.clear()
        table.add_all_persons()
        table.reload()

    def action_add_person(self) -> None:
        def add_person(person_details: tuple[str, str, str]) -> None: