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

1from __future__ import annotations 

2 

3from typing import Any 

4 

5from lexigram.ui import Component, DateInput, el 

6 

7 

8class DateRangeFilter(Component): 

9 """ 

10 A simple date range filter with start and end inputs. 

11 """ 

12 

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 

22 

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 )