Packages
formex
0.4.6
0.6.7
0.6.6
0.6.5
0.6.4
0.6.3
0.6.2
0.6.1
0.6.0
0.5.10
0.5.9
0.5.8
0.5.7
0.5.6
0.5.5
0.5.4
0.5.3
0.5.2
0.5.1
0.5.0
0.4.16
0.4.15
0.4.14
0.4.13
0.4.12
0.4.11
0.4.10
0.4.9
0.4.8
0.4.7
0.4.6
0.4.5
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.3.3
0.3.2
0.3.1
0.3.0
0.2.3
0.2.2
0.2.1
0.2.0
0.1.4
0.1.3
0.1.2
0.1.1
0.1.0
Form library for Phoenix with Ecto support
Current section
Files
Jump to
Current section
Files
lib/formex/form_nested.ex
defmodule Formex.FormNested do
@repo Application.get_env(:formex, :repo)
alias __MODULE__
alias Formex.Field
alias Formex.Form
defstruct form: nil,
name: nil,
opts: [],
required: true
@type t :: %FormNested{}
@spec create(form :: Form.t, type :: any, name :: Atom.t, opts :: Map.t) :: Form.t
def create(form, type, name, opts) do
substruct = Field.get_value(form, name)
{form, substruct} = if Ecto.assoc_loaded? substruct do
{form, substruct}
else
struct = @repo.preload(form.struct, name)
substruct = Map.get(struct, name)
struct = Map.put(struct, name, substruct)
form = Map.put(form, :struct, struct)
{form, substruct}
end
submodule = Form.get_assoc_or_embed(form, name).related
params = form.params[to_string(name)] || %{}
subform = Formex.Builder.create_form(type, substruct, params, submodule)
item = %FormNested{
form: subform,
name: name,
required: Keyword.get(opts, :required, true),
opts: opts
}
{form, item}
end
end