@sberdevices/plasma-temple
Version:
SberDevices CanvasApp Templates.
119 lines • 4.97 kB
TypeScript
import { AnyObject, Currency, Entity } from '../../types';
export declare type CaptionType = 'sold-out' | 'few-left' | 'sale' | 'price-changed' | 'you-want' | 'warning' | 'critical' | 'accent' | 'present';
export interface CartItemCaptionType {
type: CaptionType;
content?: string;
}
export declare type CartItemType<ID = unknown, T extends AnyObject = AnyObject> = Entity<ID> & T & {
/** Количество товара в корзине */
quantity: number;
/** Цена товара */
price: number;
/** Старая цена товара */
oldPrice?: number;
/** Скидка на товар. По умолчанию свойство в компоненте Cart не используется */
discount?: number;
/** Скидка на товар в процентах. По умолчанию свойство в компоненте Cart не используется */
percentDiscount?: number;
/** Используется как метка над именем товара при отображении в корзине */
label?: string;
/**
* Используется как подпись позиции товара для указания дополнительной информации,
* например скидки, изменении цены
*/
caption?: CartItemCaptionType;
/**
* Используется как дополнительная информация о товаре, обычно для
* указания веса, объема, размера
*/
nameDetails?: string;
/** Ссылка на изоражение товара */
imageSrc?: string;
/** Флаг, указывающий на то, что товар идет в подарок */
present?: boolean;
/** Максимальное количество товара, которое возможно добавить в корзину */
quantityLimit?: number;
/**
* Флаг указывающий на недоступность товара для покупки,
* в данном случае товар можно только удалить из корзины
*/
disabled?: boolean;
};
export interface OnAddCartItemEvent<T extends CartState> {
type: 'addItem';
item: CartStateItem<T>;
}
export interface OnChangeCartItemQuantityEvent<T extends CartState> {
type: 'changeItemQuantity';
item: CartStateItem<T>;
}
export interface OnRemoveCartItemEvent<T extends CartState> {
type: 'removeItem';
item: CartStateItem<T>;
}
export interface ClearCartEvent {
type: 'clearCart';
}
export declare type ChangeStateFn<T extends CartState> = (state: T) => void;
export declare type OnChangeCartFn<T extends CartState> = (args: {
state: T;
changeState: (state: T) => void;
event: OnAddCartItemEvent<T> | OnChangeCartItemQuantityEvent<T> | OnRemoveCartItemEvent<T> | ClearCartEvent;
}) => void;
/**
* @deprecated
*/
export declare type OnAddCartItemFn<T extends CartState> = (args: {
item: CartStateItem<T>;
state: T;
changeState: ChangeStateFn<T>;
}) => void;
/**
* @deprecated
*/
export declare type OnChangeCartItemQuantityFn<T extends CartState> = (args: {
item: CartStateItem<T>;
state: T;
changeState: ChangeStateFn<T>;
}) => void;
/**
* @deprecated
*/
export declare type OnRemoveCartItemFn<T extends CartState> = (args: {
item: CartStateItem<T>;
state: T;
changeState: ChangeStateFn<T>;
}) => void;
export interface OrderDetails {
type: 'accent' | 'warning' | 'critical' | 'primary';
name: string;
value?: string;
}
export interface CartState<ID = unknown, T extends AnyObject = AnyObject> {
/** Список товаров в корзине */
items: CartItemType<ID, T>[];
/** Валюта корзины */
currency: Currency;
/** Количество пощиций в корзине */
quantity: number;
/** Сумма корзины */
amount: number;
/** Сумма корзины без учета скидки */
oldAmount?: number;
/** Максимальное количество товаров, которое возможно добавить в корзину */
quantityLimit?: number;
/** Минимальная цена доставки */
minDeliveryPrice?: number;
/** Цена доставки */
deliveryPrice?: number;
/** Скидка */
discount?: number;
/** Скидка в процентах */
percentDiscount?: number;
/** Промокод */
promoCode?: string;
/** Информация о деталях заказа, например о доставке, скидке, минимальной сумме для оформления заказа */
orderDetails?: OrderDetails[];
}
export declare type CartStateItem<T extends CartState> = T['items'][number];
//# sourceMappingURL=types.d.ts.map