berrypod/lib/berrypod_web/live/shop/pages/search.ex

40 lines
934 B
Elixir
Raw Normal View History

defmodule BerrypodWeb.Shop.Pages.Search do
@moduledoc """
Search page handler for the unified Shop.Page LiveView.
"""
import Phoenix.Component, only: [assign: 3]
import Phoenix.LiveView, only: [push_patch: 2]
alias Berrypod.{Pages, Search}
def init(socket, _params, _uri) do
page = Pages.get_page("search")
socket =
socket
|> assign(:page_title, "Search")
|> assign(:page, page)
{:noreply, socket}
end
def handle_params(params, _uri, socket) do
query = params["q"] || ""
results = if query != "", do: Search.search(query), else: []
socket =
socket
|> assign(:search_page_query, query)
|> assign(:search_page_results, results)
{:noreply, socket}
end
def handle_event("search_submit", %{"q" => query}, socket) do
{:noreply, push_patch(socket, to: "/search?q=#{query}")}
end
def handle_event(_event, _params, _socket), do: :cont
end