From f2db3617020d1bd2b46371dabb7e7d211198863b Mon Sep 17 00:00:00 2001 From: Daniel Patterson Date: Tue, 5 Dec 2023 23:32:07 +0000 Subject: [PATCH] Add item visibility toggle --- lib/wish/wishlist.ex | 6 +++++- lib/wish/wishlist/item.ex | 3 ++- lib/wish_web/live/home_live/index.ex | 4 ++-- lib/wish_web/live/item_live/show.html.heex | 1 + priv/repo/migrations/20231205232711_add_hidden_item.exs | 9 +++++++++ 5 files changed, 19 insertions(+), 4 deletions(-) create mode 100644 priv/repo/migrations/20231205232711_add_hidden_item.exs diff --git a/lib/wish/wishlist.ex b/lib/wish/wishlist.ex index 3780517..cdab180 100644 --- a/lib/wish/wishlist.ex +++ b/lib/wish/wishlist.ex @@ -21,6 +21,10 @@ defmodule Wish.Wishlist do Repo.all(Item) end + def list_visible_items do + Repo.all(from i in Item, where: i.visible) + end + @doc """ Returns the list of unreceived items. @@ -31,7 +35,7 @@ defmodule Wish.Wishlist do """ def list_available_items do - Repo.all(from i in Item, where: not i.received) + Repo.all(from i in Item, where: not i.received and i.visible) end @doc """ diff --git a/lib/wish/wishlist/item.ex b/lib/wish/wishlist/item.ex index 037eb5e..69a7272 100644 --- a/lib/wish/wishlist/item.ex +++ b/lib/wish/wishlist/item.ex @@ -10,6 +10,7 @@ defmodule Wish.Wishlist.Item do field :desire, :integer field :image_url, :string field :price, :integer + field :visible, :boolean timestamps(type: :utc_datetime) end @@ -17,7 +18,7 @@ defmodule Wish.Wishlist.Item do @doc false def changeset(item, attrs) do item - |> cast(attrs, [:title, :description, :url, :price, :received, :desire, :image_url]) + |> cast(attrs, [:title, :description, :url, :price, :received, :desire, :image_url, :visible]) |> validate_required([:url]) end diff --git a/lib/wish_web/live/home_live/index.ex b/lib/wish_web/live/home_live/index.ex index fbb8d2b..452f5d1 100644 --- a/lib/wish_web/live/home_live/index.ex +++ b/lib/wish_web/live/home_live/index.ex @@ -14,7 +14,7 @@ defmodule WishWeb.HomeLive.Index do items = if socket.assigns.current_user do - Wishlist.list_items() + Wishlist.list_visible_items() else Wishlist.list_available_items() end @@ -33,7 +33,7 @@ defmodule WishWeb.HomeLive.Index do items = if new_state do - Wishlist.list_items() + Wishlist.list_visible_items() else Wishlist.list_available_items() end diff --git a/lib/wish_web/live/item_live/show.html.heex b/lib/wish_web/live/item_live/show.html.heex index 7b228f9..6e40c17 100644 --- a/lib/wish_web/live/item_live/show.html.heex +++ b/lib/wish_web/live/item_live/show.html.heex @@ -10,6 +10,7 @@ <.input field={@form[:url]} type="text" label="Url" /> <.input field={@form[:image_url]} type="text" label="Image URL" /> <.input field={@form[:desire]} type="number" label="Desire" /> + <.input field={@form[:visible]} type="checkbox" label="Visible?" /> <:actions> <.button phx-disable-with="Saving...">Save Item diff --git a/priv/repo/migrations/20231205232711_add_hidden_item.exs b/priv/repo/migrations/20231205232711_add_hidden_item.exs new file mode 100644 index 0000000..410e80b --- /dev/null +++ b/priv/repo/migrations/20231205232711_add_hidden_item.exs @@ -0,0 +1,9 @@ +defmodule Wish.Repo.Migrations.AddHiddenItem do + use Ecto.Migration + + def change do + alter table(:items) do + add :visible, :boolean, default: true, null: false + end + end +end