|
|
@@ -1,10 +1,39 @@
|
|
|
defmodule VaccinsWeb.IndexLive do
|
|
|
use VaccinsWeb, :live_view
|
|
|
- alias Vaccins.Queries
|
|
|
+ alias Vaccins.{Queries, Search}
|
|
|
|
|
|
@impl true
|
|
|
def mount(_params, _session, socket) do
|
|
|
- {:ok, socket |> assign(valid_queries: Queries.valid_queries())}
|
|
|
+ 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
|
|
|
@@ -14,6 +43,10 @@ defmodule VaccinsWeb.IndexLive do
|
|
|
<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
|