feat: auto-select active or next trip by date
This commit is contained in:
@@ -13,7 +13,7 @@ import ItemsTab from './tabs/ItemsTab';
|
|||||||
import CheckupTab from './tabs/CheckupTab';
|
import CheckupTab from './tabs/CheckupTab';
|
||||||
import HistoryTab from './tabs/HistoryTab';
|
import HistoryTab from './tabs/HistoryTab';
|
||||||
import { emptyData, STORAGE_KEY } from './constants';
|
import { emptyData, STORAGE_KEY } from './constants';
|
||||||
import { findActiveTripId, makeId, parseYMD, todayYMD } from './utils/date';
|
import { findBestTripId, makeId, parseYMD, todayYMD } from './utils/date';
|
||||||
import { styles } from './styles';
|
import { styles } from './styles';
|
||||||
|
|
||||||
const emptyTripForm = () => ({
|
const emptyTripForm = () => ({
|
||||||
@@ -148,8 +148,8 @@ export default function AppRoot() {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const activeTripId = findActiveTripId(data.trips);
|
const bestTripId = findBestTripId(data.trips);
|
||||||
setSelectedTripId(activeTripId || data.trips[0].id);
|
setSelectedTripId(bestTripId || data.trips[0].id);
|
||||||
}, [data.trips, selectedTripId, loaded]);
|
}, [data.trips, selectedTripId, loaded]);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
|||||||
@@ -23,3 +23,34 @@ export function findActiveTripId(trips) {
|
|||||||
});
|
});
|
||||||
return active?.id || null;
|
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