| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- defmodule VaccinsWeb.IndexLive do
- use VaccinsWeb, :live_view
- alias Vaccins.{Queries, Search}
- @impl true
- def mount(_params, _session, socket) do
- queries = Queries.valid_queries()
- {:ok,
- socket
- |> assign(
- valid_queries: queries,
- pending: %{},
- availabilities: queries |> Map.new(&{&1.id, []})
- )}
- end
- @impl true
- def handle_event(
- "trigger_query",
- %{"id" => query_id},
- socket = %{assigns: %{valid_queries: valid, pending: pending}}
- ) do
- query = valid |> Enum.find(&(&1.id == query_id))
- ref = Search.async_trigger_query(query)
- {:noreply, socket |> assign(pending: pending |> Map.put(ref, query_id))}
- end
- @impl true
- def handle_info(
- {:query_result, ref, res},
- socket = %{assigns: %{valid_queries: valid, pending: pending}}
- ) do
- query = pending |> Map.get(ref) |> IO.inspect()
- res |> IO.inspect()
- {:noreply, socket |> assign(pending: pending |> Map.delete(ref))}
- end
- defp render_query(q) do
- ~E"""
- <dl class="show-metadata">
- <dt>id</dt>
- <dd><%= q.id %></dd>
- <dt>booking page</dt>
- <dd><%= link q.booking_page, to: q.booking_page %></dd>
- <dt>Availabilities</dt>
- <dd></dd>
- <dt>test availability</dt>
- <dd><button phx-click="trigger_query" phx-value-id="<%= q.id %>">Trigger</button></dd>
- </dl>
- """
- end
- end
|