| 1234567891011121314151617181920212223242526272829303132 |
- defmodule VaccinsWeb.IndexLive do
- use VaccinsWeb, :live_view
- alias Vaccins.{LocationStore, Search}
- @impl true
- def mount(_params, _session, socket) do
- locations = LocationStore.get_locations()
- {:ok,
- socket
- |> assign(
- locations: locations,
- pending: %{},
- availabilities: locations |> Map.new(&{&1.id, []})
- )}
- end
- @impl true
- def handle_info({:query_sent, id, ref}, socket = %{assigns: %{pending: pending}}) do
- {:noreply, socket |> assign(pending: pending |> Map.put(ref, id))}
- end
- @impl true
- def handle_info(
- {:query_result, ref, res},
- socket = %{assigns: %{locations: valid, pending: pending}}
- ) do
- id = pending |> Map.get(ref)
- send_update(VaccinsWeb.LocationComponent, id: id, availabilities: res)
- {:noreply, socket |> assign(pending: pending |> Map.delete(ref))}
- end
- end
|