Current section

Files

Jump to
moon lib moon_web pages components switch_page.ex
Raw

lib/moon_web/pages/components/switch_page.ex

defmodule MoonWeb.Pages.Components.SwitchPage do
@moduledoc false
use MoonWeb, :live_view
alias Moon.Components.Switch
alias MoonWeb.Components.ExampleAndCode
alias Moon.Components.Field
alias Moon.Components.Form
alias MoonWeb.Pages.Tutorials.AddDataUsingForm.User
alias MoonWeb.Components.Page
alias MoonWeb.Components.ComponentPageDescription
alias MoonWeb.Components.PropsTable
alias Moon.Components.Button
alias Moon.Components.ErrorTag
alias MoonWeb.Components.Facing.DeprecationWarning
data(breadcrumbs, :any,
default: [
%{
to: "#",
name: "Components v1"
},
%{
to: "/components/switch",
name: "Switch"
}
]
)
data(props_info_array, :list,
default: [
%{
:name => ~c"checked",
:type => ~c"boolean ",
:required => ~c"No",
:default => ~c"false",
:description => ~c"Is switch checked/unchecked"
},
%{
:name => ~c"caption_unchecked",
:type => ~c"string",
:required => ~c"Yes",
:default => ~c"-",
:description => ~c"Displayed text when unchecked"
},
%{
:name => ~c"caption_checked",
:type => ~c"string",
:required => ~c"Yes",
:default => ~c"-",
:description => ~c"Displayed text when checked"
},
%{
:name => ~c"field",
:type => ~c"atom",
:required => ~c"No",
:default => ~c"false",
:description => ~c"If not used in Field component, needs to be specified"
}
]
)
def render(assigns) do
~F"""
<Page {=@theme_name} {=@active_page} {=@breadcrumbs} {=@direction}>
<ComponentPageDescription title="Switch">
<DeprecationWarning
name="Switch"
href={live_path(MoonWeb.Endpoint, MoonWeb.Pages.Design.SwitchPage)}
/>
</ComponentPageDescription>
<ExampleAndCode title="Size" class="mt-3" id="switch_2_sample">
<:example>
<Form for={@user_changeset} change="register_form_update" submit="register_form_submit">
<Switch field={:agrees_to_terms_of_service} size="small" id="switch_2_1" />
</Form>
<Form for={@user_changeset} change="register_form_update" submit="register_form_submit">
<Switch field={:agrees_to_terms_of_service} size="medium" id="switch_2_2" />
</Form>
<Form for={@user_changeset} change="register_form_update" submit="register_form_submit">
<Switch field={:agrees_to_terms_of_service} size="large" id="switch_2_3" />
</Form>
</:example>
<:code>{switch_2_code()}</:code>
<:state>{switch_1_state(assigns)}</:state>
</ExampleAndCode>
<ExampleAndCode title="Icons" class="mt-3" id="switch_3_sample">
<:example>
<Form for={@user_changeset} change="register_form_update" submit="register_form_submit">
<Field name={:agrees_to_terms_of_service}>
<Switch id="switch_3_1" icons size="small" />
</Field>
</Form>
<Form for={@user_changeset} change="register_form_update" submit="register_form_submit">
<Field name={:agrees_to_terms_of_service}>
<Switch id="switch_3_2" icons size="medium" />
</Field>
</Form>
<Form for={@user_changeset} change="register_form_update" submit="register_form_submit">
<Field name={:agrees_to_terms_of_service}>
<Switch id="switch_3_3" icons size="large" />
</Field>
</Form>
</:example>
<:code>{switch_3_code()}</:code>
<:state>{switch_1_state(assigns)}</:state>
</ExampleAndCode>
<ExampleAndCode title="Captions" class="mt-3" id="switch_4_sample">
<:example>
<Form for={@user_changeset} change="register_form_update" submit="register_form_submit">
<Field name={:agrees_to_terms_of_service}>
<Switch icons={false} size="small" caption_unchecked="AM" caption_checked="PM" id="switch_4_1" />
</Field>
</Form>
<Form for={@user_changeset} change="register_form_update" submit="register_form_submit">
<Field name={:agrees_to_terms_of_service}>
<Switch icons size="medium" caption_unchecked="OFF" caption_checked="ON" id="switch_4_2" />
</Field>
</Form>
<Form for={@user_changeset} change="register_form_update" submit="register_form_submit">
<Field name={:agrees_to_terms_of_service}>
<Switch icons size="large" caption_unchecked="Moon" caption_checked="Sun" id="switch_4_3" />
</Field>
</Form>
</:example>
<:code>{switch_4_code()}</:code>
<:state>{switch_1_state(assigns)}</:state>
</ExampleAndCode>
<ExampleAndCode title="Form example" class="mt-3" id="switch_5_sample">
<:example>
<Form for={@user_changeset} change="register_form_update" submit="register_form_submit">
<div class="text-moon-16 mb-3">Agrees to Terms of Service</div>
<Field name={:agrees_to_terms_of_service}>
<Switch icons={false} size="small" id="switch_5_1" />
<ErrorTag />
</Field>
<div class="pt-4">
<Button type="submit" right_icon="arrows_right" variant="primary">Register</Button>
</div>
</Form>
</:example>
<:code>{switch_5_code()}</:code>
<:state>{switch_1_state(assigns)}</:state>
</ExampleAndCode>
<PropsTable title="Switch props" data={@props_info_array} />
</Page>
"""
end
def mount(_params, _session, socket) do
user = %User{}
user_changeset =
User.changeset(%User{}, %{
agrees_to_terms_of_service: true,
agrees_to_marketing_emails: false
})
socket =
assign(socket,
user_changeset: user_changeset,
small_switch_checked: false,
medium_switch_checked: false,
large_switch_checked: false,
icons_switch_checked: false,
captions_switch_checked: false,
user: user
)
{:ok, socket}
end
def handle_params(_params, uri, socket) do
{:noreply, assign(socket, uri: uri)}
end
def handle_event(
"register_form_update",
%{
"user" => params
},
socket
) do
user_changeset = User.changeset(socket.assigns.user, params)
{:noreply, assign(socket, user_changeset: user_changeset)}
end
def handle_event("register_form_submit", params, socket) do
user_changeset =
User.changeset(socket.assigns.user, params["user"]) |> Map.merge(%{action: :insert})
{:noreply, assign(socket, user_changeset: user_changeset)}
end
def switch_1_state(assigns) do
~F"""
@user_changeset = {inspect(@user_changeset, pretty: true)}
"""
end
def switch_2_code do
"""
<Form for={@user_changeset} change="register_form_update" submit="register_form_submit">
<Field name={:agrees_to_terms_of_service}>
<Switch size="small" id="switch_2_1" checked={@small_switch_checked} />
</Field>
</Form>
<Form for={@user_changeset} change="register_form_update" submit="register_form_submit">
<Field name={:agrees_to_terms_of_service}>
<Switch
size="medium"
id="switch_2_2"
checked={@medium_switch_checked}
/>
</Field>
</Form>
<Form for={@user_changeset} change="register_form_update" submit="register_form_submit">
<Field name={:agrees_to_terms_of_service}>
<Switch
size="large"
id="switch_2_3"
checked={@large_switch_checked}
/>
</Field>
</Form>
"""
end
def switch_3_code do
"""
<Form for={@user_changeset} change="register_form_update" submit="register_form_submit">
<Field name={:agrees_to_terms_of_service}>
<Switch id="switch_3_1" icons size="small" />
</Field>
</Form>
<Form for={@user_changeset} change="register_form_update" submit="register_form_submit">
<Field name={:agrees_to_terms_of_service}>
<Switch id="switch_3_2" icons size="medium" />
</Field>
</Form>
<Form for={@user_changeset} change="register_form_update" submit="register_form_submit">
<Field name={:agrees_to_terms_of_service}>
<Switch id="switch_3_3" icons size="large" />
</Field>
</Form>
"""
end
def switch_4_code do
"""
<Form for={@user_changeset} change="register_form_update" submit="register_form_submit">
<Field name={:agrees_to_terms_of_service}>
<Switch
icons={false}
size="small"
caption_unchecked="AM"
caption_checked="PM"
id="switch_4_1"
/>
</Field>
</Form>
<Form for={@user_changeset} change="register_form_update" submit="register_form_submit">
<Field name={:agrees_to_terms_of_service}>
<Switch
icons
size="medium"
caption_unchecked="OFF"
caption_checked="ON"
id="switch_4_2"
/>
</Field>
</Form>
<Form for={@user_changeset} change="register_form_update" submit="register_form_submit">
<Field name={:agrees_to_terms_of_service}>
<Switch
icons
size="large"
caption_unchecked="Moon"
caption_checked="Sun"
id="switch_4_3"
/>
</Field>
</Form>
"""
end
def switch_5_code do
"""
<Form for={@user_changeset} change="register_form_update" submit="register_form_submit">
<div class="text-moon-16 mb-3">Agrees to Terms of Service</div>
<Field name={:agrees_to_terms_of_service}>
<Switch icons={false} size="small" id="switch_5_1" />
<ErrorTag />
</Field>
<div class="pt-4">
<Button type="submit" right_icon="arrows_right" variant="primary">Register</Button>
</div>
</Form>
"""
end
end