Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Itinerary detail map #2258

Merged
merged 6 commits into from
Dec 11, 2024
Merged

Itinerary detail map #2258

merged 6 commits into from
Dec 11, 2024

Conversation

anthonyshull
Copy link
Contributor

Screenshot Capture - 2024-12-10 - 10-26-44

@anthonyshull anthonyshull requested a review from a team as a code owner December 10, 2024 16:30
Comment on lines 201 to 206
defp tailwind_color("#003DA5"), do: "blue-500"
defp tailwind_color("#80276C"), do: "purple-500"
defp tailwind_color("#00843D"), do: "green-500"
defp tailwind_color("#ED8B00"), do: "orange-500"
defp tailwind_color("#DA291C"), do: "red-500"
defp tailwind_color("#7C878E"), do: "silver-500"
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📓 For now, we have to use the Metro colors because it will only accept those. We can change Metro to pass in an arbitrary hex code.

Comment on lines 44 to 76
<.async_result :let={results} assign={@results}>
<%= if results && @itinerary_selection != :summary do %>
<% {:detail, %{itinerary_group_index: itinerary_group_index, itinerary_index: itinerary_index}} = @itinerary_selection %>
<% itinerary = Enum.at(results, itinerary_group_index).itineraries |> Enum.at(itinerary_index) %>
<% itinerary_map = TripPlan.Map.itinerary_map(itinerary) %>
<% lines = TripPlan.Map.get_lines(itinerary_map) %>
<% points = TripPlan.Map.get_points(itinerary_map) %>
<.live_component
module={MbtaMetro.Live.Map}
id="trip-planner-map"
class={[
"h-64 md:h-96 w-full",
"relative overflow-none row-span-2",
@itinerary_selection == :summary && "hidden md:block"
]}
config={@map_config}
lines={lines}
pins={[@from, @to]}
points={points}
/>
<% else %>
<.live_component
module={MbtaMetro.Live.Map}
id="trip-planner-map"
class={[
"h-64 md:h-96 w-full",
"relative overflow-none row-span-2",
@itinerary_selection == :summary && "hidden md:block"
]}
config={@map_config}
pins={[@from, @to]}
/>
<% end %>
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📓 None of this will be here after we change the state management. It must be embedded like this because the results component includes the map.

|> Enum.reject(&is_nil/1)
end

defp invert_coordinate([a, b]), do: [b, a]
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nit (non-blocking): This kind of thing is exactly why I would prefer to see us standardize on %{latitude: lat, longitude: long} (or %{lat: lat, long: long} or whatever), rather than having to keep track of which intermediate objects use [long, lat] versus which ones use [lat, long].

My ideal would be that any intermediate, dotcom-controlled data is always stored as a struct, and is only translated to [lat, long] or [long, lat] at the boundary, like right before being passed into MapLibreGL, or right after being parsed out of GTFS, etc.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is right before it is being passed into maplibre gl.


defp invert_coordinate([a, b]), do: [b, a]

defp invert_coordinate(_), do: nil
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this necessary?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If we ever get a coordinate that isn't a tuple it will crash the process otherwise.

@@ -150,4 +197,13 @@ defmodule Dotcom.TripPlan.Map do
def z_index(%{current: idx, start: idx}), do: 100
def z_index(%{current: idx, end: idx}), do: 100
def z_index(%{}), do: 0

defp tailwind_color("#003DA5"), do: "blue-500"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm torn about this. Most of the other places where we translate things from GTFS to color, we do it based on the route, but here we're pulling the color out of the polyline directly.

If it turns out that we can get this to work, should we use the colors directly in otther contexts too?

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The color that's in the polyline came from the associated route, it's just parsed roundaboutly because legacy....

@joshlarson
Copy link
Contributor

This PR introduces a bug, where the map disappears while OTP is loading. For me, at least right now, that bug is approval-blocking.

I think I have a solution to that bug, which also cleans up some of the messier code here (I know it's short-term, but still better to avoid even short-term mess when possible). I'm posting a more detailed comment in-line.

Copy link
Contributor

@joshlarson joshlarson left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks pretty great!

I made a few comments, but the big one that's holding up approval for me is the map-flickering bug, which I think would be reasonably-elegantly solved by this change, but as long as it's fixed, I'm not too worried about how.

@anthonyshull anthonyshull merged commit a476cd9 into main Dec 11, 2024
17 checks passed
@anthonyshull anthonyshull deleted the ags/itinerary-detail-map branch December 11, 2024 20:20
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants