use super::AuthButtonMode;
use crate::options::SignUpOptions;
use dioxus::prelude::*;
#[component]
pub fn SignUpButton(
#[props(default)]
mode: AuthButtonMode,
#[props(into)]
sign_in_url: Option<String>,
#[props(into)]
waitlist_url: Option<String>,
#[props(into)]
force_redirect_url: Option<String>,
#[props(into)]
fallback_redirect_url: Option<String>,
#[props(into)]
sign_in_force_redirect_url: Option<String>,
#[props(into)]
sign_in_fallback_redirect_url: Option<String>,
initial_values: Option<serde_json::Value>,
appearance: Option<serde_json::Value>,
#[props(default = SignUpOptions::from_value(serde_json::Value::Null), into)]
options: SignUpOptions,
#[props(default)]
disabled: bool,
#[props(extends = GlobalAttributes, extends = button)]
attributes: Vec<Attribute>,
#[props(default, into)]
onclick: Callback<MouseEvent>,
#[props(default = rsx! { "Sign up" })]
children: Element,
) -> Element {
let options = options
.maybe_sign_in_url(sign_in_url)
.maybe_waitlist_url(waitlist_url)
.maybe_force_redirect_url(force_redirect_url)
.maybe_fallback_redirect_url(fallback_redirect_url)
.maybe_sign_in_force_redirect_url(sign_in_force_redirect_url)
.maybe_sign_in_fallback_redirect_url(sign_in_fallback_redirect_url)
.maybe_initial_values(initial_values)
.maybe_appearance(appearance)
.into_value();
let clerk = crate::use_clerk();
super::button_host::button_host(
super::button_host::ButtonChrome {
attributes,
disabled,
onclick,
children,
},
move || match mode {
AuthButtonMode::Modal => clerk.open_sign_up_with_options(options.clone()),
AuthButtonMode::Redirect => clerk.redirect_to_sign_up_with_options(options.clone()),
},
)
}