seahaven-ap/src/mocks/users.ts
Adam Moussa fd903c6367
feat(settings): add settings and approvals POC shells (AP-7) (#8)
* feat(settings): add settings and approvals POC shells (AP-7)

Add app shell nav plus mock settings CRUD routes and an approvals inbox so the POC demo path works without an API.

* fix(build): generate router types before tsc

CI failed because src/router.ts is gitignored and tsc ran before Vite created it.
2026-08-10 22:00:51 +00:00

65 lines
1.4 KiB
TypeScript

import { areMocksEnabled } from "@/mocks/env";
export type MockUserRole = "ap_operator" | "approver" | "admin";
export type MockUser = {
id: string;
name: string;
email: string;
role: MockUserRole;
};
const seedUsers: MockUser[] = [
{
id: "user-1",
name: "Alex Rivera",
email: "alex.rivera@seahaven.example",
role: "ap_operator",
},
{
id: "user-2",
name: "Jordan Lee",
email: "jordan.lee@seahaven.example",
role: "approver",
},
{
id: "user-3",
name: "Sam Patel",
email: "sam.patel@seahaven.example",
role: "approver",
},
{
id: "user-4",
name: "Casey Morgan",
email: "casey.morgan@seahaven.example",
role: "admin",
},
];
let userStore: MockUser[] = seedUsers.map((user) => ({ ...user }));
export function getMockUsers(): MockUser[] {
if (!areMocksEnabled()) {
return [];
}
return userStore.map((user) => ({ ...user }));
}
export function getMockUser(id: string): MockUser | undefined {
return getMockUsers().find((user) => user.id === id);
}
export function upsertMockUser(user: MockUser): MockUser {
const index = userStore.findIndex((row) => row.id === user.id);
const next = { ...user };
if (index === -1) {
userStore = [...userStore, next];
} else {
userStore = [...userStore.slice(0, index), next, ...userStore.slice(index + 1)];
}
return { ...next };
}
export function resetMockUsers(): void {
userStore = seedUsers.map((user) => ({ ...user }));
}