Initial commit: Kottgard production website code
This commit is contained in:
@@ -0,0 +1,179 @@
|
||||
/**
|
||||
* 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<User>) => void;
|
||||
updateProfile: (data: Partial<User>) => 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<AuthState>()(
|
||||
// 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: );
|
||||
);
|
||||
Reference in New Issue
Block a user