mod styles;
use leptos::prelude::*;
use orbital_macros::component_doc;
use orbital_theme::use_theme_options;
use crate::shared::{picker_style_sheet, range_field_root_classes, use_range_coordinator};
use crate::{use_datetime_locale, DateField, DateFieldAppearance, DateFieldBind};
use super::field_types::{DateRangeFieldAppearance, DateRangeFieldBind};
use styles::date_range_field_styles;
#[component_doc(
category = "Calendar & Time",
preview_slug = "date-range-field",
preview_label = "Date Range Field",
preview_icon = icondata::AiFieldBinaryOutlined,
)]
#[component]
pub fn DateRangeField(
#[prop(optional, into)]
bind: DateRangeFieldBind,
#[prop(optional, into)]
appearance: DateRangeFieldAppearance,
#[prop(optional, into)]
class: MaybeProp<String>,
) -> impl IntoView {
let DateRangeFieldBind { value, id, name } = bind;
let DateRangeFieldAppearance {
format,
timezone,
disabled,
} = appearance;
let locale = use_datetime_locale();
let theme_options = use_theme_options();
let coordinator = use_range_coordinator(value);
let field_appearance_start = DateFieldAppearance {
format,
timezone,
disabled,
};
let field_appearance_end = DateFieldAppearance {
format,
timezone,
disabled,
};
let root_class = move || {
let mut parts = vec![range_field_root_classes(
"orb-date-range-field",
theme_options.get().density,
)];
if let Some(extra) = class.get() {
if !extra.is_empty() {
parts.push(extra);
}
}
let _ = locale.default_format;
parts.join(" ")
};
view! {
<style>{date_range_field_styles()}</style>
<style>{picker_style_sheet()}</style>
<div class=root_class data-orbital-picker="">
<DateField
bind=DateFieldBind { value: coordinator.start.into(), id, name }
appearance=field_appearance_start
/>
<span class="orb-picker-range-field__separator">" – "</span>
<DateField
bind=DateFieldBind { value: coordinator.end.into(), ..Default::default() }
appearance=field_appearance_end
/>
</div>
}
}