defmodule FreediveWeb.LiliformLive do defmacro __using__(opts) do quote location: :keep, bind_quoted: [opts: opts] do use FreediveWeb, :live_view @behaviour FreediveWeb.LiliformLive @all [ %{ title: "All", icon: "all", active: false } ] def(mount(_params, _session, socket)) do socket = assign(socket, :opts, Keyword.get(unquote(opts), :opts, [])) socket = assign(socket, :items, items()) socket = assign(socket, :filters, @all ++ filters()) socket = assign(socket, :query, "") {:ok, socket} end end end @callback items() :: [map] @callback filters() :: [map] @callback search(query :: String.t()) :: [map] end