{"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":""}