defmodule PlausibleWeb.Live.CustomerSupport do @moduledoc """ Customer Support home page (search) """ use PlausibleWeb, :live_view alias PlausibleWeb.CustomerSupport.Components.{Layout, Search} @impl true def mount(params, _session, socket) do uri = Routes.customer_support_path( PlausibleWeb.Endpoint, :index, Map.take(params, ["filter_text"]) ) |> URI.new!() {:ok, assign(socket, uri: uri, filter_text: params["filter_text"] || "" )} end @impl true def handle_params(params, _uri, socket) do filter_text = params["filter_text"] || "" socket = assign(socket, filter_text: filter_text) send_update(Search, id: "search-component", filter_text: filter_text) {:noreply, socket} end @impl true def render(assigns) do ~H""" <.flash_messages flash={@flash} /> <.live_component module={Search} filter_text={@filter_text} id="search-component" /> """ end @impl true def handle_event("filter", %{"filter-text" => input}, socket) do socket = set_filter_text(socket, input) {:noreply, socket} end def handle_event("reset-filter-text", _params, socket) do socket = set_filter_text(socket, "") {:noreply, socket} end defp set_filter_text(socket, filter_text) do uri = socket.assigns.uri uri_params = (uri.query || "") |> URI.decode_query() |> Map.put("filter_text", filter_text) |> URI.encode_query() uri = %{uri | query: uri_params} socket |> assign(:filter_text, filter_text) |> assign(:uri, uri) |> push_patch(to: URI.to_string(uri), replace: true) end end