AshPhoenix

View Source

An extension to add form builders to the code interface.

There is currently no DSL for this extension.

This defines a form_to_<name> function for each code interface function. Positional arguments are ignored, given that in forms, all input typically comes from the params map.

The generated function passes all options through to AshPhoenix.Form.for_action/3

Update and destroy actions take the record being updated/destroyed as the first argument.

For example, given this code interface definition on a domain called MyApp.Accounts:

resources do
  resource MyApp.Accounts.User do
    define :register_with_password, args: [:email, :password]
    define :update_user, action: :update, args: [:email, :password]
  end
end

Adding the AshPhoenix extension would define form_to_register_with_password/2.

Usage

Without options:

MyApp.Accounts.form_to_register_with_password()
#=> %AshPhoenix.Form{}

With options:

MyApp.Accounts.form_to_register_with_password(params: %{"email" => "placeholder@email"})
#=> %AshPhoenix.Form{}

With

MyApp.Accounts.form_to_update_user(params: %{"email" => "placeholder@email"})
#=> %AshPhoenix.Form{}

forms

Customize the definition of forms for code interfaces

Nested DSLs

Examples

forms do 
  # customize the generated `form_to_create_student` function
  form :create_student, args: [:school_id]
end

forms.form

form name

Customize the definition of a form for a code inteface

Examples

# customize the generated `form_to_create_student` function
# args defaults to empty for form definitions
form :create_student, args: [:school_id]

Arguments

NameTypeDefaultDocs
nameatomThe name of the interface to modify. Must match an existing interface definition.

Options

NameTypeDefaultDocs
argslist(atom | {:optional, atom})Map specific arguments to named inputs. Can provide any argument/attributes that the action allows.

Introspection

Target: AshPhoenix.FormDefinition