From 53178b373bff456c4099de9da2c0cd31039232e6 Mon Sep 17 00:00:00 2001 From: Claudio Ortolina Date: Mon, 30 Mar 2026 13:26:04 +0100 Subject: [PATCH] Add barcode scan quick action --- .../components/search_components.ex | 23 ++++++++++++++++--- priv/gettext/default.pot | 5 ++++ priv/gettext/en/LC_MESSAGES/default.po | 5 ++++ 3 files changed, 30 insertions(+), 3 deletions(-) diff --git a/lib/music_library_web/components/search_components.ex b/lib/music_library_web/components/search_components.ex index 3d7a74b5..85d08f31 100644 --- a/lib/music_library_web/components/search_components.ex +++ b/lib/music_library_web/components/search_components.ex @@ -9,6 +9,7 @@ defmodule MusicLibraryWeb.SearchComponents do only: [format_label: 1, type_label: 1, record_cover: 1, artist_image: 1] alias MusicLibrary.Records.Record + alias MusicLibraryWeb.Components.BarcodeScanner alias MusicLibraryWeb.Markdown @doc """ @@ -167,9 +168,11 @@ defmodule MusicLibraryWeb.SearchComponents do <.search_result_navigation label="Collection" icon="hero-circle-stack" /> """ attr :label, :string, required: true - attr :icon, :string, required: true + attr :icon, :string, default: nil attr :rest, :global, include: ~w(phx-click phx-value-path phx-target) + slot :custom_icon + def search_result_navigation(assigns) do ~H"""
- <.icon name={@icon} class="size-4 text-zinc-500 dark:text-zinc-400" /> + <%= if @icon do %> + <.icon name={@icon} class="size-4 text-zinc-500 dark:text-zinc-400" /> + <% else %> + {render_slot(@custom_icon)} + <% end %>

@@ -342,7 +349,7 @@ defmodule MusicLibraryWeb.SearchComponents do {gettext("No results found for '%{query}'", query: @query)}

- <.search_result_group title={gettext("Quick actions")} count={3}> + <.search_result_group title={gettext("Quick actions")} count={4}> <.search_result_navigation label={gettext("Add to wishlist")} icon="hero-star" @@ -364,6 +371,16 @@ defmodule MusicLibraryWeb.SearchComponents do phx-value-path={~p"/scrobble?#{[query: @query]}"} phx-target={@target} /> + <.search_result_navigation + label={gettext("Scan a record")} + phx-click="navigate_to_link" + phx-value-path={~p"/collection/scan"} + phx-target={@target} + > + <:custom_icon> + + + """ end diff --git a/priv/gettext/default.pot b/priv/gettext/default.pot index 86e7c0f5..10b1b3d3 100644 --- a/priv/gettext/default.pot +++ b/priv/gettext/default.pot @@ -2370,3 +2370,8 @@ msgstr "" #, elixir-autogen, elixir-format msgid "Outdated token" msgstr "" + +#: lib/music_library_web/components/search_components.ex +#, elixir-autogen, elixir-format +msgid "Scan a record" +msgstr "" diff --git a/priv/gettext/en/LC_MESSAGES/default.po b/priv/gettext/en/LC_MESSAGES/default.po index 0b4ab485..3abbb9f1 100644 --- a/priv/gettext/en/LC_MESSAGES/default.po +++ b/priv/gettext/en/LC_MESSAGES/default.po @@ -2370,3 +2370,8 @@ msgstr "" #, elixir-autogen, elixir-format msgid "Outdated token" msgstr "" + +#: lib/music_library_web/components/search_components.ex +#, elixir-autogen, elixir-format +msgid "Scan a record" +msgstr ""