Refactor to move record release helpers to better places

This commit is contained in:
Claudio Ortolina
2025-05-01 20:21:18 +01:00
parent c414ea89b7
commit cfe357239b
3 changed files with 25 additions and 18 deletions
+3 -15
View File
@@ -71,29 +71,17 @@ defmodule MusicLibrary.Records.Record do
end
end
def selected_release_id_options(record) do
def releases(record) do
record.musicbrainz_data
|> ReleaseGroup.releases()
|> Enum.map(fn release ->
{
selected_release_label(release),
release["id"]
}
end)
end
def selected_release(record) do
record.musicbrainz_data
|> ReleaseGroup.releases()
record
|> releases()
|> Enum.find(fn release -> release["id"] == record.selected_release_id end)
end
def selected_release_label(release) do
[release["date"], release["country"], release["packaging"]]
|> Enum.reject(&is_nil/1)
|> Enum.join(" ")
end
def changeset(record, attrs) do
record
|> cast(attrs, [
@@ -1,7 +1,9 @@
defmodule MusicLibraryWeb.FormComponent do
use MusicLibraryWeb, :live_component
import MusicLibraryWeb.RecordComponents, only: [format_label: 1, type_label: 1]
import MusicLibraryWeb.RecordComponents,
only: [format_label: 1, type_label: 1, release_label: 1]
alias MusicLibrary.Records
alias MusicLibrary.Records.{Cover, Record}
@@ -54,7 +56,7 @@ defmodule MusicLibraryWeb.FormComponent do
<Fluxon.Components.Select.select
field={@form[:selected_release_id]}
label={gettext("Selected Release")}
options={Record.selected_release_id_options(@record)}
options={selected_release_id_options(@record)}
/>
<div class="sm:columns-2">
<.input field={@form[:release_date]} type="text" label={gettext("Release Date")} />
@@ -192,5 +194,16 @@ defmodule MusicLibraryWeb.FormComponent do
Enum.map(Records.Record.types(), fn t -> {type_label(t), t} end)
end
defp selected_release_id_options(record) do
record
|> Records.Record.releases()
|> Enum.map(fn release ->
{
release_label(release),
release["id"]
}
end)
end
defp notify_parent(msg), do: send(self(), {__MODULE__, msg})
end
@@ -295,12 +295,18 @@ defmodule MusicLibraryWeb.RecordComponents do
def selected_release_label(record) do
if release = Records.Record.selected_release(record) do
Records.Record.selected_release_label(release)
release_label(release)
else
gettext("No release selected")
end
end
def release_label(release) do
[release["date"], release["country"], release["packaging"]]
|> Enum.reject(&is_nil/1)
|> Enum.join(" ")
end
def toggle_actions_menu(record_id) do
JS.toggle(to: "#actions-#{record_id}")
|> JS.toggle_class("pointer-events-none", to: "#records > li")