{"version":3,"sources":["estore/cart/cart-controller-utils.ts"],"names":["GroupPosition","OrderLineType","CartControllerUtils","_addOfferOrderLineDummyHeading","orderLines","let","updatedProducts","forEach","product","index","offerHeadingOrderLine","offerID","tempOrderLineID","productID","productNo","productName","toString","quantity","lockQuantity","price","linePrice","lineDiscount","lineDiscountPercent","imageID","parentID","preventBuyWhenOutOfStock","quantityInStock","itemID","productImageID","imageWidth","exchangeRate","published","formattedPrice","formattedLinePrice","formattedDiscount","factor","publishedPageID","isMainProduct","imageFullWidth","imageFullHeight","imageDisplayWidth","imageDisplayHeight","imageUrl","cantBeRemoved","stockText","stockCssClass","hideStockInfo","minQuantity","allowedQuantities","unit","isFractional","factorPurchaseType","productUrl","lineType","customFields","push","extendDataForUi","hasOfferProducts","some","filter","ExtraField","trim","this","setGroupingParams","ignoreGroupingProducts","orderLinesIndexMap","Map","orderLineGroupingIndex","previousOfferID","previousGroupingProductID","isMainProductByParentID","undefined","p","isNewOfferProduct","isNewGroupingProduct","GroupingProduct","has","set","get","indexes","productsInGroup","indexInGroup","totalProductsInGroup","findIndex","grouping","id","position","isChild","length","First","Last","Middle"],"mappings":"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","file":"cart-controller-utils.js","sourcesContent":["import { GroupPosition, TempOrderLineProductContract, TempOrderLineProductContractUiHelper } from \"./interfaces/temp-order-line-product-contract.js\";\r\nimport { OrderLineType } from \"../../../components-shared/enums/order-line-type.js\";\r\n\r\nexport class CartControllerUtils {\r\n\r\n private _addOfferOrderLineDummyHeading(orderLines: TempOrderLineProductContract[]): TempOrderLineProductContractUiHelper[]{\r\n let updatedProducts: TempOrderLineProductContract[] = [];\r\n\r\n orderLines.forEach((product, index) => {\r\n if (product.offerID) {\r\n\r\n if((index >= 1 && !orderLines[index - 1].offerID) || index === 0){\r\n const offerHeadingOrderLine = {\r\n tempOrderLineID: product.tempOrderLineID, //copy\r\n productID: null,\r\n productNo: null,\r\n productName: 'Offer Nr: ' + product.offerID.toString(), //copy\r\n quantity: null,\r\n lockQuantity: null,\r\n price: null,\r\n linePrice: null,\r\n lineDiscount: null,\r\n lineDiscountPercent: null,\r\n imageID: null,\r\n parentID: product.parentID, //copy\r\n preventBuyWhenOutOfStock: null, \r\n quantityInStock: null,\r\n itemID: null,\r\n productImageID: null,\r\n imageWidth: null,\r\n exchangeRate: 0,\r\n published: null,\r\n formattedPrice: '',\r\n formattedLinePrice: '',\r\n formattedDiscount: '',\r\n factor: null,\r\n publishedPageID: null,\r\n isMainProduct: null,\r\n imageFullWidth: null,\r\n imageFullHeight: null,\r\n imageDisplayWidth: null,\r\n imageDisplayHeight: null,\r\n imageUrl: '',\r\n cantBeRemoved: false, //override\r\n stockText: '',\r\n stockCssClass: '',\r\n hideStockInfo: null,\r\n minQuantity: null,\r\n allowedQuantities: [],\r\n unit: '',\r\n isFractional: null,\r\n factorPurchaseType: null,\r\n productUrl: null,\r\n lineType: product.lineType, //copy\r\n offerID: product.offerID, //copy\r\n customFields: []\r\n } as TempOrderLineProductContract;\r\n\r\n updatedProducts.push(offerHeadingOrderLine);\r\n }\r\n product.cantBeRemoved = true;\r\n }\r\n updatedProducts.push(product);\r\n });\r\n\r\n return updatedProducts as TempOrderLineProductContractUiHelper[];\r\n }\r\n\r\n public extendDataForUi(orderLines: TempOrderLineProductContract[]): TempOrderLineProductContractUiHelper[]{\r\n const hasOfferProducts = orderLines.some(product => product.offerID);\r\n let updatedProducts = [ ... orderLines ] as TempOrderLineProductContractUiHelper[];\r\n\r\n updatedProducts = orderLines.filter(product => {\r\n return product.lineType === OrderLineType.ExtraField ? product.productName.trim() !== '' : true;\r\n });\r\n\r\n if (hasOfferProducts) {\r\n updatedProducts = this._addOfferOrderLineDummyHeading(updatedProducts);\r\n }\r\n\r\n return updatedProducts;\r\n }\r\n\r\n public setGroupingParams(orderLines: TempOrderLineProductContractUiHelper[], ignoreGroupingProducts: boolean = false): TempOrderLineProductContractUiHelper[]{\r\n let updatedProducts = [ ... orderLines ] as TempOrderLineProductContractUiHelper[];\r\n const hasOrderLineForGrouping = orderLines.some(product => product.parentID > 0 || product.offerID);\r\n\r\n if (!hasOrderLineForGrouping) return orderLines;\r\n\r\n const orderLinesIndexMap: Map = new Map();\r\n let orderLineGroupingIndex: number = 0;\r\n let previousOfferID: number = null;\r\n let previousGroupingProductID: number = null;\r\n\r\n orderLines.forEach((product, index) => {\r\n if (!isGroupingConditionMet(product)) {\r\n return;\r\n }\r\n\r\n const offerID = product.offerID;\r\n\r\n if (isNewOrderLinesGroup(product, offerID)) {\r\n previousOfferID = offerID;\r\n previousGroupingProductID = product.tempOrderLineID;\r\n orderLineGroupingIndex++;\r\n }\r\n\r\n if (!orderLinesIndexMap.has(orderLineGroupingIndex)) {\r\n orderLinesIndexMap.set(orderLineGroupingIndex, []);\r\n }\r\n\r\n orderLinesIndexMap.get(orderLineGroupingIndex).push(index);\r\n });\r\n\r\n orderLinesIndexMap.forEach((indexes, orderLineGroupingIndex) => {\r\n const productsInGroup = orderLinesIndexMap.get(orderLineGroupingIndex);\r\n indexes.forEach(index => {\r\n const indexInGroup = productsInGroup.findIndex((p) => p === index);\r\n updatedProducts[index].grouping = orderLines[index].grouping || { id: null, position: null, isChild: null };\r\n updatedProducts[index].grouping.id = orderLineGroupingIndex;\r\n updatedProducts[index].grouping.position = getGroupingPosition(indexInGroup, productsInGroup.length);\r\n updatedProducts[index].grouping.isChild = indexInGroup !== 0 ? true : false;\r\n });\r\n });\r\n \r\n\r\n function isGroupingConditionMet(product: TempOrderLineProductContract){\r\n return (!ignoreGroupingProducts && product.lineType === OrderLineType.GroupingProduct) || (isMainProductByParentID(product) || product.parentID > 0) || product.offerID !== undefined;\r\n }\r\n\r\n function isNewOrderLinesGroup(product: TempOrderLineProductContract, offerID: number){\r\n const isNewOfferProduct: boolean = product.offerID !== undefined && previousOfferID !== offerID;\r\n const isNewGroupingProduct: boolean = product.lineType === OrderLineType.GroupingProduct && previousGroupingProductID !== product.tempOrderLineID && product.offerID === undefined;\r\n return isMainProductByParentID(product) || isNewOfferProduct || isNewGroupingProduct;\r\n }\r\n\r\n function isMainProductByParentID(product: TempOrderLineProductContract){\r\n return product.parentID === 0 && product.offerID === undefined && orderLines.some(p => p.parentID === product.tempOrderLineID);\r\n }\r\n\r\n function getGroupingPosition(indexInGroup: number, totalProductsInGroup: number): GroupPosition {\r\n if (indexInGroup === 0) {\r\n return GroupPosition.First;\r\n } else if (indexInGroup === totalProductsInGroup - 1) {\r\n return GroupPosition.Last;\r\n } else {\r\n return GroupPosition.Middle;\r\n }\r\n }\r\n\r\n return updatedProducts;\r\n }\r\n}"]}