index.ex 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. defmodule VaccinsWeb.IndexLive do
  2. use VaccinsWeb, :live_view
  3. alias Vaccins.{Queries, Search}
  4. @impl true
  5. def mount(_params, _session, socket) do
  6. queries = Queries.valid_queries()
  7. {:ok,
  8. socket
  9. |> assign(
  10. valid_queries: queries,
  11. pending: %{},
  12. availabilities: queries |> Map.new(&{&1.id, []})
  13. )}
  14. end
  15. @impl true
  16. def handle_event(
  17. "trigger_query",
  18. %{"id" => query_id},
  19. socket = %{assigns: %{valid_queries: valid, pending: pending}}
  20. ) do
  21. query = valid |> Enum.find(&(&1.id == query_id))
  22. ref = Search.async_trigger_query(query)
  23. {:noreply, socket |> assign(pending: pending |> Map.put(ref, query_id))}
  24. end
  25. @impl true
  26. def handle_info(
  27. {:query_result, ref, res},
  28. socket = %{assigns: %{valid_queries: valid, pending: pending}}
  29. ) do
  30. query = pending |> Map.get(ref) |> IO.inspect()
  31. res |> IO.inspect()
  32. {:noreply, socket |> assign(pending: pending |> Map.delete(ref))}
  33. end
  34. defp render_query(q) do
  35. ~E"""
  36. <dl class="show-metadata">
  37. <dt>id</dt>
  38. <dd><%= q.id %></dd>
  39. <dt>booking page</dt>
  40. <dd><%= link q.booking_page, to: q.booking_page %></dd>
  41. <dt>Availabilities</dt>
  42. <dd></dd>
  43. <dt>test availability</dt>
  44. <dd><button phx-click="trigger_query" phx-value-id="<%= q.id %>">Trigger</button></dd>
  45. </dl>
  46. """
  47. end
  48. end