20159262c1
- 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
78 lines
2.8 KiB
TypeScript
78 lines
2.8 KiB
TypeScript
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);
|
|
}
|