/** * ANNOTATED COPY — every line explained * Source: src/store/auth.ts * NOT used by the app — read this to learn how the real file works */ // Zustand — simple global state store (cart, auth, locale) import { create } from 'zustand'; // Zustand — simple global state store (cart, auth, locale) import { persist } from 'zustand/middleware'; // Import project module (@/ alias = src/ folder in tsconfig) import { Address, Order, User } from '@/types'; // Import project module (@/ alias = src/ folder in tsconfig) import { DEMO_EMAIL } from '@/lib/constants'; // Import project module (@/ alias = src/ folder in tsconfig) import { DEMO_ORDERS } from '@/lib/demo-orders'; // (blank line — separates logical blocks for readability) // TypeScript interface — contract for object properties and methods interface AuthState { // Line 8: user: User | null; user: User | null; // Line 9: orders: Order[]; orders: Order[]; // Line 10: isAuthenticated: boolean; isAuthenticated: boolean; // Line 11: login: (email: string, password: string) => boolean; login: (email: string, password: string) => boolean; // Line 12: register: (data: { register: (data: { // Line 13: name: string; name: string; // Line 14: email: string; email: string; // Line 15: password: string; password: string; // Line 16: phone: string; phone: string; // Line 17: address: Address; address: Address; // Closing brace — end of block (function, if, object, JSX) }) => boolean; // Line 19: logout: () => void; logout: () => void; // Line 20: updateProfile: (data: Partial) => void; updateProfile: (data: Partial) => void; // Line 21: addOrder: (order: Order) => void; addOrder: (order: Order) => void; // Closing brace — end of block (function, if, object, JSX) } // (blank line — separates logical blocks for readability) // Line 24: const DEMO_USER: User = { const DEMO_USER: User = { // Property or array item — trailing comma allowed in TypeScript id: 'demo-1', // Property or array item — trailing comma allowed in TypeScript name: 'Ahmed Khan', // Property or array item — trailing comma allowed in TypeScript email: DEMO_EMAIL, // Property or array item — trailing comma allowed in TypeScript phone: '+46 72 585 50 50', // Line 29: address: { address: { // Property or array item — trailing comma allowed in TypeScript street: 'Tingvallavägen 11', // Property or array item — trailing comma allowed in TypeScript city: 'Märsta', // Property or array item — trailing comma allowed in TypeScript state: 'Stockholm', // Property or array item — trailing comma allowed in TypeScript zip: '195 31', // Closing brace — end of block (function, if, object, JSX) }, // Property or array item — trailing comma allowed in TypeScript createdAt: '2025-03-15T10:00:00.000Z', // Closing brace — end of block (function, if, object, JSX) }; // (blank line — separates logical blocks for readability) // Named export constant — shared config/data imported elsewhere export const useAuthStore = create()( // Zustand persist — save store to localStorage between visits persist( // Line 40: (set, get) => ({ (set, get) => ({ // Property or array item — trailing comma allowed in TypeScript user: null, // Property or array item — trailing comma allowed in TypeScript orders: [], // Property or array item — trailing comma allowed in TypeScript isAuthenticated: false, // (blank line — separates logical blocks for readability) // Line 45: login: (email, password) => { login: (email, password) => { // Conditional branch — different behavior based on runtime value if (email === DEMO_EMAIL && password === 'demo123') { // Line 47: const existingOrders = get().orders; const existingOrders = get().orders; // Line 48: set({ set({ // Property or array item — trailing comma allowed in TypeScript user: DEMO_USER, // Property or array item — trailing comma allowed in TypeScript isAuthenticated: true, // Property or array item — trailing comma allowed in TypeScript orders: existingOrders.length > 0 ? existingOrders : DEMO_ORDERS, // Closing brace — end of block (function, if, object, JSX) }); // Return value from function return true; // Closing brace — end of block (function, if, object, JSX) } // Line 55: const stored = get().user; const stored = get().user; // Conditional branch — different behavior based on runtime value if (stored && stored.email === email) { // Line 57: set({ isAuthenticated: true }); set({ isAuthenticated: true }); // Return value from function return true; // Closing brace — end of block (function, if, object, JSX) } // Return value from function return false; // Closing brace — end of block (function, if, object, JSX) }, // (blank line — separates logical blocks for readability) // Line 63: register: (data) => { register: (data) => { // Line 64: const user: User = { const user: User = { // Property or array item — trailing comma allowed in TypeScript id: `user-${Date.now()}`, // Property or array item — trailing comma allowed in TypeScript name: data.name, // Property or array item — trailing comma allowed in TypeScript email: data.email, // Property or array item — trailing comma allowed in TypeScript phone: data.phone, // Property or array item — trailing comma allowed in TypeScript address: data.address, // Property or array item — trailing comma allowed in TypeScript createdAt: new Date().toISOString(), // Closing brace — end of block (function, if, object, JSX) }; // Line 72: set({ user, isAuthenticated: true }); set({ user, isAuthenticated: true }); // Return value from function return true; // Closing brace — end of block (function, if, object, JSX) }, // (blank line — separates logical blocks for readability) // Property or array item — trailing comma allowed in TypeScript logout: () => set({ isAuthenticated: false }), // (blank line — separates logical blocks for readability) // Line 78: updateProfile: (data) => { updateProfile: (data) => { // Line 79: const current = get().user; const current = get().user; // Conditional branch — different behavior based on runtime value if (current) { // Line 81: set({ user: { ...current, ...data } }); set({ user: { ...current, ...data } }); // Closing brace — end of block (function, if, object, JSX) } // Closing brace — end of block (function, if, object, JSX) }, // (blank line — separates logical blocks for readability) // Line 85: addOrder: (order) => { addOrder: (order) => { // Line 86: set({ orders: [order, ...get().orders] }); set({ orders: [order, ...get().orders] }); // Closing brace — end of block (function, if, object, JSX) }, // Closing brace — end of block (function, if, object, JSX) }), // Line 89: { name: 'kott-gard-auth' } { name: 'kott-gard-auth' } // Line 90: ) ) // Line 91: ); );