Add shahikitchen v1.0 website code from zip
This commit is contained in:
@@ -0,0 +1,81 @@
|
||||
/**
|
||||
* ANNOTATED COPY — every line explained
|
||||
* Source: src/store/wishlist.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 { Product } from '@/types';
|
||||
// (blank line — separates logical blocks for readability)
|
||||
// TypeScript interface — contract for object properties and methods
|
||||
interface WishlistState {
|
||||
// Line 6: items: Product[];
|
||||
items: Product[];
|
||||
// Line 7: addItem: (product: Product) => void;
|
||||
addItem: (product: Product) => void;
|
||||
// Line 8: removeItem: (productId: string) => void;
|
||||
removeItem: (productId: string) => void;
|
||||
// Line 9: isInWishlist: (productId: string) => boolean;
|
||||
isInWishlist: (productId: string) => boolean;
|
||||
// Line 10: toggleItem: (product: Product) => void;
|
||||
toggleItem: (product: Product) => void;
|
||||
// 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 useWishlistStore = create<WishlistState>()(
|
||||
// Zustand persist — save store to localStorage between visits
|
||||
persist(
|
||||
// Line 15: (set, get) => ({
|
||||
(set, get) => ({
|
||||
// Property or array item — trailing comma allowed in TypeScript
|
||||
items: [],
|
||||
// (blank line — separates logical blocks for readability)
|
||||
// Line 18: addItem: (product) => {
|
||||
addItem: (product) => {
|
||||
// Conditional branch — different behavior based on runtime value
|
||||
if (!get().isInWishlist(product.id)) {
|
||||
// Line 20: set({ items: [...get().items, product] });
|
||||
set({ items: [...get().items, product] });
|
||||
// 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 24: removeItem: (productId) => {
|
||||
removeItem: (productId) => {
|
||||
// Array.filter — keep items matching condition (search, category)
|
||||
set({ items: get().items.filter((p) => p.id !== productId) });
|
||||
// Closing brace — end of block (function, if, object, JSX)
|
||||
},
|
||||
// (blank line — separates logical blocks for readability)
|
||||
// Line 28: isInWishlist: (productId) =>
|
||||
isInWishlist: (productId) =>
|
||||
// Property or array item — trailing comma allowed in TypeScript
|
||||
get().items.some((p) => p.id === productId),
|
||||
// (blank line — separates logical blocks for readability)
|
||||
// Line 31: toggleItem: (product) => {
|
||||
toggleItem: (product) => {
|
||||
// Conditional branch — different behavior based on runtime value
|
||||
if (get().isInWishlist(product.id)) {
|
||||
// Line 33: get().removeItem(product.id);
|
||||
get().removeItem(product.id);
|
||||
// Closing brace — end of block (function, if, object, JSX)
|
||||
} else {
|
||||
// Line 35: get().addItem(product);
|
||||
get().addItem(product);
|
||||
// Closing brace — end of block (function, if, object, JSX)
|
||||
}
|
||||
// Closing brace — end of block (function, if, object, JSX)
|
||||
},
|
||||
// Closing brace — end of block (function, if, object, JSX)
|
||||
}),
|
||||
// Line 39: { name: 'kott-gard-wishlist' }
|
||||
{ name: 'kott-gard-wishlist' }
|
||||
// Line 40: )
|
||||
)
|
||||
// Line 41: );
|
||||
);
|
||||
Reference in New Issue
Block a user