2026-02-24 22:56:19 +00:00
|
|
|
defmodule BerrypodWeb.Shop.Search do
|
|
|
|
|
use BerrypodWeb, :live_view
|
|
|
|
|
|
2026-02-26 19:13:00 +00:00
|
|
|
alias Berrypod.{Pages, Search}
|
2026-02-24 22:56:19 +00:00
|
|
|
|
|
|
|
|
@impl true
|
|
|
|
|
def mount(_params, _session, socket) do
|
2026-02-26 19:13:00 +00:00
|
|
|
page = Pages.get_page("search")
|
|
|
|
|
{:ok, socket |> assign(:page_title, "Search") |> assign(:page, page)}
|
2026-02-24 22:56:19 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
|
|
@impl true
|
|
|
|
|
def handle_params(params, _uri, socket) do
|
|
|
|
|
query = params["q"] || ""
|
|
|
|
|
results = if query != "", do: Search.search(query), else: []
|
|
|
|
|
|
|
|
|
|
{:noreply,
|
|
|
|
|
socket
|
|
|
|
|
|> assign(:search_page_query, query)
|
|
|
|
|
|> assign(:search_page_results, results)}
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
@impl true
|
|
|
|
|
def handle_event("search_submit", %{"q" => query}, socket) do
|
|
|
|
|
{:noreply, push_patch(socket, to: ~p"/search?q=#{query}")}
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
@impl true
|
|
|
|
|
def render(assigns) do
|
|
|
|
|
~H"""
|
2026-02-26 19:13:00 +00:00
|
|
|
<BerrypodWeb.PageRenderer.render_page {assigns} />
|
2026-02-24 22:56:19 +00:00
|
|
|
"""
|
|
|
|
|
end
|
|
|
|
|
end
|