Add ability to rotate dominant colors
This commit is contained in:
@@ -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">
|
||||
<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
|
||||
|
||||
@@ -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 ""
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user