import { Cart, ContactInfo, Voucher } from '@inmotion/swift-libs'; import { Dictionary } from 'lodash'; import { SimpleInstance } from '@inmotion/core'; import { PaymentMethodType } from '@whittaker/swift-libs'; export class LineInput { product: SimpleInstance; sku: string; quantity: number; } export class BaseCartBuilderInput { guid: string; userEmail: string; lines: LineInput[]; billing: ContactInfo; shipping: ContactInfo; hasShippingInsurance: boolean; paymentMethod: string; paymentVoucher: Voucher; discountSku: string; constructor() { this.guid = null; this.userEmail = null; this.lines = []; this.billing = new ContactInfo(); this.shipping = new ContactInfo(); this.hasShippingInsurance = false; this.paymentMethod = PaymentMethodType.CREDIT_CARD.Name; this.paymentVoucher = new Voucher(); this.discountSku = null; } } export class CartBuilderInput extends BaseCartBuilderInput { fflNumber: string; constructor(guid: string = null) { super(); this.guid = guid; this.fflNumber = null; } } export abstract class BaseCartState { cart: Cart; constructor() { this.cart = null; } } export class CartState extends BaseCartState { input: CartBuilderInput; status: CartStatus; constructor() { super(); this.input = new CartBuilderInput(); this.status = new CartStatus(); } } export class CartStatus { isGuest: boolean; totalItemQuantity: number; onHandMap: Dictionary; // key: Sku, value: AvailableOnHand quantityMap: Dictionary; // key: Sku, value: Quantity in cart //---------------------------------------------------------------------------------------------------------- isLayaway: boolean; isEligibleForLayaway; hasUnpaidOrders: boolean; hasFirearms: boolean; isFreeShipping: boolean; shippingInsuranceEnabled: boolean; constructor() { this.isGuest = false; this.totalItemQuantity = 0; this.onHandMap = {}; this.quantityMap = {}; //---------------------------------------------------------------------------------------------------------- this.isLayaway = false; this.isEligibleForLayaway = false; this.isFreeShipping = false; this.shippingInsuranceEnabled = false; this.hasUnpaidOrders = false; this.hasFirearms = false; } }