Skip to content

Commit fd6ea67

Browse files
authored
New UI: Allow deletion of scripts (#1845)
- Delete button (with confirm box) on edit script page. - Adds `Scripts.delete/3` function. - Audit log when script is deleted
1 parent c450e33 commit fd6ea67

File tree

4 files changed

+52
-1
lines changed

4 files changed

+52
-1
lines changed

lib/nerves_hub/audit_logs/templates/product_templates.ex

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,12 @@ defmodule NervesHub.AuditLogs.ProductTemplates do
2020

2121
AuditLogs.audit!(user, product, description)
2222
end
23+
24+
@spec audit_script_deleted(User.t(), Product.t(), Script.t()) :: AuditLog.t()
25+
def audit_script_deleted(user, product, script) do
26+
description =
27+
"User #{user.name} removed script named #{script.name} from product #{product.name}"
28+
29+
AuditLogs.audit!(user, product, description)
30+
end
2331
end

lib/nerves_hub/scripts.ex

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,4 +87,20 @@ defmodule NervesHub.Scripts do
8787
{:error, changeset}
8888
end
8989
end
90+
91+
@spec delete(non_neg_integer(), Product.t(), User.t()) ::
92+
{:ok, Ecto.Schema.t()} | {:error, Ecto.Changeset.t()}
93+
def delete(id, product, user) do
94+
get_by_product_and_id!(product, id)
95+
|> Repo.delete()
96+
|> case do
97+
{:ok, script} ->
98+
ProductTemplates.audit_script_deleted(user, product, script)
99+
100+
{:ok, script}
101+
102+
err ->
103+
err
104+
end
105+
end
90106
end

lib/nerves_hub_web/live/support_scripts/edit-new.html.heex

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,10 +45,14 @@
4545
<div class="text-xs tracking-wide text-zinc-400">Make sure this is valid Elixir and will not crash the device</div>
4646
</div>
4747
</div>
48-
<div class="flex justify-between items-center h-14 px-4 border-t border-zinc-700">
48+
<div class="flex justify-start gap-4 items-center h-14 px-4 border-t border-zinc-700">
4949
<.button style="secondary" type="submit">
5050
<.icon name="save" /> Save changes
5151
</.button>
52+
53+
<.button style="danger" phx-click="delete-script" phx-value-id={@script.id} data-confirm="Are you sure you want to delete this script?">
54+
<.icon name="trash" /> Delete Script
55+
</.button>
5256
</div>
5357
</div>
5458
</.form>

lib/nerves_hub_web/live/support_scripts/edit.ex

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,4 +42,27 @@ defmodule NervesHubWeb.Live.SupportScripts.Edit do
4242
|> noreply()
4343
end
4444
end
45+
46+
@impl Phoenix.LiveView
47+
def handle_event(
48+
"delete-script",
49+
%{"id" => id},
50+
%{assigns: %{org: org, org_user: org_user, product: product}} = socket
51+
) do
52+
authorized!(:"support_script:delete", org_user)
53+
54+
case Scripts.delete(id, product, org_user.user) do
55+
{:ok, _} ->
56+
socket
57+
|> put_flash(:info, "Support Script deleted")
58+
|> send_toast(:info, "Support Script deleted successfully.")
59+
|> push_navigate(to: ~p"/org/#{org.name}/#{product.name}/scripts")
60+
|> noreply()
61+
62+
{:error, _} ->
63+
socket
64+
|> send_toast(:error, "There was an error deleting the Support Script.")
65+
|> noreply()
66+
end
67+
end
4568
end

0 commit comments

Comments
 (0)