Current section
Files
Jump to
Current section
Files
lib/imagine_web/live/cms_page/browser.ex
defmodule ImagineWeb.Live.CmsPage.Browser do
@moduledoc """
Live View implementation for cms page column browser
"""
use Phoenix.LiveView
alias Imagine.Repo
alias Imagine.CmsPages
alias Imagine.CmsTemplates
alias ImagineWeb.Router.Helpers, as: Routes
def render(assigns) do
Phoenix.View.render(ImagineWeb.CmsPageView, "browser.html", assigns)
end
def mount(_, session, socket) do
cms_page = get_page(session["cms_page_id"])
socket =
socket
|> assign(
user: session["current_user"],
cms_page: cms_page,
properties_modal: "",
timestamp: Time.utc_now(),
csrf_token: session["csrf_token"]
)
{:ok, socket}
end
def handle_event("new-page", %{"cms-page-id" => cms_page_id}, socket) do
user = socket.assigns[:user]
parent = get_page(cms_page_id)
attrs = %{
name: "new-page",
title: "My New Page",
cms_template_id: parent.cms_template_id,
parent_id: parent.id,
position: 1
}
{:ok, new_page} = CmsPages.create_cms_page(attrs, user)
{:noreply, assign(socket, cms_page: Repo.preload(new_page, [:versions, :sub_pages]))}
end
def handle_event("select-page", %{"cms-page-id" => "_trash"}, socket) do
{:noreply, assign(socket, cms_page: CmsPages.get_trash_page(), properties_modal: "")}
end
def handle_event("select-page", %{"cms-page-id" => cms_page_id}, socket) do
{:noreply, assign(socket, cms_page: get_page(cms_page_id), properties_modal: "")}
end
def handle_event("properties", _values, socket) do
cms_page = socket.assigns[:cms_page]
changeset = CmsPages.change_cms_page(cms_page)
action = Routes.cms_page_path(socket, :update, cms_page)
cms_templates = CmsTemplates.list_cms_templates()
cms_pages = CmsPages.list_cms_pages()
socket =
assign(socket,
changeset: changeset,
action: action,
cms_templates: cms_templates,
cms_pages: cms_pages,
timestamp: Time.utc_now(),
return_to: Routes.cms_page_path(socket, :index)
)
output = Phoenix.View.render(ImagineWeb.CmsPageView, "_properties_modal.html", socket.assigns)
{:noreply, assign(socket, :properties_modal, output)}
end
def handle_event("delete-page", %{"cms-page-id" => cms_page_id}, socket) do
{:ok, cms_page} =
cms_page_id
|> CmsPages.get_cms_page!()
|> CmsPages.delete_cms_page()
{:noreply, assign(socket, cms_page: get_page(cms_page.parent_id))}
end
def handle_event("undelete-page", %{"cms-page-id" => cms_page_id}, socket) do
{:ok, _cms_page} =
cms_page_id
|> CmsPages.get_cms_page!(include_deleted: true)
|> CmsPages.undelete_cms_page()
{:noreply, assign(socket, cms_page: get_page(cms_page_id))}
end
def handle_event("destroy-page", %{"cms-page-id" => cms_page_id}, socket) do
{:ok, _cms_page} =
cms_page_id
|> CmsPages.get_cms_page!(include_deleted: true)
|> CmsPages.destroy_cms_page()
{:noreply, assign(socket, cms_page: get_page("_trash"))}
end
defp get_page("_trash") do
CmsPages.get_trash_page()
end
defp get_page(nil) do
CmsPages.get_home_page!()
|> Repo.preload([:sub_pages, :versions])
end
defp get_page(cms_page_id) do
(CmsPages.get_cms_page(cms_page_id, include_deleted: true) ||
CmsPages.get_home_page!())
|> Repo.preload([:sub_pages, :versions])
end
end