import { Event } from "../../../event/core/event"; /** * Product in a cart event. * * @export * @interface CartProduct */ export interface CartProduct { product: string; skuId?: string; quantity: number; } /** * Cart Event data. * * @interface CartEventData */ export interface CartEventData { session?: string; anonymous?: string; } /** * Base Cart Event. * * @export * @abstract * @class CartEvent * @extends {Event} */ export abstract class CartEvent extends Event { public products: CartProduct[] = []; /** * Creates an instance of CartEvent. * * @memberof CartEvent * @param {CartEventData} data */ constructor(data?: CartEventData) { super(data?.session, data?.anonymous); } /** * Add a product to this cart event. * * @param {string} product Product's ID. * @param {number} [quantity=1] Quantity inside the basket. * @param {string} skuId SKU's ID. * @return {CartEvent} * @memberof CartEvent */ public withProduct(product: string, quantity = 1, skuId?: string): CartEvent { this.products.push({ product, quantity, skuId }); return this; } /** * Add multiple product's to this cart event. * * @param {CartProduct[]} products All the products to be added. * @return {CartEvent} * @memberof CartEvent */ public withProducts(products: CartProduct[]): CartEvent { this.products.push(...products); return this; } }