freedive/lib/freedive_web/live/liliform_live.ex

37 lines
1 KiB
Elixir
Raw Normal View History

defmodule FreediveWeb.LiliformLive do
defmacro __using__(opts) do
quote location: :keep, bind_quoted: [opts: opts] do
2024-05-15 22:18:55 +02:00
use FreediveWeb, :live_view
@behaviour FreediveWeb.LiliformLive
2024-05-16 01:47:37 +02:00
@filters_all [
2024-05-16 01:37:36 +02:00
%{
title: "All",
icon: "all",
active: false
}
]
2024-05-16 01:37:36 +02:00
def(mount(_params, _session, socket)) do
2024-05-16 01:47:37 +02:00
items = items()
2024-05-16 01:37:36 +02:00
socket = assign(socket, :opts, Keyword.get(unquote(opts), :opts, []))
2024-05-16 01:47:37 +02:00
socket = assign(socket, :items_all, items)
socket = assign(socket, :items, items)
socket = assign(socket, :filters, @filters_all ++ filters())
2024-05-16 01:37:36 +02:00
socket = assign(socket, :query, "")
2024-05-16 01:47:37 +02:00
IO.inspect(socket, label: "socket")
{:ok, socket}
end
2024-05-16 01:37:36 +02:00
2024-05-16 01:47:37 +02:00
def(handle_event("search", %{"value" => query}, socket)) do
items = search(query)
socket = assign(socket, :items, items)
{:noreply, socket}
end
2024-05-15 22:18:55 +02:00
end
end
@callback items() :: [map]
2024-05-16 01:37:36 +02:00
@callback filters() :: [map]
@callback search(query :: String.t()) :: [map]
end