diff --git a/lib/dotcom_web/hooks/assign_route.ex b/lib/dotcom_web/hooks/assign_route.ex new file mode 100644 index 0000000000..4cbf252ee5 --- /dev/null +++ b/lib/dotcom_web/hooks/assign_route.ex @@ -0,0 +1,23 @@ +defmodule DotcomWeb.Hooks.AssignRoute do + @moduledoc """ + Assign the route, before both disconnected and connected mounts. + """ + import Phoenix.Component, only: [assign: 3] + + @routes_repo Application.compile_env!(:dotcom, :repo_modules)[:routes] + + @doc """ + Uses the route ID in the params to look up the corresponding + route, and assigns that route to the socket as `:route`. + + If the route doesn't exist, then raises a + `DotcomWeb.NotFoundError` in order to get + `DotcomWeb.Router.handle_errors/2` to render the 404 page. + """ + def on_mount(:default, %{"route_id" => route_id}, _session, socket) do + case @routes_repo.get(route_id) do + nil -> raise DotcomWeb.NotFoundError + route -> {:cont, assign(socket, :route, route)} + end + end +end diff --git a/lib/dotcom_web/hooks/breadcrumbs.ex b/lib/dotcom_web/hooks/breadcrumbs.ex index e4a1ba5e45..f8165936d6 100644 --- a/lib/dotcom_web/hooks/breadcrumbs.ex +++ b/lib/dotcom_web/hooks/breadcrumbs.ex @@ -2,6 +2,7 @@ defmodule DotcomWeb.Hooks.Breadcrumbs do @moduledoc """ Assign the breadcrumbs, before both disconnected and connected mounts. """ + alias DotcomWeb.Schedule.RouteBreadcrumbs use Dotcom.Gettext.Sigils use DotcomWeb, :verified_routes @@ -17,6 +18,10 @@ defmodule DotcomWeb.Hooks.Breadcrumbs do {:cont, assign(socket, :breadcrumbs, [build(~t"Trip Planner")])} end + def on_mount(:schedule_page, _params, _session, %{assigns: %{route: route}} = socket) do + {:cont, assign(socket, :breadcrumbs, RouteBreadcrumbs.breadcrumbs(route))} + end + # catch-all case def on_mount(:default, _params, _session, socket), do: {:cont, socket} end diff --git a/lib/dotcom_web/live/line_diagram_live.ex b/lib/dotcom_web/live/line_diagram_live.ex index fc0a4a683b..edfe9fce12 100644 --- a/lib/dotcom_web/live/line_diagram_live.ex +++ b/lib/dotcom_web/live/line_diagram_live.ex @@ -5,7 +5,6 @@ defmodule DotcomWeb.LineDiagramLive do use DotcomWeb, :live_view @route_patterns_repo Application.compile_env!(:dotcom, :repo_modules)[:route_patterns] - @routes_repo Application.compile_env!(:dotcom, :repo_modules)[:routes] @alerts_repo Application.compile_env!(:dotcom, :repo_modules)[:alerts] @date_time_module Application.compile_env!(:dotcom, :date_time_module) @@ -22,9 +21,12 @@ defmodule DotcomWeb.LineDiagramLive do import DotcomWeb.Views.Helpers.AlertHelpers, only: [alert_badge: 1] + on_mount DotcomWeb.Hooks.AssignRoute + on_mount {DotcomWeb.Hooks.Breadcrumbs, :schedule_page} + def mount(params, _session, socket) do - route_id = params |> Map.get("route_id") - route = @routes_repo.get(route_id) + route = socket.assigns.route + route_id = route.id route_patterns = @route_patterns_repo.by_route_id(route_id) direction_id =