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