feat: preview working and template delete is in, too
This commit is contained in:
@@ -17,6 +17,7 @@ defmodule BDS.Desktop.ShellLive do
|
||||
alias BDS.Posts.Post
|
||||
alias BDS.Projects
|
||||
alias BDS.Repo
|
||||
alias BDS.Templates
|
||||
alias BDS.UI.{Commands, MenuBar, Registry, Session, Workbench}
|
||||
|
||||
@refresh_interval 1_500
|
||||
@@ -286,6 +287,34 @@ defmodule BDS.Desktop.ShellLive do
|
||||
|> reload_shell(workbench)}
|
||||
end
|
||||
|
||||
def handle_event("delete_sidebar_template", %{"id" => template_id}, socket) do
|
||||
case Repo.get(Templates.Template, template_id) do
|
||||
%Templates.Template{project_id: project_id} when project_id == socket.assigns.projects.active_project_id ->
|
||||
case Templates.delete_template(template_id) do
|
||||
{:ok, :deleted} ->
|
||||
workbench = Workbench.close_tab(socket.assigns.workbench, :templates, template_id)
|
||||
tab_meta = Map.delete(socket.assigns.tab_meta, {:templates, template_id})
|
||||
|
||||
{:noreply,
|
||||
socket
|
||||
|> assign(:tab_meta, tab_meta)
|
||||
|> reload_shell(workbench)}
|
||||
|
||||
{:error, reason} ->
|
||||
{:noreply,
|
||||
socket
|
||||
|> append_output_entry(translated("Delete") <> " " <> translated("Template"), inspect(reason), nil, "error")
|
||||
|> reload_shell(socket.assigns.workbench)}
|
||||
end
|
||||
|
||||
_other ->
|
||||
{:noreply,
|
||||
socket
|
||||
|> append_output_entry(translated("Delete") <> " " <> translated("Template"), inspect(:not_found), nil, "error")
|
||||
|> reload_shell(socket.assigns.workbench)}
|
||||
end
|
||||
end
|
||||
|
||||
def handle_event("toggle_offline_mode", _params, socket) do
|
||||
socket = assign(socket, :offline_mode, not socket.assigns.offline_mode)
|
||||
{:noreply, reload_shell(socket, socket.assigns.workbench)}
|
||||
|
||||
@@ -350,27 +350,65 @@ defmodule BDS.Desktop.ShellLive.SidebarComponents do
|
||||
defp render_entity_sidebar(assigns) do
|
||||
~H"""
|
||||
<%= if Enum.any?(Map.get(@sidebar_data, :items, [])) do %>
|
||||
<div class="settings-nav-list">
|
||||
<div class={if(template_sidebar?(@sidebar_data), do: "chat-list-items", else: "settings-nav-list")}>
|
||||
<%= for item <- Map.get(@sidebar_data, :items, []) do %>
|
||||
<button
|
||||
class={["chat-list-item", if(sidebar_item_selected?(@workbench, item.route, item.id), do: "active")]}
|
||||
data-testid="sidebar-open-item"
|
||||
data-route={item.route}
|
||||
data-item-id={item.id}
|
||||
data-open-title={item.title}
|
||||
data-open-subtitle={translated(item.meta || "")}
|
||||
type="button"
|
||||
phx-click="open_sidebar_item"
|
||||
phx-value-route={item.route}
|
||||
phx-value-id={item.id}
|
||||
phx-value-title={item.title}
|
||||
phx-value-subtitle={translated(item.meta || "")}
|
||||
>
|
||||
<span class="chat-item-content">
|
||||
<span class="chat-item-title"><%= item.title %></span>
|
||||
<span class="chat-item-date"><%= translated(item.meta || "") %></span>
|
||||
</span>
|
||||
</button>
|
||||
<%= if item.route == "templates" do %>
|
||||
<div
|
||||
class={["chat-list-item", if(sidebar_item_selected?(@workbench, item.route, item.id), do: "active")]}
|
||||
data-item-id={item.id}
|
||||
>
|
||||
<button
|
||||
class="chat-item-open"
|
||||
data-testid="sidebar-open-item"
|
||||
data-route={item.route}
|
||||
data-item-id={item.id}
|
||||
data-open-title={item.title}
|
||||
data-open-subtitle={translated(item.meta || "")}
|
||||
type="button"
|
||||
phx-click="open_sidebar_item"
|
||||
phx-value-route={item.route}
|
||||
phx-value-id={item.id}
|
||||
phx-value-title={item.title}
|
||||
phx-value-subtitle={translated(item.meta || "")}
|
||||
>
|
||||
<span class="chat-item-content">
|
||||
<span class="chat-item-title"><%= item.title %></span>
|
||||
<span class="chat-item-date"><%= translated(item.meta || "") %></span>
|
||||
</span>
|
||||
</button>
|
||||
<button
|
||||
class="chat-item-delete"
|
||||
data-testid="sidebar-delete-template"
|
||||
data-item-id={item.id}
|
||||
type="button"
|
||||
title={translated("Delete") <> " " <> translated("Template")}
|
||||
phx-click="delete_sidebar_template"
|
||||
phx-value-id={item.id}
|
||||
>
|
||||
×
|
||||
</button>
|
||||
</div>
|
||||
<% else %>
|
||||
<button
|
||||
class={["chat-list-item", if(sidebar_item_selected?(@workbench, item.route, item.id), do: "active")]}
|
||||
data-testid="sidebar-open-item"
|
||||
data-route={item.route}
|
||||
data-item-id={item.id}
|
||||
data-open-title={item.title}
|
||||
data-open-subtitle={translated(item.meta || "")}
|
||||
type="button"
|
||||
phx-click="open_sidebar_item"
|
||||
phx-value-route={item.route}
|
||||
phx-value-id={item.id}
|
||||
phx-value-title={item.title}
|
||||
phx-value-subtitle={translated(item.meta || "")}
|
||||
>
|
||||
<span class="chat-item-content">
|
||||
<span class="chat-item-title"><%= item.title %></span>
|
||||
<span class="chat-item-date"><%= translated(item.meta || "") %></span>
|
||||
</span>
|
||||
</button>
|
||||
<% end %>
|
||||
<% end %>
|
||||
</div>
|
||||
<% else %>
|
||||
@@ -426,6 +464,8 @@ defmodule BDS.Desktop.ShellLive.SidebarComponents do
|
||||
|
||||
defp translated(text, bindings \\ %{}), do: ShellData.translate(text, bindings, Process.get(:bds_ui_locale))
|
||||
|
||||
defp template_sidebar?(sidebar_data), do: Map.get(sidebar_data, :title) == "Templates"
|
||||
|
||||
defp group_year_month_counts(entries) do
|
||||
entries
|
||||
|> Enum.group_by(& &1.year)
|
||||
|
||||
Reference in New Issue
Block a user