Current section

Files

Jump to
moon lib moon_web examples parts modal_example wizard.ex
Raw

lib/moon_web/examples/parts/modal_example/wizard.ex

defmodule MoonWeb.Examples.Parts.ModalExample.Wizard do
@moduledoc false
use Moon.StatefulComponent
use MoonWeb, :example
alias Moon.Parts.{Wizard, Modal, Button}
alias Moon.Design.Tabs
import MoonWeb.Helpers.Lorem
data(selected, :integer, default: 0)
data(steps, :list,
default: [
%{
title: "General",
text:
"In order to make you available and match you with the right opportunities we need some additional information."
},
%{
title: "Configuration",
text:
"In order to make you available and match you with the right opportunities we need some additional information."
},
%{
title: "Permissions",
text:
"In order to make you available and match you with the right opportunities we need some additional information."
}
]
)
def render(assigns) do
~F"""
<div>
<Button on_click="set_open">Open modal wizard (xl is default)</Button>
<Modal id="modal_wizard" on_close="set_close" class="p-1 bg-bulma">
<Wizard id="tabs-wizzard" {=@steps}>
<:description>
<div class="py-8 flex flex-col gap-4 w-full">
<h3 class="text-moon-24 text-bulma font-grotesk">Create new flow</h3>
<p class="text-moon-14 text-trunks hidden lg:inline">
In order to make you available and match you with the right opportunities we need some additional information first.
</p>
</div>
</:description>
<Wizard.Panels>
<Tabs.Panel>{lorem()}</Tabs.Panel>
<Tabs.Panel>{ipsum()}</Tabs.Panel>
<Tabs.Panel>{dolor()}</Tabs.Panel>
</Wizard.Panels>
<Wizard.Buttons on_save="set_close" on_cancel="set_close" />
</Wizard>
</Modal>
</div>
"""
end
def handle_event("set_open", _, socket) do
Modal.open("modal_wizard")
{:noreply, socket}
end
def handle_event("set_close", _, socket) do
Modal.close("modal_wizard")
{:noreply, socket}
end
def code() do
"""
alias Moon.Parts.{Wizard, Modal}
alias Moon.Design.{Tabs, Button}
import MoonWeb.Helpers.Lorem
data(selected, :integer, default: 0)
data(done, :boolean, default: false)
data(steps, :list,
default: [
%{
title: "General",
text:
"In order to make you available and match you with the right opportunities we need some additional information."
},
%{
title: "Configuration",
text:
"In order to make you available and match you with the right opportunities we need some additional information."
},
%{
title: "Permissions",
text:
"In order to make you available and match you with the right opportunities we need some additional information."
}
]
)
def render(assigns) do
~F\"""
<div>
<Button on_click="set_open">Open modal</Button>
<Modal id="modal_wizard" on_close="set_close" class="p-1 bg-bulma">
<Wizard id="tabs-wizzard" {=@steps}>
<:description>
<div class="py-8 flex flex-col gap-4 w-full">
<h3 class="text-moon-24 text-bulma font-grotesk">Create new flow</h3>
<p class="text-moon-14 text-bulma hidden lg:inline">
In order to make you available and match you with the right opportunities we need some additional information first.
</p>
</div>
</:description>
<Wizard.Panels>
<Tabs.Panel>{lorem()}</Tabs.Panel>
<Tabs.Panel>{ipsum()}</Tabs.Panel>
<Tabs.Panel>{dolor()}</Tabs.Panel>
</Wizard.Panels>
<Wizard.Buttons on_save="set_close" on_cancel="set_close" />
</Wizard>
</Modal>
</div>
\"""
end
def handle_event("set_open", _, socket) do
Moon.Parts.Modal.open("modal_wizard")
{:noreply, socket}
end
def handle_event("set_close", _, socket) do
Moon.Parts.Modal.close("modal_wizard")
{:noreply, socket}
end
"""
end
end