Add ability to rotate dominant colors
This commit is contained in:
@@ -188,6 +188,18 @@ defmodule MusicLibrary.Records.Record do
|
|||||||
end
|
end
|
||||||
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
|
defp update_release_ids(changeset) do
|
||||||
case get_change(changeset, :musicbrainz_data) do
|
case get_change(changeset, :musicbrainz_data) do
|
||||||
nil ->
|
nil ->
|
||||||
|
|||||||
@@ -60,9 +60,15 @@ defmodule MusicLibraryWeb.FormComponent do
|
|||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div class="space-y-4">
|
<div class="space-y-4">
|
||||||
<.label for="dominant_colors">
|
<div class="flex items-center gap-x-2">
|
||||||
{gettext("Dominant Colors")}
|
<.label for="dominant_colors">
|
||||||
</.label>
|
{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 class="mt-2 grid grid-cols-5 gap-2">
|
||||||
<div :for={color <- @form[:dominant_colors].value} class="flex flex-col items-center">
|
<div :for={color <- @form[:dominant_colors].value} class="flex flex-col items-center">
|
||||||
<input
|
<input
|
||||||
@@ -181,6 +187,11 @@ defmodule MusicLibraryWeb.FormComponent do
|
|||||||
handle_event("validate", params, socket)
|
handle_event("validate", params, socket)
|
||||||
end
|
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
|
defp save_record(socket, record_params, uploaded_covers) do
|
||||||
params =
|
params =
|
||||||
case uploaded_covers do
|
case uploaded_covers do
|
||||||
|
|||||||
@@ -1290,3 +1290,8 @@ msgstr ""
|
|||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
msgid "90 days"
|
msgid "90 days"
|
||||||
msgstr ""
|
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
|
#, elixir-autogen, elixir-format
|
||||||
msgid "90 days"
|
msgid "90 days"
|
||||||
msgstr ""
|
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
|
||||||
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
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user