{"version":3,"file":"productPrices.c37888c35f377c87070f.js","sources":["webpack:///./Source/FECOM.Web.UI/Scripts/apps/product/components/ProductPrices.tsx","webpack:///./Source/FECOM.Web.UI/Scripts/components/CustomerDiscountText.tsx","webpack:///./Source/FECOM.Web.UI/Scripts/components/StockIndicator.tsx","webpack:///./Source/FECOM.Web.UI/Scripts/utilities/displayProductWasPrice.ts","webpack:///./node_modules/moment/locale sync en-gb"],"sourcesContent":["import { CustomerDiscountText } from '../../../components/CustomerDiscountText';\r\nimport StockIndicator from '../../../components/StockIndicator';\r\nimport {\r\n PriceBreak,\r\n ProductViewModel,\r\n TransactionalCurrency,\r\n Website\r\n} from '../../../types/generated';\r\nimport { displayProductWasPrice } from '../../../utilities/displayProductWasPrice';\r\nimport formatCurrency from '../../../utilities/formatCurrency';\r\n\r\nexport interface ProductPricesProps {\r\n transactionalCurrency: TransactionalCurrency;\r\n product: ProductViewModel;\r\n isAdded: boolean;\r\n showSecondaryPrice: boolean;\r\n priceBreak: PriceBreak | undefined;\r\n website: Website;\r\n}\r\n\r\nexport function ProductPrices({\r\n transactionalCurrency,\r\n product,\r\n showSecondaryPrice\r\n}: ProductPricesProps) {\r\n const displayWasPrice = displayProductWasPrice(\r\n product.isContractPrice,\r\n showSecondaryPrice,\r\n product.pricingInfo\r\n );\r\n\r\n function getPrimaryPriceWording() {\r\n if (displayWasPrice) {\r\n if (product.isVariant) {\r\n return 'NOW from ';\r\n }\r\n return 'NOW ';\r\n } else if (product.isVariant) {\r\n return 'From ';\r\n }\r\n }\r\n\r\n return (\r\n <div className=\"product-details\">\r\n <CustomerDiscountText\r\n isVariant={product.isVariant}\r\n isContractPrice={product.isContractPrice}\r\n isHeaderDiscounted={product.isHeaderDiscounted}\r\n styleModifier={'--pdp'}\r\n />\r\n <div className=\"product-details__prices mb-2\">\r\n <div className=\"product-details__price\">\r\n <div\r\n className={`product-price product-price--primary ${\r\n displayWasPrice ? 'product-price product-price--primary-now' : ''\r\n }`}\r\n >\r\n {getPrimaryPriceWording()}\r\n <span className=\"d-none\">{'GBP'}</span>\r\n <span className=\"product-price--primary-value\">\r\n {formatCurrency(\r\n product.pricingInfo.primaryPrice.value,\r\n transactionalCurrency\r\n )}\r\n </span>\r\n {!showSecondaryPrice && (\r\n <span className=\"price-primary-text\">\r\n {product.pricingInfo.primaryPriceText}\r\n </span>\r\n )}\r\n </div>\r\n {showSecondaryPrice && (\r\n <div className={`product-price product-price--secondary`}>\r\n <span className=\"d-none\">{'GBP'}</span>\r\n <span>\r\n {formatCurrency(\r\n product.pricingInfo.secondaryPrice.value,\r\n transactionalCurrency\r\n )}\r\n </span>{' '}\r\n <span className=\"price-secondary-text\">\r\n {product.pricingInfo.secondaryPriceText}\r\n </span>\r\n </div>\r\n )}\r\n </div>\r\n <div className=\"product-details__price--additonal-details\">\r\n {displayWasPrice && (\r\n <div className=\"product-price product-price__was-price\">\r\n Was{' '}\r\n {`${product.isVariant ? 'from' : ''} ${formatCurrency(\r\n product.pricingInfo.primaryWasPrice.value,\r\n transactionalCurrency\r\n )}`}\r\n {!showSecondaryPrice && (\r\n <span className=\"price-primary-text\">\r\n {product.pricingInfo.primaryPriceText}\r\n </span>\r\n )}\r\n </div>\r\n )}\r\n {product.pricingInfo.primarySavings > 0 && (\r\n <span className=\"savings\">\r\n {product.isVariant || product.hasPriceBreak\r\n ? 'Savings from '\r\n : 'Save '}\r\n {formatCurrency(\r\n product.pricingInfo.primarySavings,\r\n transactionalCurrency\r\n )}\r\n </span>\r\n )}\r\n </div>\r\n </div>\r\n {!product.directDelivery && product.stockInfo && (\r\n <StockIndicator\r\n stockInfo={product.stockInfo}\r\n showMessages={true}\r\n supplierID={product.supplierID}\r\n isThirdPartyDDelivery={product.isThirdPartyDDelivery}\r\n isRestricted={product.isRestricted}\r\n />\r\n )}\r\n </div>\r\n );\r\n}\r\n","export interface CustomerDiscountTextProps {\r\n isVariant: boolean;\r\n isContractPrice: boolean;\r\n isHeaderDiscounted: boolean;\r\n styleModifier: string | undefined;\r\n}\r\n\r\nexport function CustomerDiscountText({\r\n isVariant,\r\n isContractPrice,\r\n isHeaderDiscounted,\r\n styleModifier\r\n}: CustomerDiscountTextProps) {\r\n const renderDiscountText = () => {\r\n if (!isVariant) {\r\n if (isContractPrice) {\r\n return (\r\n <div\r\n className={`contract-list-item contract-list-item${styleModifier}`}\r\n >\r\n Your contract price\r\n </div>\r\n );\r\n } else if (isHeaderDiscounted) {\r\n return (\r\n <div\r\n className={`contract-list-item contract-list-item${styleModifier}`}\r\n >\r\n Your discount price\r\n </div>\r\n );\r\n }\r\n }\r\n };\r\n return <>{renderDiscountText()}</>;\r\n}\r\n","import { StockInfo, Supplier } from '../types/generated';\r\nimport moment from 'moment';\r\nimport classNames from 'classnames';\r\n\r\ninterface StockIndicatorProps {\r\n stockInfo: StockInfo;\r\n showMessages?: boolean;\r\n singleLine?: boolean;\r\n supplierID: number;\r\n isThirdPartyDDelivery?: boolean | null;\r\n isRestricted?: boolean | null;\r\n suppressStockDeliveryMessage?: boolean | null;\r\n}\r\n\r\nconst StockIndicator = ({\r\n stockInfo,\r\n showMessages,\r\n singleLine,\r\n supplierID,\r\n isThirdPartyDDelivery,\r\n isRestricted,\r\n suppressStockDeliveryMessage = false\r\n}: StockIndicatorProps) => {\r\n const preOrderDateFormatted = moment(stockInfo?.preOrderDate).format(\r\n 'MMMM YYYY'\r\n );\r\n\r\n const outOfStockCssSuffix = stockInfo.isOutOfStock ? 'out' : 'delayed';\r\n\r\n const singleLineClass = classNames({\r\n 'd-flex flex-column': singleLine\r\n });\r\n\r\n const customPadding = singleLine ? ' pr-1' : '';\r\n const delayedStock = () => {\r\n return (\r\n <>\r\n <div\r\n className={`stock-indicator stock-indicator--${outOfStockCssSuffix}${customPadding}${\r\n !singleLine && stockInfo.isDelayedStock && showMessages\r\n ? ' flex-50'\r\n : ''\r\n }`}\r\n >\r\n Out of stock\r\n </div>\r\n\r\n {stockInfo.isDelayedStock && showMessages && (\r\n <p className={`${singleLine ? 'mb-0' : 'mb-0 flex-50'}`}>\r\n <span className=\"d-sm-block d-xl-inline\">\r\n {' '}\r\n {stockInfo.expectedBackInStockMessage}\r\n </span>\r\n </p>\r\n )}\r\n </>\r\n );\r\n };\r\n\r\n const delayedStockThirdParty = () => {\r\n return (\r\n <>\r\n {stockInfo.isInStock && isThirdPartyDDelivery && (\r\n <p className=\"mb-0\">\r\n <span className=\"d-sm-block d-xl-inline\">\r\n {' '}\r\n {stockInfo.thirdPartyDirectDeliveryMessage}\r\n </span>\r\n </p>\r\n )}\r\n </>\r\n );\r\n };\r\n\r\n const preOrder = () => {\r\n return (\r\n <>\r\n <div\r\n className={`stock-indicator stock-indicator--preorder${customPadding}`}\r\n >\r\n Pre-order\r\n </div>\r\n {showMessages && (\r\n <p className=\"mb-0\">\r\n {': '}Order now, delivery expected in\r\n <span className=\"d-sm-block d-xl-inline\">\r\n {' '}\r\n {preOrderDateFormatted}\r\n </span>\r\n </p>\r\n )}\r\n </>\r\n );\r\n };\r\n\r\n return (\r\n <>\r\n {stockInfo.isStockRelevant &&\r\n stockInfo?.stockLevel != null &&\r\n !stockInfo?.isPreOrder &&\r\n supplierID === Supplier.Findel && (\r\n <div className=\"basket-row\">\r\n <div className=\"basket-row__label w-100\">\r\n {stockInfo.isInStock && (\r\n <div className=\"stock-indicator\">\r\n In stock\r\n {stockInfo.inStockDeliveryMessage !== '' &&\r\n !suppressStockDeliveryMessage &&\r\n !isRestricted &&\r\n !isThirdPartyDDelivery && (\r\n <span>\r\n {' - '}\r\n {stockInfo.inStockDeliveryMessage}\r\n </span>\r\n )}\r\n </div>\r\n )}\r\n {!singleLine &&\r\n (stockInfo.isDelayedStock || stockInfo.isOutOfStock) && (\r\n <>{delayedStock()}</>\r\n )}\r\n {singleLine &&\r\n (stockInfo.isDelayedStock || stockInfo.isOutOfStock) && (\r\n <div className={singleLineClass}>{delayedStock()}</div>\r\n )}\r\n {stockInfo.isInStock && isThirdPartyDDelivery && (\r\n <div className={singleLineClass}>\r\n {delayedStockThirdParty()}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n )}\r\n {stockInfo.isStockRelevant && !singleLine && stockInfo?.isPreOrder && (\r\n <div className=\"basket-row\">\r\n <div className=\"basket-row__label w-100\">{preOrder()}</div>\r\n </div>\r\n )}\r\n {stockInfo.isStockRelevant && singleLine && stockInfo?.isPreOrder && (\r\n <div className=\"basket-row\">\r\n <div className=\"basket-row__label\">\r\n <div className={singleLineClass}>{preOrder()}</div>\r\n </div>\r\n </div>\r\n )}\r\n </>\r\n );\r\n};\r\n\r\nexport default StockIndicator;\r\n","import { PricingInfo } from '../types/generated';\r\n\r\nexport function displayProductWasPrice(\r\n isContractPrice: boolean,\r\n showSecondaryPrice: boolean,\r\n pricingInfo: PricingInfo\r\n): boolean {\r\n return (\r\n !isContractPrice &&\r\n pricingInfo.primaryWasPrice.value > 0 &&\r\n pricingInfo.primaryWasPrice.value > pricingInfo.primaryPrice.value &&\r\n (showSecondaryPrice\r\n ? pricingInfo.secondaryWasPrice.value > 0 &&\r\n pricingInfo.secondaryWasPrice.value > pricingInfo.secondaryPrice.value\r\n : true)\r\n );\r\n}\r\n","var map = {\n\t\"./en-gb\": \"./node_modules/moment/locale/en-gb.js\",\n\t\"./en-gb.js\": \"./node_modules/moment/locale/en-gb.js\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"./node_modules/moment/locale sync recursive en-gb\";"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;AACA;AAOA;AACA;;;AAWA;AAIA;AAAA;AAAA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AAJA;AAMA;AAAA;AACA;AAAA;AAEA;AADA;AAMA;AAAA;AAAA;AACA;AAAA;AAAA;AAOA;AAAA;AAAA;AAdA;AAoBA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAMA;AAAA;AAAA;AARA;AArBA;AAmCA;AAAA;AAEA;AAAA;AAOA;AAAA;AAAA;AAPA;AAcA;AAAA;AAAA;AAhBA;AApCA;AAkEA;AACA;AACA;AACA;AACA;AALA;AAxEA;AAkFA;;;;;;;;;;;;;;;;;;ACtHA;AAKA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAEA;AADA;AAAA;AAMA;AACA;AAEA;AADA;AAAA;AAMA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;;;;;;;;;;;;;;;;;;;;;;;ACnCA;AACA;AACA;;;;;AAYA;AAQA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAIA;AAEA;AACA;AADA;AAIA;AACA;AAAA;AACA;AACA;AAEA;AADA;AAAA;AAWA;AAAA;AACA;AAAA;AAAA;AADA;AAZA;AAqBA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AAAA;AAAA;AADA;AAFA;AAWA;AACA;AACA;AACA;AACA;AAEA;AADA;AAAA;AAMA;AAAA;AAEA;AAAA;AAAA;AAFA;AAPA;AAiBA;AACA;AACA;AACA;AAKA;AAAA;AACA;AAAA;AAEA;AAAA;AAMA;AAAA;AANA;AAeA;AAAA;AAIA;AAAA;AAAA;AAGA;AAAA;AAAA;AAxBA;AADA;AAiCA;AAAA;AACA;AAAA;AAAA;AADA;AAKA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AADA;AADA;AA3CA;AAmDA;AACA;AACA;;;;;;;;;;;;ACnJA;AAAA;AAAA;AAKA;AASA;;;;;;;;;;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;A","sourceRoot":""}