index.ex 878 B

1234567891011121314151617181920212223242526272829303132
  1. defmodule VaccinsWeb.IndexLive do
  2. use VaccinsWeb, :live_view
  3. alias Vaccins.{LocationStore, Search}
  4. @impl true
  5. def mount(_params, _session, socket) do
  6. locations = LocationStore.get_locations()
  7. {:ok,
  8. socket
  9. |> assign(
  10. locations: locations,
  11. pending: %{},
  12. availabilities: locations |> Map.new(&{&1.id, []})
  13. )}
  14. end
  15. @impl true
  16. def handle_info({:query_sent, id, ref}, socket = %{assigns: %{pending: pending}}) do
  17. {:noreply, socket |> assign(pending: pending |> Map.put(ref, id))}
  18. end
  19. @impl true
  20. def handle_info(
  21. {:query_result, ref, res},
  22. socket = %{assigns: %{locations: valid, pending: pending}}
  23. ) do
  24. id = pending |> Map.get(ref)
  25. send_update(VaccinsWeb.LocationComponent, id: id, availabilities: res)
  26. {:noreply, socket |> assign(pending: pending |> Map.delete(ref))}
  27. end
  28. end