Packages
moon
2.85.0
2.90.5
retired
2.90.4
2.90.3
2.90.2
2.90.1
2.90.0
2.89.4
2.89.1
2.89.0
2.88.0
2.87.11
2.87.10
2.87.9
2.87.8
2.87.7
2.87.6
2.87.5
2.87.4
2.87.3
2.87.2
2.87.1
2.87.0
2.86.1
2.86.0
2.85.1
2.85.0
2.84.0
2.83.0
2.82.0
2.81.4
2.81.3
2.81.2
2.81.1
2.81.0
2.80.2
2.80.1
2.80.0
2.79.13
2.79.12
2.79.11
2.79.10
2.79.9
2.79.8
2.79.7
2.79.6
2.79.5
2.79.4
2.79.3
2.79.2
2.79.1
2.79.0
2.78.4
2.78.3
2.78.2
2.78.1
2.78.0
2.77.0
2.76.5
2.76.4
2.76.3
2.76.2
2.76.1
2.76.0
2.75.0
2.74.1
2.74.0
2.73.8
2.73.7
2.73.6
2.73.5
2.73.4
2.73.3
2.73.2
2.73.1
2.73.0
2.72.5
2.72.4
2.72.3
2.72.2
2.72.1
2.72.0
2.71.1
2.71.0
2.70.0
2.69.2
2.69.1
2.69.0
2.68.11
2.68.10
Components-based design system written in elixir
Current section
Files
Jump to
Current section
Files
lib/moon_web/examples/design/form/dropdown_example/states.ex
defmodule MoonWeb.Examples.Design.Form.DropdownExample.States do
@moduledoc false
use Moon.StatefulComponent
use MoonWeb, :example
alias MoonWeb.Schema.User
alias Moon.Design.Form
prop(gender_options, :list, default: User.gender_options())
prop(changeset1, :any, default: User.changeset(%User{gender: nil}))
prop(changeset2, :any, default: User.changeset(%User{}))
prop(changeset3, :any, default: User.changeset(%User{gender: nil}))
def handle_event("change" <> num, params, socket) do
changeset = User.changeset(%User{}, Map.get(params, "user", %{}))
{:noreply, assign(socket, "changeset#{num}": changeset)}
end
def render(assigns) do
~F"""
<div class="w-full flex flex-col lg:flex-row gap-2 justify-between">
<Form id="user_error" class="w-full" for={@changeset1} change="change1">
<Form.Field field={:gender} label="Error" hint="Some hint here">
<Form.Dropdown error options={@gender_options} prompt="Please select gender" />
</Form.Field>
</Form>
<Form id="user_disabled" class="w-full" for={@changeset2} change="change2">
<Form.Field field={:gender} label="Disabled" hint="Some hint here">
<Form.Dropdown disabled options={@gender_options} prompt="Please select gender" />
</Form.Field>
</Form>
<Form id="user_normal" class="w-full" for={@changeset3} change="change3">
<Form.Field field={:gender} label="Normal" hint="Some hint here">
<Form.Dropdown options={@gender_options} prompt="Please select gender" />
</Form.Field>
</Form>
</div>
"""
end
def code() do
"""
alias MoonWeb.Schema.User
alias Moon.Design.Form
prop(gender_options, :list, default: User.gender_options())
prop(changeset1, :any, default: User.changeset(%User{gender: nil}))
prop(changeset2, :any, default: User.changeset(%User{}))
prop(changeset3, :any, default: User.changeset(%User{gender: nil}))
def handle_event("change" <> num, params, socket) do
changeset = User.changeset(%User{}, Map.get(params, "user", %{}))
{:noreply, assign(socket, "changeset\#{num}": changeset)}
end
def render(assigns) do
~F\"""
<div class="w-full flex flex-col lg:flex-row gap-2 justify-between">
<Form id="user_error" class="w-full" for={@changeset1} change="change1">
<Form.Field field={:gender} label="Error" hint="Some hint here">
<Form.Dropdown error options={@gender_options} prompt="Please select gender" />
</Form.Field>
</Form>
<Form id="user_disabled" class="w-full" for={@changeset2} change="change2">
<Form.Field field={:gender} label="Disabled" hint="Some hint here">
<Form.Dropdown disabled options={@gender_options} prompt="Please select gender" />
</Form.Field>
</Form>
<Form id="user_normal" class="w-full" for={@changeset3} change="change3">
<Form.Field field={:gender} label="Normal" hint="Some hint here">
<Form.Dropdown options={@gender_options} prompt="Please select gender" />
</Form.Field>
</Form>
</div>
\"""
end
"""
end
end