Add price and filter homepage
This commit is contained in:
@@ -21,6 +21,19 @@ defmodule Wish.Wishlist do
|
|||||||
Repo.all(Item)
|
Repo.all(Item)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@doc """
|
||||||
|
Returns the list of unreceived items.
|
||||||
|
|
||||||
|
## Examples
|
||||||
|
|
||||||
|
iex> list_available_items()
|
||||||
|
[%Item{}, ...]
|
||||||
|
|
||||||
|
"""
|
||||||
|
def list_available_items do
|
||||||
|
Repo.all(from i in Item, where: not i.received)
|
||||||
|
end
|
||||||
|
|
||||||
@doc """
|
@doc """
|
||||||
Gets a single item.
|
Gets a single item.
|
||||||
|
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ defmodule Wish.Wishlist.Item do
|
|||||||
field :received, :boolean, default: false
|
field :received, :boolean, default: false
|
||||||
field :desire, :integer
|
field :desire, :integer
|
||||||
field :image_url, :string
|
field :image_url, :string
|
||||||
|
field :price, :integer
|
||||||
|
|
||||||
timestamps(type: :utc_datetime)
|
timestamps(type: :utc_datetime)
|
||||||
end
|
end
|
||||||
@@ -16,7 +17,7 @@ defmodule Wish.Wishlist.Item do
|
|||||||
@doc false
|
@doc false
|
||||||
def changeset(item, attrs) do
|
def changeset(item, attrs) do
|
||||||
item
|
item
|
||||||
|> cast(attrs, [:title, :description, :url, :received, :desire, :image_url])
|
|> cast(attrs, [:title, :description, :url, :price, :received, :desire, :image_url])
|
||||||
|> validate_required([:url])
|
|> validate_required([:url])
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,14 @@ defmodule WishWeb.HomeLive.Index do
|
|||||||
_ -> false
|
_ -> false
|
||||||
end
|
end
|
||||||
|
|
||||||
{:ok, assign(socket, :items, Wishlist.list_items()) |> assign(:grid, grid?)}
|
items =
|
||||||
|
if socket.assigns.current_user do
|
||||||
|
Wishlist.list_items()
|
||||||
|
else
|
||||||
|
Wishlist.list_available_items()
|
||||||
|
end
|
||||||
|
|
||||||
|
{:ok, assign(socket, :items, items) |> assign(:grid, grid?)}
|
||||||
end
|
end
|
||||||
|
|
||||||
@impl true
|
@impl true
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ defmodule WishWeb.ItemLive.FormComponent do
|
|||||||
>
|
>
|
||||||
<.input field={@form[:title]} type="text" label="Title" />
|
<.input field={@form[:title]} type="text" label="Title" />
|
||||||
<.input field={@form[:description]} type="text" label="Description" />
|
<.input field={@form[:description]} type="text" label="Description" />
|
||||||
|
<.input field={@form[:price]} type="number" min="0" step="any" label="Price" />
|
||||||
<.input field={@form[:url]} type="text" label="Url" />
|
<.input field={@form[:url]} type="text" label="Url" />
|
||||||
<.input field={@form[:image_url]} type="text" label="Image URL" />
|
<.input field={@form[:image_url]} type="text" label="Image URL" />
|
||||||
<.input field={@form[:desire]} type="number" label="Desire" />
|
<.input field={@form[:desire]} type="number" label="Desire" />
|
||||||
|
|||||||
@@ -14,6 +14,7 @@
|
|||||||
>
|
>
|
||||||
<:col :let={{_id, item}} label="Title"><%= item.title %></:col>
|
<:col :let={{_id, item}} label="Title"><%= item.title %></:col>
|
||||||
<:col :let={{_id, item}} label="Description"><%= item.description %></:col>
|
<:col :let={{_id, item}} label="Description"><%= item.description %></:col>
|
||||||
|
<:col :let={{_id, item}} label="Price"><%= item.price %></:col>
|
||||||
<:col :let={{_id, item}} label="Desire"><%= item.desire %></:col>
|
<:col :let={{_id, item}} label="Desire"><%= item.desire %></:col>
|
||||||
<:action :let={{id, item}}>
|
<:action :let={{id, item}}>
|
||||||
<.link
|
<.link
|
||||||
|
|||||||
@@ -6,6 +6,7 @@
|
|||||||
<.simple_form for={@form} id="item-form" phx-change="validate" phx-submit="save">
|
<.simple_form for={@form} id="item-form" phx-change="validate" phx-submit="save">
|
||||||
<.input field={@form[:title]} type="text" label="Title" />
|
<.input field={@form[:title]} type="text" label="Title" />
|
||||||
<.input field={@form[:description]} type="text" label="Description" />
|
<.input field={@form[:description]} type="text" label="Description" />
|
||||||
|
<.input field={@form[:price]} type="number" min="0" step="any" label="Price" />
|
||||||
<.input field={@form[:url]} type="text" label="Url" />
|
<.input field={@form[:url]} type="text" label="Url" />
|
||||||
<.input field={@form[:image_url]} type="text" label="Image URL" />
|
<.input field={@form[:image_url]} type="text" label="Image URL" />
|
||||||
<.input field={@form[:desire]} type="number" label="Desire" />
|
<.input field={@form[:desire]} type="number" label="Desire" />
|
||||||
|
|||||||
9
priv/repo/migrations/20231203201659_add_item_price.exs
Normal file
9
priv/repo/migrations/20231203201659_add_item_price.exs
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
defmodule Wish.Repo.Migrations.AddItemPrice do
|
||||||
|
use Ecto.Migration
|
||||||
|
|
||||||
|
def change do
|
||||||
|
alter table("items") do
|
||||||
|
add :price, :integer
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
Reference in New Issue
Block a user