# `MishkaGervaz.Form.Web.Live`
[🔗](https://github.com/mishka-group/mishka_gervaz/blob/v0.0.1-alpha.3/lib/mishka_gervaz/form/web/live.ex#L1)

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`.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
