{"version":3,"file":"290.24da201e68d912fd.js","mappings":"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","sources":["webpack:///./Scripts/Services/ConfiguratorService.js","webpack:///./Scripts/Components/Configurator/StackedPrices.js","webpack:///./Scripts/Services/conversions.js","webpack:///./Scripts/Services/utilities.js","webpack:///./Scripts/Components/Configurator/ProductQuantitySelector.js","webpack:///./Scripts/Components/Configurator/PanelGoodsMarking.js","webpack:///./Scripts/Components/Configurator/PanelDeliveryDate.js","webpack:///./Scripts/Components/Configurator/Certificate.js","webpack:///./Scripts/Components/Configurator/validateCuttingInputs.js","webpack:///./Scripts/Components/Configurator/PanelSubmit.js","webpack:///./Scripts/Components/Stock/ConfiguratorStock.js","webpack:///./Scripts/Components/Configurator/ConfiguratorProductDetails.js","webpack:///./Scripts/Components/Configurator/Tabs/GeneralPane.js","webpack:///./Scripts/Components/Configurator/PanelBlasting.js","webpack:///./Scripts/Components/Configurator/PanelMarking.js","webpack:///./Scripts/Components/Configurator/ProductServiceBlasting.js","webpack:///./Scripts/Services/rulesets.js","webpack:///./Scripts/Components/Configurator/PanelCuttingImage.js","webpack:///./Scripts/Components/Configurator/PanelBeamCuttingSvgAlt.js","webpack:///./Scripts/Components/Configurator/PanelBeam.js","webpack:///./Scripts/Components/Configurator/PanelCuttingLength.js","webpack:///./Scripts/Components/Configurator/PanelCoilFoiling.js","webpack:///./Scripts/Components/Configurator/PanelCoilPacking.js","webpack:///./Scripts/Components/Configurator/PanelCoilBase.js","webpack:///./Scripts/Components/Configurator/ProductServiceCutting.js","webpack:///./Scripts/Components/Configurator/ProductServiceSwell.js","webpack:///./Scripts/Components/Configurator/Tabs/ModeSelection.js","webpack:///./Scripts/Components/Configurator/Tabs/ProductionPane.js","webpack:///./Scripts/Components/Configurator/ConfiguratorBase.js","webpack:///./Scripts/Components/Configurator/ConfiguratorLoadingState.js","webpack:///./Scripts/Components/Configurator/Tabs/ConfiguratorTabs.js","webpack:///./Scripts/Services/HolidayCheck.js"],"sourcesContent":["\r\nexport const getStackedItem = (stackedPrices, totalWeight) => {\r\n if (!stackedPrices) {\r\n return;\r\n }\r\n const { quantityPriceList } = stackedPrices;\r\n let quantityUnit = totalWeight;\r\n\r\n if (quantityPriceList && quantityPriceList.length) {\r\n let stackedItem;\r\n\r\n for (let priceListItem of quantityPriceList) {\r\n let quantity = priceListItem.quantity;\r\n\r\n if (quantityUnit < quantity) {\r\n break;\r\n }\r\n stackedItem = priceListItem;\r\n }\r\n\r\n return stackedItem ? stackedItem : quantityPriceList[0];\r\n }\r\n\r\n return null;\r\n};\r\n","import React from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport { currencyFormat } from '../../Services/formatting';\r\nimport { translate } from '../../Services/translation';\r\nimport { getStackedItem } from '../../Services/ConfiguratorService';\r\n\r\nconst StackedPrices = () => {\r\n const stackedPrices = useSelector((state) => state.configurator.stackedPrices),\r\n totalWeight = useSelector((state) => state.configurator.totalWeight);\r\n\r\n if (!stackedPrices) {\r\n return <div className='configurator-box'>{translate('stacked.price.missingprices')}</div>\r\n }\r\n\r\n const { quantityPriceList, pricingUnitDisplayName, factorKg, pricingUnit } = stackedPrices;\r\n const stackedItem = getStackedItem(stackedPrices, totalWeight);\r\n\r\n const getStackedQuantity = (quantityPriceList, stackedItem) => {\r\n return stackedItem ? stackedItem.quantity : quantityPriceList[0].quantity;\r\n };\r\n\r\n const getMeterProgress = (quantityPriceList, stackedQuantity) => {\r\n let max = quantityPriceList.length,\r\n selectedIndex = 0;\r\n\r\n for (let i = 1; i < max; i++) {\r\n if (quantityPriceList[i].quantity === stackedQuantity) {\r\n selectedIndex = i + 1;\r\n break;\r\n }\r\n }\r\n\r\n if (selectedIndex === 0) {\r\n selectedIndex += 0.5;\r\n } else if (selectedIndex !== max) {\r\n selectedIndex -= 0.5;\r\n }\r\n\r\n return (selectedIndex > 0 ? (selectedIndex / max) * 100 : 0) + '%';\r\n };\r\n\r\n const renderDecimal = (value, useFactor) => {\r\n if (useFactor && pricingUnit !== 'kg') {\r\n return new Intl.NumberFormat(window.__litium.constants.currentLocale, {\r\n style: 'decimal',\r\n maximumFractionDigits: 0,\r\n }).format(value / factorKg);\r\n } else {\r\n return new Intl.NumberFormat(window.__litium.constants.currentLocale, {\r\n style: 'decimal',\r\n maximumFractionDigits: 2,\r\n }).format(value);\r\n }\r\n };\r\n\r\n const stackedQuantity = quantityPriceList && quantityPriceList.length ? getStackedQuantity(quantityPriceList, stackedItem) : null;\r\n\r\n return (\r\n <div className='configurator-box'>\r\n <div className='configurator-box__content'>\r\n {stackedQuantity ? (\r\n <div className='stacked-price-box'>\r\n <div className='stacked-price-box__unit'>{'KG'}</div>\r\n <ul className='stacked-price-box__data-list'>\r\n {quantityPriceList.map((value, index) => (\r\n <li key={index} className={value.quantity === stackedQuantity ? 'stacked-price-box__highlighted' : ''} >\r\n <div className='stacked-price-box__kg'>\r\n <a>{renderDecimal(value.quantity, false)}</a>\r\n </div>\r\n <div>\r\n <a>{renderDecimal(value.price, false)}</a>\r\n </div>\r\n </li>\r\n ))}\r\n </ul>\r\n <div className='stacked-price-box__meter'>\r\n <div\r\n className='stacked-price-box__progress'\r\n style={{ width: getMeterProgress(quantityPriceList, stackedQuantity), }}>\r\n\r\n </div>\r\n </div>\r\n <div className='stacked-price-box__unit'>\r\n {currencyFormat.formatToParts(0).find((e) => e.type === 'currency').value}\r\n {'/'}\r\n {pricingUnitDisplayName}\r\n </div>\r\n </div>\r\n ) : (\r\n ''\r\n )}\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default StackedPrices;\r\n","const convertUnit = (quantity, sourceUnit, targetUnit) => {\r\n if (sourceUnit.unit === targetUnit.unit) {\r\n return quantity;\r\n }\r\n\r\n let factor = sourceUnit.conversionFactor > 0 ? sourceUnit.conversionFactor : 1,\r\n targetFactor = targetUnit.conversionFactor > 0 ? targetUnit.conversionFactor : 1;\r\n\r\n quantity = quantity * factor;\r\n\r\n return quantity / targetFactor;\r\n}\r\n\r\nexport default convertUnit;","export const lerp = (norm, min, max) => {\r\n return (max - min) * norm + min;\r\n}\r\n\r\nexport const norm = (value, min, max) => {\r\n return (value - min) / (max - min);\r\n}\r\n\r\nexport const map = (value, sourceMin, sourceMax, destMin, destMax) => {\r\n return lerp(norm(value, sourceMin, sourceMax), destMin, destMax);\r\n}","import React, { useState, useEffect, useRef, Fragment } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport convertUnit from '../../Services/conversions';\r\nimport { map } from '../../Services/utilities';\r\nimport { translate } from '../../Services/translation';\r\nimport { numberFormat } from '../../Services/formatting';\r\nimport { setTotalWeight as setWeight, setUnit, setBaseUnitQuantity, setSalesQuantity, } from '../../Actions/Configurator.action';\r\nimport { googleAnalytics } from '../../Services/googleAnalytics';\r\n\r\nconst ProductQuantitySelector = () => {\r\n const dispatch = useDispatch();\r\n const articleNumber = useSelector((state) => state.configurator.id);\r\n const configurator = useSelector((state) => state.configurator);\r\n const { totalWeight, orderRow, rules, selections, quantitySelector, baseUnitQuantity, informationToCustomer, infoTextQuantityMinLimit, selectedTab, } = configurator;\r\n\r\n if (!quantitySelector) {\r\n return null;\r\n }\r\n\r\n const { decimalQuantity, defaultUnit, baseUnit, unitConfigurableParentItem, quantityUnits, } = quantitySelector;\r\n\r\n const isUpdateMode = orderRow ? true : false,\r\n isConfigured = selectedTab !== 1,\r\n [selectedUnit, setSelectedUnit] = useState(quantitySelector.selectedUnit),\r\n [selectedUnitQuantity, setSelectedUnitQuantity] = useState(configurator.baseUnitQuantity),\r\n [baseQuantity, setBaseQuantity] = useState(configurator.baseUnitQuantity);\r\n\r\n const cuttingLength = selections['cuttingLength'] ? selections['cuttingLength'] : -1;\r\n\r\n const quantityInputElement = useRef(null);\r\n const decimalQuantityMin = 1;\r\n const readOnly = rules.isRemnant;\r\n\r\n useEffect(() => {\r\n initialize();\r\n }, [baseUnit, defaultUnit, isUpdateMode, rules.isRemnant, articleNumber, unitConfigurableParentItem, isConfigured, cuttingLength, quantityUnits,]);\r\n\r\n const initialize = () => {\r\n onSetUnit(selectedUnit.id);\r\n\r\n if (isUpdateMode) {\r\n updateQuantity(convertUnit(baseQuantity, baseUnit, selectedUnit), selectedUnit);\r\n } else {\r\n const initialQuantity = baseUnit.conversionFactor > 0 ? baseUnit.conversionFactor : 1;\r\n updateQuantity(initialQuantity, defaultUnit);\r\n }\r\n\r\n if (readOnly) {\r\n handleChangeQuantityUnit('pcs');\r\n }\r\n };\r\n\r\n const onSetUnit = (unit) => {\r\n dispatch(setUnit(unit));\r\n };\r\n\r\n const onTotalWeightChange = (quantity) => {\r\n dispatch(setWeight(quantity));\r\n };\r\n\r\n const onBaseUnitQuantityChange = (baseQuantity) => {\r\n dispatch(setBaseUnitQuantity(baseQuantity));\r\n };\r\n\r\n const updateQuantity = (quantity, unit, isUnitSwitch = false) => {\r\n let baseQuantity = convertUnit(quantity, unit, baseUnit);\r\n\r\n if (!decimalQuantity) {\r\n if (isUnitSwitch) {\r\n baseQuantity = Math.round(baseQuantity.toFixed(2));\r\n\r\n } else {\r\n baseQuantity = Math.ceil(baseQuantity.toFixed(2));\r\n }\r\n }\r\n\r\n setBaseQuantity(baseQuantity);\r\n onBaseUnitQuantityChange(baseQuantity);\r\n\r\n let totalWeight = baseQuantity * convertUnit(1, baseUnit, getQuantityUnit('kg')).toFixed(2);\r\n setTotalWeight(totalWeight);\r\n\r\n setSelectedUnitQuantityState(baseQuantity * convertUnit(1, baseUnit, unit).toFixed(2));\r\n };\r\n\r\n const setTotalWeight = (weight) => {\r\n if (isCutLengthValid()) {\r\n weight = map(cuttingLength, 0, rules.length, 0, weight);\r\n } else if (rules.isRemnant && defaultUnit.unit === 'm') {\r\n weight = (rules.length / 1000) * weight;\r\n }\r\n onTotalWeightChange(weight);\r\n };\r\n\r\n const isCutLengthValid = () => {\r\n return (cuttingLength >= rules.minCutLength && cuttingLength <= rules.maxCutLength);\r\n };\r\n\r\n const getQuantityUnit = (unit) => {\r\n return quantityUnits.find((u) => u.unit === unit);\r\n };\r\n\r\n const setSelectedUnitQuantityState = (quantity) => {\r\n const fixedValue = Number(parseFloat(quantity).toFixed(2));\r\n setSelectedUnitQuantity(fixedValue);\r\n\r\n dispatch(setSalesQuantity(fixedValue));\r\n\r\n if (quantityInputElement.current) {\r\n quantityInputElement.current.value = fixedValue;\r\n }\r\n };\r\n\r\n const onQuantityInputElementPress = (event, isBlur) => {\r\n let quantity = parseFloat(event.target.value);\r\n \r\n if (event.key === 'Enter' || isBlur) {\r\n if (quantity !== selectedUnitQuantity) {\r\n if (!quantity || quantity < decimalQuantityMin) {\r\n quantity = decimalQuantityMin;\r\n }\r\n \r\n updateQuantity(quantity, selectedUnit);\r\n \r\n if (isBlur) {\r\n googleAnalytics({\r\n 'event': 'productConfigurator',\r\n 'fieldName': 'Quantity',\r\n 'value': quantity.toString(),\r\n 'unit': selectedUnit.unit,\r\n 'productId': articleNumber,\r\n });\r\n }\r\n }\r\n }\r\n };\r\n \r\n\r\n const handleChangeQuantityUnit = (unit) => {\r\n const quantityUnit = getQuantityUnit(unit);\r\n\r\n if (quantityUnit) {\r\n setSelectedUnit(quantityUnit);\r\n onSetUnit(quantityUnit.id);\r\n\r\n if (quantityInputElement.current) {\r\n const newQuantity = convertUnit(selectedUnitQuantity, selectedUnit, quantityUnit);\r\n updateQuantity(newQuantity, quantityUnit, true);\r\n }\r\n }\r\n };\r\n\r\n let totalPcsWeight = convertUnit(baseUnitQuantity, baseUnit, getQuantityUnit('pcs'));\r\n let showInfoText = infoTextQuantityMinLimit == 0 ? true : totalPcsWeight >= infoTextQuantityMinLimit;\r\n\r\n return (\r\n <Fragment>\r\n {informationToCustomer && showInfoText && (\r\n <div className='configurator__information'>\r\n <svg>\r\n <use href='/ui/images/sprites/be-group.svg#attention-i'></use>\r\n </svg>\r\n <span>{informationToCustomer}</span>\r\n </div>\r\n )}\r\n <section className='configurator-box'>\r\n <header>\r\n <svg className='configurator-box__icon'>\r\n <use href='/ui/images/sprites/be-group.svg#quantity'></use>\r\n </svg>\r\n <h4 className='configurator-box__title'>\r\n {translate('config.productservicequandity')}\r\n </h4>\r\n <span>\r\n {translate('cart.weight')}: {numberFormat.format(totalWeight)} kg\r\n </span>\r\n </header>\r\n <div className='configurator-box__content'>\r\n <div className='select-quantity'>\r\n <div className='quantity'>\r\n <input type='number' disabled={readOnly} defaultValue={selectedUnitQuantity.toString()} onInput={(event) => onQuantityInputElementPress(event, false)}\r\n onBlur={(event) => onQuantityInputElementPress(event, true)} ref={quantityInputElement} data-buy-quantity-input min='0' step='1' maxLength='9'\r\n className='product-detail__quantity-input form__input'\r\n />\r\n </div>\r\n <div className='quantity-unit'>\r\n {quantityUnits && quantityUnits.length ? (\r\n <select className='form' disabled={isConfigured || readOnly} value={selectedUnit.unit}\r\n onChange={(event) => { handleChangeQuantityUnit(event.target.value); }} >\r\n {quantityUnits.filter((unit) => unit.available || isConfigured || readOnly)\r\n .map((quantityUnit) => (\r\n <option value={quantityUnit.unit} key={quantityUnit.unit}>\r\n {quantityUnit.description}\r\n </option>\r\n ))}\r\n </select>\r\n ) : (\r\n <label htmlFor={configurator.quantityFieldId} className='product__unit'>\r\n {baseUnit.description}\r\n </label>\r\n )}\r\n </div>\r\n </div>\r\n <p className='weight-text'>\r\n {translate('config.weight.information')}\r\n </p>\r\n </div>\r\n </section>\r\n </Fragment>\r\n );\r\n};\r\n\r\nexport default ProductQuantitySelector;\r\n","import React, { useState } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { translate } from '../../Services/translation';\r\nimport { setDeliveryDetailsValues } from '../../Actions/Configurator.action';\r\nimport { googleAnalyticsProductConfigurator } from '../../Services/googleAnalytics';\r\n\r\nconst PanelGoodsMarking = (props) => {\r\n const dispatch = useDispatch();\r\n const configurator = useSelector((state) => state.configurator);\r\n const { id, selections, deliveryDetails } = configurator;\r\n let goodMarkingValue = deliveryDetails && deliveryDetails.goodsMarking || selections && selections[props.setting] || ''\r\n const [goodsMarkingValue, setGoodsMarkingValue] = useState(goodMarkingValue);\r\n\r\n const update = (e, isBlur) => {\r\n setGoodsMarkingValue(e);\r\n dispatch(setDeliveryDetailsValues({ [props.setting]: e }));\r\n if (isBlur) {\r\n googleAnalyticsProductConfigurator(props.setting, e.toString(), id);\r\n }\r\n };\r\n\r\n const getIconPath = () => {\r\n return '/ui/images/sprites/be-group.svg#' + props.icon;\r\n };\r\n\r\n return (\r\n <section className='configurator-box'>\r\n <header>\r\n <svg className='configurator-box__icon'>\r\n <use href={getIconPath()}></use>\r\n </svg>\r\n <h4 className='configurator-box__title'>{translate(props.labelKey)}</h4>\r\n <input type='text' maxLength='38' className='configurator-box__input' placeholder={translate('configurator.goodsmarking.placeholder')}\r\n value={goodsMarkingValue} onChange={(event) => { update(event.target.value); }} onBlur={(event) => { update(event.target.value, true); }} />\r\n </header>\r\n <div className='configurator-box__content'>\r\n {translate('configurator.goodsmarking.orderlinemessage')}\r\n </div>\r\n </section>\r\n );\r\n};\r\n\r\nexport default PanelGoodsMarking;\r\n","import React from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport 'react-dates/initialize';\r\nimport 'react-dates/lib/css/_datepicker.css';\r\nimport \"react-datepicker/dist/react-datepicker.css\";\r\nimport { translate } from '../../Services/translation';\r\nimport { setDeliveryDetailsValues } from '../../Actions/Configurator.action';\r\nimport { googleAnalyticsProductConfigurator } from '../../Services/googleAnalytics';\r\nimport DatePicker from 'react-datepicker';\r\nimport isHoliday from '../../Services/HolidayCheck';\r\nimport { toBaseDateFormat, toCurrentLocaleFormat } from '../../Services/formatting';\r\nimport { subDays } from 'date-fns';\r\n\r\nconst PanelDeliveryDate = ({ setting, labelKey, icon, startDate }) => {\r\n const dispatch = useDispatch(),\r\n configurator = useSelector((state) => state.configurator),\r\n cart = useSelector((state) => state.cart),\r\n { id, delivery, deliveryDetails, orderRow } = configurator;\r\n\r\n const isUpdateMode = orderRow ? true : false;\r\n const startDateObj = startDate ? new Date(startDate) : new Date();\r\n\r\n const deliveryDate = (deliveryDetails && deliveryDetails.deliveryDate) ? new Date(deliveryDetails.deliveryDate) : null;\r\n let publicHolidays = (cart.holidays || []).filter(holiday => holiday.isPublicHoliday).map(holiday => holiday.holidayDate);\r\n let nonPublicHolidays = (cart.holidays || []).filter(holiday => !holiday.isPublicHoliday).map(holiday => holiday.holidayDate);\r\n\r\n const update = (selectedDate) => {\r\n if (selectedDate !== null) {\r\n const formattedDate = toBaseDateFormat(selectedDate);\r\n dispatch(setDeliveryDetailsValues({ [setting]: formattedDate }));\r\n googleAnalyticsProductConfigurator('deliveryDate', formattedDate, id);\r\n }\r\n };\r\n\r\n const getIconPath = () => {\r\n return '/ui/images/sprites/be-group.svg#' + icon;\r\n };\r\n\r\n return (\r\n <section className='configurator-box'>\r\n <header>\r\n <svg className='configurator-box__icon'>\r\n <use href={getIconPath()}></use>\r\n </svg>\r\n <h4 className='configurator-box__title'>{translate(labelKey)}</h4>\r\n {isUpdateMode && (\r\n <div className='configurator-deliverydate'>\r\n <DatePicker\r\n selected={deliveryDate}\r\n filterDate={(day) => !isHoliday(day, subDays(startDateObj, 1), publicHolidays, nonPublicHolidays)}\r\n popperPlacement=\"bottom-end\"\r\n onChange={(date) => update(date)}\r\n customInput={\r\n <button className='date-picker-button'>\r\n {deliveryDate ? toCurrentLocaleFormat(deliveryDate) : translate('singledate.placeholder')}\r\n <svg viewBox=\"0 0 1393 1500\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"m107 1393h241v-241h-241zm295 0h268v-241h-268zm-295-295h241v-268h-241zm295 0h268v-268h-268zm-295-321h241v-241h-241zm616 616h268v-241h-268zm-321-616h268v-241h-268zm643 616h241v-241h-241zm-322-295h268v-268h-268zm-294-723v-241c0-7-3-14-8-19-6-5-12-8-19-8h-54c-7 0-13 3-19 8-5 5-8 12-8 19v241c0 7 3 14 8 19 6 5 12 8 19 8h54c7 0 13-3 19-8 5-5 8-12 8-19zm616 723h241v-268h-241zm-322-321h268v-241h-268zm322 0h241v-241h-241zm27-402v-241c0-7-3-14-8-19-6-5-12-8-19-8h-54c-7 0-13 3-19 8-5 5-8 12-8 19v241c0 7 3 14 8 19 6 5 12 8 19 8h54c7 0 13-3 19-8 5-5 8-12 8-19zm321-54v1072c0 29-11 54-32 75s-46 32-75 32h-1179c-29 0-54-11-75-32s-32-46-32-75v-1072c0-29 11-54 32-75s46-32 75-32h107v-80c0-37 13-68 40-95s57-39 94-39h54c37 0 68 13 95 39 26 26 39 58 39 95v80h321v-80c0-37 13-69 40-95 26-26 57-39 94-39h54c37 0 68 13 94 39s40 58 40 95v80h107c29 0 54 11 75 32s32 46 32 75z\"></path>\r\n </svg>\r\n </button>\r\n }\r\n />\r\n </div>\r\n )}\r\n </header>\r\n <div className='configurator-box__content'>\r\n {translate('yourdeliverdays')}\r\n {delivery && delivery.websiteStringModeOfDelivery}\r\n </div>\r\n </section>\r\n );\r\n};\r\n\r\nexport default PanelDeliveryDate;","import React from 'react';\r\nimport { translate } from '../../Services/translation';\r\n\r\nconst Certificate = (props) => {\r\n const { labelKey, icon, certificateDescription } = props;\r\n const getIconPath = () => {\r\n return '/ui/images/sprites/be-group.svg#' + icon;\r\n };\r\n\r\n return (\r\n <section className='configurator-box'>\r\n <header>\r\n <svg className='configurator-box__icon'>\r\n <use href={getIconPath()}></use>\r\n </svg>\r\n <h4 className='configurator-box__title'>{translate(labelKey)}</h4>\r\n </header>\r\n <div className='configurator-box__content'>{translate(certificateDescription)}</div>\r\n </section>\r\n );\r\n};\r\n\r\nexport default Certificate;\r\n","import { translate } from '../../Services/translation';\r\n\r\nexport const validateInputs = (quantityRef, lengthRef) => {\r\n if (!quantityRef || !lengthRef) {\r\n return true;\r\n }\r\n\r\n if (!quantityRef || !quantityRef.current || !lengthRef || !lengthRef.current) {\r\n return;\r\n }\r\n\r\n for (let i = 0; i < quantityRef.current.length; i++) {\r\n const quantityInput = quantityRef.current[i];\r\n const lengthInput = lengthRef.current[i];\r\n\r\n if (quantityInput && lengthInput) {\r\n quantityInput.setCustomValidity('');\r\n lengthInput.setCustomValidity('');\r\n\r\n if (quantityInput.value === '' || !quantityInput.checkValidity()) {\r\n quantityInput.setCustomValidity(translate('cutting.cuttinginformation.quantity.validation'));\r\n quantityInput.reportValidity();\r\n return false;\r\n }\r\n\r\n if (lengthInput.value === '' || !lengthInput.checkValidity()) {\r\n lengthInput.setCustomValidity(translate('cutting.cuttinginformation.length.validation'));\r\n lengthInput.reportValidity();\r\n return false;\r\n }\r\n }\r\n }\r\n return true;\r\n};\r\n","import React, { Fragment, useState } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { getStackedItem } from '../../Services/ConfiguratorService';\r\nimport { translate } from '../../Services/translation';\r\nimport convertUnit from '../../Services/conversions';\r\nimport { currencyFormat } from '../../Services/formatting';\r\nimport { receive } from '../../Actions/Cart.action';\r\nimport { close } from '../../Actions/Configurator.action';\r\nimport { post } from '../../Services/http';\r\nimport { updateCustomizedMessage } from '../../Actions/CustomizedMessage.action';\r\nimport LoaderBlockContent from './../LoaderBlockContent';\r\nimport { validateInputs } from './validateCuttingInputs';\r\nimport { googleAnalyticsAddToCart } from '../../Services/googleAnalytics'\r\n\r\nconst PanelSubmit = ({ quantityRef, lengthRef }) => {\r\n const dispatch = useDispatch(),\r\n configurator = useSelector((state) => state.configurator),\r\n selectedTab = useSelector((state) => state.configurator.selectedTab),\r\n stackedPrices = useSelector((state) => state.configurator.stackedPrices),\r\n totalWeight = useSelector((state) => state.configurator.totalWeight),\r\n stackedItem = getStackedItem(stackedPrices, totalWeight),\r\n [isLoading, setIsLoading] = useState(false);\r\n\r\n const {\r\n id,\r\n selections,\r\n rules,\r\n baseUnitQuantity,\r\n quantitySelector,\r\n selectedUnit,\r\n deliveryDetails,\r\n orderRow,\r\n salesQuantity,\r\n disableButton,\r\n isStandAlone\r\n } = configurator;\r\n\r\n const isUpdateMode = orderRow ? true : false;\r\n const isButtonDisabled = () => {\r\n if (rules && rules.isCoil) {\r\n return disableButton != null ? disableButton : true;\r\n } else if (selections != null) {\r\n let selection = selections;\r\n let isConfigured = selectedTab !== 1;\r\n if (isConfigured) {\r\n if (selection.cutCode != null) {\r\n let selectedCutType = rules.cutTypes.filter((c) => c.code === selection.cutCode);\r\n\r\n if (selectedCutType.length > 0) {\r\n // Check conditions for button disabled based on selectedCutType and other properties\r\n }\r\n }\r\n }\r\n return false;\r\n } else {\r\n return false;\r\n }\r\n };\r\n\r\n const addToCart = (selectedTab) => {\r\n if (validateInputs(quantityRef, lengthRef)) {\r\n setIsLoading(true);\r\n const timingLabel = `adding to cart (${id})`;\r\n console.time(timingLabel);\r\n renderGoogleAnalytics();\r\n\r\n post('/api/configurator/save', {\r\n articleNumber: id,\r\n quantity: baseUnitQuantity,\r\n salesQuantity: salesQuantity,\r\n selectedUnit: selectedUnit || (quantitySelector && quantitySelector.selectedUnit.id),\r\n orderRow,\r\n data: selections,\r\n deliveryDetails: deliveryDetails,\r\n isConfigured: selectedTab !== 1,\r\n })\r\n .then((response) => response.json())\r\n .then((cart) => {\r\n if (isUpdateMode == false) {\r\n const miniCart = document.getElementsByClassName('cart__info--hidden');\r\n while (miniCart.length > 0) {\r\n miniCart[0].classList.remove('cart__info--hidden');\r\n }\r\n }\r\n dispatch(receive({ ...cart, addedProduct: id }));\r\n })\r\n .finally(() => {\r\n console.timeEnd(timingLabel);\r\n setIsLoading(false);\r\n if (!isStandAlone) {\r\n dispatch(close());\r\n }\r\n dispatch(updateCustomizedMessage(translate('checkout.customizedmessage.createline.update')));\r\n });\r\n }\r\n };\r\n\r\n const renderGrandTotal = () => {\r\n let grandTotal = 0;\r\n\r\n if (stackedItem && quantitySelector) {\r\n let pricingUnit = quantitySelector.quantityUnits.find((u) => u.unit === stackedPrices.pricingUnit);\r\n\r\n // let unit = convertUnit(baseUnitQuantity, quantitySelector.baseUnit, pricingUnit);\r\n let unit = baseUnitQuantity * convertUnit(1, quantitySelector.baseUnit, pricingUnit).toFixed(2);\r\n grandTotal = unit * stackedItem.price;\r\n }\r\n\r\n return currencyFormat.format(grandTotal);\r\n };\r\n\r\n const renderGoogleAnalytics = () => {\r\n const product = [\r\n {\r\n name: configurator.articleName,\r\n id: configurator.id,\r\n category: configurator.breadcrumbs,\r\n campaignProduct: configurator.isCampaignProduct,\r\n },\r\n ];\r\n googleAnalyticsAddToCart(product)\r\n };\r\n\r\n return (\r\n <Fragment>\r\n {isLoading && (\r\n <div className='be-group-inner-loading'>\r\n <LoaderBlockContent />\r\n </div>\r\n )}\r\n {!isLoading && (\r\n <div className={'panel-submit' + (selectedTab === 1 ? ' panel-submit--grid' : '')} >\r\n {selectedTab === 1 && (\r\n <div>\r\n <div className='panel-submit__total-price'>\r\n {renderGrandTotal()}\r\n </div>\r\n <div className='panel-submit__info'>\r\n {translate('cart.priceinfo')}\r\n </div>\r\n </div>\r\n )}\r\n {/*selections && selections.isConfigured == true && (\r\n <div>\r\n <div className='total-price price-text'>\r\n {translate('cart.priceconfigshow')}\r\n </div>\r\n\r\n <div className='shipping'>{translate('cart.priceinfo')}</div>\r\n </div>\r\n )*/}\r\n\r\n <div>\r\n <a className={'button button--orange button--wide'} onClick={() => { addToCart(selectedTab); }} >\r\n {translate(isUpdateMode ? 'cart.update' : 'cart.add')}\r\n </a>\r\n </div>\r\n </div>\r\n )}\r\n </Fragment>\r\n );\r\n};\r\n\r\nexport default PanelSubmit;\r\n","import React from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport { translate } from '../../Services/translation';\r\nimport StockDetails from './StockDetails';\r\n\r\nconst ConfiguratorStock = () => {\r\n const onHandModel = useSelector((state) => state.configurator.onHandModel),\r\n totalWeight = useSelector((state) => state.configurator.totalWeight),\r\n stackedPrices = useSelector((state) => state.configurator.stackedPrices),\r\n isStandAlone = useSelector((state) => state.configurator.isStandAlone),\r\n factorKg = stackedPrices ? stackedPrices.factorKg : null;\r\n\r\n if (!onHandModel) {\r\n return <div>{translate('config.onhand.missing')}</div>;\r\n }\r\n\r\n return (\r\n <div className='configurator-box'>\r\n <div className='configurator-box__content'>\r\n <div className='onhand'>\r\n <div className='onhand__title'>{translate('config.larger')}</div>\r\n <div>\r\n <StockDetails\r\n variantSystemId={onHandModel.variantSystemId}\r\n stockArticle={onHandModel}\r\n articleWeight={totalWeight}\r\n articleFactorKg={factorKg}\r\n isStandAlone={isStandAlone}\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default ConfiguratorStock;\r\n","import React from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport { translate } from '../../Services/translation';\r\n\r\nconst ConfiguratorProductDetails = ({ useLongName = false }) => {\r\n const configurator = useSelector((state) => state.configurator),\r\n name = useSelector((state) => state.configurator.articleName),\r\n longName = useSelector((state) => state.configurator.longArticleName),\r\n description = useSelector((state) => state.configurator.description),\r\n imgUrl = useSelector((state) => state.configurator.articleImageURL),\r\n { isCampaignProduct, isEnvironmentalFriendly, isLoggedIn } = configurator;\r\n\r\n return (\r\n <div className='configurator-details__selected-product'>\r\n <div className='product__image'>\r\n <figure>\r\n <img src={imgUrl} alt='product' />\r\n {isCampaignProduct && isLoggedIn && (\r\n <div className='product__campaign-banner product__campaign-banner__side'>\r\n {translate('product.campaignbanner')}\r\n </div>\r\n )}\r\n {isEnvironmentalFriendly && isLoggedIn && (\r\n <div className='env-tag-outer'>\r\n <span className='env-tooltip--data'>\r\n <span className='data-tooltip' data-tip={translate('product.environmentalfriendly.hover')} data-html='true'\r\n >\r\n <svg className='enviroment-image'>\r\n <use\r\n href={`/ui/images/sprites/be-group.svg#environmental-friendly`}\r\n ></use>\r\n </svg>\r\n </span>\r\n </span>\r\n </div>\r\n )}\r\n </figure>\r\n </div>\r\n <div>\r\n <h1 className='configurator-details__header'>\r\n {useLongName ? longName : name}\r\n </h1>\r\n <p>{description}</p>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default ConfiguratorProductDetails;\r\n","import React from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { close } from '../../../Actions/Configurator.action';\r\nimport StackedPrices from '../StackedPrices';\r\nimport ProductQuantitySelector from '../ProductQuantitySelector';\r\nimport PanelGoodsMarking from '../PanelGoodsMarking';\r\nimport PanelDeliveryDate from '../PanelDeliveryDate';\r\nimport Certificate from '../Certificate';\r\nimport PanelSubmit from '../PanelSubmit';\r\nimport ConfiguratorStock from '../../Stock/ConfiguratorStock';\r\nimport ConfiguratorProductDetails from '../ConfiguratorProductDetails';\r\nimport closeIcon from '../../../../images/closeDialogIcon.svg';\r\n\r\nconst GeneralPane = () => {\r\n const dispatch = useDispatch();\r\n\r\n return (\r\n <div className='configurator-pane configurator-pane--general'>\r\n <a className='configurator-close-button' onClick={() => dispatch(close())} >\r\n <img src={closeIcon} />\r\n </a>\r\n <ConfiguratorProductDetails useLongName={true} />\r\n <ConfiguratorStock />\r\n <StackedPrices />\r\n <ProductQuantitySelector />\r\n <PanelGoodsMarking\r\n icon='marking'\r\n labelKey='configurator.goodsmarking.key'\r\n setting='goodsMarking'\r\n ></PanelGoodsMarking>\r\n <PanelDeliveryDate\r\n icon='delivery'\r\n labelKey='configurator.deliveryDate.key'\r\n setting='deliveryDate'\r\n ></PanelDeliveryDate>\r\n <Certificate\r\n icon='certificate'\r\n labelKey='configurator.certificate.title'\r\n certificateDescription='configurator.certificate.description'\r\n ></Certificate>\r\n <PanelSubmit />\r\n </div>\r\n );\r\n};\r\n\r\nexport default GeneralPane;\r\n","import React, { useState, useEffect } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { translate } from '../../Services/translation';\r\nimport orangePaintingBrush from '../../../images/orangePaintingBrush.svg';\r\nimport { setValues } from '../../Actions/Configurator.action';\r\nimport { googleAnalyticsProductConfigurator } from '../../Services/googleAnalytics';\r\n\r\nconst PanelBlasting = () => {\r\n const dispatch = useDispatch(),\r\n configurator = useSelector((state) => state.configurator),\r\n { id, rules, selections } = configurator;\r\n\r\n const updateSetting = (values) => {\r\n dispatch(setValues(values));\r\n };\r\n\r\n const [toggle, setToggle] = useState(false);\r\n\r\n const setBlastingColorCode = (colorCode, name) => {\r\n if (colorCode == -1) {\r\n updateSetting({ blastingDetails: { colorCode: colorCode, }, });\r\n\r\n googleAnalyticsProductConfigurator('blastPaintCode', ' ', id);\r\n }\r\n\r\n if (rules.colors.length > 0) {\r\n let color = rules.colors.filter((c) => c.colorCode == colorCode);\r\n if (color.length >= 1) {\r\n let thickness = color[0].thicknessOptions;\r\n updateSetting({\r\n blastingDetails: {\r\n blastPaintCode: thickness[0].blastPaintCode,\r\n colorCode: colorCode,\r\n isPainting: thickness[0].isPainting,\r\n name: thickness[0].isPainting ? thickness[0].name : 'Blasting',\r\n },\r\n });\r\n\r\n googleAnalyticsProductConfigurator('blastPaintColor', color[0].name, id);\r\n }\r\n }\r\n };\r\n\r\n const setThickness = (color, thickness) => {\r\n let thicknessName = (thickness.name != '' ? thickness.name : 'None');\r\n updateSetting({\r\n blastingDetails: {\r\n blastPaintCode: thickness.blastPaintCode,\r\n colorCode: color.colorCode,\r\n isPainting: thickness.isPainting,\r\n name: color.name + ' ' + thicknessName,\r\n },\r\n });\r\n\r\n googleAnalyticsProductConfigurator('thickness', thicknessName);\r\n };\r\n\r\n const getColorType = () => {\r\n return selections.blastingDetails != null && selections.blastingDetails.colorCode != null ? selections.blastingDetails.colorCode : null;\r\n };\r\n\r\n const getBlastingPaintCode = (blastPaintCode, colorCode) => {\r\n return selections.blastingDetails != null && selections.blastingDetails.blastPaintCode != null && selections.blastingDetails.colorCode > -1\r\n ? selections.blastingDetails.blastPaintCode === blastPaintCode && selections.blastingDetails.colorCode === colorCode\r\n : '';\r\n };\r\n\r\n const getSelectedText = () => {\r\n let colorType = getColorType();\r\n let selected = rules.colors.filter((c) => c.colorCode == colorType)[0] != null\r\n ? translate('blasting.' + rules.colors.filter((c) => c.colorCode == colorType)[0].name.toLowerCase().replace(/\\s+/g, ''))\r\n : translate('blasting.none');\r\n let blastingSize = getSelectedBlastingSize(colorType);\r\n\r\n return (selected + (blastingSize ? ' ' + getSelectedBlastingSize(colorType) : ''));\r\n };\r\n\r\n const getSelectedBlastingSize = (colorType) => {\r\n const selectedColor = rules.colors.filter((c) => c.colorCode == colorType)[0];\r\n if (selectedColor != undefined || selectedColor != null) {\r\n const selectedBlastCode1 = (selections.blastingDetails && selections.blastingDetails.blastPaintCode) || '';\r\n const selectedBlastingSize = selectedColor.thicknessOptions.filter((c) => c.blastPaintCode == selectedBlastCode1)[0].name;\r\n return selectedBlastingSize;\r\n }\r\n };\r\n\r\n if (rules.allowBlasting !== true && rules.allowPainting !== true) {\r\n return null;\r\n }\r\n\r\n return (\r\n <>\r\n <section className='configurator-box'>\r\n <header>\r\n <img className='configurator-box__icon' src={orangePaintingBrush} />\r\n <h4 className='configurator-box__title'>\r\n {translate('blasting.title')}\r\n </h4>\r\n <details className='config-details config-details--no-padding config-details--right-align config-details--link'>\r\n <summary onClick={() => { setToggle(!toggle); }}>\r\n <span>{getSelectedText()}</span>\r\n <img className='config-details__icon' src='/ui/images/arrow-down.svg' />\r\n </summary>\r\n </details>\r\n </header>\r\n {toggle && (\r\n <div className='configurator-box__content'>\r\n <div className='accordion-panel__panel_content'>\r\n <div className='panel-blasting'>\r\n <div className='panel-blasting__select-blasting'>\r\n {rules.allowBlasting && (\r\n <div className={getColorType() == -1 ? 'panel-blasting__select-blasting__select-mode selected-blasting select-nothing' : 'panel-blasting__select-blasting__select-mode select-nothing'}\r\n onClick={() => setBlastingColorCode(-1)} >\r\n <div className='select-tick'>\r\n <svg>\r\n <use href='/ui/images/sprites/be-group.svg#tick-orange'></use>\r\n </svg>\r\n </div>\r\n <div className='blasting-image'></div>\r\n <div className='blasting-content'>\r\n <h4>{translate('blasting.none')}</h4>\r\n </div>\r\n </div>\r\n )}\r\n\r\n {rules.allowPainting && rules.colors.length > 0 &&\r\n rules.colors.map((value, index) => (\r\n <div key={`model${index}`}\r\n className={value.colorCode == getColorType()\r\n ? `panel-blasting__select-blasting__select-mode selected-blasting select_color__${value.name.toLowerCase().replace(/\\s+/g, '')}`\r\n : `panel-blasting__select-blasting__select-mode select_color__${value.name.toLowerCase().replace(/\\s+/g, '')}`}\r\n onClick={() => setBlastingColorCode(value.colorCode, value.name)}>\r\n <div className='select-tick'>\r\n <svg>\r\n <use href='/ui/images/sprites/be-group.svg#tick-orange'></use>\r\n </svg>\r\n </div>\r\n <div className='blasting-image'></div>\r\n <div className='blasting-content'>\r\n <h4>\r\n {translate('blasting.' + value.name.toLowerCase().replace(/\\s+/g, ''))}\r\n </h4>\r\n {value.thicknessOptions.length > 1 &&\r\n value.thicknessOptions.map(\r\n (thickness, innerIndex) => (\r\n <div className='select-value' key={`childModel${innerIndex}`} >\r\n <label htmlFor={`${value.name.toLowerCase().replace(/\\s+/g, '')}_${thickness.blastPaintCode}_${innerIndex}`}>\r\n {thickness.name != '' ? thickness.name : 'None'}\r\n <input name='thicknes' checked={getBlastingPaintCode(thickness.blastPaintCode, value.colorCode)} type='radio'\r\n id={`${value.name.toLowerCase().replace(/\\s+/g, '')}_${thickness.blastPaintCode}_${innerIndex}`}\r\n onChange={(event) => setThickness(value, thickness)} value={`${thickness.blastPaintCode}_${value.colorCode}`}\r\n ></input>\r\n </label>\r\n </div>\r\n )\r\n )}\r\n </div>\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n </section>\r\n </>\r\n );\r\n};\r\n\r\nexport default PanelBlasting;\r\n","import React, { useState, useEffect, Fragment } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { translate } from '../../Services/translation';\r\nimport { googleAnalyticsProductConfigurator } from '../../Services/googleAnalytics';\r\nimport { setValues, setCuttingDetails } from '../../Actions/Configurator.action';\r\n\r\nconst PanelMarking = ({ id, IsPopup }) => {\r\n const dispatch = useDispatch(),\r\n articleNumber = useSelector((state) => state.configurator.id),\r\n configurator = useSelector((state) => state.configurator),\r\n { selections, rules } = configurator;\r\n\r\n let cuttingDetail = selections.cuttingDetails.find((x) => x.id == id);\r\n let marking = cuttingDetail && cuttingDetail.marking;\r\n const [workPhaseMarkingText, setWorkPhaseMarkingText] = useState((marking && marking.workPhaseMarkingText) || ''),\r\n [drawingNumber, setDrawingNumber] = useState((marking && marking.drawingNumber) || ''),\r\n [workPhaseMarkingChargeNumber, setWorkPhaseMarkingChargeNumber] = useState((marking && marking.workPhaseMarkingChargeNumber) || false),\r\n [goodsMarking, setGoodsMarking] = useState((marking && marking.goodsMarking) || '');\r\n\r\n useEffect(() => {\r\n let data = {\r\n drawingNumber,\r\n workPhaseMarkingChargeNumber,\r\n workPhaseMarkingText,\r\n goodsMarking,\r\n description: (marking && marking.description) || '',\r\n inkjetIntegrationFlagIfCuttingOperation: rules && rules.inkjetIntegrationFlagIfCuttingOperation,\r\n };\r\n\r\n if (drawingNumber || workPhaseMarkingChargeNumber || workPhaseMarkingText || goodsMarking) {\r\n data.description = translate('marking.description');\r\n\r\n if (drawingNumber) {\r\n data.description += ` - ${drawingNumber}`;\r\n }\r\n\r\n if (workPhaseMarkingChargeNumber) {\r\n data.description += ` - ${translate('checkout.cart.specification.workphasemarkingchargenumber.true')}`;\r\n }\r\n\r\n if (workPhaseMarkingText) {\r\n data.description += ` - ${workPhaseMarkingText}`;\r\n }\r\n if (goodsMarking) {\r\n data.description += ` - ${goodsMarking}`;\r\n }\r\n }\r\n\r\n if (id) {\r\n dispatch(setCuttingDetails(id, 'marking', data));\r\n } else {\r\n dispatch(setValues({ marking: data }));\r\n }\r\n }, [workPhaseMarkingText, drawingNumber, workPhaseMarkingChargeNumber, goodsMarking]);\r\n\r\n const updateInkJetIntegrationFlag = (value) => {\r\n setWorkPhaseMarkingChargeNumber(value);\r\n googleAnalyticsProductConfigurator('workPhaseMarkingChargeNumber', value.toString(), articleNumber);\r\n\r\n if (value === true) {\r\n setWorkPhaseMarkingText('');\r\n }\r\n };\r\n\r\n const updateWorkPhaseMarkingText = (value, isBlur) => {\r\n setWorkPhaseMarkingText(value);\r\n\r\n if (isBlur) {\r\n googleAnalyticsProductConfigurator('workPhaseMarkingText', value.toString(), articleNumber);\r\n }\r\n };\r\n\r\n const updateDrawingsNumber = (value, isBlur) => {\r\n setDrawingNumber(value);\r\n\r\n if (isBlur) {\r\n googleAnalyticsProductConfigurator('drawingNumber', value.toString(), articleNumber);\r\n }\r\n };\r\n const updateGoodsMarking = (value, isBlur) => {\r\n setGoodsMarking(value);\r\n\r\n if (isBlur) {\r\n googleAnalyticsProductConfigurator('goodsMarking', value.toString(), articleNumber);\r\n }\r\n };\r\n\r\n return (\r\n <div className={'configurator-box' + (IsPopup ? ' configurator-box--popup' : '')}>\r\n <header>\r\n <h4 className='configurator-box__title'>\r\n {translate('beamtype.markingtitle')}\r\n </h4>\r\n </header>\r\n\r\n <div className='configurator-box__content'>\r\n <label className='configurator-input-duo'>\r\n <span>{translate('beamtype.drwaingnumber')}</span>\r\n <input type='text' className='configurator-input' placeholder={translate('blasting.none')} value={drawingNumber}\r\n onChange={(event) => { updateDrawingsNumber(event.target.value, false); }} onBlur={(event) => { updateDrawingsNumber(event.target.value, true); }}\r\n ></input>\r\n </label>\r\n\r\n <header>\r\n <h4 className='configurator-box__title'>\r\n {translate('beamtype.printmarkingdetails')}\r\n </h4>\r\n </header>\r\n\r\n <label className='configurator-input-duo'>\r\n <span>{translate('beamtype.medchargenumber')}</span>\r\n <span className='configurator-checkbox'>\r\n {translate('beamtype.yeslabel')}\r\n <input type='checkbox' checked={workPhaseMarkingChargeNumber > 0} onChange={(event) => updateInkJetIntegrationFlag(event.target.checked)}\r\n ></input>\r\n </span>\r\n </label>\r\n\r\n <label className='configurator-input-duo'>\r\n <span>{translate('beamtype.medtext')}</span>\r\n <input type='text' className='configurator-input' placeholder={translate('beamtype.angletext')} disabled={workPhaseMarkingChargeNumber > 0}\r\n value={workPhaseMarkingText} onChange={(event) => { updateWorkPhaseMarkingText(event.target.value, false); }}\r\n onBlur={(event) => { updateWorkPhaseMarkingText(event.target.value, true); }} />\r\n </label>\r\n {IsPopup &&\r\n <Fragment>\r\n <div className='configurator-input-duo configurator-input-duo--goods'>\r\n <span>\r\n <svg className='configurator-box__icon'>\r\n <use href='/ui/images/sprites/be-group.svg#marking'></use>\r\n </svg>\r\n {translate('configurator.goodsmarking.key')}\r\n </span>\r\n <input type='text'\r\n className='configurator-input' placeholder={translate('beamtype.placeholder.goodsmarking')} value={goodsMarking}\r\n onChange={(event) => { updateGoodsMarking(event.target.value, false); }} onBlur={(event) => { updateGoodsMarking(event.target.value, true); }} />\r\n </div>\r\n <div>{translate('configurator.goodsmarking.orderlinemessage')}</div>\r\n </Fragment>\r\n }\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default PanelMarking;\r\n","import React, { Fragment } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { translate } from '../../Services/translation';\r\nimport StackedPrices from './StackedPrices';\r\nimport PanelSubmit from './PanelSubmit';\r\nimport ConfiguratorProductDetails from './ConfiguratorProductDetails';\r\nimport { changeProductServiceTab } from '../../Actions/Configurator.action';\r\nimport ProductQuantitySelector from './ProductQuantitySelector';\r\nimport PanelBlasting from './PanelBlasting';\r\nimport PanelMarking from './PanelMarking';\r\nimport PanelGoodsMarking from './PanelGoodsMarking';\r\nimport PanelDeliveryDate from './PanelDeliveryDate';\r\n\r\nimport closeIcon from '../../../images/closeDialogIcon.svg';\r\n\r\nconst ProductServiceBlasting = () => {\r\n const dispatch = useDispatch();\r\n\r\n return (\r\n <Fragment>\r\n <a className='configurator-close-button' onClick={() => dispatch(changeProductServiceTab(0))}><img src={closeIcon} /></a>\r\n <div className='configurator-header'>\r\n <h4>{translate('blasting.title')}</h4>\r\n </div>\r\n <ConfiguratorProductDetails useLongName={true} />\r\n <StackedPrices />\r\n <ProductQuantitySelector />\r\n <PanelBlasting />\r\n <PanelMarking IsPopup={false} />\r\n <PanelGoodsMarking\r\n icon='marking'\r\n labelKey='configurator.goodsmarking.key'\r\n setting='goodsMarking'\r\n ></PanelGoodsMarking>\r\n <PanelDeliveryDate\r\n icon='delivery'\r\n labelKey='configurator.deliveryDate.key'\r\n setting='deliveryDate'\r\n ></PanelDeliveryDate>\r\n <PanelSubmit />\r\n </Fragment>\r\n );\r\n};\r\n\r\nexport default ProductServiceBlasting;\r\n","const getCornerRules = (type, shape) => {\r\n let key = `${type}-${shape}`,\r\n background = `bg-${key}`,\r\n boxHeight = 140;\r\n\r\n const smallBoxes = ['N-C', 'P-C', 'R-C', 'F-C', 'I-C', 'G-LLC', 'I-LLC', 'F-LLC', 'N-LLC', 'P-LLC', 'Q-LLC', 'R-LLC', 'F-R', 'M-R', 'N-R', 'F-CR', 'M-CR', 'N-CR', 'F-RF', 'M-RF', 'N-RF', 'F-CRF', 'M-CRF', 'N-CRF', 'F-U', 'I-U', 'I-U', 'N-U', 'R-U', 'F-LS', 'G-LS', 'H-LS', 'I-LS', 'N-LS', 'P-LS', 'Q-LS', 'R-LS'];\r\n\r\n if (smallBoxes.includes(key)) {\r\n boxHeight = 70;\r\n }\r\n\r\n let ruleset = {\r\n 'A': {\r\n cornerA: -1,\r\n cornerB: -1\r\n },\r\n 'B': {\r\n cornerA: 4,\r\n cornerB: -1\r\n },\r\n 'C': {\r\n cornerA: 1,\r\n cornerB: -1\r\n },\r\n 'D': {\r\n cornerA: 3,\r\n cornerB: -1\r\n },\r\n 'E': {\r\n cornerA: 2,\r\n cornerB: -1\r\n },\r\n 'F': {\r\n cornerA: 4,\r\n cornerB: -1\r\n },\r\n 'G': {\r\n cornerA: 3,\r\n cornerB: -1\r\n },\r\n 'H': {\r\n cornerA: 2,\r\n cornerB: -1\r\n },\r\n 'I': {\r\n cornerA: 1,\r\n cornerB: -1\r\n },\r\n 'J': {\r\n cornerA: 1,\r\n cornerB: 3\r\n },\r\n 'K': {\r\n cornerA: 4,\r\n cornerB: 2\r\n },\r\n 'L': {\r\n cornerA: 4,\r\n cornerB: 3\r\n },\r\n 'M': {\r\n cornerA: 1,\r\n cornerB: 2\r\n },\r\n 'N': {\r\n cornerA: 4,\r\n cornerB: 2\r\n },\r\n 'P': {\r\n cornerA: 4,\r\n cornerB: 3\r\n },\r\n 'Q': {\r\n cornerA: 1,\r\n cornerB: 3\r\n },\r\n 'R': {\r\n cornerA: 1,\r\n cornerB: 2\r\n }\r\n }\r\n\r\n return {\r\n cornerA: ruleset[type].cornerA,\r\n cornerB: ruleset[type].cornerB,\r\n boxHeight,\r\n background\r\n };\r\n}\r\n\r\nexport default getCornerRules;","import React, { Fragment } from 'react';\r\nimport { lerp } from '../../Services/utilities';\r\nimport { translate } from '../../Services/translation';\r\n\r\nconst PanelCuttingImage = ({ id, rules, angleA, angleB, focusA, focusB }) => {\r\n const className = 'cut-image';\r\n const margin = 10;\r\n const box = {\r\n x: 10,\r\n y: 200,\r\n width: 1180,\r\n };\r\n const viewBox = {\r\n x: 0,\r\n y: 0,\r\n width: 1200,\r\n height: 400,\r\n };\r\n\r\n const calculateCorner = (corner, angle, box) => {\r\n if (corner > 0) {\r\n let result = calculateAngle(angle);\r\n\r\n if (corner === 1) {\r\n box.c4.x += result;\r\n } else if (corner === 4) {\r\n box.c1.x += result;\r\n } else if (corner === 3) {\r\n box.c2.x -= result;\r\n } else if (corner === 2) {\r\n box.c3.x -= result;\r\n }\r\n }\r\n };\r\n\r\n const calculateAngle = (angle) => {\r\n let angleRad = toRadian(angle),\r\n angle2Rad = toRadian(90 - angle),\r\n hyp = rules.boxHeight / Math.sin(angle2Rad);\r\n\r\n return hyp * Math.sin(angleRad);\r\n };\r\n\r\n const toRadian = (angle) => {\r\n return (angle / 180) * Math.PI;\r\n };\r\n\r\n const getCornerPosition = (corner) => {\r\n let basicBox = getBasicBox(box.x, box.y);\r\n return basicBox['c' + corner];\r\n };\r\n\r\n const getBasicBox = (x, y) => {\r\n return {\r\n c1: { x: x, y: y },\r\n c2: { x: x + box.width, y: y },\r\n c3: { x: x + box.width, y: y + rules.boxHeight },\r\n c4: { x: x, y: y + rules.boxHeight },\r\n };\r\n };\r\n\r\n const getCalcBox = (x, y) => {\r\n let basicBox = getBasicBox(x, y),\r\n calcBox = getBasicBox(x, y);\r\n\r\n calculateCorner(rules.cornerA, angleA, calcBox);\r\n calculateCorner(rules.cornerB, angleB, calcBox);\r\n\r\n return calcBox;\r\n };\r\n\r\n const getBoxPath = (calcBox) => {\r\n return `M${calcBox.c1.x} ${calcBox.c1.y} ${calcBox.c2.x} ${calcBox.c2.y} ${calcBox.c3.x} ${calcBox.c3.y} ${calcBox.c4.x} ${calcBox.c4.y}Z`;\r\n };\r\n\r\n const getFocusClass = () => {\r\n if (focusA) {\r\n return ' angle-focus angle-focus--a';\r\n } else if (focusB) {\r\n return ' angle-focus angle-focus--b';\r\n }\r\n\r\n return '';\r\n };\r\n\r\n const getTextPosition = (corner, angle) => {\r\n let basicBox = getBasicBox(box.x, box.y),\r\n calcBox = getBasicBox(box.x, box.y);\r\n\r\n calculateCorner(corner, angle, calcBox);\r\n\r\n if (corner === 4) {\r\n let m = lerp(0.5, basicBox.c1.x, calcBox.c1.x);\r\n\r\n return {\r\n x: m > 40 ? m : 40,\r\n y: basicBox.c1.y - 14,\r\n };\r\n } else if (corner === 3) {\r\n let m = lerp(0.5, basicBox.c2.x, calcBox.c2.x);\r\n\r\n return {\r\n x: m < basicBox.c2.x - 30 ? m : basicBox.c2.x - 30,\r\n y: basicBox.c2.y - 14,\r\n };\r\n } else if (corner === 2) {\r\n let m = lerp(0.5, basicBox.c3.x, calcBox.c3.x);\r\n\r\n return {\r\n x: m < basicBox.c3.x - 30 ? m : basicBox.c3.x - 30,\r\n y: basicBox.c3.y + 56,\r\n };\r\n } else if (corner === 1) {\r\n let m = lerp(0.5, basicBox.c4.x, calcBox.c4.x);\r\n\r\n return {\r\n x: m > 40 ? m : 40,\r\n y: basicBox.c4.y + 56,\r\n };\r\n }\r\n\r\n return cornerPosition;\r\n };\r\n\r\n return (\r\n <svg className={className + getFocusClass()} viewBox={`${viewBox.x} ${viewBox.y} ${viewBox.width} ${viewBox.height}`} >\r\n <defs>\r\n <clipPath id={'canvas-cutoff-' + id}>\r\n <rect\r\n x={viewBox.x}\r\n y={viewBox.y}\r\n width={viewBox.width}\r\n height={box.y + rules.boxHeight}\r\n />\r\n </clipPath>\r\n <clipPath id={'box-cutoff-' + id}>\r\n <rect\r\n x={box.x}\r\n y={box.y}\r\n width={box.width}\r\n height={rules.boxHeight}\r\n />\r\n </clipPath>\r\n <clipPath id={'calcbox-cutoff-' + id}>\r\n <path d={getBoxPath(getCalcBox(0, 0))} />\r\n </clipPath>\r\n </defs>\r\n\r\n {rules.background && (\r\n <use href='#cut-bg' style={{ color: '#dadce0' }} clipPath={'url(#canvas-cutoff-' + id + ')'} />\r\n )}\r\n\r\n {rules.cornerA > 0 && (\r\n <circle\r\n className='angle-circle angle-circle--a'\r\n cx={getCornerPosition(rules.cornerA).x}\r\n cy={getCornerPosition(rules.cornerA).y}\r\n r={rules.boxHeight * 0.6}\r\n fill='transparent'\r\n clipPath={'url(#box-cutoff-' + id + ')'}\r\n strokeWidth='5'\r\n />\r\n )}\r\n\r\n {rules.cornerB > 0 && (\r\n <circle\r\n className='angle-circle angle-circle--b'\r\n cx={getCornerPosition(rules.cornerB).x}\r\n cy={getCornerPosition(rules.cornerB).y}\r\n r={rules.boxHeight * 0.6}\r\n fill='transparent'\r\n clipPath={'url(#box-cutoff-' + id + ')'}\r\n strokeWidth='5'\r\n />\r\n )}\r\n\r\n <use\r\n x={box.x}\r\n y={box.y}\r\n href={'/ui/images/sprites/be-cut-pattern.svg#' + rules.background}\r\n className='beam-box-inner'\r\n clipPath={'url(#calcbox-cutoff-' + id + ')'}\r\n />\r\n <path\r\n d={getBoxPath(getCalcBox(box.x, box.y))}\r\n className='beam-box'\r\n fill='transparent'\r\n strokeWidth='5'\r\n />\r\n\r\n {rules.cornerA > 0 && (\r\n <text\r\n textAnchor='middle'\r\n className='svg-text svg-text--a'\r\n x={getTextPosition(rules.cornerA, angleA).x}\r\n y={getTextPosition(rules.cornerA, angleA).y}\r\n >\r\n a\r\n </text>\r\n )}\r\n\r\n {rules.cornerB > 0 && (\r\n <text\r\n textAnchor='middle'\r\n className='svg-text svg-text--b'\r\n x={getTextPosition(rules.cornerB, angleB).x}\r\n y={getTextPosition(rules.cornerB, angleB).y}\r\n >\r\n b\r\n </text>\r\n )}\r\n </svg>\r\n );\r\n};\r\n\r\nexport default PanelCuttingImage;\r\n","import React, { Fragment, useEffect, useState } from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport getCornerRules from '../../Services/rulesets';\r\nimport PanelCuttingImage from './PanelCuttingImage';\r\nimport { translate } from '../../Services/translation';\r\nimport { googleAnalyticsProductConfigurator } from '../../Services/googleAnalytics';\r\n\r\nconst PanelBeamCuttingSvgAlt = ({ id, onClick, items, cutType, shape }) => {\r\n const articleNumber = useSelector((state) => state.configurator.id);\r\n const [state, setState] = useState({\r\n showAngleAerror: false,\r\n showAngleBerror: false,\r\n focusAngleA: false,\r\n focusAngleB: false,\r\n });\r\n const [selectedItem, setSelectedItem] = useState(items.find((i) => i.code === cutType.cutCode));\r\n\r\n useEffect(() => {\r\n if (!cutType.cutCode && items.length > 0) {\r\n selectBeamType(0);\r\n } else {\r\n setSelectedItem(items.find((i) => i.code === cutType.cutCode));\r\n }\r\n }, [cutType]);\r\n\r\n const selectBeamType = (index) => {\r\n if (cutType.cutCode !== items[index].code) {\r\n onClick('cutAngleA', null);\r\n onClick('cutAngleB', null);\r\n onClick('cutCode', items[index].code);\r\n setSelectedItem(items[index]);\r\n googleAnalyticsProductConfigurator('selectedBeamType', items[index].type.toString(), articleNumber);\r\n } else {\r\n let selectedItem = items[index];\r\n onClick('cutCode', selectedItem.code);\r\n setSelectedItem(selectedItem);\r\n }\r\n };\r\n\r\n const updateMaxAngleA = (event, isBlur) => {\r\n setState({ ...state, showAngleAerror: false });\r\n let { value, min, max } = event.target;\r\n if (value == '') {\r\n setState({ ...state, showAngleAerror: true });\r\n }\r\n value = Math.max(Number(min), Math.min(Number(max), Number(value)));\r\n onClick('cutAngleA', value);\r\n\r\n if (isBlur) {\r\n googleAnalyticsProductConfigurator('cutAngleA', value.toString(), articleNumber);\r\n }\r\n\r\n };\r\n\r\n const updateMaxAngleB = (event, isBlur) => {\r\n setState({ ...state, showAngleBerror: false });\r\n let { value, min, max } = event.target;\r\n if (value == '') {\r\n setState({ ...state, showAngleBerror: true });\r\n }\r\n value = Math.max(Number(min), Math.min(Number(max), Number(value)));\r\n onClick('cutAngleB', value);\r\n\r\n if (isBlur) {\r\n googleAnalyticsProductConfigurator('cutAngleB', value.toString(), articleNumber);\r\n }\r\n };\r\n\r\n const getCutAngle = (type, fallback) => {\r\n let propertyName = `cutAngle${type}`;\r\n\r\n if (!cutType[propertyName] && fallback) {\r\n return fallback;\r\n }\r\n\r\n return cutType[propertyName] ? cutType[propertyName] : '';\r\n };\r\n\r\n const getPlaceHolderValue = (value) => {\r\n return `0-${value}°`;\r\n };\r\n\r\n const getIconShapeIcon = (rules) => {\r\n let left = 0,\r\n right = 0;\r\n\r\n if (rules.cornerA > 0) {\r\n switch (rules.cornerA) {\r\n case 1:\r\n left = 2;\r\n break;\r\n case 4:\r\n left = 1;\r\n break;\r\n case 2:\r\n right = 2;\r\n break;\r\n case 3:\r\n right = 1;\r\n break;\r\n }\r\n }\r\n\r\n if (rules.cornerB > 0 && right === 0) {\r\n right = rules.cornerB == 2 ? 2 : 1;\r\n }\r\n\r\n return `${left}-${right}`;\r\n };\r\n\r\n const setFocus = (propName, boolValue) => {\r\n setState({ ...state, [propName]: boolValue, });\r\n };\r\n\r\n return (\r\n <Fragment>\r\n <ul className={'beam-selection ' + (items.length % 2 == 1 ? 'beam-selection--odd' : 'beam-selection--even')}\r\n >\r\n {items.length > 0 && items.map((value, index) => (\r\n <li key={'beam-' + index}>\r\n <a className={'beam-link' + (selectedItem && selectedItem.code === value.code ? ' beam-link--selected' : '')}\r\n onClick={(e) => selectBeamType(index)} >\r\n <span className='code-number'>{value.code}</span>\r\n <svg className='cut-icon' viewBox='0 0 360 120'>\r\n <use\r\n href={`/ui/images/sprites/be-cut-shapes.svg#cut-shape-${value.code}-${shape}`}\r\n ></use>\r\n </svg>\r\n <svg className='cut-icon-shape'>\r\n <use\r\n href={`/ui/images/sprites/be-cut-icons.svg#cut-icon-${getIconShapeIcon(getCornerRules(value.code, shape))}`}\r\n ></use>\r\n </svg>\r\n </a>\r\n </li>\r\n ))}\r\n </ul>\r\n {selectedItem && (\r\n <div className='beamItems beamItems--full'>\r\n {cutType && (\r\n <div className='beam_angle_image'>\r\n <PanelCuttingImage\r\n id={id}\r\n code={selectedItem.code}\r\n rules={getCornerRules(selectedItem.code, shape)}\r\n angleA={getCutAngle('A', Math.round(selectedItem.maxAngleA / 2))}\r\n angleB={getCutAngle('B', Math.round(selectedItem.maxAngleB / 2))}\r\n focusA={state.focusAngleA}\r\n focusB={state.focusAngleB}\r\n ></PanelCuttingImage>\r\n </div>\r\n )}\r\n <div className='cutting_angles'>\r\n {selectedItem.maxAngleA != -1 && (\r\n <div className='angle-a'>\r\n <span>{translate('beamtype.maxanglea')}</span>\r\n <span className='error'>*</span>\r\n <span>\r\n <input type='number' min='0' max={selectedItem.maxAngleA} placeholder={getPlaceHolderValue(selectedItem.maxAngleA)} value={getCutAngle('A')}\r\n onChange={(event) => { updateMaxAngleA(event, false); }} onFocus={() => { setFocus('focusAngleA', true); }}\r\n onBlur={(event) => { updateMaxAngleA(event, true); setFocus('focusAngleA', false); }}\r\n ></input>\r\n </span>\r\n </div>\r\n )}\r\n {selectedItem.maxAngleB != -1 && (\r\n <div className='angle-b'>\r\n <span> {translate('beamtype.maxangleb')}</span>\r\n <span className='error'>*</span>\r\n <input type='number' max={selectedItem.maxAngleB} min='0' placeholder={getPlaceHolderValue(selectedItem.maxAngleB)} value={getCutAngle('B')}\r\n onChange={(event) => { updateMaxAngleB(event, false); }} onFocus={() => { setFocus('focusAngleB', true); }}\r\n onBlur={(event) => { updateMaxAngleB(event, true); setFocus('focusAngleB', false); }}\r\n ></input>\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n )}\r\n </Fragment>\r\n );\r\n};\r\n\r\nexport default PanelBeamCuttingSvgAlt;\r\n","import React, { Fragment, useState } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { translate } from '../../Services/translation';\r\nimport PanelBeamCuttingSvgAlt from './PanelBeamCuttingSvgAlt';\r\nimport { setCuttingDetails } from '../../Actions/Configurator.action';\r\n\r\nconst PanelBeam = ({ id, currentCutType }) => {\r\n const [selectedBeamType, setSelectedBeamType] = useState(1);\r\n const configurator = useSelector((state) => state.configurator);\r\n const { erpVariantId, rules, selections } = configurator;\r\n\r\n let cuttingDetail = selections.cuttingDetails.find((x) => x.id == id);\r\n const dispatch = useDispatch();\r\n const [cutType, setCutType] = useState(cuttingDetail.cutType || {});\r\n\r\n const setTab = (type) => {\r\n setCutType({});\r\n //change('cutCode', null);\r\n setSelectedBeamType(type);\r\n };\r\n\r\n const getCutDescription = () => {\r\n let description = translate('panelbeam.description.cutcode') + cutType.cutCode;\r\n\r\n if (cutType.cutAngleA) {\r\n description += ', ' + translate('panelbeam.description.cutanglea') + cutType.cutAngleA + translate('panelbeam.description.delimiter');\r\n }\r\n\r\n if (cutType.cutAngleB) {\r\n description += ', ' + translate('panelbeam.description.cutangleb') + cutType.cutAngleB + translate('panelbeam.description.delimiter');\r\n }\r\n\r\n return description;\r\n };\r\n\r\n const change = (property, value) => {\r\n cutType[property] = value;\r\n setCutType(cutType);\r\n\r\n if (isCutValid()) {\r\n cutType.description = getCutDescription();\r\n dispatch(setCuttingDetails(id, 'cutType', cutType));\r\n }\r\n };\r\n\r\n const isCutValid = () => {\r\n if (!cutType || !cutType.cutCode) return false;\r\n\r\n let rule = rules.cutTypes.find((c) => c.code === cutType.cutCode);\r\n\r\n if (!rule) {\r\n console.error('could not find cut rules for code: ' + cutType.cutCode);\r\n return false;\r\n }\r\n\r\n if (rule.maxAngleA > -1 && !cutType.cutAngleA) {\r\n return false;\r\n }\r\n\r\n if (rule.maxAngleB > -1 && !cutType.cutAngleB) {\r\n return false;\r\n }\r\n\r\n return true;\r\n };\r\n\r\n const getAllAnglesItems = () => {\r\n let selectedBeam = selectedBeamType;\r\n let selectedBeamText = 'straight';\r\n if (selectedBeam === 1) {\r\n selectedBeamText = 'straight';\r\n } else if (selectedBeam === 0) {\r\n selectedBeamText = 'oneSide';\r\n } else if (selectedBeam === 2) {\r\n selectedBeamText = 'twoSides';\r\n }\r\n if (selectedBeam === -1) {\r\n selectedBeam = 1;\r\n }\r\n return rules.cutTypes.filter(\r\n (c) => c.type === selectedBeam || c.type === selectedBeamText\r\n );\r\n };\r\n\r\n return (\r\n <Fragment>\r\n <div className='accordion-panel__panel_header'></div>\r\n <svg style={{ display: 'none' }}>\r\n <symbol id='cut-selection-f' viewBox='0 0 360 120'>\r\n {/* Symbol contents */}\r\n </symbol>\r\n <symbol id='cut-selection-b' viewBox='0 0 360 120'>\r\n {/* Symbol contents */}\r\n </symbol>\r\n <symbol id='cut-bg' viewBox='0 0 1200 400'>\r\n <line\r\n x1='10'\r\n y1='50'\r\n x2='10'\r\n y2='390'\r\n stroke='currentColor'\r\n strokeDasharray='20'\r\n strokeDashoffset='30'\r\n strokeWidth='5'\r\n />\r\n <path d='M10 50 l40 20 l0 -40Z' fill='currentColor' />\r\n <line\r\n x1='20'\r\n y1='50'\r\n x2='1180'\r\n y2='50'\r\n stroke='currentColor'\r\n strokeWidth='5'\r\n />\r\n <path d='M1190 50 l-40 20 l0 -40Z' fill='currentColor' />\r\n <text\r\n textAnchor='middle'\r\n fill='currentColor'\r\n className='svg-text'\r\n x='600'\r\n y='110'\r\n >\r\n L\r\n </text>\r\n <line\r\n x1='1190'\r\n y1='50'\r\n x2='1190'\r\n y2='390'\r\n stroke='currentColor'\r\n strokeDasharray='20'\r\n strokeDashoffset='30'\r\n strokeWidth='5'\r\n />\r\n </symbol>\r\n </svg>\r\n <div className='accordion-panel__panel_content'>\r\n <div className='configurator__beam_cutting'>\r\n <div className='beam_tab_header'>\r\n <a onClick={(e) => setTab(1)} className={selectedBeamType === 1 ? 'active' : ''}\r\n >\r\n {translate('beamtype.cuttingonestreight')}\r\n </a>\r\n <a onClick={(e) => setTab(0)} className={selectedBeamType === 0 ? 'active' : ''}\r\n >\r\n {translate('beamtype.cuttingoneside')}\r\n </a>\r\n <a onClick={(e) => setTab(2)} className={selectedBeamType === 2 ? 'active' : ''}\r\n >\r\n {translate('beamtype.cuttingtwoside')}\r\n </a>\r\n </div>\r\n <div className='beam_tab_body beam_tab_body--no-flex'>\r\n {getAllAnglesItems().length > 0 && (\r\n <PanelBeamCuttingSvgAlt\r\n id={id}\r\n items={getAllAnglesItems()}\r\n onClick={change}\r\n cutType={cutType}\r\n shape={rules.shape}\r\n articleNumber={erpVariantId}\r\n />\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n </Fragment>\r\n );\r\n};\r\n\r\nexport default PanelBeam;\r\n","import React, { useEffect, Fragment, useRef } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { translate } from '../../Services/translation';\r\nimport { numberFormat } from '../../Services/formatting';\r\nimport convertUnit from '../../Services/conversions';\r\nimport { map } from '../../Services/utilities';\r\nimport PanelBeam from './PanelBeam';\r\nimport PanelMarking from './PanelMarking';\r\nimport { validateInputs } from './validateCuttingInputs';\r\nimport { googleAnalyticsProductConfigurator } from '../../Services/googleAnalytics';\r\nimport { setEmptyCuttingDetails as addCutting, setCuttingDetails, deleteCuttingDetails as deleteCutting, } from '../../Actions/Configurator.action';\r\n\r\nimport PlusIcon from '../../../images/Plus.svg';\r\nimport TrashCan from '../../../images/trashcan.svg';\r\n\r\nconst PanelCuttingLength = ({ quantityRef, lengthRef }) => {\r\n const kgSuffix = ' kg';\r\n const configurator = useSelector((state) => state.configurator);\r\n const { rules, selections, quantitySelector } = configurator;\r\n const { baseUnit, quantityUnits } = quantitySelector;\r\n\r\n const cuttingElementRef = useRef(null);\r\n const dispatch = useDispatch();\r\n\r\n useEffect(() => {\r\n if (selections.cuttingDetails && selections.cuttingDetails.length === 0) {\r\n cuttingAdd();\r\n }\r\n }, []);\r\n\r\n useEffect(() => {\r\n const handleClick = event => {\r\n if (cuttingElementRef.current > 0 && !event.target.closest('details')) {\r\n cuttingElementRef.current.querySelectorAll('details').forEach((detail) => detail.removeAttribute('open'));\r\n };\r\n };\r\n\r\n window.addEventListener('click', handleClick);\r\n\r\n return () => {\r\n window.removeEventListener('click', handleClick);\r\n };\r\n }, []);\r\n\r\n const handleInputChangeOrBlur = (id, field, event, isBlur = false) => {\r\n let { value, min, max } = event.target;\r\n\r\n event.target.setCustomValidity('');\r\n\r\n if (value === '' && !isBlur) {\r\n dispatch(setCuttingDetails(id, field, value));\r\n return;\r\n }\r\n\r\n if (value === '' && isBlur && min !== null) {\r\n value = min;\r\n } else if (isBlur) {\r\n value = Math.max(Number(min), Math.min(Number(max), Number(value)));\r\n }\r\n dispatch(setCuttingDetails(id, field, value));\r\n\r\n if (isBlur) {\r\n googleAnalyticsProductConfigurator(field === 'quantity' ? 'cuttingNumber' : 'cuttingLength', value);\r\n }\r\n };\r\n\r\n const cuttingAdd = () => {\r\n if (validateInputs(quantityRef, lengthRef)) {\r\n dispatch(addCutting());\r\n }\r\n };\r\n\r\n const handleDelete = (id) => {\r\n if (selections.cuttingDetails.length === 1) {\r\n dispatch(deleteCutting(id));\r\n dispatch(addCutting());\r\n } else {\r\n dispatch(deleteCutting(id));\r\n }\r\n };\r\n\r\n const calculateWeight = (row) => {\r\n const pcsUnit = quantityUnits.find((u) => u.unit === 'pcs'),\r\n kgUnit = quantityUnits.find((u) => u.unit === 'kg');\r\n\r\n let baseQuantity = convertUnit(row.quantity, pcsUnit, baseUnit),\r\n totalWeight = convertUnit(baseQuantity, baseUnit, kgUnit);\r\n\r\n if (isCutLengthValid(row.length)) {\r\n totalWeight = map(row.length, 0, rules.length, 0, totalWeight);\r\n }\r\n\r\n return totalWeight;\r\n };\r\n\r\n const isCutLengthValid = (length) => {\r\n return length >= rules.minCutLength && length <= rules.maxCutLength;\r\n };\r\n\r\n const getRowWeight = (accumulator, row) => {\r\n return accumulator + calculateWeight(row);\r\n };\r\n\r\n const getTotalWeight = () => {\r\n return selections.cuttingDetails.reduce(getRowWeight, 0);\r\n };\r\n\r\n return (\r\n <Fragment>\r\n <div className='configurator-box' ref={cuttingElementRef}>\r\n <section className='header-section'>\r\n <span>{translate('cutting.cuttinglengthtitle')}</span>\r\n <details name='group1' className='config-details config-details--right-align config-details--link'>\r\n <summary>\r\n <span>{translate('cutting.showtoleranser')}</span>\r\n <img className='config-details__icon' src='/ui/images/arrow-down.svg'\r\n />\r\n </summary>\r\n <div className='config-details__content'>\r\n <img src={rules.toleranceImage} style={{ minWidth: '400px' }} />\r\n </div>\r\n </details>\r\n </section>\r\n\r\n <div className='cut-table'>\r\n <table>\r\n <thead>\r\n <tr>\r\n <th className='cut-table__quantity-cell'>\r\n {translate('cutting.cuttinginformation.pieces')}\r\n </th>\r\n <th className='cut-table__length-cell'>\r\n {translate('cutting.cuttinginformation.length')}\r\n </th>\r\n <th className='cut-table__cut-cell'>\r\n {translate('cutting.cuttinginformation.capeType')}\r\n </th>\r\n <th className='cut-table__marking-cell'>\r\n {translate('cutting.cuttinginformation.marking')}\r\n </th>\r\n <th className='cut-table__weight-cell'>\r\n {translate('cutting.cuttinginformation.rowweight')}\r\n </th>\r\n <th className='cut-table__delete-cell'>\r\n {/* Delete column */}\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {selections.cuttingDetails && selections.cuttingDetails.map((row, index) => (\r\n <tr key={row.id}>\r\n <td className='cut-table__quantity-cell'>\r\n <input ref={(el) => (quantityRef.current[index] = el)} className='cut-table__input' type='number' min='1' max='99999999'\r\n onChange={(event) => handleInputChangeOrBlur(row.id, 'quantity', event)}\r\n onBlur={(event) => handleInputChangeOrBlur(row.id, 'quantity', event, true)} value={row.quantity}\r\n />\r\n </td>\r\n <td>\r\n <input ref={(el) => (lengthRef.current[index] = el)} className='cut-table__input' min={rules.minCutLength} max={rules.maxCutLength}\r\n type='number' value={row.length === 0 ? '' : row.length.toString()} placeholder={`${rules.minCutLength}-${rules.maxCutLength}`}\r\n onChange={(event) => handleInputChangeOrBlur(row.id, 'length', event)}\r\n onBlur={(event) => handleInputChangeOrBlur(row.id, 'length', event, true)}\r\n />\r\n </td>\r\n <td className='cut-table__cut-cell'>\r\n <details className='config-details config-details--bordered' name='group1' >\r\n <summary title={row.cutType.description}>\r\n <span>\r\n {row.cutType.description ? row.cutType.description : translate('not.selected')}\r\n </span>\r\n <img className='config-details__icon' src='/ui/images/arrow-down.svg' />\r\n </summary>\r\n <div className='config-details__content'>\r\n <PanelBeam\r\n id={row.id}\r\n currentCutType={row.cutType}\r\n ></PanelBeam>\r\n </div>\r\n </details>\r\n </td>\r\n <td className='cut-table__marking-cell'>\r\n <details className='config-details config-details--bordered config-details--right-align' name='group1' >\r\n <summary title={row.marking.description}>\r\n <span>\r\n {row.marking.description ? row.marking.description : translate('not.selected')}\r\n </span>\r\n <img className='config-details__icon' src='/ui/images/arrow-down.svg' />\r\n </summary>\r\n <div className='config-details__content'>\r\n <PanelMarking\r\n id={row.id}\r\n IsPopup={true}\r\n ></PanelMarking>\r\n </div>\r\n </details>\r\n </td>\r\n <td className='cut-table__weight-cell'>\r\n {numberFormat.format(getRowWeight(0, row)) + kgSuffix}\r\n </td>\r\n <td className='cut-table__delete-cell'>\r\n <a tabIndex={0} onClick={() => handleDelete(row.id)}>\r\n <img src={TrashCan} alt='Delete' />\r\n </a>\r\n </td>\r\n </tr>\r\n ))}\r\n </tbody>\r\n <tfoot>\r\n <tr>\r\n <td colSpan={3}>\r\n <a tabIndex={0} onClick={cuttingAdd}>\r\n <img src={PlusIcon} alt='Add' />{' '}\r\n {translate('cutting.cuttinginformation.add')}\r\n </a>\r\n </td>\r\n <td colSpan={3} className='cut-table__total'>\r\n {translate('cutting.cuttinginformation.totalweight')}:{' ' + numberFormat.format(getTotalWeight()) + kgSuffix}\r\n </td>\r\n </tr>\r\n </tfoot>\r\n </table>\r\n </div>\r\n </div>\r\n </Fragment>\r\n );\r\n};\r\n\r\nexport default PanelCuttingLength;\r\n","import React, { Fragment } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { setCoilDetails } from '../../Actions/Configurator.action';\r\nimport { googleAnalyticsProductConfigurator } from '../../Services/googleAnalytics';\r\n\r\nconst PanelCoilFoiling = ({ id }) => {\r\n const dispatch = useDispatch(),\r\n articleNumber = useSelector((state) => state.configurator.id),\r\n configurator = useSelector((state) => state.configurator),\r\n { rules, selections } = configurator,\r\n { coilInfo } = rules,\r\n { foilingOptions } = coilInfo;\r\n\r\n const handleOptionChange = (key, value) => {\r\n dispatch(setCoilDetails(id, 'foilingCoils', key));\r\n\r\n googleAnalyticsProductConfigurator('foilingCoils', value.toString(), articleNumber);\r\n\r\n };\r\n\r\n const getSelectedFoilingCoil = (key) => {\r\n const foundFoilingCoils = selections.coilDetails.find((coil) => coil.id === id && coil.foilingCoils === key);\r\n return !!foundFoilingCoils;\r\n };\r\n\r\n return (\r\n <Fragment>\r\n <div className='accordion-panel__panel_header'></div>\r\n <div className='accordion-panel__panel_content'>\r\n <div className='configurator__coil_foiling'>\r\n <div className='coil_foiling_body coil_foiling_body--no-flex'>\r\n {foilingOptions && Object.entries(foilingOptions).map(([key, value]) => (\r\n <div className='select-option' key={'foilingCoil' + key}>\r\n <label>\r\n <input type='radio' name='foiling' value={key} checked={getSelectedFoilingCoil(key)}\r\n onChange={(e) => { handleOptionChange(key, value); }} />\r\n {value}\r\n </label>\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n </div>\r\n </Fragment>\r\n );\r\n};\r\n\r\nexport default PanelCoilFoiling;\r\n","import React, { Fragment } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { setCoilDetails } from '../../Actions/Configurator.action';\r\n\r\nconst PanelCoilPacking = ({ id }) => {\r\n const dispatch = useDispatch();\r\n const configurator = useSelector((state) => state.configurator);\r\n const { rules, selections } = configurator;\r\n const { coilInfo } = rules;\r\n const { packingOptions } = coilInfo;\r\n\r\n const handleOptionChange = (key, value) => {\r\n dispatch(setCoilDetails(id, 'packingCoils', key));\r\n };\r\n\r\n const getSelectedPackingCoil = (key) => {\r\n const foundPackingCoil = selections.coilDetails.find((coil) => coil.id === id && coil.packingCoils === key);\r\n return !!foundPackingCoil;\r\n };\r\n\r\n const checkboxes = Object.entries(packingOptions)\r\n .filter(([key, value]) => window.__litium.constants.coils.standard.includes(key))\r\n .map(([key, value]) => (\r\n <div className='select-option select-option__default' key={'packingOptions' + key} >\r\n <label>\r\n <input type='checkbox' checked disabled value={key} onChange={(e) => { handleOptionChange(key, value); }} />\r\n {value}\r\n </label>\r\n </div>\r\n ));\r\n\r\n const radioButtons = Object.entries(packingOptions)\r\n .filter(([key, value]) => !window.__litium.constants.coils.standard.includes(key))\r\n .map(([key, value]) => (\r\n <div className='select-option' key={'packingOptions' + key}>\r\n <label>\r\n <input type='radio' name='packingCoils' value={key} checked={getSelectedPackingCoil(key)} onChange={(e) => { handleOptionChange(key, value); }} />\r\n {value}\r\n </label>\r\n </div>\r\n ));\r\n\r\n return (\r\n <Fragment>\r\n <div className='accordion-panel__panel_header'></div>\r\n <div className='accordion-panel__panel_content'>\r\n <div className='configurator__coil_packing'>\r\n <div className='coil_packing_body coil_packing_body--no-flex'>\r\n {checkboxes}\r\n {radioButtons}\r\n </div>\r\n </div>\r\n </div>\r\n </Fragment>\r\n );\r\n};\r\n\r\nexport default PanelCoilPacking;\r\n","import React, { useEffect, Fragment } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { translate } from '../../Services/translation';\r\nimport { numberFormat } from '../../Services/formatting';\r\nimport convertUnit from '../../Services/conversions';\r\nimport { map } from '../../Services/utilities';\r\nimport PanelCoilFoiling from './PanelCoilFoiling';\r\nimport PanelCoilPacking from './PanelCoilPacking';\r\nimport { setEmptyCoilDetails as addCoil, setCoilDetails, deleteCoilDetails as deleteCoil } from '../../Actions/Configurator.action';\r\nimport { googleAnalyticsProductConfigurator } from '../../Services/googleAnalytics';\r\n\r\nimport PlusIcon from '../../../images/Plus.svg';\r\nimport TrashCan from '../../../images/trashcan.svg';\r\n\r\nconst PanelCoilBase = () => {\r\n const dispatch = useDispatch();\r\n const configurator = useSelector((state) => state.configurator);\r\n const { rules, selections, quantitySelector } = configurator;\r\n const { baseUnit, quantityUnits } = quantitySelector;\r\n const { coilInfo } = rules;\r\n const { foilingOptions, packingOptions } = coilInfo;\r\n const kgSuffix = ' kg';\r\n\r\n useEffect(() => {\r\n if (selections.coilDetails && selections.coilDetails.length == 0) {\r\n coilAdd();\r\n }\r\n }, []);\r\n\r\n const coilAdd = () => {\r\n dispatch(addCoil());\r\n };\r\n\r\n const handleInputChange = (id, field, value) => {\r\n dispatch(setCoilDetails(id, field, Number(value)));\r\n googleAnalyticsProductConfigurator(field, value, configurator.id);\r\n };\r\n\r\n const handleDelete = (id) => {\r\n if (selections.coilDetails.length === 1) {\r\n dispatch(deleteCoil(id));\r\n dispatch(addCoil());\r\n } else {\r\n dispatch(deleteCoil(id));\r\n }\r\n };\r\n\r\n const calculateWeight = (row) => {\r\n const pcsUnit = quantityUnits.find((u) => u.unit === 'pcs'),\r\n kgUnit = quantityUnits.find((u) => u.unit === 'kg');\r\n\r\n let baseQuantity = convertUnit(row.quantity, pcsUnit, baseUnit),\r\n totalWeight = convertUnit(baseQuantity, baseUnit, kgUnit);\r\n\r\n if (isCoilLengthValid(row.length)) {\r\n totalWeight = map(row.length, 0, rules.length, 0, totalWeight);\r\n }\r\n return totalWeight;\r\n };\r\n\r\n const isCoilLengthValid = (length) => {\r\n return length >= rules.minCutLength && length <= rules.maxCutLength;\r\n };\r\n\r\n const getRowWeight = (accumulator, row) => {\r\n return accumulator + calculateWeight(row);\r\n };\r\n\r\n const getTotalWeight = () => {\r\n return selections.coilDetails.reduce(getRowWeight, 0);\r\n };\r\n\r\n return (\r\n <Fragment>\r\n <div className='configurator-box'>\r\n <section className='header-section'>\r\n <span>{translate('cutting.coil.title')}</span>\r\n <details className='config-details config-details--right-align config-details--link'>\r\n <summary>\r\n <span>{translate('cutting.coil.showtoleranser')}</span>\r\n <img className='config-details__icon' src='/ui/images/arrow-down.svg' />\r\n </summary>\r\n <div className='config-details__content'>\r\n <img src={rules.tolerance} style={{ minWidth: '400px' }} />\r\n </div>\r\n </details>\r\n </section>\r\n\r\n <div className='coil-table'>\r\n <table>\r\n <thead>\r\n <tr>\r\n <th className='coil-table__quantity-cell'>\r\n {translate('cutting.coil.pieces')}\r\n </th>\r\n <th className='coil-table__length-cell'>\r\n {translate('cutting.coil.length')}\r\n </th>\r\n <th className='coil-table__foiling-cell'>\r\n {translate('cutting.coil.foiling')}\r\n </th>\r\n <th className='coil-table__packing-cell'>\r\n {translate('cutting.coil.packing')}\r\n </th>\r\n <th className='coil-table__max-coils-cell'>\r\n {translate('cutting.coil.maxcoils')}\r\n </th>\r\n <th className='coil-table__weight-cell'>\r\n {translate('cutting.coil.rowweight')}\r\n </th>\r\n <th className='coil-table__delete-cell'>\r\n {/* Delete column */}\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {selections.coilDetails && selections.coilDetails.map((row) => (\r\n <tr key={row.id}>\r\n <td className='coil-table__quantity-cell'>\r\n <input className='coil-table__input' value={row.quantity} type='number'\r\n onChange={(e) => handleInputChange(row.id, 'quantity', e.target.value)}\r\n onBlur={(e) => handleInputChange(row.id, 'quantity', e.target.value)} />\r\n </td>\r\n <td className='coil-table__length-cell'>\r\n <input className='coil-table__input' min={rules.minCutLength} max={rules.maxCutLength} type='number'\r\n value={row.length === 0 ? '' : row.length} placeholder={rules.minCutLength + '-' + rules.maxCutLength}\r\n onChange={(e) => handleInputChange(row.id, 'length', e.target.value)}\r\n onBlur={(e) => handleInputChange(row.id, 'length', e.target.value)} />\r\n </td>\r\n <td className='coil-table__foiling-cell'>\r\n <details className='config-details config-details--bordered' name='coilGroup' >\r\n <summary title={foilingOptions[row.foilingCoils]}>\r\n <span>\r\n {row.foilingCoils ? foilingOptions[row.foilingCoils] : translate('not.selected')}\r\n </span>\r\n <img className='config-details__icon' src='/ui/images/arrow-down.svg'\r\n />\r\n </summary>\r\n <div className='config-details__content'>\r\n <PanelCoilFoiling id={row.id}></PanelCoilFoiling>\r\n </div>\r\n </details>\r\n </td>\r\n <td className='coil-table__packing-cell'>\r\n <details className='config-details config-details--bordered config-details--right-align' name='coilGroup' >\r\n <summary title={packingOptions[row.packingCoils]}>\r\n <span>\r\n {row.packingCoils ? packingOptions[row.packingCoils] : translate('not.selected')}\r\n </span>\r\n <img className='config-details__icon' src='/ui/images/arrow-down.svg' />\r\n </summary>\r\n <div className='config-details__content'>\r\n <PanelCoilPacking id={row.id}></PanelCoilPacking>\r\n </div>\r\n </details>\r\n </td>\r\n <td className='coil-table__max-coils-cell'>\r\n <details className='config-details config-details--bordered config-details--right-align' name='coilGroup' >\r\n <summary>\r\n <span>\r\n {row.maxHeightCoils > 0 && row.maxWeightCoils > 0 ? row.maxHeightCoils + ' : ' + row.maxWeightCoils : translate('not.selected')}\r\n </span>\r\n <img className='config-details__icon' src='/ui/images/arrow-down.svg' />\r\n </summary>\r\n <div className='config-details__content'>\r\n <div className='accordion-panel__panel_header'></div>\r\n <div className='accordion-panel__panel_content'>\r\n <div className='configurator__coil_max_bundle'>\r\n <div className='coil_max_bundle_body coil_max_bundle_body--no-flex'>\r\n <div className='max_bundle-input'>\r\n <label className='max_bundle-label'>\r\n <span>\r\n {translate('cutting.coil.maxheightcoils')}\r\n </span>\r\n </label>\r\n <input type='number' className='coil-table__input' value={row.maxHeightCoils}\r\n onChange={(e) => handleInputChange(row.id, 'maxHeightCoils', e.target.value)}\r\n onBlur={(e) => handleInputChange(row.id, 'maxHeightCoils', e.target.value)}\r\n />\r\n </div>\r\n <div className='max_bundle-input'>\r\n <label className='max_bundle-label'>\r\n <span>\r\n {translate('cutting.coil.maxweightcoils')}\r\n </span>\r\n </label>\r\n <input type='number' className='coil-table__input' value={row.maxWeightCoils}\r\n onChange={(e) => handleInputChange(row.id, 'maxWeightCoils', e.target.value)}\r\n onBlur={(e) => handleInputChange(row.id, 'maxWeightCoils', e.target.value)}\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </details>\r\n </td>\r\n <td className='coil-table__weight-cell'>\r\n {numberFormat.format(getRowWeight(0, row)) + kgSuffix}\r\n </td>\r\n <td className='coil-table__delete-cell'>\r\n <a tabIndex={0} onClick={() => handleDelete(row.id)}>\r\n <img src={TrashCan} />\r\n </a>\r\n </td>\r\n </tr>\r\n ))}\r\n </tbody>\r\n <tfoot>\r\n <tr>\r\n <td colSpan={3}>\r\n <a tabIndex={0} onClick={coilAdd}>\r\n <img src={PlusIcon} /> {translate('cutting.coil..add')}\r\n </a>\r\n </td>\r\n <td colSpan={3}>\r\n <span>\r\n {translate('cutting.coil.total') + ' ' + numberFormat.format(getTotalWeight()) + kgSuffix}\r\n </span>\r\n </td>\r\n </tr>\r\n </tfoot>\r\n </table>\r\n </div>\r\n </div>\r\n </Fragment>\r\n );\r\n};\r\n\r\nexport default PanelCoilBase;\r\n","import React, { Fragment, useRef } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { translate } from '../../Services/translation';\r\nimport PanelBlasting from './PanelBlasting';\r\nimport PanelSubmit from './PanelSubmit';\r\nimport ConfiguratorProductDetails from './ConfiguratorProductDetails';\r\nimport { changeProductServiceTab } from '../../Actions/Configurator.action';\r\nimport PanelCuttingLength from './PanelCuttingLength';\r\nimport PanelCoilBase from './PanelCoilBase';\r\nimport PanelDeliveryDate from './PanelDeliveryDate';\r\n\r\nimport closeIcon from '../../../images/closeDialogIcon.svg';\r\n\r\nconst ProductServiceCutting = () => {\r\n const configurator = useSelector((state) => state.configurator),\r\n { rules } = configurator,\r\n { isCoil } = rules;\r\n const dispatch = useDispatch();\r\n const quantityRef = useRef([]);\r\n const lengthRef = useRef([]);\r\n\r\n return (\r\n <Fragment>\r\n <a className='configurator-close-button' onClick={() => dispatch(changeProductServiceTab(0))} >\r\n <img src={closeIcon} />\r\n </a>\r\n <div className='configurator-header'>\r\n <h4>{translate('configurator.production.cutting.title')}</h4>\r\n </div>\r\n <ConfiguratorProductDetails />\r\n {isCoil ? (\r\n <PanelCoilBase />\r\n ) : (\r\n <PanelCuttingLength quantityRef={quantityRef} lengthRef={lengthRef} />\r\n )}\r\n <PanelBlasting />\r\n <PanelDeliveryDate\r\n icon='delivery'\r\n labelKey='configurator.deliveryDate.key'\r\n setting='deliveryDate'\r\n ></PanelDeliveryDate>\r\n <PanelSubmit quantityRef={quantityRef} lengthRef={lengthRef} />\r\n </Fragment>\r\n );\r\n};\r\n\r\nexport default ProductServiceCutting;\r\n","import React, { Fragment } from 'react';\r\nimport { translate } from '../../Services/translation';\r\nimport PanelBlasting from './PanelBlasting';\r\nimport PanelSubmit from './PanelSubmit';\r\nimport ConfiguratorProductDetails from './ConfiguratorProductDetails';\r\nimport ProductQuantitySelector from './ProductQuantitySelector';\r\nimport { changeProductServiceTab } from '../../Actions/Configurator.action';\r\nimport { useDispatch } from 'react-redux';\r\nimport closeIcon from '../../../images/closeDialogIcon.svg';\r\n\r\nconst ProductServiceSwell = () => {\r\n const dispatch = useDispatch();\r\n\r\n return (\r\n <Fragment>\r\n <a className='configurator-close-button' onClick={() => dispatch(changeProductServiceTab(0))}><img src={closeIcon} /></a>\r\n <div className='configurator-header'>\r\n <h4>{translate('configurator.production.swell.title')}</h4>\r\n </div>\r\n <ConfiguratorProductDetails />\r\n <ProductQuantitySelector />\r\n <PanelBlasting />\r\n <PanelSubmit />\r\n </Fragment>\r\n );\r\n};\r\nexport default ProductServiceSwell;\r\n","import React from 'react';\r\nimport { useDispatch } from 'react-redux';\r\nimport { changeProductServiceTab } from '../../../Actions/Configurator.action';\r\nimport plusIcon from '../../../../images/plusIcon.svg';\r\n\r\nconst ModeSelection = ({ tab, icon, title, text }) => {\r\n const dispatch = useDispatch();\r\n\r\n return (\r\n <a onClick={() => dispatch(changeProductServiceTab(tab))} className='configuratorServiceTab'>\r\n <div className='upperServiceTabPart'>\r\n <div className='upperServiceTabPartLeft'>\r\n <img src={icon} className='productPaneIconStyling' />\r\n <h6 className='serviceTitle'>{title}</h6>\r\n </div>\r\n <img src={plusIcon} className='configurationServiceTabPlusIcon' />\r\n </div>\r\n <div className='lowerServiceTabPart'>\r\n <p className='serviceTabparagraphText'>{text}</p>\r\n </div>\r\n </a>\r\n );\r\n};\r\n\r\nexport default ModeSelection;\r\n","import React, { Fragment } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { translate } from '../../../Services/translation';\r\nimport { close } from '../../../Actions/Configurator.action';\r\nimport ProductServiceBlasting from '../ProductServiceBlasting';\r\nimport ProductServiceCutting from '../ProductServiceCutting';\r\nimport ProductServiceSwell from '../ProductServiceSwell';\r\nimport ConfiguratorProductDetails from '../ConfiguratorProductDetails';\r\nimport ModeSelection from './ModeSelection';\r\n\r\n// Icons\r\nimport paintBrush from '../../../../images/Paintbrush.svg';\r\nimport plusIcon from '../../../../images/plusIcon.svg';\r\nimport cutingIcon from '../../../../images/cutingIcon.svg';\r\nimport splittingIcon from '../../../../images/splittingIcon.svg';\r\nimport closeDialogIcon from '../../../../images/closeDialogIcon.svg';\r\n\r\nconst ProductionPane = () => {\r\n const dispatch = useDispatch(),\r\n configurator = useSelector((state) => state.configurator),\r\n rules = useSelector((state) => state.configurator.rules);\r\n\r\n const selectedProductServiceTab = configurator.selectedProductServiceTab || 0;\r\n return (\r\n <div className='configurator-pane configurator-pane--production'>\r\n {selectedProductServiceTab === 0 && (\r\n <Fragment>\r\n <a className='configurator-close-button' onClick={() => dispatch(close())} >\r\n <img src={closeDialogIcon} />\r\n </a>\r\n <h4 className='productionTitle'>\r\n {translate('configurator.service.adjust')}\r\n </h4>\r\n <ConfiguratorProductDetails />\r\n\r\n <section className='configurator-box'>\r\n <header>\r\n <svg className='configurator-box__icon'>\r\n <use href='/ui/images/sprites/be-group.svg#customize'></use>\r\n </svg>\r\n <h4 className='configurator-box__title'>\r\n {translate('config.productionservices')}\r\n </h4>\r\n </header>\r\n <div className='configurator-box__content'>\r\n {(rules.allowBlasting === true || rules.allowPainting === true) && (\r\n <ModeSelection\r\n tab={1}\r\n icon={paintBrush}\r\n title={translate('blasting.title')}\r\n text={translate('blasting.description')}\r\n />\r\n )}\r\n <ModeSelection\r\n tab={2}\r\n icon={cutingIcon}\r\n title={translate('configurator.service.cutting.title')}\r\n text={translate('configurator.service.cutting.description')}\r\n />\r\n {/* <ModeSelection tab={3} icon={splittingIcon} title={translate('configurator.service.swell.title')} text={translate('configurator.service.swell.description')} /> */}\r\n </div>\r\n </section>\r\n </Fragment>\r\n )}\r\n\r\n {selectedProductServiceTab === 1 && <ProductServiceBlasting />}\r\n {selectedProductServiceTab === 2 && <ProductServiceCutting />}\r\n {selectedProductServiceTab === 3 && <ProductServiceSwell />}\r\n </div>\r\n );\r\n};\r\n\r\nexport default ProductionPane;\r\n","import React from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport GeneralPane from './Tabs/GeneralPane';\r\nimport ProductionPane from './Tabs/ProductionPane';\r\n\r\nconst ConfiguratorBase = () => {\r\n const selectedTab = useSelector((state) => state.configurator.selectedTab),\r\n id = useSelector((state) => state.configurator.id);\r\n\r\n return (\r\n <div className='configurator-base'>\r\n {selectedTab === 1 && <GeneralPane />}\r\n {selectedTab === 2 && <ProductionPane />}\r\n\r\n <style>\r\n {`[data-itemid='${id}'] { box-shadow: 0 0 3px #404040; position: relative; z-index: 2; }`}\r\n </style>\r\n </div>\r\n );\r\n};\r\n\r\nexport default ConfiguratorBase;\r\n","import React from 'react';\r\n\r\nconst ConfiguratorLoadingState = () => {\r\n return (\r\n <div className='be-group-loading'>\r\n <svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 252 266'>\r\n <path d='M80.571 101.569c-.524-.438-.815-1.197-.8-2.078l.261-15.012c.04-2.33 1.89-4.579 4.124-5.012l10.527-2.047c3.228-.627 5.607-.323 7.07.905 1.313 1.102 1.955 3.014 1.909 5.682l-.103 5.909c-.091 5.2-3.039 8.403-8.763 9.515l-9.734 1.89-3.09.595c-.525.101-1.008-.017-1.4-.347zm-.06 37.652c-.733-.615-1.126-1.563-1.107-2.669l.263-15.027c.03-1.686 1.15-3.272 2.497-3.533l12.132-2.353c3.228-.627 5.607-.323 7.07.905 1.313 1.101 1.955 3.013 1.909 5.683l-.103 5.908c-.091 5.201-3.039 8.404-8.763 9.514l-11.22 2.182c-1.021.2-1.97-.018-2.678-.61zm19.466-80.906l-18.375 3.59c-22.87 4.976-23.09 5.244-23.657 28.702l-.827 48.333c-.137 11.477.301 16.7 3.371 19.341 3.09 2.659 8.55 2.3 19.62.492l18.923-3.676c17.043-3.314 27.371-14.052 27.625-28.725l.128-7.205c.002-.159.004-.315.004-.471 0-4.813-1.317-8.608-3.916-11.284-2.362-2.429-5.774-3.769-10.052-4.12 8.589-3.877 13.614-11.51 13.784-21.287l.094-5.333c.003-.18.005-.361.005-.541 0-6.372-1.995-11.41-5.784-14.588-4.619-3.876-11.861-4.994-20.943-3.228zm85.804-17.219l-27.522 5.35c-23.114 4.511-23.164 6.787-23.651 28.574l-.833 48.459c-.191 9.615.408 15.781 4.024 18.833 3.214 2.712 8.536 2.992 18.977.997l39.081-7.851c1.964-.383 3.594-2.357 3.628-4.401l.198-12.68c.018-1.046-.367-1.956-1.086-2.557-.701-.588-1.625-.805-2.604-.615l-37.436 7.566c-1.02.198-1.978-.019-2.684-.614-.737-.617-1.13-1.569-1.112-2.678l.214-12.391c.038-2.109 1.752-2.669 2.486-2.812l.156-.025 20.544-3.994c1.787-.346 3.215-2.293 3.248-4.43l.2-11.452c.022-1.162-.39-2.186-1.129-2.807a2.558 2.558 0 00-2.175-.545l-19.466 3.782-1.236.234c-.527.102-1.251.141-1.722-.255-.338-.284-.505-.772-.496-1.448l.055-3.003.165-9.709c.042-2.328 1.89-4.577 4.124-5.012l25.902-4.955c1.966-.381 3.596-2.356 3.633-4.4l.208-11.989c.021-1.044-.365-1.953-1.084-2.556-.7-.588-1.624-.807-2.607-.616zM29.97 253.892c0 5.777-4.084 9.336-11.319 9.336H1.031v-38.859h17.387c7.234 0 11.202 3.617 11.202 9.336v2.159c0 3.734-1.867 6.826-6.244 7.584 4.727.934 6.594 3.968 6.594 7.527v2.917zm-9.277-16.511v-2.567c0-2.043-1.05-3.385-3.793-3.385h-6.477v9.569h6.185c2.742 0 4.085-1.283 4.085-3.617zm.117 15.52v-2.685c0-2.392-1.343-3.617-4.085-3.617h-6.302v9.628h6.594c2.742 0 3.793-1.343 3.793-3.326zm41.188 10.327H35.801v-38.859h26.197v7.527H45.136v8.227h11.786v6.067H45.136v9.219h16.862v7.819zm46.912-24.856h-8.635v-2.275c0-3.501-2.1-5.31-5.66-5.31-4.143 0-6.36 2.393-6.36 6.243v13.771c0 3.617 2.393 6.009 6.419 6.009 3.56 0 5.484-1.926 5.484-5.135v-1.796h-5.344v-5.924h13.98v8.304c0 7.06-5.66 12.077-14.353 12.077-9.92 0-15.637-6.184-15.637-14.237v-12.543c0-8.052 5.951-14.237 15.637-14.237 9.16 0 14.469 5.135 14.469 12.194v2.859zm36.115 25.031h-6.534c-3.092 0-4.318-2.392-4.376-6.01v-5.776c-.059-2.45-1.109-4.026-4.259-4.026h-6.185v15.637h-9.336v-38.859h16.921c8.168 0 11.844 3.967 11.844 9.802v2.743c0 3.909-1.808 6.418-6.127 7.468 4.552.643 6.244 3.734 6.244 7.001v5.544c0 2.042.583 3.442 1.808 4.608v1.868zm-11.144-25.322v-3.151c0-2.1-1.05-3.501-4.025-3.501h-6.185v10.386h6.009c2.859 0 4.201-1.284 4.201-3.734zm46.024 12.077c0 8.169-5.952 14.178-15.638 14.178s-15.695-6.009-15.695-14.178v-12.719c0-8.226 6.009-14.12 15.695-14.12s15.638 5.894 15.638 14.12v12.719zm-9.453.467V237.03c0-3.559-2.1-6.243-6.185-6.243-4.142 0-6.184 2.684-6.184 6.243v13.595c0 3.501 2.042 6.185 6.184 6.185 4.085 0 6.185-2.684 6.185-6.185zm45.44.992c0 7.293-5.485 12.719-15.112 12.719-9.452 0-15.228-5.367-15.228-12.719v-27.248h9.452v26.898c0 3.442 2.043 5.543 6.009 5.543 3.968 0 5.952-2.101 5.952-5.543v-26.898h8.927v27.248zm35.299-12.895c0 6.127-4.026 10.328-11.727 10.328h-7.701v14.178h-9.336v-38.859h17.037c7.701 0 11.727 4.26 11.727 10.386v3.967zm-9.16.293v-3.91c0-2.275-1.108-3.618-3.967-3.618h-6.301v11.203h6.358c2.802 0 3.91-1.401 3.91-3.675z' fill='#e0e0e0'></path>\r\n <path d='M33.111 102.835c0 51.362 41.636 92.998 92.999 92.998 51.362 0 92.998-41.636 92.998-92.998 0-51.363-41.636-92.999-92.998-92.999-51.363 0-92.999 41.636-92.999 92.999zm-8.875-.002C24.236 46.569 69.846.959 126.11.959c56.265 0 101.875 45.61 101.875 101.874 0 56.264-45.61 101.875-101.875 101.875-56.264 0-101.874-45.611-101.874-101.875z' fill='#e0e0e0'></path>\r\n </svg>\r\n </div>\r\n );\r\n};\r\n\r\nexport default ConfiguratorLoadingState;\r\n","import React from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { changeTab } from '../../../Actions/Configurator.action';\r\nimport { translate } from '../../../Services/translation';\r\n\r\nconst ConfiguratorTabs = ({ isLoading }) => {\r\n const dispatch = useDispatch(),\r\n selectedTab = useSelector((state) => state.configurator.selectedTab),\r\n isConfigurable = useSelector((state) => state.configurator.isConfigurable);\r\n\r\n return (\r\n <>\r\n {isConfigurable && (\r\n <div className={'tab-navigator' + (isLoading ? ' tab-navigator--loading' : '')} >\r\n <a onClick={() => dispatch(changeTab(1))} className={'tab' + (selectedTab === 1 ? ' tab--active' : '')} >\r\n {translate('configurator.service.stock')}\r\n </a>\r\n <a onClick={() => dispatch(changeTab(2))} className={'tab' + (selectedTab === 2 ? ' tab--active' : '')} >\r\n {translate('configurator.service.production')}\r\n </a>\r\n </div>\r\n )}\r\n </>\r\n );\r\n};\r\n\r\nexport default ConfiguratorTabs;\r\n","\r\nconst isHoliday = (date, startDate, publicHolidays, nonPublicHolidays) => {\r\n let daysInNumber = date.getDay();\r\n\r\n if (startDate && date <= startDate) {\r\n return true;\r\n }\r\n\r\n if (daysInNumber == 0 || daysInNumber == 6) {\r\n return true;\r\n } else {\r\n if ((publicHolidays && publicHolidays.length > 0) || (nonPublicHolidays && nonPublicHolidays.length > 0)) {\r\n const currentDate = ('0' + date).slice(-2) + '/' + ('0' + (date.getMonth() + 1)).slice(-2) + '/' + date.getYear(); // 'DD/MM/YYYY'\r\n const currentMonthDay = date.getDate() + '-' + (date.getMonth() + 1); // 'DD-MM'\r\n return (publicHolidays.includes(currentMonthDay) || nonPublicHolidays.includes(currentDate));\r\n } else {\r\n return false;\r\n }\r\n }\r\n}\r\n\r\nexport default isHoliday;\r\n"],"names":["getStackedItem","stackedPrices","totalWeight","quantityPriceList","quantityUnit","length","stackedItem","priceListItem","quantity","StackedPrices","useSelector","state","configurator","React","className","translate","pricingUnitDisplayName","factorKg","pricingUnit","renderDecimal","value","useFactor","Intl","NumberFormat","window","__litium","constants","currentLocale","style","maximumFractionDigits","format","stackedQuantity","getStackedQuantity","map","index","key","price","width","getMeterProgress","max","selectedIndex","i","currencyFormat","formatToParts","find","e","type","convertUnit","sourceUnit","targetUnit","unit","conversionFactor","lerp","norm","min","sourceMin","sourceMax","destMin","destMax","ProductQuantitySelector","dispatch","useDispatch","articleNumber","id","orderRow","rules","selections","quantitySelector","baseUnitQuantity","informationToCustomer","infoTextQuantityMinLimit","selectedTab","decimalQuantity","defaultUnit","baseUnit","unitConfigurableParentItem","quantityUnits","isUpdateMode","isConfigured","_useState","useState","selectedUnit","_useState2","_slicedToArray","setSelectedUnit","_useState3","_useState4","selectedUnitQuantity","setSelectedUnitQuantity","_useState5","_useState6","baseQuantity","setBaseQuantity","cuttingLength","quantityInputElement","useRef","readOnly","isRemnant","useEffect","initialize","onSetUnit","updateQuantity","initialQuantity","handleChangeQuantityUnit","setUnit","isUnitSwitch","Math","round","toFixed","ceil","setBaseUnitQuantity","onBaseUnitQuantityChange","getQuantityUnit","setTotalWeight","setSelectedUnitQuantityState","weight","isCutLengthValid","setWeight","minCutLength","maxCutLength","u","fixedValue","Number","parseFloat","setSalesQuantity","current","onQuantityInputElementPress","event","isBlur","target","googleAnalytics","toString","newQuantity","totalPcsWeight","showInfoText","Fragment","href","numberFormat","disabled","defaultValue","onInput","onBlur","ref","step","maxLength","onChange","filter","available","description","htmlFor","quantityFieldId","props","deliveryDetails","goodMarkingValue","goodsMarking","setting","goodsMarkingValue","setGoodsMarkingValue","update","setDeliveryDetailsValues","googleAnalyticsProductConfigurator","icon","labelKey","placeholder","PanelDeliveryDate","startDate","cart","delivery","startDateObj","Date","deliveryDate","publicHolidays","holidays","holiday","isPublicHoliday","holidayDate","nonPublicHolidays","DatePicker","selected","filterDate","day","isHoliday","subDays","popperPlacement","date","selectedDate","formattedDate","toBaseDateFormat","customInput","toCurrentLocaleFormat","viewBox","xmlns","d","websiteStringModeOfDelivery","certificateDescription","validateInputs","quantityRef","lengthRef","quantityInput","lengthInput","setCustomValidity","checkValidity","reportValidity","PanelSubmit","isLoading","setIsLoading","salesQuantity","isStandAlone","disableButton","renderGoogleAnalytics","product","name","articleName","category","breadcrumbs","campaignProduct","isCampaignProduct","googleAnalyticsAddToCart","LoaderBlockContent","renderGrandTotal","grandTotal","onClick","timingLabel","console","time","post","data","then","response","json","miniCart","document","getElementsByClassName","classList","remove","receive","_objectSpread","addedProduct","finally","timeEnd","close","updateCustomizedMessage","addToCart","ConfiguratorStock","onHandModel","StockDetails","variantSystemId","stockArticle","articleWeight","articleFactorKg","ConfiguratorProductDetails","useLongName","longName","longArticleName","imgUrl","articleImageURL","isEnvironmentalFriendly","isLoggedIn","src","alt","GeneralPane","closeIcon","PanelGoodsMarking","Certificate","PanelBlasting","updateSetting","values","setValues","toggle","setToggle","setBlastingColorCode","colorCode","blastingDetails","colors","color","c","thickness","thicknessOptions","blastPaintCode","isPainting","getColorType","getSelectedBlastingSize","colorType","selectedColor","undefined","selectedBlastCode1","allowBlasting","allowPainting","getSelectedText","toLowerCase","replace","innerIndex","checked","setThickness","thicknessName","getBlastingPaintCode","PanelMarking","IsPopup","cuttingDetail","cuttingDetails","x","marking","workPhaseMarkingText","setWorkPhaseMarkingText","drawingNumber","setDrawingNumber","workPhaseMarkingChargeNumber","setWorkPhaseMarkingChargeNumber","_useState7","_useState8","setGoodsMarking","inkjetIntegrationFlagIfCuttingOperation","setCuttingDetails","updateWorkPhaseMarkingText","updateDrawingsNumber","updateGoodsMarking","updateInkJetIntegrationFlag","ProductServiceBlasting","changeProductServiceTab","getCornerRules","shape","background","boxHeight","includes","ruleset","cornerA","cornerB","PanelCuttingImage","angleA","angleB","focusA","focusB","box","calculateCorner","corner","angle","result","calculateAngle","c4","c1","c2","c3","angleRad","toRadian","angle2Rad","sin","PI","getCornerPosition","getBasicBox","y","getCalcBox","calcBox","getBoxPath","getTextPosition","basicBox","m","cornerPosition","height","clipPath","cx","cy","r","fill","strokeWidth","textAnchor","PanelBeamCuttingSvgAlt","items","cutType","showAngleAerror","showAngleBerror","focusAngleA","focusAngleB","setState","code","cutCode","selectedItem","setSelectedItem","selectBeamType","updateMaxAngleA","_event$target","updateMaxAngleB","_event$target2","getCutAngle","fallback","propertyName","getPlaceHolderValue","getIconShapeIcon","left","right","setFocus","propName","boolValue","maxAngleA","maxAngleB","onFocus","PanelBeam","currentCutType","selectedBeamType","setSelectedBeamType","erpVariantId","setCutType","setTab","isCutValid","rule","cutTypes","cutAngleA","cutAngleB","error","getAllAnglesItems","selectedBeam","selectedBeamText","display","x1","y1","x2","y2","stroke","strokeDasharray","strokeDashoffset","change","property","getCutDescription","PanelCuttingLength","cuttingElementRef","cuttingAdd","handleClick","closest","querySelectorAll","forEach","detail","removeAttribute","addEventListener","removeEventListener","handleInputChangeOrBlur","field","addCutting","getRowWeight","accumulator","row","pcsUnit","kgUnit","calculateWeight","toleranceImage","minWidth","el","title","tabIndex","handleDelete","deleteCutting","TrashCan","colSpan","PlusIcon","reduce","PanelCoilFoiling","foilingOptions","coilInfo","getSelectedFoilingCoil","coilDetails","coil","foilingCoils","Object","entries","handleOptionChange","setCoilDetails","PanelCoilPacking","packingOptions","getSelectedPackingCoil","packingCoils","checkboxes","coils","standard","radioButtons","PanelCoilBase","coilAdd","addCoil","handleInputChange","isCoilLengthValid","tolerance","maxHeightCoils","maxWeightCoils","deleteCoil","ProductServiceCutting","isCoil","ProductServiceSwell","ModeSelection","tab","text","ProductionPane","selectedProductServiceTab","closeDialogIcon","ConfiguratorBase","ConfiguratorLoadingState","ConfiguratorTabs","isConfigurable","changeTab","daysInNumber","getDay","currentDate","slice","getMonth","getYear","currentMonthDay","getDate"],"sourceRoot":""}