Ship Expo Router screens, seeded stores, and polished UX so auth, shop, checkout, prescriptions, loyalty, family, and account processes work end-to-end offline. Co-authored-by: Cursor <cursoragent@cursor.com>
68 lines
1.9 KiB
TypeScript
68 lines
1.9 KiB
TypeScript
import AsyncStorage from "@react-native-async-storage/async-storage";
|
|
import { create } from "zustand";
|
|
import { createJSONStorage, persist } from "zustand/middleware";
|
|
import { seedFamily } from "@/lib/data/seed";
|
|
|
|
export type FamilyMember = {
|
|
id: string;
|
|
name: string;
|
|
relationship: "spouse" | "child" | "parent" | "other";
|
|
phone?: string;
|
|
status: "pending" | "accepted";
|
|
};
|
|
|
|
type FamilyState = {
|
|
members: FamilyMember[];
|
|
activeMemberId: string | null;
|
|
inviteCode: string;
|
|
addMember: (m: Omit<FamilyMember, "id" | "status">) => void;
|
|
acceptInvite: (id: string) => void;
|
|
removeMember: (id: string) => void;
|
|
setActiveMember: (id: string | null) => void;
|
|
};
|
|
|
|
export const useFamilyStore = create<FamilyState>()(
|
|
persist(
|
|
(set, get) => ({
|
|
members: seedFamily,
|
|
activeMemberId: "fam_demo_sara",
|
|
inviteCode: "FAM-GISHEN",
|
|
addMember: (m) =>
|
|
set({
|
|
members: [
|
|
{
|
|
...m,
|
|
id: `fam_${Date.now()}`,
|
|
status: "pending",
|
|
},
|
|
...get().members,
|
|
],
|
|
}),
|
|
acceptInvite: (id) =>
|
|
set({
|
|
members: get().members.map((m) =>
|
|
m.id === id ? { ...m, status: "accepted" } : m
|
|
),
|
|
}),
|
|
removeMember: (id) =>
|
|
set({
|
|
members: get().members.filter((m) => m.id !== id),
|
|
activeMemberId:
|
|
get().activeMemberId === id ? null : get().activeMemberId,
|
|
}),
|
|
setActiveMember: (id) => set({ activeMemberId: id }),
|
|
}),
|
|
{
|
|
name: "gishen-family",
|
|
storage: createJSONStorage(() => AsyncStorage),
|
|
version: 2,
|
|
migrate: (persisted: unknown) => {
|
|
const state = (persisted ?? {}) as Partial<FamilyState>;
|
|
return !state.members?.length
|
|
? { ...state, members: seedFamily, activeMemberId: "fam_demo_sara" }
|
|
: state;
|
|
},
|
|
}
|
|
)
|
|
);
|