Add ability to rotate dominant colors

This commit is contained in:
Claudio Ortolina
2025-08-27 21:11:13 +03:00
parent 0fb1ffcdbe
commit df4ca83aeb
5 changed files with 56 additions and 3 deletions
+12
View File
@@ -188,6 +188,18 @@ defmodule MusicLibrary.Records.Record do
end
end
def rotate_dominant_colors(%__MODULE__{dominant_colors: dominant_colors} = record) do
change(record, dominant_colors: rotate(dominant_colors))
end
def rotate_dominant_colors(changeset) do
dominant_colors = get_field(changeset, :dominant_colors)
put_change(changeset, :dominant_colors, rotate(dominant_colors))
end
defp rotate([]), do: []
defp rotate([first | rest]), do: rest ++ [first]
defp update_release_ids(changeset) do
case get_change(changeset, :musicbrainz_data) do
nil ->
@@ -60,9 +60,15 @@ defmodule MusicLibraryWeb.FormComponent do
/>
</div>
<div class="space-y-4">
<.label for="dominant_colors">
{gettext("Dominant Colors")}
</.label>
<div class="flex items-center gap-x-2">
<.label for="dominant_colors">
{gettext("Dominant Colors")}
</.label>
<.button type="button" size="sm" phx-click="rotate_dominant_colors" phx-target={@myself}>
<.icon name="hero-arrows-right-left" class="icon" aria-hidden="true" data-slot="icon" />
{gettext("Rotate colors")}
</.button>
</div>
<div class="mt-2 grid grid-cols-5 gap-2">
<div :for={color <- @form[:dominant_colors].value} class="flex flex-col items-center">
<input
@@ -181,6 +187,11 @@ defmodule MusicLibraryWeb.FormComponent do
handle_event("validate", params, socket)
end
def handle_event("rotate_dominant_colors", _params, socket) do
changeset = Record.rotate_dominant_colors(socket.assigns.form.source)
{:noreply, assign(socket, form: to_form(changeset, action: :validate))}
end
defp save_record(socket, record_params, uploaded_covers) do
params =
case uploaded_covers do
+5
View File
@@ -1290,3 +1290,8 @@ msgstr ""
#, elixir-autogen, elixir-format
msgid "90 days"
msgstr ""
#: lib/music_library_web/components/form_component.ex
#, elixir-autogen, elixir-format
msgid "Rotate colors"
msgstr ""
+5
View File
@@ -1290,3 +1290,8 @@ msgstr ""
#, elixir-autogen, elixir-format
msgid "90 days"
msgstr ""
#: lib/music_library_web/components/form_component.ex
#, elixir-autogen, elixir-format
msgid "Rotate colors"
msgstr ""
@@ -117,4 +117,24 @@ defmodule MusicLibrary.Records.RecordTest do
]
end
end
describe "rotate_dominant_colors/1" do
test "rotates dominant colors" do
record = %Record{dominant_colors: []}
changeset = Record.rotate_dominant_colors(record)
assert Ecto.Changeset.get_change(changeset, :dominant_colors) == nil
record = %Record{dominant_colors: ["#FFF"]}
changeset = Record.rotate_dominant_colors(record)
assert Ecto.Changeset.get_change(changeset, :dominant_colors) == nil
record = %Record{dominant_colors: ["#FFF", "#CCC"]}
changeset = Record.rotate_dominant_colors(record)
assert Ecto.Changeset.get_change(changeset, :dominant_colors) == ["#CCC", "#FFF"]
record = %Record{dominant_colors: ["#FFF", "#CCC", "#000"]}
changeset = Record.rotate_dominant_colors(record)
assert Ecto.Changeset.get_change(changeset, :dominant_colors) == ["#CCC", "#000", "#FFF"]
end
end
end