defmodule MoonWeb.Pages.Parts.ShowRoomPage do
@moduledoc false
use MoonWeb, :live_view
alias MoonWeb.Components.ShowRoomPage.EditableTable
alias MoonWeb.Components.ShowRoomPage.Header
alias MoonWeb.Components.ShowRoomPage.Sidebar
alias MoonWeb.Components.ShowRoomPage.Wizard
alias Moon.Parts.Wizard
alias Moon.Parts.Modal
alias Moon.Design.Tabs
alias MoonWeb.Components.ShowRoomPage.Wizard.HeaderOptions
alias MoonWeb.Components.ShowRoomPage.Wizard.SidebarOptions
alias Moon.Parts.IconButton
alias Moon.Design.Tooltip
prop(theme_name, :any, default: "theme-moon-light")
prop(direction, :string, values: ["ltr", "rtl"], default: "ltr")
data(title, :string, default: "BackOffice templates")
data(default_title, :string, default: "BackOffice templates")
data(description, :string,
default:
"Boost efficiency with BackOffice templates powered by Moon. Access diverse options via the bottom-right wizard, and customize your sidebar using the editable table below."
)
data(has_breadcrumbs, :boolean, default: true)
data(has_button_group, :boolean, default: true)
data(has_left_button, :boolean, default: true)
data(has_right_button, :boolean, default: true)
data(has_other_button_group, :boolean, default: true)
data(has_other_left_button, :boolean, default: true)
data(has_other_right_button, :boolean, default: true)
data(value, :string, values: ["slim", "generic", "wide"], default: "generic")
data(light_sidebar, :boolean, default: false)
data(light_header, :boolean, default: true)
data(selected, :integer, default: 0)
data(is_open, :boolean, default: false)
data(steps, :list,
default: [
%{
title: "Sidebar selection",
text: "Tailor your app with Moon's dynamic sidebar options."
},
%{
title: "Header customization",
text:
"Explore the header options and find the perfect fit for your BackOffice environment."
}
]
)
data(tab_index, :integer)
data(selected_header, :integer, default: 0)
data(editable_menu_items, :list,
default: [
%{
icon: "generic_loyalty",
name: "Menu Item 1",
link: "/show-room?page=1",
active: false
},
%{
icon: "other_rocket",
name: "Menu Item 2",
link: "/show-room?page=2",
active: false
},
%{
icon: "other_lifebuoy",
name: "Menu Item 3",
link: "/show-room?page=3",
active: false
}
]
)
data(active_page, :string)
def mount(params, _session, socket) do
{:ok, assign(socket, active_page: "page=#{params["page"] || 1}")}
end
def render(assigns) do
~F"""
Explore Moon templates
<:description>
Moon templates showcase
Discover the versatility of Moon templates – explore their design and functionality across various screen sizes
"""
end
# def handle_event("handle_active_page", %{"selected-item" => selected_role}, socket) do
# {:noreply, assign(socket, :selected_role, selected_role)}
# end
def get_url(link) do
link
|> String.split("?")
|> List.last()
end
def handle_event("set_open", _, socket) do
Modal.open("show-room-modal")
{:noreply, assign(socket, is_open: true)}
end
def handle_event("set_close", _, socket) do
Modal.close("show-room-modal")
{:noreply, assign(socket, is_open: false)}
end
def handle_event("changed", %{"value" => value}, socket) do
{:noreply, assign(socket, value: value)}
end
def handle_event("change_sidebar_theme", %{"value" => sidebar_theme}, socket) do
{:noreply, assign(socket, sidebar_theme: sidebar_theme, selected: 2)}
end
def handle_event("change_header_theme", %{"value" => header_theme}, socket) do
{:noreply, assign(socket, header_theme: header_theme, selected: 2)}
end
def handle_event("toggle_breadcrumbs", _, socket) do
socket = assign(socket, has_breadcrumbs: !socket.assigns.has_breadcrumbs, selected: 1)
{:noreply, socket}
end
def handle_event("toggle_title", _, socket) do
socket = assign(socket, has_title: !socket.assigns.has_title, selected: 1)
{:noreply, socket}
end
def handle_event("toggle_description", _, socket) do
socket = assign(socket, has_description: !socket.assigns.has_description, selected: 1)
{:noreply, socket}
end
def handle_event("toggle_button_group", _, socket) do
socket = assign(socket, has_button_group: !socket.assigns.has_button_group, selected: 1)
{:noreply, socket}
end
def handle_event("toggle_left_button", _, socket) do
socket = assign(socket, has_left_button: !socket.assigns.has_left_button, selected: 1)
{:noreply, socket}
end
def handle_event("toggle_right_button", _, socket) do
socket = assign(socket, has_right_button: !socket.assigns.has_right_button, selected: 1)
{:noreply, socket}
end
def handle_event("toggle_other_button_group", _, socket) do
socket =
assign(socket, has_other_button_group: !socket.assigns.has_other_button_group, selected: 1)
{:noreply, socket}
end
def handle_event("toggle_other_left_button", _, socket) do
socket =
assign(socket, has_other_left_button: !socket.assigns.has_other_left_button, selected: 1)
{:noreply, socket}
end
def handle_event("toggle_other_right_button", _, socket) do
socket =
assign(socket, has_other_right_button: !socket.assigns.has_other_right_button, selected: 1)
{:noreply, socket}
end
def handle_event("change_title", %{"value" => title}, socket) do
socket = assign(socket, title: title, selected: 1)
{:noreply, socket}
end
def handle_event("change_default_title", %{"value" => default_title}, socket) do
socket = assign(socket, default_title: default_title, selected: 1)
{:noreply, socket}
end
def handle_event(
"change_menu_item",
%{"value" => value, "num" => num, "field" => field},
socket
) do
{:noreply,
assign(socket,
editable_menu_items:
socket.assigns.editable_menu_items
|> Enum.with_index()
|> Enum.map(fn {item, index} ->
("#{index}" == num && Map.put(item, :"#{field}", value)) || item
end)
)}
end
def handle_event("add_row", _, socket) do
new_menu_item = %{
icon: "other_smile",
name: "Menu Item #{length(socket.assigns.editable_menu_items) + 1}",
link: "/show-room?page#{length(socket.assigns.editable_menu_items) + 1}",
active: true
}
{:noreply,
assign(socket,
editable_menu_items: socket.assigns.editable_menu_items ++ [new_menu_item]
)}
end
def handle_event("toggle_sidebar_theme", _, socket) do
{:noreply, assign(socket, light_sidebar: !socket.assigns.light_sidebar, selected: 0)}
end
def handle_event("toggle_header_theme", _, socket) do
{:noreply, assign(socket, light_header: !socket.assigns.light_header, selected: 1)}
end
def handle_event("change_description", %{"value" => description}, socket) do
socket = assign(socket, description: description, selected: 1)
{:noreply, socket}
end
def handle_event("handle_header_change", %{"value" => selected_header}, socket) do
{:noreply, assign(socket, selected_header: String.to_integer(selected_header), selected: 1)}
end
end