тут нихуя не работает, ебаный рот этого казино
This commit is contained in:
39
frontend/style/lib/cartStorage.ts
Normal file
39
frontend/style/lib/cartStorage.ts
Normal file
@@ -0,0 +1,39 @@
|
||||
import fs from 'fs'
|
||||
import path from 'path'
|
||||
|
||||
const DATA_DIR = path.join(process.cwd(), 'data')
|
||||
const CART_FILE_PATH = path.join(DATA_DIR, 'cart.json')
|
||||
|
||||
export interface CartItem {
|
||||
id: number
|
||||
title: string
|
||||
price: number
|
||||
quantity: number
|
||||
}
|
||||
|
||||
const ensureDataDir = () => {
|
||||
if (!fs.existsSync(DATA_DIR)) {
|
||||
fs.mkdirSync(DATA_DIR, { recursive: true })
|
||||
}
|
||||
}
|
||||
|
||||
export const saveCart = (cartItems: CartItem[]): void => {
|
||||
ensureDataDir()
|
||||
const cartData = JSON.stringify(cartItems, null, 2)
|
||||
fs.writeFileSync(CART_FILE_PATH, cartData)
|
||||
}
|
||||
|
||||
export const getCart = (): CartItem[] => {
|
||||
ensureDataDir()
|
||||
if (!fs.existsSync(CART_FILE_PATH)) {
|
||||
return []
|
||||
}
|
||||
const cartData = fs.readFileSync(CART_FILE_PATH, 'utf-8')
|
||||
return JSON.parse(cartData)
|
||||
}
|
||||
|
||||
export const clearCart = (): void => {
|
||||
ensureDataDir()
|
||||
fs.writeFileSync(CART_FILE_PATH, '[]')
|
||||
}
|
||||
|
||||
16
frontend/style/lib/cookieManager.js
Normal file
16
frontend/style/lib/cookieManager.js
Normal file
@@ -0,0 +1,16 @@
|
||||
import Cookies from 'js-cookie';
|
||||
|
||||
export const updateCartCookie = (cartItems) => {
|
||||
const cartData = JSON.stringify(cartItems);
|
||||
Cookies.set('cart', cartData, { expires: 7 }); // Cookie expires in 7 days
|
||||
};
|
||||
|
||||
export const getCartFromCookie = () => {
|
||||
const cartData = Cookies.get('cart');
|
||||
return cartData ? JSON.parse(cartData) : [];
|
||||
};
|
||||
|
||||
export const clearCartCookie = () => {
|
||||
Cookies.remove('cart');
|
||||
};
|
||||
|
||||
60
frontend/style/lib/sample-products.ts
Normal file
60
frontend/style/lib/sample-products.ts
Normal file
@@ -0,0 +1,60 @@
|
||||
import { Product } from "@/types/product"
|
||||
|
||||
export const SAMPLE_PRODUCTS: Product[] = [
|
||||
{
|
||||
id: 1,
|
||||
title: "Кофе растворимый Жокей Крепкий, 3 в 1, с сахаром",
|
||||
price: 89,
|
||||
oldPrice: 172,
|
||||
discount: 48,
|
||||
image: "/placeholder.svg",
|
||||
isHotDeal: true,
|
||||
isSale: true,
|
||||
},
|
||||
{
|
||||
id: 2,
|
||||
title: "Рексона Дезодорант женский твердый стик",
|
||||
price: 235,
|
||||
oldPrice: 397,
|
||||
discount: 40,
|
||||
image: "/placeholder.svg",
|
||||
isHotDeal: true,
|
||||
},
|
||||
{
|
||||
id: 3,
|
||||
title: "Сухой корм Мираторг MEAT с нежной телятиной",
|
||||
price: 187,
|
||||
oldPrice: 294,
|
||||
discount: 36,
|
||||
image: "/placeholder.svg",
|
||||
isHotDeal: true,
|
||||
},
|
||||
{
|
||||
id: 4,
|
||||
title: "Сухой корм KITEKAT™ для взрослых кошек «Мясной пир»",
|
||||
price: 174,
|
||||
oldPrice: 209,
|
||||
discount: 16,
|
||||
image: "/placeholder.svg",
|
||||
isHotDeal: true,
|
||||
},
|
||||
{
|
||||
id: 5,
|
||||
title: "Специальное чистящее средство для стиральных машин",
|
||||
price: 197,
|
||||
oldPrice: 469,
|
||||
discount: 57,
|
||||
image: "/placeholder.svg",
|
||||
isHotDeal: true,
|
||||
},
|
||||
{
|
||||
id: 6,
|
||||
title: "Крем для лица увлажняющий",
|
||||
price: 184,
|
||||
oldPrice: 413,
|
||||
discount: 55,
|
||||
image: "/placeholder.svg",
|
||||
isHotDeal: true,
|
||||
},
|
||||
]
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import { clsx, type ClassValue } from "clsx"
|
||||
import { type ClassValue, clsx } from "clsx"
|
||||
import { twMerge } from "tailwind-merge"
|
||||
|
||||
|
||||
export function cn(...inputs: ClassValue[]) {
|
||||
return twMerge(clsx(inputs))
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user