69 lines
1.7 KiB
TypeScript
69 lines
1.7 KiB
TypeScript
export interface CartItem {
|
|
id: string
|
|
productId?: string // для внутренних товаров
|
|
offerKey?: string // для внешних товаров (AutoEuro)
|
|
name: string
|
|
description: string
|
|
brand?: string
|
|
article?: string
|
|
price: number
|
|
originalPrice?: number
|
|
currency: string
|
|
quantity: number
|
|
stock?: string | number // количество товара в наличии на складе
|
|
deliveryTime?: string
|
|
deliveryDate?: string
|
|
warehouse?: string
|
|
supplier?: string
|
|
comment?: string
|
|
selected: boolean
|
|
favorite: boolean
|
|
isExternal: boolean // true для товаров из AutoEuro
|
|
image?: string
|
|
weight?: number
|
|
volume?: number
|
|
canPurchase?: boolean
|
|
}
|
|
|
|
export interface CartSummary {
|
|
totalItems: number
|
|
totalPrice: number
|
|
totalDiscount: number
|
|
deliveryPrice: number
|
|
finalPrice: number
|
|
}
|
|
|
|
export interface DeliveryInfo {
|
|
type: string
|
|
address: string
|
|
date?: string
|
|
time?: string
|
|
price: number
|
|
cost?: number
|
|
}
|
|
|
|
export interface CartState {
|
|
items: CartItem[]
|
|
summary: CartSummary
|
|
delivery: DeliveryInfo
|
|
orderComment: string
|
|
isLoading: boolean
|
|
error?: string
|
|
}
|
|
|
|
export interface CartContextType {
|
|
state: CartState
|
|
addItem: (item: Omit<CartItem, 'id' | 'selected' | 'favorite'>) => Promise<{ success: boolean; error?: string }>
|
|
removeItem: (id: string) => void
|
|
updateQuantity: (id: string, quantity: number) => void
|
|
toggleSelect: (id: string) => void
|
|
toggleFavorite: (id: string) => void
|
|
updateComment: (id: string, comment: string) => void
|
|
updateOrderComment: (comment: string) => void
|
|
selectAll: () => void
|
|
removeAll: () => void
|
|
removeSelected: () => void
|
|
updateDelivery: (delivery: Partial<DeliveryInfo>) => void
|
|
clearCart: () => void
|
|
clearError: () => void
|
|
}
|