MishkaGervaz.Form.Web.Live (MishkaGervaz v0.0.1-alpha.2)

Copy Markdown View Source

LiveComponent for MishkaGervaz admin forms.

This is a thin orchestrator that delegates to specialized modules:

  • State - State management
  • DataLoader - Record loading and relation options
  • Events - Event handling
  • Renderer - Template rendering

Usage

Create mode (new record):

<.live_component
  module={MishkaGervaz.Form.Web.Live}
  id="post-form"
  resource={MyApp.Post}
  current_user={@current_user}
/>

Edit mode (existing record):

<.live_component
  module={MishkaGervaz.Form.Web.Live}
  id="post-form"
  resource={MyApp.Post}
  current_user={@current_user}
  record_id={@post_id}
/>

Required Assigns

  • id - Unique component ID
  • resource - Ash resource module with MishkaGervaz.Resource extension
  • current_user - Current user for authorization

Optional Assigns

  • record_id - ID of record to edit (nil for create mode)
  • defaults - Map of default field values for create mode (e.g., %{workspace_id: @workspace_id})

Parent LiveView Integration

The component sends messages to the parent for certain actions:

def handle_info({:form_saved, :create, result}, socket), do: ...
def handle_info({:form_saved, :update, result}, socket), do: ...
def handle_info({:form_cancelled, resource}, socket), do: ...
def handle_info({:form_event, event, params}, socket), do: ...
def handle_info({:add_nested_field, field_name}, socket), do: ...
def handle_info({:remove_nested_field, field_name, index}, socket), do: ...

See MishkaGervaz.Form.Web.State (state shape + override surface), MishkaGervaz.Form.Web.DataLoader (record + relation loading), MishkaGervaz.Form.Web.Events (event handling), MishkaGervaz.Form.Web.Renderer (template dispatch), MishkaGervaz.Form.Web.UploadHelpers, and MishkaGervaz.Form.Behaviours.Template.