use leptodon_proc_macros::generate_docs;
use leptos::prelude::ClassAttribute;
use leptos::prelude::ElementChild;
use leptos::prelude::{IntoAny, RwSignal};
use leptos::view;
use leptos::{
IntoView, component,
prelude::{Children, MaybeProp},
};
use crate::button::{Button, ButtonAppearance};
use crate::modal::{Modal, ModalFooterChildren};
use crate::util::callback::BoxCallback;
#[generate_docs]
#[component]
pub fn Dialog(
#[prop(optional, into)]
id: MaybeProp<String>,
#[prop(optional, into)]
class: MaybeProp<String>,
#[prop(optional, into)]
title: MaybeProp<String>,
#[prop(optional, into)]
visible: RwSignal<bool>,
#[prop(default = "Ok".into(), into)]
primary_text: String,
#[prop(default = BoxCallback::new(|| ()), into)]
on_click_primary: BoxCallback,
#[prop(default = "Cancel".into(), into)]
secondary_text: String,
#[prop(default = BoxCallback::new(|| ()), into)]
on_click_secondary: BoxCallback,
children: Children,
) -> impl IntoView {
let footer = ModalFooterChildren::builder()
.children(Box::new(|| {
view! {
<div class="w-full flex justify-end">
<Button on_click=move |_| on_click_secondary()>{secondary_text}</Button>
<Button on_click=move |_| on_click_primary() appearance=ButtonAppearance::Primary>{primary_text}</Button>
</div>
}
.into_any()
}))
.build();
view! {
<Modal id class title visible children footer />
}
}