Use a list for scanned releases
Doesn't remove duplicates, but guarantees a predictable order where the most recently scanned element is at the top
This commit is contained in:
@@ -11,7 +11,7 @@ defmodule MusicLibraryWeb.RecordLive.BarcodeScannerComponent do
|
|||||||
{:ok,
|
{:ok,
|
||||||
socket
|
socket
|
||||||
|> assign(:camera, :pending)
|
|> assign(:camera, :pending)
|
||||||
|> assign(:releases, %{})}
|
|> assign(:releases, [])}
|
||||||
end
|
end
|
||||||
|
|
||||||
@impl true
|
@impl true
|
||||||
@@ -53,7 +53,7 @@ defmodule MusicLibraryWeb.RecordLive.BarcodeScannerComponent do
|
|||||||
<video :if={!(@camera == :denied)} class="w-full hidden" id="camera-preview" playsinline />
|
<video :if={!(@camera == :denied)} class="w-full hidden" id="camera-preview" playsinline />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div :if={map_size(@releases) > 0} class="mt-4 flex justify-center">
|
<div :if={length(@releases) > 0} class="mt-4 flex justify-center">
|
||||||
<.button
|
<.button
|
||||||
phx-disable-with={gettext("Importing...")}
|
phx-disable-with={gettext("Importing...")}
|
||||||
phx-click={JS.push("import_releases", target: "#barcode-scanner")}
|
phx-click={JS.push("import_releases", target: "#barcode-scanner")}
|
||||||
@@ -62,7 +62,7 @@ defmodule MusicLibraryWeb.RecordLive.BarcodeScannerComponent do
|
|||||||
</.button>
|
</.button>
|
||||||
</div>
|
</div>
|
||||||
<ul class="divide-y divide-zinc-100 dark:divide-slate-300/30 mt-5">
|
<ul class="divide-y divide-zinc-100 dark:divide-slate-300/30 mt-5">
|
||||||
<.result :for={{_barcode, release} <- @releases} id={release.id} release={release} />
|
<.result :for={release <- @releases} id={release.id} release={release} />
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
"""
|
"""
|
||||||
@@ -110,7 +110,7 @@ defmodule MusicLibraryWeb.RecordLive.BarcodeScannerComponent do
|
|||||||
socket =
|
socket =
|
||||||
case Records.search_release_by_barcode(number) do
|
case Records.search_release_by_barcode(number) do
|
||||||
{:ok, [best_match_release | _other_releases]} ->
|
{:ok, [best_match_release | _other_releases]} ->
|
||||||
assign(socket, :releases, Map.put(socket.assigns.releases, number, best_match_release))
|
assign(socket, :releases, [best_match_release | socket.assigns.releases])
|
||||||
|
|
||||||
{:ok, []} ->
|
{:ok, []} ->
|
||||||
put_flash(
|
put_flash(
|
||||||
@@ -134,9 +134,7 @@ defmodule MusicLibraryWeb.RecordLive.BarcodeScannerComponent do
|
|||||||
current_time = DateTime.utc_now()
|
current_time = DateTime.utc_now()
|
||||||
# TODO: error handling when a release fails to import
|
# TODO: error handling when a release fails to import
|
||||||
:ok =
|
:ok =
|
||||||
socket.assigns.releases
|
Enum.each(socket.assigns.releases, fn release ->
|
||||||
|> Map.values()
|
|
||||||
|> Enum.each(fn release ->
|
|
||||||
Records.import_from_musicbrainz_release(release.id,
|
Records.import_from_musicbrainz_release(release.id,
|
||||||
format: MusicBrainz.ReleaseSearchResult.format(release),
|
format: MusicBrainz.ReleaseSearchResult.format(release),
|
||||||
purchased_at: current_time
|
purchased_at: current_time
|
||||||
@@ -147,6 +145,7 @@ defmodule MusicLibraryWeb.RecordLive.BarcodeScannerComponent do
|
|||||||
|
|
||||||
{:noreply,
|
{:noreply,
|
||||||
socket
|
socket
|
||||||
|
|> assign(:releases, [])
|
||||||
|> put_flash(:info, gettext("Records imported successfully"))
|
|> put_flash(:info, gettext("Records imported successfully"))
|
||||||
|> push_patch(to: ~p"/collection?#{qs}")}
|
|> push_patch(to: ~p"/collection?#{qs}")}
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -660,7 +660,7 @@ msgstr ""
|
|||||||
msgid "Importing..."
|
msgid "Importing..."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: lib/music_library_web/live/record_live/barcode_scanner_component.ex:150
|
#: lib/music_library_web/live/record_live/barcode_scanner_component.ex:149
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Records imported successfully"
|
msgid "Records imported successfully"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|||||||
Reference in New Issue
Block a user