53 lines
1.6 KiB
Python
53 lines
1.6 KiB
Python
from datetime import datetime
|
|
|
|
from textual import on
|
|
from textual.app import ComposeResult
|
|
from textual.containers import Horizontal, Vertical, Container
|
|
from textual.widgets import DataTable, Input
|
|
|
|
|
|
class ListPane(Container):
|
|
def compose(self) -> ComposeResult:
|
|
with Vertical():
|
|
yield DataTable()
|
|
with Horizontal(id="filter"):
|
|
yield Input(
|
|
id="search", placeholder="Category/activity name contains text"
|
|
)
|
|
yield Input(
|
|
id="date",
|
|
placeholder="After date, in {0} format".format(
|
|
datetime.now().strftime("%Y-%m-%d")
|
|
),
|
|
)
|
|
|
|
def action_refresh(self) -> None:
|
|
self._refresh()
|
|
|
|
def action_sort(self) -> None:
|
|
self.table.cursor_type = "column"
|
|
|
|
def on_data_table_column_selected(self, event):
|
|
self.sort = (event.column_key,)
|
|
event.data_table.sort(*self.sort)
|
|
event.data_table.cursor_type = "row"
|
|
|
|
def action_filter(self) -> None:
|
|
self.query_one("#filter").display = True
|
|
self._refresh()
|
|
self.query_one("#filter #search").focus()
|
|
|
|
def on_input_submitted(self, event):
|
|
self.table.focus()
|
|
|
|
def action_cancelfilter(self) -> None:
|
|
self.query_one("#filter").display = False
|
|
self.query_one("#filter #search").clear()
|
|
self.query_one("#filter #date").clear()
|
|
self.table.focus()
|
|
self._refresh()
|
|
|
|
@on(Input.Changed, "#filter Input")
|
|
def filter(self, event):
|
|
self._refresh()
|