Packages

Dynamic forms for Phoenix LiveView with built-in validation - defined declaratively in HEEx or as (SurveyJS-compatible) data

Current section

Files

Jump to
dynamic_form CHANGELOG.md
Raw

CHANGELOG.md

# Changelog
All notable changes to this project are documented here. For releases before
0.19.0, see the git history.
## 0.20.0
### Added
- `DynamicForm.form_data/1`: inside a `<:field>` slot body, the whole form's
current values as a map — the same shape as `payload.data`. Always
form-level, so a control inside one nested form can read another's
entries.
### Fixed
- The Usage guide's `type="custom"` example bound `:let={field}` and read
`field.form`. That body receives the form itself, so the example raised
`KeyError` as written.
## 0.19.0
### Breaking
- Parent LiveView messages carry the lifecycle event:
`{:dynamic_form, payload}` is now `{:dynamic_form, event, payload}`. Update
existing handlers to `handle_info({:dynamic_form, :success, payload}, socket)`
an unmatched message raises `FunctionClauseError` rather than failing quietly.
- `:change` and `:submit` payloads can be invalid. The previous guarantee that
the parent only ever hears about valid submissions holds for `:success` only.
### Added
- `send_message_on` attribute: the lifecycle events that message the parent
LiveView, any of `[:success, :change, :submit]` (default: `[:success]`).
Listing `:success` alongside `on_success` raises, since `on_success`
replaces that message.
- `change_debounce_in_ms` attribute: milliseconds of quiet before a change
runs `on_change` and sends its `:change` message. The built-in validations
still render on every change, and submitting always runs the change pass
inline.
### Changed
- Adding or removing a nested entry now runs the change pass — `on_change`
and the `:change` message — like any other change to the form's data.