Skip to content

Commit 02de318

Browse files
committed
Show helpful message when uploading duplicate firmware
1 parent b7efd90 commit 02de318

File tree

2 files changed

+32
-1
lines changed

2 files changed

+32
-1
lines changed

lib/nerves_hub_web/live/firmware.ex

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,16 @@ defmodule NervesHubWeb.Live.Firmware do
140140
}} ->
141141
error_feedback(socket, "No matching product could be found.")
142142

143+
{:error,
144+
%Ecto.Changeset{
145+
errors: [
146+
uuid:
147+
{"has already been taken",
148+
[constraint: :unique, constraint_name: "firmwares_product_id_uuid_index"]}
149+
]
150+
} = changeset} ->
151+
error_feedback(socket, changeset)
152+
143153
{:error, %Ecto.Changeset{}} ->
144154
error_feedback(socket, "Unknown error uploading firmware.")
145155

@@ -151,6 +161,20 @@ defmodule NervesHubWeb.Live.Firmware do
151161
end
152162
end
153163

164+
defp error_feedback(
165+
socket,
166+
%Ecto.Changeset{errors: [uuid: {"has already been taken", _}]} = changeset
167+
) do
168+
socket
169+
|> assign(:error_message, "Duplicate Firmware Is Not Allowed")
170+
|> assign(:error_code, :duplicate_firmware)
171+
|> assign(
172+
:firmware_path,
173+
"/org/#{socket.assigns.org.name}/#{socket.assigns.product.name}/firmware/#{changeset.changes.uuid}"
174+
)
175+
|> noreply()
176+
end
177+
154178
defp error_feedback(socket, %Ecto.Changeset{} = changeset) do
155179
error_message =
156180
changeset.errors

lib/nerves_hub_web/live/firmware_templates/upload_firmware_template.html.heex

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,14 @@
99
<.live_file_input upload={@uploads.firmware} required />
1010

1111
<div class="has-error">
12-
<span :if={@error_message} class="help-block"><%= @error_message %></span>
12+
<span :if={@error_message} class="help-block">
13+
<%= case @error_code do %>
14+
<% :duplicate_firmware -> %>
15+
<%= @error_message %> <a href={@firmware_path} target="_blank">View Firmware</a>
16+
<% _ -> %>
17+
<%= @error_message %>
18+
<% end %>
19+
</span>
1320
</div>
1421

1522
<div :for={entry <- @uploads.firmware.entries} class="mt-1">

0 commit comments

Comments
 (0)