Current section

Files

Jump to
formex lib field.ex
Raw

lib/field.ex

defmodule Formex.Field do
import Ecto.Query
defstruct name: nil,
assoc: false,
type: nil,
value: nil,
required: true,
label: "",
data: [],
opts: []
@repo Application.get_env(:formex, :repo)
def create_field(form, :select_assoc, name_id, opts) do
name = Regex.replace(~r/_id$/, Atom.to_string(name_id), "") |> String.to_atom
get_options = fn ->
module = form.model.__schema__(:association, name).queryable
query = from e in module,
select: {e.name, e.id},
order_by: e.name
@repo.all(query)
end
%__MODULE__{
name: name_id,
type: :select,
value: Map.get(form.struct, name),
label: get_label(name, opts),
required: Keyword.get(opts, :required, true),
data: [
options: get_options.()
],
opts: opts
}
end
def create_field(form, type, name, opts) do
%__MODULE__{
name: name,
type: type,
value: Map.get(form.struct, name),
label: get_label(name, opts),
required: Keyword.get(opts, :required, true),
opts: opts
}
end
#
defp get_label(name, opts) do
if opts[:label] do
opts[:label]
else
Atom.to_string name
end
end
end