Add getLeaveStatus utility and update project status

- Introduce `getLeaveStatus` function in `packages/core/src/status-utils.ts` to determine leave-by status based on
  journey data
- Mark Phase 1 mobile app tasks as complete in `CHECKLIST.md`
- Add mobile workspace configurations and npm scripts
This commit is contained in:
2026-05-10 22:14:41 +02:00
parent d08afc1dcb
commit 20159262c1
56 changed files with 8212 additions and 150 deletions
+77
View File
@@ -0,0 +1,77 @@
import AsyncStorage from '@react-native-async-storage/async-storage';
import type { Event, Station, ReminderSettings } from '@timetoleave/core';
// ── Keys ────────────────────────────────────────────
const EVENTS_KEY = '@timetoleave_events';
const ORIGIN_KEY = '@timetoleave_origin';
const NOTIFICATIONS_KEY = '@timetoleave_notifications';
// ── Default notification settings ─────────────────────
const DEFAULT_NOTIFICATION_SETTINGS: ReminderSettings = {
bufferMinutes: 30,
enabled: true,
};
// ── Helpers ───────────────────────────────────────────
function reviveDates(json: string): Event[] {
try {
const parsed = JSON.parse(json) as Array<Event & { eventTime: string }>;
return parsed.map((e) => ({ ...e, eventTime: new Date(e.eventTime) }));
} catch {
return [];
}
}
// ── Events ────────────────────────────────────────────
export async function loadEvents(): Promise<Event[]> {
const json = await AsyncStorage.getItem(EVENTS_KEY);
return json ? reviveDates(json) : [];
}
export async function saveEvents(events: Event[]): Promise<void> {
const json = JSON.stringify(events);
await AsyncStorage.setItem(EVENTS_KEY, json);
}
export async function addEvent(event: Event): Promise<void> {
const events = await loadEvents();
events.push(event);
await saveEvents(events);
}
export async function removeEvent(id: string, onDone?: () => void): Promise<void> {
const events = await loadEvents();
const filtered = events.filter((e) => e.id !== id);
await saveEvents(filtered);
onDone?.();
}
// ── Origin Station ────────────────────────────────────
export async function loadOriginStation(): Promise<Station | null> {
const json = await AsyncStorage.getItem(ORIGIN_KEY);
return json ? JSON.parse(json) : null;
}
export async function saveOriginStation(station: Station): Promise<void> {
const json = JSON.stringify(station);
await AsyncStorage.setItem(ORIGIN_KEY, json);
}
// ── Notification Settings ─────────────────────────────
export async function loadNotificationSettings(): Promise<ReminderSettings> {
const json = await AsyncStorage.getItem(NOTIFICATIONS_KEY);
return json ? JSON.parse(json) : DEFAULT_NOTIFICATION_SETTINGS;
}
export async function saveNotificationSettings(
settings: ReminderSettings,
): Promise<void> {
const json = JSON.stringify(settings);
await AsyncStorage.setItem(NOTIFICATIONS_KEY, json);
}