30 lines
981 B
TypeScript
30 lines
981 B
TypeScript
// Last-completed-review timestamp, local only — the review is a habit, not
|
|
// synced data.
|
|
import AsyncStorage from "@react-native-async-storage/async-storage";
|
|
import { useCallback, useEffect, useState } from "react";
|
|
|
|
const KEY = "review_last_v1";
|
|
|
|
export async function getLastReview(): Promise<string | null> {
|
|
return AsyncStorage.getItem(KEY);
|
|
}
|
|
|
|
export async function markReviewed(): Promise<void> {
|
|
await AsyncStorage.setItem(KEY, new Date().toISOString());
|
|
}
|
|
|
|
export function daysSince(iso: string | null): number | null {
|
|
if (!iso) return null;
|
|
return Math.floor((Date.now() - new Date(iso).getTime()) / 86_400_000);
|
|
}
|
|
|
|
/** [lastReviewIso, reload] — call reload on focus to pick up changes. */
|
|
export function useLastReview(): [string | null, () => void] {
|
|
const [last, setLast] = useState<string | null>(null);
|
|
const reload = useCallback(() => {
|
|
void getLastReview().then(setLast);
|
|
}, []);
|
|
useEffect(reload, [reload]);
|
|
return [last, reload];
|
|
}
|