diff --git a/lib/dotcom_web/live/schedule_finder_live.ex b/lib/dotcom_web/live/schedule_finder_live.ex
index 8df8bb8656..8d797a9619 100644
--- a/lib/dotcom_web/live/schedule_finder_live.ex
+++ b/lib/dotcom_web/live/schedule_finder_live.ex
@@ -72,6 +72,7 @@ defmodule DotcomWeb.ScheduleFinderLive do
|> assign_new(:service_groups, fn -> service_groups end)
|> assign_new(:loaded_trips, fn -> %{} end)
|> assign_new(:selected_service_name, fn -> Map.get(selected_service, :label, "") end)
+ |> assign_new(:selected_service_key, fn -> service_key(selected_service) end)
|> assign_new(:service_today?, fn ->
Enum.any?(all_services, &(!is_nil(&1.now_date)))
end)
@@ -131,6 +132,7 @@ defmodule DotcomWeb.ScheduleFinderLive do
<.service_picker
id={"service-picker-#{@route.id}"}
selected_service_name={@selected_service_name}
+ selected_service_key={@selected_service_key}
service_groups={@service_groups}
/>
<.async_result :let={departures} assign={@departures}>
@@ -197,12 +199,11 @@ defmodule DotcomWeb.ScheduleFinderLive do
end
end
- def handle_event("select_service", %{"selected_service" => selected_service_label}, socket) do
- send(self(), %{selected_service: selected_service_label})
-
+ def handle_event("select_service", %{"selected_service" => selected_service_key}, socket) do
{:noreply,
socket
- |> assign(:departures, AsyncResult.loading())}
+ |> assign_service(selected_service_key)
+ |> assign_departures()}
end
def handle_event(_, _, socket), do: {:noreply, socket}
@@ -227,13 +228,6 @@ defmodule DotcomWeb.ScheduleFinderLive do
{:noreply, assign_alerts(socket)}
end
- def handle_info(%{selected_service: selected_service_label}, socket) do
- {:noreply,
- socket
- |> assign_service(selected_service_label)
- |> assign_departures()}
- end
-
def handle_info(_, socket), do: {:noreply, socket}
defp subscribe_to_alerts(socket) do
@@ -320,20 +314,23 @@ defmodule DotcomWeb.ScheduleFinderLive do
end
end
- defp assign_service(socket, selected_service_label) do
+ defp assign_service(socket, selected_service_key) do
selected_dated_service =
socket.assigns.service_groups
|> Enum.flat_map(& &1.services)
- |> Enum.find(&(&1.label == selected_service_label))
-
- daily_schedule_date =
- selected_dated_service.last_service_date
+ |> Enum.find(&(service_key(&1) == selected_service_key))
socket
- |> assign(:selected_service_name, selected_service_label)
- |> assign(:daily_schedule_date, daily_schedule_date)
+ |> assign(:selected_service_name, selected_dated_service.label)
+ |> assign(:selected_service_key, selected_service_key)
+ |> assign(:daily_schedule_date, selected_dated_service.last_service_date)
end
+ defp service_key(%{label: label, last_service_date: date}),
+ do: "#{Date.to_iso8601(date)}:#{label}"
+
+ defp service_key(_), do: ""
+
defp get_departures(route_id, direction_id, stop_id, date) do
case @schedule_finder.daily_departures(route_id, direction_id, stop_id, date) do
{:ok, departures} -> {:ok, %{departures: departures}}
@@ -414,6 +411,7 @@ defmodule DotcomWeb.ScheduleFinderLive do
attr :id, :string, required: true
attr :service_groups, :list, required: true
attr :selected_service_name, :string, default: ""
+ attr :selected_service_key, :string, default: ""
defp service_picker(assigns) do
~H"""
@@ -426,13 +424,13 @@ defmodule DotcomWeb.ScheduleFinderLive do
-