defmodule BerrypodWeb.Shop.Search do use BerrypodWeb, :live_view alias Berrypod.Search @impl true def mount(_params, _session, socket) do {:ok, assign(socket, :page_title, "Search")} 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""" <.shop_layout {layout_assigns(assigns)} active_page="search">
<.page_title text="Search" />
<%= if @search_page_results != [] do %>

{length(@search_page_results)} {if length(@search_page_results) == 1, do: "result", else: "results"} for "{@search_page_query}"

<.product_grid theme_settings={@theme_settings}> <%= for product <- @search_page_results do %> <.product_card product={product} theme_settings={@theme_settings} mode={@mode} variant={:default} /> <% end %> <% else %> <%= if @search_page_query != "" do %>

No products found for "{@search_page_query}"

<.link navigate="/collections/all" class="collection-empty-link"> Browse all products
<% end %> <% end %>
""" end end