UNPKG

@apicart/store-sdk

Version:

Apicart SDK for integrating store into any web application

149 lines (119 loc) 3.2 kB
import Apicart from '@apicart/core-sdk'; import Item from '../Item/Item'; import OrderItemParameter from './OrderItemParameter'; export default class OrderItem { private _quantity: number; private _externalId: string; private _name: string private _price: number; private _totalPrice: number; private _parameters: OrderItemParameter[] = []; private _item: Item; constructor( quantity: number, externalId: string, name: string, price: number, totalPrice: number, item: Item, parameters: OrderItemParameter[] = [] ) { this._quantity = quantity; this._externalId = externalId; this._name = name; this._price = price; this._totalPrice = totalPrice; this._item = item; Apicart.Utils.Loops.forEach(parameters, (orderItemParameter: OrderItemParameter): void => { this.addParameter(orderItemParameter); }); } public getQuantity(): number { return this._quantity; } public getExternalId(): string { return this._externalId; } public getName(): string { return this._name; } public getPrice(): number { return this._price; } public getTotalPrice(): number { return this._totalPrice; } public getItem(): Item { return this._item; } public getParameters(): OrderItemParameter[] { return this._parameters; } public addParameter(orderItemParameter: OrderItemParameter): void { let parameterUpdated = false; Apicart.Utils.Loops.forEach(this.getParameters(), (parameter: OrderItemParameter): void | boolean => { if (parameter.getKey() === orderItemParameter.getKey()) { parameter.setValue(orderItemParameter.getValue()); parameterUpdated = true; return false; } }); if (!parameterUpdated) { this._parameters.push(orderItemParameter); } } public removeParameter(key: string): void { Apicart.Utils.Loops.forEach( this.getParameters(), (parameter: OrderItemParameter, index: number): void | boolean => { if (parameter.getKey() === key) { delete this._parameters[index]; return false; } } ); } public getParameterValue(key: string, defaultValue: any = null): any { let parameterValue: any = defaultValue; Apicart.Utils.Loops.forEach(this.getParameters(), (parameter: OrderItemParameter): void | boolean => { if (parameter.getKey() === key) { parameterValue = parameter.getValue(); return false; } }); return parameterValue; } public static deserialize(data: any): OrderItem { Apicart.Utils.Loops.forEach( ['quantity', 'externalId', 'name', 'price', 'totalPrice', 'item'], function (keyPath: string) { if (!Apicart.Utils.Objects.keyExists(data, keyPath)) { throw 'Orderitem: Missing required parameter: "' + keyPath + '".'; } } ); const item = Item.deserialize(data.item); const orderItem = new OrderItem( data.quantity, data.externalId, data.name, data.price, data.totalPrice, item ); if ('parameters' in data && Array.isArray(data.parameters)) { Apicart.Utils.Loops.forEach(data.parameters, (parameter: any) => { if ('key' in parameter) { orderItem.addParameter(new OrderItemParameter(parameter.key, parameter.value || null)); } }); } return orderItem; } }