use leptos::prelude::*;
use orbital_core_components::{DatePicker, DatePickerAppearance, TimePicker, TimePickerAppearance};
use orbital_macros::component_doc;
use orbital_theme::use_theme_options;
use crate::building_blocks::{DateTimePickerAppearance, DateTimePickerBind};
use crate::shared::{
datetime_picker_root_classes, datetime_picker_row_class, picker_style_sheet,
use_datetime_coordinator,
};
#[component_doc(
category = "Calendar & Time",
preview_slug = "date-time-picker",
preview_label = "Date Time Picker",
preview_icon = icondata::AiCalendarOutlined,
)]
#[component]
pub fn DateTimePicker(
#[prop(optional, into)]
bind: DateTimePickerBind,
#[prop(optional, into)]
appearance: DateTimePickerAppearance,
#[prop(optional, into)]
class: MaybeProp<String>,
) -> impl IntoView {
let DateTimePickerBind { value, id, name } = bind;
let DateTimePickerAppearance {
date_format,
time_format,
timezone,
disabled,
placement,
} = appearance;
let locale = crate::use_datetime_locale();
let theme_options = use_theme_options();
let fallback_reference = Signal::derive(move || locale.reference_date);
let coordinator = use_datetime_coordinator(value, id, name, fallback_reference);
let date_appearance = DatePickerAppearance {
format: date_format,
timezone,
disabled,
placement,
..Default::default()
};
let time_appearance = TimePickerAppearance {
format: time_format,
reference_date: coordinator.reference_date,
timezone,
disabled,
};
let root_class = move || {
let mut parts = vec![datetime_picker_root_classes(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="">
<div class=datetime_picker_row_class()>
<DatePicker bind=coordinator.date_bind appearance=date_appearance />
<TimePicker bind=coordinator.time_bind appearance=time_appearance />
</div>
</div>
}
}