mirror of
https://github.com/mauriceboe/TREK.git
synced 2026-10-20 05:56:53 +00:00
d01d9df93a
The desktop note dialog and the phone note sheet fill their editor with dayNoteDraft and save through writeDayNote, so both trim the title, store an empty detail as null and default the icon the same way. Both count the detail line against one shared limit.
60 lines
2.8 KiB
TypeScript
60 lines
2.8 KiB
TypeScript
import {
|
|
FileText, Info, Clock, MapPin, Navigation, Train, Plane, Bus, Car, Ship,
|
|
Coffee, Ticket, Star, Heart, Camera, Flag, Lightbulb, AlertTriangle,
|
|
ShoppingBag, Bookmark, Hotel, Utensils, Users, Sailboat, CableCar, Bike, CarTaxiFront, Route, TramFront,
|
|
Wine, ParkingSquare, Fuel, Footprints, Mountain, Waves, Sun, Umbrella, Music, Landmark, Gift,
|
|
} from 'lucide-react'
|
|
|
|
export const RES_ICONS = { flight: Plane, hotel: Hotel, restaurant: Utensils, train: Train, car: Car, cruise: Ship, bus: Bus, ferry: Sailboat, cable_car: CableCar, bicycle: Bike, taxi: CarTaxiFront, transit: TramFront, transport_other: Route, event: Ticket, tour: Users, parking: ParkingSquare, other: FileText }
|
|
|
|
export const NOTE_ICONS = [
|
|
{ id: 'FileText', Icon: FileText },
|
|
{ id: 'Info', Icon: Info },
|
|
{ id: 'Clock', Icon: Clock },
|
|
{ id: 'MapPin', Icon: MapPin },
|
|
{ id: 'Navigation', Icon: Navigation },
|
|
{ id: 'Train', Icon: Train },
|
|
{ id: 'Plane', Icon: Plane },
|
|
{ id: 'Bus', Icon: Bus },
|
|
{ id: 'Car', Icon: Car },
|
|
{ id: 'Ship', Icon: Ship },
|
|
{ id: 'Coffee', Icon: Coffee },
|
|
{ id: 'Ticket', Icon: Ticket },
|
|
{ id: 'Star', Icon: Star },
|
|
{ id: 'Heart', Icon: Heart },
|
|
{ id: 'Camera', Icon: Camera },
|
|
{ id: 'Flag', Icon: Flag },
|
|
{ id: 'Lightbulb', Icon: Lightbulb },
|
|
{ id: 'AlertTriangle', Icon: AlertTriangle },
|
|
{ id: 'ShoppingBag', Icon: ShoppingBag },
|
|
{ id: 'Bookmark', Icon: Bookmark },
|
|
{ id: 'Utensils', Icon: Utensils },
|
|
{ id: 'Wine', Icon: Wine },
|
|
{ id: 'ParkingSquare', Icon: ParkingSquare },
|
|
{ id: 'Fuel', Icon: Fuel },
|
|
{ id: 'Footprints', Icon: Footprints },
|
|
{ id: 'Mountain', Icon: Mountain },
|
|
{ id: 'Waves', Icon: Waves },
|
|
{ id: 'Sun', Icon: Sun },
|
|
{ id: 'Umbrella', Icon: Umbrella },
|
|
{ id: 'Music', Icon: Music },
|
|
{ id: 'Landmark', Icon: Landmark },
|
|
{ id: 'Gift', Icon: Gift },
|
|
]
|
|
const NOTE_ICON_MAP = Object.fromEntries(NOTE_ICONS.map(({ id, Icon }) => [id, Icon]))
|
|
export function getNoteIcon(iconId) { return NOTE_ICON_MAP[iconId] || FileText }
|
|
|
|
/** The most a day note's detail line may hold, in the desktop dialog and the phone sheet alike. */
|
|
export const DAY_NOTE_DETAIL_MAX = 2000
|
|
|
|
/** Whether a detail line is close enough to the limit for the counter to warn. */
|
|
export const dayNoteNearLimit = (length: number): boolean => length >= DAY_NOTE_DETAIL_MAX - 100
|
|
|
|
export const TYPE_ICONS = {
|
|
flight: '✈️', hotel: '🏨', restaurant: '🍽️', train: '🚆',
|
|
car: '🚗', cruise: '🚢', bus: '🚌', ferry: '⛴️', cable_car: '🚡', bicycle: '🚲', taxi: '🚕',
|
|
transport_other: '🧭', event: '🎫', parking: '🅿️', other: '📋',
|
|
}
|
|
|
|
export const TRANSPORT_DETAIL_COLORS = { flight: '#3b82f6', train: '#06b6d4', bus: '#059669', ferry: '#0d9488', cable_car: '#dc2626', bicycle: '#84cc16', taxi: '#ca8a04', car: '#6b7280', cruise: '#0ea5e9', transit: '#7c3aed', transport_other: '#6b7280' }
|