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