Verified Commit 61adcc5d authored by Jakob Moser's avatar Jakob Moser
Browse files

Implement sorting by balance

Closes #15
parent 2095f1bf
Loading
Loading
Loading
Loading
+12 −2
Original line number Diff line number Diff line
import re
from decimal import Decimal

from babel.numbers import format_currency
from babel.numbers import NumberFormatError, format_currency, parse_decimal
from rich.text import Text
from textual.widgets import DataTable

@@ -34,4 +35,13 @@ class PersonsTable(DataTable):
        self.add_rows(to_row(p) for p in Person.get_all())

    def on_data_table_header_selected(self, event: DataTable.HeaderSelected) -> None:
        self.sort(event.column_key)
        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 = str_value.removesuffix("")

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

        self.sort(event.column_key, key=convert_to_decimal_if_numeric)