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, DateTimeField, DateTimeFieldAppearance, DateTimeFieldBind};
use super::field_types::{DateTimeRangeFieldAppearance, DateTimeRangeFieldBind};
#[component_doc(
category = "Calendar & Time",
preview_slug = "date-time-range-field",
preview_label = "DateTime Range Field",
preview_icon = icondata::AiFieldTimeOutlined,
)]
#[component]
pub fn DateTimeRangeField(
#[prop(optional, into)]
bind: DateTimeRangeFieldBind,
#[prop(optional, into)]
appearance: DateTimeRangeFieldAppearance,
#[prop(optional, into)]
class: MaybeProp<String>,
) -> impl IntoView {
let DateTimeRangeFieldBind { value, id, name } = bind;
let DateTimeRangeFieldAppearance {
date_format,
time_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 = DateTimeFieldAppearance {
date_format,
time_format,
timezone,
disabled,
};
let field_appearance_end = DateTimeFieldAppearance {
date_format,
time_format,
timezone,
disabled,
};
let root_class = move || {
let mut parts = vec![range_field_root_classes(
"orb-datetime-range-field",
theme_options.get().density,
)];
if let Some(extra) = class.get() {
if !extra.is_empty() {
parts.push(extra);
}
}
parts.join(" ")
};
view! {
<style>{picker_style_sheet()}</style>
<div class=root_class data-orbital-picker="">
<DateTimeField
bind=DateTimeFieldBind { value: coordinator.start.into(), id, name }
appearance=field_appearance_start
/>
<span class="orb-picker-range-field__separator">" – "</span>
<DateTimeField
bind=DateTimeFieldBind { value: coordinator.end.into(), ..Default::default() }
appearance=field_appearance_end
/>
</div>
}
}