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
end end
def selected_release_id_options(record) do def releases(record) do
record.musicbrainz_data record.musicbrainz_data
|> ReleaseGroup.releases() |> ReleaseGroup.releases()
|> Enum.map(fn release ->
{
selected_release_label(release),
release["id"]
}
end)
end end
def selected_release(record) do def selected_release(record) do
record.musicbrainz_data record
|> ReleaseGroup.releases() |> releases()
|> Enum.find(fn release -> release["id"] == record.selected_release_id end) |> Enum.find(fn release -> release["id"] == record.selected_release_id end)
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 def changeset(record, attrs) do
record record
|> cast(attrs, [ |> cast(attrs, [
@@ -1,7 +1,9 @@
defmodule MusicLibraryWeb.FormComponent do defmodule MusicLibraryWeb.FormComponent do
use MusicLibraryWeb, :live_component 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
alias MusicLibrary.Records.{Cover, Record} alias MusicLibrary.Records.{Cover, Record}
@@ -54,7 +56,7 @@ defmodule MusicLibraryWeb.FormComponent do
<Fluxon.Components.Select.select <Fluxon.Components.Select.select
field={@form[:selected_release_id]} field={@form[:selected_release_id]}
label={gettext("Selected Release")} label={gettext("Selected Release")}
options={Record.selected_release_id_options(@record)} options={selected_release_id_options(@record)}
/> />
<div class="sm:columns-2"> <div class="sm:columns-2">
<.input field={@form[:release_date]} type="text" label={gettext("Release Date")} /> <.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) Enum.map(Records.Record.types(), fn t -> {type_label(t), t} end)
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}) defp notify_parent(msg), do: send(self(), {__MODULE__, msg})
end end
@@ -295,12 +295,18 @@ defmodule MusicLibraryWeb.RecordComponents do
def selected_release_label(record) do def selected_release_label(record) do
if release = Records.Record.selected_release(record) do if release = Records.Record.selected_release(record) do
Records.Record.selected_release_label(release) release_label(release)
else else
gettext("No release selected") gettext("No release selected")
end end
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 def toggle_actions_menu(record_id) do
JS.toggle(to: "#actions-#{record_id}") JS.toggle(to: "#actions-#{record_id}")
|> JS.toggle_class("pointer-events-none", to: "#records > li") |> JS.toggle_class("pointer-events-none", to: "#records > li")