Coverage for src / lexigram / admin / ui / molecules / date_range_filter.py: 60%
10 statements
« prev ^ index » next coverage.py v7.13.5, created at 2026-08-11 02:23 +0800
« prev ^ index » next coverage.py v7.13.5, created at 2026-08-11 02:23 +0800
1from __future__ import annotations
3from typing import Any
5from lexigram.ui import Component, DateInput, el
8class DateRangeFilter(Component):
9 """
10 A simple date range filter with start and end inputs.
11 """
13 def __init__(
14 self,
15 name_prefix: str = "date",
16 label: str = "Date Range",
17 **props,
18 ) -> None:
19 super().__init__(name_prefix=name_prefix, label=label, **props)
20 self.name_prefix = name_prefix
21 self.label = label
23 def render(self) -> Any:
24 return el(
25 "div",
26 el(
27 "label",
28 self.label,
29 class_="block text-sm font-medium text-foreground mb-1.5",
30 ),
31 el(
32 "div",
33 DateInput(
34 name=f"{self.name_prefix}_start",
35 class_="rounded-t-md sm:rounded-l-md sm:rounded-t-none",
36 hx_get=self.props.get("hx_get"),
37 hx_trigger="change",
38 hx_target=self.props.get("hx_target", "#main-content"),
39 ).render(),
40 el(
41 "span",
42 "to",
43 class_="px-2 text-muted-foreground text-sm self-center sm:py-0 py-2",
44 ),
45 DateInput(
46 name=f"{self.name_prefix}_end",
47 class_="rounded-b-md sm:rounded-r-md sm:rounded-b-none",
48 hx_get=self.props.get("hx_get"),
49 hx_trigger="change",
50 hx_target=self.props.get("hx_target", "#main-content"),
51 ).render(),
52 class_="flex flex-col sm:flex-row",
53 ),
54 class_="min-w-[300px]",
55 )