| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- defmodule VaccinsWeb.LocationComponent do
- use VaccinsWeb, :live_component
- alias Vaccins.{LocationStore, Search}
- @impl true
- def mount(socket), do: {:ok, socket |> assign(availabilities: [])}
- @impl true
- def update(assigns, socket) do
- {force_refresh, assigns} = assigns |> Map.pop(:force_refresh)
- if is_nil(force_refresh) do
- {:ok, socket |> assign(assigns)}
- else
- trigger_and_signal_query(
- assigns |> Map.get(:location, socket.assigns.location),
- assigns.id
- )
- {:ok, socket |> assign(availabilities: "...") |> assign(assigns)}
- end
- end
- @impl true
- def handle_event("trigger_query", _, socket = %{assigns: %{id: id, location: location}}) do
- trigger_and_signal_query(location, id)
- {:noreply, socket |> assign(availabilities: "...")}
- end
- @impl true
- def render(assigns) do
- ~L"""
- <dl class="show-metadata">
- <dt>id</dt>
- <dd><%= @location.id %></dd>
- <dt>booking page</dt>
- <dd><%= link @location.booking_page, to: @location.booking_page %></dd>
- <dt>Availabilities</dt>
- <dd><%= @availabilities |> inspect %></dd>
- <dt>test availability</dt>
- <dd><button phx-click="trigger_query" phx-target="<%= @myself %>">Trigger</button></dd>
- </dl>
- """
- end
- defp trigger_and_signal_query(location, id) do
- ref = Search.async_trigger_query(location)
- send(self(), {:query_sent, id, ref})
- end
- end
|