Skip to main content

Crate dioform_fullstack

Crate dioform_fullstack 

Source
Expand description

Dioxus Fullstack submit adapters for Dioform.

The adapter keeps Dioform’s submission lifecycle local to the form. Server functions return application-defined transport payloads, and callers map those payloads into structured SubmitErrors. Transport failures stay on a separate explicit mapping path so network, serialization, or server-function invocation failures do not become submit errors by accident.

#[cfg(feature = "server")]
mod fullstack_submit_example {
    extern crate dioxus_server;

    use dioxus_core::Event;
    use dioform::{Form, FormHandle, SubmitError};
    use dioform_fullstack::{ServerSubmitOutcome, SubmitBindingFullstackExt};
    use dioxus_fullstack::{server, ServerFnError, ServerFnResult};
    use serde::{Deserialize, Serialize};

    #[derive(Clone, Debug, Eq, Form, PartialEq)]
    struct SignupForm {
        email: String,
    }

    #[derive(Clone, Copy, Debug, Eq, PartialEq)]
    enum SignupError {
        EmailTaken,
        TryAgain,
    }

    #[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
    enum SignupRejection {
        EmailTaken,
    }

    #[server]
    async fn submit_signup(
        email: String,
    ) -> ServerFnResult<ServerSubmitOutcome<SignupRejection>> {
        if email == "taken@example.com" {
            Ok(ServerSubmitOutcome::rejected(SignupRejection::EmailTaken))
        } else {
            Ok(ServerSubmitOutcome::accepted())
        }
    }

    fn submit_from_form<EventData: ?Sized + 'static>(
        form: FormHandle<SignupForm, SignupError>,
        event: Event<EventData>,
    ) {
        form.managed_submit().on_submit_server_fn(
            event,
            |submitted| async move { submit_signup(submitted.value().email.clone()).await },
            |rejection| match rejection {
                SignupRejection::EmailTaken => {
                    SubmitError::field(SignupForm::fields().email(), SignupError::EmailTaken).into()
                }
            },
            |_failure: ServerFnError| SubmitError::form(SignupError::TryAgain).into(),
        );
    }
}

Enums§

ServerSubmitOutcome
Server-side outcome for one submitted form value.

Traits§

IntentSubmitBindingFullstackExt
Dioxus Fullstack-oriented submit helpers for intent-scoped managed submit bindings.
SubmitBindingFullstackExt
Dioxus Fullstack-oriented submit helpers for ordinary managed submit bindings.