Improvements to trip list pages

This commit is contained in:
Edward Betts 2024-05-18 16:44:18 +02:00
parent 7d376b38f3
commit 455528125c
3 changed files with 79 additions and 44 deletions

View file

@ -6,6 +6,7 @@ import typing
from collections import Counter
from dataclasses import dataclass, field
import emoji
from pycountry.db import Country
import agenda
@ -42,6 +43,18 @@ class TripElement:
element_type: str
detail: StrDict
def get_emoji(self) -> str | None:
"""Emjoji for trip element."""
if self.element_type in ("check-in", "check-out"):
return emoji.emojize(":hotel:", language="alias")
if self.element_type == "train":
return emoji.emojize(":train:", language="alias")
if self.element_type == "flight":
return emoji.emojize(":airplane:", language="alias")
if self.element_type == "ferry":
return emoji.emojize(":ferry:", language="alias")
return None
def airport_label(airport: StrDict) -> str:
"""Airport label: name and iata."""
@ -259,6 +272,16 @@ class Trip:
day = as_date(element.when)
grouped_elements[day].append(element)
# Sort elements within each day
for day in grouped_elements:
grouped_elements[day].sort(
key=lambda e: (
e.element_type == "check-in", # check-out elements last
e.element_type != "check-out", # check-in elements first
as_datetime(e.when), # then sort by time
)
)
# Convert the dictionary to a sorted list of tuples
grouped_elements_list = sorted(grouped_elements.items())