MishkaGervaz.Form.Web.Events behaviour (MishkaGervaz v0.0.1-alpha.2)

Copy Markdown View Source

Handles all form events for MishkaGervaz.

This module centralizes event handling for:

  • Validation (phx-change)
  • Submission (phx-submit)
  • Wizard step navigation
  • Upload events
  • Relation field search/select
  • Cancel
  • Nested/array field management

Sub-builders

Events functionality is split into specialized sub-builders:

  • SanitizationHandler - Input sanitization
  • ValidationHandler - Form validation
  • SubmitHandler - Form submission
  • StepHandler - Wizard step navigation
  • UploadHandler - File upload events
  • RelationHandler - Relation field search/select
  • HookRunner - Hook execution

Customization

You can override individual sub-builders via DSL:

mishka_gervaz do
  form do
    events do
      sanitization MyApp.CustomSanitizationHandler
      validation MyApp.CustomValidationHandler
      submit MyApp.CustomSubmitHandler
      step MyApp.CustomStepHandler
      upload MyApp.CustomUploadHandler
      hooks MyApp.CustomHookRunner
    end
  end
end

Or override the entire Events module:

mishka_gervaz do
  form do
    events MyApp.CustomFormEvents
  end
end

See MishkaGervaz.Form.Web.Events.Helpers (shared helpers exposed to sub-handlers and user overrides), MishkaGervaz.Form.Web.State, MishkaGervaz.Form.Web.DataLoader, MishkaGervaz.Form.Web.Live, and the sub-handlers SanitizationHandler, ValidationHandler, SubmitHandler, StepHandler, UploadHandler, RelationHandler, HookRunner.

Summary

Types

socket()

@type socket() :: Phoenix.LiveView.Socket.t()

state()

@type state() :: MishkaGervaz.Form.Web.State.t()

Callbacks

handle(event, params, socket)

@callback handle(event :: String.t(), params :: map(), socket :: socket()) ::
  {:noreply, socket()}

Functions

handle(event, params, socket)

@spec handle(String.t(), map(), socket()) :: {:noreply, socket()}