From b921d73f7395b1ee15c14ec683fe3000ffb48f14 Mon Sep 17 00:00:00 2001 From: Dao Duc Date: Thu, 15 Jan 2026 17:30:04 +0700 Subject: [PATCH] update 15/01 --- public/images/404-page-1.png | Bin 0 -> 94179 bytes src/app/[slug]/page.tsx | 18 +- src/app/not-found.tsx | 19 +- src/components/home/Product/CategoryIcon.tsx | 34 +++ src/components/home/Product/index.tsx | 231 ++++++------------ .../{Category => featured-category}/index.tsx | 27 +- src/components/home/index.tsx | 2 +- src/components/other/Header/Cart.tsx | 70 +++--- src/components/other/Header/cart/index.tsx | 30 +++ src/components/shared/DealItem.tsx | 8 +- src/components/shared/ProductItem.tsx | 109 +++++++++ src/data/categories/index.tsx | 4 +- src/data/products/index.tsx | 12 +- src/hooks/useCart.ts | 104 ++++++-- src/hooks/useProductItem.ts | 28 +++ src/lib/slug/resolveArticlePage.ts | 7 +- src/lib/slug/resolveProductPage.ts | 6 +- src/lib/slug/slugMap.ts | 11 +- src/services/cart.ts | 145 +++++++++-- src/types/product.ts | 12 + 20 files changed, 618 insertions(+), 259 deletions(-) create mode 100644 public/images/404-page-1.png create mode 100644 src/components/home/Product/CategoryIcon.tsx rename src/components/home/{Category => featured-category}/index.tsx (59%) create mode 100644 src/components/other/Header/cart/index.tsx create mode 100644 src/components/shared/ProductItem.tsx create mode 100644 src/hooks/useProductItem.ts create mode 100644 src/types/product.ts diff --git a/public/images/404-page-1.png b/public/images/404-page-1.png new file mode 100644 index 0000000000000000000000000000000000000000..76b62b871c6cc965f7b49aaba00c85a9bdae1679 GIT binary patch literal 94179 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⪖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 literal 0 HcmV?d00001 diff --git a/src/app/[slug]/page.tsx b/src/app/[slug]/page.tsx index 351c6c8..86158bb 100644 --- a/src/app/[slug]/page.tsx +++ b/src/app/[slug]/page.tsx @@ -11,13 +11,18 @@ import ArticleHome from "@/components/article/home"; export default async function SlugPage({ params, }: { - params: { slug: string }; + params: Promise<{ slug: string }>; }) { - const { slug } = await params; - if (!slug) return notFound(); - + const { slug } = await params; + if (!slug) { + notFound(); + } + const result = findBySlug(slug); - if (!result) return notFound(); + + if (!result) { + notFound(); + } switch (result.type) { case "product_category": @@ -36,6 +41,7 @@ export default async function SlugPage({ return ; default: - return notFound(); + const _exhaustive: never = result; + notFound(); } } diff --git a/src/app/not-found.tsx b/src/app/not-found.tsx index 107ffd4..509490e 100644 --- a/src/app/not-found.tsx +++ b/src/app/not-found.tsx @@ -1,8 +1,21 @@ +import Link from "next/link" + export default function NotFound() { return ( -
-

404

-

Trang không tồn tại

+
+
+
+ Không tìm thấy +

Không Tìm Thấy

+

+ Xin lỗi, nhưng trang bạn yêu cầu không tìm thấy hoặc đã bị xóa bỏ. Vui lòng thử lại. +

+ + ← Quay lại trang chủ + +
+
+ ); } diff --git a/src/components/home/Product/CategoryIcon.tsx b/src/components/home/Product/CategoryIcon.tsx new file mode 100644 index 0000000..5590b60 --- /dev/null +++ b/src/components/home/Product/CategoryIcon.tsx @@ -0,0 +1,34 @@ +export default function CategoryIcon({item}:any) { + return( + <> + {item == 1 && +

+ + Trả góp 0% +

+ } + + + {item == 91 || item == 27 && +

+ + Miễn phí giao hàng +

+ } + + {item == 103 && +

+ + Giao hàng toàn quốc +

+ } + + {item == 92 && +

+ + Bảo hành tận nơi +

+ } + + ) +} \ No newline at end of file diff --git a/src/components/home/Product/index.tsx b/src/components/home/Product/index.tsx index 8c13d40..886233f 100644 --- a/src/components/home/Product/index.tsx +++ b/src/components/home/Product/index.tsx @@ -1,169 +1,86 @@ 'use client'; import { Swiper, SwiperSlide } from 'swiper/react'; import { Navigation, Pagination, Autoplay } from 'swiper/modules'; +import { categories } from "@/data/categories" +import { productList } from '@/data/products'; +import CategoryIcon from "./CategoryIcon" +import ProductItem from "@/components/shared/ProductItem" export default function ProductCategories() { + + const { all_category } = categories.product; + const featuredCategories = all_category.filter((item: any) => item.is_featured === 1); + return ( -
-
- - - -
+ featuredCategories.map((item: any) => { -
-
-
-

PC Render, Edit Video

+ const categoryProducts = productList.filter( + (product: any) => product.id === item.id + ); + + return( +
+ +
+
+
+

{item.title}

-

- - Trả góp 0% -

- -

- - Miễn phí giao hàng -

- -

- - Giao hàng toàn quốc -

- -

- - Bảo hành tận nơi -

-
- - -
- -
-
-
-
-
- - - -
- - - - -
-
- 52.000.000 đ - -10% -

22.000.000 đ

-
- - -

Lorem ipsum dolor sit, amet consectetur adipisicing elit. Suscipit quos obcaecati totam, atque vel

-
- -
-
-

- - Sẵn hàng -

- - {/*

- - Liên hệ -

*/} - -

- - Quà tặng -

-
- - -
-
- -
-
-

- [Tặng bàn phím] HHPC ULTRA 7 265K | 32GB DDR5 | NVIDIA RTX 3060 12GB -

- -
-
-

- Giá bán: - 48.990.000 đ - 52.000.000 đ - -6% -

- -

- Bảo hành: - Theo từng linh kiện -

-
- -
-

- - Thông số sản phẩm -

- -
-
CPU: INTEL CORE i5 13400F up 4.6GHz | 10 CORE | 16 THREAD
-
RAM: DDR4 16GB (1x16G) 3200 MHz
-
VGA: NVIDIA RTX 3060 12GB GDDR6
-
-
- -
-

- - Khuyến mại hấp dẫn -

- -
-

⭐ Bảo Hành Tại Nơi Sử Dụng (Áp Dụng Nội Thành Hà Nội và Hồ Chí Minh)

-

⭐ Bảo Hành Siêu Tốc 1 Đổi 1 Trong 24h

⭐ Miễn Phí 100% Vận Chuyển Toàn Quốc

-
-
- -
-
-
+
-
-

[Tặng bàn phím] HHPC ULTRA 7 265K | 32GB DDR5 | NVIDIA RTX 3060 12GB

Giá bán:48.990.000 đ52.000.000 đ-6%

Bảo hành:Theo từng linh kiện

Thông số sản phẩm

CPU: INTEL CORE i5 13400F up 4.6GHz | 10 CORE | 16 THREAD
RAM: DDR4 16GB (1x16G) 3200 MHz
VGA: NVIDIA RTX 3060 12GB GDDR6

[Tặng bàn phím] HHPC ULTRA 7 265K | 32GB DDR5 | NVIDIA RTX 3060 12GB

Giá bán:48.990.000 đ52.000.000 đ-6%

Bảo hành:Theo từng linh kiện

Thông số sản phẩm

CPU: INTEL CORE i5 13400F up 4.6GHz | 10 CORE | 16 THREAD
RAM: DDR4 16GB (1x16G) 3200 MHz
VGA: NVIDIA RTX 3060 12GB GDDR6

Khuyến mại hấp dẫn

⭐ Bảo Hành Tại Nơi Sử Dụng (Áp Dụng Nội Thành Hà Nội và Hồ Chí Minh)

⭐ Bảo Hành Siêu Tốc 1 Đổi 1 Trong 24h

⭐ Miễn Phí 100% Vận Chuyển Toàn Quốc

[Tặng bàn phím] HHPC ULTRA 7 265K | 32GB DDR5 | NVIDIA RTX 3060 12GB

Giá bán:48.990.000 đ52.000.000 đ-6%

Bảo hành:Theo từng linh kiện

[Tặng bàn phím] HHPC ULTRA 7 265K | 32GB DDR5 | NVIDIA RTX 3060 12GB

Giá bán:48.990.000 đ

Bảo hành:Theo từng linh kiện

[Tặng bàn phím] HHPC ULTRA 7 265K | 32GB DDR5 | NVIDIA RTX 3060 12GB

Giá bán:48.990.000 đ52.000.000 đ-6%

Bảo hành:Theo từng linh kiện

Thông số sản phẩm

CPU: INTEL CORE i5 13400F up 4.6GHz | 10 CORE | 16 THREAD
RAM: DDR4 16GB (1x16G) 3200 MHz
VGA: NVIDIA RTX 3060 12GB GDDR6

Khuyến mại hấp dẫn

⭐ Bảo Hành Tại Nơi Sử Dụng (Áp Dụng Nội Thành Hà Nội và Hồ Chí Minh)

⭐ Bảo Hành Siêu Tốc 1 Đổi 1 Trong 24h

⭐ Miễn Phí 100% Vận Chuyển Toàn Quốc

[Tặng bàn phím] HHPC ULTRA 7 265K | 32GB DDR5 | NVIDIA RTX 3060 12GB

Giá bán:48.990.000 đ52.000.000 đ-6%

Bảo hành:Theo từng linh kiện

Thông số sản phẩm

CPU: INTEL CORE i5 13400F up 4.6GHz | 10 CORE | 16 THREAD
RAM: DDR4 16GB (1x16G) 3200 MHz
VGA: NVIDIA RTX 3060 12GB GDDR6

Khuyến mại hấp dẫn

⭐ Bảo Hành Tại Nơi Sử Dụng (Áp Dụng Nội Thành Hà Nội và Hồ Chí Minh)

⭐ Bảo Hành Siêu Tốc 1 Đổi 1 Trong 24h

⭐ Miễn Phí 100% Vận Chuyển Toàn Quốc

-
+
+ {item.children.length > 0 && + item.children + .slice(0, 4) + .map((child: any) => + {child.title} + ) + } + Xem tất cả +
+
+ +
+
+
+
+
+ + 5} + autoplay={{ + delay: 3000, + disableOnInteraction: false, + }} + navigation={{ + prevEl: '.custom-nav .swiper-button-prev', + nextEl: '.custom-nav .swiper-button-next', + }} + breakpoints={{ + 1600: { + slidesPerView: 6, + }, + }} + > + {categoryProducts[0].list.map( (item:any) => + + + + )} + +
+
-
-
+ ) + + }) ) -} \ No newline at end of file +} + + diff --git a/src/components/home/Category/index.tsx b/src/components/home/featured-category/index.tsx similarity index 59% rename from src/components/home/Category/index.tsx rename to src/components/home/featured-category/index.tsx index 33b9e63..698b06d 100644 --- a/src/components/home/Category/index.tsx +++ b/src/components/home/featured-category/index.tsx @@ -2,20 +2,39 @@ import { categories } from "@/data/categories"; export default function FeaturedProductCategories() { const {all_category} = categories.product; + + const getAllCategoriesFlat = (cats: any[]): any[] => { + const result: any[] = []; + + cats.forEach((cat) => { + result.push(cat); + + if (cat.children && cat.children.length > 0) { + result.push(...getAllCategoriesFlat(cat.children)); + } + }); + + return result; + }; + + const allCategoriesFlat = getAllCategoriesFlat(all_category); + // Lọc các danh mục nổi bật + const featuredCategories = allCategoriesFlat.filter( + (item: any) => item.is_featured === 1 + ); return ( <> - {all_category && + {featuredCategories.length &&

Danh mục nổi bật

- {all_category - .filter( (item:any) => item.is_featured === 1 ) + {featuredCategories .map( (item:any) => diff --git a/src/components/home/index.tsx b/src/components/home/index.tsx index e13bc53..4520860 100644 --- a/src/components/home/index.tsx +++ b/src/components/home/index.tsx @@ -1,6 +1,6 @@ import Slider from "./slider"; import Deal from "./deal"; -import FeaturedProductCategories from "./category"; +import FeaturedProductCategories from "./featured-category"; import ProductCategories from "./product"; import Article from "./article"; diff --git a/src/components/other/Header/Cart.tsx b/src/components/other/Header/Cart.tsx index 4e2d2c4..430c8bd 100644 --- a/src/components/other/Header/Cart.tsx +++ b/src/components/other/Header/Cart.tsx @@ -1,18 +1,47 @@ import Link from "next/link"; import { useCart } from "@/hooks/useCart"; -import { getAllProducts, formatPrice } from "@/lib/utils" +import { getAllProducts } from "@/lib/utils" +import CartItem from "@/components/other/header/cart/index" export default function Cart() { + const { + cartItems, + cartCount, + totalItems, + loading, + } = useCart(); - const { cartCount, cartIds, loading } = useCart(); - const allProducts = getAllProducts(); + const allProducts = getAllProducts(); + + // Lọc sản phẩm có trong giỏ hàng với quantity + const productsInCart = cartItems + .map(cartItem => { + const product = allProducts.find(p => p.id === cartItem.id); + if (product) { + return { + ...product, + cartQuantity: cartItem.cartQuantity, + }; + } + return null; + }) + .filter(item => item !== null); + + + // Tính tổng tiền + const totalPrice = productsInCart.reduce((sum, item) => { + if (item && item.price) { + return sum + (item.price * item.quantity); + } + return sum; + }, 0); - const productsInCart = allProducts.filter(p => cartIds.includes(p.id) ); - console.log(productsInCart); + const hasProducts = cartCount > 0; + return ( <> -
+
{cartCount} @@ -20,39 +49,24 @@ export default function Cart() { Giỏ
Hàng
- {productsInCart.length > 0 && + {!loading && hasProducts &&
+

+ 1 số sp thêm từ DEAL sẽ không có trong DB tĩnh nên không hiển thị +

{productsInCart.map((item:any) => -
- - image - - -
- - {item.productName} - - -

- x1 - - {item.price > 0 ? formatPrice(item.price) +'đ' : 'Liên hệ'} - -

-
-
+ )} -

1 số sp không có trong DB tĩnh

Tổng tiền hàng - ({cartCount} sản phẩm): - 10.770.000đ + ({totalItems} sản phẩm): + {totalPrice}đ

THANH TOÁN NGAY
diff --git a/src/components/other/Header/cart/index.tsx b/src/components/other/Header/cart/index.tsx new file mode 100644 index 0000000..83470e3 --- /dev/null +++ b/src/components/other/Header/cart/index.tsx @@ -0,0 +1,30 @@ +import Link from "next/link"; +import { formatPrice } from "@/lib/utils"; + +export default function CartItem({item}:any) { + return( +
+ + {item.productName} + + +
+ + {item.productName} + + +

+ x{item.cartQuantity} + + {item.price > 0 ? formatPrice(item.price) +'đ' : 'Liên hệ'} + +

+
+
+ ) +} \ No newline at end of file diff --git a/src/components/shared/DealItem.tsx b/src/components/shared/DealItem.tsx index 28fac7f..1cba834 100644 --- a/src/components/shared/DealItem.tsx +++ b/src/components/shared/DealItem.tsx @@ -26,6 +26,7 @@ export default function DealItem( {item} : any) { -{discount}% ) : null; + const checkIncart = isInCart(productInfo.id); return (
@@ -51,9 +52,12 @@ export default function DealItem( {item} : any) { {discountView}
-
diff --git a/src/components/shared/ProductItem.tsx b/src/components/shared/ProductItem.tsx new file mode 100644 index 0000000..54ebc95 --- /dev/null +++ b/src/components/shared/ProductItem.tsx @@ -0,0 +1,109 @@ +'use client'; +import Link from "next/link"; +import { formatPrice } from "@/lib/utils"; + +export default function ProductItem({item}:any){ + console.log('ProductItem: ', item) + return ( +
+ + {item.productName} + + +
+
+ 52.000.000 đ + -10% +

22.000.000 đ

+
+ + +

{item.productName}

+ + +
+
+

+ + Sẵn hàng +

+ + {/*

+ + Liên hệ +

*/} + +

+ + Quà tặng +

+
+ + + +
+
+ +
+
+

+ [Tặng bàn phím] HHPC ULTRA 7 265K | 32GB DDR5 | NVIDIA RTX 3060 12GB +

+ +
+
+

+ Giá bán: + 48.990.000 đ + 52.000.000 đ + -6% +

+ +

+ Bảo hành: + Theo từng linh kiện +

+
+ +
+

+ + Thông số sản phẩm +

+ +
+
CPU: INTEL CORE i5 13400F up 4.6GHz | 10 CORE | 16 THREAD
+
RAM: DDR4 16GB (1x16G) 3200 MHz
+
VGA: NVIDIA RTX 3060 12GB GDDR6
+
+
+ +
+

+ + Khuyến mại hấp dẫn +

+ +
+

⭐ Bảo Hành Tại Nơi Sử Dụng (Áp Dụng Nội Thành Hà Nội và Hồ Chí Minh)

+

⭐ Bảo Hành Siêu Tốc 1 Đổi 1 Trong 24h

⭐ Miễn Phí 100% Vận Chuyển Toàn Quốc

+
+
+ +
+
+
+
+ ) +} \ No newline at end of file diff --git a/src/data/categories/index.tsx b/src/data/categories/index.tsx index 4a33f9d..4e66b66 100644 --- a/src/data/categories/index.tsx +++ b/src/data/categories/index.tsx @@ -478,7 +478,7 @@ export const categories = { id : 27, parentId : 0, isParent : 1, - is_featured : 1, + is_featured : 0, type: "product", title : 'PC Gaming, Học Tập', url : '/pc-gaming', @@ -518,7 +518,7 @@ export const categories = { { id : 93, parentId : 0, - isParent : 1, + isParent : 1, is_featured : 0, type: "product", title : 'PC Văn Phòng', diff --git a/src/data/products/index.tsx b/src/data/products/index.tsx index 5af121f..5684093 100644 --- a/src/data/products/index.tsx +++ b/src/data/products/index.tsx @@ -1288,8 +1288,8 @@ export const productList = [ "total": 7, "list": [ { - "id": 5965, - "productId": 5965, + "id": 6667, + "productId": 6667, "priceUnit": "chi\u1ebfc", "marketPrice": 11000000, "price": 10600000, @@ -1407,8 +1407,8 @@ export const productList = [ ] }, { - "id": 5210, - "productId": 5210, + "id": 6111, + "productId": 6111, "priceUnit": "chi\u1ebfc", "marketPrice": 23000000, "price": 21810000, @@ -2095,8 +2095,8 @@ export const productList = [ "total": 10, "list": [ { - "id": 5401, - "productId": 5401, + "id": 6110, + "productId": 6110, "priceUnit": "chi\u1ebfc", "marketPrice": 0, "price": 12990000, diff --git a/src/hooks/useCart.ts b/src/hooks/useCart.ts index fc8a288..43b73fe 100644 --- a/src/hooks/useCart.ts +++ b/src/hooks/useCart.ts @@ -2,52 +2,120 @@ import { useEffect, useState, useCallback } from 'react'; import { - getCartProductIds, + getCartItems, addProductToCart, removeProductFromCart, clearCart, + increaseQuantity, + decreaseQuantity, + updateQuantity, + getProductQuantity, + isProductInCart, + CART_CHANGE_EVENT, + type CartItem, } from '../services/cart'; export function useCart() { - const [cartIds, setCartIds] = useState(null); + const [cartItems, setCartItems] = useState(null); // Load cart lần đầu useEffect(() => { - setCartIds(getCartProductIds()); + setCartItems(getCartItems()); + }, []); + + // Listen to cart changes from ANY source + useEffect(() => { + const handleCartChange = () => { + setCartItems(getCartItems()); + }; + + // Listen to custom event + window.addEventListener(CART_CHANGE_EVENT, handleCartChange); + + // Also listen to storage event (for changes from other tabs) + window.addEventListener('storage', (e) => { + if (e.key === 'cart_products') { + handleCartChange(); + } + }); + + return () => { + window.removeEventListener(CART_CHANGE_EVENT, handleCartChange); + window.removeEventListener('storage', handleCartChange); + }; }, []); const refresh = useCallback(() => { - setCartIds(getCartProductIds()); + setCartItems(getCartItems()); }, []); - const addToCart = useCallback((productId: number) => { - addProductToCart(productId); - refresh(); - }, [refresh]); + const addToCart = useCallback((productId: number, quantity: number = 1) => { + const result = addProductToCart(productId, quantity); + // Không cần refresh() nữa vì event listener sẽ tự động update + return result; + }, []); const removeFromCart = useCallback((productId: number) => { removeProductFromCart(productId); - refresh(); - }, [refresh]); + // Không cần refresh() + }, []); + + const increase = useCallback((productId: number, amount: number = 1) => { + const success = increaseQuantity(productId, amount); + // Không cần refresh() + return success; + }, []); + + const decrease = useCallback((productId: number, amount: number = 1) => { + const success = decreaseQuantity(productId, amount); + if (!success) { + console.log('Số lượng tối thiểu: 1'); + } + // Không cần refresh() + return success; + }, []); + + const updateQty = useCallback((productId: number, cartQuantity: number) => { + const success = updateQuantity(productId, cartQuantity); + if (!success) { + console.log('Số lượng phải lớn hơn hoặc bằng 1'); + } + // Không cần refresh() + return success; + }, []); const clear = useCallback(() => { clearCart(); - setCartIds([]); + // Không cần setCartItems([]) nữa, event sẽ tự động update }, []); const isInCart = useCallback( - (productId: number) => cartIds?.includes(productId) ?? false, - [cartIds] + (productId: number) => cartItems?.some(item => item.id === productId) ?? false, + [cartItems] ); - return { - cartIds: cartIds ?? [], - cartCount: cartIds?.length ?? 0, - loading: cartIds === null, + const getQuantity = useCallback( + (productId: number) => { + return cartItems?.find(item => item.id === productId)?.cartQuantity ?? 0; + }, + [cartItems] + ); + const totalItems = cartItems?.reduce((sum, item) => sum + item.cartQuantity, 0) ?? 0; + + return { + cartItems: cartItems ?? [], + cartCount: cartItems?.length ?? 0, + totalItems, + loading: cartItems === null, addToCart, removeFromCart, + increaseQuantity: increase, + decreaseQuantity: decrease, + updateQuantity: updateQty, clear, isInCart, + getQuantity, + refresh, }; -} +} \ No newline at end of file diff --git a/src/hooks/useProductItem.ts b/src/hooks/useProductItem.ts new file mode 100644 index 0000000..8089316 --- /dev/null +++ b/src/hooks/useProductItem.ts @@ -0,0 +1,28 @@ +import { calculateDiscount } from "../lib/utils"; +import type { ProductItemProps } from "../types/product" + +export function useDealItem(item: ProductItemProps) { + const productUrl = item.productUrl; + const productImage = item.productImage.large; + const productName = item.productName; + const price = Number(item.price); + const marketPrice = Number(item.marketPrice); + const discount = calculateDiscount(price, marketPrice); + const quantity = item.quantity; + const specialOffer = item.specialOffer.all?.[0]?.title ?? ''; + const warranty = item.warranty; + const productSummary= item.productSummary; + + return { + productUrl, + productImage, + productName, + quantity, + price, + marketPrice, + discount, + specialOffer, + warranty, + productSummary + }; +} diff --git a/src/lib/slug/resolveArticlePage.ts b/src/lib/slug/resolveArticlePage.ts index 723fac8..4da064e 100644 --- a/src/lib/slug/resolveArticlePage.ts +++ b/src/lib/slug/resolveArticlePage.ts @@ -1,5 +1,5 @@ // src/lib/articlePage.ts -import { categories } from "../../data/categories"; +import { categories } from "@/data/categories"; export type ArticleResult = | { type: "article_home"; data: any } @@ -29,5 +29,8 @@ export function resolveArticlePage(slug: string): ArticleResult | null { } // DETAIL - return { type: "article_detail", data: { slug } }; + const isValidSlugFormat = slug.includes('-') && slug.length > 5; + if (!isValidSlugFormat) { + return null; + } } diff --git a/src/lib/slug/resolveProductPage.ts b/src/lib/slug/resolveProductPage.ts index cbde8b5..19c8675 100644 --- a/src/lib/slug/resolveProductPage.ts +++ b/src/lib/slug/resolveProductPage.ts @@ -1,6 +1,6 @@ // hoanghapc/src/lib/productPage.ts -import { categories } from "../../data/categories"; -import { productList } from "../../data/product-list"; +import { categories } from "@/data/categories"; +import { productList } from "@/data/products"; export type ProductResult = | { type: "product_category"; data: any } @@ -23,7 +23,7 @@ export function resolveProductPage(slug: string): ProductResult | null { } // DETAIL - const product = productList.find(p => p.productUrl === url); + const product = productList.list?.find(p => p.productUrl === url); if (product) { return { type: "product_detail", data: product }; } diff --git a/src/lib/slug/slugMap.ts b/src/lib/slug/slugMap.ts index a3fd9c3..7e930c1 100644 --- a/src/lib/slug/slugMap.ts +++ b/src/lib/slug/slugMap.ts @@ -1,3 +1,4 @@ +import { notFound } from "next/navigation"; import { resolveArticlePage } from "./resolveArticlePage"; import { resolveProductPage } from "./resolveProductPage"; @@ -6,12 +7,18 @@ export type SlugResult = | ReturnType; export function findBySlug(slug?: string): SlugResult | null { - if (!slug) return null; + if (!slug || slug.trim() === '') { + return null; + } // PRODUCT const product = resolveProductPage(slug); if (product) return product; // ARTICLE - return resolveArticlePage(slug); + const articler = resolveArticlePage(slug); + if (articler) return articler; + + // 404 + return null; } \ No newline at end of file diff --git a/src/services/cart.ts b/src/services/cart.ts index 38c6ec0..9b2c1c4 100644 --- a/src/services/cart.ts +++ b/src/services/cart.ts @@ -1,48 +1,143 @@ 'use client'; -const CART_KEY = 'cart_product_ids'; +export interface CartItem { + id: number; + cartQuantity: number; +} -// 1. Lấy danh sách ID -export function getCartProductIds(): number[] { +const CART_KEY = 'cart_products'; +const CART_CHANGE_EVENT = 'cart-changed'; + +// Helper để dispatch event khi cart thay đổi +function notifyCartChange() { + if (typeof window !== 'undefined') { + window.dispatchEvent(new Event(CART_CHANGE_EVENT)); + } +} + +// 1. Lấy danh sách sản phẩm trong giỏ +export function getCartItems(): CartItem[] { if (typeof window === 'undefined') return []; - try { const raw = localStorage.getItem(CART_KEY); - return raw ? (JSON.parse(raw) as number[]) : []; + return raw ? (JSON.parse(raw) as CartItem[]) : []; } catch (error) { console.error('Invalid cart data', error); return []; } } -// 2. Thêm sản phẩm -export function addProductToCart(productId: number) { - if (typeof window === 'undefined') return; - - const ids = getCartProductIds(); - - if (ids.includes(productId)) { - console.log('Product đã tồn tại:', productId); - return; +// 2. Thêm sản phẩm vào giỏ +export function addProductToCart(productId: number, quantity: number = 1): { success: boolean; message: string; isNew: boolean } { + if (typeof window === 'undefined') { + return { success: false, message: 'Window is undefined', isNew: false }; } - - ids.push(productId); - localStorage.setItem(CART_KEY, JSON.stringify(ids)); + + const items = getCartItems(); + const existingItem = items.find(item => item.id === productId); + + if (existingItem) { + existingItem.cartQuantity += quantity; + localStorage.setItem(CART_KEY, JSON.stringify(items)); + notifyCartChange(); // Notify change + return { + success: true, + message: `Đã cập nhật số lượng thành ${existingItem.cartQuantity}`, + isNew: false + }; + } + + items.push({ id: productId, cartQuantity: quantity }); + localStorage.setItem(CART_KEY, JSON.stringify(items)); + notifyCartChange(); // Notify change + return { success: true, message: 'Đã thêm sản phẩm vào giỏ hàng', isNew: true }; } -// 3. Xóa 1 sản phẩm +// 3. Tăng số lượng sản phẩm +export function increaseQuantity(productId: number, amount: number = 1): boolean { + if (typeof window === 'undefined') return false; + + const items = getCartItems(); + const item = items.find(item => item.id === productId); + + if (item) { + item.cartQuantity += amount; + localStorage.setItem(CART_KEY, JSON.stringify(items)); + notifyCartChange(); // Notify change + return true; + } + return false; +} + +// 4. Giảm số lượng sản phẩm +export function decreaseQuantity(productId: number, amount: number = 1): boolean { + if (typeof window === 'undefined') return false; + + const items = getCartItems(); + const item = items.find(item => item.id === productId); + + if (item) { + const newQuantity = item.cartQuantity - amount; + if (newQuantity < 1) { + return false; + } + item.cartQuantity = newQuantity; + localStorage.setItem(CART_KEY, JSON.stringify(items)); + notifyCartChange(); // Notify change + return true; + } + return false; +} + +// 5. Update số lượng trực tiếp +export function updateQuantity(productId: number, cartQuantity: number): boolean { + if (typeof window === 'undefined') return false; + + if (cartQuantity < 1) { + return false; + } + + const items = getCartItems(); + const item = items.find(item => item.id === productId); + + if (item) { + item.cartQuantity = cartQuantity; + localStorage.setItem(CART_KEY, JSON.stringify(items)); + notifyCartChange(); // Notify change + return true; + } + return false; +} + +// 6. Xóa 1 sản phẩm export function removeProductFromCart(productId: number) { if (typeof window === 'undefined') return; - - const ids = getCartProductIds(); - const newIds = ids.filter(id => id !== productId); - - localStorage.setItem(CART_KEY, JSON.stringify(newIds)); + + const items = getCartItems(); + const newItems = items.filter(item => item.id !== productId); + localStorage.setItem(CART_KEY, JSON.stringify(newItems)); + notifyCartChange(); // Notify change } -// 4. Xóa giỏ hàng +// 7. Xóa toàn bộ giỏ hàng export function clearCart() { if (typeof window === 'undefined') return; - localStorage.removeItem(CART_KEY); + notifyCartChange(); // Notify change } + +// 8. Lấy cartQuantity của 1 sản phẩm +export function getProductQuantity(productId: number): number { + const items = getCartItems(); + const item = items.find(item => item.id === productId); + return item?.cartQuantity ?? 0; +} + +// 9. Kiểm tra sản phẩm có trong giỏ hàng không +export function isProductInCart(productId: number): boolean { + const items = getCartItems(); + return items.some(item => item.id === productId); +} + +// 10. Export event name để hooks sử dụng +export { CART_CHANGE_EVENT }; \ No newline at end of file diff --git a/src/types/product.ts b/src/types/product.ts new file mode 100644 index 0000000..4e42d34 --- /dev/null +++ b/src/types/product.ts @@ -0,0 +1,12 @@ +// src/types/deal.ts +export type ProductItemProps = { + price: number; + quantity: number; + productUrl: string; + productImage: string; + productName: string; + marketPrice : number; + specialOffer : string; + warranty: string; + productSummary: string; +};