Skip to content

Commit 3bba304

Browse files
committed
[*] DatePicker: date range selection
- Add DatePicker variants - Draft implementation DateRange for DatePicker - Extend DateRange struct - Use min and max dates in props as DateRange - Spell check fix for Calendar
1 parent 98067ce commit 3bba304

File tree

7 files changed

+615
-177
lines changed

7 files changed

+615
-177
lines changed

preview/src/components/date_picker/component.rs

Lines changed: 51 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use dioxus::prelude::*;
22

33
use dioxus_primitives::{
4-
date_picker::{self, DatePickerInputProps, DatePickerProps},
4+
date_picker::{self, DatePickerInputProps, DatePickerProps, DateRangePickerProps},
55
popover::{PopoverContentProps, PopoverTriggerProps},
66
ContentAlign,
77
};
@@ -30,6 +30,27 @@ pub fn DatePicker(props: DatePickerProps) -> Element {
3030
}
3131
}
3232

33+
#[component]
34+
pub fn DateRangePicker(props: DateRangePickerProps) -> Element {
35+
rsx! {
36+
document::Link { rel: "stylesheet", href: asset!("./style.css") }
37+
div {
38+
date_picker::DateRangePicker {
39+
class: "date-picker",
40+
on_range_change: props.on_range_change,
41+
selected_range: props.selected_range,
42+
disabled: props.disabled,
43+
read_only: props.read_only,
44+
attributes: props.attributes,
45+
date_picker::DatePickerPopover {
46+
popover_root: PopoverRoot,
47+
{props.children}
48+
}
49+
}
50+
}
51+
}
52+
}
53+
3354
#[component]
3455
pub fn DatePickerInput(props: DatePickerInputProps) -> Element {
3556
rsx! {
@@ -59,6 +80,35 @@ pub fn DatePickerInput(props: DatePickerInputProps) -> Element {
5980
}
6081
}
6182

83+
#[component]
84+
pub fn DateRangePickerInput(props: DatePickerInputProps) -> Element {
85+
rsx! {
86+
date_picker::DateRangePickerInput {
87+
on_format_day_placeholder: props.on_format_day_placeholder,
88+
on_format_month_placeholder: props.on_format_month_placeholder,
89+
on_format_year_placeholder: props.on_format_year_placeholder,
90+
attributes: props.attributes,
91+
{props.children}
92+
DatePickerPopoverTrigger {}
93+
DatePickerPopoverContent {
94+
align: ContentAlign::Center,
95+
date_picker::DateRangePickerCalendar {
96+
calendar: RangeCalendar,
97+
CalendarHeader {
98+
CalendarNavigation {
99+
CalendarPreviousMonthButton {}
100+
CalendarSelectMonth {}
101+
CalendarSelectYear {}
102+
CalendarNextMonthButton {}
103+
}
104+
}
105+
CalendarGrid {}
106+
}
107+
}
108+
}
109+
}
110+
}
111+
62112
#[component]
63113
pub fn DatePickerPopoverTrigger(props: PopoverTriggerProps) -> Element {
64114
rsx! {
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
use super::super::component::*;
2+
use dioxus::prelude::*;
3+
4+
use dioxus_i18n::tid;
5+
use time::Date;
6+
7+
#[component]
8+
pub fn Demo() -> Element {
9+
let mut selected_date = use_signal(|| None::<Date>);
10+
11+
rsx! {
12+
div {
13+
DatePicker {
14+
selected_date: selected_date(),
15+
on_value_change: move |v| {
16+
tracing::info!("Selected date changed: {:?}", v);
17+
selected_date.set(v);
18+
},
19+
DatePickerInput {
20+
on_format_day_placeholder: || tid!("D_Abbr"),
21+
on_format_month_placeholder: || tid!("M_Abbr"),
22+
on_format_year_placeholder: || tid!("Y_Abbr"),
23+
}
24+
}
25+
}
26+
}
27+
}

preview/src/components/date_picker/variants/main/mod.rs

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
use super::super::component::*;
22
use dioxus::prelude::*;
33

4-
use dioxus_i18n::tid;
54
use time::Date;
65

76
#[component]
@@ -16,11 +15,7 @@ pub fn Demo() -> Element {
1615
tracing::info!("Selected date changed: {:?}", v);
1716
selected_date.set(v);
1817
},
19-
DatePickerInput {
20-
on_format_day_placeholder: || tid!("D_Abbr"),
21-
on_format_month_placeholder: || tid!("M_Abbr"),
22-
on_format_year_placeholder: || tid!("Y_Abbr"),
23-
}
18+
DatePickerInput {}
2419
}
2520
}
2621
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
use super::super::component::*;
2+
use dioxus::prelude::*;
3+
4+
use dioxus_primitives::calendar::DateRange;
5+
6+
#[component]
7+
pub fn Demo() -> Element {
8+
let mut selected_range = use_signal(|| None::<DateRange>);
9+
10+
rsx! {
11+
div {
12+
DateRangePicker {
13+
selected_range: selected_range(),
14+
on_range_change: move |range| {
15+
tracing::info!("Selected range: {:?}", range);
16+
selected_range.set(range);
17+
},
18+
DateRangePickerInput {}
19+
}
20+
}
21+
}
22+
}

preview/src/components/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ examples!(
6666
checkbox,
6767
collapsible,
6868
context_menu,
69-
date_picker,
69+
date_picker[internationalized, range],
7070
dialog,
7171
dropdown_menu,
7272
hover_card,

0 commit comments

Comments
 (0)