feat: auto-select active or next trip by date
This commit is contained in:
@@ -23,3 +23,34 @@ export function findActiveTripId(trips) {
|
||||
});
|
||||
return active?.id || null;
|
||||
}
|
||||
|
||||
export function findNextTripId(trips) {
|
||||
const today = parseYMD(todayYMD());
|
||||
if (!today) return null;
|
||||
|
||||
const next = trips
|
||||
.map((trip) => ({ id: trip.id, start: parseYMD(trip.startDate) }))
|
||||
.filter((trip) => !!trip.start && trip.start >= today)
|
||||
.sort((a, b) => a.start - b.start)[0];
|
||||
|
||||
return next?.id || null;
|
||||
}
|
||||
|
||||
export function findBestTripId(trips) {
|
||||
const activeTripId = findActiveTripId(trips);
|
||||
if (activeTripId) return activeTripId;
|
||||
|
||||
const nextTripId = findNextTripId(trips);
|
||||
if (nextTripId) return nextTripId;
|
||||
|
||||
const latestPast = trips
|
||||
.map((trip) => ({ id: trip.id, end: parseYMD(trip.endDate), start: parseYMD(trip.startDate) }))
|
||||
.filter((trip) => !!trip.end || !!trip.start)
|
||||
.sort((a, b) => {
|
||||
const aTime = (a.end || a.start).getTime();
|
||||
const bTime = (b.end || b.start).getTime();
|
||||
return bTime - aTime;
|
||||
})[0];
|
||||
|
||||
return latestPast?.id || null;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user