Packages
moon
2.78.0
2.90.5
retired
2.90.4
2.90.3
2.90.2
2.90.1
2.90.0
2.89.4
2.89.1
2.89.0
2.88.0
2.87.11
2.87.10
2.87.9
2.87.8
2.87.7
2.87.6
2.87.5
2.87.4
2.87.3
2.87.2
2.87.1
2.87.0
2.86.1
2.86.0
2.85.1
2.85.0
2.84.0
2.83.0
2.82.0
2.81.4
2.81.3
2.81.2
2.81.1
2.81.0
2.80.2
2.80.1
2.80.0
2.79.13
2.79.12
2.79.11
2.79.10
2.79.9
2.79.8
2.79.7
2.79.6
2.79.5
2.79.4
2.79.3
2.79.2
2.79.1
2.79.0
2.78.4
2.78.3
2.78.2
2.78.1
2.78.0
2.77.0
2.76.5
2.76.4
2.76.3
2.76.2
2.76.1
2.76.0
2.75.0
2.74.1
2.74.0
2.73.8
2.73.7
2.73.6
2.73.5
2.73.4
2.73.3
2.73.2
2.73.1
2.73.0
2.72.5
2.72.4
2.72.3
2.72.2
2.72.1
2.72.0
2.71.1
2.71.0
2.70.0
2.69.2
2.69.1
2.69.0
2.68.11
2.68.10
Components-based design system written in elixir
Current section
Files
Jump to
Current section
Files
lib/moon_web/components/search_button.ex
defmodule MoonWeb.Components.SearchButton do
@moduledoc false
use MoonWeb, :stateful_component
alias Moon.Design.Search
alias Moon.Design.Dropdown
import Moon.Helpers.Form, only: [filter_options: 2, input_classes_light: 1]
prop(options, :list, default: MoonWeb.Schema.Link.titles())
prop(filter, :string, default: "")
prop(on_keyup, :event)
def handle_event("change_filter", %{"value" => filter}, socket) do
{:noreply, assign(socket, filter: filter)}
end
def render(assigns) do
~F"""
<Search
id="moon-search"
{=@filter}
on_keyup="change_filter"
options={@options |> page_to_href() |> filter_options(@filter)}
class="focus:bg-heles"
>
<:trigger :let={is_open: is_open}>
<Dropdown.Input
placeholder="Search..."
on_keyup="change_filter"
value={@filter}
class={
"ps-[2.5rem] bg-goku hover:border-trunks h-10",
input_classes_light(assigns),
"rounded-bl-none rounded-br-none": is_open
}
>
<Search.Icon class="start-[9px] text-moon-24" />
<Search.Button on_click={@on_keyup} />
</Dropdown.Input>
</:trigger>
</Search>
"""
end
defp page_to_href(options) do
options |> Enum.map(&Keyword.put(&1, :page, live_path(MoonWeb.Endpoint, &1[:page])))
end
end