{"version":3,"sources":["webpack://QuickQuote/webpack/bootstrap","webpack://QuickQuote/./src/store.js","webpack://QuickQuote/./src/config.js","webpack://QuickQuote/./src/misc/helpers.js","webpack://QuickQuote/./src/actions/actionFunctions.js","webpack://QuickQuote/./src/bvcomponents/appLayout.js","webpack://QuickQuote/./src/bvcomponents/look/core/constants.js","webpack://QuickQuote/./src/analytics.js","webpack://QuickQuote/./src/bvcomponents/sqft/constants.js","webpack://QuickQuote/./src/bvcomponents/visComponents/constants.js","webpack://QuickQuote/./src/bvcomponents/visComponents/designNavigationItem.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/store/sqftConfig.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/workspace.js","webpack://QuickQuote/./src/actions/lookFunctions.js","webpack://QuickQuote/./src/actions/actionTypes.js","webpack://QuickQuote/./src/bvcomponents/sqft/helpers/sqftHelper.js","webpack://QuickQuote/./src/bvcomponents/look/core/intermediatePart.js","webpack://QuickQuote/./src/misc/utils.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookFunctions2.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/constants.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/store/sqftEventManager.js","webpack://QuickQuote/./src/routes.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/parts/intermediatePart.js","webpack://QuickQuote/./src/actions/sqftMenuFunctions.js","webpack://QuickQuote/./src/bvcomponents/ui/loaderView.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookFunctions.js","webpack://QuickQuote/./src/interfaces/featureInterface.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/intermediatePart.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/intermediatePart.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookWizard/lookWizardFunctions.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/constants.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/intermediatePart.js","webpack://QuickQuote/./src/actions/sqftFunctions.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/assets.js","webpack://QuickQuote/./src/api/server-api.js","webpack://QuickQuote/./src/colorThemes.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/constants.js","webpack://QuickQuote/./src/misc/actionTypes.js","webpack://QuickQuote/./src/bvcomponents/sqft/helpers/shapeHelper.js","webpack://QuickQuote/./src/actions/wizardFunctions.js","webpack://QuickQuote/./src/bvcomponents/common/icons.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookNavigationFunctions.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/parts/showerTubCombo.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/store/sqftShapeManager.js","webpack://QuickQuote/./src/misc/fabricatorHardcode.js","webpack://QuickQuote/./src/actions/navigationFunctions.js","webpack://QuickQuote/./src/misc/helperHooks.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/core/intermediatePart.js","webpack://QuickQuote/./src/bvcomponents/ui/materialSpinner.js","webpack://QuickQuote/./src/interfaces/wizardItemInterface.js","webpack://QuickQuote/./src/bvcomponents/look/core/parts/vanity.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/constants.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/parts/shower.js","webpack://QuickQuote/./src/bvcomponents/visComponents/featureName.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/cartItemInterface.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/store/workspaceControllers.js","webpack://QuickQuote/./src/api/look-api.js","webpack://QuickQuote/./src/actions/selectionFunctions.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/parts/vanity.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/parts/shower.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/store/colorThemes.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/store/sqftStore.js","webpack://QuickQuote/./src/actions/tutorialFunctions.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/helpers/renderFigures.js","webpack://QuickQuote/./src/bvcomponents/look/core/parts/shower.js","webpack://QuickQuote/./src/actions/groheFunctions.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/sqftShape.js","webpack://QuickQuote/./src/misc/misc.js","webpack://QuickQuote/./src/api/api-popups.js","webpack://QuickQuote/./src/actions/shoppingCartFunctions.js","webpack://QuickQuote/./src/bvcomponents/ui/loadingSpinner.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/parts/cabinet.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookWizard/lookWizardFunctions2.js","webpack://QuickQuote/./src/bvcomponents/popups/printPopup/printDocumentContext.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/slab/slabWorkspace.js","webpack://QuickQuote/./src/bvcomponents/sqft/helpers/sqftHelperUi.js","webpack://QuickQuote/./src/bvcomponents/look/core/part.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/assets.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/parts/showerTubCombo.js","webpack://QuickQuote/./src/bvcomponents/priceWorksheet/discounstInterface.js","webpack://QuickQuote/./src/bvcomponents/assets.js","webpack://QuickQuote/./src/misc/priceFunctions.js","webpack://QuickQuote/./src/actions/roomsFunctions.js","webpack://QuickQuote/./src/bvcomponents/look/lookCanvasContext.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/parts/part.js","webpack://QuickQuote/./src/bvcomponents/common/lockedView.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/mobile/mobileMenuSelect.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/parts/vanity.js","webpack://QuickQuote/./src/misc/filtersFunctions.js","webpack://QuickQuote/./src/actions/serverFunctions.js","webpack://QuickQuote/./src/misc/quotesFunctions.js","webpack://QuickQuote/./src/bvcomponents/sqft/lib/pnpoly.js","webpack://QuickQuote/./src/bvcomponents/sqft/helpers/sqftQuotesHelper.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerNew/showerCommon.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/part.js","webpack://QuickQuote/./src/bvcomponents/fireplace/core/intermediatePart.js","webpack://QuickQuote/./src/misc/categorySwitchingFunctions.js","webpack://QuickQuote/./src/bvcomponents/sqft/helpers/featureHelper.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/navUtils.js","webpack://QuickQuote/./src/bvcomponents/sqft/helpers/sqftNavigationHelper.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/parts/appliance.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/showerAccessories/accessoryCommon.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheFunctions.js","webpack://QuickQuote/./src/bvcomponents/priceWorksheet/discountFunctions.js","webpack://QuickQuote/./src/bvcomponents/look/hocs/withUpdateLookCartItem.js","webpack://QuickQuote/./src/api/jsonApi.js","webpack://QuickQuote/./src/bvcomponents/qkbPages/materialsWizard/useChangeWizardStepRoute.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/line.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/point.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/store/sqftSlabManager.js","webpack://QuickQuote/./src/bvcomponents/sqft/assetsSQFT.js","webpack://QuickQuote/./src/actions/sqftSlabFunctions.js","webpack://QuickQuote/./src/bvcomponents/look/core/parts/showerTubCombo.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/part.js","webpack://QuickQuote/./src/bvcomponents/popups/withOverlayHoc.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/controls/resourseCanas.js","webpack://QuickQuote/./src/actions/sqftResourceFunctions.js","webpack://QuickQuote/./src/bvcomponents/ui/userLoginButton.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/store/controllers/SQFTResourceController.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/helpers/lineHelper.js","webpack://QuickQuote/./src/bvcomponents/visComponents/layer.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/walls/wallCommon.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerAccessories/accessoryCommon.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/newFilters/filterSwitchers.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/part.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/newFilters/filterSelection.js","webpack://QuickQuote/./src/bvcomponents/visComponents/featureThumbnail.js","webpack://QuickQuote/./src/misc/displayLogic.js","webpack://QuickQuote/./src/bvcomponents/ui/successNotification.js","webpack://QuickQuote/./src/misc/getCanvasImageFromLayout.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/navigation/countertopSwitchers.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/newFilters/filters.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/core/constants.js","webpack://QuickQuote/./src/actions/userFunctions.js","webpack://QuickQuote/./src/bvcomponents/sqft/helpers/coordinatesHelper.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/desktop/bodyPanelRadio.js","webpack://QuickQuote/./src/bvcomponents/common/goToMaterialPage.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/core/part.js","webpack://QuickQuote/./src/actions/contractsActions.js","webpack://QuickQuote/./src/bvcomponents/popups/contractSign/contractsFunctions.js","webpack://QuickQuote/./src/misc/visualizerSwitchingFunctions.js","webpack://QuickQuote/./src/misc/misc2.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/workspace/workspaceEvents.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/featureWizard/featureWizardSteps.js","webpack://QuickQuote/./src/actions/assignPopupFunctions.js","webpack://QuickQuote/./src/bvcomponents/look/hocs/withZoomToFeature.js","webpack://QuickQuote/./src/actions/priceWorksheetActions.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/navigation/cabinetSwitchers.js","webpack://QuickQuote/./src/bvcomponents/visComponents/partCommon.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/navigationRequests.js","webpack://QuickQuote/./src/bvcomponents/look/hocs/withClickCount.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookAllWallsRadioButton.js","webpack://QuickQuote/./src/bvcomponents/popups/messageBox.js","webpack://QuickQuote/./src/bvcomponents/fireplace/core/part.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/store/sqftShapeIntersectionsManager.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/desktopNavigationCommon.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/newFilters/navigationFiltersSteps.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/mobileNavigationCommon.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/mobile/mobileNavigationButtons.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/mobile/mobileNavigationAllWallsCheckbox.js","webpack://QuickQuote/./src/bvcomponents/common/mainButtons.js","webpack://QuickQuote/./src/bvcomponents/visComponents/visualizer.js","webpack://QuickQuote/./src/bvcomponents/tutorials/visualizerTutorial.js","webpack://QuickQuote/./src/bvcomponents/ui/copyright.js","webpack://QuickQuote/./src/actions/printFunctions.js","webpack://QuickQuote/./src/actions/paymentFunctions.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/workspace/text/numberText.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/movableImage.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/pointV2.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/helpers/renderParts.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/store/sqftImageManager.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/store/canvasHelper.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerTubCombo/tubCommon.js","webpack://QuickQuote/./src/bvcomponents/sqft/helpers/sqft3dArHelper.js","webpack://QuickQuote/./src/visit/wizardLogic/wizardActions.js","webpack://QuickQuote/./src/visit/appointmentLogic/appointmentActions.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/zIndex.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/parts/centerIsland.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/navItemPositionModal.js","webpack://QuickQuote/./src/analyticsEcommerceParams.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartHeaderCommon.js","webpack://QuickQuote/./src/actions/sqftManualCalculationFunctions.js","webpack://QuickQuote/./src/misc/changeRoutePath.js","webpack://QuickQuote/./src/bvcomponents/common/demoPoints/demoPoints.js","webpack://QuickQuote/./src/bvcomponents/visComponents/imageCanvasCommonNew.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartStickyFooter.js","webpack://QuickQuote/./src/lib/react-redux-loading-bar/index.js","webpack://QuickQuote/./src/misc/backendFunctions.js","webpack://QuickQuote/./src/actions/initialFlowFunctions.js","webpack://QuickQuote/./src/api/user-api.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/controls/mitered.js","webpack://QuickQuote/./src/actions/sqftMiteredFunctions.js","webpack://QuickQuote/./src/bvcomponents/sqft/constantsFeature.js","webpack://QuickQuote/./src/bvcomponents/look/core/parts/walls.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/navigation.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/parts/countertopGroup.js","webpack://QuickQuote/./src/visit/globalLogic/globalActions.js","webpack://QuickQuote/./src/visit/wizardLogic/wizardLogic.js","webpack://QuickQuote/./src/bvcomponents/visComponents/imageCanvasCommon.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/parts/zIndex.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/zIndex.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/parts/showerAccessories.js","webpack://QuickQuote/./src/bvcomponents/fireplace/core/constants.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookFeature/lookFeatureImage.js","webpack://QuickQuote/./src/reducers/sqftMenuReducer.js","webpack://QuickQuote/./src/reducers/sqftSlabReducer.js","webpack://QuickQuote/./src/visit/api/api.js","webpack://QuickQuote/./src/visit/constants.js","webpack://QuickQuote/./src/visit/userLogic/userActions.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/parts/countertopGroup.js","webpack://QuickQuote/./src/bvcomponents/look/iframeIntegration.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookListFeature/lookFeaturePrice.js","webpack://QuickQuote/./src/bvcomponents/visComponents/featureDescription.js","webpack://QuickQuote/./src/lib/react-redux-loading-bar/loading_bar_ducks.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/workspace/workspaceDataMapper.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/layouts/polygon.js","webpack://QuickQuote/./src/bvcomponents/visComponents/layoutCommonNew.js","webpack://QuickQuote/./src/bvcomponents/visComponents/layoutCommon.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/cabinet/cabinetWorkspace.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/assets.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/showerTubCombo/tubCommon.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/wall/externallWall.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/zIndex.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/showerTubCombo/tubCommon.js","webpack://QuickQuote/./src/bvcomponents/fireplace/core/zIndex.js","webpack://QuickQuote/./src/reducers/fabricatorReducer.js","webpack://QuickQuote/./src/reducers/initialFlowReducer.js","webpack://QuickQuote/./src/bvcomponents/visComponents/allFeaturesChecker.js","webpack://QuickQuote/./src/bvcomponents/look/shop/shopCategory/shopNavItemsContext.js","webpack://QuickQuote/./src/bvcomponents/ui/icons/uiIcon.js","webpack://QuickQuote/./src/bvcomponents/sqft/helpers/sqftCalculations.js","webpack://QuickQuote/./src/reducers/sqftManualCalculationReducer.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/cabinet/cabinetShapes.js","webpack://QuickQuote/./src/bvcomponents/common/OnScreenKeyboard/keyboard.js","webpack://QuickQuote/./src/bvcomponents/look/user/lookUserPhoneInput.js","webpack://QuickQuote/./src/bvcomponents/priceWorksheet/discountCommon.js","webpack://QuickQuote/./src/bvcomponents/popups/printPopup/printDocumentFunctions.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/similarProducts/similarProductsFunctions.js","webpack://QuickQuote/./src/bvcomponents/visComponents/canvasEnhancements/index.js","webpack://QuickQuote/./src/bvcomponents/sqft/helpers/uiHelper.js","webpack://QuickQuote/./src/bvcomponents/sqft/helpers/freeDrawHelper.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/workspace/textBox/draw/drawImage.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/shapeParts/slabParts/seamToolHelper.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/helpers/renderCabinets.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/overlays/mitered.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/slab/sqftSlabDraw.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/slab/slabAdditionalShape.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/store/sqftResoursesManager.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/shapeParts/shapeAbsolute.js","webpack://QuickQuote/./src/bvcomponents/sqft/lib/moveDiagonalLine.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/overlays/resizeLine.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/layouts/rectangle.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/controls/labels/labelsHelper.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/helpers/freeDrawHelper.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/lineHooks/lineCorner.js","webpack://QuickQuote/./src/bvcomponents/ui/select.js","webpack://QuickQuote/./src/bvcomponents/look/core/layout.js","webpack://QuickQuote/./src/bvcomponents/look/core/parts/showerAccessories.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/bathTub/enclosureCommon.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/vanity/vanityCommon.js","webpack://QuickQuote/./src/misc/constants.js","webpack://QuickQuote/./src/api/search-api.js","webpack://QuickQuote/./src/misc/loadVisualizer.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookSideBar/lookSidebarModals/lookSideBarShareButtons.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/parts/cabinet.js","webpack://QuickQuote/./src/visit/lixilLogic/lixilActions.js","webpack://QuickQuote/./src/visit/appointmentLogic/appointmentReducer.js","webpack://QuickQuote/./src/visit/wizardLogic/wizardLogicOld.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/layout.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/mobile/selectionMobileViewSwitchers.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookFeatureRemoveButton.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/backsplashSelect.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/cabinet/cabinetModuleSystem.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/parts/appliance.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/parts/centerIsland.js","webpack://QuickQuote/./src/bvcomponents/common/scheduleButton.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/layout.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartDelivery/deliveryFunctions.js","webpack://QuickQuote/./src/actions/unlockCalculationsFunctions.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookIntro/lookIntroPopper.js","webpack://QuickQuote/./src/bvcomponents/popups/contractSign/contractsContext.js","webpack://QuickQuote/./src/reducers/instReducer.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheConfig.js","webpack://QuickQuote/./src/api/api.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookWizard/wizardFunctionsCommon.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/workspaceHistory.js","webpack://QuickQuote/./src/bvcomponents/popups/sqftFeaturesPopup/parseSqftData.js","webpack://QuickQuote/./src/bvcomponents/visComponents/qtCategoryName.js","webpack://QuickQuote/./src/actions/filtersFunctions.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/controls/freeDraw.js","webpack://QuickQuote/./src/visit/api/lixil-api.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/navigationItemsList.js","webpack://QuickQuote/./src/bvcomponents/visComponents/commonFeatureItemsMethods.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/desktop/bodySwipable.js","webpack://QuickQuote/./src/bvcomponents/visComponents/layoutNavigationItem.js","webpack://QuickQuote/./src/bvcomponents/common/shareButton.js","webpack://QuickQuote/./src/bvcomponents/visComponents/pingPilotButton.js","webpack://QuickQuote/./src/bvcomponents/look/hocs/withPingPilotCheck.js","webpack://QuickQuote/./src/actions/shopFunctions.js","webpack://QuickQuote/./src/bvcomponents/popups/assignQuotePopup/assignQuoteConstants.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/SqftUiFunctions.js","webpack://QuickQuote/./src/bvcomponents/sqft/interfaces/sqftInterfaces.js","webpack://QuickQuote/./src/bvcomponents/look/hocs/withSavePostMessage.js","webpack://QuickQuote/./src/bvcomponents/look/lookMessaging.js","webpack://QuickQuote/./src/bvcomponents/look/user/lookUserInput.js","webpack://QuickQuote/./src/bvcomponents/look/hocs/withInputValidations.js","webpack://QuickQuote/./src/bvcomponents/desktopHeader.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookFeature/lookFeatureOptions.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheFeature/groheFeatureOptions.js","webpack://QuickQuote/./src/lib/react-redux-loading-bar/loading_bar.js","webpack://QuickQuote/./src/bvcomponents/popups/printPopup/printDocumentInfo.js","webpack://QuickQuote/./src/bvcomponents/popups/printPopup/printDocumentBodyCartItem.js","webpack://QuickQuote/./src/interfaces/filterInterface.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/workspace/mixin/movable.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/controls/cursor.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/controls/radius.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/overlays/label.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/wall.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/helpers/renderFreeDraw.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/helpers/wallHelper.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/shapeParts/shapeCabinet.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/canvasPopup/resetSeam.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/helpers/commonParts/blink.js","webpack://QuickQuote/./src/bvcomponents/visComponents/featuresFunctions.js","webpack://QuickQuote/./src/misc/metaDataFunctions.js","webpack://QuickQuote/./src/bvcomponents/look/core/zIndex.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/nonVisualizerSubPart.js","webpack://QuickQuote/./src/bvcomponents/look/core/parts/toilet.js","webpack://QuickQuote/./src/bvcomponents/look/bathroomFunctions.js","webpack://QuickQuote/./src/bvcomponents/sqft/api/sqftJsonApi.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/workspace/textBox.js","webpack://QuickQuote/./src/reducers/wizardReducer.js","webpack://QuickQuote/./src/misc/presetsFunctions.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/countertop/countertop.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/countertopCommon.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/edgeCommon.js","webpack://QuickQuote/./src/bvcomponents/popups/printPopup/printDocumentDisclaimer.js","webpack://QuickQuote/./src/translatesProvider.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/shadow.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/parts/wall.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/nonVisualizerSubPart.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/parts/showerAccessories.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/desktop/bodyPanel.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/parts/walls.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/countertopCommon.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/edgeCommon.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/newFilters/navigationFilters.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/featureWizard/featureWizard.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/navigation/contextMenu.js","webpack://QuickQuote/./src/bvcomponents/common/homeMenu.js","webpack://QuickQuote/./src/bvcomponents/common/saveButton.js","webpack://QuickQuote/./src/bvcomponents/tutorials/tutorial.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/layout.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/nonVisualizerSubPart.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/navigation/contextMenuSimple.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/navigation/cabinetContextMenu.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/layout.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/nonVisualizerSubPart.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/navigation/contextMenuSimple.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/nonVisualizerSubPart.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/parts/walls.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/navigation/contextMenu.js","webpack://QuickQuote/./src/bvcomponents/look/navigation/contextMenuQKB.js","webpack://QuickQuote/./src/bvcomponents/fireplace/core/layout.js","webpack://QuickQuote/./src/bvcomponents/fireplace/core/subparts/nonVisualizerSubPart.js","webpack://QuickQuote/./src/bvcomponents/fireplace/navigation/contextMenuSimple.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/core/subparts/nonVisualizerSubPart.js","webpack://QuickQuote/./src/reducers/cartReducer.js","webpack://QuickQuote/./src/bvcomponents/ui/quantity.js","webpack://QuickQuote/./src/misc/userFunctions.js","webpack://QuickQuote/./src/bvcomponents/ui/textInput.js","webpack://QuickQuote/./src/bvcomponents/look/ui/lookDropdown.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookFeature/lookFeatureSku.js","webpack://QuickQuote/./src/bvcomponents/look/hocs/withAddToCartPostMessage.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookListFeature/lookListFeature.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/shoppingCart.js","webpack://QuickQuote/./src/bvcomponents/popups/contractSign/contractsFieldsFunctions.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookCategory/lookVirtualizedList.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheFeature/groheFeatureQuantity.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheFeature/groheFeatureMoreInfoButton.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartBackButton.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/bathroomVisualizer.js","webpack://QuickQuote/./src/bvcomponents/popups/printPopup/printDocument.js","webpack://QuickQuote/./src/bvcomponents/qkbPages/materialsWizard/materialsWizardDoneCheckMark.js","webpack://QuickQuote/./src/bvcomponents/sqft/helpers/sqftDataMapper.js","webpack://QuickQuote/./src/bvcomponents/sqft/helpers/sqftConfigHelper.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/workspaceZoom.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/controls/underlayment.js","webpack://QuickQuote/./src/bvcomponents/look/filtersHardcode.js","webpack://QuickQuote/./src/bvcomponents/sqft/helpers/sqftCabinetsDataMapper.js","webpack://QuickQuote/./src/bvcomponents/sqft/helpers/dataHelper.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/newFilters/filtersBody.js","webpack://QuickQuote/./src/bvcomponents/common/checkBox.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/kitchenVisualizer.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/kvSceneVisualizer.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/bvSceneVisualizer.js","webpack://QuickQuote/./src/bvcomponents/look/lookVisualizer.js","webpack://QuickQuote/./src/bvcomponents/fireplace/fireplaceVisualizer.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/core/laundryRoomLayout.js","webpack://QuickQuote/./src/bvcomponents/projectScope/projectScopeFunctions.js","webpack://QuickQuote/./src/bvcomponents/sqft/hocs/withAddToQuote.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/NavigationHelper.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/cabinet/toolMenu/commonParts/SQFTFeaturesHeader.js","webpack://QuickQuote/./src/actions/iframeIntegrationFunctions.js","webpack://QuickQuote/./src/bvcomponents/look/list/lookListMainFeature.js","webpack://QuickQuote/./src/bvcomponents/ui/homeButton.js","webpack://QuickQuote/./src/bvcomponents/ui/mobileMenu.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionFeatureInfo/featureInfoPrice.js","webpack://QuickQuote/./src/bvcomponents/qkbPages/materialsCommon/materialsCommonFunctions.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionGridList/selectionGridItem.js","webpack://QuickQuote/./src/interfaces/shiftFilterTitleInterface.js","webpack://QuickQuote/./src/bvcomponents/visComponents/hardcodedCanvasImage.js","webpack://QuickQuote/./src/bvcomponents/ui/noInternetOverlay.js","webpack://QuickQuote/./src/bvcomponents/common/svgIcons/bathroomFeatureGroupIcons.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookListFeature/lookFeaturePairPrice.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheFeature/groheFeatureSQFTButton.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheFeature/groheFeatureSoldOut.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheFeature/groheFeatureLockedBadge.js","webpack://QuickQuote/./src/actions/groheQuotingToolFunctions.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookCategory/lookMainCategory.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookFeature/lookFeatureRevertButton.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookWizard/lookWizardContentButtons.js","webpack://QuickQuote/./src/reducers/index.js","webpack://QuickQuote/./src/reducers/stepsReducer.js","webpack://QuickQuote/./src/reducers/selectionReducer.js","webpack://QuickQuote/./src/reducers/serverReducer.js","webpack://QuickQuote/./src/misc/imagePolygon.js","webpack://QuickQuote/./src/lib/react-redux-loading-bar/loading_bar_middleware.js","webpack://QuickQuote/./src/lib/react-redux-loading-bar/immutable.js","webpack://QuickQuote/./src/bvcomponents/popups/printPopup/printDocumentStyles.js","webpack://QuickQuote/./src/bvcomponents/popups/printPopup/styles/printDocumentStylesHelpers.js","webpack://QuickQuote/./src/bvcomponents/popups/printPopup/styles/printDocumentStylesDiscounts.js","webpack://QuickQuote/./src/bvcomponents/popups/printPopup/printDocumentHeader.js","webpack://QuickQuote/./src/bvcomponents/popups/printPopup/printDocumentInfoFabricator.js","webpack://QuickQuote/./src/bvcomponents/popups/printPopup/constants.js","webpack://QuickQuote/./src/bvcomponents/popups/printPopup/printDocumentBody.js","webpack://QuickQuote/./src/bvcomponents/popups/printPopup/printDocumentBodyBundledCartItems.js","webpack://QuickQuote/./src/misc/graniteTransformationUkSubDomains.js","webpack://QuickQuote/./src/bvcomponents/popups/printPopup/similarProducts/printSimilarProducts.js","webpack://QuickQuote/./src/bvcomponents/popups/printPopup/similarProducts/printSimilarProductsListItem.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionDescriptionCoverTranslates.js","webpack://QuickQuote/./src/api/axiosInstance.js","webpack://QuickQuote/./src/bvcomponents/visComponents/canvasEnhancements/vertex.glsl","webpack://QuickQuote/./src/bvcomponents/visComponents/canvasEnhancements/fragment.glsl","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/store/sqftCursorManager.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/overlays/pointRadius.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/store/controllers/SpacersController.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/spacer.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/workspace/textBox/model/modelCorePoint.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/imageParts/renderMovableImage.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/imageParts/renderMeasurementsInsideShape.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/imageParts/renderSVG.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/shapeParts/mitered/miteredSegment.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/slab/slabAdditionalShapes.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/slab/slabHelper.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/controls/endCapCanvas.js","webpack://QuickQuote/./src/bvcomponents/sqft/helpers/sqftMeasureUnitsHelper.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/workspace/image/StaticImage.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/sqftShapeOffset.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/store/subscriptionEventManager.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/helpers/movableImageHelper.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/imageParts/lineImage.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/simpleLine.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/shapeParts/shapeRotatable.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/popup/parts/ChangeValuePopup.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/store/controllers/HandlesController.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/store/models/LineHandlesModel.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/store/controllers/WallsController.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/store/controllers/ShapeColorsController.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/store/models/ShapeColor.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/store/controllers/line/WaterfallController.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/overlays/waterfallOverlay.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/shapeParts/models/waterfallSegment.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/store/controllers/line/WaterfallSegmentController.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/store/controllers/RemovedFeaturesController.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/store/controllers/SnappedShapeGroupsController.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/store/controllers/SelectedShapesController.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/store/controllers/Images3dController.js","webpack://QuickQuote/./src/bvcomponents/sqft/helpers/sqftFitSize.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/overlays/lineLength.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/overlays/bumpout.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/workspace/textBox/draw/color.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/lineHooks/lineAttachmentsComposite.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/rotation.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/shapeParts/shapeSlab.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/shapeParts/slabParts/seamTool.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/shapeParts/slabParts/seamToolRender.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/shapeParts/shapeMeasurementArrows.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/shapeParts/shapeEditable.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/shapeParts/shapeSpacer.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/shapeParts/shapeIntersections.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/shapeParts/shapeMemory.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/shapeParts/shapeRender.js","webpack://QuickQuote/./src/bvcomponents/common/exception.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/vanity/vanityHandle.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/vanity/vanityCabinet.js","webpack://QuickQuote/./src/bvcomponents/look/core/parts/other.js","webpack://QuickQuote/./src/bvcomponents/look/core/parts/background.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/backgrounds/BackgroundBG.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerTubCombo/bathtubLiner.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerTubCombo/replacementTub.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerTubCombo/walkInTub.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerTubCombo/jettedTub.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerTubCombo/wallConfiguration.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerTubCombo/walkInTubFixture.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerTubCombo/replacementTubFixture.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/shower/showerFixture.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/shower/showerScreen.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/walls/leftWall.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/walls/rightWall.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/walls/centerWall.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/walls/backWall.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/walls/ceiling.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/walls/frontWall.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/walls/splitWall.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/walls/leftWallSplitter.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/walls/ceilingPanels.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/shower/showerGlass.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/shower/showerBody.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/shower/showerWall.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/shower/showerWallAccent.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/shower/showerDoor.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerAccessories/largeCornerSeat.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerAccessories/soapDish.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerAccessories/cornerCaddie.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerAccessories/largeCornerCaddie.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerAccessories/grabBar.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerAccessories/cornerShelf.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerAccessories/showerPod.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerAccessories/seats.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerAccessories/showerRod.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerAccessories/toiletBrush.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerAccessories/paperHolder.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerAccessories/robeHook.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerAccessories/towelBar.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerAccessories/towelRing.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerAccessories/glassHolder.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerAccessories/towelRack.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerAccessories/wainscoting.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerAccessories/towel.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerAccessories/towelTowelRing.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerAccessories/towelTowelBar.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerAccessories/towelTowelHook.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/shower/showerPanCombo.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/shower/showerDoorHandle.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/shower/ponyWallCap.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/shower/ponyWallGlass.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/shower/showerFloor.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/shower/threshold.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/shower/showerDrain.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/shower/showerHead.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/shower/showerArm.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/shower/showerHeadBundle.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/shower/tubSpout.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/shower/handShowerKit.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/shower/showerCurb.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerNew/bodySpray.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerNew/diverterTrim.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerNew/handShowerHolder.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerNew/handShowerOnly.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerNew/showerHose.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerNew/showerSystem.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerNew/showerTrimKit.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerNew/valveTrim.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerNew/wallUnion.js","webpack://QuickQuote/./src/bvcomponents/look/core/parts/windowParent.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/window/windowKits.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/window/windowBody.js","webpack://QuickQuote/./src/bvcomponents/look/core/parts/floor.js","webpack://QuickQuote/./src/bvcomponents/look/core/parts/globals.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/globals/attachment.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/globals/decor.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/globals/showerWallMirror.js","webpack://QuickQuote/./src/bvcomponents/look/core/parts/bathtub.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/bathTub/bathTubBody.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/bathTub/bathTubFixture.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/bathTub/enclosureTop.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/bathTub/enclosureBottom.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/bathTub/skirtingBoard.js","webpack://QuickQuote/./src/bvcomponents/look/core/parts/accessories.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/accessories/table.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/accessories/chair.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/accessories/carpet.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/accessories/lamp.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/accessories/basket.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/accessories/frame.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/accessories/plant.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/vanity/vanityCountertop.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/vanity/vanityBacksplash.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/vanity/mirror.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/vanity/sink.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/vanity/faucet.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/vanity/pTrap.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/vanity/vanityWashstand.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/vanity/vanityMiddle.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/vanity/drawerPull.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/vanity/wsTowelBar.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/vanity/vanityLegs.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/vanity/vanityConsole.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/vanity/doorHandle.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/vanity/drawerHandle.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/shapeParts/shapeAutoShuffle.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/cabinet/cabinetShapesSpecialLayouts.js","webpack://QuickQuote/./src/bvcomponents/sqft/api/sqftApi.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/workspace/textBox/box.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/workspace/textBox/iText.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/workspace/textBox/model/modelText.js","webpack://QuickQuote/./src/bvcomponents/sqft/helpers/keyboardHelper.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/controls/duplicate.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/workspace/ruler.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/workspace/resultImages.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/shapeFunctions.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/cabinet/cabinetShapesLayout.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/workspace/textBoxManager.js","webpack://QuickQuote/./src/bvcomponents/sqft/dto/FeatureObjectDTO.js","webpack://QuickQuote/./src/api/features-api.js","webpack://QuickQuote/./src/misc/markUpFunctions.js","webpack://QuickQuote/./src/misc/excelFunctions.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/cabinet/handle.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/appliances/dishwasher.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/appliances/fridge.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/appliances/hood.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/appliances/microwave.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/appliances/range.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/appliances/oven.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/appliances/stove.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/appliances/fridgeEnclosure.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/appliances/fridgeEnclosureHandle.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/appliances/stovetop.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/cabinet/topCabinet.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/cabinet/tallCabinet.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/countertop/sink.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/countertop/faucet.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/countertop/edgeProfile.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/countertop/cutouts.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/countertop/radius.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/cabinet/crownMolding.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/cabinet/bottomCabinet.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/cabinet/bottomHandle.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/cabinet/topHandle.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/cabinet/doorHandle.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/cabinet/drawerHandle.js","webpack://QuickQuote/./src/bvcomponents/popups/printPopup/printDocumentBodyWizardItem.js","webpack://QuickQuote/./src/bvcomponents/popups/printPopup/printDocumentTotal.js","webpack://QuickQuote/./src/bvcomponents/popups/printPopup/printDocumentSignature.js","webpack://QuickQuote/./src/bvcomponents/popups/printPopup/printDocumentDiscountsList.js","webpack://QuickQuote/./src/bvcomponents/popups/printPopup/printDocumentDiscount.js","webpack://QuickQuote/./src/bvcomponents/popups/printPopup/printDocumentDiscountFinance.js","webpack://QuickQuote/./src/bvcomponents/popups/printPopup/printDocumentAsCentralText.js","webpack://QuickQuote/./src/visit/api/wizard-api.js","webpack://QuickQuote/./src/visit/globalLogic/saveJobData.js","webpack://QuickQuote/./src/visit/api/job-api.js","webpack://QuickQuote/./src/visit/globalLogic/saveAppointmentData.js","webpack://QuickQuote/./src/visit/api/user.js","webpack://QuickQuote/./src/visit/helperFunctions.js","webpack://QuickQuote/./src/visit/components/helpers/popupFunctions.js","webpack://QuickQuote/./src/misc/imageHovering.js","webpack://QuickQuote/./src/lib/pinch-zoom.js","webpack://QuickQuote/./src/lib/pinchScroll.js","webpack://QuickQuote/./src/bvcomponents/visComponents/canvasCheckForLayerParts.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/parts/bathtub.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/bathTub/bathTubBody.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/showerTubCombo/bathtubLiner.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/showerTubCombo/replacementTub.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/showerTubCombo/walkInTub.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/showerTubCombo/jettedTub.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/showerTubCombo/wallConfiguration.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/bathTub/bathTubBase.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/bathTub/bathTubFixture.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/bathTub/bathTubRim.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/bathTub/bathTubSpa.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/bathTub/bathTubTowelRack.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/parts/floorNew.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/vanity/completeVanity.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/vanity/vanityHandle.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/vanity/vanityPedestal.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/vanity/vanityCountertop.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/vanity/lightingFixture.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/vanity/vanityBacksplash.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/vanity/mirror.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/vanity/sink.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/vanity/faucet.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/parts/window.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/parts/ceiling.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/parts/toilet.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/shower/showerFixture.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/shower/showerGlass.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/shower/showerBody.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/shower/showerInteriorWall.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/shower/showerInteriorWallAccent.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/shower/showerDoor.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/shower/showerPanCombo.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/shower/showerDoorHandle.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/shower/ponyWallCap.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/shower/ponyWallGlass.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/shower/showerFloor.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/shower/threshold.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/shower/showerDrain.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/shower/showerHead.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/parts/globalShadow.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/wall/ponyWall.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/wall/wallA.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/wall/wallB.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/wall/wallC.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/wall/wallExR.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/wall/wallExL.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/wall/vanityAccent.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/parts/other.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/showerAccessories/largeCornerSeat.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/showerAccessories/soapDish.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/showerAccessories/smallCornerShelf.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/showerAccessories/cornerCaddie.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/showerAccessories/largeCornerCaddie.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/showerAccessories/grabBar.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/navigation/desktopNavigation.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/desktop/sidebar.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/newFilters/filtersSearch.js","webpack://QuickQuote/./src/bvcomponents/common/OnScreenKeyboard/keyboardKey.js","webpack://QuickQuote/./src/bvcomponents/common/OnScreenKeyboard/keyboardKeyType.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/desktop/body.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/desktop/bodyPanelCheckbox.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/desktop/bodyPanelWizardSteps.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/desktop/bodyPanelNavigationFiltersSteps.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookAllWallsRadioButtonSmall.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/desktop/bodyItems.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/navigationItem.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/walls/ceiling.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/walls/leftWall.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/walls/rightWall.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/walls/popoutWall.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/walls/backsplash.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/cabinet/bottomCabinet.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/cabinet/topCabinet.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/cabinet/crownMolding.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/appliances/fridge.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/appliances/fridgeShadow.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/appliances/hood.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/appliances/dishwasher.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/appliances/microwave.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/appliances/range.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/cabinet/topHandle.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/cabinet/bottomHandle.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/cabinet/topCabinetShadow.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/cabinet/bottomCabinetShadow.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/countertop/countertop.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/countertop/faucet.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/countertop/sink.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/countertop/stovetop.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/countertop/cutouts.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/countertop/edgeProfile.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/countertop/radius.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/centerIsland/cabinet.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/centerIsland/countertop.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/centerIsland/chairs.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/centerIsland/faucet.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/centerIsland/sink.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/centerIsland/handle.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/centerIsland/centerIslandshadow.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/centerIsland/stovetop.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/centerIsland/range.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/centerIsland/edge.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/centerIsland/chairsShadow.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/featureWizard/featureWizardBody.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/featureWizard/featureWizardBodyItem.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/featureWizard/featureWizardSelection.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/featureWizard/featureWizardSelectionItem.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/roomSceneNavigation.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/roomSceneNavigationItem.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/desktopNavigationLayoutsContent.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/navigation/mobileNavigation.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/mobile/mobileNavigationBodyNew.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/mobileParentNavigationItems.js","webpack://QuickQuote/./src/bvcomponents/common/quoteButton.js","webpack://QuickQuote/./src/bvcomponents/common/designButton.js","webpack://QuickQuote/./src/bvcomponents/common/minimizeButton.js","webpack://QuickQuote/./src/misc/downloadCSV.js","webpack://QuickQuote/./src/bvcomponents/common/demoPoints/demoPoint.js","webpack://QuickQuote/./src/bvcomponents/ui/icons/exclamationMarkIcon.js","webpack://QuickQuote/./src/api/parseResponse.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/parts/floorNew.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/parts/globals.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/globals/baseboard.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/globals/ceilingLights.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/globals/globalShadow.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/globals/decor1.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/globals/decor2.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/globals/decor3.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/parts/other.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/navigation/desktopNavigation.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/navigation/mobileNavigation.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/parts/globals.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/globals/attachment.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/globals/decor.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/centerIsland/cabinet.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/centerIsland/faucet.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/centerIsland/sink.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/centerIsland/edge.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/centerIsland/countertop.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/centerIsland/islandHood.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/centerIsland/stovetop.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/centerIsland/pendants.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/centerIsland/rightIsland.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/parts/other.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/parts/background.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/backgrounds/BackgroundBG.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/parts/floor.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/parts/walls.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/walls/backsplash.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/walls/leftWall.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/walls/rightWall.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/walls/centerWall.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/walls/frontWall.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/walls/ponyWall.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/walls/splitWall.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/navigation/desktopNavigation.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/navigation/mobileNavigation.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/parts/other.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/parts/background.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/backgrounds/BackgroundBG.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/showerAccessories/largeCornerSeat.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/showerTubCombo/bathtubLiner.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/showerTubCombo/replacementTub.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/showerTubCombo/walkInTub.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/showerTubCombo/jettedTub.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/showerTubCombo/wallConfiguration.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/shower/showerFixture.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/shower/showerGlass.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/shower/showerBody.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/vanity/completeVanity.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/vanity/vanityHandle.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/vanity/vanityCabinet.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/vanity/vanityCountertop.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/vanity/vanityBacksplash.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/vanity/mirror.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/vanity/sink.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/vanity/faucet.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/shower/showerWall.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/shower/showerWallAccent.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/shower/showerDoor.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/shower/showerPanCombo.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/shower/showerDoorHandle.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/shower/ponyWallCap.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/shower/ponyWallGlass.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/shower/showerFloor.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/shower/threshold.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/shower/showerDrain.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/shower/showerHead.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/showerAccessories/soapDish.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/showerAccessories/cornerCaddie.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/showerAccessories/largeCornerCaddie.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/showerAccessories/grabBar.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/showerAccessories/cornerShelf.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/showerAccessories/showerPod.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/showerAccessories/seats.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/showerAccessories/showerRod.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/showerAccessories/windowBody.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/showerAccessories/windowKits.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/showerAccessories/largeShelf.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/showerAccessories/towelBar.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/showerAccessories/shampooShelf.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/parts/toilet.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/parts/floor.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/walls/leftWall.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/walls/rightWall.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/walls/centerWall.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/walls/ceilingPanels.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/parts/globals.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/globals/lightFixture.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/globals/decorWindow.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/globals/decorSeat.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/globals/lampFixture.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/globals/attachment.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/parts/bathtub.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/bathTub/bathTubBody.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/bathTub/bathTubFixture.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/navigation/desktopNavigation.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/navItemPositionModalButton.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/navItemPositionModalSlatWall.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/navigation/mobileNavigation.js","webpack://QuickQuote/./src/bvcomponents/look/navigation/mobileNavigation.js","webpack://QuickQuote/./src/bvcomponents/look/navigation/contextMenuQKBButtons.js","webpack://QuickQuote/./src/bvcomponents/look/navigation/desktopNavigation.js","webpack://QuickQuote/./src/bvcomponents/fireplace/core/parts/other.js","webpack://QuickQuote/./src/bvcomponents/fireplace/core/parts/background.js","webpack://QuickQuote/./src/bvcomponents/fireplace/core/subparts/backgrounds/BackgroundBG.js","webpack://QuickQuote/./src/bvcomponents/fireplace/core/parts/floor.js","webpack://QuickQuote/./src/bvcomponents/fireplace/core/parts/walls.js","webpack://QuickQuote/./src/bvcomponents/fireplace/core/subparts/walls/leftWall.js","webpack://QuickQuote/./src/bvcomponents/fireplace/core/subparts/walls/rightWall.js","webpack://QuickQuote/./src/bvcomponents/fireplace/core/subparts/walls/centerWall.js","webpack://QuickQuote/./src/bvcomponents/fireplace/core/subparts/walls/frontWall.js","webpack://QuickQuote/./src/bvcomponents/fireplace/core/subparts/walls/ceiling.js","webpack://QuickQuote/./src/bvcomponents/fireplace/core/parts/fireplaceParent.js","webpack://QuickQuote/./src/bvcomponents/fireplace/core/subparts/fireplace/fireplace.js","webpack://QuickQuote/./src/bvcomponents/fireplace/core/subparts/globals/furniture.js","webpack://QuickQuote/./src/bvcomponents/fireplace/core/parts/globals.js","webpack://QuickQuote/./src/bvcomponents/fireplace/core/subparts/globals/attachment.js","webpack://QuickQuote/./src/bvcomponents/fireplace/core/subparts/globals/decor.js","webpack://QuickQuote/./src/bvcomponents/fireplace/navigation/desktopNavigation.js","webpack://QuickQuote/./src/bvcomponents/fireplace/navigation/mobileNavigation.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/core/zIndex.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/core/parts/other.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/core/parts/background.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/core/subparts/backgrounds/BackgroundBG.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/core/parts/floor.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/core/parts/walls.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/core/subparts/walls/leftWall.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/core/subparts/walls/rightWall.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/core/subparts/walls/centerWall.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/core/subparts/walls/frontWall.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/core/parts/globals.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/core/subparts/globals/decor.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/core/subparts/globals/basket.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/core/parts/cabinet.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/core/subparts/cabinet/cabinetLeg.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/core/subparts/cabinet/countertop.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/core/subparts/cabinet/hook.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/core/subparts/cabinet/cabinetGroup.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/core/subparts/cabinet/slatwall.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/core/subparts/cabinet/overheadRack.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/core/subparts/cabinet/bottomCabinet.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/core/subparts/cabinet/topCabinet.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/core/subparts/cabinet/tallCabinet.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/core/subparts/cabinet/tallHandle.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/core/subparts/cabinet/tallCabinetLeg.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/core/subparts/cabinet/topHandle.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/core/subparts/cabinet/bottomHandle.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/core/subparts/cabinet/bottomCabinetLeg.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/core/parts/accessories.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/core/subparts/globals/attachment.js","webpack://QuickQuote/./src/reducers/bathroomVisualizerReducer.js","webpack://QuickQuote/./src/reducers/loaderReducer.js","webpack://QuickQuote/./src/reducers/userReducer.js","webpack://QuickQuote/./src/reducers/messageBoxReducer.js","webpack://QuickQuote/./src/reducers/filterReducer.js","webpack://QuickQuote/./src/reducers/navigationReducer.js","webpack://QuickQuote/./src/reducers/sqftReducer.js","webpack://QuickQuote/./src/reducers/docuSignReducer.js","webpack://QuickQuote/./src/reducers/qtReducer.js","webpack://QuickQuote/./src/reducers/tutorialReducer.js","webpack://QuickQuote/./src/reducers/contractSigningReducer.js","webpack://QuickQuote/./src/reducers/priceWorksheetReducer.js","webpack://QuickQuote/./src/reducers/unlockCalculationsReducer.js","webpack://QuickQuote/./src/reducers/quotesReducer.js","webpack://QuickQuote/./src/reducers/advancedQuotingReducer.js","webpack://QuickQuote/./src/reducers/assignQuoteReducer.js","webpack://QuickQuote/./src/reducers/printReducer.js","webpack://QuickQuote/./src/reducers/sqftResourcesReducer.js","webpack://QuickQuote/./src/reducers/sqftMiteredReducer.js","webpack://QuickQuote/./src/reducers/lookReducer.js","webpack://QuickQuote/./src/reducers/groheReducer.js","webpack://QuickQuote/./src/reducers/iframeIntegrationReducer.js","webpack://QuickQuote/./src/reducers/groheQuotingToolReducer.js","webpack://QuickQuote/./src/reducers/paymentReducer.js","webpack://QuickQuote/./src/reducers/historyReducer.js","webpack://QuickQuote/./src/reducers/shopReducer.js","webpack://QuickQuote/./src/reducers/sqftTutorialReducer.js","webpack://QuickQuote/./src/bvcomponents/popups/userPopup/userFieldsErrors.js","webpack://QuickQuote/./src/bvcomponents/popups/userPopup/privacyPolicyTerms.js","webpack://QuickQuote/./src/bvcomponents/sqft/hocs/useCloseSQFTCalc.js","webpack://QuickQuote/./src/bvcomponents/popups/assignQuotePopup/assignQuoteInterfaces.js","webpack://QuickQuote/./src/bvcomponents/popups/assignQuotePopup/assignPopupContext.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/subPartDoneCheckMark.js","webpack://QuickQuote/./src/bvcomponents/popups/sqftFeaturesPopup/sqftFeaturesPopup3dButtons.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/countertop/toolMenu/SqftNavLayouts.js","webpack://QuickQuote/./src/bvcomponents/sqft/hocs/useFetchFeatures.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookViewTypeSwitcher.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/cabinet/toolMenu/commonParts/SqftOptionsRelatedItemList.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookCategory/lookVirtualizedListLoadingItem.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookListFeature/lookFeaturePriceLocked.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookFilters/lookFilters.js","webpack://QuickQuote/./src/bvcomponents/look/lookPolicyLinks.js","webpack://QuickQuote/./src/bvcomponents/look/hocs/withLoginPostMessage.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookSideBar/lookSideBar.js","webpack://QuickQuote/./src/bvcomponents/look/ui/inputFunctions.js","webpack://QuickQuote/./src/bvcomponents/look/ui/twoFaCodeInput.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookWizard/lookWizardSectionListFeature.js","webpack://QuickQuote/./src/bvcomponents/ui/shoppingCartButton.js","webpack://QuickQuote/./src/bvcomponents/common/languageSwitcher.js","webpack://QuickQuote/./src/actions/advancedQuotingFunctions.js","webpack://QuickQuote/./src/bvcomponents/installation/instView.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionFeatureInfo/featureInfoPriceLocked.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionFeatureInfo/featureInfoDescription.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionGridList/selectionGridWizardGroupItem.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/notInVisualizerView.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/advancedQuoting/advancedQuotingFunctions.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheFeature/groheFeatureNotInVisualizer.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheMobile/groheMobileFeature/groheMobileFeatureTop.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookFeature/lookFeatureNotInStock.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheCategories/groheCategoriesMenu.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheFeatures/groheVirtualizedList.js","webpack://QuickQuote/./src/bvcomponents/look/ui/navigationLoader.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookFeature/lookFeatureInfo.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookWizard/lookWizardContentFinalPrice.js","webpack://QuickQuote/./src/misc/loadScript.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartColumns.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookWizard/lookWizard.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookWizard/lookWizardContentTitle.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookWizard/lookWizardContentDescription.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookMainWizardSections.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookCompatability/lookCompatabilitySection.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookMainHeaderCloseButton.js","webpack://QuickQuote/./src/misc/browsers.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/navigation/contextMenuQKB.js","webpack://QuickQuote/./src/bvcomponents/common/dashboardButtons/backToDashboard.js","webpack://QuickQuote/./src/bvcomponents/popups/userPopup/constants.js","webpack://QuickQuote/./src/bvcomponents/common/twoFactorAuthView.js","webpack://QuickQuote/./src/bvcomponents/popups/confirmPopup.js","webpack://QuickQuote/./src/bvcomponents/sqft/hocs/withCloseSQFtCalc.js","webpack://QuickQuote/./src/bvcomponents/ui/mobileRotateButtonHorizontalNew.js","webpack://QuickQuote/./src/bvcomponents/popups/assignQuotePopup/assignQuotePopupSearch.js","webpack://QuickQuote/./src/bvcomponents/popups/assignQuotePopup/assignQuoteVirtualizedList.js","webpack://QuickQuote/./src/bvcomponents/popups/sqftFeaturesPopup/sqftFeaturesPopupWrapper.js","webpack://QuickQuote/./src/bvcomponents/qkbPages/materialsWizard/materialsWizardFooterStepThumbnail.js","webpack://QuickQuote/./src/bvcomponents/sqft/squareFootageToolView.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/SqftFooterAddToQuoteButton.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/SqftFooterCancelButton.js","webpack://QuickQuote/./src/bvcomponents/sqft/hocs/withSqftFooterCancel.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/popup/SqftPopupWindow.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/layouts/square.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/layouts/wideAngle.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/layouts/horseshoe.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menuSwitchers/ManualCalculateSwitcher.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/ar3d/threeD/workspaceComponents/ExportButton.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/ar3d/threeD/ThreeDWorkspace.js","webpack://QuickQuote/./src/bvcomponents/ui/multiLoader.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/ar3d/ar/ARWorkspace.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/ar3d/ar/ARButton.js","webpack://QuickQuote/./src/bvcomponents/sqft/helpers/sqftMobileHelper.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/ar3d/ar/ARButtonGoogleWebXR.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/popup/ValidationPopupWindow.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/overlays/sqftContextMenu.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menuSwitchers/SlabToolSwitcher.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/controls/backsplashCanvas.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/cabinet/toolMenu/commonParts/SqftOptionsLoading.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionFeatureInfo/featurePriceInput.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/countertop/toolMenu/toolMitered/navMiteredSection.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheFilters/groheFiltersSearchInputAsync.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookFilters/lookFiltersList.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheFilters/groheFiltersValues.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookFilters/lookFiltersReset.js","webpack://QuickQuote/./src/bvcomponents/sqft/hocs/useWindowDimensions.js","webpack://QuickQuote/./src/bvcomponents/look/hocs/withCanvasImage.js","webpack://QuickQuote/./src/bvcomponents/look/list/lookListContent.js","webpack://QuickQuote/./src/bvcomponents/look/list/lookListContentHeaderRightSide.js","webpack://QuickQuote/./src/bvcomponents/look/hocs/withCartAnimationsChecker.js","webpack://QuickQuote/./src/bvcomponents/look/list/lookListFooter.js","webpack://QuickQuote/./src/actions/asyncActionFunctions.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookListFeature/lookListFeatureCheckmark.js","webpack://QuickQuote/./src/bvcomponents/look/popups/leadCapturePopup/unlockCalculations/unlockCalculationSteps.js","webpack://QuickQuote/./src/bvcomponents/ui/loadingDots.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookListFeature/lookListActiveFeatureMobileButton.js","webpack://QuickQuote/./src/bvcomponents/ui/installButton.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/shoppingCartListSwitcher.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/advancedQuoting/advancedQuotingSwitcher.js","webpack://QuickQuote/./src/bvcomponents/popups/orderCompletePopup/cloneQuoteButton.js","webpack://QuickQuote/./src/bvcomponents/projectScope/projectScopeMobileHeader.js","webpack://QuickQuote/./src/bvcomponents/projectScope/projectScopeSections.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionFeatureInfo/featureInfo.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionFeatureInfo/featureInfoBrand.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionMainList.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionRowList/rowItem.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/featureCartItemsCount.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/wizardList/wizardFilterItem.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionGridList/selectionGridFiltersTitle.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionGridList/gridFunctions.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/gallery.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionDescriptionCover.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/notCompatibleView.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionMainHeader.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionFooterSubParts.js","webpack://QuickQuote/./src/bvcomponents/qkbPages/materialsCommon/materialsFooterBackButton.js","webpack://QuickQuote/./src/bvcomponents/tutorials/materialsAgentTutorial.js","webpack://QuickQuote/./src/bvcomponents/qkbPages/materialsWizard/materialsWizardFooterSteps.js","webpack://QuickQuote/./src/bvcomponents/qkbPages/materialsWizard/withMaterialsWizardFooterCommon.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/shoppingCartItemsList.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/shoppingCartItemsListItem.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/noteEditor.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/shoppingCartItemsBundledProducts.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/advancedQuoting/advancedQuotingListItem.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/advancedQuoting/advancedQuotingListItemRemoveButton.js","webpack://QuickQuote/./src/bvcomponents/priceWorksheet/discountSubTotal.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/advancedQuoting/advancedQuotingSubpartItems.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/similarProducts/similarProducts.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/recentlyViewedItems.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/depositDisclaimer.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/shoppingCartFooter.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/shoppingCartTotalColumns.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/shoppingCartCanvas.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/shoppingCartInstallationQuestion.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/quotes.js","webpack://QuickQuote/./src/bvcomponents/priceWorksheet/priceWorksheetView.js","webpack://QuickQuote/./src/bvcomponents/ui/dropdowns/discountDropdown.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/unlockCalculationsTutorialFunctions.js","webpack://QuickQuote/./src/bvcomponents/look/hooks/useUpdateSureTax.js","webpack://QuickQuote/./src/bvcomponents/look/lookCanvas.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheFeature/groheFeatureButtons.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheFeature/groheFeatureContentInCart.js","webpack://QuickQuote/./src/bvcomponents/look/hocs/withUpdateCartItems.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheFeature/groheFeatureTopButtons.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookLockedButton.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheFeature/groheFeatureWizardButton.js","webpack://QuickQuote/./src/bvcomponents/look/hocs/analyticsEventHooks.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheMobile/groheMobileFeature/groheMobile3dButton.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookMainWizardList.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookMainFeatureGroupsExpandIcon.js","webpack://QuickQuote/./src/bvcomponents/look/hocs/withChangeFeature.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookCategory/lookMainCategoryLoading.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheFeatures/groheFeaturesHeader.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheFilters/groheFiltersIcon.js","webpack://QuickQuote/./src/bvcomponents/visComponents/featureSubDescription.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheMobile/groheMobileFooterFiltersButton.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheMobile/groheMobileFooterViewButton.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookFeature/lookFeatureColorMatchCheckbox.js","webpack://QuickQuote/./src/bvcomponents/look/hocs/withFeatureColorMatch.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartRoutes.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartLogin/groheCartLoginRegister.js","webpack://QuickQuote/./src/bvcomponents/look/ui/lookAddressInput.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/getCreditCardType.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartContent.js","webpack://QuickQuote/./src/bvcomponents/look/hocs/withCartCheckoutClick.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartPayment/groheBillingAndShippingInputs.js","webpack://QuickQuote/./src/bvcomponents/look/ui/lookInput.js","webpack://QuickQuote/./src/bvcomponents/look/lookRouting.js","webpack://QuickQuote/./src/bvcomponents/look/lookLixilCategories.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookWizard/lookWizardContentCanvas.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheWizard/groheWizardSelectedSteps.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookMainWizardSelectedStep.js","webpack://QuickQuote/./src/bvcomponents/look/shop/shopPage.js","webpack://QuickQuote/./src/bvcomponents/look/shop/shopPagesFunctions.js","webpack://QuickQuote/./src/bvcomponents/look/shop/shopFeaturePage.js/withShopFeatureVisualizeClick.js","webpack://QuickQuote/./src/bvcomponents/look/shop/shopFeatureOptionsCommon.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookCartButton.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookNotInVisualizerPopper.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookIntro/lookIntroFooterAnchor.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookFeature/lookFeature.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookCategory/lookCategoryHeader.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookWizard/lookWizardHeader.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookMainWizardSelectedSteps.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookWizard/lookWizardLmContent.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookWizard/lookWizardCompletedAlertModal.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookRoomIdeasButton.js","webpack://QuickQuote/./src/main.js","webpack://QuickQuote/./src/polyfills.js","webpack://QuickQuote/./src/lib/babel-core/5.6.15-browser-polyfill.min.js","webpack://QuickQuote/./src/app.js","webpack://QuickQuote/./src/bvcomponents/index.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/commonVisualizer.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/navigation/desktopNavigation.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/navigation/contextMenuQKBButtons.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/navigation/mobileNavigation.js","webpack://QuickQuote/./src/bvcomponents/common/dashboardButtons/backToDashboardButton.js","webpack://QuickQuote/./src/bvcomponents/popups.js","webpack://QuickQuote/./src/bvcomponents/popups/applyPopup.js","webpack://QuickQuote/./src/bvcomponents/popups/userPopup/userPopup.js","webpack://QuickQuote/./src/bvcomponents/popups/userPopup/userFields.js","webpack://QuickQuote/./src/bvcomponents/common/calendar/confirmationScheduleView.js","webpack://QuickQuote/./src/bvcomponents/common/calendar/monthView.js","webpack://QuickQuote/./src/bvcomponents/common/calendar/monthHeaderView.js","webpack://QuickQuote/./src/bvcomponents/common/calendar/dayView.js","webpack://QuickQuote/./src/bvcomponents/common/calendar/timeTableView.js","webpack://QuickQuote/./src/bvcomponents/ui/mobileRotateButtonIcon.js","webpack://QuickQuote/./src/bvcomponents/visComponents/docuSignLayer.js","webpack://QuickQuote/./src/bvcomponents/popups/depositPopup.js","webpack://QuickQuote/./src/bvcomponents/popups/assignQuotePopup/assignQuotePopup.js","webpack://QuickQuote/./src/bvcomponents/popups/assignQuotePopup/assignQuotePopupContent.js","webpack://QuickQuote/./src/bvcomponents/popups/assignQuotePopup/assignQuoteCustomersList.js","webpack://QuickQuote/./src/bvcomponents/popups/assignQuotePopup/assignQuoteEmployeesList.js","webpack://QuickQuote/./src/bvcomponents/popups/assignQuotePopup/assignQuotePopupContentHoc.js","webpack://QuickQuote/./src/bvcomponents/popups/assignQuotePopup/assignQuotePopupNewCustomer.js","webpack://QuickQuote/./src/bvcomponents/popups/assignQuotePopup/assignQuotePopupNewCustomerInput.js","webpack://QuickQuote/./src/bvcomponents/popups/assignQuotePopup/assignQuotePopupNewCustomerSelect.js","webpack://QuickQuote/./src/bvcomponents/popups/assignQuotePopup/assignQuotePopupSaveButtons.js","webpack://QuickQuote/./src/bvcomponents/common/agreeEmailCheckbox.js","webpack://QuickQuote/./src/bvcomponents/popups/assignQuotePopup/assignQuoteContractSelection.js","webpack://QuickQuote/./src/bvcomponents/popups/orderCompletePopup/orderCompletePopup.js","webpack://QuickQuote/./src/bvcomponents/common/cookieMessage.js","webpack://QuickQuote/./src/bvcomponents/popups/sqftFeaturesPopup/sqftFeaturesPopup.js","webpack://QuickQuote/./src/bvcomponents/popups/sqftFeaturesPopup/sqftFeaturesPopupApplyButton.js","webpack://QuickQuote/./src/bvcomponents/popups/sqftFeaturesPopup/sqftFeaturesPopupBody.js","webpack://QuickQuote/./src/bvcomponents/popups/sqftFeaturesPopup/sqftFeaturesPopupParentList.js","webpack://QuickQuote/./src/bvcomponents/popups/sqftFeaturesPopup/sqftFeaturesPopupFeature.js","webpack://QuickQuote/./src/bvcomponents/popups/sqftFeaturesPopup/sqftFeaturesPopupFeatureDropdown.js","webpack://QuickQuote/./src/bvcomponents/popups/sqftFeaturesPopup/sqftFeaturesPopupFeaturePrice.js","webpack://QuickQuote/./src/bvcomponents/popups/sqftFeaturesPopup/sqftFeaturesPopupFeatureDeleteButton.js","webpack://QuickQuote/./src/bvcomponents/popups/sqftFeaturesPopup/sqftFeaturesPopupFeatureEyeball.js","webpack://QuickQuote/./src/bvcomponents/popups/sqftFeaturesPopup/sqftFeaturesPopupParentListTitle.js","webpack://QuickQuote/./src/bvcomponents/popups/sqftFeaturesPopup/sqftFeaturesPopupTitleFeatureDropdown.js","webpack://QuickQuote/./src/bvcomponents/popups/wizardConflictPopup/wizardConflictPopup.js","webpack://QuickQuote/./src/bvcomponents/popups/wizardConflictPopup/wizardConflictPopupCartItem.js","webpack://QuickQuote/./src/bvcomponents/popups/wizardConflictPopup/wizardConflictPopupButtons.js","webpack://QuickQuote/./src/bvcomponents/priceWorksheet/discountAllFinanceOptionsPopup.js","webpack://QuickQuote/./src/bvcomponents/popups/checkoutPopup.js","webpack://QuickQuote/./src/bvcomponents/sqft/fakeOfflineSqft.js","webpack://QuickQuote/./src/bvcomponents/sqft/polyfills/object.dataset.js","webpack://QuickQuote/./src/bvcomponents/sqft/polyfills/string.includes.js","webpack://QuickQuote/./src/bvcomponents/sqft/polyfills/string.startsWith.js","webpack://QuickQuote/./src/bvcomponents/sqft/polyfills/jquery.preBind.js","webpack://QuickQuote/./src/bvcomponents/sqft/polyfills/arrayMethods.js","webpack://QuickQuote/./src/bvcomponents/sqft/polyfills/objectMethods.js","webpack://QuickQuote/./src/bvcomponents/sqft/polyfills/numberMethods.js","webpack://QuickQuote/./src/bvcomponents/sqft/lib/wrapText.js","webpack://QuickQuote/./src/bvcomponents/sqft/lib/fraction.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/sqftFooter.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/sqftFooterActiveShapeColorset.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/sqftFooterSlabInfo.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/SqftIcons.js","webpack://QuickQuote/./src/bvcomponents/popups/changeLayoutPopup.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/layouts/rectangleIsland.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/layouts/wideAngleReverted.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/manualCalculate/SqftManualCalculateWindow.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/manualCalculate/SqftCountertopRow.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/manualCalculate/SqftEdgeRow.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/manualCalculate/SqftEdgeRowDropdown.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/manualCalculate/SqftBacksplashRow.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/popup/SqftNavSettingsWindow.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/popup/SqftTutorial.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/popup/SqftSystemMessage.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/popup/AR3DPopup.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/popup/ar3d/ThreeDContent.js","webpack://QuickQuote/./src/bvcomponents/popups/sqftFeaturesPopup/sqftFeaturesPopupChangeColorButton.js","webpack://QuickQuote/./src/bvcomponents/popups/sqftFeaturesPopup/sqftFeaturesPopupSaveImageButton.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/ar3d/threeD/ShapesGoogleModelViewer.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/ar3d/threeD/ShapesThreeJsViewer.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/ar3d/threeD/workspaceComponents/LightIntensitySlider.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/ar3d/threeD/workspaceComponents/LightingSwitch.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/ar3d/threeD/glbViewer/SeparateModelGLBViewer.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/ar3d/threeD/glbViewer/ModelLoader.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/ar3d/threeD/glbViewer/HDRMapLoader.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/ar3d/threeD/glbViewer/SingleModelGLBViewer.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/ar3d/threeD/workspaceComponents/ScreenshotButton.js","webpack://QuickQuote/./src/bvcomponents/ui/multiLoaderSteps.js","webpack://QuickQuote/./src/bvcomponents/common/svgIcons/multiLoaderIcons.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/popup/ar3d/ArContent.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/ar3d/ar/GLBLoader.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/ar3d/ar/WebXRGoogleModelViewer.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/popup/SqftSystemDeleteMessage.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/slab/SqftLoadSlabWindow.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/slab/SqftStepSelectSlab.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/slab/SqftStepCropSlab.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/slab/SqftStepSelectImageType.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/slab/SqftLoadSlabHeader.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/slab/SqftLoadSlabPricingCheckbox.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/slab/SqftLoadSlabFooter.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/slab/SqftLoadSlabFooterSelectImageTypeButtons.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/controls/labels/sqftLabelsContextMenuCategorySwitching.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/overlays/contextmenu/contextmenuList.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/overlays/contextmenu/contextmenuButtons.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/controls/labels/sqftLabelsContextMenu.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/popup/SqftContextMenuV2.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/popup/ChangeValuePopupWindow.js","webpack://QuickQuote/./src/bvcomponents/sqft/hocs/useLongPress.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/NavigationSidebar.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/SqftNavAside.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/SqftNavAside2.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/SqftNavAsideCabinet.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/cabinet/SqftToolMenuCabinet.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/countertop/SqftToolMenuCountertop.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/controls/WaterfallController.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/countertop/toolMenu/SqftNavShapes.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/layouts/dot.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/SqftNavSummary.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/summary/SqftSummaryRadii.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/summary/SqftSummaryAngles.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/summary/SqftSummaryBumpouts.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/summary/SqftSummaryFeatureColors.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/summary/SqftSummaryEdges.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/summary/SqftSummaryBacksplashes.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/summary/SqftSummaryWall.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/countertop/toolMenu/SqftNavEdges.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/countertop/toolMenu/SqftNavEdgesFeature.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/controls/edgesCanvas.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/countertop/toolMenu/SqftNavEdgesMiteredButton.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/commonTools/SqftNavAppliances.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/commonTools/SqftNavAppliancesItem.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/countertop/toolMenu/SqftNavBumpouts.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/controls/bumpout.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/countertop/toolMenu/SqftNavBacksplashes.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/countertop/toolMenu/SqftNavBacksplashesFeature.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/countertop/toolMenu/toolBacksplash/SqftNavBacksplashesCustomButton.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/countertop/toolMenu/SqftNavCorners.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/countertop/toolMenu/toolRadius/SqftNavRadius.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/countertop/toolMenu/toolCorner/SqftNav45Corner.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menuSecondRowButtons/WallsUpModeButton.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menuSecondRowButtons/WallsLockModeButton.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menuSecondRowButtons/ShowMeasurementsInTheSlabModeButton.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/cabinet/toolMenu/SqftNavigationUpper.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/cabinet/toolMenu/commonParts/SqftFeaturesChecker.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/cabinet/toolMenu/commonParts/SqftOptionsRelatedItemRow.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/cabinet/toolMenu/SqftNavigationHandles.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/cabinet/toolMenu/toolHandles/SqftOptionsHandles.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/cabinet/toolMenu/toolHandles/SqftOptionsHandlesContent.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/cabinet/toolMenu/SqftNavigationBottom.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/cabinet/toolMenu/SqftNavigationCrownMolding.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/cabinet/toolMenu/toolCrown/SqftOptionsCrown.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/controls/crownmoldingCanvas.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/commonTools/SqftNavFeatures.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/commonTools/SqftNavFeaturesRow.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/SqftNavAsideSlabMode.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/slab/SqftSlabWindow.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/slab/toolMenu/SqftNavSeam.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/countertop/toolMenu/SqftNavMitered.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/countertop/toolMenu/toolMitered/navMiteredSegment.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/countertop/toolMenu/SqftNavUnderlayment.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/countertop/toolMenu/SqftNavWaterfall.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/countertop/toolMenu/toolWaterfall/NavWaterfallSection.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/countertop/toolMenu/toolWaterfall/NavWaterfallSegment.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/countertop/toolMenu/toolWaterfall/NavWaterfallSegmentSwitcher.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/cabinet/toolMenu/SqftNavigationTall.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/cabinet/filterMenu/SqftNavFiltersMenu.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/commonTools/featuresGrid/SqftNavFeaturesGrid.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/commonTools/featuresGrid/FeaturesGrid.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/commonTools/featuresGrid/FeaturesRow.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/countertop/toolMenu/toolBacksplash/SqftNavCustomBacksplashes.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/countertop/toolMenu/toolBacksplash/SqftNavCustomBacksplashSection.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/countertop/toolMenu/toolBacksplash/SqftNavCustomBacksplashSegment.js","webpack://QuickQuote/./src/bvcomponents/sqft/hocs/onLoad/useUpdateSqftConfig.js","webpack://QuickQuote/./src/bvcomponents/sqft/hocs/onLoad/useAddDeviceClass.js","webpack://QuickQuote/./src/bvcomponents/sqft/hocs/onLoad/useToggleRoomsSwitcher.js","webpack://QuickQuote/./src/bvcomponents/sqft/hocs/onLoad/useOpenSQFTMenu.js","webpack://QuickQuote/./src/bvcomponents/sqft/hocs/onLoad/useCheckWizardActiveItem.js","webpack://QuickQuote/./src/bvcomponents/sqft/hocs/onLoad/useResetState.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/header/SqftHeader.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/header/quotesSwitcher/quotesSwitcher.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/header/quotesSwitcher/quotesSwitcherLists.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/header/quotesSwitcher/quotesSwitcherListQuotes.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/header/quotesSwitcher/quotesSwitcherListCategories.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/header/quotesSwitcher/quotesSwitcherListRoomGroups.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/header/ModeDropdown.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/ui/Dropdown.js","webpack://QuickQuote/./src/bvcomponents/sqft/hocs/useChangeCabinetsColor.js","webpack://QuickQuote/./src/bvcomponents/sqft/hocs/onLoad/useUpdateCabinetFeatures.js","webpack://QuickQuote/./src/bvcomponents/sqft/squareFootageToolViewWorkspace.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/SqftCanvasContainer.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/SqftCanvas.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/SqftUseCanvas.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/controls/scale.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/tutorial.js","webpack://QuickQuote/./src/bvcomponents/sqft/translatesProvider.js","webpack://QuickQuote/./src/bvcomponents/sqft/hocs/onLoad/useImportSQFTData.js","webpack://QuickQuote/./src/bvcomponents/sqft/hocs/onLoad/useUpdateSlabFeatures.js","webpack://QuickQuote/./src/bvcomponents/look/popups/lookWhitePage.js","webpack://QuickQuote/./src/bvcomponents/look/list/lookList.js","webpack://QuickQuote/./src/bvcomponents/look/list/lookListLeft.js","webpack://QuickQuote/./src/bvcomponents/look/list/lookListContentHeader.js","webpack://QuickQuote/./src/bvcomponents/look/list/lookListMain.js","webpack://QuickQuote/./src/bvcomponents/look/list/listFeatureActions/lookListMainFeatureActions.js","webpack://QuickQuote/./src/bvcomponents/look/list/listFeatureActions/lookListMainFeatureActionsMoreButton.js","webpack://QuickQuote/./src/bvcomponents/look/list/listFeatureActions/lookListMainFeatureActionsPopper.js","webpack://QuickQuote/./src/bvcomponents/look/list/listFeatureActions/lookListMainFeatureActionsPopperButtons.js","webpack://QuickQuote/./src/bvcomponents/look/list/lookFeatureQuantity.js","webpack://QuickQuote/./src/bvcomponents/look/list/lookFeatureQuantityText.js","webpack://QuickQuote/./src/bvcomponents/look/list/lookListBundleFeatures.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartItemActions.js","webpack://QuickQuote/./src/bvcomponents/look/list/lookListMainFeatureCheckbox.js","webpack://QuickQuote/./src/bvcomponents/look/list/lookListMainFeatureShipping.js","webpack://QuickQuote/./src/bvcomponents/look/hocs/withOpenMiniCartPostMessage.js","webpack://QuickQuote/./src/bvcomponents/look/layouts/lookLayout.js","webpack://QuickQuote/./src/bvcomponents/look/layouts/lookLayoutHeader.js","webpack://QuickQuote/./src/bvcomponents/look/layouts/lookLayoutMain.js","webpack://QuickQuote/./src/bvcomponents/look/layouts/lookLayoutItem.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookSideBar/lookSideBarLayoutButton.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookSideBar/lookSideBarSaveButton.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookSideBar/lookSideBarEditButton.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookSideBar/lookSideBarEditButtonPopper.js","webpack://QuickQuote/./src/bvcomponents/look/hocs/withDemoShow.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookSideBar/lookSideBarMoreButton.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookSideBar/lookSidebarModals/lookSideBarModal.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookSideBar/lookSidebarModals/lookSideBarShareModal.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookSideBar/lookSideBarFiltersButton.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookSideBar/lookSideBarPingPilotButton.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookSideBar/lookSideBarRevertButton.js","webpack://QuickQuote/./src/bvcomponents/look/user/lookUser.js","webpack://QuickQuote/./src/bvcomponents/look/user/lookUserHeader.js","webpack://QuickQuote/./src/bvcomponents/look/user/lookUserLeftSide.js","webpack://QuickQuote/./src/bvcomponents/look/user/lookUserContent.js","webpack://QuickQuote/./src/bvcomponents/look/user/lookLoginButton.js","webpack://QuickQuote/./src/bvcomponents/look/user/lookUserInputs.js","webpack://QuickQuote/./src/bvcomponents/look/user/lookRegisterCheckboxes.js","webpack://QuickQuote/./src/bvcomponents/look/user/lookRegisterButton.js","webpack://QuickQuote/./src/bvcomponents/look/rooms/lookRooms.js","webpack://QuickQuote/./src/bvcomponents/look/rooms/lookRoomsMain.js","webpack://QuickQuote/./src/bvcomponents/look/rooms/lookRoomPreset.js","webpack://QuickQuote/./src/bvcomponents/look/popups/lookPopups.js","webpack://QuickQuote/./src/bvcomponents/look/popups/lookMessageBoxPopup.js","webpack://QuickQuote/./src/bvcomponents/look/popups/lookQuestionPopup.js","webpack://QuickQuote/./src/bvcomponents/look/popups/lookStylePopup.js","webpack://QuickQuote/./src/bvcomponents/look/popups/lookStylePopupFeature.js","webpack://QuickQuote/./src/bvcomponents/look/popups/lookStylePopupButtons.js","webpack://QuickQuote/./src/bvcomponents/look/popups/lookOverlayQuestions.js","webpack://QuickQuote/./src/bvcomponents/look/popups/lookOverlayQuestionsButtons.js","webpack://QuickQuote/./src/bvcomponents/look/hocs/withExitPostMessage.js","webpack://QuickQuote/./src/bvcomponents/look/popups/lookLoadingPopup.js","webpack://QuickQuote/./src/bvcomponents/look/popups/lookLoadingBar.js","webpack://QuickQuote/./src/bvcomponents/look/popups/lookNotCompatiblePopup.js","webpack://QuickQuote/./src/bvcomponents/look/popups/leadCapturePopup/leadCapturePopup.js","webpack://QuickQuote/./src/bvcomponents/look/popups/leadCapturePopup/leadCapturePopupContent.js","webpack://QuickQuote/./src/bvcomponents/look/popups/leadCapturePopup/leadCapturePopupContentInputs.js","webpack://QuickQuote/./src/bvcomponents/look/popups/leadCapturePopup/leadCapturePopupFooter.js","webpack://QuickQuote/./src/bvcomponents/look/popups/leadCapturePopup/leadCapturePopupFooterSubmit.js","webpack://QuickQuote/./src/bvcomponents/look/popups/leadCapturePopup/leadCapturePopupTwoFa.js","webpack://QuickQuote/./src/bvcomponents/look/popups/leadCapturePopup/leadCapturePopupTwoFaVerify.js","webpack://QuickQuote/./src/bvcomponents/look/popups/leadCapturePopup/leadCapturePopupOptInCheckbox.js","webpack://QuickQuote/./src/bvcomponents/look/popups/leadCapturePopup/leadCapturePopupBox.js","webpack://QuickQuote/./src/bvcomponents/look/popups/leadCapturePopup/leadCapturePopupBoxImage.js","webpack://QuickQuote/./src/bvcomponents/look/popups/leadCapturePopup/unlockCalculations/unlockCalculationStep.js","webpack://QuickQuote/./src/bvcomponents/look/popups/lockedOverlay/lookAllWallsTutorial.js","webpack://QuickQuote/./src/bvcomponents/look/popups/lockedOverlay/lookAllWallsTutorialHighlightFeature.js","webpack://QuickQuote/./src/bvcomponents/look/animations/lookMobileInfoButtonAnimatedIcon.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookListFeature/lookFeatureItemLocked.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookListFeature/lookListFeatureName.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookWizard/lookWizardSectionListFeatureQuantity.js","webpack://QuickQuote/./src/bvcomponents/popups/printPopup/printPopup.js","webpack://QuickQuote/./src/qkbRoutes.js","webpack://QuickQuote/./src/bvcomponents/quoteDesign/quoteDesignPage.js","webpack://QuickQuote/./src/bvcomponents/ui/websiteButton.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/hideItemsSwitcher.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/fabricatorCostSwitcher.js","webpack://QuickQuote/./src/bvcomponents/initialFlow/initialFlow.js","webpack://QuickQuote/./src/bvcomponents/initialFlow/initialFlowFooterQuestion.js","webpack://QuickQuote/./src/bvcomponents/initialFlow/initialFlowType.js","webpack://QuickQuote/./src/bvcomponents/initialFlow/initialFlowRoom.js","webpack://QuickQuote/./src/bvcomponents/initialFlow/initialFlowLayout.js","webpack://QuickQuote/./src/bvcomponents/introVideo.js","webpack://QuickQuote/./src/bvcomponents/projectScope/projectScope.js","webpack://QuickQuote/./src/bvcomponents/projectScope/projectScopeMobile.js","webpack://QuickQuote/./src/bvcomponents/projectScope/projectScopeSearchInput.js","webpack://QuickQuote/./src/bvcomponents/projectScope/projectScopeDesktop.js","webpack://QuickQuote/./src/bvcomponents/projectScope/projectScopeDesktopSearchInput.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionWindowPage.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionWindow.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionWindowBvRequests.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionMain.js","webpack://QuickQuote/./src/bvcomponents/installation/instList.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionFeatureInfo/featureInfoAssociated.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionFeatureInfo/featureInfoAssociatedProducts.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionFeatureInfo/featureInfoAssociatedProduct.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionFeatureInfo/featureInfoDesc.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionFeatureInfo/featureInfoMaterial.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionFeatureInfo/featureInfoImage.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionFeatureInfo/featureInfoImagesMobile.js","webpack://QuickQuote/./src/bvcomponents/ui/addProductNoteButton.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionFeatureInfo/addProductNoteEditor.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionRowList/selectionMainVirtualizedList.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionRowList/rowItemButtons.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionRowList/rowItemQuantity.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionRowList/rowItemPrice.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionRowList/rowItemRelatedProductsButton.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionRowList/rowItemRelatedProducts.js","webpack://QuickQuote/./src/bvcomponents/qkbPages/materialsWizard/materialsWizardSqftButton.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/wizardList/wizardList.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/wizardList/wizardDesktopGrid.js","webpack://QuickQuote/./src/interfaces/wizardObjectInterface.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/wizardList/wizardMobileGrid.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionGridList/selectionMainVirtualizedGrid.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionGridList/selectionMainVirtualizedFiltersGrid.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionGridList/selectionGridFiltersTitleDropdown.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionGridList/selectionMainVirtualizedGridMobile.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionGridList/selectionMainVirtualizedFiltersGridMobile.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/expandVisualizerMethods.js","webpack://QuickQuote/./src/actions/visualizerFunctions.js","webpack://QuickQuote/./src/bvcomponents/ui/icons/noInternetIcon.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionViewSwitchers.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/filtersButton.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionFooter.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionMainSelect.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionMainSelectCategory.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionFooterSubPart.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionFooterSubSteps.js","webpack://QuickQuote/./src/bvcomponents/qkbPages/materialsWizard/materialsWizard.js","webpack://QuickQuote/./src/bvcomponents/qkbPages/materialsWizard/materialsWizardBody.js","webpack://QuickQuote/./src/bvcomponents/qkbPages/materialsWizard/materialsWizardMain.js","webpack://QuickQuote/./src/bvcomponents/qkbPages/materialsCommon/materialsMainCanvas.js","webpack://QuickQuote/./src/bvcomponents/qkbPages/materialsCommon/materialsMainCanvasLayoutButton.js","webpack://QuickQuote/./src/bvcomponents/qkbPages/materialsWizard/materialsWizardMainList.js","webpack://QuickQuote/./src/bvcomponents/qkbPages/materialsWizard/materialsWizardHistoryListener.js","webpack://QuickQuote/./src/bvcomponents/qkbPages/materialsWizard/materialsWizardFooterStep.js","webpack://QuickQuote/./src/bvcomponents/qkbPages/materialsCommon/useExpandCollapseLogic.js","webpack://QuickQuote/./src/bvcomponents/qkbPages/materialsWizard/materialsWizardFooterButtons.js","webpack://QuickQuote/./src/bvcomponents/qkbPages/materialsWizard/materialsWizardFooterDropDown.js","webpack://QuickQuote/./src/bvcomponents/qkbPages/materialsWizard/materialsWizardFooterSelectButton.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/shoppingCartView.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/shoppingCartMobile.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/shoppingCartMobileHeader.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/changeRoomButton.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/priceInput.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/advancedQuoting/cartItemQuantity.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/advancedQuoting/cartItemCalcButton.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/advancedQuoting/cartItemTotal.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/advancedQuoting/cartItemSearch.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/advancedQuoting/cartItemSearchButton.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/shoppingCartDiscountsList.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/shoppingCartDiscountsListItem.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/shoppingCartItemsListInstallationItem.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/advancedQuoting/advancedQuotingList.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/similarProducts/similarProductsList.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/similarProducts/similarProductsListItem.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/advancedQuoting/advancedQuotingWizard/advancedQuotingWizard.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/advancedQuoting/advancedQuotingWizard/advancedQuotingWizardGroups.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/advancedQuoting/advancedQuotingWizard/advancedQuotingWizardGroupsSearch.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/shoppingCartItemsListWizardCustomItem.js","webpack://QuickQuote/./src/bvcomponents/ui/priceWorksheetButton.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/shoppingCartTaxInput.js","webpack://QuickQuote/./src/bvcomponents/ui/visualizerButton.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/shoppingCartFooterSubParts.js","webpack://QuickQuote/./src/bvcomponents/ui/buttonGroup.js","webpack://QuickQuote/./src/bvcomponents/qkbPages/materialsWizard/shoppingCartWizardFooterSteps.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/quote.js","webpack://QuickQuote/./src/bvcomponents/priceWorksheet/priceWorksheetList.js","webpack://QuickQuote/./src/bvcomponents/priceWorksheet/discount.js","webpack://QuickQuote/./src/bvcomponents/priceWorksheet/discountAdd.js","webpack://QuickQuote/./src/bvcomponents/priceWorksheet/discountDeposit.js","webpack://QuickQuote/./src/bvcomponents/priceWorksheet/discountFinance.js","webpack://QuickQuote/./src/bvcomponents/priceWorksheet/discountNestedParent.js","webpack://QuickQuote/./src/bvcomponents/priceWorksheet/discountNestedChild.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/shoppingCartDesktop.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/unlockCalculations.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/unlockCalculationsSteps.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/unlockCalculationsTutorial.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/unlockCalculationsTutorialLowes.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/shoppingCartSureTaxUpdater.js","webpack://QuickQuote/./src/misc/updateSureTax.js","webpack://QuickQuote/./src/bvcomponents/popups/contractSign/contractsPopup.js","webpack://QuickQuote/./src/bvcomponents/popups/contractSign/contractsPopupSuccess.js","webpack://QuickQuote/./src/bvcomponents/popups/contractSign/contractsPopupDocument.js","webpack://QuickQuote/./src/bvcomponents/popups/contractSign/contractsPopupFooter.js","webpack://QuickQuote/./src/bvcomponents/common/pager.js","webpack://QuickQuote/./src/api/contract-api.js","webpack://QuickQuote/./src/bvcomponents/popups/contractSign/contractInterface.js","webpack://QuickQuote/./src/bvcomponents/popups/contractSign/contractsPopupFields.js","webpack://QuickQuote/./src/bvcomponents/popups/contractSign/contractsPopupSignatureField.js","webpack://QuickQuote/./src/bvcomponents/popups/contractSign/contractsPopupCheckboxField.js","webpack://QuickQuote/./src/bvcomponents/popups/contractSign/contractsPopupNextIndicator.js","webpack://QuickQuote/./src/bvcomponents/popups/contractSign/contractsPopupFieldValue.js","webpack://QuickQuote/./src/bvcomponents/popups/contractSign/signaturePadPopup.js","webpack://QuickQuote/./src/bvcomponents/popups/contractSign/receiptSign.js","webpack://QuickQuote/./src/bvcomponents/look/popups/lockedOverlay/lookLockTutorial.js","webpack://QuickQuote/./src/bvcomponents/look/popups/lockedOverlay/lookLockTutorialModal.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheComponents.js","webpack://QuickQuote/./src/bvcomponents/look/lookZoomer.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookContextMenu.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookContextMenuContent.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookContextMenuVanityContent.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheSidebar.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheFeature/groheFeature.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheFeature/groheFeatureContent.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheFeature/groheFeatureOptionsType.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheFeature/groheFeatureOptionsShelfSide.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheFeature/groheFeatureOptionsSide.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheFeature/groheFeatureOptionsShowerPan.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheFeature/groheFeatureOptionsCabinetSide.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheFeature/groheFeatureOptionsBodySpray.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheFeature/groheFeatureOptionsSlatWall.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheFeature/groheRequiredFeatures.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheFeature/groheFeaturesTotalPrice.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheFeature/groheRequiredFeaturesSlider.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheMobile/groheMobileFeature/groheMobileFeature.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheMobile/groheMobileFeature/groheMobileFeatureAddedToTheCart.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheCategories/groheCategories.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheCategories/groheCategory.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheFilters/groheFilters.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheSimilarProducts.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheFeature/groheFeatureShort.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheFeatures/groheFeatures.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheQuotingTool/groheQuotingTool.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheQuotingTool/groheQuotingToolIntro.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheQuotingTool/groheQuotingToolContent.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheQuotingTool/groheQuotingToolSteps.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheQuotingTool/groheQuotingToolResult.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheFeatureInfo.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookFeature/lookFeatureInfoContent.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookFeature/lookFeatureInfo3d.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookFeature/lookFeatureInfo3dViewer.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookFeature/lookFeatureInfoButtons.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookFeature/lookFeatureInfoAug.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheMobile/groheMobileFooter.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheMobile/groheMobileFooterButtons.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheWizard/groheWizardCompletedButtons.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheRoomLayouts/groheRoomLayouts.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheRoomLayouts/groheRoomLayoutsContent.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheRoomLayouts/groheLayoutItem.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheRoomIdeas/groheRoomIdeasContent.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheRoomIdeas/groheRoomPreset.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheCategories/groheSubCategories.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheTopButtons/groheTopButtons.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheTopButtons/groheExitButton.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheTopButtons/groheMenuButton.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheTopButtons/groheShareParentButton.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheTopButtons/groheShareButton.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheTopButtons/groheSaveButton.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheTopButtons/grohePingPilotButton.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheTopButtons/groheShopButton.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheSameColorFeatures/groheSameColorFeatures.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheSameColorFeatures/groheSameColorFeaturesContent.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheSidebarHeader.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartLogin/groheCartLogin.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartLogin/groheCartLoginHeader.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartStepper.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartLogin/groheCartLoginRegisterInputs.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartLogin/groheCartLoginRegisterCheckbox.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartPages/groheCartSuccess.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartDesignRecommended/groheCartDesignRecommended.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartDesignRecommended/groheCartDesignRecommendedList.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartDesignRecommended/groheCartDesignRecommendedFeature.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartPages/groheCartTerms.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartConfirm/groheCartConfirm.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartConfirm/groheCartConfirmHeader.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartDeliveryColumn.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartCardColumns.js","webpack://QuickQuote/./src/bvcomponents/common/creditCardIcons.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartDisclaimer.js","webpack://QuickQuote/./src/bvcomponents/look/hocs/withPaymentSubmit.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartTwoFA/groheCartTwoFA.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartTwoFA/groheCartTwoFAVerify.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCart.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartHeader.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartFooter.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartPayment/groheCartBilling.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartPayment/groheCartShippingDropdown.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartPayment/groheCartPaymentDropdown.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartPayment/groheCartBillingDropdown.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartPayment/groheCartShipping.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartPayment/groheCartPayment.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartPayment/groheCartPaymentInputs.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartPayment/groheCartBillingInfo.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartDelivery/groheCartDelivery.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartDelivery/groheCartDeliveryContent.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartDelivery/groheCartDeliverySection.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartDelivery/shippingTimes.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartDelivery/groheCartDeliveryInterface.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheWizard/groheWizard.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheWizard/groheWizardContent.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheWizard/groheWizardContentFeature.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheWizard/groheWizardContentSingleFeature.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookWizard/lookWizardSection.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookWizard/lookWizardSectionGroup.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookWizard/lookWizardSectionList.js","webpack://QuickQuote/./src/bvcomponents/look/popups/lockedOverlay/lookLockTutorialCaller.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookWizard/lookWizardSectionFilters.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookWizard/lookWizardSectionFilterItem.js","webpack://QuickQuote/./src/bvcomponents/look/shop/shopFeaturePage.js/shopFeaturePage.js","webpack://QuickQuote/./src/bvcomponents/look/shop/shopFeaturePage.js/shopFeature.js","webpack://QuickQuote/./src/bvcomponents/look/shop/shopFeaturePage.js/shopFeatureImage.js","webpack://QuickQuote/./src/bvcomponents/look/shop/shopFeaturePage.js/shopFeatureImageGalleryItem.js","webpack://QuickQuote/./src/bvcomponents/look/shop/shopFeaturePage.js/shopFeatureVisualizeButton.js","webpack://QuickQuote/./src/bvcomponents/look/shop/shopFeaturePage.js/shopFeaturePrice.js","webpack://QuickQuote/./src/bvcomponents/look/shop/shopFeaturePage.js/shopFeatureShipping.js","webpack://QuickQuote/./src/bvcomponents/look/shop/shopFeaturePage.js/shopFeatureOptions.js","webpack://QuickQuote/./src/bvcomponents/look/shop/shopFeaturePage.js/shopFeatureAddToCartComponents.js","webpack://QuickQuote/./src/bvcomponents/look/shop/shopFeaturePage.js/shopFeatureSuccessMessage.js","webpack://QuickQuote/./src/bvcomponents/look/shop/shopFeaturePage.js/shopFeatureDownloads.js","webpack://QuickQuote/./src/bvcomponents/look/shop/shopFeaturePage.js/shopFeatureBackNextButtons.js","webpack://QuickQuote/./src/bvcomponents/look/shop/shopFeaturePage.js/shopFeatureWizardButton.js","webpack://QuickQuote/./src/bvcomponents/look/shop/shopCategory/shopCategoryPage.js","webpack://QuickQuote/./src/bvcomponents/look/shop/shopCategory/shopCategoryList.js","webpack://QuickQuote/./src/bvcomponents/look/shop/shopCategory/shopCategoryVirtualizedGrid.js","webpack://QuickQuote/./src/bvcomponents/look/shop/shopCategory/shopCategoryListFeature.js","webpack://QuickQuote/./src/bvcomponents/look/shop/shopCategory/shopCategoryListFeatureOptions.js","webpack://QuickQuote/./src/bvcomponents/look/shop/shopCategory/shopCategoryAside.js","webpack://QuickQuote/./src/bvcomponents/look/shop/shopCategory/shopCategoryBackNextButtons.js","webpack://QuickQuote/./src/bvcomponents/look/shop/shopPingPilotButton.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheCompatabilitySection.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookCompatability/lookCompatabilitySectionButtons.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookCompatability/lookCompatabilitySectionContent.js","webpack://QuickQuote/./src/bvcomponents/look/lookComponents.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookMain.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookFooter.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookFooterCounts.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookMainSections.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookFeature/lookFeatureMatchingStyleAlert.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookFeature/lookFeatureMatchingStyleAlertModal.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookFeature/lookFeatureColorMatch.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookFeature/lookFeatureUnlockButton.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookMainFeatureGroups.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookMainHeader.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookMainDeleteNotification.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookWizard/lookWizardContent.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookMainSectionsMobile.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookFeature/lookFeatureMobileHeader.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookMainSectionsMobileWizard.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookMobile.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookMobileFooterButton.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookIntro/lookIntro.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookIntro/lookIntroBox.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookIntro/lookIntroBoxSteps.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookIntro/lookIntroBoxIcon.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookIntro/lookIntroCanvasHighlighting.js","webpack://QuickQuote/./src/bvcomponents/look/popups/lockedOverlay/lookLockedOverlay.js","webpack://QuickQuote/./src/bvcomponents/look/animations/lookLockedOverlayAnimatedIcon.js","webpack://QuickQuote/./src/bvcomponents/look/lookFixedButtons.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookExitButton.js","webpack://QuickQuote/./src/bvcomponents/sqft/squareFootageToolPage.js","webpack://QuickQuote/./src/bvcomponents/sqft/squareFootageToolCabinetsIntro.js","webpack://QuickQuote/./src/bvcomponents/sqft/squareFootageToolAR.js"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","1","exports","module","l","e","Promise","resolve","m","c","d","name","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","p","oe","err","console","error","jsonpArray","window","oldJsonpFunction","slice","store","compose","applyMiddleware","__REDUX_DEVTOOLS_EXTENSION__","f","createStoreWithMiddleware","_zoomLevel","_isDemo","_isShowroomMode","_isTimeoutDisabled","_isTabletMode","_kioskConfigs","_userInfo","_kioskStandAlone","document","kvConfig","kioskMode","parent","app","db","_parent","exitEditQuote","log","UseFullSizeImages","location","href","indexOf","IS_OFFLINE_MODE","offlineMode","includes","USE_SERVER_CACHING","AVAILABLE_VISUALIZERS","Bathroom","Kitchen","Fireplace","LaundryRoom","BATHROOM_VISUALIZER_TYPES","AVAILABLE_VISUALIZER_TYPES","kvScene","bvScene","bvLook","NAVIGATION_TYPES","qkb","look","product","IS_LIXIL_SERVERS","host","domain","IS_LIXIL_PRODUCTION","devMode","userId","visualizerType","toolVersion","navigationType","IS_PRODUCT_JOURNEY","IS_LOOK_JOURNEY","IS_LIXIL_UI","IS_QKB_UI","USE_FAB_FILTERS_ONLY","body","classList","add","getCommonVisualizerType","stringToCheck","toLowerCase","AVAILABLE_LANGUAGES","POST_MESSAGES","setIframeLanguage","userRegisterTrue","userRegisterFalse","userLoginTrue","userLoginFalse","IS_BATHROOM_OLD_BV_SCENE","REACT_APP_GOOGLE_API_KEY","_isQTEmbedded","_isTutorial","_visMgmt","_isDevMode","_showAllVisualizerGroups","showAllVisualizerGroups","_isMobile","test","navigator","userAgent","substr","_subdomain","IS_AS_BATHROOM","every","subDom","split","tables","config","getConfigs","configs","forEach","Config","AmazonS3","bucketName","root","encodeURI","userDataPath","replace","getScriptPath","scripts","getElementsByTagName","src","getAttribute","substring","lastIndexOf","appRootNode","layerSize","maxZoom","zoomIn","zoomOut","zoomLevel","viewSize","w","width","parseInt","height","demoUserDomains","isDemo","this","some","subdomain","kioskStandAlone","isKiosk","isShowroomMode","isTimeoutDisabled","isTabletMode","getSubdomain","isMobile","getParent","isQTEmbedded","isTutorial","isDevMode","isVisualizerManagement","userInfo","setUserInfo","getQuotePriceWithDiscounts","getQuotePriceWithTaxes","totalPriceObject","taxes","priceTaxes","reduce","acc","tax","materialTax","materialTaxes","totalPrice","totalDeliveryCost","materialPrice","installationPrice","installationTaxes","toFixedPrice","getDeliveryCost","deliveryList","getState","cartState","deliveryCostArray","delivery","cartItems","price","total","cost","calculateStoneCost","parseQuery","queryString","search","query","pairs","pair","decodeURIComponent","metaDataToCamelCase","featureThumbnailUrl","feature","size","menuType","PartMenuType","Complex","partThumbnail","dbFeature","customThumbnail","thumbnailUrl","s3FeatureImagePath","getPartThemeThumbnail","activeTheme","splitted","TAX_DISCOUNT_PCT","browserIsSafari","vendor","isIOSDevice","platform","isChrome","match","isIphoneX","iPhone","MSStream","aspect","screen","toFixed","isAndroid","isIframe","self","top","__pricingProfiles","isIE","MSInputMethodContext","documentMode","isFirefox","__pricingProfilesHit","pricingProfiles","QuotePricing","fabricatorState","pricingPreset","FEATURE_INSTALLATION","FEATURE_REGULAR","FEATURE_STONE","getFeatureType","isInstallation","stonePricingId","detectComplexLaborCartItem","cartItem","cartFeature","partId","autoAddToCart","complexLogic","hardcodedFloformV5Features","getTotalPrice","forQuote","calculateDiscount","cartItemsToCount","withNotInStock","state","filter","addedBy","CART_ITEM_ADDED_BY","user","isRemoved","isInStock","getBundledFeatures","instList","instState","fabricatorTaxes","settings","sureTax","Array","isArray","map","fabTax","id","materialRate","laborRate","nameIntl","laborTax","getInstallationsTotalCost","Number","isInteger","currentQuote","multipliedCostUsed","sort","a","b","getDifferentCurrencyCartItems","sharedFeatureName","featurePrice","parseFloat","displayFakePrice","calculateFeatureCost","quantity","fromQtCategory","stonePricing","serverState","stoneSupplier","stoneCost","SQFT_FEATURES","slabs","sqftSlabState","isSlabPricingEnabled","multipliedCost","multiplySlabCostForFeature","productPriceAfterDiscount","notTaxable","useShipping","getCartItemShippingCost","getCafeCountertopsDeliveryCost","Math","round","isEnabled","ignoreDiscounts","splitStaticPrice","priceWorksheetEnabled","discountSections","getFilteredSections","priceWorksheetState","discountSection","sortByOrder","getDiscountsForSection","customAddedDiscounts","discount","shouldCalculateDiscount","ignoreDiscount","type","DISCOUNT_TYPES","amount","cartItemToSkip","allCartItems","allSameFeaturesQuantity","checkCartItems","cItem","allStoneCost","laborExist","find","getFeatureCost","withTotalSlabCost","useSlabSqftPricing","forQuoteIndex","withCommas","ex","numberWithCommas","getSingleSlabArea","toFixedFeatureCost","storeState","slabArea","slabImageHeight","slabImageWidth","measureUnit","ceil10","sqInchesToSqFoot","mm2ToM2","quoteIndex","activeQuoteIndex","quotesState","featureCost","checkIfInCatProperty","getFeaturePriceProperty","featureTotalPrice","material","backsplashMaterial","quoteMaterial","quoteBacksplashMaterial","materials","index","isStoneFeature","fromVisualizerType","sqftState","ret","comparisonType","baseQuantity","maxQuantity","validateFeaturePrice","comparisonFor","fQuantity","plus","getHardCodedFloFormShopCartCost","$m","$b","getSqft","stoneSupplierStone","pricingProfileId","pricingPreset_id","quotePricing","__quotePricing","profile","_","first","pp","Id","ppdList","useFabricatorCostPrices","pricingProfileCostData","showSalePrices","pricingProfileDiscountData","pricingProfileData","ppd","slabSqftValue","end","materialSqft","msqft","$mc","$f","$c","$fa","ci","customDisplayName","displayName","groupName","wizardGroupId","fromWizardGroupId","wizardState","wizardActiveItem","keys","wizardSelectedValues","stepIndex","selectedValue","selectedFeature","$room","$i","$other","$useCostPrices","$useDiscountPrices","$sharedFeatureName","Function","logic","isNaN","markUpLogic","updatePriceWithMarkUp","__stoneSupplierStones","fabricatorSettings","minPrice","stoneSupplierStones","hasPricingProfileAssigned","fabPrice","calculatePrice","pricePlus","perQuantity","ceil","perUnit","margin","calcPriceWithMargin","stoneSupplierStoneInner","bFoundOther","validStoneSupplierStonePrice","trunc","metaData","toUpperCase","camelCased","charAt","capitalizeFirstLetters","str","word","join","getCurrencySign","currencyName","useDifferentCurrencies","getCurrencyPosition","getPriceWithCurrency","withSpace","alwaysRound","currencyPosition","currencySign","getFeatureCurrency","separateCurrency","isExact","formatter","Intl","NumberFormat","style","currency","minimumFractionDigits","maximumFractionDigits","format","getFeatureIsLocked","ignoreLocked","leadCaptureProperty","isVisualizerRoute","userState","filterState","isBackend","jobId","canSaveQuote","visualizerManagement","isPhoneNumberValidated","leadCaptureShoppingCart","hash","ROUTES","cart","list","featureIsLocked","unlocked","filterValues","filterValueIDs","filterKey","filterGroup","filterGroups","group","filterValue","values","lockedInWizard","array","order","getDefaultRoomName","objectWithoutProperties","obj","target","getArrayOfIdsFromBvState","bvState","checkDifferentVisualizers","arrayOfIds","bvStateValue","bvStateValueArrayItem","dbFeatureId","fabFeatId","getShareUrl","url","URL","searchParams","URLSearchParams","param","delete","set","baseHref","origin","pathname","toString","messages","quoteRoomType","getStringFeatureName","locale","fabricatorData","useCollectionName","isLowes","isCaesarStone","fromFeatureName","getFeatureName","isEncore","getCollectionName","_customDisplayName","getSlabUnit","getRoomName","quotes","getCurentQuoteRoomItem","quoteIndexToFind","quoteRoomNameToCompare","currentQuoteIndex","roomCartItem","getLowerCasedCustomDisplayName","room","upperCaseAlp","currentRoomName","roomItem","baseRoomName","quote","letterIndex","getBaseRoomName","getEventPosition","eventX","clientX","touches","changedTouches","eventY","clientY","x","y","getUrlParam","queryParam","getFeatureUnit","intl","formatMessage","unit","lowercasedUnit","getCartItemUnit","displayFakeFeatureGroupName","displayFakeQuantity","totalCount","getSlabsFeatureGroup","layout","getCurrentLayout","countertopFeatureGroup","getCountertopFeatureGroup","slabsFeatureGroup","addNonVisualizerSubPart","part","featuresList","translateId","wasCreatedFromGroupName","dbName","partName","getFeatureGroupName","getQtCategoriesWithSlabFeatureGroup","qtCategories","showSlabMode","selectedQuoteRoomCartItem","getCurrentQuoteRoomCartItem","selectedQuoteRoomFeature","activeCategory","qtCategory","featureIsMatchingQtCatName","categoryToSearch","subParts","subPart","findIndex","featureGroup","lowerCasedName","isDeStefano","customGroupDisplayName","canShowSqftButtonForFeature","fixDbFeatureProperties","fabFilterValueIDs","trim","forFeature","checkArray","canShowForCommonIds","enableSqFt","canShowSqftCabinetButtonForFeature","isCabinetsFabricator","canShowSqftButton","useCategorySwitching","getCartItemObject","fromFeature","newQuantity","qtActiveCategory","cartItemObject","selectionGroup","getRelatedFeaturesFromLayout","relatedFeatures","currentFeature","searchInputValue","selectedFilters","parentParts","parts","relatedFeaturesFound","noFeaturesFound","relatedFeature","featureIsFound","splitFeatureName","parentPart","relatedItems","relItem","edgeCondition","layoutType","description","filterFeaturesByValues","getFilteredRelatedFeatures","relatedFeaturesToCheck","relFeature","featureAlreadyExistIndex","getSplittedFeatureName","navigationSubItems","navItem","createRelatedGroups","relatedGroups","addedCartItem","cartQuantity","relatedFeatureGroupName","getAllFilterGroupValuesFromGroup","fValues","fValue","items","childValue","goToFabricatorUrl","websiteUrl","types","uuid","setWindowWidth","windowWidth","SET_WINDOW_WIDTH","payload","setJavascriptErrors","javascriptError","SET_JAVASCRIPT_ERRORS","setWindowHeight","windowHeight","SET_WINDOW_HEIGHT","setStonePricing","SET_STONE_PRICING","setCookieAccepted","cookieAccepted","SET_COOKIE_ACCEPTED","addVisualizersLoaded","newLoadedVisualizer","ADD_VISUALIZERS_LOADED","showSuccessNotification","successNotification","SHOW_SUCCESS_NOTIFICATION","addProjectDocument","file","sqftDiagram","documents","newDocument","uid","v4","text","created","Date","uploaded","existingCalcDiagramIndex","doc","ADD_PROJECT_DOCUMENT","setProjectDocumentsIds","oldDocuments","oldDoc","responseDoc","documentId","SET_PROJECT_DOCUMENTS_IDS","setJobId","SET_JOB_ID","setStep","activeStep","SET_STEP","setLayoutDataParts","layoutParts","SET_LAYOUT_DATA_PARTS","setStepSwitching","isSwitching","SET_STEP_SWITCHING","toggleSelectionWindow","selectionOpened","showFilters","dispatch","TOGGLE_SELECTION_WINDOW","setDefaultSelectionGroup","SET_DEFAULT_SELECTION_GROUP","setSelectionWindowView","selectionWindowView","SET_SELECTION_WINDOW_VIEW","toggleSelectionFeatureInfo","selectionFeatureInfo","TOGGLE_SELECTION_INFO","updateFeatureInfoCount","UPDATE_FEATURE_INFO_COUNT","setVanityType","vanityTypeSelected","SET_VANITY_TYPE","setShowerType","showerTypeSelected","SET_SHOWER_TYPE","changeSelectionInfoQuantity","selectionInfoQuantity","CHANGE_SELECTION_INFO_QUANTITY","togglePulseFeatureInfoQuantity","pulseFeatureInfoQuantity","TOGGLE_PULSE_FEATURE_INFO_QUANTITY","changeMaterialsInfoFeatureModules","materialsInfoFeatureModules","CHANGE_MATERIALS_INFO_FEATURE_MODULES","changeActivePartRelatedItemIndex","newActivePartRelatedItemIndex","activePartRelatedItemIndex","selectionState","CHANGE_SELECTION_ACTIVE_PART_RELATED_INDEX","isSameStep","setActiveFeature","activeFeature","SET_ACTIVE_FEATURE","toggleShowDescriptionCover","showDescriptionCover","TOGGLE_SHOW_DESCRIPTION_COVER","toggleBathroomVisualizerOpen","bvOpened","bathroomVisualizerState","bvVisited","loaderEnable","TOGGLE_BATHROOM_VISUALIZER_OPEN","setBathroomVisualizerVisited","SET_BATHROOM_VISUALIZER_VISITED","setBathroomVisualizerFeatures","bvFeatures","SET_BV_FEATURES","setBathroomVisualizerPresets","bvPresets","SET_BV_PRESETS","setActivePreset","activePreset","SET_ACTIVE_PRESET","setCanvasId","SET_BV_CANVAS_ID","toggleShowRestorePopup","showRestorePopup","TOGGLE_SHOW_RESTORE_POPUP","setCanvasDimensions","canvasDimensions","SET_CANVAS_DIMENSIONS","setCanvasScale","canvasScale","SET_CANVAS_SCALE","setLoadedPresets","loadedPresets","SET_LOADED_PRESETS","toggleLoader","loaderOpened","loaderText","loaderTitle","loaderFullScreen","TOGGLE_LOADER","setMultiLoader","multiLoader","SET_MULTI_LOADER","toggleUserPopup","userPopupState","TOGGLE_USER_POPUP","showCheckoutPopup","changeUserInfo","CHANGE_USER_INFO","changeUserInfoErrors","userInfoErrors","CHANGE_USER_INFO_ERRORS","toggleAdditionalFields","showAdditionalFields","TOGGLE_ADDITIONAL_FIELDS","setUserPhoneNumberValidated","validated","SET_USER_PHONE_NUMBER_VALIDATED","unlockPricing","userIsLoggedIn","userPopupOpened","addToCart","wizardIsActive","wizardActiveStep","allWizardsValues","fromWizardId","fromWizardGroup","fromWizardStep","wizardSteps","wizardGroup","isSquareFootageEnabled","getAvailableSteps","newCartItems","noteText","notesList","foundStep","getWizardStepFromCartItemFeature","getCorrectedWizardGroupForFeature","stepGroups","newCartItem","oldCartItem","bundleFeatures","bundleFeature","bundledFeatureQuantities","assign","bundleParentId","ADD_TO_CART","addDisplayLogicCartItem","ADD_DISPLAY_LOGIC_CART_ITEM","isAddedFromDisplayLogic","changeCartItemQuantity","removeFakeQuantity","CHANGE_CART_QUANTITY","removeFromCart","REMOVE_FROM_CART","changeCartFeature","skipOtherRules","CHANGE_CART_FEATURE","removeInstallationServiceFromCart","installationService","REMOVE_INSTALLATION_SERVICE_FROM_CART","clearCart","CLEAR_CART","toggleApplyPopup","applyPopupOpened","activeApplyPopupItems","TOGGLE_APPLY_POPUP","clickQuestionNo","questionNoClicked","CLICK_QUESTION_NO","setCameFromPage","cameFromPage","CAME_FROM_PAGE","addToRecentlyViewed","ADD_TO_RECENTLY_VIEWED","show","SHOW_CHECKOUT_POPUP","restoreCart","RESTORE_CART","toggleInstOpened","instOpened","TOGGLE_INST_OPENED","setInstList","SET_INST_LIST","setDefaultInstallations","defaultInstallations","SET_DEFAULT_INST_LIST","changeStateToQuote","SET_STATE_TO_QUOTE","setFabricatorData","SET_FABRICATOR_DATA","setFabricatorTaxes","SET_FABRICATOR_TAXES","updateFabricatorSettings","UPDATE_FABRICATOR_SETTINGS","toggleHideItemsSwitcher","TOGGLE_HIDE_ITEMS_PRICES","toggleUseFabricatorCostPrices","TOGGLE_USE_FABRICATOR_COST_PRICES","changeMessageBoxState","messageBoxState","CHANGE_MESSAGE_BOX","setSelectedFilters","SET_SELECTED_FILTERS","loadFilters","fg","fgValue","isFabricatorCustomFilter","LOAD_FILTERS","setExpandedFilters","expandedFilters","SET_EXPANDED_FILTERS","filterId","SHOW_FILTERS","showDocuSign","showFiltersIfHidden","SHOW_FILTERS_IF_NOT_VISIBLE","setFilterVisible","SET_FILTER_VISIBLE","loadMobileNav","LOAD_MOBILE_NAV","hideUserPopup","visible","inline","showSchedulerPopup","SHOW_SCHEDULER","toggleConfirmPopup","confirmPopupOpened","confirmPopupType","TOGGLE_CONFIRM_POPUP","callback","SHOW_DOCUSIGN","showDeposit","SHOW_DEPOSIT","checkForOrderCompletePopup","checkout","hasPaymentGateway","checkoutSuccess","showOrderCompletePopup","showCheckoutLayout","enableDeposit","unlockCalculationsState","unlockCalculationsTutorialIsFinished","_showDeposit","then","enableDocuSign","_showDocuSign","_showCheckoutPopup","shouldUseContractSigning","hashHistory","contract","_showContractSigning","catch","setQtCategoriesRequested","qtCategoriesRequested","SET_QT_CATEGORIES_REQUESTED","setQtCategoriesLoaded","qtCategoriesLoaded","SET_QT_CATEGORIES_LOADED","setQtActiveCategory","SET_QT_ACTIVE_CATEGORY","setIntroVideo","introVideo","SET_INTRO_VIDEO","updateCanvasCount","UPDATE_CANVAS_COUNT","setPresetWasChangedByUser","presetWasChangedByUser","SET_PRESET_WAS_CHANGED_BY_USER","setFirstLoadedPreset","firstLoadedPreset","SET_FIRST_LOADED_PRESET","addLayoutHistory","layoutState","ADD_LAYOUT_HISTORY","setLayoutHistory","layoutHistory","SET_LAYOUT_HISTORY","getCurrentLayoutInstance","getCurrentCanvas","getCurrentZIndexes","createFakeLayout","asLayout","scene","LayoutInstance","fakeLayout","isFakeLayout","parentGroups","getFeatures","needToLoadFeatures","allDbFeatures","s3Bindings","RoomLayout","isNewLayout","RoomScene","loadDbFeature","createCustomConfigurations","setDefaultFeatures","initialized","getVisualizerTypeFromBvScene","bathroom_floor","shower_body","kitchen_floor","getCurrentRoomType","LOOK_ROOM_TYPES","as","grohe","mainNeeded","oppositeNeeded","COUNTERTOP_LABELS","shower_wall","featureGroupCountertop","getSubPartFromQtCategories","getFeatureGroupByPartId","bathTubTypeToString","bathTypeType","BathTubType","Custom60in","FreeStanding","bathTubStringToType","bathtubString","LayoutType","Layout1","Layout2","Layout3","Layout4","Layout5","Layout6","Layout7","Layout8","Layout9","Layout10","Layout11","Layout12","Layout13","Layout14","Layout15","Layout16","Layout17","Layout18","Layout19","Layout20","LayoutAbbreviation","All","LayoutAbbreviations","LayoutAbbreviationsToRemove","METADATA","ALL","NO","LeftSide","RightSide","Center","Inner","Outer","StandAlone","SingleHole","WallHungSinks","WidespreadFaucets","BathtubWithEnclosures","BathtubWithoutEnclosures","ShowerComboTubType","bathtub_liner","replacement_tub","walk_in_tub","jetted_tub","CountsType","allLayoutFeaturesCount","largeLayoutFeaturesCount","smallLayoutFeaturesCount","totalFeaturesCount","VANITY_TYPES","VanityTypes","Complete","Custom","ShowerBodyType","Glass","Door","Simple","ShowerHeadTypes","shower_arm","shower_head_bundle","shower_trim_kit","shower_fixture","shower_system","ShowerHandTypes","hand_shower_kit","hand_shower_holder","vanity_cabinet","vanity_console","vanity_washstand","useNewNavLogicPartIds","vanityWizardFilters","showerWizardFilters","NotQCVanityDoorStylesFilters","COUNTERTOP_GROUP_BATHROOM","CABINET_GROUP_BATHROOM","CORNER_SHELVES_POSITIONS","SIDE_POSITIONS","CONTEXT_MENU_VANITY_ONLY","createParentPositions","layerPositions","position","createPageToLoadArray","nextFeaturesPageToLoadArray","layoutAbbreviation","page","allReceived","PAN_POSITIONS","VANITY_POSITIONS","LOOK_OPENED_TYPES","edit","featureZoom","LOOK_FEATURE_CONTENT","info","threeD","aug","gallery","LOOK_OVERLAYS","exit","intro","print","reset","loadingCart","questionLogin","questionShare","questionView","questionViewUpdated","questionRemove","saveSucess","stylePairing","styleColor","styleRemove","styleRemoveBack","styleRemoveFeature","notCompatiblePopup","leadCapture","LOCAL_STORAGE_KEYS","introVisited","saveQuoteRequired","requiredShareButton","LOOK_INTRO_STEPS","welcome","layoutsAndRooms","wallsAndFloor","saveAndMore","review","LOOK_INTRO_STEPS_MOBILE","layouts","rooms","CONTEXT_MENU_VANITY_BUTTONS","CONTEXT_MENU_BATHTUB_BUTTONS","CONTEXT_MENU_SPLIT_WALL","CONTEXT_MENU_SHOWER_ALL","CONTEXT_MENU_SHOWER_OTHER","CONTEXT_MENU_SHOWER_ACCESSORIES","CONTEXT_MENU_KITCHEN_COUNTERTOPS","CONTEXT_MENU_KITCHEN_CENTER_ISLAND","DECORS_MAX","ALL_CONTEXT_MENU","ALL_CONTEXT_MENU_KITCHEN","LOOK_WALLS","LOOK_WALLS_ONLY","POSSIBLE_ONE_POSITION","WHITE_PAGE_ROUTES","view","login","register","AVAILABLE_FILTERS","WIZARD_STEP_WIDTH","WIZARD_STEP_MOBILE_WIDTH","WIZARD_STEP_PRODUCT_JOURNEY","LOOK_NAVIGATION_LIST_TYPES","regular","designRec","notMatchingMeta","isAnalytics","ga","isMixPanel","mixpanel","Analytics","sendEvent","action","label","analyticsDebugging","gtag","track","source","shareUrl","sendPageEvent","sendDataEnteredEvent","sendClickEvent","sendEcommerceEvent","setUserId","setMixPanelPerson","email","phone","alias","identify","people","setExistingMixPanelPerson","logOutMixPanel","sendParentPostMessage","country","firstName","phoneNumber","postal","postMessage","getSkuForAnalytics","withPartId","sku","getStringForAnalytics","string","QKB_ANALYTIC_EVENTS","quotingToolWizardSwitch","LOOK_JOURNEY_ANALYTIC_EVENTS","lookExit","lookCartButton","lookSidebarHome","lookSidebarFilters","lookSidebarEdit","lookSidebarRooms","lookSidebarPingPilot","lookSidebarSave","lookSidebarMore","lookSidebarShare","lookSidebarReset","lookSidebarFacebook","lookSidebarTwitter","lookSidebarPinterest","lookSidebarFeatureGroup","lookFooterExpandMenu","lookFooterCloseMenu","lookMenuHeaderClose","lookMenuHeaderBack","lookMenuHeaderViewType","lookFooterList","lookZoomPlus","lookZoomMinus","lookCanvasLayer","lookCanvasContextMenu","lookCanvasContextMenuItem","lookCanvasDemoPoint","lookFeatureImageChangeLeft","lookFeatureImageChangeRight","lookFeature3dAndArOpen","lookFeature3dAndArClose","lookFeatureMoreInfoOpen","lookFeatureMoreInfoClose","lookFeatureInfoContentHeaderClose","lookFeatureInfoContent3dAr","lookFeatureInfoContentSwitch","lookFeatureInfoContentFeatureLink","lookFeatureInfoContentAccordionOpen","lookFeatureInfoContentAccordionClose","lookFeatureChange","lookFeatureUnlock","lookFeatureRemove","lookFeatureEnable","lookFeatureConfirmChange","lookFeatureOptions","lookFeatureMatchColorsCheckbox","lookFeatureMobile3dButton","lookFeaturesListDesignRecommended","lookFeaturesList","lookFeaturesFiltersClose","lookFeaturesFiltersReset","lookFeaturesFiltersAccordionOpen","lookFeaturesFiltersAccordionClose","lookFeaturesFiltersValueChecked","lookFeaturesFiltersValuerUnChecked","lookOverlayLeave","lookOverlaySave","lookPopupLogin","lookRoom","lookLeadCapturePopupLogin","lookLeadCapturePopupRegister","lookLeadCapturePopupForgotPassword","lookLeadCapturePopupTwoFAResendCode","lookLeadCapturePopupTwoFAReceiveCall","lookLeadCapturePopupTwoFAUpdatePhone","lookMobileActiveFeatureButton","lookMobileListClose","lookIntroLearnToUse","lookIntroStartDesign","lookIntroSkip","lookIntroFinalStepStartDesign","lookIntroPagination","lookIntroNextStep","lookRoomIdeasOnIntro","lookRoomIdeasOpen","lookRoomIdeasClose","lookRoomIdeasPreset","lookMainCategory","lookCanvasPolicyLinks","lookListPolicyLinks","lookListHeaderSave","lookListBackToCustomize","lookListAddToCart","lookListOpenMiniCart","lookListSelectAllItems","lookListCartItemSelect","lookListCartItemQuantityChange","lookListCartItemRemove","lookListCartItemMoreDropdown","lookListCartItemMoreDropdownWishlist","lookListCartItemMoreDropdownChange","lookStylePopupConfirmRemove","lookStylePopupRemoveBackContinue","lookStylePopupRemoveBack","lookStylePopupConfirm","lookPopupSaveSuccessSubmit","lookPopupSaveResetSubmit","lookPopupChangeViewSubmit","lookMenuWizard","lookWizardParent","lookWizardListFeature","lookWizardListFilter","lookWizardMatchAll","lookWizardCompletedClose","lookShowCompatabilityAlert","lookCloseCompatabilityAlert","lookCloseAndApplyCompatabilityAlert","lookLockedButton","lookSidebarRevertCtrlZ","PRODUCT_JOURNEY_ANALYTIC_EVENTS","productTopButtonsShop","productTopButtonsExit","productTopButtonsMenu","productTopButtonsShare","productTopButtonsPingPilot","productTopButtonsShareFacebook","productTopButtonsShareTwitter","productTopButtonsSharePinterest","productTopButtonsSave","productCanvasLayer","productCanvasContextMenu","productCanvasContextMenuItem","productCanvasDemoPoint","productSidebarHeaderAllProducts","productSidebarHeaderRoomLayouts","productSidebarHeaderCart","productSidebarCategory","productFeatureChange","productFeatureImageChangeLeft","productFeatureImageChangeRight","productFeatureMoreInfoOpen","productFeatureMoreInfoClose","productFeatureInfoContentAccordionOpen","productFeatureInfoContentAccordionClose","productFeatureQuantityChange","productFeatureRemove","productFeatureEnable","productFeature3dAndArOpen","productFeature3dAndArClose","productFeatureInfoContentHeaderClose","productFeatureInfoContent3dAr","productFeatureInfoContentSwitch","productFeatureInfoContentFeatureLink","productFeatureUnlockNow","productFeatureLockedBadge","productFeatureLocked3DButton","productFeatureSQFT","productFeatureAddToCart","productFeatureContinueShopping","productFeatureCloseProductsList","productFeatureOptions","productFeatureMobile3dButton","productFeaturesNext","productFeaturesList","productFeaturesListViewType","productFeaturesFiltersClose","productFeaturesFiltersReset","productFeaturesFiltersAccordionOpen","productFeaturesFiltersAccordionClose","productFeaturesFiltersValueChecked","productFeaturesFiltersValuerUnChecked","productSimilarListClose","productSimilarListTitle","productSimilarListFeature","productSimilarListFeatureAddToCart","productOverlayLeave","productOverlaySave","productPopupLogin","productMatchColorsVisualizeAllCheckbox","productRoom","productRoomLayouts","productRoomIdeas","productRoomIdeasPreset","productFiltersOpen","productMenuFooterButton","productPopupSaveSuccessSubmit","productPopupResetSubmit","productPopupChangeViewSubmit","roomsRoomLayouts","roomsRoomIdeas","cartCheckoutLogin","cartCheckoutRegister","cartCheckoutSuccessContinueShopping","cartCheckoutSuccessViewAll","cartCheckoutSuccessFeature","cartTermsAccept","cartTwoFANext","cartTwoFAUpdatePhone","cartTwoFAResendCode","cartTwoFAReceiveCall","leadCapturePopupLogin","leadCapturePopupRegister","leadCapturePopupForgotPassword","leadCapturePopupTwoFAResendCode","leadCapturePopupTwoFAReceiveCall","leadCapturePopupTwoFAUpdatePhone","productLockedButton","shopFeaturesList","shopFeaturesListOptions","shopFeatureOptions","shopFeatureAddToCart","shopHelpChat","shopSQFTButton","SHAPE_PART_ID","SQFT_POST_MESSAGE_ACTIONS","initialLoad","setQTData","closeSqFtCalc","callResetDataPopup","callChangeLayoutDataPopup","userIdleResetCounter","resetHistory","saveHistory","setNewLayoutOnSqft","setCanvasCenter","stopRender","startRender","MEASURE_UNITS","Metric","Imperial","edge","seamPiece","backsplashPiece","waterfallPiece","slabPlaceHolder","top_cabinet","bottom_cabinet","tall_cabinet","lower_cabinet_boxes","upper_cabinet_boxes","tall_cabinet_boxes","countertop","spacer","vanity_countertop","center_island_countertop","dishwasher","hood","SIDEBAR_NAVIGATION_BUTTONS","FEATUREGROUP_PART_ID","specialty_cut_and_designs","SHAPE_ROTATE_DIRECTION","right","left","ALIGN","center","SHAPE_TYPE","polygon","square","wideangle","horseshoe","appliances","RENDER_TEMPLATES","default","linesOnly","filledPrimary","accordingToFeature","filledActive","SIDEBAR2_BUTTONS","menu","classNames","hasMenu","SIDEBAR_BUTTONS_MENU","move","shapes","summary","cabinetset","SIDEBAR_SLAB_BUTTONS","rotate","loadSlab","seam","duplicate","MOVABLE_IMAGE_TYPES","slabImage","SIDEBAR_SLAB_SEAM_BUTTONS","addSeamHorizontal","addSeamVertical","undoSeam","resetSeams","freeDraw","resize","corners","radius","backsplash","end_cap","angle","bumpout","hardCodeIsLowes","mitered","hardCodeIsMcDermott","toolWaterfall","hardCodeIsModerno","hardCodeIsPorcelanosa","toolUnderlayment","SIDEBAR_NAVIGATION_CABINET_BUTTONS","SIDEBAR_TYPE_AREA_NAVIGATION_BUTTONS","lower","upper","tall","centerIsland","wall","top_handle","bottom_handle","end_panel","SQFT_APPLIANCES","SIDEBAR_NAVIGATION_BUTTONS_LEVEL3","filters","SIDEBAR_BUTTONS","message","shouldHardcodeMessage","subMenu","title","additionalClassNames","SIDEBAR_TYPE_AREA_BUTTONS","SIDEBAR_CABINET_BUTTONS","SIDEBAR_WITH_FEATURES_SUBMENU","SIDEBAR_HIDDEN_BUTTONS","buttonMitered","buttonCustomBacksplash","edgePeninsulaUnderwrap","SIDEBAR_SHAPE_BUTTONS","lshape","rectangle","dot","isDisabledInPopupShouldBeHidden","hardCodeIsCaesarStone","SIDEBAR_LAYOUTS_BUTTONS","refrigerator","range","sink","doubleSink","iceMachine","oven","stovetop","trashCompactor","wineFridge","CABINET_LABELS","SQFT_APPLIANCES_CAES","crown_molding","handle","SQFT_CABINET_APPLIANCES","SQFT_APPLIANCES_WITH_SUBMENU","microwave","SQFT_SHAPES_THAT_ADD_OVERHANG","SQFT_MODE","slab","SQFT_VIEW_MODE","twoDMode","threeDMode","threeDModeDoors","augmentedReality","augmentedRealityDoors","MANUAL_CALCULATION_ROW_TYPES","countertopRows","backsplashRows","edgeRows","DIRECTION","north","east","south","west","MANUAL_CALCULATION_MEASURE","SQFT_BACKSPLASH_TYPES","SQFT_BACKSPLASH_TYPES_METRIC","SQFT_WALL_TYPES","SQFT_MEASURE_UNIT","imperial","metric","FREE_DRAW_TYPE","shape","CONTEXT_MENU_TYPE","buttons","bumpouts","backsplashes","edges","shower_floor","vanity_accent","vanity_backsplash","shower_interior_wall","shower_interior_wall_accent","shower_wall_accent","accent_wall","wall_a","wall_b","wall_c","front_wall","underlayment","wall_door_end_accessory","base_door","island_panel","refridgerator_panel","END_CAP_CABINETS_PART_IDS","PARENT_KEYS_WITH_COMBINED_FEATURES_IN_CART","END_CAP_AREA_PART_IDS","END_CAP_PART_IDS","SQFT_AREA_TYPE_PART_IDS","SQFT_PARENT_FEATURE_GROUP_PART_IDS","SQFT_CHILD_FEATURE_GROUP_PART_IDS","BACKSPLASH_LABELS","HANDLE_TO_CABINETS","CABINET_COMMON_COLOR_PART_IDS","FEATURE_QUANTITY_UNITS","EDGE_LABELS","edge_profile","center_island_edge","CORNER_LABELS","corner","SHAPE_PART_IDS_USING_SAME_COLOR","FEATURES_WITH_0_VALUE_FOR_THE_SLABS","ALLOWED_LABEL_NAV_ITEMS","POINT_PROPERTY","arcLength","RESOURCE_TYPE","attachedToLine","waterfallSectionsData","underlaymentSections","RESOURCE_ATTACHED_TO_TYPE","waterfall","RESOURCE_ATTACHED_TO_NAME","WORKSPACE_RESOURCES","spacers","handles","walls","shapeColors","removedFeatures","snappedShapeGroups","selectedShapes","images3d","WATERFALL_SHAPES_KEY","cabinetReturn","overhangReturn","peninsulaUnderwrap","WATERFALL_SHAPES_NAME","SQFT_GROUP","area","cabinets","SQFT_AR3D_POPUP_CONTENT_TYPE","ar","SQFT_AR3D_GLB_VIEWER","singleModel","separateModels","MITER_UNDERWRAP_EDGE_NAMES","MITER_EDGE_NAMES","WATERFALL_OVERLAY_TYPE","MITERED_OVERLAY_TYPE","APPLIANCES_THAT_SHOULD_RENDER_MEASUREMENTS_INSIDE_THE_SHAPE","CABINET_SET2","ContentType","None","Layout","Design","DisplayRoom","Loading","QuotedItems","ContentTypeName","2","3","6","ContentTypeNameTranslate","UserPopupTypes","Unlock","GetQuote","NewDesign","Schedule","ConfirmPopupTypes","ConsultationRequest","SqftResetChanges","SqftUpdateQuestion","AssignQuoteOnExistingUser","DeleteCartItemsPopup","ChangeWizardToPreviousStepSelection","ReplaceRoomWhenItExistsInCartButWeAddNew","UserPopupContent","terms","forgot","twoFA","twoFAVerify","QuoteRequestType","RequestQuote","ScheduleAnAppointment","RequestDateTime","RegularDesign","RequestConsultation","UserAction","Login","Register","SqftUpdateTypes","Reset","UpdateData","dbFeatureRelatedFeaturesProperties","dbFeatureFilterProperties","otherMissingProperties","colorOptions","matchesMetaFailed","initializeDependentProperties","fieldWidth","getMM","fieldWidthCabinet","updateDimensions","updateDefaultScale","scale","defaultScale","div","createElement","appendChild","dpi","offsetHeight","removeChild","getDPI","kioskApp","initialize","updateWorkspace","innerWidth","workspace","fontSize","fontSizeMetric","fontSizeSmallest","getMeasureMultiplier","millimetersMultiplier","getMeasureUnitPostfix","shouldAddWhitespace","isCabinetGroupInURL","isSQFTEnabledInURL","getScaledGridSize","gridSize","isDefault","scaledGridSize","nearest","ctx","mmDivider","mm2ToM2Divider","inchesToMMultiplier","sqftToMmMultiplier","sqftToM2Multiplier","lnftToMmMultiplier","waterfallImperialHeight","waterfallMetricHeight","miteredEdgeAdditionalImperialArea","miteredEdgeAdditionalMetricArea","edgeHeightImperial","edgeHeightMetric","minApplianceLineLength","maxApplianceLineLength","imageWidthMetric","imageHeightMetric","imageWidthImperial","imageHeightImperial","canvas","getDefaultScaledGridSize","debug","snapToGrid","menuItemActive","defaultScaleExport","zoomSpeed","controls","scaleHoriz","flipH","flipV","rotateLeft","rotateRight","activeClass","activePalletItemClass","groups","tools","tutorialIsRunning","highlight","points","lines","demoShow","rotateAngle","SNAP_OFFSET","activeFontRegular","activeFontBold","crownMoldingParams","distance","glbViewer","useGoogleModelViewer","useStagingDomain","addEventListener","mouseDown","mouseDownPosition","allowDragEdge","allowDragBumpoutEdge","allowDragMiteredEdge","lineHighlight","loading","objIds","pos","nodes","appBody","designDefault","setCanvas","isInitialized","isEdgeFeatureError","dataHasBeenImported","isLastParent","miteredController","underlaymentController","resultImages","textBoxManager","onMouseDown","mousePos","lineInputFocused","stealCursor","setCursor","onMouseUp","updateShapesIntersections","updateShapesSnappedGroups","onMouseMove","terminate","xDiff","yDiff","setPos","moveWorkspace","resetCursor","getObjIds","setObjIds","who","setAllowEdges","allow","getAllowEdges","setAllowBumpoutEdges","getAllowBumpoutEdges","setAllowMiteredEdges","getAllowMiteredEdges","setAllowLineHighlight","getAllowLineHighlight","getCenter","setCenter","canvasWidth","canvasHeight","innerHeight","getVisibleCenter","getAllShapePoints","allShapePoints","shapeCenter","getPointField","getShapesCenterPoint","getCenterPoint","getCanvas","get$Canvas","getOffset","setPosition","newPos","clone","getPosition","getScale","isEmpty","getShapes","getHoverShape","isHovering","getHoveredSqftShape","getMovingShape","getHoverBumpout","getLines","isWithBumpout","bumpoutOverlay","isHoveringRect","getLineWithMovingBumpout","isBumpoutPointMoving","getHoverPoint","point","getHoverMiteredPoint","isWithMitered","getHoveredLine","getHoverSegment","hoveredLine","getHoveredLines","skipShapeIds","iterateShapes","shp","hoveredLines","getHoverSegmentV2","getHoveredLineCorner","getHoverSegmentOutlineCorner","getShapesWithoutAttachedResources","isWithoutHidden","isHidden","attachedToLineResources","sqftResourceState","concat","getShapeIds","getShapesByIds","ids","getShapesBySlabModeCoreParentId","slabModeCoreParentId","getAttachedToLineResource","clearWorkspace","removeAllShapes","removeAllTextBoxes","removeAllSlabImages","removeAllSlabBacksplashes","deleteAllResources","deleteAllMiteredSections","deleteShapeOffset","import","importData","clearAllMenusEvents","edgeFeatures","countertops","_images","_attachedResources","importShape","image","importSlabBacksplashes","slabAdditionalShapesList","attachedResource","getLinesAndLineCorners","line","attachedToId","isDisabledInPopup","attachResource","isLine","featureId","qtCatName","attachedTo","importImage","setImportedTextBoxes","textBoxes","importSlabImages","slabImages","sqftMenuState","isShapeFeatureMissing","showChangeShapeColorsMessage","importControllersData","controllers","rememberShapes","imageData","generateImage","importedMovableImage","addImage","subtype","priority","Image","imageProperty","shapeData","shapeIdsWithMissingFeature","setSQFTPopup","content","isOpened","confirmCallback","removeShapeWithIds","setShapeIdsWithMissingFeature","setShouldShowChangeShapeFeatureMissingMessage","closeSQFTPopup","confirmText","cancelCallback","cancelText","getPointProperty","arcLengths","from","getQtCatName","getSink","sinks","getAttachedTo","img","getImage","sinkId","dataset","bExists","qty","getBumpouts","flatMap","getBumpoutTotalArea","millimeters","inches","featureObjectDTO","addBumpoutArea","allLines","getLineCorners","allLineCorners","getLineById","getLineCornerById","undefined","lineCorner","getLineOrCornerLineById","lineSegment","getMiteredSections","sqftMiteredState","miteredSections","getShapeType","addedEdges","edgeName","isImageShapeType","isLabelShapeType","backsplashLength","realLength","lineLength","storedShapes","SHAPE_PART_IDS_VISIBLE_ONLY_IN_THE_SLAB_MODE","historyProps","getBacksplashArea","getBacksplashHeight","getBacksplashLength","getEdgeLength","getEdgeFeatures","edgeFeature","getLineLength","getLineLengthMm","getEdgeArea","parentId","segments","pieces","getTotalInches","getTotalMillimeters","getFeatureGroup","featureGroupName","mmToM","hoverShape","subType","historyCallBack","historyPosition","objId","hide","vc","newImage","onHover","onShapeHover","onInit","onShapeReady","attachedToShape","init","attachedShape","attachedToParentId","unshift","getImagesAttachedTo","addShape","shapeType","fromLayout","shapeParams","realPartId","checkShapeForAvailablePartId","mm","getMinMax","shapeId","newShape","openedMobileButton","setQtCatName","hasClass","addClass","removeClass","tutorialShape","setFeatureId","getShapeFeatureId","removeTutorialShape","removeShape","shapeIds","removeShapeById","removeSlabImage","movableImage","croppedSlabImages","deleteCroppedSlabImage","deregisterEvents","getShapeById","combinedShapes","shapesCopy","currentShape","overlay","destroy","deleteAttachedItem","to","removeAttachedItem","originalIndex","removeShapePieces","slabAdditionalShapes","removeShapeFromList","updateCalculations","updateSQFTCalculations","updateRemovedFeatures","addResource","removeFeatureBySQFTId","sqftId","deleteAttachedItemById","removeAllBumpouts","removeBumpouts","setSqftCroppedSlabImages","setIntl","$canvas","addEvent","events","MOUSE_MOVE","priorities","WORKSPACE","MOUSE_DOWN","MOUSE_UP","RENDER","render","isSFTCabinetsGroup","initCabinetEvents","renderGrid","workspaceController","start","scaledGrid","lineWidth","clearRect","beginPath","moveTo","lineTo","strokeStyle","stroke","setLookOpened","lookOpened","SET_LOOK_OPENED","setLookExpanded","lookExpanded","setLookParentKeys","lookParentKeys","SET_LOOK_PARENT_KEYS","setLookViewType","lookViewType","SET_LOOK_VIEW_TYPE","setWishlistPopupOpened","wishlistPopupOpened","SET_WISHLIST_POPUP_OPENED","setSidebarModalOpened","sidebarModalOpened","SET_SIDEBAR_MODAL_OPENED","setLookActiveFeature","newLookActiveFeature","lookActiveFeaturePositionInList","SET_LOOK_ACTIVE_FEATURE","lookActiveFeature","useTrumbleApi","quantityOptions","setTrumbleInventoryForFeatures","UPDATE_LOOK_ACTIVE_FEATURE_STOCK_COUNT","setLookActiveCategory","lookActiveCategory","SET_LOOK_ACTIVE_CATEGORY","setLookMoreInfoOpened","moreInfoOpened","moreInfoContent","SET_LOOK_MORE_INFO_OPENED","setLookPageOpened","lookPageOpened","SET_LOOK_PAGE_OPENED","setLookOverlayOpened","lookOverlayOpened","lookOverlayAction","SET_LOOK_OVERLAY_OPENED","setLookViewChangeOptions","lookViewChangeOptions","SET_LOOK_VIEW_CHANGE_OPTIONS","setLookStylePopup","lookStylePopup","SET_LOOK_STYLE_POPUP","setLookRemovePopup","lookRemovePopup","SET_LOOK_REMOVE_POPUP","setLookIntroStep","introStep","SET_LOOK_INTRO_STEP","setLookIntroHidden","introHidden","SET_LOOK_INTRO_HIDDEN","setLookContextMenu","contextMenu","SET_LOOK_CONTEXT_MENU","setLookWallsApplyTo","lookWallsApplyTo","SET_LOOK_WALLS_APPLY_TO","setLookAllWallsOpened","lookAllWallsOpened","SET_LOOK_ALL_WALLS_OPENED","setLookReturnAction","lookReturnAction","SET_LOOK_RETURN_ACTION","setLookDemoPointsClicked","lookDemoPointsClicked","SET_LOOK_DEMO_POINTS_CLICKED","updateNavigationCount","UPDATE_LOOK_NAVIGATION_COUNT","setLookCompatabilityAlert","lookCompatabilityAlert","SET_LOOK_COMPATABILITY_ALERT","setLookRestoreState","lookRestoreState","SET_LOOK_RESTORE_STATE","setLookLockedTutorial","lookLockedTutorial","SET_LOOK_LOCK_TUTORIAL","setLookAllWallsTutorial","lookAllWallsTutorial","SET_LOOK_ALL_WALLS_TUTORIAL","SET_RELATED_GROUPS","SET_RELATED_GROUPS_SEARCH","TOGGLE_GALLERY_VISIBLE","SET_GALLERY_ACTIVE_IMAGE_INDEX","SET_MATERIALS_PAGE_SUB_STEPS","SET_MATERIALS_PAGE_ACTIVE_SUB_STEP","TOGGLE_NOT_COMPATIBLE_VIEW","TOGGLE_PRODUCT_NOTE_EDITOR_VISIBLE","SET_ROW_ITEMS","SET_MATERIALS_PAGE_CANVAS_CLASS","SET_LANGUAGE","SET_ACTIVE_THEME","SET_NETWORK_CONNECTION","SET_INITIAL_VISUALIZER_TYPE","SET_STATIC_CANVAS_IMAGE","SET_EMPLOYEES_LIST","RESTORE_USER_STATE","SET_ALREADY_REGISTERED_USER","SET_LEAD_CAPTURE_CLICK_COUNT","SET_USER_POPUP_CONTENT","SET_USER_TWO_FA","SET_USER_OPT_IN","SUBMIT_PAYMENT","SUBMIT_PAYMENT_RESPONSE","SHOW_ORDER_COMPLETE_POPUP","TOGGLE_SHOW_MOBILE_QUOTES","TOGGLE_SHOW_ALL_QUOTES_CART_ITEMS_LIST","SET_AGREE_EMAIL_CHECKBOX","SET_CART_FOOTER_ACTIVE_BUTTON_INDEX","SET_CART_ITEM_EDIT_FEATURE","SET_LOOK_REMOVED_CART_ITEMS","SET_AMAZON_IMAGE_URL","SET_CART_ITEMS_ADDED_TO_PARENT_CART","CHANGE_ALL_CART_ITEMS","SET_SURE_TAX","SET_SURE_TAX_LOADING","SET_MANUAL_TAX","SET_MARK_UP_LOGIC","SET_DELIVERY_LIST","SET_ALL_FEATURES_LOADED","SET_ALLOW_ROUTING","SET_ALLOW_MAIN_LOADING","SET_ACTION_AFTER_VISUALIZER_TYPE_CHANGED","SET_VISUALIZER_TYPE_CHANGING","TOGGLE_PRICE_WORKSHEET_OPENED","SET_DISCOUNT_SECTIONS","SET_CUSTOM_ADDED_DISCOUNTS","SET_FINANCE_PERCENTAGE","SET_ALL_FINANCE_OPTIONS_POPUP_VISIBLE","SET_DISCOUNT_FINANCE_CELLS_VISIBLE","SET_AVAILABLE_FILTER_VALUES","UPDATE_FILTERS_COUNT","SET_COUNTERTOP_FILTERS_RECEIVED","TOGGLE_DESKTOP_NAVIGATION","SET_ACTIVE_NAVIGATION_NAMES","SCHEDULER_SCHEDULE","SET_MODULE_CONTEXT_MENU_TYPE","SET_MODULE_CONTEXT_MENU_MODULE","SET_MODULE_CONTEXT_MENU_MODULE_PART","SET_MODULE_CONTEXT_MENU_DIRECTION","SET_NAVIGATION_VIEW_TYPE","SET_CABINETS_APPLY_TO","SET_CABINETS_APPLY_TO_BATHROOM","SET_COUNTERTOPS_APPLY_TO","SET_COUNTERTOPS_APPLY_TO_BATHROOM","SET_APPLY_TO_COMMON","SET_EDGES_APPLY_TO","SET_NAVIGATION_LOADING","UPDATE_DISABLE_FEATURE_GROUP_RADIO","TOGGLE_NAV_ITEM_POSITION_MODAL","SET_USE_FEATURES_LIGHT_REQUEST","SET_ACTIVE_NAVIGATION_FILTER","SET_ACTIVE_NAVIGATION_FILTER_STEP_INDEX","SET_CABINET_NAVIGATION_FILTER_COMPLETED","SET_COUNTERTOP_NAVIGATION_FILTER_COMPLETED","SET_COUNTERTOP_WIZARD","SET_WIZARD_CONFIG","SET_WIZARD_IS_ACTIVE","SET_WIZARD_ACTIVE_FILTER_GROUP_INDEX","SET_WIZARD_LIST","SET_WIZARD_ACTIVE_ITEM","SET_WIZARD_SHOW_FEATURE_SECTION","SET_WIZARD_ACTIVE_STEP","SET_WIZARD_SELECTED_VALUES","SET_ALL_WIZARD_SELECTED_VALUES","SET_WIZARD_CONFLICT_POPUP_OPENED","SET_WIZARD_CONFLICT_STEPS","RESTORE_ALL_WIZARD_SELECTED_VALUES","SET_WIZARD_MISSING_FEATURES","SET_WIZARD_SQFT_CART_ITEMS","SET_WIZARD_ALLOW_SKIP_DONE_STEPS","ENABLE_SQUARE_FOOTAGE","SET_SQUARE_FOOTAGE_GROUP","SET_SQFT_VIEW_MODE","LOAD_SQFT","UPDATE_SQFT","UPDATE_SQFT_CALCULATIONS","SET_SQFT_SQUARE_FEET","TOGGLE_CHANGE_LAYOUT_POPUP","SET_NEW_LAYOUT_ON_SQFT","SET_SQFT_MEASURE_UNIT","CHANGE_SQFT_FEATURES_POPUP","SQT_SQFT_FROM_FEATURE","SET_CABINETS_GLB","SET_CABINETS_AR_BLOB_URL","SET_API_ERROR_MESSAGE","SET_SHAPE_IDS_WITH_MISSING_FEATURES","SET_CHANGE_SHAPE_FEATURE_MISSING_MESSAGE","ADD_SHAPE_ID_WITH_MISSING_FEATURES","SET_SELECTED_COUNTERTOP","SET_ABORT_CONTROLLER","SHOW_SLAB_TOOL","SET_SLAB_TOOL_VISITED","ADD_ROOM_WITH_VISITED_SLAB_TOOL","SET_ACTIVE_SLAB_ID","SET_ACTIVE_SLAB_URL","SET_SQFT_SLAB_ACTIVE_STEP","SET_SQFT_SLAB_SEARCH_TEXT","SET_SQFT_SLAB_ASPECT_RATIO","SET_SQFT_SLAB_IMAGE_WIDTH","SET_SQFT_SLAB_IMAGE_HEIGHT","SET_SQFT_SLAB_CROPPER_DATA","SET_SQFT_CROPPED_SLAB_IMAGES","ADD_SQFT_CROPPED_SLAB_IMAGE","DELETE_CROPPED_SLAB_IMAGE","SET_PRICE_PER_AREA","SET_SLAB_IMAGE_TYPE","SET_IS_MEASUREMENT_VISIBLE_IN_SLAB_MODE","SET_IS_SIZE_VALIDATION_FAILED","SET_IS_SLAB_PRICING_ENABLED","SET_MITERED_SECTIONS","ADD_MITERED_SECTION","CHANGE_MITERED_SECTION","DELETE_MITERED_SECTION","DELETE_ALL_MITERED_SECTIONS","SET_RESOURCES","ADD_RESOURCE","CHANGE_RESOURCE","DELETE_RESOURCE","DELETE_RESOURCE_ATTACHED_TO","DELETE_ALL_RESOURCES","SET_SELECTED_FEATURE","SET_SELECTED_PART_IDS","SET_SQFT_MENU_OPENED","SET_SQFT_MENU_LOCK","SET_SQFT_MENU_ACTIVE_BUTTON","SET_SQFT_SYSTEM_MESSAGE","SET_SQFT_AR3D_POPUP","SET_SQFT_POPUP","SET_SQFT_CONTEXT_MENU","SET_SQFT_CONTEXT_MENU_V2","SET_SQFT_SYSTEM_DELETE_MESSAGE","SET_SQFT_ACTIVE_SUB_MENU_BUTTON","SET_SQFT_ACTIVE_LEVEL3_BUTTON","SET_SQFT_ROOM_LAYOUTS","SET_SQFT_ACTIVE_ROOM","SET_SQFT_ACTIVE_ROOM_ID","SET_SQFT_ACTIVE_ROOM_TYPE","SET_SQFT_ACTIVE_ROOM_INDEX","SET_SQFT_ROOM_SWITCHER_VISIBLE","SET_FREE_DRAW_MODE","SET_CHANGE_VALUE_POPUPS","ADD_CHANGE_VALUE_POPUP","CHANGE_VALUE_POPUP","DELETE_CHANGE_VALUE_POPUP","SET_VALIDATION_POPUPS","ADD_VALIDATION_POPUP","VALIDATION_POPUP","DELETE_VALIDATION_POPUP","SET_WALLS_UP_MODE","SET_WALLS_LOCK_MODE","SET_IS_ITEXT_EDITING","SET_SLAB_PLACEHOLDER_OVERLAPS_WITH_MULTIPLE_SHAPES","SET_RE_CACHE_MENU_COUNTER","TOGGLE_SHOW_MANUAL_CALCULATION","SET_SWITCHER_POSITION","ADD_MANUAL_CALCULATION_ROW","UPDATE_MANUAL_CALCULATION_ROW","UPDATE_MANUAL_CALCULATION_ROWS","DELETE_MANUAL_CALCULATION_ROW","SET_SQFT_TUTORIAL_STEP","SET_SQFT_TUTORIAL_SWITCHING","SHOW_CONTRACT_SIGNING","SET_AFTER_CONTRACT_SIGN_CALLBACK","SHOW_MATERIALS_TUTORIAL","SET_MATERIALS_TUTORIAL_STEP","SET_MATERIALS_TUTORIAL_FINISHED","SHOW_MATERIALS_AGENT_TUTORIAL","SET_MATERIALS_AGENT_TUTORIAL_FINISHED","SHOW_VISUALIZER_TUTORIAL","SET_VISUALIZER_TUTORIAL_STEP","SET_VISUALIZER_TUTORIAL_FINISHED","CONTRACT_SIGNING_SET_STEP","CONTRACT_SIGNING_POST_SIGNATURE","CONTRACT_SIGNING_JOB_DOCUMENT","CONTRACT_SIGNING_SHOW_SIGNATURE_PAD","CONTRACT_SIGNING_SET_CONTRACTS_VALUES","SET_CONTRACT_BLOB","CONTRACT_SIGNING_RESTORE_VALUES","CONTRACT_SIGNING_SET_CONTRACTS_LIST","SET_FABRICATOR_SUBSCRIPTIONS","SET_INITIAL_FLOW_FINISHED","SET_INITIAL_FLOW_ADDITIONAL_ROOMS","SET_INITIAL_FLOW_BUTTON","SET_INITIAL_FLOW_ROOM","SET_INITIAL_FLOW_VISUALIZER_NOT_AVAILABLE","SET_INITIAL_FLOW_ROOM_LAYOUT","SET_INITIAL_FLOW_STEP","SET_SHOW_UNLOCK_CALCULATIONS","SET_UNLOCK_CALCULATIONS_STEP","SHOW_UNLOCK_CALCULATIONS_CART_ITEM","SHOW_UNLOCK_CALCULATIONS_TOTAL_ITEM","SHOW_UNLOCK_CALCULATIONS_TUTORIAL","SET_UNLOCK_CALCULATIONS_TUTORIAL_STEP","SET_UNLOCK_CALCULATIONS_TUTORIAL_FINISHED","ADD_NEW_QUOTE","SET_QUOTES","UPDATE_QUOTE","SET_ACTIVE_QUOTE_INDEX","TOGGLE_SHOW_ADVANCED_QUOTING","SET_ADVANCED_QUOTING_SEARCH_ITEM","TOGGLE_SHOW_ASSIGN_QUOTE_POPUP","SET_ASSIGN_QUOTE_POPUP_SEARCH_TEXT","SET_ASSIGN_QUOTE_POPUP_EMPLOYEE","SET_ASSIGN_QUOTE_POPUP_CUSTOMER","SET_ASSIGN_QUOTE_POPUP_SUCCESS_TEXT","SET_ASSIGN_QUOTE_CLONE_MODE","SET_ASSIGN_QUOTE_OFFLINE_DATA","SET_RECEIPT_URL","SET_RECEIPT_SIGNATURE","SET_LOOK_EXPANDED","SET_LOOK_PARENT_KEY","SET_LOOK_LAYOUT_OPENED","SET_IFRAME_INTEGRATION_REQUEST","SET_IFRAME_INTEGRATION_RESPONSE","SET_GROHE_FILTERS_OPENED","SET_GROHE_SIMILAR_FEATURE","SET_GROHE_SIMILAR_PRODUCTS_OPENED","SET_GROHE_REQUIRED_BUT_NOT_INCLUDED_FEATURE","SET_GROHE_FILTERS_SEARCH_TEXT","SET_GROHE_LAST_OPENED_CATEGORY","SET_GROHE_SUB_CATEGORY_OPENED","SET_GROHE_SHOW_ADDED_TO_THE_CART_SUCCESS","SET_GROHE_ACTIVE_FEATURE_QUANTITY","SET_GROHE_SHARE_BUTTONS_OPENED","SET_GROHE_SAME_COLOR_ACTIVE_FEATURE","SET_GROHE_SAME_COLOR_SECTION_OPENED","SET_GROHE_SAME_COLOR_CHECKBOX_APPLIED","SET_GROHE_EXISTING_TEMP_ID","SET_GROHE_WIZARD_NAME","SET_GROHE_WIZARD_OPENED","SET_GROHE_WIZARD_STEP","SET_PAYMENT_INFO","SET_CARD_INFO","SET_CARD_ERRORS","SET_SHIPPING_ERRORS","SET_SHIPPING_INFO","SET_BILLING_INFO","RESTORE_PAYMENT_INFO","SET_SHOP_PAGE_LOADED","SET_SHOP_PAGE_OPENED","SET_SHOP_LAST_PAGE_VISITED","SET_SHOP_PAGE_LEAVED","THUMBNAIL_SIZES","small","medium","large","imageThumbnail","features_root","getUrlSQFTHashParam","res","item","isEdge","getParamFromUrl","fabricatorId","getFontsize","getPointDistance","getFontsizeSmall","rotatePoint","PI","cos","sin","pointDistance","sqrt","pow","round10","getMidPoint","getClosestPoint","get45CornerLegDistanceByHypotenuse","hypotenuseDistance","point1","point2","getPointBetweenPoints","getSectionPartPoint","getParralelPoint","pointA","pointB","distanceFromLine","midPoint","getParallelPoints","vector","len","ud","parallelPoint1","parallelPoint2","getDistanceFromPointToLine","x1","y1","x2","y2","C","D","len_sq","xx","yy","dx","dy","getDistanceFromPointToInfiniteLine","abs","distanceFromPointA","decimals","Xa","Ya","Xb","Yb","k","Xc","Yc","posX","posY","offset","getMousePositionOnField","getPointOnWorkspace","mouseX","mouseY","wPos","getMousePositionOnShape","pointPosOnShape","getPointPositionOnShape","pointPosX","pointPosY","findClosestPointPairs","pointsA","pointsB","closestPoint","minDistance","MAX_VALUE","orientation","VERTICAL","HORIZONTAL","NORTHWEST","SOUTHEAST","NORTHEAST","SOUTHWEST","regex","RegExp","results","exec","mmToInches","numToLetter","num","mod","out","String","fromCharCode","letterToNum","charCodeAt","cmToInches","cm","inchesToM","cmToMm","inchesToMm","totalInches","shouldCeil","shouldRound","inchesToLNFT","sqftToM2","sqInchesToMM2","sqInchesToM2","sqftToMM2","lnftToMM","measureDistanceToInches","getTransformedMeasureUnit","numerator","denominator","common","total_segments","segmentDistance","fraction","rounded","floor","feet","reduced","decimal","gcd","getSnappedPos","distanceToInches","dist","fraction_text","distanceToMillimeters","lineBumpoutTotalHeight","lineCornerWidth","getLength","getLineBumpoutTotalHeight","get45CornerLegDistance","prevLine","getPrevLine","totalArea","isWaterfallFeature","isMiterEdge","miterEdgeHeight","getMiterEdgeHeight","backsplashValue","backsplashArea","getGCD","truncate","setStylesOnElement","element","styles","getMinInArray","attrib","prev","curr","getMaxInArray","getIntersectCords","getAspectRatio","heightGCD","aspectHeight","aspectWidth","getIntersectCordsBetweenLines","point3","point4","isRounded","shouldExtend","getIntersectCordsWithExtendedSegments","x3","y3","x4","y4","ua","ub","A1","B1","C1","A2","B2","C2","det","getPointOnTheLine","isPointInsideShape","includeBorder","inside","shapeLines","iPosition","jPosition","xi","yi","xj","yj","isPointOnLine","pt","linePt1","linePt2","dxc","dyc","dxl","dyl","getAreaByShoelaceFormula","addDecimalToLength","getAngleBetweenTwoPoints","atan2","getAngleRelativeToTheHorizontalAxis","getTanDeg","deg","rad","tan","getClosestHigherNumber","needle","isDisabledInPopupWithParents","isInnerCorner","minLineLength","shapePoints","getPointFieldArray","closePoint1","closePoint2","isPointInsidePolygon","parseImperialFractionToDecimal","input","wholePart","fractionPart","decimalValue","IntermediatePart","isChild","getNavItemsWithOptions","newFeatures","allFeatures","matchingFeatureProperty","useMatchingFeatureReplacement","neededColorName","getColorName","getColorFilterValue","otherOptions","getOptionsFromNavItemsForFeature","currentFeatureColor","customFullDisplayName","getMatchingOptionsName","matchByCollection","allowCheckForCollection","_collectionName","matchForSimilarSku","getSkusDifferences","lixilProductSubCategory","option","colorValue","mainFeature","allOptions","mainOption","setLayerPositions","conditions","getArrayOfConditions","defaultLayerLayoutPositions","matchesMetaForArrayOfConditions","layerPosition","matchingPositionFeature","getMatchingPositionFeature","name1","arrayOfConditions","cond","propName","roomLayoutMeta","condition","roomSceneMeta","propValue","getCurrentLayoutAbbreviation","skuNamesPartIds","whereToFind","getCurrentLayoutName","features","featuresPartsList","featuresParts","matchFeature","withSkuNameConditions","getCountertopGroupsSplittedFeatureName","_countertopGroupsCustomDisplayName","wasUpdatedFromAnotherResponse","manufacturerFilter","getFilterGroupValues","_customMatchingOptionsName","getSkuWithoutDot","getCustomFullDisplayName","getSplittedSku","_splittedSku","isFromAsRoom","getMatchingFeatureName","_customFullDisplayName","getModuleFeatureName","disabled","defaultDisabled","canBeDisabled","partNumber","instance","constructor","load_","setParent","featureList","featureName","galleryImages","featured","galImage","featuredImage","notAvailableInVisualizer","roomLayout","layoutName","roomLayoutAbbreviation","loadFeatureCommon","searchText","filteredAvailableFeatures","getFeaturesBySearchText","getFilteredFeaturesByFilters","featuresToDisplay","navigationSubItemsWithFilterMultipleConditions","returnUniqueNavFeatures","restOptions","returnAllFeatures","getFeaturesForNavigationFrom","HANDLES_GROUP_BATHROOM","allConditions","mountTypeCondition","matchesMetaForCondition","oneLayerPosition","navigationItemsWithOptions","navItems","collectionName","colorName","matchingOptionsName","conditionPassed","skuDiff","featureObject","filterNavigationItems","navFeatures","activePosition","navFeature","featuresToCheck","conditionObject","setNotInVisFeature","setFeatureGroupDefault","hideLayerCondition","hasAdditionalParts","checkIfFeaturePartIsMatching","_setLayers","setDefault","hideLayers","navFeatureCLick","firstClick","activeLockedFeature","featureClick","placeholderChanged","activeNotInVisualizerFeature","featureClicked","layer","activeFeatureParts","activeFeaturePart","placeholderFeature","zIndexes","getZIndex","increase","zIndex","additionalPartPartId","abbr","spaceWithLayoutName","edgeFilterGroup","filterGroupValue","activeFilters","activeFeatureConditions","getActiveFeatureConditions","getAdditionalPartsConditions","setActiveFeatureParts","getActiveFeaturePartsAccordingToActiveFeature","shower","currentActiveFeature","layoutAbbr","currentShowerBodyId","getCurrentShowerBodyId","wallConfiguration","previouslySelectedFeatures","showerBodyId","wallConfigurationFeature","filteredFeatures","hardCodedDefaultName","placeholderDefaultName","hardCodedDefault","placeholderDefault","hideItems","wizardGroups","clickedFeature","conflictingPositions","accParent","checkConflictingPosition","showerTubComboIsActive","showerBody","s3Path","s3BindingName","visualizer","isCropped","bvr_root","KIOSK_BVR_Root","S3_BVR_Root","bv5_root","KIOSK_BV5_Root","S3_BV5_Root","kv4_root","KIOSK_KV_Root","S3_KV4_Root","kv5_root","KIOSK_KV5_Root","S3_KV5_Root","bv6_root","s3Root","layersSize","s3FilterImagePath","S3_FILTERS_Root","KIOSK_FEATURES_Root","className","ignoreDefault","stopPropagation","preventDefault","iStartWith","hayStack","startsWith","iIncludes","getNonce","possible","random","iCmp","s1","s2","needToUppercase","matches","RgFeatureName","styleBkgImage","backgroundImage","getMetadataByDimensions","dimensions","NN","cb","getMousePos","evt","rect","getBoundingClientRect","getFilterGroupValue","featureFilterValueId","val","getFilterGroupValueByName","getAllFeatureFilters","featureHasSelectedFilters","featureFilterValueIds","filterObject","filterGroupId","unitedFilterValueIds","newFiltersArray","existingFilterGroup","filterGroupObject","existingFeatureFilter","filVal","scrollToDivInArea","divOffset","animate","scrollLeft","getTranslateX","myElement","getComputedStyle","WebKitCSSMatrix","webkitTransform","m41","reorder","indexA","indexB","tmp","requestAnimFrame","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","msRequestAnimationFrame","setTimeout","isTouchDevice","prefixes","DocumentTouch","matchMedia","mq","makeLayerPolygon","fakeCanvas","setAttribute","context2D","getContext","globalAlpha","drawImage","imgData","getImageData","pnpoly","base64ToBlob","downloadCanvasImageById","canvasId","blob","getElementById","toDataURL","createObjectURL","download","click","revokeObjectURL","imageServer","LAYERS_SIZES","normal","full_hd","full_hd_large","isFeatureHasFilterValue","testFabFilter","filterGroup_id","filterValueId","testFilter","mergeFilterObjects","base64","mime","byteChars","atob","byteArrays","byteNumbers","byteArray","Uint8Array","Blob","toBoolean","visualizerOnly","convertImgToBase64URL","outputFormat","crossOrigin","onerror","onload","dataURL","disableFeature","updateLookCartItem","cabinetParent","topCabinet","allFeaturesReceived","getAdditionalFeaturesOnScroll","loaderDisable","bottomCabinet","bottomHandle","floorParent","floorBody","checkIfLookFeaturesReceived","disabledClick","updateLocalStorage","enableRelatedFeature","relatedFeaturesToEnable","relatedPartId","relatedFeatureGroup","someFeature","checkIfFeatureCanBeAddedToTheCart","shouldUseLixilAvailableQty","enableASInventorySync","enableGInventorySync","bundledFeatures","lixilAvailableQty","trumbleQty","cartItemInStock","getProductIdFromSku","featureIsBundle","getPostCartItemsList","forCart","lixilProductId","relatedProductParent","getLookId","getAvailableFeatureContent","availableFeatureContent","subDescription","preset","lookId","getLookIdUrl","withSlash","createShareUrl","getFeatureUrl","withCategory","finalUrl","urlName","urlPartId","getCategoryOnlyUrl","revertFeatureBeforeChange","featureGroups","getLookList","parentObject","featureBeforeChange","sameFeature","filterFeaturesByMetadata","metadataField","mType","getDefaultPresetByLook","numLookId","allMatchedPresets","buttonKey","afterSaveUrl","amazonImageUrl","shareImageUrl","shareImage","SHARE_BUTTONS","facebook","metaTag","querySelector","hostname","qfUrl","protocol","splittedHost","topLevelDomain","shareUrlSplitted","encodeURIComponent","pinterest","imageUrl","twitter","getShareWindowReference","open","getShareConfig","getFeatureParent","saveQuoteAndShare","propsShareUrl","saveNeeded","windowReference","isSafari","responseData","saveQuote","submit","showReceipt","setAmazonImageUrl","getCartItemsArrayFromFeature","neededFeature","firstCartItem","itemsToAdd","getSameFeatureWithAnotherMeta","metaName","activeFeatureValue","optionFeatures","metaValue","designNavigationItems","activeFeatureCollectionName","checkFeature","optFeature","getFeatureSectionIsHidden","lookFeature","getPropertyToMatchActiveFeature","getFeatureIsActive","parentFeatureGroup","removeLookPointFor","sku1","sku2","differences","letter","filterCartItems","withoutNotInStock","withoutZeroQuantity","parentsOnly","sortCartItemsForListPage","hideFeatureSection","showFeaturesOnly","partIdExistInQtCategory","isFeatureEnabled","hardCodelyRemovedClicking","isCoburn","Shower","showerDoorFeatureGroup","showerDoor","getWizardWithFirstStepCurrentPartId","wizardList","wizardItem","openWizardOnClick","firstStepGroups","getCurrentGroups","nodeType","getFeatureGroupFromWizardGroup","Small","SmallWithPopout","SmallWithPeninsula","SmallWithIsland","SmallWithPopoutWithPeninsula","SmallWithPopoutWithIsland","SmallWithPeninsulaWithIsland","SmallWithPopoutWithPeninsulaWithIsland","LShape","LShapeWithPeninsula","LShapeWithIsland","LShapeWithPeninsulaWithIsland","PLACEMENTS","Island","Countertop","MODULE_CONTEXT_MENU_TYPES","Filters","SliceButtons","MODULE_CONTEXT_MENU_DIRECTIONS","Vertical","Horizontal","CABINET_WIZARD_BUTTONS","buttonId","filtersGroupName","COUNTERTOP_WIZARD_BUTTONS","pluralText","wizardAllButton","displayText","parent_id","icon","additionalImages","BACKSPLASH_TYPES","COUNTERTOP_GROUP","CABINET_GROUP","EDGE_GROUP","sqftEventManager","renderEvents","renderEventsSlab","OVERALL","SLAB_RIGHT_PART_CONTENT","SLAB_RIGHT_PART_WORKSPACE","BOX_POINT","BOX","OVERLAY","IMAGE_LINE","IMAGE","POINT","SEGMENT_MEASUREMENTS","SEGMENT","SHAPE_LABEL","SHAPE_UPPER","SHAPE","SHAPE_SLAB_PLACEHOLDER","WALL","SLAB_IMAGE","SLAB_LEFT_PART","MOUSE_WHEEL","WHEEL","ON_MOUSE_WHEEL","RESIZE","TOUCH_START","TOUCH_END","TOUCH_MOVE","TOUCH_CANCEL","MOUSE_LEAVE","CLICK","DBLCLICK","CONTEXTMENU","KEYDOWN","DRAG_OVER","DROP","keyCode","ENTER","NumpadEnter","activeEvents","canvasOffset","processing","eventQueue","G_events","userIdleStartTimer","userIdleWarning","userIdleTimeOut","userIdleStopTimer","userIdleGoHome","userIdleGoHomeCountdown","hammerMC","LastKnownMousePos","zoomLock","resizeHandler","keydownHandler","getCtx","eventSort","pageX","pageY","getTouchPos","touch","mousepos","mousemove","event","sender","mouseup","mousedown","onMouseLeave","mouseleave","onKeyDown","code","onDblClick","onWheel","wheel","onResize","updateOffset","onContextmenu","contextmenu","onDrop","dragEvents","onDragOver","dragOverEvents","onTouchCancel","onRender","triangles","trigger","response","pinchToZoom","additionalEvent","isWithEventManager","Hammer","Manager","Pinch","enable","on","isComposing","processEventQueue","handled","touchPos","passive","clearAll","removeEventListener","override","revertBackAfterMouseUp","releaseStealLock","owner","cursor","noStealing","setCursorImage","cursorImage","getCursor","removeEvent","removeStuckCursorEvents","mouseupEvents","mouseupEvent","home","wizard","lookFeatureSku","category","cartLogin","cartRegister","cartTerms","cartBilling","cartBillingInfo","cartShipping","cartPayment","cartDelivery","cartTwoFAVerify","cartTwoFA","cartConfirm","cartSuccess","shop","shopRoutes","sqft","sqftCabinetsIntro","sqftCabinetsAR","sqftCabinetsTutorial","quoting","quoteDesign","newscope","shoppingcart","RgCabinetSize","vanitySize","fromName","lastDigit","binding","arrayOfBindings","Large","tryToSetTheSameFeature","setFeatureLayer","shadowFeature","layoutAbr","s3Binding","entityID","featureDefinitionId","fromS3Binding","handleClick","placeholderName","shadowNeeded","activeName","includesCI","setShadowFeature","parentGroup","shadows","compatibleFeatures","shadow","shadowName","featuresArray","activeFilterValueIDs","filter1","filter2","setSQFTMenuOpened","menuOpened","setSQFTMenuOpenedLock","menuOpenedLock","setSQFTActiveButton","activeButton","setSQFTActiveSubMenuButton","activeSubMenuButton","setSQFTActiveLevel3Button","activeLevel3Button","setSQFTActiveRoomIndex","activeRoomIndex","setSQFTActiveRoomType","activeRoomType","setSQFTActiveRoomId","activeRoomId","setSQFTActiveRoom","activeRoom","setIsRoomSwitcherVisible","isVisible","setFreeDrawMode","isFreeDrawMode","setWallsUpMode","isWallsUpMode","setWallsLockMode","isWallsLockMode","setSQFTRoomLayouts","roomLayouts","setSQFTContextMenu","setSQFTContextMenuV2","contextMenuV2","setSQFTSystemMessage","systemMessage","setSQFTAr3dPopup","ar3dPopup","setSQFTSystemDeleteMessage","systemDeleteMessage","sqftPopup","setChangeValuePopups","changeValuePopups","addChangeValuePopup","changeValuePopup","deleteChangeValuePopup","setValidationPopups","validationPopups","addValidationPopup","validationPopup","deleteValidationPopup","addShapeIdWithMissingFeature","setSelectedCountertop","selectedCountertop","setAbortController","abortRequestController","setIsItextEditing","isITextEditing","setIsSlabPlaceholderOverlapsWithMultipleShapes","isSlabPlaceholderOverlapsWithMultipleShapes","setReCacheMenuCounter","reCacheMenuCounter","showLoading","hideLoading","LoaderView","props","iframe","visualizersLoaded","color","COLORS","white","active","Component","connect","loaderState","lookState","getFeatureOptions","fromNavItemOptions","colorFilterGroup","activeFeatureValues","forSpecificLayout","forSpecificScene","alreadyAddedOptionIndex","getMatchingColorFeature","notMatchingFeature","colorFilterValue","currentCollectionName","currentFeatureName","featureFoundItems","setLayerPosition","getSameColorFeatures","sameColorOnly","sameColorFeatures","differentColorFeatures","doNotShowStylePopupFor","isAsBathroom","activeFilterGroupValue","sameFeatureAsActive","bathroomShowerPanExclude","getDisplaySameColorGroups","fromArray","activeCollectionFilterGroupValue","displayFeatures","otherGroup","colName","currentColGroup","sameColorObject","addedFeature","currentCollectionValue","getSimilarItemsList","matchingFeatures","sameColorItems","sameCollectionFeature","updateMirrorAndWallsCrop","vanityParent","mirror","setLayers","wallsParent","wallFeatureGroup","updateVanitySides","oldActiveFeature","currentSideMeta","nextSideMeta","vanity_type","nextVanityIsDouble","isDoubleVanity","isCountertopOrBacksplash","forceClick","updateVanityPositions","asBathroom","getActiveFeaturesAsObject","checkIfFeatureDisabled","featureParent","checkDisabledOnly","isDisabled","withLayerPositions","withDisabled","showAllGroups","showAllQtCategories","displayInMenu","defaultSubParts","featureGroupsObjects","getActiveFeatures","visType","sortByParents","parentKey","disallowedSkus","getLookListHeight","lmFeatureParent","opened","featuresLength","listHeight","styleNotificationIsVisible","getStyleAlertIsVisibleForGroup","isVisibleForNavigation","getCropCoordsCenter","createCartList","loadByTheDefault","existingCartItem","loadByTheDefaultCItem","foundFeature","getFeatureById","auto","relatedItemQuantity","alreadyAddedRelatedFeature","getLayerCenter","coords","canvasElement","clientWidth","clientHeight","COORDS_MAX","centerXPercentage","min_x","max_x","centerYPercentage","min_y","max_y","zoomPercentage","openedMenuWidth","featureMinX","featureMaxX","featureCenter","gPointPercent","shiftX","GROHE_CONFIG","sidebarWidth","mobile","featureX","getCoordsCenter","parsedCoords","getFeatureCropCoors","getStyleAlertNotMatchingFeatures","fromStyleAlertIcon","notMatchingFeatures","confirmedChange","wallsPartIds","wallPartId","wallGroup","alertIsVisible","names","compareCoords","getAllNotMatchingPartIds","setLocalStorageItem","localStorage","setItem","getLocalStorageItem","JSON","parse","getItem","zoomCanvasOut","imageCanvas","current","pinchZoom","zoomToCenter","getRoomLayouts","returnAllLayouts","newLooks","layoutNames","parents","roomScene","lookLayout","lookScene","currentName","getParsedLookUrl","checkURL","regexForRoomPreset","lookIdFromUrl","featureGroupFromUrl","skuFromUrl","splittedLookPath","currentCoords","commonCoords","coordProp","getFeatureCoords","isWizard","getCommonCoords","zoomFeatureGroup","Coords","toggleArrayValue","newArray","checkForContextMenuCommon","returnObject","allButtons","showButtons","isBathroom","whereToCheck","contextMenuArray","checkPartId","disabledClickablePartIds","withQuotingToolFeatures","hasNavItemsLength","activeVanityType","isVanity","isShower","isCenterIsland","existingWizardItem","button","testBtn","hasSubMenu","sinkIndex","sinkParent","isPedestal","backsplashIndex","backsplashParent","getExistingWizardForGroups","vanityButtonIndex","vanityWizardButton","wizardId","isAmericanStandard","showerWizardButton","isLixil","counteropWizardButton","accPartId","accFg","hideContext","getOptionStyles","thumbnail","backgroundColor","dbFeatureInterface","number","shippingCost","fabricatorCost","featureInterface","featureCollectionInterface","isRequired","arrayOf","featureGroupInterface","navItemInterface","path","someLayoutFound","hasNoVisualizerLayers","clickFrom","keyIndex","skuName","skuName2","regexForWizardId","wizardIsDisabled","getCurrentWizardList","isSameVisualizerWizard","disabledScenes","showWizardInsteadOfQT","getActiveWizardItem","stringId","wizItem","isCenterIslandGroup","getFeatureGroupByGroupName","getDefaultMaterialsWizardItem","categoryIsInTheWizard","firstOnly","lookWhere","getCurrentGroupsFromSource","wizGroup","getMaterialsWizardItem","params","getUrlFromString","currentVisType","lastSelectedWizardInThisQuote","isLastActiveWizard","foundWizItem","wizardItemId","cachedSiblingFeatures","siblingGroups","wizardEdges","wizEdge","siblingGroup","WIZARD_GROUP_TYPES","useIncluded","featuresIncluded","alreadyCached","cacheObject","wGroup","wGroupIndex","totalFeatures","included","exclObj","mergedGroups","featuresExcluded","excluded","exclFeature","getCorrectedWizardGroupId","stepSelectedValue","wizG","realWizardGroup","navItemIsExcluded","prevStepGroups","additionalWizardValuesToCheck","stepStr","toCheckValue","selectedPrevStep","selectedWizardGroupIsNotInCurrentStepAnymore","foundPreviouslySelectedGroup","wg","suggestedStepGroups","wizardGroupWithSelectedFeature","returnAllSteps","maxWizardSteps","stepsArray","currentGroups","findParentWizardFeatureGroup","getWizardStepCommonCoords","wizardFeatureParentGroup","currentTry","recursiveFindParent","checkWizardGroup","sourceEdge","nextToCheckWizardGroup","findFeatureBySelectedFilters","skuColor","sameColor","getFilterValueThumbnailAndStyles","currentFilterValue","isColor","backgroundSize","backgroundRepeat","backgroundPosition","featureDefinitionID","includedFeature","getLowerCasedSharedFeatureName","filterWizardNavItems","getCurrentWizardNavItems","shopPageOpened","showPrevStepsColorFirst","selectedStepsReversed","reverse","selectedStep","selectedFilter","parentWizardGroup","faucetParent","selectedFaucetConditions","filteredNavItems","allSelectedColors","currentColorOption","optionMatchForPrevSelectedColor","selectedColor","partIdGroups","getFilteredLayersForActiveWizard","layers","disableNotSelectedFeatureGroups","getCompressedAllWizardValues","newWizObject","wizValues","getCompressedFeature","getWizardStepIsDisabled","prevWizardGroup","notRequired","getWizardProductGroupName","productCartTitle","shouldUseNewWizardFeaturesRequestsLogic","counts","getMissingWizardFeatures","currentNavItems","requestInProgress","wizardMissingFeatures","missingSkus","setWizardMissingFeatures","slicedArray","stillMissingArray","getBvFeatures","missingSkusResponse","loadNewFeatures","useHideItemsDisabledfeatureGroups","visualizersLoadedLength","useEffect","getNextWizardStepQuantity","wizardSqftCartItems","addedCartItems","getFeatureGroupFeaturesQuantity","displayMaterialsWizardGroupAsFeature","custom","getWizardGroupFromCurrentSteps","wizardValues","neededWizardGroupId","neededStep","neededWizardGroup","step","mergedGroup","SHOWER_FLOOR_GROUP_BATHROOM","removeLayoutFromPartName","removeEdgeFromPartName","removeCabinetLayoutFromPartName","removeBacksplashTypeFromPartName","removeCountertopFromPartName","removeBacksplashFromPartName","cabinetLayout","enableSquareFootage","setSquareFootageGroup","SQFTGroup","setSQFTGroup","setSQFTViewMode","SQFTViewMode","loadSQFT","sqftLoaded","updateSQFT","sqftUpdateType","setSquareFeet","squareFeet","toggleChangeLayoutPopup","changeLayoutPopupOpened","layoutToApply","applyLayoutOnSqft","sendLayoutChangeOnSqft","setSqftMeasureUnit","changeSqftFeaturesPopup","sqftFeaturesPopup","setSqftFromFeature","sqftFromFeature","setSqftCabinetsGlb","cabinetsGlb","setCabinetsARBlobUrl","cabinetsARBlobUrl","setAPIErrorMessage","apiErrorMessage","getFeatureGroupIconURL","getFeatureGroupIconStyles","customImageUrl","getDashboardThemeIcon","largeLayout","bathTubThumbnail","ceilingThumbnail","floorThumbnail","showerThumbnail","showerAccessoriesThumbnail","showerOLDThumbnail","showerTubComboThumbnail","custom60in30X8Shower","custom30in30X8Shower","custom60in15X4Shower","custom30in15X4Shower","custom60inPonyShower","custom30inPonyShower","toiletThumbnail","vanityThumbnail","wallsThumbnail","windowThumbnail","smallLayout","featureGroupNameToIcon","largeLayoutShadow","smallLayoutShadow","shower30inWallShadow","floorPlaceholder","ceilingPlaceholder","showerWallSmallRoomPlaceholder","showerWallSmallRoomPlaceholder60in","showerFloorSmallRoomPlaceholder","showerFloorSmallRoomPlaceholder60in","showerPanSmallRoomPlaceholder","showerPanSmallRoomPlaceholder60in","LayoutThumbnails","homePage","vanity","vanity_sink","vanity_faucet","vanity_mirror","vanity_handle","shower_door","shower_pan","shower_pan_combo","shower_door_handle","threshold","bathtub","bathtub_fixture","toilet","ceiling","lighting","towel","left_shower_wall","right_shower_wall","pony_wall","fridge","left_wall","right_wall","popout_wall","faucet","center_island_sink","center_island_faucet","center_island_cabinet","center_island_handle","center_island_chairs","cutout","cutouts","edge_profiles","walls_ceiling","shareImageRebath","baseDashboardImagesPath","normalizeIconFileName","imageSplitted","actionTypes","getSaveQuoteFastData","forTempSave","printState","contractSigningState","needToRevertBackCostPrices","updateCurrentQuote","updatedQuotes","grandTotal","records","quoteObject","record","bvImage","staticCanvasImage","recordData","contractSigningValues","pagesCustomFieldsValue","contractsValues","savedInvoiceNumberOfPages","needToUpdateContract","receiptSignature","priceWorkSheetLogic","getPriceWorkSheetSaveValues","stringify","sqFtCalcImage","sqFtCalcData","canvasImage","sFtCalcDataJson","quoteId","recordCartItems","getCompressedCartItem","discounts","selected","oldDeleted","materialCost","installationCost","totalWithTaxes","customDeposit","getCustomDepositAmount","fromBV","notes","employeeId","installations","services","service","subId","saveQuoteFast","postMessageIsExecuting","savedFastData","yesNoConsultationRequest","quoteRequestType","fromCheckOutPage","assignQuotePopupCustomer","assignQuotePopupEmployee","showContractSignOnError","formData","FormData","sendConsumerEmail","agreeEmailCheckbox","customerEmail","salesPerson","fullName","salesPersonFullName","salesPersonEmail","leadOriginatorId","rawVal","postalCode","isNewUser","fromTool","installationTaxesRate","materialTaxesRate","fromDashboard","callFabricator","callFabricatorOnSave","language","fileContent","dataUri","append","employeeSelected","employeesListReceived","employeesList","getEmployees","emp","receipt","receiptCost","getCurrentReceipt","pdfReceipt","toBlob","pdfReceipt2","showContractSignPopup","contractsList","showLeadCaptureShoppingCart","showDepositPopup","receiptUrl","signedDocumentUrl","receiptPrinted","setReceiptUrl","retryFunction","renderErrorPopup","Error","skipRequestsFor","loadFiltersOnly","getFilterGroups","getBathroomVisualizerData","featuresCount","loadVisualizerOnly","forVisualizer","featuresToReceive","errorMessage","defaults","updatePresetsArray","wizardData","wizardDataV2","getParsedWizardList","setWizardList","setAllFeaturesLoaded","getBvPresets","getDisplayRoom","getJobIdPreset","editToken","getBVJobData","updateFeaturesWithMarkUp","featuresResponse","useMarkUpFeaturesRequests","getMarkUpForFeatures","markUpResponse","setResponseFeaturesMarkUp","arrayOfSkus","requestSharedFeatureNames","getBathroomVisualizerFeatures","getBvGroups","getBathroomVisualizerGroups","getBvGroupFeatures","pageSize","axiosController","requestOldFeatures","getBathroomVisualizerGroupFeatures","getBvGroupFilterValues","withStoneFilters","getBathroomVisualizerGroupFilterValues","filterResponse","submitPayment","paymentInfo","useNewHoc","transactionResponse","responseCode","msg","errors","errorText","messageDetails","sepIdx","getQtCategories","useWizard","getFabricatorSubscriptions","subscriptions","setFabricatorSubscriptions","fabricatorName","wasCreatedFromFabricator","globalMarkUp","parseMarkUp","setMarkUpLogic","getDiscounts","getFabricatorDiscounts","dis","enabled","isSaveOnlyDiscount","setDiscountSections","getNavigationButtons","testConnection","forTool","getMenuNavigation","menuData","copySqftImagesToAnotherJob","postData","copySqftImages","red","gray","gray2","gray3","gray4","light","GROHE_FILTER_COLORS","primary","primary_hover","active_hover","assetsPath","ShowerType","ShowerTypes","GET_CANVAS_SCALE","CANVAS_SCALE_CHANGED","RESET_CANVAS","ENABLE_PINCH_ZOOM","DISABLE_PINCH_ZOOM","CHANGE_LAYOUT","UPDATE_ALL_ITEMS","USER_IS_LOGGED_IN","USER_POPUP_CLOSED","REMOVE_GREEN_ZONE_ON_CANVAS","FEATURE_IS_CLICKED","OPEN_MOBILE_NAVIGATION","CHANGE_MOBILE_MENU_CONTENT_TYPE","UPDATE_QUOTING_TOOL","SHOW_NUMERIC_KBD","OVERLAY_CLICK","SHOW_SUMMARY","DIRECTIONS","EAST","WEST","NORTH","SOUTH","UNDEFINED","ShapeHelper","activeShape","activeShapeLines","intersectionPoints","activeShapeLine","testShapeLine","pointFieldActiveShapeLineFrom","pointFieldActiveShapeLineTo","pointFieldTestShapeLineFrom","pointFieldTestShapeLineTo","intersectionCords","shape1","shape2","testShapeLines","getIntersectionCordsV2","shape1Pos","vertex","distances","lineDirection","getAngleDirection","diff","lineMidPoint","diffX","diffY","getResources","getBordersOfWallLines","lineOrientation","getLineOrientation","pointFieldActivePoint","testImagePoints","getLinePointsPointField","getAppliances","images","getSlabImages","usePointsV2","modelCorePoint","getPosX","getPosY","slope","itemBounds","resultV","resultH","vertical","itemBound","horizontal","guides","minV","minH","newItemBounds","verticalElements","horizontalElements","verticalElement","horizontalElement","minLength","pointDistances","pointField","dir","isAngleInner","isInner","facing","isSlabMode","rotatePointX","posSlab","rotatePointY","xCords","yCords","min","max","getAbsolutePosFromSnapPossibilities","snapPossibilities","absolutePos","snapWithShape","snap","getLineLengthNumberText","pointFrom","pointTo","changeValueCallback","yOffset","xOffset","betweenPoints","shouldRenderFrameBorder","isLength","getPointDirection","aP","bP","cP","lineBeforeFrom","vDir","hDir","mAC","newDirection","cornerMargins","fromTop","fromLeft","fromRight","fromBottom","dirX","dirY","point1X","point1Y","point2X","point2Y","point3X","point3Y","pointBeforeX","pointBeforeY","direction","getLineLengthNumberTextV2","getLineDirection","getFontSizeFromContext","design","getLineLengthNumberTextV2ForTheImage","eventsPriority","deltaX","deltaY","getSlope","getSlopeV2","getAngleBetweenTwoSlopes","getAngleBetweenTwoLines","line1","line2","slopeLine1","slopeLine2","M1","M2","atan","getVectorByPoints","getEdgeFeatureGroup","getAngleBetweenTwoLinesV2","vector1","vector2","cosAngle","acos","getAngleBetween3Points","A","B","AB","BC","AC","edgeFeatureGroups","getIsShapePlacedOnTheFloor","edgeFeatureGroup","getNavItemsFromTheWizard","firstFeature","firstConditions","getCountertopPartNames","countertopNavItem","centerIslandNavItem","countertopPartName","centerIslandPartName","canShapeBeAutoShifted","testShape","isTestShapePlacedOnTheFloor","isTestShapePlacedOnTheWall","getIsShapePlacedOnTheWall","parentPartId","setWizardIsActive","setWizardConfig","wizardConfig","setWizardActiveItem","setWizardShowFeatureSection","wizardShowFeatureSection","setWizardActiveStep","currentWizardItem","wizardConflictingSteps","newWizValues","selectedKeyNumber","wizObject","lastVisitedStep","clearWizardSelectedValue","setWizardSelectedValues","direct","currentStep","commonObject","newWizardSteps","getNextWizardSteps","changeWizardValuesToUseNewGroups","updatedWizardValues","shouldReassignValues","switchCartItemsToNewWizardGroups","shouldReassign","changeAllCartItems","getConflictingWizardSteps","getUpdatedAllWizardValues","setAllWizardSelectedValues","getMissingWizardValuesFeatures","compressedAllWizardsValues","missingFeatures","wizardObject","getWizardVisualizerType","compressedFeature","getLoadedFeatureById","featuresFromJob","getRestoredWizardValues","selectedWizardObject","compressedWG","foundWg","updateAllWizardValues","restoreAllWizardSelectedValues","valuesToRestore","setWizardConflictPopupOpened","wizardConflictPopupOpened","setWizardConflictSteps","setWizardSqftCartItems","setWizardAllowSkipDoneSteps","wizardAllowSkipDoneSteps","SaveIcon","viewBox","strokeWidth","fill","fillRule","transform","ProductsIconAnimated","version","xmlns","TimingIconAnimated","EditIcon","EyeBallIcon","cx","cy","rx","ry","ScreenshotIcon","PlusIcon","LookLayoutIcon","data-name","LookExitIcon","LookCoBrowseIcon","LookShareIcons","LookExpandIcon","LookMinimizeIcon","LookCartIcon","LookRoomIdeasIcon","Look3DIcon","LookAugmentRealityIcon","LookIconHover","strokeDasharray","LookIconNavigate","LookIntroIcon","groheIcon","AmericanStandardIcon","GroheListIcon","GroheFilterIcon","GroheGridIcon","GroheArchitectureIcon","GroheLockIcon","GroheLockIconSmall","GroheNoteAddIcon","GroheBoxIcon","GroheVehicleIcon","opacity","GroheDownloadIcon","GroheSQFTIcon","GroheInkPenIcon","getFeaturePropertyToSort","getNavItemsSortedByProperty","property2","prop1","prop2","prop3","prop4","getSortedNavItems","isQuotingTool","sortNavigationItems","showPricing","hideCheckoutBreakdownCost","hidePricesFromUser","propertyToSort","useMatchesFailedNavigation","unLockedFeatures","lockedFeatures","inVisFeatures","notInVisFeatures","getDesignRecommendedNavItems","getReorderedItems","needToReplaceActiveFeature","navItemsToChange","activeNavItem","isWalls","stoneFeatures","getStonesActiveFeatures","stoneName","existingInNavItems","sorted","nItemToChange","currentIndex","getReplacedNavItemsWithUnlockedFeatures","pricingIsLocked","pricingLocked","unlockedOption","nItem","desRecFilterGroup","desRecFeature","desRecColorFeatures","desRecValues","colorOption","desRecValue","filterValueObject","findNextVanityTypeFeature","getNavigationItemsLists","navItemsList","designRecommended","others","designNavItem","regularFeatures","MountHoles","navTranslate","existingNonMatchingList","navItemsObject","notMatchingMetaName","nextSink","nextFeatureGroup","nextSinkSku","isQCSink","maxWidth","maxTotalWidth","positionFeature","getSinksWidth","matchingVanities","allVanities","testFeature","currentSkuFeature","currentSideFeatures","updateNonCompatibleListWithVanity","nonCompatibleList","Vanity","currentVanityTypeFeatureGroup","nextVanity","fromToObject","getNextSinkOnWashstandOrConsoleChange","isQcSink","forSinkConditions","nextAvailableSinks","conditionsToMatch","updateSinkWithNewFeature","sinkFeature","checkForCompatabilityAlert","matchCounterTopObject","getMatchingCounterTop","matchingFeature","hasSameName","getSinkToClickFromMatchingSinks","clickedSinkConditions","nextFaucet","showerArmFeatureGroup","showerHeadParent","showerHead","clickedArmConditions","showPrice","clickLeadCapture","getMissingFeaturesAndClickThem","updateCanvas","originalPartId","requestInProcess","wallParent","missingFeatureObject","relatedItem","navigationItemName","requestFromBackendName","cropResponse","setGroupFeatures","setCurrentFeature","featureFound","activeFeatureBeforeAllWalls","clickFromAllWalls","alreadyRequestedFeatureNames","requestAfterRoomChange","getShowMatchRadio","checkForTileBacksplash","getApplyToLogic","setApplyToFunction","applyToArrayAll","currentApplyToArray","navigationState","cabinetsApplyTo","countertopsApplyToArray","edgesApplyTo","cabinetsApplyToBathroom","countertopsApplyToArrayBathroom","handlesApplyToBathroom","showerFloorApplyToBathroom","clickOnSimilarFeatures","wallFeature","applyToLogic","useFeaturesLightRequest","isSolidSurface","applyAllCountertops","applyClickTo","getSubPartByPartId","setActiveFeaturesBeforeAllWalls","applyToArray","onlyForOneFeatureGroup","promises","all","applyNewPreset","roomPreset","setActiveFeaturesFromObject","setItemsFromBvState","isRoomLayoutsVisible","featureQuantity","defaultQuantity","ShowerTubCombo","bathTubLiner","replacementTub","walkInTub","jettedTub","bottomTub","leftShowerWallType","showerComboSize","relatedItemName","RelatedItemClass","categoryEnabled","load","wallConfigurations","createCustomWallConfiguration","placeholdersNeeded","getRelatedItems","addTo","showerParent","setZIndex","conf","sqftShapeManager","addPlaceholderShape","shouldUseSlabPricing","shapeSegments","updateSlabPlaceholderFeatureId","deregisterLineEvents","setSlabPricing","initTitle","SLAB_IMAGE_TYPES","placeholder","getShapeByIds","hasSameFeatureId","firstFeatureId","hasSameSharedFeatureName","currentShapeFeature","currentShapeFeatureSharedName","testShapeFeature","setShapeFeature","visualizerFeature","setBacksplashFeatureId","setShapeFeatureId","setShapeRelatedParentFeatureId","relatedParentFeatureId","getCounterTopShapes","cLabel","getBacksplashLabeledShapes","hideSeamShapes","isWithShapePieces","hideShapePieces","restoreSeamShapes","reInitEvents","hideSlabShapes","restoreSlabShapes","reInitLineTitleEvents","hideMiteredSections","miteredOverlay","restoreMiteredSections","resetShapeChangesInTheSlabMode","updateSlabPoints","setShapePieces","shapeSlab","setRotationDegreesSlab","removeAllActiveBacksplashesAttachedToShape","checkForUpdateSlabPoints","isPointsChanged","checkForUpdateSlabPosition","isPositionChanged","updateSlabPosition","hideCorePieceShapes","restoreCorePieceShapes","hideShapeParts","shouldSkipSlabPlaceHolders","deregisterPartEvents","restoreShapeParts","reInitPartEvents","seamHistory","getSeamHistory","latestShape","pop","shapePieces","resetAllSeams","setSeamHistory","ctxCenter","minX","maxX","minY","maxY","getMinMaxWorkspacePoints","isIncludeBumpout","getMinMaxBumpoutPoints","disableRotatableStateForAllShapes","shapeRotatable","disableRotatableState","canShapeBeRotated","isShapeCanBeRotated","isMovableImageCanBeRotated","closeRotatablePopups","getIsRotatable","setIsRotatable","reInitShapePoints","setShapeAsRotatable","shapeOffset","changeValuePopupPosition","shapeHeight","getHeight","shapeCabinet","getShapeHeight","shapeWidth","getWidth","getShapeWidth","changeRotatedDegreeValuePopup","valuePopup","Direction","LEFT","newValuePopup","rotatedDegreesSlab","rotatedDegrees","rotateShapeTo90Deg","currentRotation","newRotation","getShapeCornerPoints","isPointOnField","bumpoutPoints","getBumpoutPoints","dragPoint","getMinMaxShapesPointsOnWorkspace","shouldGetRegularPosition","shapesPoints","getPointsPosOnWorkspace","pointsMinMax","getMinMaxPoints","getShapesConvexHullPointsOnWorkspace","convexHull","getShapesConvexHullPointsPointField","getPointsPointField","getShapesContourPointsOnWorkspace","shoudRemoveRepeatingPoints","shapesPointsOnWorkspace","unifiedPoints","unifyShapePoints","removeConsecutiveDuplicates","getShapesOverhangOnWorkspace","contourPoints","snappedShapes","minOverlap","overhangShapes","canShapeCreateOverhang","isShapeInsideSnappedShapes","overhangShape","pointsPosOnWorkspace","roundedPoints","roundShapePoints","cp1","cp2","rp1","rp2","areCollinearAndOverlap","getShapesContourPointsPointField","shapesPointField","getMinMaxShapePoints","getGrandParent","setIsDisabledShapeInPopup","resetShapeSeams","getSnappedShapes","snappedShapeGroup","shapeAbsolute","getSnappedShapeGroup","changeShapesFeatureIDIfColorWasChanged","changeFeatureIdIfColorWasChanged","updateShapeColorSet","updateColorSet","updateMinMaxMiteredPoints","updateMinMaxPoints","LOWES_DISCLAIMER_EN","getFabricatorLogo","hardCodedLogo","isRenoDepot","hardCodedRenoDepotLogo","isRona","hardCodedRonaLogo","hardCodedLowesLogo","logoUrl","subDomain","hardCodeIsAmericanImport","hardCodeIsAmericanStandard","hardCodeIsRona","hardCodeIsRenoDepot","hardCodeIsFlexFinish","hardCodeIsGraniteTransformation","hardCodeIsGraniteTransformationUK","hardCodeIsLixil","hardCodeIsTorrco","hardCodeIsAgent","hardCodeIsCoburn","hardCodeIsSolidSurface","hardCodeIsLakesideSurfaces","hardCodeIsDeStefano","hardCodeIsNhance","hardCodeIsEncore","hardCodeIsFabricator","hardCodeIsFloform","hardCodeIsDeluxegarage","hardCodeIsRenuit","isProd","materialTotalCost","isCafeCountetops","fabId","fabricatorsHardcodeObject","isAmericanImport","isGraniteTransformation","isGraniteTransformationUK","isModerno","isMcDermott","isFlexFinish","isTorrco","isLakesideSurfaces","isNhance","isGrohe","toggleDesktopNavigation","desktopNavigationOpened","setNavigationViewType","navigationViewType","setActiveNavigationNames","activeNavigationParentName","activeNavigationChildName","setNavigationLoading","navigationLoadingActive","setModuleContextMenuType","moduleContextMenuType","setModuleContextMenuDirection","moduleContextMenuDirection","setModuleContextMenuModule","moduleContextMenuModule","setModuleContextMenuModulePart","moduleContextMenuModulePart","setActiveNavigationFilter","activeNavigationFilter","setActiveNavigationFilterStepIndex","activeNavigationFilterStepIndex","setCabinetNavigationFilterCompleted","cabinetNavigationFilterCompleted","setCountertopNavigationFilterCompleted","countertopNavigationFilterCompleted","setCountertopWizard","countertopWizard","setCabinetsApplyTo","setCabinetsApplyToBathroom","setCountertopsApplyTo","countertopsApplyTo","newArrayLogic","setCountertopsApplyToBathroom","countertopsApplyToBathroom","setApplyToCommon","arrayToChange","isNewNotUsed","arrayPropertyToChange","setEdgesApplyTo","toggleUpdateDisableFeatureGroupRadio","updateDisableFeatureGroupRadio","toggleNavItemPositionModal","navItemPositionModal","setUseFeaturesLightRequest","usePrevious","ref","useRef","useIsMounted","isMountedRef","isMounted","useCallback","requestInProgressTimeoutId","IsMountedComponent","children","isMountedComponent","useOutsideClick","useSQFTCanvas","contains","handleClickThroughCanvasEvents","objectName","useOutsideClickSimple","excludedClassNames","closest","useProgressiveImage","useState","thumbnailLoaded","setThumbnailLoaded","complete","useFeaturesChecker","featuresLoaded","setFeaturesLoaded","callRecursiveFeaturesCheck","clearTimeout","checkFeatures","useShowRoomLayoutsButton","useMemo","splittedFromTheLayoutName","MaterialSpinner","withCounter","propTypes","oneOfType","bool","PropTypes","wizardGroupInterface","oneOf","scopeImageUrl","filtersExcluded","productCartDescription","uploadedImageUrl","noAvailableFilters","wizardGroupIcon","hideInCartAndReceipt","multipleAddToCart","inputFields","headerTitle","headerSubTitle","visibleInVisualizers","hideForCustomers","skipProductInfo","hidePriceNoCart","skipLockDontApply","wizardNodeInterface","wizardEdgeInterface","wizardItemInterface","wizardNodes","startTitle","startDescription","wizardSelectedValueInterface","singleFeature","wizardAllObjectInterface","wizardConflictingObjectInterface","cartItemId","setCustomVanitySinkMetaData","activeSubType_","Types","vanityCabinet","completeVanity","vanityBacksplash","vanityHandle","vanityPTrap","vanityWashstand","vanityMiddle","drawerPull","wsTowelBar","vanityLegs","vanityConsole","doorHandle","drawerHandle","relatedGroupNames","loadFeature","faucetIndex","vanityPart","forFeatureGroup","getCounterTopSize","isAsBathroomState","sinkFeatureGroup","sinkTypes","currentSku","needToUpdateCustomMetadata","sinkUTypes","FloorWithIsland","KVSCENE_BACKSPLASH_TYPES","oldKitchenCabinetsLogicProfiles","hasOldCabinetLogic","useOldCabinetLogic","Type","customBodyType","showerGlass","showerInteriorWall","showerInteriorWallAccent","showerFloor","showerOverlay","showerPanCombo","showerFixture","showerBodySelectedByUser","showerDoorHandle","ponyWallCap","ponyWallGlass","showerFloorIsActive","relatedItemType","showerBodyFeature","handleNavigationItemClick","ponyWallIsActive","getActiveShowerGroup","showerDimensions","isPonyWallPart","showerSizeValues","warn","showerBodyType","comboPart","Combo","FeatureName","maxLength","stringFeatureName","injectIntl","cartItemInterface","isMinimumCharge","isMinimumChargeItems","keepOnLookUpdate","shippingName","shippingTime","controllersConfig","exportableControllers","workspaceControllers","getControllersExportData","exportData","controllerName","controller","LIXIL_USER_QUERY_PARAMS","postSaveTempData","getPassedUserInfo","userData","postSaveVisualizerImage","base64Image","tempData","expiresIn","postTrumbleInventory","getSaveTempData","getTempIdForPostMessage","returnAction","existingTempId","stringifiedSaveData","receivedTempId","postSureTax","postVerifyAddress","addressObject","address1","city","stateShort","errorDescription","getTrumbleShippingOptions","skuList","zipCode","postTrumbleShippingOptions","skusArray","requestMoreThanUsualPartIds","postShipperHQOptions","shippingAddress","destination","postShipperHqShipping","availableOptions","options","carrier","shippingRates","shippingRate","totalCharges","success","inventory","featureToUpdate","request6kFeatures","getFeaturesPageSize","isCommonRequest","createdManually","nextFeaturesPage","getNextPageToLoad","responseArray","oldFeatures","responseWithOldFeatures","allRelatedItemsCheck","neededParts","shouldUpdateNavigation","neededFeatureGroup","isVanityChild","isCabinetChild","isCountertop","isFaucetOrSink","isShowerHeadOrArm","isDoorOrShowerPan","appliancesParent","wallId","fridgeEnclosure","centerIslandCabinet","centerCountertop","edgeProfile","showerArm","responses","getFeatureFromTheBackendBySku","requestFirstSharedFeaturenames","featureGroupPartId","getFeatureBySku","response2","setRelatedGroups","setRelatedGroupsSearch","relatedGroupsSearch","toggleGalleryVisible","galleryVisible","galleryShowActiveFeature","setGalleryActiveImageIndex","galleryActiveImageIndex","setMaterialsPageSubSteps","subSteps","setMaterialsPageActiveSubStep","activeSubStep","toggleNotCompatibleView","showNotCompatibleView","toggleProductNoteEditorVisible","productNoteEditorVisible","setRowItems","rowItems","setMaterialsCanvasClass","materialsCanvasClass","pedestalSink","lightingFixture","showerWall","showerWallAccent","showerTubCombo","activeRelItem","COLOR","black","blackLight","blue","red_transparent","primary_transparent8","primary_transparent","active_disabled","active_transparent","SqftStore","viewGL","clickedEdgeButton","isShowSlabTool","isRegularMode","addSeamHistory","showMaterialsTutorial","materialsTutorialIsOpened","setMaterialsTutorialStep","materialsTutorialStep","setMaterialsTutorialFinished","materialsTutorialFinished","showMaterialsAgentTutorial","materialsAgentTutorialIsOpened","setMaterialsAgentTutorialFinished","materialsAgentTutorialFinished","showVisualizerTutorial","visualizerTutorialIsOpened","setVisualizerTutorialStep","visualizerTutorialStep","setVisualizerTutorialFinished","visualizerTutorialFinished","RenderFigures","isFilled","tl","tr","br","bl","defaultRadius","side","quadraticCurveTo","closePath","h","fullOval","lx","ty","by","magic","xMagic","yMagic","bezierCurveTo","arc","fillStyle","save","restore","scaleX","scaleY","lineColor","fillRect","innerX","innerY","innerW","innerH","centerX","centerY","radiusBig","radiusSmall","innerYTop","innerWTop","innerHTop","innerYBottom","innerWBottom","innerHBottom","centerXTop","centerYTop","centerYBottom","startPoint","strokeRect","drawArrow","context","fromX","fromY","toX","toY","drawRotatedArrow","cornerPointX","cornerPointY","midpoint","rotateDirectionPoint","arcTo","renderPolygon","firstPoint","renderPolygonArray","drawArrowsAround4points","prevPoint","nextPoint","afterNextPoint","offsetPoint1","offsetPoint2","midPoint2","drawArrowsAroundPoints","minArrowLength","renderHandle","showerScreen","showerHeadBundle","handShowerKit","tubSpout","bodySpray","diverterTrim","handShowerHolder","handShowerOnly","showerHose","showerSystem","showerTrimKit","valveTrim","wallUnion","shower_head_type","shower_hand_type","showerHeadType","fromPartId","arrayToDisable","arrayToEnable","canBeEnabled","showerType","setGroheFiltersOpened","filtersOpened","setGroheSimilarFeature","similarFeature","setGroheSimilarProductsOpened","similarProductsOpened","setGroheRequiredButNotIncludedFeature","requiredButNotIncludedFeature","setGroheFiltersSearchText","groheFiltersSearchText","setLastOpenedCategory","lastOpenedCategory","setGroheSubCategoryOpened","subCategoryOpened","setShowAddedToTheCartSuccess","showAddedToTheCartSuccess","setGroheActiveFeatureQuantity","groheActiveFeatureQuantity","setGroheShareButtonsOpened","groheShareButtonsOpened","setGroheSameColorActiveFeature","groheSameColorActiveFeature","setGroheSameColorSectionOpened","groheSameColorSectionOpened","setGroheSameColorCheckboxApplied","groheSameColorCheckboxApplied","setExisingTempId","exisingTempId","totalShapeCount","minAngle","maxAngle","marginFromShape","hovering","handlerHold","isPointsMovable","isRotatable","getAngleRotatedParts","rotatedAngleValue","baseConfiguration","isHovered","isActive","isPulsing","angleDirection","hoverShapeColor","redHoverShapeColor","fillColor","layout270","slabPos","staticCenterPoint","linesWithoutAngle","shapeSpacer","isSpacer","shapeEditable","shapeIntersections","shapeAutoShuffle","shapeMemory","shapeRender","colorSet","seamCutPoints","shapeParent","isContextMenuActive","labelsMenu","slabParentPartId","isPointsMoved","isResetSlabModePopupWasDisplayed","RIGHT","FlipDirection","rotateAngleParts","slabModeWaterfallSegmentId","originalPointsCoords","getFillColor","getDesign","getColorset","getIsPointsMovable","setType","setProperty","setId","setPartId","getFeatureNameById","isShapeUseTheSameFeatureColor","isSeamPiece","updateRelatedShapes","updateSeamShapes","setSlabParentPartId","setSlabModeCoreParentPartId","setSlabModeCoreParentId","setSlabModeWaterfallSegmentId","setColorSet","getColorSet","getOrGenerateNewShapeColorByFeatureId","relatedShapes","relatedShape","shapePieceId","shapePiece","updateSeamedShapesPosition","setPositionWithoutChange","setIsPointsChanged","addCrownMolding","setIsPointsMovable","getSize","resetMouseDown","isFromParams","thisShapeMeasurementPoints","getDepth","depth","setFillColor","green","alpha","setShape","setHovering","setHoveringOnlyShape","hoveringOnlyShape","getRotateAngleRectangle","rotateAnglePart","renderFrom","calculateRenderPosition","renderTo","renderFrom2","renderTo2","setSlabPosition","slabAbsolutePos","getSlabAbsolutePosition","canSnap","getAbsolutePosition","workspacePos","_pos","getSnappedPosition","getRegularPosition","getSlabPosition","isHoveringOnlyShape","setResetSlabModePopupWasDisplayed","getResetSlabModePopupWasDisplayed","addShapePieceId","restoreShapePieces","export","getTotalArea","isQuantityUnits","newFeature","relatedParentFeature","shouldChangeShapePartId","shouldChangeCabinetShapePartId","newParent","getNeededFeatureFromNavItems","featureRelatedFeatures","getFeatureRelatedFeatures","newShapeDbFeature","getCabinetSimilarFeatureFromAnotherColor","updateLineHovering","isAngleHovering","getHoverSegmentCorner","isCornerLineHovering","getPoints","getHoverLabel","labelOverlay","getHoverPointOnClick","isOverPointField","shouldIncludeBumpoutLines","linesWithBumpouts","getBumpoutLines","createLinesWithoutAngle","getLinesWithoutAnglePoints","getLinesWithoutAngle","lineCorners","getPointsCoords","setOriginalPointsCoords","getOriginalPointsCoords","getPointPosOnWorkspace","getOriginPointOnWorkspace","SHAPE_DIAMOND_LAYOUTS","shapeLayout","pointsOnWorkspace","anglesTotalArea","getCornersArea","getAnglesTotalArea","getEdgesAdditionalArea","getWaterfallToolAdditionalArea","getMiteredTotalArea","cornersAdditionalArea","getRectangle","basePoint1","basePoint2","norm","next","rect1","rect2","intersection","calculatePolygonClippingPolygonArea","getTotalLnft","getAttachedEdges","isWithWaterfallToolEdge","isWithPeninsulaUnderwrapEdge","waterfallOverlay","getResourceByLineId","getArea","getInnerCornerPoints","handleArrowInputIncrease","isNegative","basePoint","secondaryPoint","rotated90_1","rotated90_2","bottomLine","rotateAngleInputChange","moveShape","resetShapeSnappedGroup","updateShapeSnappedGroup","setAbsolutePosFromSnapPossibilities","setAbsolutePos","isMouseOverShape","wp","vertx","verty","vert2x","vert2y","pointDirection","pointFromX","pointFromY","prevState","rotPart","pnpolyArray","hideShapeOffsetInTheSlabMode","preventNegativeArea","restoreShapeOffsetInTheSlabMode","handleSlabPlaceholderIntersections","handlePlaceShapeOnTheLine","shiftKey","isShapeSelected","removeShapeFromSelection","addShapeToSelection","rememberShapePosition","setShapeToShapeOffset","setRotateAnglePartActive","deActivateRotateAngle","addSeamPieceVertical","addSeamPieceHorizontal","slabShapeOffset","getShapeOffset","initShapeOffset","hideAngleTooltip","angleTooltip","inputArrows","querySelectorAll","display","elem","parentNode","replaceChild","cloneNode","hideAngleTooltipArrows","inputArrowUp","inputArrowDown","clearInterval","pointsArray","reversePoints","reversedPoints","getPointCordsArray","lineIndex","setPosSlab","activateRotateAngle","isAngleRotatedPartsWithCorner","renderAngleCircle","inputSubmit","expandedSidebar","scrollTop","secondaryLineLength","oninput","focus","onkeydown","blur","onblur","holdStarter","holdActive","arrow","currentTarget","setInterval","deleteBumpout","setRotateAnglePartBaseConfiguration","basePointX","basePointX2","basePointY","basePointY2","baseOldX","baseOldY","baseOldX1","baseOldY1","widthDiff","rotated90_1Calc","rotated90_2Calc","anglePercentage","diffToMinus","pointToRotate1","pointToRotate2","getAngle","rotationCenterPoint","getRotationCentrePoint","rotated","rotated2","getOrientation","getNextLine","angleIsChanged","shouldSearchAmongLinesWithoutAngles","lineBefore","flip","flipDirection","degrees","aroundPoint","Right","count","changeCornerDirection","rotateShapeBumpoutPoints","rotateShapeRotatablePoints","bumpoutPointsKey","setRotationDegrees","rotationDegrees","removeActiveBacksplashByLine","getRandomInt","initEvents","getPriority","eventManager","resetState","reInitTitleEvents","restoreState","protect","isShapeHasIntersections","hasIntersections","renderAnglePartActive","rotateShape1","bgImageUrl","splitFilter","keysAndProps","prop","isObject","imagePathCache","imagePath","dev","pathPrefix","convertKeysToCamelCase","newObj","each","toCamel","build","destKey","ignore","playVideo","hideVideo","$guide","guide","pause","getIntroVideo","exportCanvasAsPNG","fileName","MIME_TYPE","imgURL","dlLink","downloadurl","monads","ifNotNull","notNullCallback","isEmail","isZip","zip","isPhoneNumber","region","phoneUtil","PhoneNumberUtil","getInstance","parsedPhone","isPossibleNumber","isValidNumberForRegion","getPhoneFormatted","formatInOriginalFormat","getUserPhoneSplitted","oldCountry","googlePhouneUtilInstance","allRegions","getSupportedRegions","phoneCountry","regionCode","dialCode","getCountryCode","iso2","getNationalNumber","phoneSplitted","parseUserResponse","newUserInfo","lastName","isNew","password","parseShippingAndBillingResponse","billingAddress","billingSameAsShipping","address2","getValidationErrors","currentValue","hasErrors","errorsObject","textSubStringEllipsis","_checkNetworkErrorMessage","renderMessagePopup","retryConnectionFunction","closeButtonCallback","afterContractSignCallback","closeMessageBox","needContractSignDocument","setAfterContractSignCallback","newStyles","renderAccountNotActivatedErrorPopup","resendActivationEmail","renderConfirmPopup","tag","confirmPopupTag","orderCompletePopupVisible","toggleShowMobileQuotes","showMobileQuotes","toggleShowAllQuotesCartItemsList","showAllQuotesCartItemsList","getMinimumChargeCartItem","fromCartItem","onlyMinimum","newDbFeature","costplus","minCartItem","setCartFooterActiveButtonIndex","cartFooterActiveButtonIndex","setCartItemEditFeature","cartItemEditFeature","setLookRemovedCartItems","lookRemovedCartItems","setCItemsAddedToParentCart","setSureTax","setSureTaxLoading","sureTaxLoading","setDeliveryList","clearCartAndStartOver","fullClear","setActiveQuoteIndex","setQuotes","setManualTax","manualTax","LoadingSpinner","Cabinet","partThumbnailSize","crownMolding","topHandle","topCabinetShadow","bottomCabinetShadow","withHidden","hideWithoutFeatures","filterRelatedItem","getWizardGroupName","allWizardSelectedValues","newValues","actionPayload","conflictingWizardSteps","confObject","nextStepKey","testWizG","selectedWizardValue","currentStepGroups","stepWizGroup","selectedWizardGroup","wG","mG","checkFeatureGroupForOpposite","erasedValues","newWizardStep","updated","newWizGroup","parseWizardData","getFeatureGroupFromWizardSteps","allItems","getUpdatedWizardId","mainResponse","parseOnly","newVisualizerType","wizardItemIndex","fixWizardItem","oldWizardItemId","withToolVersion","commonName","existingSubscription","hasSubscriptionForRoom","getVisualizerTypeFromSubscription","PrintDocumentContext","createContext","leftImagePos","inEnabled","isCenterButtonRightPartHovered","isCenterButtonLeftPartHovered","rightPartZoomedShapeId","leftPartZoomedShapeId","isSlabPlaceHolderPresent","measurementPoints","centerButtonRightPart","centerButtonLeftPart","getPos","setEnabled","setSlabPlaceHolderPresent","getRightPartWidth","initRightPart","initLeftPart","centerButton","beforeRenderCenterButtonRightPart","beforeRenderCenterButtonLeftPart","initSlabWorkspaceEvents","renderSlabLeftPartWrapper","renderSlabRightPartWrapper","disableSlabImages","eyeballButtonLeftPartClick","isOverRightPart","eyeballButtonRightPartClick","moveSlabWorkspace","shapesIds","closestHigherNumber","zoomToSlabShape","zoomToShape","rpw","isFullRender","renderSlabRightPart","isMeasurementVisibleInSlabMode","renderMeasurementsAroundSnappedShapes","foundGroup","changeWizardToNextStep","getNavItems","withPlaceholders","checkFeatureGroup","onSQFTLoadPrepareData","activeQuote","loadData","currentLayout","onSQFTLoadImport","remove","setMeasureUnit","rememberConfig","manualCalculate","manualCalculateImport","updateManualCalculateRows","getInitialManualCalcRows","closeSQFTTool","redirectToPage","shouldChangeWizardToNextStep","changeWizardStepRoute","isSQFTinUrl","getNextNotCheckedStep","withGroupIds","getWizardGroupsFromTheWizard","allNavItems","navItemsFromWizardGroup","newWizardGroupId","wizardStep","newNavItem","getUnderlaymentFeature","underlaymentFeatureGroup","underlaymentFeaure","Part","isParent","realFeaturesReceived","nextFeaturesPageToLoad","featureGroupVisible","featureGroupEnabled","selectedFeaturesHistory","filtersReceived","condValue","applianceThumbnail","cabinetThumbnail","centerIslandThumbnail","countertopGroupThumbnail","SmallLayoutShadow","DISCOUNT_MAIN_TYPES","freeFill","subTotal","nested","finance","deposit","percent","DISCOUNT_MODES","and","or","discountInterFace","DISCOUNT_SECTION_TYPES","DISCOUNT_FINANCE_CELLS","financePercentage","financeMonths","financeSalesPercentage","isRidged","isSubTotal","uuId","nestedParent","discountType","financeOptions","multiSelections","approveOptions","discountSectionsInterface","port","baseNewImagesPath","noInternetMode","getPriceWithIncluded","getShowPrice","forTotal","getMarkUpPrice","markUpValue","markUpType","percentCost","retail","markUpString","isUpdatedInJobBoard","addNewQuote","updateQuote","updatedQuote","LockedView","getQuoteEnabled","enableQuote","onClick","handleUserLoginClick","MobileMenuSelect","handleParentItemClick","parentItem","onParentItemClick","showRelatedItems","handleToggleDropdown","setState","scrollHeight","handleBackClick","activePart","handleRelatedItemClick","onSubPartClick","toggle","activeSubPart","handleWrapperBlur","handlePrevClick","prevItem","currentChildIndex","childItem","currentParentIndex","parentItems","prevParentItem","lastSubPart","handleNextClick","nextItem","nextParentItem","desktop","setShowName","nextProps","dropDownStyles","data-parent","func","instanceOf","defaultProps","setActivePartFilterValues","filterValuesArray","availableCountertopGroupFilters","allFilterGroups","getAvailableFiltersForNavItems","featureFilters","featureOptions","fOptions","filterGroupFromAll","currentFilterValues","getAvailableFiltersForReceivedFilters","getAvailableFilters","checkIfNeedToReceiveFeaturesIfFiltersApplied","currentParent","onScroll","arrayOfNeededFiltersToReceive","filterObj","filterIdsReceived","filterIds","existingFiltersRequest","filtersReceivedObject","allFeaturesWithFiltersReceived","getFeaturesFromBackendWithFilters","counterTopFiltersIdsReceived","existingFilterObject","featuresReceived","featuresCountToReceive","getSelectedFiltersLength","shopNavItems","getFeatureGroupFilters","filtersRequested","featureGroupFiltersResponse","updateFiltersCount","availableFilters","getHardCodedFilterGroups","setLanguage","setActiveTheme","setAgreeEmailCheckbox","setInitialVisualizerType","initialVisualizerType","setNetworkConnection","networkConnection","allFeaturesWereLoaded","setAllowRouting","allowRouting","setAllowMainLoading","allowMainLoading","setActionAfterVisualizerTypeIsChanged","actionAfterRoomChange","setVisualizerIsChanging","visualizerIsChanging","getQuoteInfo","forLocalStorage","nextVisualizerType","quoteTotalPrice","getQuoteVisualizerType","allowVisualizerSwitching","getImagePromiseFromLayout","leadFeatures","getActiveNames","getRoomImageFromQtCategory","isCreatedInSQFT","isVisibleInSQFT","indexToUpdate","currentQuoteObject","newQuotes","q","qIndex","setNewActiveQuote","newQuote","switchToNewVisualizerType","switchToWizardItem","deleteCartItemFromSQFTCalcData","sqftIds","cItemQuote","prepareSQFTData","sqftCalcData","updateQuoteWithSQFTData","deleteCartItemsThatAreMissingInSQFTCalcData","nvert","testx","testy","isPointInsidePolygonArray","reduxState","qtState","switcherTitle","roomNavItem","ACTIVE_ROOM_TYPE","getRoomNameInQuote","getQtCategoryName","roomGroup","getRoomGroupById","getQuoteByRoomName","isQuoteByQTCatNameEqualToCurrentQuote","newQuoteIndex","loadQuoteByQtCatName","loadActiveQuoteToSQFT","roomName","quoteByQtCatName","quoteByRoomName","saveSQFTDataToQuote","createQuoteIfNotExistOrUpdateCurrent","updateActiveQuoteWithSQFTData","addRoomToCart","getSQFTIdsFromAllParentLists","parentsLists","SQFTIds","parentsList","sqftFeatures","sqftFeature","getSQFTIdsFromSQFTCalcData","deleteCartItemsThatAreMissingInParentLists","SQFTCalcData","sqftQuantities","updatedQuantities","sum","currentQtCategoryInQuotes","getQuoteForCurrentQtCatName","createQuoteFromSqftCalcData","isManualCalculateNotEmpty","createNewQuoteFromCategory","getRoomCartItemForCategoryName","roomsFeatureGroup","ShowerCommon","isShowerCommonGroup","setShowerHeadType","showerSize","featureGroupId","modulePartsList","lowerCasedVisualizerType","existingAddedCartItem","getRoomNameToCompare","roomFg","roomFeatureNavItem","roomFeature","getCurrentQuoteRoomName","withVisualizerCheck","quoteRoomCartItem","qtCategoryName","fgNavItems","visualizerRoomName","roomsNavItems","getQtCategoryFromQuoteRoomName","updateQuoteRoomsForCartItems","setNewRoomIndex","shouldCreateNewQuotes","createdRoomCartItems","withCreated","existingCartRoom","newActiveQuoteIndex","newRoomCartItem","updateSQFTCreatedStatusForQuotes","quoteRoomName","qtCat","needToLowerCaseName","checkCatName","customLowerCasedName","originalLowerCasedName","checkIfNeedToSetNewCategory","getOtherRoomCartItemThatIsAddedToCurrentQuote","addedRoom","addNewQuoteWithNewRoomCartItem","oldRoomCartItem","isCabinetsMode","sqftFromFeatureParentGroup","relatedParentParentGroup","getEdgeFilterByValue","edgeFeatureId","getEdgeByFeatureId","parseNumberFromString","fractionMatch","whole","numberMatch","miterEdgeFeature","heightFromFeatureName","getMiterEdgeFeature","getMiterUnderwrap","getBumpoutFeature","bumpoutFeatureGroup","isFeatureUnitUseEach","createApplianceOnTheWorkspace","itemName","iconFullName","svg","xml","XMLSerializer","serializeToString","svg64","btoa","getDbFeatureName","ActualDisplayedName","getSortedFeatures","widthA","getActivePartsCounts","getAvailableLayouts","getShowOtherLayouts","showOtherLayouts","showSmallDesignForClients","showSmallDesignFromDashboard","getAvailableRoomScenes","availableRoomScenes","getAllFeatures","scrolledVerticalToTheEnd","ceilScrollHeight","floorScrollHeight","ceilScrollTop","floorScrollTop","ceilClientHeight","floorClientHeight","getSideBarSubParts","getSQFTGroupFromUrl","getIsSFTAreaGroup","isSFTAreaGroupInUrl","getSQFTGroup","getPartIdsFromMenuOpened","partIds","getSearchTextFromMenuOpened","getItemClickCallbackForPartId","itemClickCallback","setHighlighting","setSelectedFeature","Appliance","stove","fridgeEnclosureHandle","loadCommon","AccessoryCommon","showerCondition","accessoriesParent","otherFeatureGroup","soapDish","grabBar","largeCornerSeat","seats","newPosition","getAvailableWizardList","qtCatProperties","getWizardSubParts","getFeatureGroupDescription","customDescription","getGroupDescription","getLixilRequiredNotIncludedFeatures","lixilRequiredNotIncluded","formatStrToUrl","unitsToCountQuantity","getCartItemsCount","forceCheckAllQuantitties","featureUnit","getSubTotalPrice","withoutCurrent","allDiscounts","currentDiscount","disSection","customDiscount","section","sec","categoryId","customDiscounts","calculateCellValue","numberOfMonths","finalPrice","fixedDeposit","rate","nper","pv","cellValue","PMT","getNextCustomDiscountOrder","fromDiscount","shouldDisplayDiscount","selectedOption","getDepositDiscount","depositDiscount","priceTaken","getPercentage","getDepositAmount","selectedDiscounts","mapDispatchToProps","withRouter","groheState","history","withAddToCart","updateLookCartItemsNew","updateRemovedCartItems","newRemovedCartItems","existingIndex","removedCartItem","currentCartItem","oldExistingCartItem","positionKey","itemToAdd","changeUrl","directChange","needToBeUpdated","toiletEnabled","featureToClick","endsWith","searchString","subjectString","lastIndex","serverConfig","__hideFeatures","_get","signal","_post","post","headers","__urlBase","_getUrlBase","addUrlMode","baseUrl","hardcodeResponsesFolder","JsonApi","saveUserKiosk","saveQuoteKiosk","encodedUserId","quoteData","saveSchedule","json","getKioskApiResponse","reject","token","encodedCustomerId","forVisualizerType","allResponse","localUrl","remoteUrl","sharedFeatureNames","skus","Ids","fixedGroupName","fixGroupName","requestUrl","searchGroupName","oldVersion","fixFeaturesResponse","featureLocal","featuresPerGroupAmount","getKioskData","saveData","forceNew","otherData","additionalInfo","getRawKioskData","kioskData","KioskApp","PostMessage","customerId","postString","nextStep","showWizardStepDoneCheckMark","getSkippedWizardValues","skippedValue","setWizardValuesFromCartItems","shouldUpdate","similarSelectedWizardStep","changeRoute","foundWizardSelectedObject","wizSelObject","urlStepNumber","nextUrl","currentHash","useChangeWizardStepRoute","useHistory","useRouteMatch","propsWizardItem","currentWizardIndex","prevEnabledWizard","nextEnabledWizard","stepUrl","withEdge","withBacksplash","withWall","withBumpout","isWithUnderlayment","isWithWaterfallEdge","isWithFakeEdge","withId","attachedHandleId","attachedHandleUrl","attachedCrownMoldingFeatureId","attachedCrownMoldingUrl","backsplashFeatureId","backsplashHeight","backsplashName","backsplashType","attachedItems","isWithCrownMolding","isWithEndCap","movePointDistance","angleLinePoints","slabModeSkipMiteredEdgeCreation","isHiddenForever","seamCutPoint","aroundLineColor","cornerGutterSize","outlineWidth","outlineMargin","horizontalOutlineMargin","lineThickness","overlayImportData","lineCornerImportData","overlayMiteredData","overlayUnderlaymentData","waterfallImportData","titleOverlay","staticOffset","blink","lineAttachmentsComposite","getAttachedShape","isWithEdge","isWithBacksplash","isWithHandle","isWithMiteredPrev","isWithMiterEdge","isWithWaterfallEdgeFeature","getAttachedFeature","shouldExcludePoints","getWithId","setWithId","setBacksplashHeight","attachedToResource","updateAttachedToLineResource","renderBacksplashText","getHandleId","setHandleId","getHandle3dURL","setHandle3dURL","getCrownMolding3dURL","setCrownMolding3dURL","getCrownMoldingFeatureId","setCrownMoldingFeatureId","getBacksplashFeatureId","updateAdditionalShapeFeature","setStateParams","getPointsFeatures","getAttachedItems","isAnyItemsAttached","attachedItemKey","setTutotialImage","tutorialImage","setFakeEdge","setHiddenForever","sqftMode","xCord","yCord","getLineField","fieldSquares","squeezeRatio","setMouseOverLine","field","getMouseOverLineV2","getLineBordersArrayV2","getLineHovering","addFreeSeam","mousePosOnShape","lineStart","lineEnd","getClosestPointOnLine","isCabinet","moveLine","updateCornerHoverState","underlaymentOverlay","waterfallData","existing","foundFrom","foundTo","createMiteredOverlay","addMiteredSection","createUnderlaymentOverlay","labelText","temp","addWaterfallToLine","renderWaterfallText","historyPointFeatures","moveBumpout","moveMitered","nextLine","updateShapeWaterfallLength","updateMiteredLength","updateUnderlaymentLength","getLineDirectionV2","getPairedLines","pairedLines","prevLineStep2","nextLineStep2","prevLineStep3","getLineDistance","getBumpoutTotalHeight","getBiggestXPoint","getBiggestYPoint","getSmallestXPoint","getSmallestYPoint","getSmallestAndBiggestPointWithCorners","toCornerLength","getArcLength","fromCornerLength","toLinePoint","fromLinePoint","biggestLinePoint","smallestLinePoint","toCornerMargin","fromCornerMargin","getLinePointsWithoutCorners","toAngleLength","fromAngleLength","toPoint","fromPosition","toPosition","testLine","testLineFromPosition","testLineToPosition","intersections","toOnly","renderLineBorder","drawBumpoutLine","renderArcLength","renderAngle","nextLineRenderTo","radiusMultiplier","marginFrom","renderLineOverlay","highLightBorder","fromPointWithIndent","toPointWithIndent","drawResizeCursor","setLinePoints","marginTo","prevLineRenderFrom","drawLineFrom","drawLineTo","drawLineBumpoutPoints","bumpoutInOrOut","setPointsOutlineIntersection","prevLineFrom","nextLineTo","fromBorderIntersectionPoint","getBorderFromIntersection","fromOutlineIntersectionPoint","getOutlineFromIntersection","isWithAngle","isWithCorner","closestIntersectionPoint","toBorderIntersectionPoint","getBorderToIntersection","toOutlineIntersectionPoint","getOutlineToIntersection","renderCircle","getOutlineIntersectionPointWithNextTLine","pointOnTheLine","pointOnTheNextLine","nextLineToPointField","nextLineFromPointField","prevLineToPointField","prevLineFromPointField","pointOnTheLineBeforeFrom","pointOnThePrevLine","drawLine","border","drawCorner","interSectionPoint","drawAngle","lineCap","getOutlineStrokeStyle","getOutlineHoverStrokeStyle","getAnglePoints","cord1","cord2","cord3","cord4","get45CornerLegDistanceScaled","setMidpointOffset","pointName","deleteMitered","createLineLength","deleteUnderlayment","deleteWaterfallTool","attachedItemsKey","removeLineText","deleteSlabBacksplashByLine","deleteResourceAttachedTo","addEdgeToLine","renderEdgeText","addBacksplashToLine","addCrownMoldingToLine","crownMoldingName","addEndCapToLine","endCapName","addBumpoutToLine","addMiteredToLine","addUnderlaymentToLine","createWaterfallOverlay","createSlabModeWaterfallShapes","addPeninsulaUnderwrapToLine","createPeninsulaUnderwrapOverlay","renderLineField","tutorial","highLightedByTutorial","isHighlightedLightOn","isBumpoutHighlighted","isMiteredHighlighted","canBeMoved","isMovable","pointWasMoved","miteredFeatureId","fillStyleEdge","fillStyleWhite","fillStyleBlack","fillStyleDelete","fillStyleBlue","radiusFillStyle","translateX","translateY","pointRadiusOverlay","setPointWasChangedInRegularMode","shouldResetSlabModePopupOnPointMoveBeDisplayed","renderResetSeamPopup","renderAngleArc","exportAndImportProperties","getMiteredFeatureId","setMiteredFeatureId","setPointWasChanged","setPointWasMoved","setTranslates","movePosition","canPointBeMoved","allowedNavItems","allowedNavItemsForMovingPoint","isLineWithBumpout","isPrevLineWithBumpout","miteredPoints","addEdgeToPoint","revertPositionIfHasIntersections","exportPoint","importPoint","xPos","yPos","useFieldWidth","getPointCords","isFitSize","isWithoutMitered","rememberPos","backupX","backupY","restorePos","marginX","marginY","pointDiff","pos2","shouldHighLightRadius","isNotHighlighted","renderCircleLayout","renderSmallCircleLayout","renderArrowCircleLayout","renderBlankLayout","renderHighlightRadiusLayout","renderRotateAngleLayout","renderWhitePointLayout","renderGrayPointLayoutV2","arcRadius","renderGrayPointLayout","renderArcLayoutOld","sqftSlabManager","resetBacksplashes","getSlabPlaceHolderShapes","hideShapeOffset","reInitShapeOffset","emit","animateShapeTransition","iconPlusGreen","iconPlusBlack","iconPlusBlue","iconplusPurple","objectFlipVertical","objectFlipHorizontal","iconGreenPlus32","iconGreenClip","iconHeight","iconLength","iconLink","iconThickness","iconEyeball","iconCursorPointer","iconLibrary","iconUpload","iconImage","showSlabTool","setActiveSlabId","activeSlabId","setActiveSlabUrl","activeSlabUrl","setActiveStep","setSlabSearchText","setSlabAspectRatio","slabAspectRatio","setSlabImageType","slabImageType","setSlabImageWidth","setSlabImageHeight","setCropperData","cropperData","addSqftCroppedSlabImage","croppedSlabImage","setSqftSlabToolVisited","isSlabToolVisited","addRoomWithVisitedSlabTool","setPricePerArea","pricePerArea","setMeasurementVisibleInSlabMode","setIsSizeValidationFailed","isSizeValidationFailed","setIsSlabPricingEnabled","replacementTubFixture","WithOverlay","popupClassName","overlayElement","fadeIn","hideOverlay","closePopup","fadeOut","any","seg","segCorner","resourceType","resourceId","addResourceToStore","shouldShowEyeBall","attachedToHovered","attachedToExisting","prepareResource","attachResourceToLine","createAttachedResourceInStore","shouldChangeExisting","newSection","resourceActionMap","addEdgeToCornerLine","addBacksplashToCornerLine","addSection","addMiteredToCornerLine","setResources","resources","resource","changeResource","deleteResource","setSelectedPartIds","selectedPartIds","UserLoginButton","userPopupType","handleLoginClick","toggleMobileButton","userLogoutActive","handleDropdownWrapperBlur","handleLogOutButtonClick","logout","saveQuoteAfterLogin","toggleShowAssignQuotePopup","allowClickLeadCapturePopup","SQFTResourceController","resourceName","removeResource","searchedId","exportedData","findLongestLine","longestLine","getDistanceLength","getLineCrownMoldingPoints","linePointsIds","getDiagonalPointsForTheLine","getLineBordersArrayV1","outlineDistance","pointField1","pointField2","pointOnTheLine2","parallelPoint4","getBordersOfTwoPoints","lineBorderArray","virtualLines","borderPointKey","currentLineBorderPoint","nextLineBorderPoint","virtualLine","addEdgeToTheLines","lineNumbers","addFakeEdgeToLines","setLineParams","shapeLine","updateWaterfallLength","setNewLineWidth","createSimpleLinesFromPoints","initAllLineLength","hideAllLineLength","findCollinearLine","searchLine","roundedSearchLinePoints","roundedTestPoints","isHorizontalDirection","isVerticalDirection","isWesternHemisphere","isEasternHemisphere","adjustedLines","legLengthTo","calculateLeg","legLengthFrom","linePosTo","linePointTo","linePosFrom","linePointFrom","cloneLine","newLinePosFrom","newLinePointFrom","legLength","newLinePosTo","newLinePointTo","Layer","fromS3","splitWallPartIds","shouldCheckAdditionalPartsConditions","WallCommon","splitWall","getSplitWallType","actions","toggleFilterArrayValue","FilterSwitchers","replaceFilterArrayValue","setActiveFilterValue","setDefaultFilterValue","setDefaultFilterArrayValue","availableFilterValues","setAvailableFiltersValues","filterGroupName","isRebath","activeFilterValueId","appliedFilter","dbFeaturesArray","setNextPage","loadedPage","fromSearch","edgeGroup","edgeValue","countertopFeature","addFilterArrayValue","FilterSelection","removeFilterSelection","getAvailableFilterValues","featuresToFind","moduleParts","FeatureThumbnail","isLoading","setThumbnailUrl","smallerSizeTried","setSmallerSizeTried","baseThumbnail","alt","onLoad","onError","featureIsMatchingDisplayLogic","displayLogic","displayRules","currentQuoteCartItems","visibleUpdated","rule","entityVal","entityId","countertopCount","matchingCartItem","entVal","ruleVal","comparison","isMatching","propertyName","originalValue","finalValue","inCatProperties","inCatFabCost","inCatCost","inCatPrice","getOldHidePropertyName","forPage","hidePropertyName","toolSettings","checkProperty","toolSettingsObject","tool","setFabricatorFeatureCategoriesProperties","fabricatorFeatureCategories","fabricatorFeatureCategoriesPropertiesAreSet","qtCategoriesList","inCat","currentFabricatorFeatureCategory","fabricatorFeatureCategoryId","inCatName","bvSetting","setting","kvSetting","hideFromBathroomVisualizer","enableVisualizer","hideFromBVQT","enableQuotingTool","hideFromKitchenVisualizer","hideFromFrontEnd","fCat","hideFromBV","hideFromKV","hideFromKVQT","forActiveQTCategory","SuccessNotification","isHiding","showQuoteSavedNotification","saveQuoteTimeoutId","createCanvas","backCtx","finishDraw","errorImages","backgroundLayers","quality","useNewEnhance","maxHeight","canvasObject1","canvasObject3","canvasObject2","globalCompositeOperation","imageObject","cropCoords","layerWidth","layerHeight","layerDimensions","dim","polygonArray","loadedImage","getSubscriptionThumbnail","fabricatorSubscriptions","subscription","getBackgroundLayers","showPlaceHolders","bvConfig","showPlaceholders","getLayers","backGroundLayers","imagesPromise","cnt","newLayoutType","Background","getIsBathroom","CountertopSwitchers","setToggledByUserProperty","currentCategoryPartId","COUNTERTOPGROUPS","applyTo","newPartId","toggleSwitchedOffByUser","neededSubPart","getUpdatedCountertopSwitcherButtons","countertopsApplyToPartId","countertopsApplyTo2","existingIndex2","setToggleOffProperies","toggleCountertopsApplyTo","getButtonName","getValueText","buttonIsDisabled","renderDropDown","selectItems","withCheckboxes","valueText","disabledButton","showAsDropdown","isMaterials","updateCountertopSwitcherButtons","currentGroupPartId","propsCountertopsApplyTo","setApplyTo","typeGroup","filterName","tileFilterValue","navigationItemPart","passedArrayApplyTo","clickedPartId","currentPartId","isNewKitchen","isNewKitchenBacksplash","featureName2","manufacturerFilterGroup","featureManValues","withSameManufacturerFeatures","currentHeight","getCurrentActiveFeatureType","sameHeight","getFeatureBacksplashType","searchFeaturesByName","turnOffToggles","FiltersClass","blurClickSet","activeFilterId","handleSearchInputChange","filterVisible","Layout41","SLAT_WALL_POSITIONS","setEmployeesList","setAlreadyRegisteredUserInfo","alreadyRegisteredUserInfo","setLeadCaptureClickCount","leadCaptureClickCount","setUserPopupContent","userPopupContent","setUserTwoFa","userTwoFa","setUserOptIn","optIn","crossProduct2D","vectorA","vectorB","findClosestIntersectingPointAndLine","referenceLine","perpendicularVector","getPerpendicularMidpointVector","intersectionPointsAndLines","intersectionPoint","getClosestLineAndIntersectionPoint","convertShapesToPolygons","convertShapeToPolygon","convertFromPolygon","areCollinear","getSegmentIntersectionPoint","isPointOnSegment","p1","p2","p3","p4","seg1","seg2","sortedY1","sortedY2","sortedX1","sortedX2","getOverlapLength","findLowestRightmostPoint","resultPoint","hypotenuse","lineVec","lineLen","lineUnitVec","mouseVec","dotProduct","clampedDotProduct","coordinates","findNearestPoint","targetPoint","nearestPoint","Infinity","getThePositionOfAPointToTheLeftOrRightOfALine","linePoint1","linePoint2","searchedPoint","ax","ay","bx","crossProduct","onSegment","allowOverlap","d1","d2","d3","d4","closestIntersectionPointAndLine","roundShapesPoints","cross","roundPoint","polygons","coord","union","a1","b1","c1","a2","b2","c2","determinant","findTopLeftPoint","topLeft","adjustPointsRelativeToTopLeft","sortPointsClockwise","topRight","bottomLeft","bottomRight","roundCoordinate","precision","factor","BodyPanelRadio","radioClick","refreshItems","forceUpdate","quotingTool","isToggle","canvasCount","firstCat","wizardAllObject","stepsState","currentActiveCategory","sPart","changeQTRoutePath","relatedItemIndex","subPartItem","showContractSigning","contractSignPostSignature","contractSignData","showSignaturePad","setContractsValues","contractId","pageIndex","fieldIndex","setContractSigningStep","setContractDocumentForJob","documentData","setContractBlob","contractBlob","restoreContractValues","setContractsList","getContracts","contractsReceived","useContractSigning","getContractDocuments","savedContracts","newOrderedList","contractIndex","getSelectedContracts","getActiveContract","allContractsList","withoutContractsCheck","setContractBlobs","receiptPagesLength","isOfflineFirstLoad","pagesCount","updatedContractsList","pagesFrom","pagesTo","useDocument","documentWithoutTagsUrl","documentUrl","blobUrl","fetch","responseFetch","totalPages","globalContractPage","getAllContractsValues","selectedContracts","activeContract","activeContractPage","changeContractsPage","newPage","changeContext","receiptPages","allValues","showPage","fixVisualizerType","neededSubscriptionName","getToolVersionByVisualizerType","disableLoader","wizardIsActiveObject","roomFeatureGroup","newActiveFeature","advancedQuotingState","showAdvancedQuoting","nextWizard","toolVersionToCheck","quoteCartItems","shouldSwitchVisualizer","hasSubscription","createNewQuoteAfterVisualizerChange","newRoomName","needToAddRoomToCart","replaceIncorrectSymbols","getPercentAmount","fromTotal","forCartItems","totalArray","featureCurrency","existingGroup","resetEvents","currentCursorOwner","clearRotateAngles","drawFinish","workspace_onClick","tookAction","bumpoutLine","getTextBoxes","initDraw","drawShape","isJustCreated","setIsJustCreated","box","mixin","movable","cornerLine","miteredPoint","deletePoint","resetHoveredPoint","lineWithTheLabel","activeMenu","cloneShape","cloneMovableImage","crown","createSpacer","isBoxActive","FeatureWizardSteps","setFeatureWizardStep","featureWizardStep","availableSteps","exitFeatureWizard","allStepsCompleted","selectedValueId","selectedItemIsLocked","showFeatureWizard","toggleWizardFilterSelection","enableFeatureWizard","isLastStep","nextStepIsLocked","lastStepIsDisabled","allProducts","finishClicked","wizardButton","prevStep","buttonName","getFilterDisplayName","showAssignQuotePopup","assignQuotePopupSaveButtons","setAssignQuotePopupSearchText","assignQuotePopupSearchText","setAssignQuotePopupEmployee","setAssignQuotePopupCustomer","setAssignQuotePopupSuccessText","assignQuotePopupSuccessText","setAssignQuoteCloneMode","assignQuoteCloneMode","setAssignQuoteOfflineData","offlineData","doNotZoomPartIds","shouldZoomPartId","shouldZoomToTheBottom","getCorrectedCenter","zoomFactor","zoomToFeature","zoomToPostion","closeOpenedCategory","clickOnFeature","lookUrl","hoveredLayer","featureExistInQuotingTool","allowFeatureScreen","shouldZoomCanvas","tapZoomFactor","zoomFeature","togglePriceWorksheetOpened","priceWorksheetOpened","setCustomAddedDiscounts","setFinancePercentage","setAllFinanceOptionsPopupVisible","allFinanceOptionsPopupVisible","setFinanceCellsVisible","financeCellsVisible","CabinetSwitchers","toggleCabinetsApplyTo","getCabinetsApplyTo","getSetCabinetsApplyTo","cabinetsApplyToPartId","CABINETGROUPS","getCabinetGroups","getFeatureDoorStyleFilter","doorStyleFilterGroup","neededPartId","doorStyles","featureDoorStyles","featureMaterials","ds","mat","applyAllCabinets","propsCabinetsApplyTo","PartCommon","originalName","checkedCatName","customGroupName","_lowercaseCustomDisplayName","_lowercaseSharedFeatureName","getRealFeaturesReceivedProperty","currentLayoutAbbr","collectionFg","fGroup","featureCollectionValue","featureCollectionValueObject","_colorName","getFeaturesFromLayout","currentLayoutFeatures","bvPreset","layout_type","stringifiedLayout","checkAutoAddToCart","setRoomNotInVisualizerProperty","clickable","shouldLoadInDifferentGroups","refactoredArray","Exception","NotImplementedBaseClass","arrayToFilter","getFeaturesBySearchTextLixil","_searchText","isPartName","isFilterName","filterGroupIds","filterIndex","fgv","collectionFilterGroup","matchByName","partsToo","neededId","inParts","arrayToFind","featureParts","matchingItem","_partNameWithoutSpaces","groupId","matchingFeatureExist","currentColorFilterValue","getFeatureByPartName","prevFeatureMatchingName","foundFinally","setCustomConfigurationsAfter","layoutToSet","addFromPageSize","uniqueLayoutsTypes","layoutNumber","activeFeatures","layersBinding","featuresHistory","createNavItems","returnNavItemsFromFeatures","propsFilterGroups","_useCurrency","_relatedFeaturesSet","loadRelatedFeatures","NavigationRequests","getBvPartFeatures","navigationItem","callBack","itemPart","_isMounted","getRelatedItemFeatures","checkIfAllFeaturesReceived","materialsPage","showerComboParent","centerIslandParent","countertopParent","applianceParent","isWallItem","vanityAccent","cabinet","checkIfAllFiltersReceived","changeLayout","firstChange","relatedArray","countertopPageChanges","getSubPartLayoutPageChanges","backsplashPageChanges","requestNeeded","requestNameNeeded","getNeeededKvPartsOnLayoutChange","finishChangeLayout","getBvSceneParts","oldType","currentState","selectLayout","refreshCB","childName","nextLayoutFeaturesPage","maxCurrentFeaturesPage","currentActiveName","neededLayoutName","relatedPartsToReceive","relatedPartsToReceiveForLayouts","pageChanges","nextLayoutName","featuresSize","searchName","WithClickCount","newLeadCount","clickLeadCount","LookAllWallsRadioButton","showColumnCheckbox","viewType","showTutorialToolTip","checked","allWallsCheckboxClick","control","disableRipple","onChange","MessageBox","getMessage","msgIndex","bClass","hClass","messageClass","buttonsElements","MessageBoxButton","sqftShapeIntersectionsManager","resetShapesIntersections","setOverlappedWithShapeIds","getTwoShapesIntersections","addOverlappedWithShape","checkIfShapeContainsAnother","logShapeFeatureIds","overlappedWithShapeIds","logSnappedShapeGroups","intersectedShape","showSlabPlaceHolderErrorMessage","slabPlaceHolderShapes","slabPlaceHolderShape","DesktopNavigationCommon","handleContextMenuClick","menuItem","showNavigation","clickedParent","clickedButton","isBacksplash","bType","backsplashSubPart","applyBacksplash","getFeatureByBacksplashType","parentNavigationItem","subMenuParent","contextMenuOpen","ponyWallAndLeftWallClick","contentType","triggerOpenNavigationMenu","setNewActiveFeature","clickFeature","subMenuText","handleNavTabClick","closeNavigation","navigationIsClosing","setContentType","openLayoutMenu","_menuOpened","activeDefaultPreset","showFilterSelection","showerWallWizardGroupsSelected","off","overlayClick","navClick","lockClick","userPopupClick","handleHeaderBackClick","resetNavigation","updateSideBar","updateSidebarItems","handleSubPartClick","childNavigationItem","subItemPart","childNavigationItemPartId","scrollAsideToMenuItem","rememberWallsSelection","setActivePartRelatedItemIndex","setNavigationFilterIfTheChildWasChanged","menuItemText","child","needToScroll","handleSubPartHover","renderGreenLayerByZindex","scrollToDefault","getElementsByClassName","handleMobileSelectClick","navigationItemClickCommon","useFilters","contentDesign","handleLayoutItemClick","contentRoom","contentLoading","contentDesignBody","onItemClick","navWidth","toggleApplyWallsCheckbox","handleSubTypeClick","showMenu","setStateActiveFeature","contentDesignWizard","getWizardGroupsByPartId","setWizardGroups","setWizardLockedItem","wizardStepIndex","onBackClick","onSubTypeClick","onSubPartHover","activeChildNavigationItem","presets","checkedForLockedPresets","presetIsLocked","handleDefaultPresetClick","bv_screen","navigationMenuButtons","availableNavButtons","tabClassName","navWrapper","_componentDidMount","_componentWillReceiveProps","setHoveredLayer","setDemoPointClicked","NavigationFiltersSteps","wizardButtons","nextStepIndex","lastStep","commonView","mounted","currentActiveIndex","firstStepIsActive","lastStepIsActive","isCountertopWizard","buttonIcon","MobileNavigationCommon","reRenderComponent","parentCategoryClick","parentItemText","firstChild","openMobileMenu","mobileMenuOpened","handleContextMenuBlur","scrollContentToTop","listContainer","messageBoxClick","twoFactorPopup","countryList","searchClick","wizardClick","loadingClick","touchMove","canvasIsDragging","setCanvasClass","handleChangeContentType","resetNav","resetEverything","resetWizardSteps","getDisplayRoomContent","toggleSearchInputFocus","searchInputFocused","contentBody","filterSelectionHasValues","switchers","updateParent","backsplashSelectClick","subTypes","activeSubType","subTypeToString","onFocus","onBlur","filtersVisible","keyType","existInQtCategory","parentUpdate","updateComponent","btn","goToMaterialsInfo","MobileNavigationButtons","handleDropDownButtonClick","designNavigationOpened","handleResetButtonClick","changeContentType","resetDropDown","handleDisplayRoomClick","newButtonClick","dropDownClick","handleFiltersClick","dashboardFramed","mobileNav","enableScheduling","buttonLayoutId","MobileNavigationAllWallsCheckbox","allWallsClick","allWallsApplied","MainButtons","handleLoginButtonClick","handleScheduleButtonClick","enableCalendarForScheduling","consoleTableAllFeatures","downloadCSV","consoleActiveFeatures","allPagesEnabled","quoteEnabled","goToCart","enableSharing","goBack","Visualizer","applyStoredItems","localStorageKey","setIframeMessaging","VISUALIZER_MANAGEMENT_ACTIONS","checkState","updatePresetRoomLayout","visualizerIsLoaded","canvasScaleChanged","canvas_scale","setFirstPreset","layoutTypes","isCartAndUserStatedUpdateNeeded","getQtCategoriesCommon","setNewBvState","firstLoad","handleRefresh","navBar","onBvLoad","askToRestore","checkShareUrl","jobResponse","parseJobIdResponse","canvasClass","removeAllClasses","imageCanvasScroll","newMessageBoxState","demoPointClicked","loadQtCategoriesFeatures","featureGroupsWithoutFeatures","loadFeatureGroupFeatures","toRequestFeatureGroups","finishLoading","setShopPageLoaded","getContractSignDocument","getAssignQuoteCustomersAndEmployees","alreadyRestored","initialFlowStep","initialFlowRoomLayout","tryToSetSelectedRoom","needToSaveQuote","saveJobResponse","visualizerIsSaved","getOfflineReceiptImages","getCustomersAndEmployees","custAndEmpResponse","clients","employees","assignQuoteOfflineCustomers","client","assignQuoteOfflineEmployees","employee","roomChosen","initialFlowState","initialFlowRoom","selectedRoomFeature","removeItem","checkToShowTutorial","lockedView","bvGroupsResponse","savedTempData","parseWizardResponse","setGroupsItemsCount","setQtCategoriesSubparts","recoverFromTempId","editJobId","bvStateVersion","isNewlyCreatedJob","GROHE_ON_OPEN_ACTION","shareFacebook","sharePinterest","shareTwitter","useMouseHovering","useTouchZoom","handleToggleFeatureInfo","VisualizerTutorial","componentDidMount","showTutorialStep","exitTutorial","scrollAndHighLightRing","roomLayoutsOrIdeas","getRoomLayoutsOrIdeasStepLogic","selector","changeHighlightRingPosition","handleNextStepClick","forever","getHighLightButton","buttonComponent","mainTranslate","ringStyles","texts","highlightButton","mainTextId","showText","showNextButton","tutorialState","date","year","getFullYear","printLogo","notFoundImage","assignQuotePopupNewCustomer","newEmployeeSelected","isContractSign","assignQuoteState","cartItemsThumbnails","receiptSettings","showThumbnailsAndDescriptions","getCartItemThumbnails","pdf","getCurrentReceiptPages","withReceiptUrl","onRenObj","receiptLayout","_INTERNAL__LAYOUT__DATA_","printReceipt","fileURL","setReceiptSignature","setPaymentInfo","setCardInfo","setCardErrors","cardErrors","setShippingErrors","shippingErrors","setShippingInfo","setBillingInfo","restorePaymentInfo","someValues","NumberText","isInit","initEventListeners","fontColor","fontFamily","fontHeight","valuePrefix","valuePostfix","isMouseOverText","getTextPointsArea","mText","measureText","getMaxLength","initialValue","inputWrapper","createAdjustableInput","onInputChange","onClose","valueBeforeUpdate","isHoveringPoint","hoveredPoint","isHoveredOverText","setValue","setAngle","setBetweenPoints","parentOffset","angleRad","calculatedXOffset","calculatedYOffset","getValue","isString","withSuffixes","updateOrientation","updatePositionBetweenPoints","pointBetweenPoints","renderFrameBorder","renderText","translate","roundedRect","font","textAlign","wrapText","MovableImage","_state","mouseDownSize","minimumHeight","minimumWidth","resizablePoint","onClicked","around","newPoint","_setHovering","_isMouesOverImage","_moveImage","initialSize","thickness","hoverColor","renderMovableImage","_setFillColor","_setImage","_setAttachedTo","_snappedPos","updateSnappedPos","resetAbsolutePos","setSnappedWithShape","setSnappedShapeGroup","updateLinesLength","updateLineLength","distancesToShapes","getDistancesToShapes","distancesToImages","getDistancesToImages","snapPossibilitiesToShapes","getSnappingPossibilities","snapPossibilitiesToImages","absolutePosToShapes","snappedWithShape","setSameSnappedShapesGroup","absolutePosToImages","snappedWithImage","realPos","realSize","axis","_getRotatedPoint","_onMouseDown","getCenterPosition","setSize","setInitialSize","getPosField","getThickness","getRotation","linesData","Lines","currentSrc","$","attr","nameMetric","shapeAbsoluteData","skipImportProps","lineData","rotateBorderPoints","getLinePoints","createLines","_onMouseMove","_onMouseUp","_render","initResizablePoint","pointParams","isCentered","isVisibleOnHover","moveCallback","grandParent","newWidth","newHeight","mouseUpCallback","mouseDownCallback","pointDesign","CORE_POINT_LAYOUTS","pointPositionX","pointPositionY","reInitLineEvents","appVersion","getSrc","isSVG","getBorderPointsOnWorkspace","posField","createBorderPointsPosition","getImagePoint","revealMeasurementsInsideShape","measurementInsideShape","revealEvents","hideMeasurementsInsideShape","hideEvents","isAnyLineHovering","createImageLinesFromPoints","shouldRenderMeasurementsInsideTheShape","getOuterShape","centerPos","centerPosOnField","ear","PointV2","pointPrams","isCenteredByY","isResizedByPoint","isScaledByPoint","shouldRotateShape","pointData","mixins","isHoveredWithParent","isMouseDownWithParent","subLineHeight","renderOval","renderImage","_modelCorePoint","setPosX","setPosY","isParentMovableHovered","isParentHovered","isParentChildrenHovered","hoveringWithChildren","isParentMouseDown","isParentChildrenMouseDown","mouseDownWithChildren","isMouseDown","RenderParts","drawMeasurementAroundPoints","xMargin","yMargin","drawShapeBorders","strokeTemplate","fillTemplate","renderDevMode","isShapeHovering","shapeColorSet","renderFilledPrimaryTemplate","primary_border","renderColorSetTemplate","renderFilledActiveTemplate","getBoundingBoxFromShape","drawStripedRectangle","color1","color2","lineGap","clip","fillStripedRectangle","gradient","createLinearGradient","addColorStop","drawDiagonalStripesV2","bbox","pointPos","drawDiagonalStripes","lightGray","darkGray","scaledLineWidth","drawHoveredBorders","shadowBlur","extendHoveredLine","shadowColor","drawSpacerBorders","drawShapeCrownMoldings","crownMoldingPoints","renderCrownMolding","drawShapeEndCap","lineState","renderEndCap","drawHandles","renderPosition","getIntersectionPoints","intPoint","pf","sqftImageManager","getAppliancesThatShouldRenderMeasurementsInsideTheShape","hideSlabImages","movableImages","restoreSlabImages","getExportedSlabImages","croppedImages","croppedImage","workspaceImages","movableImageData","workspaceImage","hideImages","restoreImages","hideTextBoxes","restoreTextBoxes","enableRegularMode","hideAdditionalShapes","enableSlabMode","shouldUpdatePlaceholderFeatureIds","initWaterfallToolShapes","initBacksplashAndEdgeShapes","initMiteredToolShapes","initUnderlaymentToolShapes","initBumpoutShapes","restoreBacksplashShapes","getDimensionsDependingOnShapePositions","maxCordX","maxCordY","imageWidth","imageHeight","fontSizeMatch","TubCommon","showerTubComboParent","setShowerTubCombo","setActiveTub","bottomTubId","applyFeatureIfNotCompatible","getUrlMatchingByColor","getRelatedFeatureMetadata","getCabinetDimensions","parentFeature","thirdPartyAR3DMetaData","getWidthFromDbFeature","getDepthFromDbFeature","getHeightFromDbFeature","diamondLength","DiamondLength","featuresListToSearchForNewFeature","currentShapeDbFeature","cabinetBoxName","generateQRCode","qrData","getThirdPartyAR3DMetaData","thirdPartyAR3DUrl","metadataString","getDepthFromAR3DMetaData","Depth","getWidthFromAR3DMetaData","Width","getHeightFromAR3DMetaData","Height","getCategoryFromMetadata","getSpecialShape","SpecialShape","Category","getDepthFromDescription","getWidthFromDescription","getHeightFromDescription","normalizeString","findGLBLink","links","link","splitAndNormalize","getUrlByName","nameSearch","thirdPartyAR3DUrls","featureNameParts","urlParts","containsHEBeforeExtension","get3dURLsForFeature","urlByFeatureName","setCabinetsSetToCabinetGLB","startsFromH","isHoodShape","shapeDbFeature","shapeFeature","setCabinetGLBFromCabinetsSet","displayDoorsOnly","cabinetsData","CabinetsSet","prepareCabinetsSet","setUrlToCabinetGLB","abort","cabinetSet","abortController","AbortController","postCabinetSet","s3Url","relatedParentFeatureName","sortedUrls","groupUrlsByVersion","urlBySharedFeatureName","urlBySimilarity","similarityByWords","urlBySimilarityFromFeatureName","matchingUrl","getWizardList","getWizardListFromBackend","setLeadPopup","getErrorPopupObject","wizardsArray","nextActiveItem","SET_APPOINTMENT_DATE","SET_APPOINTMENT_TIME","SET_APPOINTMENT_TIME_STEP_ACTIVE","SET_AVAILABLE_APPOINTMENTS","SET_APPOINTMENTS_NOT_AVAILABLE","SET_SALES_REP_ID","setAvailableAppointments","setAppointmentDate","setAppointmentTime","time","timeSlot","setAppointmentTimeStepActive","timeStepIsActive","availableAppointmentDates","appointmentState","appointmentDate","appointmentTimeSlot","formattedToMatchApiDate","formatCalendarDateToMatchAvailableDate","selectedLixilDateObject","dateObject","salesRepAppointmentDate","salesRepsInSlots","timeSlotObject","setSalesRepId","setAppointmentsNotAvailable","appointmentsNotAvailable","salesRepID","getCommonLixilPostData","userLocation","productId","productName","getLixilCampaignInfo","Product","LIXIL_PRODUCT_TYPES","srBathing","contactData","installationAddress","address","zipcode","streetName","streetNumber","productInfo","checkLixilCalendar","postCalendarData","postLixilCalendar","postCalendarResponse","salesRepAvailability","availableSalesReps","getLixilSalesRep","postLixilGetSalesRep","postSalesRepResponse","calendarDate","withSlashes","day","getDate","month","getMonth","getSelectedLixilDateObject","appDate","Walls","Ceiling","RightWall","LeftWall","PopoutWall","Backsplash","BacksplashRightWall","BacksplashLeftWall","RightWallBacksplash","LeftWallBacksplash","Floor","Globals","GlobalShadow","Baseboard","CeilingLights","CeilingHighlights","Decor1","Decor2","Decor3","Decor4","TopCabinetShadow","TopCabinetShadowPart2","BottomCabinetShadow","TopCabinet","TopCabinetModuleBox","CrownMolding","TopCabinet2","TopCabinetModuleBox2","CrownMolding2","BottomCabinet","BottomCabinetModuleBox","BottomCabinet2","BottomCabinetModuleBox2","TopHandle","TopHandle2","BottomHandle","BottomHandle2","Peninsula","TopCabinetModules","BottomCabinetModules","Appliances","Microwave","Hood","Dishwasher","Range","Fridge","FridgeShadow","CountertopGroup","Countertop2","Sink","Faucet","Stovetop","CenterIsland","CenterIslandShadow","ChairsShadow","Chairs","Handle","moduleTopNumber","moduleBottomNumber","module_modulePart","getLayerDimensions","fullImagesFactor","checkForCanvasScale","offsetWidth","getMenuByHoveredLayer","contextMenuPartId","leftWallBacksplash","hoveredMousePos","rightWallBacksplash","backsplashLeftWall","backsplashRightWall","Edge","islandHood","chairs","setEdgeNotInVisualizer","disallowBlurClasses","NavItemPositionModal","activePartId","checkboxesUpdated","setCheckboxesUpdated","popupPosition","contextMenuBlur","cls","popupOpened","updateCheckboxes","maxRight","fixedTop","triangleStyles","marginTop","isShelf","positionsArray","getPositionsArray","shelf","shelfIndex","ownProps","getAnalyticsEcommerceItem","item_brand","itemQuantity","item_id","item_name","affiliation","companyName","coupon","item_category","lixilProductCategory","item_category2","item_category3","item_category4","item_category5","item_list_id","item_list_name","item_variant","location_id","getAnalyticsEcommerceValues","cartItemsToInclude","cartItemIndex","shipping","GroheCartHeaderCommon","subTitle","afterTitle","withSave","subTitleValues","aria-label","withoutSave","toggleShowManualCalculation","showManualCalculation","setSwitcherPosition","switcherPosition","addManualCalculateRow","updateManualCalculateRow","row","updatedRowValue","manualCalculationRows","deleteManualCalculateRow","changeRoutePath","nextRelatedItemIndex","nextPath","subPartName","getMaterialsFixedName","nextSubPart","DemoPoints","setPoints","layoutFeatures","getBathroomPointPositionByPartName","pointC","bvScenePoints","relPoint","bvScenePoint","getKitchenPointPosition","currentLayoutType","handleResize","pointResponsive","ImageCanvasCommonNew","alreadyRenderedImages","copyImages","shouldUpdateGreenZone","layersHoverings","backCtxBg","canvasBg","greenImage","mouseMoveSet","setOnMouseMove","setLayersHoverings","setShowCanvasLoader","getGliaImage","el","canvasImg","nonTransparentPixelHovered","mousePosArray","layerHovering","pixelHovered","willReadFrequently","hovered","layerIsExcludedFromHover","checkMorePointsPartIds","activeGreenZoneIndex","renderGreenLayer","draw","neededLayerHovering","canvasContext","firstX","isGreenHovering","firstY","lookCanvasClick","onDoubleClick","data-mobile","stickyFooterButtons","classes","variant","resetLoading","loadingBarReducer","loadingBarMiddleware","LoadingBar","ImmutableLoadingBar","_loading_bar","require","_loading_bar2","_interopRequireDefault","_loading_bar_middleware2","_loading_bar_ducks","_immutable2","compressedDbFeature","priceWasChanged","customCost","customPrice","compressedCartItem","featureDefinition_id","fabricatorFeatureId","calculatedCost","getCompressedCartItems","getFeatureGroupsProperties","customNames","setFeatureGroupsProperties","addGACookie","cookie","cookiesAll","cookie_ga","getCookie","getCartItemPartIdFix","setInitialFlowAdditionalRooms","initialFlowAdditionalRooms","setInitialFlowType","initialFlowType","setInitialFlowRoom","setInitialFlowVisualizerNotAvailable","visualizerNotAvailable","setInitialFlowFinished","initialFlowFinished","setInitialFlowRoomLayout","setInitialFlowStep","scheduleCustomer","am","scheduleData","scheduleEntryData","duration","alert","appointmentType","jobIdType","setUserLoginResponse","fromConfirmationDialog","showSchedule","updatedUserInfo","pendingPhoneVerification","responseDataBase","callUserRegisterErrorPopup","userLogin","showConfirmationPopup","userAction","assignQuote","withCheckoutLogic","noInternetCallBack","executeAfterRegisterIfUserExist","isEmailTaken","errorUserMatch","applyFunction","userRegister","agreedToTerms","subscribeToNewsletter","preferredCommunicationMethod","howDidYouHearAboutUs","phone2","registerResponse","schedulerPending","saveQuoteResponse","resetUserPassword","withLoader","emplList","getCustomerById","showContractOnError","generateTwoFaAuthenticationToken","generateAuthenticationToken","validateTwoFaAuthentication","authCode","validateAuthenticationRequest","sendAuthenticationRequest","MiteredController","imgSrc","miteredSectionsHTML","createCursor","registerEvents","attachMiteredEdge","attachMiteredUnderwrapEdge","checkForRestoreCursor","miteredSection","updateSection","changeMiteredSection","deleteSection","deleteMiteredSection","isWaitingToRestoreCursor","onMeasureUnitChange","getSegments","segment","heightNumberText","getEdgesLength","additionalLength","getEdgeLengthValue","getExportedMiteredEdges","edgeLengthValue","miteredSectionsArea","getMiteredToolTotalArea","setMiteredSections","SHAPE_HARDCODED_PART_IDS","SHAPE_PART_IDS_FROM_ADDITIONAL_SHAPES_LIST","leftWall","rightWall","centerWall","frontWall","popoutWall","backWall","ceilingPanels","leftWallSplitter","activeRelatedPart","selectedByUser","Navigation","userHasLoggedIn","navItemToClick","defaultPresetIndexToClick","messageListening","closeVisualizerNavigation","closeMobileNavigationMenu","hoveredZone","menuItemToShow","subMenuItemToShow","getSearchProducts","searchProductRequest","searchAPIDebounced","activeShower","ponyWall","receiveAllFeaturesAndClickFeatureByName","wallExL","exLSubPart","findAndClick","wallExLFeature","itemClick","searchForSameNameWallsBeforeFeatureApply","applyFeature","featureCanChangeShowerSize","applyAllWalls","itemParent","itemIsLocked","exLAndBathtubAndSmallRoom","callMetaMathesFailedPopup","nonCompatibleWith","handleChangeParent","callToiletFailPopup","shouldRecoverWalls","recoverPrevioslySelected","allWallsCanBeApplied","setPrevioslySelected","allWalls","featuresAvailableToClick","getAvailableFeatures","removeChoosingView","setDefaultPartAfterSubTypeClick","nextSubPartIndex","currentSubPart","subNavigationItem","featureToSet","defaultPreset","finishPresetLoading","currentActiveItemIsLocked","wizardActiveItemIsLocked","lockedFilters","showSmallRoomLayout","presetUnlocked","bvStateHasLockedItems","closeContextMenu","setWizardStepIndex","wizardGroupsName","currentGroup","selectedValueName","hidden","resetActiveFeature","vanityWizardGroups","showerWallWizardGroups","setWizardFiltersFromActiveItem","wizardConsumers","wizardClients","currentActiveFilters","selectedFilterValueId","doorStyleFilter","doorStyleActiveValue","doorStyleFilterValue","stepName","materialFilter","materialValueId","materialValue","showPositionsPopup","showLayerPositionsModal","eventPosition","contextMenuPosition","contextMenuPonyWall","bindCanvasClick","$scrollList","SET_LOADING","EXPAND_FOOTER_INFO","SET_LEAD_POPUP","ALLOW_SAVING_JOB_ON_INPUT_STEP","SET_JOB_SAVED","setJobSaved","SET_FOOTER_INFO_BUTTON_TEXT","setLoading","faradayLoading","expandFooterInfo","footerInfoExpanded","setFooterInfoButtonText","footerInfoButtonText","leadPopup","jobData","someUserInfoIsDifferent","setAllowJobSavingOnInputStep","registeredUser","saveJobAction","isDelayedSave","isLoggedIn","registerUser","registered","setRegisteredUserData","authToken","updateUser","updatedCustomer","postSaveJob","getSaveJobData","postScheduleAppointment","getSaveAppointmentData","LEAD_WIZARD_GROUP_TYPES","inputs","contact","appointment","getLeadFormSteps","leadFormSteps","leadStep","existingLeadStepObject","leadStepObject","leadStepName","leadStepUrl","leadSubSteps","getUrlLeadStepName","ImageCanvasCommon","drawPropsLayers","updateGliaCanvasImage","createPinchZoom","canUseUpdate","disable","updateLookCanvas","handleOrientationChange","fromDesktopToMobile","navBreakPoint","fromMobileToDesktop","layoutScene","excludedPartIdsFromHover","excludedIndexesFromHover","excludedLayer","existingGreenLayerHoveringIndex","getHoveringLayer","makeHoveringLayer","hoveringLayer","enableLoader","imagesRendered","alreadyRenderedImage","imageRendered","hoveringImage","allowPropsLayers","greenImageIndex","resizedContext","resizedCanvas","backgroundCanvas","windowHover","Window_Default","windowLayerHovering","layersHovering","Window_Covering","allLayers","timeout","hoveredLayerIndex","layersToRender","checkForLayerParts","moveStart","thisX","thisY","imageCanvasScroll2","statusSwipe","detectedSwipeLeft","detectedSwipeRight","currentTranslate","html","tX","tY","delta","nextPosition","visibleCanvasWidth","transform2d","mozTransform","msTransform","oTransform","moveEnd","hoverZones","backgroundImages","setPinchZoom","onlyLayers","onlyStateLayers","needToUpdateCanvas","onTouchStart","onTouchMove","onTouchEnd","Wall_A","Wall_B","Wall_C","Wall_A_Accent_Mask","Global_Shadow_Overlay","Ceiling_Lights","Wall_Lights","Towel_Rack","Body","ShowerDrain","FloorShadow","ExtrusionWallRight","ExtrusionWallRightShadow","Wall","Wall2","WallAccent","WallAccent2","WallShadow","LargeCornerCaddie","Fixture","ShowerHead","ShowerPanCombo","LargeCornerSeat","CornerCaddie","SoapDish","SmallCornerShelf","GrabBar","ExtrusionWallLeftHalfWall","ExtrusionWallLeftShadowHalfWall","Threshold","ThresholdShadow","ShowerDoor","ShowerDoorHandle","ExtrusionWallLeft","ExtrusionWallLeftShadow","Overlay","PonyWall","PonyWallShadow","PonyWallCap","PonyWallCapShadow","PonyWallGlass","Steam60in","0","TubCombo","WallConfiguration","Liner","ReplacementTub","WalkInTub","JettedTub","BathTub","FixtureFloorMount","Base","Spa","Top","Toilet","VanityBacksplash","CounterTop","Mirror","BackgroundBG","ShowerWall","CenterWall","ShowerWallAccent","Accessories","WindowBody","WindowKits","LargeCornerCaddie2","LargeCornerSeat2","CornerCaddie2","SoapDish2","SoapDish3","GrabBar2","GrabBar3","CornerShelf1","CornerShelf2","CornerShelf3","CornerShelf4","CornerShelf5","CornerShelf6","ShowerPod","LargeShelf","ShampooShelf","Seats","ShowerRod","TowelBar","ShowerPan","ShowerFixture","ShowerFixture2","ShowerDoor2","CeilingPanels","PaperHolder","ToiletPaper","ToiletPaperHolder","Towel","LightFixture","LampFixture","DecorWindow","DecorSeat","Bathtub","BathTubFixture","BathTubBody","sizeFactor","ShowerAccessories","largeCornerCaddie","cornerCaddie","smallCornerShelf","showerPod","windowBody","windowKits","largeShelf","shampooShelf","towelBar","caddie_type","Layout31","LookFeatureImage","withoutGallery","setGalleryImages","activeImageIndex","setActiveImageIndex","featureGalleryImages","galleryEnabled","preview","arrowClick","analyticsLabel","nextIndex","mainImageUrl","initialState","SET_CABINET_RELATED_ITEMS","roomSwitcher","menuItems","validationMessage","cabinetRelatedItems","filteredImages","roomsWithVisitedSlabTool","DEFAULT_SLAB_IMAGE_PART","upload","selectedImage","AxiosInstance","baseURL","leadApiGet","leadApiPost","VISIT_ROUTES","thanks","VISIT_STEPS","personal","project","IS_DEV_MODE","SKIP_CALENDAR","SET_USER_VALUE","SET_USER_LOCATION","SET_USER_ERRORS","SET_REGISTERED_USER_DATA","setUserLocation","setUserErrors","registeredUserEmail","registeredUserAuthToken","replacePhoneToMatchMask","cleaned","replaceMaskToPassPhoneOnTheBackend","GROHE_POST_MESSAGES_ACTIONS","signIn","openMiniCart","LookFeaturePrice","withUnit","isBundleChild","listPage","mainContentPrice","showPriceAlways","getQuote","showPriceLocked","lockedText","priceEditable","finalText","cartItemsLength","featureInfoCount","qtCategoriesLoadedLength","FeatureDescription","brief","textLength","desc","dangerouslySetInnerHTML","__html","_extends","arguments","_defineProperty","configurable","writable","scope","DEFAULT_SCOPE","SHOW","HIDE","RESET","_ref","_ref$scope","sqftManualCalculationState","miteredEdges","shapesList","totalSQFTArea","getCountertopArea","workspaceCenter","sqftApplianceImages","getCanvasApplianceImages","sqFtSlabImage","getSlabResultImage","sqFtSlabCalcImage","getSlabCalcImage","getCanvasImage","sqftCanvasImage","images3D","radii","shapeLength","getExportedTextBoxes","slabImagesTotalArea","getSlabImagesAreaGrouped","manualCalculationsCountertopArea","totalAreaToMeasureUnit","getExportedManualCalculateCountertops","manualDiv","getCanvasImageScaled","pointsCords","clonePoint","canPointsBeMoved","pointCord","LayoutCommonNew","getFeatureFromAllLayouts","featuresToLoad","childSubPart","featureLoaded","qtCategoryHasBeenChanged","changedSubPart","needToLoadFeature","useNames","needToChangeLayout","isFake","disabled_parts","previouslySelectedItem","getDefaultFeature","partIdPosition","additionalFeature","setCartStateAndUserStateFromBvState","mValue","LayoutCommon","selectedLayoutFeatures","getNotAvailableInVisualizerFeatures","notInVisualizerFeaturesThatLeft","featureSplittedName","allNotAvailableFeatures","additionalSet","neededDbFeatures","featureGroupFeatures","needToLoadFeatureGroupsFeatures","_navItemsCount","checkedAfterReceived","partsToShow","enabledParts","thirdParam","nItems","bvGroups","groupKeys","withShadow","currentType","ri","fixFeatureMetaData","dbFeatures","forParentGroup","applyCustomConfigurations","forNextBvState","employeesOnly","updateExistingFeature","fixFeatureBeforeLoad","loaded","setSpecificRules","withOtherGroups","skuNumber","allLayouts","withSharedFeatureName","propToSearch","featureGroupFound","searchFrom","allParents","sameSkuFeatures","sameSide","recentlyViewedItems","displayLogicCartItems","useSqftCartPopup","disabledPartIds","getDisabledFeatures","returnAllData","addSpecificPropertiesToLocalStorage","addDisabledPartsToLocalStorage","getActiveInstallations","addCartAndUserStatesToLocalStorage","checkAllLayouts","setCustomPrices","ciFeature","partDataHasLockedItems","isComplex","displayType","unitText","hasFeatures","anotherFg","qtCategoryId","hasFeaturePropertyName","bathroom","kitchen","fireplace","laundryroom","hasBVFeatures","hasKVFeatures","dbName2","addSubPartProperties","_subParts","newSubParts","qtCategorySubPartNavItem","isWordpressPlugin","getCartItemsFromBvState","defaultType","forceReturn","addCustomLayers","zSort","layerToReturn","bgImg","zIndexesObject","receiveAllFeatures","subItems","subItem","subPartsObject","qtCategoryIndex","excludedGroups","excludedGroupName","parentName","setCartAndUserState","hasPreviouslySavedItem","featureIndex","strippedGroupName","strippedCurrentName","inGeneral","qtCategoryToSearch","searchPartOfId","countertopExist","valueObj","CabinetWorkspace","cabinetShapes","cabinetShapesLayout","__crownMoldingParams","onRightClick","handleDrop","handleDrag","dataTransfer","getData","parentFeatureId","mousePosOnField","currentBottomTub","ExternallWall","isComplete","wallName","matchesByBindings","getShadowConditions","hardCodedName","activeShowerGroup","zIndexShadow","ponyWallFeature","decor","center_wall","background_bg","x1Percentage","x2Percentage","y1Percentage","y2Percentage","clickLogic","showNotCompatibleViewConditions","skipNotCompatible","parseFabricatorSettings","kitchenSettings","bathroomSettings","fireplaceSettings","laundryRoomSettings","finalSettings","getFinalSettings","finalKvSettings","finalBvSettings","finalFPSettings","finalLRSettings","received","fabricatorHardcode","useIMEAPI","useIMEAPI_PartnerId","currentSettingsProperty","nextSettings","useShipperHQ","hideYourListButton","dashboardUserPermissions","permission","ProtectedAreaId","AccessRights","getDashboardModeSettings","parseFabricatorSettingsOLD","kitchenToggles","oldKey","newKey","checkOut","generalProperties","settingsObject","stateSettings","fabricatorResponse","mUnit","leadCaptureProduct","measurement","showLanguageSelect","useVisualizerSwitching","callForPricing","enableASProductSync","enableGProductSync","INITIAL_FLOW_BUTTON_TYPES","Quote","AllFeaturesChecker","_filtersRequestsMade","withFiltersRequest","loaderOnly","initialShopContextValues","shopAllNavItems","shopNavItemsLoaded","shopActiveCategory","shopActiveFeature","shopLastActiveFeature","ShopContext","useShopContext","useContext","shopContextAction","shopContextReducer","UiIcon","manualCalculationsCheckForChangesApplied","manualCalculationsEdgesLength","manualCalculationsBacksplashArea","manualCalculationsEdgeLength","getEdgesArea","edgeCount","getBacksplashTotalArea","backsplashesArea","shapeArea","getSlabTotalArea","previousValue","imageSize","slabImagesAndPlaceHolders","slabImagesPrepared","preparedSlabImage","prepared","getSlabSameTypeArea","totalSlabs","getSlabSameType","getRowSum","getConvertedMultipliedValue","getCountertopQtCategory","getExportedManualCalculateBacksplashes","linearFeet","M","inputLength","inputHeight","getExportedManualCalculateEdges","selectedEdges","inputWidth","filteredRows","newRow","lastRow","lastRowId","getDefaultManualCalcRowEdge","DEFAULT_MANUAL_CALC_ROW","newList","isShowTypesList","getEdgesPlaceholder","SHAPE_LAYOUTS","upperLayoutType5","upperLayoutType2","upperLayoutType4","lowerLayoutType1","lowerLayoutType2","lowerLayoutType3","lowerLayoutType4","lowerLayoutType5","LowerIroningBoardRight","LowerIroningBoardLeft","IRONING_BOARD_DIRECTION","SHAPE_UPPER_LAYOUTS","SHAPE_LOWER_LAYOUTS","SHAPE_SQUARE_LAYOUTS","addShapeHelper","upperShapes","getShapeLayout","lowerShapes","otherShapes","shapeArray","getShapeLines","specialShape","specialLayoutName","specialShapes","createPoints","createIroningBoardShape","resetUpperShapes","activeBacksplashData","backsplashShape","slabAdditionalShape","addActiveBacksplash","additionalShapes","backsplashShapeId","findAdditionalShapeByLine","additionalShape","shapeToRemove","LowerLCorner","LowerDullangle","LowerDualangle","LowerIroningBoard","LowerDimondShape","LowerDimondCorner","UpperDimondShape","UpperDimondCorner","UpperLCorner","OnScreenKeyboard","componentWillUnmount","keyboardFrame","detach","appendTo","handleShowKeyboard","handleOutsideClick","getFields","$parent","inputId","$parentInput","parentInput","$input","oskInputId","tryBindToParent","osk","fields","setKBPosition","lightbox","is","css","draggable","selectionStart","selectionEnd","blockOutsideClick","onShow","inputFocused","passwordify","changeValue","runKeyStroke","selStart","selEnd","inc","isUpperCase","select","setSelectionRange","setParentValue","done","mouseUp","renderEmailPanel","keyValue","renderNumericKeyboard","tabIndex","node","prependTo","$keyboardFrame","arrowKeys","mainFrameClass","keyValue2","raw","rightSide","replaceDialCode","inputValue","dialWithPlus","charLength","LookUserPhoneInput","isUserPopup","inputsValidated","inputRef","defaultValue","blurred","setBlurred","focused","setFocused","wasChanged","setWasChanged","utilsScript","handleInputBlur","isValid","restartInput","relatedTarget","replacedValue","fullNumber","formattedPhone","setInitialState","setFlag","setNumber","errorsExist","renderScreenKeyboard","handleInputChange","tel","v","IntlInputComponent","inputClassName","containerClassName","onSelectFlag","currentNumber","selectedCountryData","preferredCountries","getPreferredCountries","onPhoneNumberChange","forceCarrot","forceCarrotFunc","onPhoneNumberBlur","onPhoneNumberFocus","separateDialCode","defaultCountry","fieldId","aria-hidden","shrink","restartPhoneInput","DiscountCommon","handleDiscountSelectClick","isDiscountDisabled","updateDiscount","setDiscountProperty","getGrandTotal","withoutDiscount","forDiscount","discountAmount","getDiscountPercentageAmount","setAmountValue","getMaxDiscountValue","getDiscountAmount","getInputValue","customDepositAmount","renderAmountInput","isDiscount","numberInput","onRealChange","maxValue","currencySing","printContext","getCartItemName","SIMILAR_FILTER_GROUP_NAME","getFeaturesCollectionsList","cartFeatureFilters","featuresCollectionsList","cartFeatureFilter","collectionObject","colObject","getSimilarItemInfoObject","addedCountertops","featureCollection","totalCountertopsQuantity","fromCartItemName","countertopTotalPrice","subTotalPrice","filterValueName","loadTexture","gl","oc","texture","createTexture","bindTexture","TEXTURE_2D","texParameteri","TEXTURE_WRAP_S","CLAMP_TO_EDGE","TEXTURE_WRAP_T","texImage2D","RGBA","UNSIGNED_BYTE","TEXTURE_MAG_FILTER","LINEAR","TEXTURE_MIN_FILTER","setArrays","prog","vertex_buffer","createBuffer","bindBuffer","ARRAY_BUFFER","bufferData","Float32Array","STATIC_DRAW","getAttribLocation","vertexAttribPointer","FLOAT","enableVertexAttribArray","prepareWebGL","vertSh","createShader","VERTEX_SHADER","shaderSource","compileShader","fragSh","FRAGMENT_SHADER","createProgram","attachShader","linkProgram","useProgram","viewport","webglCanvas","useNewCanvas","wgl","uSampler","getUniformLocation","uniform1i","activeTexture","TEXTURE0","clearColor","clear","COLOR_BUFFER_BIT","drawArrays","TRIANGLES","longPressInterval","longPressDelay","isClosed","adjustInputValue","dispatchEvent","Event","longPressTimeout","delayTimeout","startLongPress","stopLongPress","incrementButton","textContent","onmousedown","onmouseup","onmouseleave","decrementButton","onchange","closeInput","moveElement","newX","newY","speed","oldX","offsetLeft","oldY","offsetTop","distanceX","distanceY","startTime","performance","now","currentTime","elapsedTime","progress","delay","enableFreeDrawMode","disableFreeDrawMode","createShapeFromPoints","pointCords","isClonePointRequired","shapeCreationParams","polygonLines","polygonArea","minimumShapeArea","maximumShapeArea","maximumLineDistance","polygonLine","createWallFromPointsV2","centerPoint","lockedAngleStep","createShapeFromCorePoints","createPolygonFromCorePoints","DrawImage","htmlImg","svgImageId","isScale","svgImageDataURI","drawSvg","getHorizontalLineIntersectionPoints","mousePosOnFiled","verticalLinePoint1","verticalLinePoint2","getClosestIntersectionPoints","intersectionXPointAndLine1","intersectionXPointAndLine2","getVerticalLineIntersectionPoints","intersectionPointAndLine1","intersectionPointAndLine2","intersectionPoint1","intersectionPoint2","closestPont","getIntersectionPointsAndLines","pointAndLine","closestPont1","closestPont2","getCircleLineIntersection","circleX","circleY","circleRadius","lineX1","lineY1","lineX2","lineY2","t1","t2","RenderCabinets","getDiagonalPointsForTheSquare","returnPoints","pointIndex","previous","diagonalPoint","currentPoint","squarePoint","linePointId","crownMoldingPoint","fromPointField","toPointField","MiteredOverlay","sectionIndex","hoveredText","pointsDistance","heightMetric","thicknessMetric","maxSegmentPriority","minMiteredSize","measurementMargin","dragPointMargin","rulerMargin","heightMargin","sectionIndexMargin","sectionArrowWidth","letterMargin","thicknessMargin","movePointOffset","lineTextColor","deleteFillStyle","_segments","miteredTextParameters","setMiteredPoints","setSegments","movePointInOrStop","biggestLineCord","smallestLineCord","stopPointLeft","stopPointRight","moveStopPoints","smallestPointStopped","biggestPointStopped","lengthDiff","movePoint","moveMeasurements","getMousePosPointDiff","sameOrientation","getMiteredTextParameter","isMiteredPointMoving","preparePoints","prepareMeasurements","prepareHeight","initPoint","exportSegment","importMitered","preparePoint","shouldAddTwoPointsInTheMiddle","point33","point66","addMeasurementBetweenPoints","xMarginHeight","yMarginHeight","posHeight","heightValue","setSegmentHeightFromNumberValue","endPoint","updateSegmentsLength","updateSegmentThicknessPos","importSegment","point1Index","lengthText","setSegmentLengthFromNumberValue","getPointBetweenCords","closestIndex","secondPoint","isPrev","closestPointField","addPointBetweenPoints","getSegmentBetweenPoints","point2Index","getSegmentPointsBySegment","segmentIndex","removeMeasurementBetweenPoints","removeIndex","length2","updateCornerPoints","updateSectionHeightPos","setSegmentLength","numberText","miteredSegment","setPriority","resizeMiteredSegment","newValue","setSegmentHeight","setSegmentThicknessFromNumberValue","setSegmentThickness","getSegmentByNumberText","getResizedSegmentsWithoutPriority","closestLeft","closestRight","getResizedSegmentsFreeSpace","getResizedSegmentsByPriority","minPrevSegment","minNextSegment","prevSegments","nextSegments","movePointWithMouse","resizeMiteredSegmentFreeSpace","resizeMiteredSegmentWithoutPriority","resizeMiteredSegmentWithPriority","minNextSegmentIndex","minPrevSegmentIndex","segmentPoint1","segmentPoint2","moveAllNextPoints","segmentBetweenPoint2","moveAllPrevPoints","segmentBetweenPoint1","getLeftRightStopPoint","renderTopBlueLine","renderRuler","renderLetter","renderHeight","renderSectionIndex","pointsToRender","parallelPointFrom","parallelPointTo","drawFlatArrow","renderThickness","xMarginLine","yMarginLine","xMarginImage","yMarginImage","thicknessValue","renderSectionIndexOld","xWidth","yWidth","xMarginValue","yMarginValue","renderPos","renderDoubleCircle","isMouseOverPoint","slabState","slabWorkspacePos","shapeRegularPointField","shapeSlabPointField","clearSlabLeftPart","renderLinesWithoutStroke","slabIndex","movableImagePosition","movableImagePointField","movableImageSize","shapeCenterOffset","drawSlabMidDivider","renderSlabWorkspace","drawSlabRightPart","renderMeasurementArrows","getMeasurementPoints","renderMeasurementLength","sqftResourcesManager","getLineByAttachedItemId","attachedItem","ShapeAbsolute","__shape","__intersectionPoints","__absolutePos","__snappedWithShape","__snappedShapeGroup","setIntersectionsPoints","getSnappedWithShape","shapeGroup","setMinLengthToIntersectionPoints","__minLengthToIntersectionPoints","absolutePosition","movingLine","baseLineDistance","newFrom","newTo","pointDistance2","horizontalEastLineExpand","horizontalWestLineExpand","verticalSouthLineExpand","verticalNorthLineExpand","mathRound","pointOnTheLineFrom","pointOnTheLineTo","prevLineDirection","nextLineDirection","prevPrevLine","nextNextLine","prevPrevLineDirection","nextNextLineDirection","getMaxResizeWidth","rectangleWidth","RECTANGLE_WIDTH","rectangleHeight","RECTANGLE_HEIGHT","RECTANGLE_HEIGHT_METRIC","SHAPE_LABELS","updateShape","initLabel","firstShapeLine","setLabelText","thirdShapeLine","labelTextColor","isTitle","lineOffset","getFreeDrawPoint","pointState","getLockPointPos","getLockedPoint","existingPoint","lockedPosition","lockedPositionOnField","pointV2","angleStep","pointV2PointField","rotateToMouseAngle","closestAngle","LineCorner","additionalOutlineHoverWidth","isMouseOverAngle","isMouseOverCornerLine","getOutlineAngleLineField","getAngleLineField","cordCornerFrom","cordCornerTo","isLineCornerInner","pointIndent","pointOnTheBlueLine","pointOnTheBlueNextLine","cordCornerIndent","UiSelect","handleItemClick","selectItem","getSelectText","itemText","baseClass","data-index","WindowParent","otherParent","shower_tub_combo_is_active","bottom_tub","shower_floor_is_active","setShowerHandType","showerRod","robeHook","paperHolder","toiletBrush","towelTowelRing","towelTowelBar","towelTowelHook","EnclosureCommon","bathParent","relName","bathtubParent","bathTubBody","VanityCommon","counterTopSize","activeSideMeta","getActiveMatchingMetaFromRelatedItem","setShowLoader","loadAdditionalVisualizerGroups","additionalFeatures","qtCategoriesResponse","loadVisualizer","groupsResponse","LookSideBarShareButtons","outerWidth","screenX","screenLeft","outerHeight","screenY","screenTop","toolbar","status","directories","menubar","scrollbars","resizable","centerscreen","chrome","handleClose","autoFocusItem","data-id","shareClickButton","setLixilAuthorizationToken","useLixilCalendar","postSignInAuth","postAuthResponse","bathRemodel","lixilTermsText","globalState","textWithUpdatedButton","isSrBathing","addressIsNotSupported","appointmentTime","defaultTimeValue","featureIsExcluded","matchingName","getFilteredNavItems","afterCurrentSelectionWizardSteps","allWizardSteps","wizardGroupIndex","layoutThumbnails","globalShadowParent","Window","shower_interior_wall_accent_parts","shower_interior_wall_parts","left_shower_wall_type","partPredicate","bvStateKey","shower_type","shower_parts","shower_part_id","shower_accent_wall_part_id","accordingPart","showerFeature","availableParts","bathTub","bathtub_type","showerAccessoriesParent","SelectionMobileViewSwitchers","LookFeatureRemoveButton","isIcon","isList","alreadyDisabled","updateForOldUI","deleteButtonClick","featureLabel","startIcon","BacksplashSelect","handleBacksplashItemClick","maxClickCountReached","getBacksplashPart","useButtons","getBackplashTypes","renderButtons","topCabinetModuleSystem","bottomCabinetModuleSystem","getModuleCombinations","fridgeShadow","centerIslandshadow","ScheduleButton","scheduleButtonOnClick","getAnalyticsEvent","getSchedulingButton","stringNum","area2Codes","createDeliverySections","cartItemsList","deliveries","cartItemShippingCost","cartItemShippingName","cartItemShippingTime","cartItemShippingCode","existingDelivery","setCartItemsShipping","shippingOptions","shippingForItem","shippingObject","firstOption","shippingCode","area3Codes","getAreaCost","deliveryCost","materialsQuantity","totalQuantity","paymentState","setShowUnlockCalculations","showUnlockCalculations","setUnlockCalculationsStep","unlockCalculationsStep","showUnlockCalculationsCartItems","showCartItems","showUnlockCalculationsTotalItems","showTotalItems","setShowUnlockCalculationsTutorial","showUnlockCalculationsTutorial","setUnlockCalculationsTutorialStep","unlockCalculationsTutorialStep","setUnlockCalculationsTutorialFinished","LookIntroPopper","anchorRef","placement","toolTipText","roomIdeasButtonTranslate","anchorEl","transition","disablePortal","TransitionProps","transformOrigin","initialContext","pageRendered","selectedFieldIndex","ContractsContext","__tryAddToInstallation","__tryRemoveFromInstallations","__toggleInstallationServiceUsage","getInstallationCost","__installations","hourly","fabricatorFeature_id","fabricatorInstallation_id","hasChanges","ID","__getInstallations","inst","instGroup","installation","autoAddWithProduct","installationName","hideQuantity","instGroupIdx","serviceIdx","customerAdd","similarProductsWidth","mainBarWidth","handleHttpError","getResponse","shouldUseKvConfigDomain","HOST_NAME","checkApiError","__error__","ok","statusMessage","reason","isFormData","method","Headers","fixStringEncoding","forLeadForm","inputObject","getWizardFeatureAsync","nameToCompare","_self","cfg","clearHistory","getHistoryStore","restoreShapesFromHistory","setDataToQt","checkForChangesApplied","shapesChanged","historyShape","historyShapetoFind","getParsedSqftData","sqftPassedData","previouslyAddedSqftFeatures","sqftFeaturesObj","availablePartIdsKey","createSqftFeaturesObj","isFromCartFeatureAdded","featuresPassed","prepareCountertopFeaturesPassed","prepareSlabFeaturesPassed","prepareEdgesAndBacksplashesManual","prepareEdgesAndBacksplashes","prepareCrownMoldings","prepareHandles","prepareOtherCountertops","prepareRadius","prepareCorners","sections","prepareUnderlayment","featurePassed","getSimilarFeatureGroup","isSqftFromFeature","getQuantityFromCalculator","getFakePriceFromCalculator","getFeatureFromSQFT","featureToCheckUnit","quantityRounded","initialQuantity","isRecalculateSlabNeeded","recalculateSlabs","useStonePricing","useSlabImagePricing","parentList","firstOpen","splitPriceBetweenSlabsMaterial","setPriceIntoSingleFeature","commonSharedFeatureNames","getCommonSharedFeatureNames","sharedObject","biggestFeature","sortOrder","isBiggestFeature","isQuantityAddedToBiggestFeature","sortSqftFeatures","sortSharedObject","updateSharedObjectWithGroupQuantity","alreadyAdded","sharedName","quantityPerFeature","totalFeaturesInGroup","slabImagesGrouped","slabImagesGroup","centerIslandExist","manCountertopObject","sqftPassedDataCountertops","sqftPassedDataRadius","radiusObject","sqftPassedDataHandler","handlerObject","sqftPassedDataUnderlayment","passedData","sqftData","edgeLength","addedEdge","fakePrice","slabAlreadyInTheCart","slabImageAreaGroup","previouslyAddedSqftFeature","idToFind","slabParentFeatureGroup","getFeatureFromCalculatorPassedId","hasSamePartIdWithPreviouslyAddedFeature","foundNavItem","QtCategoryName","setAvailableFilterValues","isDrawFinished","addedPoints","dimensionToMouse","drawLineToMouse","outlineColor","drawType","useLockedPoints","currentNumericInput","clickedBackSplashButton","createDimensionToMouse","updateMeasurementToMousePosition","isLengthKeyCode","isBackspaceKeyCode","isDeleteKeyCode","createPointFromCurrentNumericInput","drawWall","lastPoint","isPointExist","segmentLength","newCordsAtDistance","drawStart","mPosOnField","lockedPointPos","lockPointOnField","isInited","isFitDistanceWithLastPoint","isMousePosFitDistanceWithLastPoint","wallPointLocked","getWallLockedPoint","wallPoint","getWallPoint","addLineDimensions","shouldResetPoints","addedPoint","dimension","preparedPoints","createWall","changeFirstPointCoordinatesToCreate45or90DegAngleWithTheLastPoint","createShape","lockPointPos","intersectionPointOnField","postAuthData","jwtToken","withSignInRetryRequest","request","checkLixilPostalCode","serviceAvailable","NavigationItemsList","itemClickCount","reorderItems","checkPassed","getActiveFeatureName","uniquePartNamesArray","getSelectedWallIndexes","selectedFirstItemIndex","otherSelectedWallsIndexes","Map","uniquePartName","foundIndex","getLockedFeature","getActiveItemIndex","isActiveItemIndex","activeFeatureId","indexesToReplace","selectedExist","reOrderedFeatures","featuresToPlaceFirst","navItemToReplace","checkForSelectedAccessories","checkIfFeatureSelected","getNavItemsList","elements","reorderedFeatures","isPulsating","currentFeatureCartItemsCount","currentFeatureId","stoneFeature","customClassName","switchToFeatureInfo","largeThumbnail","getLoadingFeatures","onDesktopNavigationScroll","scrollWidth","getNewFeaturesOnScroll","onMobileNavigationScroll","finalScrollPosition","featureReceivingStarted","additionalFeaturesLoading","finishScrollRequest","shouldUpdateNavItems","needToUpdate","parentItemPassed","useNewWizardFeaturesRequestsLogic","additionalFeaturesOnScroll","CommonFeatureItemsMethods","scrollToRelatedFeatureId","featureInfo","setCommonStuff","nextCatName","neededCat","featureParentName","$scrollableDiv","scrollToArea","scrollToDiv","BodySwipable","getScrolllableElement","scrollableRef","scrollableSelector","handleOnMouseDown","swipeActive","scrollableElement","currentScrollLeft","handleOnMouseMove","handleOnMouseUp","LayoutNavigationItem","imageOnly","minHeight","ShareButton","clickShareAfterLogin","toggleShareList","shareListOpened","checkForLoggedIn","share","renderList","faceBookButtonClick","takeRight","getShareButtons","data-share","getShareList","createRef","shareButton","PingPilotButton","pingButton","pingButtonClick","WrappedComponent","usePingWidget","scriptAdded","dataSignal","shopPageLoaded","setShopPageOpened","setShopLastPageVisited","shopLastPageVisited","setShopPageLeaved","shopPageLeaved","CONTENT_TYPES","searchCustomer","newCustomer","contractSelect","PREFERRED_COMMUNICATION_METHODS","HOW_DID_YOU_HEAR_ABOUT_US_OPTIONS","animateButtonsJQ","$buttons","hideButtonsJQ","animateButtons","hideButtons","miteredSectionInterface","miteredSegmentInterface","waterfallSectionInterface","waterfallSection","waterfallSegmentInterface","waterfallSegment","changeValuePopupInterface","increaseCallback","decreaseCallback","inputChangeCallback","setIframeIntegrationRequest","savePostMessage","loginPostMessage","wishlistLines","savePostData","postMessageToParent","postMessageData","referrer","setIframeIntegrationResponse","iframeIntegrationState","iframeIntegrationRequest","iframeIntegrationResponse","iframeIntegrationRequestType","iframeIntegrationResponseSuccess","handleIFrameMessage","attachEvent","LookUserInput","userInputChange","userInputBlur","onInputBlur","useInputsValidation","required","InputLabelProps","helperText","setInputsValidated","DesktopHeader","toggleSubNav","subNavVisible","handleLogoClick","renderSubNav","nav","displayOrder","rel","showInstallations","addLaborCustomer","addLaborInstaller","logoStyles","initialFlowIsRunning","initialFlowEnabled","hideLogo","isShoppingCartPage","hideTopButtons","uploadsAndNotes","questionShown","DesktopHeaderWithRouter","LookFeatureOptions","lookActiveFeatureCustomName","lookActiveFeatureCollection","lookActiveFeatureMatchingFeature","lookActiveFeatureMountType","lookActiveFeatureMountHoles","lookActiveFeatureLixilSubCategory","navigationCount","setAvailableOptions","checkCollectionName","optionsButtonClick","storeActiveFeature","GroheFeatureOptions","wizardOptionClick","optionFeature","parentOptionClick","TERMINATING_ANIMATION_DURATION","ANIMATION_DURATION","PROGRESS_INCREASE","MAX_PROGRESS","UPDATE_TIME","_createClass","defineProperties","descriptor","Constructor","protoProps","staticProps","_react","_react2","_reactLifecyclesCompat","_propTypes","_reactRedux","_classCallCheck","TypeError","_possibleConstructorReturn","ReferenceError","_Component","_temp","_this","_len","args","_key","__proto__","getPrototypeOf","terminatingAnimationTimeoutId","newPercent","progressIncrease","simulateProgress","_ref2","maxProgress","subClass","superClass","setPrototypeOf","_inherits","prevProps","stop","progressIntervalId","updateTime","terminatingAnimationDuration","isShown","showFastActions","animationDuration","willChange","renderComponent","shouldStart","shouldStop","polyfill","ConnectedLoadingBar","loadingBar","getAddressFromObject","displayAddress","addressPart","PrintDocumentInfo","customerName","customerPhone","customerAddress","customerHasShippingAddress","threeColumns","main","sectionLeft","sectionTwo","mainTitle","mainText","mainTextEmail","sectionCenter","PrintDocumentBodyCartItem","isComplexMultipliedUsed","priceTotal","getFeatureQuantity","hideUnitPrice","displayFake","bundleProducts","wrap","cartItemWithThumbnail","cartItemThumbnail","cartItemThumbnailImage","uri","cartItemWithThumbnailBody","cartItemName","cartItemNameCentered","cartItemNameBig","hideSku","cartItemSkuFullWidth","wizardItemDescription","cartItemDescription","cartItemInfo","cartItemUnit","cartItemUnitItem","cartItemPrice","cartItemNote","cartItemUnitSKU","filterGroupInterface","visualType","filterValueInterface","navigationFilterValueInterface","Movable","_posX","_posY","_width","_height","isMouseOverArea","setHoveringWithChildren","p7","textarea","posOnField","cursorName","addedImages","renderCursor","alreadyAddedImage","addCursorImage","imgWidth","imgHeight","domImg","$img","ratio","mPos","navRadius","arcButtons","angleButtons","closeButton","cornerContainer","radiusContainer","measure","angleButton_onClick","handleButtonClick","arcButton_onClick","setImage","hoverPoint","hoverMiteredPoint","hoverSegmentCorner","TranslatesProvider","createRadiusElements","createCornerElements","textWidth","imageSrc","flagMargin","svgCache","setLine","editable","dString","midPointPointField","editState","editPoint","isInEditState","renderDimensionToMouseFromPoint","destroyPoints","setEditMode","setEditPoint","addPoint","disableEditingWall","destroyResource","isMouseOverWall","addedPointKey","lineFieldArray","wallLockedPoint","renderLines","drawLineFromPointV2ToMouse","renderLinesBetweenPoints","RenderFreeDraw","drawLines","nextPointField","drawLastLine","shouldUseLockedMode","drawLineFromPointV2ToMouseLocked","drawLineFromPointV2ToMouseFree","movablePoint","getWallByPoint","editWall","existingWallPoint","newWallPoint","__crownMoldingFeatureId","getShapeDepth","template","renderBorders","renderDimensionsInsideShape","renderHandles","renderDimensionsOutsideShape","renderTestShapeLines","renderShapeSnappedGroup","textHeight","mTextWidth","mTextHeight","lineHeight","movingShape","getCrownMoldingPoints","isHighlighted","timer","highliteBlinkTime","highliteBlinkTimeTotal","startHighlightingLoop","stopHighlightingLoop","subscr","existingDbFeature","relatedFeatureIds","relFeatureId","loadedDbFeature","coor","BackWall","skirting_board","shower_curb","bathtub_body","split_wall","towel_bar","towel_ring","shower_glass","grab_bar","robe_hook","window_body","toilet_brush","paper_holder","left_wall_splitter","left_wall_crop","right_wall_crop","front_wall_crop","shower_wall_mirror","back_wall","NonVisualizerSubPart","navigationNoMetaSubItems","homePageTitle","ToiletBody","neededFeatureGroupsToCheckOnShowerSizeChange","showerPanComboParent","newSizeCondition","newConditions","HARDCODED_DOMAIN","SqftJsonApi","sqftPost","TextBox","_posOnField","_placeholder","_design","addRect","addTextBox","modelText","txt","newState","alreadySelectedWizard","wizardWasRestored","skipStartStep","existingAllObject","existingValues","updatedValues","roomType","responseDefaults","noPresetsAtAll","presetIndex","fixEdgeMeta","metaObject","sinkMeta","mountWidthMeta","currentSinkMetaData","getCurrentSinkMetaData","conditionsWithoutSink","CountertopCommon","getFeatureEdgeFilter","getSameEdgesFeatures","currentEdgeMetaData","allEdgesCountertops","sameEdgeCountertops","countertopMetaDataValues","EdgeCommon","matchingByName","allCountertopFeatures","getEdgeFilterGroupFilters","_allEdgeFilters","allEdgeFilters","getMatchingCounterTopFeaturesBySplittedName","getEdgeFilterGroup","assignedEdgeFilter","metaDataMatchName","featurePart","forNavigation","PrintDocumentDisclaimer","withTotal","depositDisclaimer","enableDisclaimer","disclaimerMessage","getDisclaimerMessage","notification","notificationMargin","notificationImage","warningIcon","notificationText","TRANSLATES","getCustomJson","isEnglish","customJsonResponse","translations","setTranslations","renderLanguage","setRenderLanguage","prevLanguage","prevWasCreatedFromFabricator","parseTranslatesResponse","trans","translatesArray","translatesArrayIndex","translateValue","translateValueIndex","getCustomTranslates","transDoc","localeString","loadTranslates","responseMain","customTranslates","responseLowes","jsonFile","responseCaes","columnName","responseSqft","transSqft","defaultLocale","Shadow","wallExR","wallA","wallB","wallC","navSubItems","BodyPanel","renderAllWallsCheckbox","showWizardGroupsSelection","activeNavPart","showNavigationFilters","canUseNavigationFilter","canUseNavigationFilterSteps","activeFeatureEdgeFilter","edgeFilters","activeEdgeFilter","activeEdgeFilter2","currentFeatureFilters","matchingEdgeFeature","countertopFeatures","edgeFilterValue","edgeFilterId","currentEdgeFilterId","waterFallFilter","matchingCounterTop","NavigationFilters","setToStateFilterValues","setParentFilterValues","getFilterGroupNameByButtonId","colorFilterName","selectedColorFilter","filterG","selectedColorValue","reorderedFilterValues","reorderFilterItems","activeA","filterValueIsActive","activeB","getFeatureBodyItemThumbnail","modulePartJoined","inlayTypeObject","inlayTypes","mJoined","defaultInlayType","removeNavigationFiltersAndSetCommonView","handleFilterValueClick","neededInlayTypesObject","inlayTypeObj","existingMJoinedIndex","selectedF","activeFeatureNameSplitted","featureNameSplitted","getMatchingFeaturesBySplittedName","getFilterFeatureItem","renderMobileFiltersList","renderLoadingList","filterValueIndex","renderFiltersList","innerElements","resetFilters","countertopMaterialOrColor","counterTopWizard","FeatureWizard","updateStepValues","reload","setStepValues","getFilteredFeatures","getLockedPropertyValueObjectById","stepId","filterToFind","selectionAvailable","activeItemIsSelected","checkStepForHidden","doorStyleValueId","doorStyleValue","setLockedView","currentGroupValue","getCurrentFilterObject","selectedFilterObject","availableStep","defaultSteps","showMobileGroups","wizardValueObject","allFiltersObject","getFilterValue","currentStepFilterName","resetStepValues","setHiddenStateToStep","sizeStep","doorStyleStep","existingIdeallyFeature","doorStyleMatch","sizeMatch","sizeValue","patternStep","patternGroup","patternGroupSlabValue","smoothFilterObject","tryToClickOnMatchingFiltersItem","withoutDoorStyle","wizardIsFinished","getPlaceholdersFeatures","arrayOfSelectedKeys","foundFeaturesFromFilters","arrayOfCurrentKeys","onItemClickDisabled","askQuestion","filterValueClicked","itemIsSelected","currentFilter","hasValues","sizeIds","doNotPush","interiorShowerWallWizard","ContextMenu","contextMenuButtons","setShowerBodySelectionButtons","currentShowerSize","intlTranslate","bgImageText","isPony","clickedItemIndex","setWallBButtons","wallPart","zIndexToFind","clickedItem","vanityFaucet","getItemsToRender","hoveredParent","itemsToRender","menuButton","subNav","removeNotUsedTubItemsFromContextMenu","itemToRender","activeTub","keepThisItem","handleSubNavClick","showerTubComboSubParts","activeTubMenuItems","handleContextMenuHover","hoveredButton","hoveredZindex","setContextMenuButtons","getShowerRelatedItems","contextMenuStyles","onMouseOver","HomeMenu","handleBack","handleMobileBlur","backButtonClick","SaveButton","saving","handleSaveQuote","saveQuoteSubmit","Tutorial","stateProperty","highlightElement","globalShadow","countertopGroupParent","relatedName","matchingParts","featuresPart","moduleSystem","top_cabinet_parts","bottom_cabinet_parts","crown_molding_parts","countertop_parts","top_module_system","inlay_types","bottom_module_system","allSubParts","newSubPart","cPart","countertopSubParts","changedSubParts","getChangedSubPart","ContextMenuSimple","availablePartIds","getBackSplashButtons","setBacksplashButtons","backSplashButtons","currentLayoutName","CabinetContextMenu","resetModule","arrayNumber","setCabinetModule","moduleSplitted","modulePart","moduleSystemPart","oldIndex","getSliceButtons","getResetButton","getExitButton","openNavigationMenu","getCabinetConfigurationButtons","cabinetConfigurationButtons","availableModuleCombinations","getContextMenuButtons","sliceButtons","firstSliceIsActve","contextButton","contextButtonIndex","getShowerBodySelectionButtons","desItem","ContextMenuQKB","setStyles","setButtons","maxAllowedWidth","maxAllowedHeight","negativeMargin","getContextMenuPosition","contextStyles","modifiers","altAxis","altBoundary","tether","rootBoundary","padding","onClickAway","actionCartItems","stateCartItems","stateCartItem","sameCartItemIndex","checkForAddToCartFeaturesWithDisplayLogic","checkHardcodedRulesItems","oldItem","cartItemToDeleteIndex","isRecalculateSlabsInCartNeeded","recalculateSlabsInCart","isSlabsStillExistInCart","removeFakePriceFromCartItems","cI","activeApplyPopupItem","existingCartItemIndex","newCi","checkoutPopupVisible","depositVisible","depositCallback","cItemsAddedToParentCart","manualTaxEntered","supportedCountries","zipCodeRg","supportedCountriesList","displayLogicCartItem","allowMinimumChargeConditions","countertopItems","accumulator","MINIMUM_SQFT","MINIMUM_SQFT_2","theMostValuableCartItem","currentMostFeatureCost","checkLowesHardcodedRulesItems","uniqueSharedNames","uniqueSharedName","matchingItems","checkCaesHardcodedRulesItems","similarFeatures","isSameNameFeature","Quantity","minValue","handleOnKeyDown","allowDecimals","handleChangeValue","getColor","squared","htmlFor","readOnly","loginButtonCommonClick","updateInputValidations","loginResponse","saveQuoteAfterSignIn","savedSuccess","registerButtonCommonClick","registeredResponse","remindPasswordCommonClick","fullStore","getUpdatedUserInfoFromTheResponse","responseCustomer","tryToSetUserFromUrl","rgx","TextInput","inputElement","editing","getUpdatedValue","finishEditing","handleKeyDown","autoComplete","LookDropdown","selectedItem","selectItemClick","selectLabel","maxItems","changeErrorsObject","textOnly","setOpened","selectElement","checkForError","selectItemHeight","preText","endIcon","selectItemIndex","isSelected","handleSelectItemClick","LookFeatureSku","withoutCheckout","sendFeatures","lookImage","LookListFeature","fromDesignRecommended","isAllWallsTutorialItem","featureElement","noFeatureSection","showMatchRadio","positionInList","finished","showAllWalls","viewTypeFour","isLockedAndViewTypeFour","Consumer","compatabilityLogic","listFeatureClick","ShoppingCart","getRecentlyViewedItems","recentItem","recentItemId","getFinalButton","intlText","handleCheckOut","showBackToDashboard","leadCaptureOnQuote","handleSaveClick","handleStartOverClick","assignButtonsToShow","getFieldValue","getFirstUnfilledCustomField","contractsContext","signIsRequired","showReceiptInContract","customFieldInfo","fieldsNeeded","isEditable","isCheckBox","pageRect","ury","fieldIndexOnPage","getFieldNameWithoutRequired","getFieldCoords","contractFields","fieldsCoords","isCustom","fieldCoords","idx","getAlreadyFilledSignatureField","fieldName","signatureValue","withoutRequiredSignatureName","isSignature","getLookRowHeight","LookVirtualizedList","contentHeight","onScrollHandler","loadingCount","columnCount","listSettings","columnWidth","rowCount","rowHeight","overscanRowCount","showScrollingPlaceholder","useDynamicRowHeight","cellRenderer","columnIndex","rowIndex","noRowsRenderer","GroheFeatureQuantity","hideTitle","MIN","updateQuantity","quan","fromButton","analyticsAdjust","pattern","moreInfoType","GroheCartBackButton","BathroomVisualizer","setSubscribers","baseResponse","setVisualizerInfo","showTutorial","PrintDocument","Provider","pageAS","object-fit","pageNumber","fixed","wizardSelectedValue","stepGroup","prepareData","prepareCountertopRows","prepareBacksplashRows","prepareEdgeRows","dataCountertops","preparedData","dataCountertop","dataBacksplashes","dataBacksplash","dataEdges","dataEdge","clearManualCalcData","manualCalculationRowType","getGroupedShapesByColor","getFeatureGlb","zoomToLine","shapePos","sqftPoup","popUpWidth","newWorkspacePos","zoomTo","isHalfScreen","shapeMinMax","zoomToInSlab","isXIncrementUp","isYIncrementUp","refreshIntervalId","incrementX","incrementY","UnderlaymentController","changeMaterialToColorArray","getHardCodedFilterGroupName","weShouldHideFilterGroup","weShouldHideFilterValue","selectedFiltersLength","getFixedFilterValueName","DEFAULT_COUNTERTOP_HEIGHT","DEFAULT_BACKSPLASH_HEIGHT","cabinetPositions","prepareCabinetsPositions","countertopPositions","CountertopPositions","prepareCountertopPositions","wallPositions","WallPositions","prepareWallPositions","shapePosition","prepareRegularCabinetSet","prepareImageCabinetSet","shapeDepth","radians","centerZ","offsetX","offsetZ","zCorrection","z","getShapeCorrectedPos","thetaRad","xInit","yInit","targetWidth","targetDepth","originPointOnWorkspace","material_url","CabinetsHelper","getCabinetPosY","threeDPos","getHandles","applianceRotatedDegrees","appliancePosition","adjustApplianceModelPosition","partIdsCoveredByCountertop","textureUrl","URLByFeatureName","getCountertopTexture","groupShapes","lastHeight","isDishwasher","prepareCountertopForGroup","posA","posB","countertopCabinets","countertopCabinet","countertopCabinetHeight","overhang","currentShapeHeight","upperCabinetHighestCabinetValue","getHighestCabinetValue","tallCabinetHighestCabinetValue","handle3dURL","similarity","longer","shorter","longerLength","costs","lastValue","editDistance","arrayToSearch","highestMatchCount","phraseBySimilarity","searchWords","urlWords","matchCount","urls","versionedUrls","versionMatch","isSqftPassedDataEmpty","FiltersBody","isFilterSelected","isFilterExpanded","handleExpandFilter","handleSelectFilter","handleGroupClick","handleReset","renderFiltersBody","availableOtherFilterGroups","renderGenericFilters","checkFilterGroupForAvailableFilterValues","renderBrand","renderColor","filterList","groupsFirst","filterOptions","name2","onChecked","brandFilterGroup","filterButtons","buttonText","filterNameLowerCased","buttonEnabled","CheckBox","KitchenVisualizer","kvGroupsResponse","KvSceneVisualizer","BvSceneVisualizer","LookVisualizer","decorAndAttachmentResponses","userDataResponse","FireplaceVisualizer","LaundryRoomLayout","slatWall","slatWallType","ProjectScopeFunctions","goToMaterialsPageCommon","parentSimple","getBathroomHomeSections","vanityItems","showerAndBathTubItems","otherItems","bathTubFixture","disableOnHomeSections","getKitchenHomeSections","getSections","sqftVisited","visited","closeSQFTCalc","useCloseSQFTCalc","handleAddToQuoteClick","stayOnSqft","isLocationNotUsesPopup","setEdgesQuantity","setRadiusQuantity","setBacksplashesQuantity","setCountertopsQuantity","saveSQFTHistory","edgesIdsObject","edgeId","setSubPartQuantity","radiusCount","angles","countertopSquareFeet","centerIslandCountertopSquareFeet","countertopIsAdded","countertopIsAddedToQtCategory","centerIslandCountertopIsAdded","updateCurrentFeature","setFeatureGroupSqftQuantity","setSqftQuantityToSubPartFinal","sqftQuantity","handleResizeClick","handleSpacerClick","handleRotateClick","handleWallClick","handleDuplicateClick","handleAngleClick","handleTextClick","handleResetClick","handleMiteredClick","handleUnderlaymentClick","SQFTFeaturesHeader","isFiltersOpened","protoTypes","featureTitleId","LookListMainFeature","withShipping","bundleExpanded","setBundleExpanded","outOfStock","expandBundleButton","isBundle","inStock","isBundleParent","HomeButton","MobileMenu","bvDataPart","showSubNav","getMenuItems","smallButton","smallButtonClassName","FeatureInfoPrice","mainFeaturePrice","showDiscount","unitAfter","accItemQuantity","salePercentage","priceOld","getListItemHeight","itemsList","widthPercentage","shouldReplaceSelectionInfoFeature","featureG","SelectionGridItem","goToFeatureInfo","wizardSkipAndAddToCartButtonVisible","quoteOrUnlockButtonVisible","isAddToCartButtonVisible","infoButtonVisible","handleFeatureClick","shiftFilterTitleInterface","shiftTitleIndex","elementIndex","positionTop","columnPosition","HardcodedCanvasImage","setStaticCanvasImage","currentQtCat","onLoadStart","retryConnectionClick","clipPath","LookFeaturePairPrice","GroheFeatureSQFTButton","featureOpened","handleSQFTButtonClick","shopState","GroheFeatureSoldOut","setGroheWizardOpened","wizardOpened","setGroheWizardName","wizardName","setGroheWizardStep","LookMainCategory","lookViewTypeWasChanged","navItemsLists","setNavItemsLists","firstOpenedFeature","setFirstOpenedFeature","firstOpenedConditions","setFirstOpenedConditions","shouldRunAnalytics","setShouldRunAnalytics","prevActiveCategory","setReceivedFeatures","clickedOnItem","navItemIndex","currentPositionInList","nItemsLists","firstLockedIndex","firstUnlockedIndex","withGrid","reqFeatures","desRecNavItemList","navItemList","regularNavItemList","notMatchingNavItemList","scrollObject","onEventScrollHandler","LookFeatureRevertButton","revertButtonClick","zoomToFeatureGroup","LookWizardContentButtons","onSkipClick","previousClick","nextClick","skipEnabled","isCompletedStep","nextDisabled","reducers","combineReducers","docuSignState","groheQuotingToolState","historyState","sqftTutorialState","updateFeatureCount","overflow","route","isTouch","javascriptErrors","handleToggleUserPopup","urlLanguage","urlTheme","bvData","newQuoteData","groupedFeatures","groupedFeaturesDescriptions","introVideoStarted","introVideoFinished","initialRoute","imgUrl","d3_geom_contourDx","NaN","d3_geom_contourDy","grid","d3_geom_contourStart","pdx","pdy","_slicedToArray","arr","iterator","_arr","_n","_d","_e","_s","_i","sliceIterator","promiseTypeSuffixes","defaultTypeSuffixes","_promiseTypeSuffixes","PENDING","FULFILLED","REJECTED","isPending","isFulfilled","isRejected","actionScope","meta","lightBlue","bold","getStyles","Font","family","StyleSheet","paddingTop","paddingBottom","paddingHorizontal","header","marginBottom","flexDirection","alignItems","justifyContent","headerInfo","headerLogo","flex","headerLogoAS","paddingLeft","paddingRight","headerLogoImage","alignSelf","objectFit","headerText","headerTextBold","specSheet","headerTextASSheet","headerTextASInfo","headerTextValue","sectionRight","borderBottomWidth","borderBottomColor","borderLeftColor","borderLeftWidth","borderLeftStyle","roomTitle","textTransform","roomBody","subPartTitle","marginRight","marginLeft","borderWidth","borderColor","borderRadius","flexBasis","flexGrow","flexShrink","borderStyle","cartItemSimilar","cartItemSimilarTitle","cartItemSimilarTitleBundled","cartItemBundled","cartItemSimilarTitlePadding","cartItemSimilarContent","cartItemSimilarContentCell","cartItemSimilarItem","borderBottomStyle","cartItemSimilarItemNoBorder","cartItemSimilarItemBlock","cartItemSimilarItemName","cartItemSimilarItemLabel","cartItemSimilarItemPrice","cartItemSimilarItemExample","roomTotal","marginVertical","roomTotalSecond","roomTotalText","roomTotalAmount","footer","footerLeft","marginHorizontal","totalSectionFirst","totalSection","totalSectionText","totalSectionAmount","totalSectionFinal","totalSectionAmountFinal","bottom","signature","signatureText","borderTopWidth","borderTopColor","borderTopStyle","signatureImage","width100","flexRow","flexColumn","flexCenter","marginT5","marginT8","marginT10","marginT16","marginT20","marginT30","marginT40","marginB5","marginB8","marginB10","marginB16","marginB20","marginB30","marginB40","marginL10","marginL20","marginR10","marginR20","discountDeposit","discountPercent","financeCell","financeCellMonths","financeCellText","PrintDocumentHeader","logoView","jobInfoView","toLocaleDateString","toLocaleTimeString","PrintDocumentInfoFabricator","mainAddress","addresses","adr","addressType","ADDRESSES_TYPES","Shipping","provence","contactEmail","emails","emailIndex","Billing","PrintDocumentBody","getGroupName","fixedPrice","uniqueCartItemIds","showWizardSteps","differentCurrencyObjects","currentCartItems","slabsCartItems","mainCartItems","subPartIndex","currObject","currentTotal","PrintDocumentBodyBundledCartItems","bundleCartItem","PrintSimilarProducts","insideQuote","featureCollectionIndex","lastItem","PrintSimilarProductsListItem","interceptors","use","toJSON","apiResponseError","apiGet","apiPost","sqftCursorManager","currentCursor","noCursorStealing","prefix","setPoint","cornerMargin","radiusLetter","dstring","Fraction","mtext","tLen","SpacersController","isNotCreatedSpacerExist","getIsCreated","Spacer","isCreated","createShapeFromSpacerPoints","getPointsToTheMouse","point3PointField","point4PointField","topLeftPoint","adjustedShapePoints","sortedPoints","newShapePosition","spacerShapeId","spacerShape","setCreated","renderLinesToMouse","betweenPoint1","betweenPoint2","distanceFromMouseToTheLine","pointLeftRightPosition","parallelPoints","ModelCorePoint","_x","_y","_mixins","setOuterShape","renderMeasurementsInsideShape","outerShape","renderSVG","RenderMeasurementsInsideShape","updateLinePoints","imageCenterPosOnField","imageCenterPosOnShape","imagePosOnField","imagePosOnShape","sideImagePoints","getImageSidePoints","lineStartVerticalOnImage","lineEndVerticalOnImage","sideShapePoints","getShapeSidePoints","lineStartVertical","lineEndVertical","renderLineToBorder","renderArrowLineToCenter","intersectionsWithShape","sideShapePoint","intersectionsWithImage","sideImagePoint","imageLine","closestPointPairs","entries","closestPointPair","startPointField","endPointField","betweenPointFrom","betweenPointTo","imageCenterPosOnShapePointField","lineStartHorizontal","lineEndHorizontal","lineStartHorizontalOnImage","lineEndHorizontalOnImage","intersectionXPointAndLine1WithImage","intersectionXPointAndLine2WithImage","intersectionXPoint1","intersectionXPoint2","intersectionXPoint1PointField","intersectionXPoint2PointField","measurement1Distance","measurement2Distance","measurement2BetweenPointTo","measurement2BetweenPointFrom","imageCenter","imgOffset","renderHovering","containerSize","getContainSize","drawBorder","aspectRatio","renderAttachedTo","MiteredSegment","_length","parentShape","attachedToLineResource","getBacksplashesPos","getSegmentById","getBumpoutPointCords","posOnFiled","getShapePosAndPoints","underlaymentPoints","getWaterfallPoints","addMiteredEdgesToWaterfallShape","miteredEdge","waterfallShapes","edgeParams","miteredEdgeDistance","SlabAdditionalShape","getShapeAdditionalShapes","findOneByBacksplashShapeId","activeBacksplash","disallowDemo","hoveredLineCorner","featureNameTranslated","StaticImage","beforeRenderCallback","getHoverArray","SQFTShapeOffset","animationPoints","offsetPoints","calculateOutlineV2","parentPoints","setLineDash","calculateOffsetPoints","offsetDistance","dir1","dir2","norm1","norm2","avgNorm","unitNorm","originalShapePoints","newShapePoints","getTime","elapsed","interpolatedShape","pointNew","pointOriginal","outlinePoints","nx","ny","listeners","eventName","LineImage","updatePosInsideShape","lineLengthText","prevValue","angleInRadians","posXDiff","posYDiff","currentSize","newImageWidth","newImageHeight","testNewImageValue","parallelLine","getParallelLine","updatePrentSize","SimpleLine","initLineLength","setLineLengthFromNumberValue","isMouseOverLineV2","lineBordersArray","lineHoveredArea","isMouseOverLine","moveLineWithMouse","imageState","pointFieldFrom","pointFieldTo","ShapeRotatable","initCornerBorderPoints","hideShapePoints","__cornerPoints","rotateToPointAngle","shapeCenterOnField","movablePointOnField","shapeZeroAnglePoint","rotateToAngleIn360","rotateToAngleWithoutHoveredPointAngle","normalizedRotateToDegreesValue","getCornerPoint","displayValueInPopup","getCornerPoints","getCornerPointsPointField","cornerPointsPointField","renderFramePoints","cornerPoint","HandlesController","addHandleToTheShape","findGLBModel","suffix","glbModels","modelWithSuffix","LineHandlesModel","lineId","handleId","WallsController","searchPoint","ShapeColorsController","defaultColorSets","getShapeColorByFeatureId","createShapeColor","g","getResourceById","baseColor","generateRandomRGB","shapeColorModel","ShapeColorModel","WaterfallController","addWaterfallToStore","waterFallOverlay","waterfallOverlaySegment","changeWaterfallSectionInStore","waterfallSectionData","segmentController","WaterfallOverlay","createPeninsulaUnderwrapSections","createWaterfallSections","getEnabledSegments","addSegment","segmentData","waterfallLength","underlaymentLength","isLineInWesternHemisphere","defaultCabinetReturnLength","defaultOverhangReturnLength","cabinetReturnLength","overhangReturnLength","parentSection","COMMON_HEIGHT","USE_DEPTH_INSTEAD_OF_HEIGHT","USE_LINE_LENGTH","overlayId","setIsDisabled","WaterfallSegmentController","parentController","changeSegmentLength","segmentId","postChangeValue","changeSegmentHeight","updatedSegment","changeSegmentThickness","changeSegmentIsDisabled","RemovedFeaturesController","SnappedShapeGroupsController","addNewSnappedShapeGroupNumber","newNumber","snappedShape","snappedWithShapeGroup","groupNumber","shouldUpdateAbsolutePos","aPos","bPos","visitedShapes","Set","resetShapesSnappedGroups","has","updateGroupForShapeAndConnected","connectedShapes","connectedShape","snapPossibilitiesToWalls","distancesToWalls","getDistancesToWalls","itemBoundsWithSamePartId","getItemBoundsForTheSamePartIdIfExist","absolutePosToWalls","snappedShapeIds","snappedShapeFromAllPossibilities","snapPossibility","SelectedShapesController","clearSelection","removeAllResources","Images3dController","isFitLineLength","isFitSiblingLineCorner","isFitBumpout","isFitPontDistancesToCornerLine","isFitByAngleBetweenLines","isFit","getBumpoutTextParameter","length4to","minDistanceNeeded","prevLineLength","isEditInputDisplayed","hoveredColor","originalLineText","lineTextResized","lineText","lineType","offsetFromLineEnd","getLine","getHoveredArea","rotatedPoint1","rotatedPoint2","pointToRotate3","rotatedPoint3","pointToRotate4","rotatedPoint4","getLineDistanceFull","roundedDiff","getAdditionalLineDistance","getCtxColor","getMidpoint","getLineLengthText","getLineDistanceFullInPixels","lineLengthInPx","additionalLineDistance","additionalDistance","orientationValue","space","medgeText","fromPosOnField","marginTotal","renderHoveredArea","hoveredArea","getFrameBorderPosition","minBumpoutSize","bumpoutTextParameters","lengthFrom1","length14","length34","bumpoutLines","flipPoints","biggestPoint","smallestPoint","stopPoint","move23Point","parentLine","lengthMidPoint","createBumpoutLines","bumpoutPointsCords","importPoints","bumpoutFeature","isFeatureExist","bumpoutData","bumpoutPoint","getBumpoutLength","bumpoutDistance","lineLengthInches","lineLengthMm","bumpoutLength","resizeBumpoutPart","vectorAB","vectorADrag","crossProdZ","drawBumpoutRect","renderMeasurements","bumpoutXOffset","bumpoutYOffset","pointDistance34","renderHorizontalText","renderRotatedText","bumpoutTextParameter","textToRender","pointArea","isMouseOverRect","textOrientation","inputPosition","inputClass","scaledValue","Color","LineAttachmentsComposite","component","execute","angleValue","tempLinePointFrom","tempLinePointTo","getRotationCentrePointByBottomLine","ShapeSlab","__seamTool","renderSeamLinesOnHover","renderSeamCutPoints","seamToolRender","renderSeamVerticalIntersection","renderSeamHorizontalIntersection","seamCutPointOnField","startPointOnField","endPointOnField","__measurementArrows","_shape","absoluteLinePoint1Pos","linesWithoutAnglePoints","seamShapesPoints","splitShape","createShapesFromSeamPointsAndSetSlabRotation","parentShapeCenter","seamPoints","isBacksplashPiece","preparePointCords","rotatedDiffPos","parentSlabAdditionalShape","newSlabAdditionalShape","setSlabPos","shapePieceCenterPointBeforeRotation","reqRotatedDegreesToZero","shapePieceCenterPointAfterRotation","coreShapeAbsolutePosition","slabAbsolutePosition","setParentId","seamPoint","splitOnlyOrientation","piece1Points","piece2Points","intersectionNumber","filterEqualAndPointsOnTheSameLine","isEqual","isOnTheSameLine","ip","seamTool","__measurement1","__measurement2","absoluteLinePoint2Pos","distancesToLines","getDistancesToPoint","snappingPossibilitiesToLines","getSnappingPossibilitiesToLines","renderSeamDashedLine","horizontalLinePoint1","horizontalLinePoint2","renderSeamArrowLine","intersection1","intersection2","intersectionYPoint1","intersectionYPoint2","intersectionYPoint1PointField","intersectionYPoint2PointField","mousePosOnShapePointField","measurement1Midpoint","measurement2Midpoint","measurement1Pos","measurement2Pos","removeOverlappedWithShape","overlappedId","restoreShapePosition","memory","shapeSlabAbsolutePos","shapeAbsolutePos","ShapeRender","renderRegularShape","shapeDesign","hoverLine","shapeState","VanityHandle","toggleVanityParts","VanityCabinet","canUseWizard","toggleLayerPositions","updateSink","updateVanityParts","getfilterValueIdByValue","placeholderAvailableFeatures","Other","windowNeededLayouts","BathTubLiner","navigationSubItemsWithSides","setShowerSize","WalkInTubFixture","ReplacementTubFixture","layerPriority","ShowerScreen","FrontWall","SplitWall","LeftWallSplitter","ShowerGlass","ShowerBody","loadedShowerBody","loadShowerDimensions","loadShowerMetaData","loadThumbnail","bathTubBase","availableFeatures","showerPanCondition","showerBodyParent","showerBodyThatFits","showerSizeValues2","condValue2","shBody","showerBodyToSet","comboParent","clickedPosition","nameSplitted","nameSplitted2","size2","CornerShelf","showerPodParent","windowParent","ToiletBrush","toiletParent","RobeHook","TowelRing","GlassHolder","TowelRack","Wainscoting","TowelTowelRing","towelRing","TowelTowelBar","TowelTowelHook","hardcodedSkus","finalNavItems","forMeta","leftNavItems","existingNavItem","setAdditionalMetaData","setDefaultAccordingToPreviousSelect","rememberPreviousSelection","compatible","ShowerFloor","thresholdAvailableFeatures","currentFloorName","sameThreshold","showerDoorParent","currentShowerPanCondition","showerFloorAvailableFeatures","currentThresholdName","sameShowerFloor","navItemFloor","setArmHeadType","ShowerArm","ShowerHeadBundle","TubSpout","HandShowerKit","ShowerCurb","BodySpray","DiverterTrim","HandShowerHolder","HandShowerOnly","ShowerHose","ShowerSystem","ShowerTrimKit","ValveTrim","WallUnion","removeInterferingParts","cornerShelf","FloorBody","compareMountPosition","dbFeatureLoading","checkForExistingDecor","currentDecorFeatureGroup","decorName","toiletPaper","decor1","showerWallMirror","lamp","mirrors","decorCount","Attachment","currentConditions","selectFrom","attFeature","alreadyAddedFeature","Decor","needShowerSizeMeta","ShowerWallMirror","enclosureTop","enclosureBottom","skirtingBoard","EnclosureTop","EnclosureBottom","SkirtingBoard","table","chair","carpet","basket","frame","plant","Table","Chair","Carpet","Lamp","Basket","Frame","Plant","VanityCountertop","activeMatchingSink","activeMatchingSinkSku","getActiveSkuFromRelatedItem","shownFeature","sinkFeatures","MountType","alreadyExistingIndex","shouldCheckSize","currentActiveMatchingFeatureSku","currentActiveMatchingFeatureMeta","sinkSku","currentMatchingMatchingFeature","currentMatchingMatchingSku","setVanityOnly","getNextVanityTypeFeature","setActiveFeatureByFilter","singleHoleMeta","activeMatchingVanity","activeMatchingFeatures","VanityFaucet","sinkActiveFeature","getMatchingSinks","matchingByCabinetType","withCurrentVanityType","sameCollectionName","sameCustomName","fromWhereToPick","featureToCLick","concettoTMIndex","sinkCollectionName","sinkCustomFullDisplayName","mountHolesMeta","sinkType","mountLevel","waterLevel","Ptrap","VanityWashstand","VanityMiddle","DrawerPull","WSTowelBar","VanityLegs","VanityConsole","DoorHandle","DrawerHandle","ShapeAutoShuffle","shapeToShift","shapeToShiftMeasurementPoints","hoveredLineDirection","hoveredLinePointFromPosOnWorkspace","shapesToShift","shapeCurrentPos","shapeNewPos","isHorizontal","isVertical","angleDifference","originalWidth","originalHeight","upperLeftX","upperLeftY","referencePosition","resultShapes","shapeTopLeftPoint","hoveredShape","calculateNewPosition","moveShapeToPositionAndRotate","getShapesToShift","calculatePositionDiffForOtherShapes","moveShapesToPositions","hoveredLinesShapes","lowestRightmostPoint","snappedShapesWithoutMovingShape","findShapesRightAndBelow","getUrlBase","fetchDataWithCancellation","shouldSaveDataInStore","cancelFetch","requests","Box","_mixin","initPoints","deleteEvents","removeBox","pointsParams","IText","_fontHeight","_hMargin","wMargin","fillStyleGray","fillStyleTransparent","parentWidth","parentHeight","createTextArea","fontFace","wrapWords","fillText","hMargin","textBaseline","spaces","currentLine","words","_modelText","ModelText","_txt","_font","_angle","isNumericKey","isCommaKey","isPeriodKey","isSpace","isSlash","newId","currentShapePosition","cloneShapeLines","cloneShapeLine","currentMovableImagePosition","getText","posText","adjustedSize","rulerSize","ResultImages","dimensionsMultiplier","clippingWidth","clippingHeight","getCanvasScreen","updateCanvasAtStartPoint","shouldReturnToRegularMode","shapesWithoutSlabImages","pointsMinMaxRegular","resultImage","updateCanvasSlab","applianceImages","createdImagesForShapes","applianceImage","outerShapePosition","newScale","startClippingX","startClippingY","updateCallback","srcCanvas","destinationCanvas","destCtx","currentCategory","createShapesFromCabinetSet","positions","cabinetData","TextBoxManager","_textBoxes","getHoveredTextBox","textBox","boxes","FeatureObjectDTO","arrayIds","MARK_UP_APPLY_TO_TYPES","retailPrice","retailPriceAndCost","MARK_UP_PROPS_MATCH","Retail","Cost","Discount","getUpdatedFeaturePriceFromMarkItem","dbFeatureIdString","setFeaturePriceFromMarkItem","markUpListItem","isCaes","priceType","PriceType","Value","setFeaturePriceFromMarkItemQKB","markUpItem","originalValues","markUpObject","fv","pvif","pmt","part2","fridgeConditions","getFridgeWidthAndHeightConditions","widthAndHeightArray","widthHeightConditions","currentHoodWidth","currentHoodNavItems","sameWidth","Oven","Stove","hideLayer","FridgeEnclosure","getFridgeEnclosureSplittedFeatureName","_fridgeEnclosureSplittedFeatureName","FridgeEnclosureHandle","hoodIsVisible","microwaveIsVisible","fridgeIsVisible","TallCabinet","withStoveConditions","withDishWasherConditions","withFridgeConditions","relatedFaucet","mountTypeMeta","EdgeProfile","Cutouts","Radius","currentTopCabinetColor","cabinetFeatures","cabinetFeature","rangeIsActive","PrintDocumentBodyWizardItem","baseInfo","withThumbnail","PrintDocumentTotal","allTaxes","showTaxes","roundedPrice","discountsTotalAmount","currObjectIndex","currencySubTotal","taxObject","taxObjectIndex","taxTotal","taxName","PrintDocumentSignature","formattedDate","toLocaleString","hour","minute","doNotFillNameAndDate","isSignField","hideSignatureField","PrintDocumentDiscountsList","discountSectionIndex","displayDiscounts","discountIndex","PrintDocumentDiscount","PrintDocumentDiscountFinance","financeSection","parsedOptions","propertyIndex","cellStyles","selectedDiscount","getJobRecords","selectedFeatures","lixilCampaignInfo","appointment_date_stc","slotStartTime","appointment_time_stc","lixilData","receiveSmsCheckbox","appForm","saveDataBeforeConverting","timeToPass","splittedTime","parsedUrl","parseUrl","getUserRegisterOrUpdateData","withNewBackgrounds","isBackgroundLayer","multipliers","putImageData","makeHoveringLayerOld","naturalHeight","nextSource","nextKey","triggerEvent","createEvent","initEvent","sanitizeValue","PinchZoom","elText","lastScale","coImage","containerScrolled","timerId","setupMarkup","bindEvents","update","isCloseTo","expected","interaction","zoomOutFactor","minZoom","lockDragAxis","use2d","dragPixelsBeforeClick","zoomStartEventName","zoomEndEventName","dragStartEventName","dragEndEventName","doubleTapEventName","handleDragStart","stopAnimation","lastDragPosition","hasInteraction","handleMove","getTouches","drag","sanitizeOffset","handleDragEnd","handleZoomStart","nthZoom","lastZoomCenter","handleZoom","touchCenter","getTouchCenter","handleZoomEnd","closeToOne","handleDoubleTap","startZoomFactor","updateProgress","scaleTo","getCurrentZoomCenter","swing","allowMoving","withFeatureScreen","zoomOutFromLeft","alreadyZoomed","startOffset","targetOffset","moveContainer","removeContainerScroll","withAnimation","setContainerTransform","moveGroheContainer","percentX","menuWidth","containerTransition","container","getContainerX","getContainerY","maxOffsetX","maxOffsetY","minOffsetX","minOffsetY","needToMoveContainer","scaleZoomFactor","addOffset","originalZoomFactor","lastCenter","getVectorAvg","vectors","sanitize","zoomOutAnimation","isInsaneOffset","sanitizeOffsetAnimation","sanitizedOffset","updateAspectRatio","setContainerY","getInitialZoomFactor","offsetRight","widthOffsetRatio","offsetBottom","heightOffsetRatio","canDrag","posTop","posLeft","framefn","timefn","inAnimation","animateNew","timeFraction","implementation","createHTMLDocument","innerHTML","insertBefore","webkitTransformOrigin","mozTransformOrigin","msTransformOrigin","oTransformOrigin","detectGestures","updateCheck","imgEl","nodeName","getCanvasTransform","targetZoomFactor","useNewScale","offsetY","transform3d","setCanvasTransform","updatePlaned","removeClone","offsetXForContainer","is3d","pointerEvents","WebkitTransition","MozTransition","firstMove","fingers","startTouches","setInteraction","newInteraction","updateInteraction","targetTouches","getDistance","cancelEvent","endTouches","startDistance","calculateScale","definePinchZoom","containerX","scrollTo","behavior","getLayerPartToRender","imageCanvasComponent","ShowerBodyIndexes","ShowerIndexes","missingBodyPart","layerHovering2","layersHoveringItem","missingZIndex","CabinetIndexes","CountertopGroupIndexes","missingZindex","missingZindex2","hoveredLayerIndex2","layerHovering3","hoveredLayerIndex3","needToCheck","layerHov","towelRack","bathtubRim","bathTubSpa","bathTubType_","bathTubParent","walkInTubType","possibleWalkInTubTypes","featurePartName","BathTubBase","sameStoneAsWalls","floorMount","placeTypeGroup","featurePlaceTypeValue","getFixtureType","BathTubRim","BathTubSpa","BathTubTowelRack","CompleteVanity","availableCompleteFeatures","vanityPedestal","handleMeta","hardCodedWizardConditions","VanityPedestal","counterTopsAvailable","LightingFixture","oldVanityType","colorFilter","secondFilter","mathesToCurrentVanity","featureHasFilters","itemA","itemB","tryToSetTheSameFeatureByFilters","setPlaceholderFeature","vanityFilters","matchingFilterFeature","currentNameSplitted","vanityFaucetFeature","sinkSize","getCurrentSinkSize","withSinkSize","isWindowCovering","isWindow","windowDefault","ceilingLight","CeilingBody","CeilingLight","LG","SM","activeShowerPartId","showerBodyActiveFeature","ShowerInteriorWall","wallFeatures","zIndex2","zIndex3","showerSize2","ShowerInteriorWallAccent","doorFeature","checkIfPlaceHolderFits","activeFeatureShowerPanCondition","setNewPlaceHolderFeature","compatibleValue","nameToFind","showerPanValues","showerDoorsThatFits","showerDoorFeature","showerPanValues2","showerSizePassed","showerPanPassed","condPanValue","condPanValue2","sameWallFeatures","showerDoorsThatFit","wallValue","dontFilterByDoorPanMeta","showerDoorType","showerDoorActiveFeature","currentShowerPanMetadata","previousFeature","currentColorArrayValue","colorGroup","existingPans","filteredFeature","filteredFeatureColor","col","filteredByPan","doorCondition","handleCondition","GlobalShadowBody","WallA","WallB","WallC","WallExR","WallExL","shadowSmallRoomName","showerValue","VanityAccent","DesktopNavigation","ponyWallGroup","openContextMenu","updateSideBarIds","sinkSizeConditionValue","tilePatternFilterGroup","acrylicPatternFilterGroup","tileID","acrID","showLockedView","onClickCapture","SidebarClass","getSideBarContent","dni","dniIndex","data-text","FiltersSearch","handleToggleSearch","searchVisible","searchInputNode","handleInputSearchFocus","KeyboardKey","RIGHT_PANEL","NORMAL","NUMERIC","NUMERIC_EXTENDED","PureComponent","BACKSPACE","NORMAL_3","NORMAL_5","NORMAL_2_5","BodyClass","showLoader","itemsDispatcher","level2ItemsNew","level1Items","currentPart","showNavigationFiltersSteps","BodyPanelCheckbox","BodyPanelWizardSteps","BodyPanelNavigationFiltersSteps","setNavigationWizardStep","wizardButtonIndex","countertopWizardPartIds","allowIcons","timeoutId","LookAllWallsRadioButtonSmall","showTooltip","setShowTooltip","getToolTipTranslate","BodyItemsClass","childItemText","renderVirtualizedGrid","menuBody","columnsCount","cloneElement","verticalAlign","BodyItems","column","featureIsEnabledForQt","sameWallAsLeftWall","leftWallName","featureIsFullWall","setFeatureByName","passedName","splittedName","findFeatureByPartName","cabinetLayoutMetaData","getUniqueFeatures","neededType","currentPartName","getTopCabinetCabinetLayoutMetadata","sameCabinetType","alReadySplitted","applianceType","doorSet","zIndexBox","activeFeaturePartIndex","currentModuleSystemNumber","modulePartSplitted","moduleMatchingPart","topCabinetApplianceType","getTopCabinetApplianceType","allowedPorticos","backsplashActiveFeature","matchedByName","zIndexBox2","featureFilterValueIDs","findFeaturesByModuleSystem","fPart","matchesInlayType","inlayTypeName","getFilterGroupObjectByInlayType","getFilteredFeaturesByTopCabinetFilters","activeTopCabinetFilters","woodTypeFilter","stainColorFilter","featureIsMatchingFilters","matchesByMetaDataAndFilters","filteredFeaturesByTopCabinetFilters","hoodType","isHood","isMicrowave","topCabinetConditions","matchingCabinets","getFeaturesMatchingAllCabinets","featuresMatchingAllCabinets","ignoreConditions","getTopCabinetType","getTopCabinetShadowLayout","ignoreAppliance","getBottomCabinetApplianceType","fromFeatureFilters","edgeFilterGroupId","realActiveFeaturePart","featureIsMatchingEdgeFilters","currentCheckFeature","currentFeatureEdgeFilters","relatedSink","existInSomeLayout","currentLayoutAbbreviation","getCabinetType","getChairType","FeatureWizardBody","getFilterValueObjectById","neededImage","filterValueIds","getFeatureWizardBodyItem","bgFilterName","backGroundSizeCover","selectedFilterValue","renderItemsList","currentValues","setCurrentValues","selectedId","selectedA","selectedB","FeatureWizardBodyItem","FeatureWizardSelection","setWizardValue","clickedFilterValue","setAllItems","FeatureWizardSelectionItem","activeScene","setActiveScene","RoomSceneNavigationItem","imageResponse","roomSceneClick","DesktopNavigationLayoutsContent","allowLoading","setAllowLoading","timeoutRef","MobileNavigation","showerGroup","MobileNavigationBodyNewClass","itemClicked","showMobileMenu","menuList","MobileNavigationBodyNew","MobileParentNavigationItems","parentItemClick","parentItemIndex","QuoteButton","DesignButton","toggleDesignList","designListOpened","handleDesignButtonClick","analyticsEvent","handleDesignResetClick","MinimizeButton","backToQuote","csvRows","blobConfig","encoding","msSaveBlob","DemoPoint","setNotesToFeatures","notesFeatures","notesFeature","hasMultipleVisualizers","loadFeaturesAndNotesForMultipleLayouts","featuresToReturn","differentVisualizers","recordIndex","arrayOfFeaturesIds","currentObject","forLayout","nextBvState","getBvStateProperty","isDesignOnly","firstRecord","loadedFeaturesFromJob","rec","recIndex","allWizardValues","restoreCartFeatures","allDiscountSections","sameDiscountSaved","selectedDiscountSection","discountSectionFound","discountFound","disc","savedCountry","jobMarkUp","baseboard","ceilingHighlights","ceilingLights","decor2","decor3","countertopGroup","alreadyExistingGroups","receiveBackSplashes","isCenterIslandDecor","IslandHood","Pendants","RightIsland","activeType","alreadyAddedFeatureIndex","alreadyAddedIndex","matchByType","matchByCabLayout","getBacksplashNavItems","sameNameOnly","updateRadio","handleRadioButtonClick","checkRelatedFeatureGroupPositions","filteredAvailableFeatures2","featuresToDisplay2","feature2","countertopSize","partsLayouts","partsRoomLayouts","pl","isPartsLayout","lightFixture","showOnLayouts","showPositionPopup","NavItemPositionModalButton","setChecked","positionName","getPositionName","isChecked","buttonClick","fromConflictingPopup","callConflictingPopup","checkForSameMountPosition","togglePosition","checkRelatedFeatureGroups","checkCenterGrabWall","checkboxDisabled","applyConflictingPosition","NavItemPositionModalSlatWall","isCurrentFeatureActive","getSlatWallButton","checkForContextMenu","hoveredPartId","needToRequestFeatureGroupsOnClick","ContextMenuQKBButtons","vanitySubMenuOpened","setVanitySubMenuOpened","contextButtonClick","vanButtons","openPartId","regularSink","isVanityParent","FireplaceParent","Furniture","worktop","cabinetLeg","hook","tallCabinet","tallHandle","tallCabinetLeg","CabinetLeg","Hook","CabinetGroup","SlatWall","isMainFeature","OverheadRack","TallHandle","TallCabinetLeg","BottomCabinetLeg","attachment1","allVisualizersPresets","renderSteps","userPopup2FAOpened","userSchedulerOpened","getDefaultCountry","countries","areaCodes","GBP","PLN","CAD","USD","edittoken","showPrivacyPolicy","confirmedAssign","twoFALoading","twoFAToken","loadFilterGroups","filtersCount","isNewBathroomOrKitchen","removeTutorial","_show","oldPage","isSignaturePadVisible","signaturePadTag","invoiceNumberOfPages","jobDocumentUrl","contractLoading","discountsReceived","advancedQuotingSearchItem","filteredResource","resourceTypes","filteredMiteredSections","removeMenuFromState","defaultCompatabilityObject","lookActiveFeatureStockCount","newScene","itemsToRemove","colors","featureGroupCount","anchorDbFeatureId","lastOpenedFeature","cardInfo","cardNumber","cardName","expMonth","expYear","cvv","selectedShippingAddressIndex","selectedBillingAddressIndex","lastState","getLastVisitedShopPage","withFeature","currentPage","UserFieldErrors","setTerms","privacyPolicyUrl","getPrivacyPolicyUrl","termsResponse","anchorScroll","anchor","closeLixilUi","leaveSqft","customerInterface","employeeInterface","customerError","subPartIsDone","relatedIem","SubPartDoneCheckMark","SqftFeaturesPopup3dButtons","threeDButtonClick","arButtonClick","threeDButtonID","augButtonID","setNewLayout","setNextLayout","shapeSize","setRoomLayouts","updatedRoomLayouts","roomLayoutIndex","roomIndex","expanded","buttonRefs","shapesLength","data-side","data-layout","shouldGetModelsOnlyWithThirdPartyAR3DUrls","featuresData","setFeaturesData","setIsLoading","newFeaturesData","rows","newViewType","getViewIcon","SqftOptionsRelatedItemList","shouldSortByWidth","activeItemIndex","setActiveItemIndex","containerRef","containerHeight","setContainerHeight","setParentFeature","setWidth","setupResizeObserver","resizeObserver","ResizeObserver","currentContainer","observe","unobserve","expandedGroheFiltersSearchText","relatedItemsList","emptyUrlsLog","LookVirtualizedListLoadingItem","LookFeaturePriceLocked","LookFilters","wrapperStyles","isRelatedItemsFilters","shouldCloseLevel3Sidebar","LookPolicyLinks","isSimple","useLocation","openLink","linkKey","ancestorOrigins","openUrl","sessionEnded","tempId","stringifiedParams","withHashUrl","LookSidebar","popupCloseClick","highLightForDemo","stylePopups","stylePopupOnMobile","popupType","sidebarButtonClicked","showRoomLayoutsButton","setInputValue","sendAuthRequest","TwoFaCodeInput","setAuthCode","inValidCode","setInValidCode","isBlurred","setIsBlurred","checkCode","newAuthCode","currentLocation","LookWizardSectionListFeature","applyWizardItemClick","propToMatch","nameLength","ShoppingCartButton","dropdownVisible","setDropdownVisible","activeLanguage","newVisible","languageIndex","handleLocaleClick","getLanguageName","toggleShowAdvancedQuoting","setAdvancedQuotingSearchItem","InstView","closeInstallationView","unmount","FeatureInfoPriceLocked","handlePriceLockClick","FeatureInfoDescription","pros","SelectionGridWizardGroupItem","isRowItem","wizardItemClick","clickOnLogic","NotInVisualizerView","getThumbnail","allVisualizerNotAvailable","goToBV","checkForDeletePopup","fromDelete","removeCartItemsWithQuoteIndex","cartItemsToRemove","checkForWizardPreviousChanges","LookFeatureNotInStock","GroheCategoriesMenu","isAccessory","showWizardItems","isShopPage","lmFeature","ACCESSORIES","acc_groups","GroheVirtualizedList","mainContent","parentPositions","loadScript","script","readyState","onreadystatechange","GroheCartColumns","isShort","instTaxes","showInstTaxes","showTotal","LockedPrice","getTaxColumn","LookWizard","closeCompatability","wizardSections","LookCompatabilitySection","compatabilityContentElem","closeButtonClick","opera","isInstagram","isFacebook","handleBackToDashboard","salesForceLoaded","sr","QCJobId","eventPayload","Sfdc","publish","sfdcMessage","handleSaveAndBackToDashboard","VIEW","steps","TwoFactorAuthClass","getDialogContent","getVerifyPhoneNumberContent","getTermsAndConditionsContent","getUpdatePhoneContent","handleResendSMS","handleResendVoice","handleCheckVerificationCode","validating","handlePostPhoneNumberUpdated","valid","handleUpdatePhoneNumber","setOldValues","phoneUpdateError","revertUserValues","oldPhoneNumber","getDialog","popupStyles","ConfirmPopup","handleApply","confirm","closeSQFtCalc","allowDelete","declineFunction","getConfirmMessage","MobileRotateButton","getIcon","getLogo","AssignQuoteVirtualizedList","selectEntity","activeEntity","noEntitiesFound","contentDimensions","hideEmployeesColumn","scrollToIndex","setScrollToIndex","prevEntity","scrollToIn","rowRenderer","customer","wrapperRef","handleClickOutside","MaterialsWizardFooterStepThumbnail","handleCloseSQFtCalc","SqftPopupWindow","isIsland","ManualCalculateSwitcher","sideBarButtons","blockStyle","exporter","gltf","ThreeDWorkspace","useCabinetLoader","MultiLoader","qrImage","setQrImage","arUrlForGlbFIle","extractedString","getARUrlForGlbFile","imageDataUrl","getDeviceType","DEVICE_TYPE","Android","iOS","unknown","getArButton","ARButton","makeImage","ARButtonGoogleWebXR","modelViewer","activateAR","contextMenuType","backSplashFeature","setBackSplashFeature","SqftOptionsLoading","FeaturePriceInput","priceEditing","setPriceEditing","hidePrice","togglePriceEditing","handlePriceOnChange","newAmount","NavMiteredSection","sectionName","SEGMENTS","debounceRequest","ended","debounceFn","fullWidth","LookFiltersList","wizardFeatureGroup","setActiveFilterId","availableFilter","isExpanded","underscoredText","expandIcon","aria-controls","GroheFiltersValues","filterValueText","resetFilterClick","getWindowDimensions","windowDimensions","setWindowDimensions","canvasSrc","setCanvasSrc","LookListContent","LookListContentHeaderRightSide","saveButtonClick","leadPopupWasOpened","setLeadPopupWasOpened","shouldOpenLeadCapturePopup","itemsToCount","hideTotal","hideCheckout","openMiniCartPostMessage","viewCartClick","addToCartPostMessage","leadCaptureTimeoutId","checkoutClick","lookListRequestQuote","downloadAllFeatures","useFeaturesRoomLayoutsChecker","fgObject","needToRequestNames","featureGroupObject","LookListFeatureCheckmark","getUnlockCalculationsCartItems","runAnimations","animateCartItems","exitAnimations","LoadingDots","LookListActiveFeatureMobileButton","InstallButton","fabSettings","ProjectScopeMobileHeader","ProjectScopeSections","updateSections","goToMaterialsPage","checkForWallsComplexGroup","wallsSubPart","qtCatSubPart","FeatureInfo","getDefaultFeatureQuantity","defaultOrPositionsQuantity","handleChangeItemQuantity","handleSQFTCabnetButtonClick","getFeatureModules","materialsQuantityIndex","mQuantity","showRecentlyViewedItems","navItemParent","changeActivePartRelatedItem","nextActivePartRelatedItemIndex","existInCart","associatedProduct","showFeatureModules","availableMeasureUnits","lowerCasedUnit","um","defaultMessage","isPriceUnlocked","FeatureInfoBrand","featureBrandValues","brandFilterValue","SelectionMainList","currentParentText","itemClickCountQuote","updatePositions","listItemHeight","deleteNotInVisualizerFeature","wizardSubStepIsActive","existingWizSetup","unlockedIndexes","$gridBody","isRowView","setRef","showItemsList","setRelatedStones","checkForDisabled","wizardClickOnLogic","clickLeadCaptureOnQuote","clickLeadCountOnQuote","checkIfNeedToSwitchRoom","handleOnMobileGridScroll","ceilScrollWidth","floorScrollWidth","ceilScrollLeft","floorScrollLeft","showListForce","currentFeatures","scrollElement","handleOnDesktopGridScroll","changeSet","renderVirtualizedList","isFinished","enableForQuoting","RowItem","isRelated","FeatureCartItemsCount","matchingCartItems","getAddedCartItemsCount","WizardFilterItem","SelectionGridFiltersTitle","filterTitle","allTitles","filtersGrid","isTopTitle","prevTitle","renderFeature","titleIndex","nextTitle","scrollToTitle","scrollToPosition","arrowUpDisabled","arrowDownDisabled","data-title","getWithFilters","withFilters","filtersLoading","materialFilterGroup","caesProfiles","countertopFilters","useGetFiltersRequest","useRequest","requestFilters","filtersLoaded","setFiltersLoaded","checkFilters","GalleryViewClass","handleCloseClick","galleryOpened","thumbnailClick","activeImage","gIndex","showFeature","SelectionDescriptionCover","prevActivePart","coverText","setCoverText","showCover","descText","player","play","playsInline","autoPlay","SelectionMainHeader","handleChangeListView","subPartPartId","showBacksplashSelect","showDisabledRadioButtons","SelectionFooterSubParts","scrollToActiveSubPart","animationTime","footerList","maxScroll","scrollIndex","neededScroll","handleFooterListScroll","shadowLeft","shadowRight","updateItems","setRelatedItems","getSubPartsList","withShoppingCart","itemIndex","handleFooterButtonClick","MaterialsFooterBackButton","checkForSubStepChange","subStepChange","MaterialsAgentTutorial","materialsAgentTutorialTimeoutId","setButtonsPositions","resizeId","MaterialsWizardFooterSteps","isShoppingCart","scrollElementRef","stepDisabled","quantityIsZero","$scrollableInfoArea","getCurrentRelatedCartItems","arrayToAddtoTheCart","relatedGroup","relatedItemCartObject","getCartFeatureParentName","ShoppingCartItemsList","switchToMaterialsPageGroup","listItem","neededQtCat","sIndex","setFeatureGroupCustomName","createCommonParentsList","quotesList","cartList","addToCartList","featureGroupDisplayName","getCartItemsList","quotesListArray","isAddMoreDisabled","editFeatureGroupClick","editCartItem","index2","getInstallations","separateLaborInCart","instItem","instItemIndex","getTaxes","ShoppingCartItemsListItem","editorVisible","editorCanRender","handleRemoveClick","handleEditClick","handleAddNoteClick","onNoteSave","editingPriceAvailable","priceIsLocked","neededObject","wizValueObject","selectedWizValues","itemTitle","hasBundleProducts","closeEditor","parentCartItem","NoteEditor","setNoteText","onNoteSaveClick","ShoppingCartItemsBundledProducts","isAdvancedMode","advancedModeProperties","bundledCartItems","AdvancedQuotingListItem","deleteEmptyCartItem","setQuantity","setEditorVisible","handleNoteButtonClick","setClickedItemActiveQuoteIndex","isSearchDisabled","setParentQuantity","AdvancedQuotingListItemRemoveButton","prevConfirmPopupTag","deleteCartItem","DiscountSubTotal","shoppingCartItem","AdvancedQuotingSubpartItems","advancedCartItems","advancedCartItemsLength","allIds","allSqftIds","setCartItems","addEmptyCartItem","keepPrevious","currentCartItemsList","isAddProductButtonVisible","SimilarProducts","similarOpened","setSimilarOpened","updateState","RecentlyViewedItems","renderEmptyItems","emptyItems","recentlyItems","minItems","emptyItem","ShoppingCartFooter","finalButton","saveButton","renderFooterLeftSide","firstKey","showPriceWorksheet","finalButtonElement","saveButtonElement","activeButtonIndex","dropDownHeight","setActiveButtonIndex","clickFunction","ShoppingCartTotalColumns","showIncluded","avgPerSqftPrice","showAveragePrice","ShoppingCartCanvas","setStateLayers","openVisualizer","ImageCanvas","ShoppingCartInstallationQuestion","openInstallationView","handleNoClick","updateAllQuotes","PriceWorksheetView","closePriceSheetView","DiscountDropdown","dropdownItems","useIntl","dropdownTitle","UnlockCalculationsTutorialFunctions","runUpdates","updateSureTax","LookCanvas","useReducer","showCanvasLoader","movedCanvasForIntro","shouldOpenWizardItem","imageCanvasRef","GroheFeatureButtons","addToCartGroheButtonClick","continueShoppingButtonClick","changeButtonClick","lockedButtonClick","addToCartButtonTextId","mobileMainButtonClick","requiredFeatures","setRequiredFeatures","selection","selectedWizardValues","wizVal","allQuantity","GroheFeatureTopButtons","threeDDisabled","lixilQRCode","lixilAR3DUrls","hasWizard","contentToOpen","LookLockedButton","GroheFeatureWizardButton","wizardButtonClick","useViewItemAnalyticsEvent","prevActiveFeature","parentClick","hideInMenu","data-key","background","LookMainCategoryLoading","filtersButtonClick","viewButtonClick","badgeContent","invisible","FeatureSubDescription","LookFeatureColorMatchCheckbox","currentColorFeatures","checkboxText","updateAllLookCartItems","featuresToClick","checkboxClick","setSameColorFeatures","setCurrentColorFeatures","checkMatchingFeatures","sectionOpened","notPassedLeadCaptureProcess","checkRedirect","exact","executeAfterRegister","registerButtonClick","registerForm","googleComponentsToOurProperties","LookAddressInput","allowRef","setAllowRef","autoCompleteRef","google","maps","pacContainer","handlePlaceSelect","getPlace","formatted_address","address_components","componentKey","long_name","short_name","handleScriptLoad","places","Autocomplete","setFields","addListener","testCard","replaceAll","amex","visa","cup1","cup2","mastercard","mastercard2","disco1","disco2","disco3","diners","jcb","_getSvgCardIcon","iconName","isDeliveryPage","paymentSubmit","cartCheckoutClick","paymentResponse","transaction_id","transId","GroheBillingAndShippingInputs","setAddressInfo","setAddressErrors","addressErrors","shippingInputChange","checkValue","inputKey","LookInput","endAdornment","skusRequested","firstTimeLoaded","LookRouting","timeOut","lookHistoryListener","categorySet","featureSet","layoutChanged","activePresetState","getPartIdFromLixilCategoryName","allAvailableSubCategories","allAvailableCategories","categoryName","parsedCatName","LookWizardContentCanvas","setTransform","canvasLoaded","setCanvasLoaded","GroheWizardSelectedSteps","stepsContainerElement","useMobile","scrollContainerWidth","amountOfVisibleSteps","LookMainWizardSelectedStep","isProductJourneyDesktop","isProductJourneyMobile","stepWidth","featureIsInStock","notSelected","actFeature","shopContextState","shopContextDispatch","wasShopPage","cartOpened","loadShopPage","createRelatedItems","qtCatResponse","splittedAfterShop","skuId","getFeatureGroupFromUrl","shopCategoryId","getFeatureFromUrl","WithShopFeatureVisualizeClick","visualizeButtonClick","newPreset","ShopFeatureOptionsCommon","withTitle","navItemOptions","activeOption","activeOptionText","LookCartButton","cartButtonClick","showPopper","setShowPopper","prevActiveStep","LookFeature","lookLeadCaptureId","setFeatureGroupName","showSelectWord","useContainerOverFlow","LookWizardCompletedAlertModal","closeWizardButtonClick","getRoomIdeasTranslate","popperStep","roomIdeasButtonClick","buttonTranslate","resetMixpanelId","resetKiosk","ELEMENT","decimalAdjust","exp","predicate","thisArg","searchElement","fromIndex","sameValueZero","kValue","O","relativeStart","relativeEnd","Element","mozMatchesSelector","msMatchesSelector","oMatchesSelector","webkitMatchesSelector","parentElement","floor10","u","global","_toolsProtectJs3","_babelPolyfill","__dirname","filename","process","normalizeArray","allowAboveRoot","up","last","splitPathRe","splitPath","xs","resolvedPath","resolvedAbsolute","cwd","normalize","isAbsolute","trailingSlash","paths","relative","fromParts","toParts","samePartsLength","outputParts","sep","delimiter","dirname","basename","ext","extname","_process","4","queue","draining","drainQueue","currentQueue","noop","nextTick","fun","browser","env","argv","versions","once","removeListener","removeAllListeners","chdir","umask","5","IS_INCLUDES","$this","toObject","toLength","toIndex","TYPE","IS_MAP","IS_FILTER","IS_SOME","IS_EVERY","IS_FIND_INDEX","NO_HOLES","callbackfn","that","assertDefined","ES5Object","7","assert","msg1","msg2","def","fn","it","isFunction","8","enumKeys","T","S","9","TAG","cof","classof","stat","10","safe","forOf","$has","isExtensible","O1","LAST","FIRST","ITER","SIZE","DESC","fastKey","getEntry","entry","getConstructor","wrapper","NAME","ADDER","iterable","setDesc","setIter","iterated","kind","iter","11","$def","P","12","WEAK","LEAK","findFrozen","leakStore","13","BUGGY","species","assertInstance","methods","IS_WEAK","proto","fixMethod","KEY","buggyZero","chain","G","W","F","core","14","assertFunction","15","$redef","own","isGlobal","isProto","16","17","getKeys","getDesc","getSymbols","18","close","19","FW","20","getNames","windowNames","getOwnPropertyNames","getWindowNames","21","un","22","assertObject","23","$iter","SYMBOL_ITERATOR","Iterators","DEFAULT","IS_SET","FORCE","createMethod","$$","_native","_default","IteratorPrototype","getProto","24","SAFE_CLOSING","riter","25","setIterator","getIter","26","createDefiner","toInteger","bitmap","simpleSet","documentElement","getOwnPropertyDescriptor","setDescs","getOwnPropertySymbols","__e","__g","27","28","29","30","invoke","pargs","holder","31","tpl","SRC","_toString","base","inspectSource","32","regExp","isStatic","replacer","33","34","check","buggy","35","36","SPECIES","37","TO_STRING","38","repeat","fillChar","fillLen","RangeError","sFillStr","sFillVal","39","40","defer","channel","cel","setTask","setImmediate","clearTask","clearImmediate","MessageChannel","counter","run","listner","importScripts","port2","port1","onmessage","41","42","sid","43","UNSCOPABLES","44","45","arrayMethod","IE_PROTO","ObjectProto","_slice","_join","getOwnDescriptor","IE8_DOM_DEFINE","$indexOf","$forEach","$map","$filter","$some","$every","Attributes","propertyIsEnumerable","Properties","keys1","keys2","keysLen1","createDict","iframeDocument","contentWindow","write","createGetKeys","Empty","seal","freeze","preventExtensions","isSealed","isFrozen","partArgs","bound","constr","buggySlice","createArrayReduce","isRight","memo","lz","begin","klass","upTo","cloned","arg","reduceRight","brokenDate","toISOString","isFinite","getUTCFullYear","getUTCMilliseconds","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","callee","46","copyWithin","fin","47","endPos","48","forced","$find","49","50","arrayLike","mapfn","mapping","51","setUnscope","Arguments","52","of","53","54","HAS_INSTANCE","FunctionProto","55","56","strong","57","E","EPSILON","EPSILON32","MAX32","MIN32","sign","expm1","acosh","asinh","atanh","cbrt","clz32","LOG2E","cosh","fround","$abs","$sign","hypot","value1","value2","larg","imul","xn","yn","xl","yl","log1p","log10","LN10","log2","LN2","sinh","tanh","58","$Number","toNumber","valueOf","toPrimitive","binary","59","_isFinite","isSafeInteger","MAX_SAFE_INTEGER","MIN_SAFE_INTEGER","60","61","62","63","64","65","Wrapper","setProto","same","RECORD","isNode","asap","testResolve","sub","useNative","works","P2","thenableThenGotten","isThenable","notify","react","fail","rej","$reject","promise","isUnhandled","$resolve","executor","onFulfilled","onRejected","remaining","race","66","ITERATOR","$Reflect","Reflect","_apply","_isExtensible","_preventExtensions","buggyEnumerate","enumerate","Enumerate","reflect","thisArgument","argumentsList","construct","propertyKey","attributes","deleteProperty","receiver","ownKeys","V","existingDescriptor","ownDesc","67","$RegExp","re","CORRECT_NEW","ALLOWS_RE_WITH_FLAGS","flags","patternIsRegExp","flagsIsUndefined","68","69","$at","codePointAt","70","endPosition","71","$fromCodePoint","fromCodePoint","72","73","74","callSite","sln","75","76","77","setTag","shared","keyOf","$create","$names","$Symbol","setter","HIDDEN","_propertyIsEnumerable","SymbolRegistry","AllSymbols","setSymbolDesc","protoDesc","sym","symbolStatics","keyFor","useSetter","useSimple","78","weak","$WeakMap","79","80","$includes","81","82","getOwnPropertyDescriptors","83","createObjectToArray","isEntries","84","escape","85","86","at","87","$pad","lpad","88","rpad","89","$Array","statics","setStatics","90","ArrayValues","NL","NodeList","HTC","HTMLCollection","NLProto","HTCProto","91","$task","92","partial","MSIE","93","94","hasOwn","iteratorSymbol","inModule","runtime","regeneratorRuntime","ContinueSentinel","Gp","GeneratorFunctionPrototype","Generator","GeneratorFunction","isGeneratorFunction","genFun","ctor","mark","awrap","AwaitArgument","defineIteratorMethods","AsyncIterator","async","innerFn","outerFn","tryLocsList","Context","sent","delegate","tryEntries","resetTryEntry","tempName","tempIndex","rootRecord","completion","rval","dispatchException","exception","loc","caught","tryLoc","hasCatch","hasFinally","catchLoc","finallyLoc","abrupt","finallyEntry","afterLoc","finish","thrown","delegateYield","resultName","nextLoc","generator","_invoke","doneResult","returnMethod","tryCatch","makeInvokeMethod","invokeNext","invokeThrow","unwrapped","previousPromise","invokeReturn","enqueueResult","pushTryEntry","locs","iteratorMethod","subscribe","onData","App","BVQuotingTool","setJobIdVisualizerType","jobRecords","getFabricatorData","enableAutoSaveQuote","callRecursiveAutoSave","autoSaveTimerId","disableAutoSaveQuote","setMobileState","handleHeightResize","resizeHeightId","setGlobalHeight","getVisualizer","visMgmt","sessionStorage","CommonVisualizer","ApplyPopup","applyPopupItem","applyPopupItemIndex","handleApplyPopupToggle","applyCartItems","getFeaturesList","filteredActiveApplyPopupItems","allreadyExist","exisingIndex","filteredActiveApplyPopupItem","nextActiveApplyPopupItem","UserPopup","setCanvasImage","handleUserPopupToggle","checkFieldsForErrors","neededFields","handleSubmit","isValidPhone","handleChangeView","handleChangeTerms","termsSelected","setInputFocused","handleAdditionalFieldsShow","twoFAOnClose","cancel","updatedPhoneNumber","getTermsText","getUserPopupTitle","getUserPopupText","textKey","KioskMode","UserFields","dataSet","validation","handleInputFocus","closestLiElement","handleInputKeyPress","which","blurPhoneKeyboard","activeElement","errorsExistFirstName","errorsExistEmail","errorsExistPostal","data-input","data-validation","onKeyPress","ConfirmationScheduleView","selectedDate","aptType","handleMonthDayChange","handleTimeTableTimeChange","handleCancelClick","handleScheduleClick","dateChanged","timeChanged","contextTypes","router","MonthView","handlePrevMonthClick","subtract","handleNextMonthClick","handleDayClick","handleTodayClick","renderDays","mom","dayOfWeek","daysInMonth","today","moreCnt","monthHeaderView","dayView","TimeTableView","handleTimeClick","selectedTime","handleAptTypeClick","renderTimes","endTime","postfix","styleApt","styleHomeEstimate","postFix","MobileRotateButtonIcon","xlinkHref","filterUnits","in","stdDeviation","DocuSignLayer","setupDocuSignForm","docuSignSuccess","hideMe","errorMsg","jsonMatches","jObj","iFrameUrl","allowFullScreen","frameBorder","scrolling","fabricatorWebSiteUrl","newMsgBoxState","DepositPopup","agreeAndContinue","agreeChecked","closeDepositPopup","depositPerc","depositAmount","depositMessage","setContext","isContractSelect","changeContent","saveContract","newContextValues","agreeEmailCheckboxVisible","hideEmployeesList","switchToContract","AssignQuotePopupContent","salesPersons","setSalesPersons","customers","setCustomers","responseReceived","setResponseReceived","empList","customersList","testString","AssignQuoteCustomersList","customerSelected","handleCustomerClick","AssignQuoteEmployeesList","AssignQuotePopupContentHoc","setContentDimensions","assContentElement","setCurrentContentDimensions","AssignQuotePopupNewCustomer","selectFields","getSelectFields","activeContractName","cont","contIndex","getSelectedContractString","AssignQuotePopupNewCustomerInput","requiredFields","AssignQuotePopupNewCustomerSelect","methodIndex","AssignQuotePopupSaveButtons","saveFromAlreadyRegisteredUser","saveFromOfflineContract","newChangesExist","fullNameSplitted","quotesId","fromQuoteId","toQuoteId","showSaveButton","showCheckoutButton","checkoutButtonText","signIsDisabled","AssignQuoteContractSelection","prevIsActive","renderContractList","handleContractCheck","OrderCompletePopup","backToHomeClick","getAnotherQuoteClick","getPopupText","message1","message2","viewInSalesForce","scheduleFlexFinishAppointment","popupText","CookieMessage","cookieElement","checkToDisplayCookie","enableCookiePopup","handleAcceptButtonClick","handlePrivacyPolicyClick","getCookieMessage","setParentsLists","edgesFeatureGroup","edgesReceived","removeDeletedInSQFTFeatures","rebuildQuoteLists","quoteLists","SqftFeaturesPopupApplyButton","skipAddedSteps","applyButtonClick","$scrollToFeature","addedFeatures","newPreviouslySelectedFeatures","prepareSqftFeaturesBeforeAddToCart","findCartItemAlreadyAddedToCart","updateCartFeatureWithSqftFeature","updateCartFeatureWithSqftFeatureWithoutIdUpdate","replaceCartItem","updateCartFeatureWithSqftFeatureWithSqftIdUpdate","cartItemToAdd","addWizardProperties","remember","alreadyRememberedIndex","addCabinetFeatures","relatedGroupsWithNewQuantity","sqftFeaturesPrepared","isFoundById","isFoundByName","neededWizardStep","wizStep","cartItemToUpdate","cartItemsInCurrentQuote","cartItemFeatureGroup","sqftFeatureFeatureGroup","isFoundByDbFeatureAndParentKey","isFoundBySqftIds","SqftFeaturesPopupBody","showNotification","show3dAndArButtons","SqftFeaturesPopupParentList","sqftFeatureIndex","SqftFeaturesPopupFeature","editButtonColor","shouldDisplayEyeball","shouldDisplayEditButton","data-feature","filterNavItemsWithSearch","productText","SqftFeaturesPopupFeatureDropdown","setProductText","ignored","dropdownElement","handleNavItemClick","namesArray","loader","wizNavItems","getNamesArray","SqftFeaturesPopupFeaturePrice","shouldSkipCeilPrice","useSlabPriceCalculation","toFixedFeatureCostParams","featureGroupTotalPrice","quantityToCalculateCost","getFeaturePrice","realUnit","displayQuantity","displayPrice","SqftFeaturesPopupFeatureDeleteButton","actionButtonColor","updatedLists","updatedList","SqftFeaturesPopupFeatureEyeball","openShapeRoom","zoomToSqftFeature","SqftFeaturesPopupParentListTitle","isChangeable","relatedParentPartId","SqftFeaturesPopupTitleFeatureDropdown","featureGroupSubPart","WizardConflictPopupCartItem","wizardSelectedKey","wizKey","runDeclineFunc","stepIndexClicked","defaultCountryValue","CheckoutPopup","scrollIntoView","scrollBack","removeAttribute","updatePaymentInfo","ccNum","paymentAmount","getPaymentAmount","checkoutCallback","offlineRetryCallback","depositTotal","countryIndex","showFake","setShowFake","defineGetter","defineSetter","lookupGetter","lookupSetter","hasOwnProp","oThis","aArgs","fToBind","FNOP","fBound","__defineGetter__","__defineSetter__","__lookupGetter__","__lookupSetter__","propDescriptor","HTML5_DOMStringMap","attrVal","attrName","attribute","attsLength","n0","e1","e2","preBind","currentBindings","CanvasRenderingContext2D","metrics","testWidth","isFloat","roundToPlaces","wholepart","toTeX","mixed","rescale","td","multiply","divide","equals","scalar","scaleup","gcf","primeFactors","factors","_factor","negative","remainder","approximation","countertopArea","setCountertopArea","edgesArea","setEdgesArea","setBacksplashArea","slabTotal","setSlabTotal","countertopMeasureUnit","edgesMeasureUnit","backsplashMeasureUnit","data-action","setActiveColorSet","handleShapeOffsetChange","activeShapeWithOffset","setIsOpened","getTotalItems","getTotalItem","xmlnsXlink","xmlSpace","ChangeLayoutPopup","setNewActiveFeatureInfo","shouldDisplayEdgeColumn","handleAddRow","$selector","dropDownUl","data-content","rowLetter","data-type","handleUpdateClick","handleToggleShowTypeClick","hideRowTypesList","updateRowSelectedFeatureAfterIndex","data-group","data-for","SqftEdgeRowDropdown","componentMeasureUnit","setComponentMeasureUnit","handleChangeMeasureUnitClick","handleSettingsClick","isSave","data-popup-id","data-value","data-step","data-menu","data-set","data-open","popupContent","setPopupContent","SqftFeaturesPopupSaveImageButton","SaveImageButtonClick","renderer","imageDataURL","domElement","screenshotIconStyle","camera-controls","camera-orbit","canvasRef","viewGLRef","onWindowResize","dispose","intensityValue","intensity","setIntensity","newIntensity","updateLightIntensity","handleLightingChange","updateSceneLighting","defaultChecked","THREE","SeparateModelGLBViewer","glbUrl","lightIntensity","spinner","animationFrameId","modelScale","envMap","modelLoader","modelsCenter","modelsSize","loadCountertops","countertopPromises","countertopPosition","getCountertops","loadWalls","wallPromises","wallPosition","getWall","initScene","loadCabinetSet","Scene","camera","PerspectiveCamera","WebGLRenderer","antialias","preserveDrawingBuffer","powerPreference","setPixelRatio","devicePixelRatio","outputColorSpace","SRGBColorSpace","useLegacyLights","toneMapping","ACESFilmicToneMapping","toneMappingExposure","shadowMap","autoUpdate","VSMShadowMap","gammaOutput","gammaFactor","enableDamping","dampingFactor","screenSpacePanning","maxDistance","loadHDRMap","HDR_MAP_LOADER","pmremGeneratorEXR","model","targetLength","Box3","setFromObject","Vector3","loadPromises","loadModel","allSettled","models","totalBox","calculateModelsBox","calculateAndSetCameraPosition","addLightV10","Object3D","expandByObject","copy","near","far","lookAt","updateProjectionMatrix","isMesh","receiveShadow","castShadow","isGroup","isLight","boxCenter","dynamicIntensity","baseHeight","PointLight","ambientLight","AmbientLight","directionalLight","DirectionalLight","addLight","Light","addLightV9","cancelAnimationFrame","ModelLoader","urlToLoad","target_width","getResizedCabinetModel","resizedCabinet","cabinetScene","rotation","MathUtils","degToRad","loadMaterial","loadHandles","materialUrl","materialGltf","traverse","materialMesh","getObjectByProperty","drawerObjects","doorObjects","logMeshes","handleIndex","loadHandle","gltfHandle","drawer","applyHandleAsChild","door","handleMesh","objectPlacement","handlePosition","handleRotation","cabinetPosition","finalHandlePosition","addVectors","handleClone","getResizedCornerCabinet","getResizedCabinet","LineBasicMaterial","geometry","BufferGeometry","setFromPoints","Line","allAssets","hdrLoader","hdrUrl","rgb","rgbeLoader","EquirectangularReflectionMapping","environment","needsUpdate","pmremGenerator","PMREMGenerator","compileEquirectangularShader","hdrTexture","fromEquirectangular","environmentIntensity","exrCubeRenderTarget","newEnvMap","SingleModelGLBViewer","initSceneV2","loadGLBModel","halfHeight","correctGltfProps","addLightV8","envMapIntensity","cameras","boxSize","multiplyScalar","maxSize","lightOffset","intensityScale","maxDimension","lightDistance","verticalOffset","lights","addLightV4","addLightV5","addLightV6","addLightV7","pointLight","floorGeometry","PlaneGeometry","floorMaterial","MeshStandardMaterial","Mesh","floorMat","roughness","metalness","bumpScale","textureLoader","TextureLoader","wrapS","RepeatWrapping","wrapT","anisotropy","sRGBEncoding","bumpMap","roughnessMap","floorMesh","reader","FileReader","onloadend","base64data","readAsDataURL","getCurrentStep","MultiLoaderSteps","shapesData","getAnimationSpeed","baseDuration","animationDurations","startAnimations","transformStyles","finishedIterations","loaderStep","loaderStepIndex","opacityDiff","GLBLoader","updateWorldMatrix","arraybuffer","hiddenModelViewerStyle","ar-scale","touch-action","shadow-intensity","max-camera-orbit","xr-environment","cropperRef","handleSelectSlab","initialAspectRatio","autoCropArea","crop","handleRectClick","imageType","isHeightFocused","setIsHeightFocused","isWidthFocused","setIsWidthFocused","handleSizeChange","rawValue","numericValue","cropper","setAspectRatio","sizeInputError","setActive","checkboxClasses","prepareImageDraw","imageElement","imageSource","croppedCanvas","getCroppedCanvas","imageFile","files","maxSizeMB","maxWidthOrHeight","useWebWorker","compressedFile","domString","handlePlaceholderClick","qtActiveCategoryName","separateSqftLabel","labelName","subpart","contextMenuTitle","contextMenuSelection","ContextmenuList","CONTEXTMENU_WIDTH","CONTEXTMENU_HEIGHT","data-part-id","getMaxWidth","KITCHEN_CONTEXT_MENU_BUTTONS","BATHROOM_CONTEXT_MENU_BUTTONS","CONTEXT_MENU_BUTTONS","SqftContextMenuV2","ChangeValuePopupWindow","defaultOptions","shouldPreventDefault","increaseLongPressEvent","decreaseLongPressEvent","strokeLinejoin","isTouchEvent","onLongPress","shouldLongPressBeContinuous","longPressTriggered","setLongPressTriggered","setHandlerHold","shouldTriggerClick","isSFTAreaGroup","sqftGroup","setSideBarButtons","menuThatStaysOpened","getSubMenuActiveButton","sidebarButton","subMenuActiveButton","submenuButton","setNavigationDisplayButton","preparedSidebarButtons","preparedButton","buttonToDisplay","newMenuButton","newMenu","buttonEls","newButtons","getTranslationId","handleWaterfallClick","addWaterfall_onClick","segName","handleFreeDrawClick","addWaterfallLayout","navItemMitered","shapeName","data-shape","counterTopArea","setCounterTopArea","setBumpouts","setEdges","setBacksplashes","setWalls","radiiCounts","radiusName","radiusDisplayName","anglesCount","angleDisplayName","anglesValue","angleName","messageTotal","bumpoutsArea","selectedEdge","setSelectedEdge","SqftNavEdgesFeature","data-shared-feature-name","setEgeFeature","attachAdditionalResources","edgeNameTranslated","lowerCaseEdgeName","attachEdgeResource","SqftNavEdgesMiteredButton","partIdMap","getFeatureGroupByItemName","getNavItemsWithThirdPartyAR3DUrls","processItemSelection","addBumpout_onClick","resetAllBumpouts","selectedBacksplash","setSelectedBacksplash","backsplashOptions","getBackSplashText","data-backsplash","data-name-metric","SqftNavBacksplashesCustomButton","activeCornersMenu","setActiveCornersMenu","radiusButtonRef","cornerButtonRef","data-href","isRadiiFeatures","radiiNavItems","staticFeature","staticFeatureGroup","getHardcodedRadii","radiiToDisplay","getHardcodedRadiiMitered","imperialRadii","radiiValue","getRadiusFeatureId","cornersNavItems","cornersToDisplay","getHardcodedCorners","cornerToDisplay","drawCornerValue","getCornerFeatureId","setSearchInput","SqftFeaturesChecker","checkSubPart","setDataTransfer","setData","dragImage","setDragImage","onDragStart","mouseEvent","MouseEvent","dragEvent","DragEvent","bubbles","cancelable","DataTransfer","dropEvent","handlePartId","generateHandles","SqftOptionsHandles","activeItem","setActiveItem","SqftOptionsHandlesContent","togglePartId","allowedPartId","SqftOptionsCrown","setRows","listWidth","setListWidth","isActiveItem","NavMiteredSegment","segmentMaxLength","navMiteredSegment","navMiteredSection","underlaymentSection","NavWaterfallSection","waterfallSegmentsData","getTitle","waterfallSegmentData","NavWaterfallSegment","segmentThickness","NavWaterfallSegmentSwitcher","hasMultiplePartIds","featureData","Fragment","shouldShowFullHeight","gridWidth","setGridWidth","SqftNavCustomBacksplashSection","SqftNavCustomBacksplashSegment","setHeightValue","hasRooms","roomsNavItem","QuotesSwitcher","isToggled","setIsToggled","handleDropDownClick","QuotesSwitcherLists","visibleQuotes","startIndex","QuotesSwitcherListQuotes","handleQuoteClick","quoteRoomFeature","loadQuoteToSQFT","visualizerQuotes","QuotesSwitcherListCategories","setQtCategories","categoriesFiltered","isMatchingWithQuote","isRoom","isRoomGroupExist","handleCategoryClick","nextQtCatName","existingQuoteForSelectedCategory","newVisualizer","QuotesSwitcherListRoomGroups","roomGroups","setRoomGroups","roomsNavItemsFiltered","roomNavItemPartName","nextRoomGroupName","existingQuoteIndex","handleItemSelect","handleDropdownSelect","prevIsOpen","onItemSelect","onDropdownSelect","isOpenInitially","Dropdown","isOpen","setIsOpen","internalActiveItem","setInternalActiveItem","toggleDropdown","topCabinetFeature","bottomCabinetFeature","getWorkspace","rest","showSqftTutorial","frameCount","renderTask","slide","ui","slider","setMouseWheel","detail","wheelDelta","scaleMinus","scalePlus","returnValue","resizeTimes","stepText","addImageToBody","nodeKey","tutorialImages","initNodes","translates","setSpecificStepRules","showTimer","ring","setButtonClicks","addCursorImages","buttonNext","addToQuote","addToQuote2","edgeImageButton","showNextStep","resizeLines","edgeClick","showFinishStep","forEver","removeCursorImages","animationFinished","$scrollDiv","moveRing","verticalLine","resizeVerticalLine","resizeVerticalLineBack","horizontalLine","resizeHorizontalLine","resizeHorizontalLineBack","toTheRight","basicX","stopResize","toTheBottom","basicY","timer2","edgesButtonsArray","edgeButton","chapeCount","excludedLines","translatesPath","replaceHtml","updateButtonAddToQuote","allElements","translated","innerText","getTranslationColumn","translationMissingValue","translationColumn","translateEdgeToFrench","edgeSharedFeatureName","isSqftVisited","whitePageRoute","prevPageRoute","LookListLeft","LookListContentHeader","selectAllChecked","LookListMainFeatureActions","LookListMainFeatureActionsMoreButton","moreOpened","setMoreOpened","showLabel","LookListMainFeatureActionsPopper","closePopper","LookListMainFeatureActionsPopperButtons","addToWishListButtonCLick","changeItemButtonCLick","LookFeatureQuantity","propsQuantity","useLixilQuantity","MAX","LookFeatureQuantityText","LookListBundleFeatures","GroheCartItemActions","LookListMainFeatureCheckbox","LookListMainFeatureShipping","existingFeature","shippingOption","LookLayoutMain","looks","setLooks","showAllLayouts","setShowAllLayouts","updateMain","lookIndex","LookLayoutItem","analyticsQuery","lookViewOpened","realDisabled","lookLayoutOpened","loginOpened","buttonTextId","wishlistButtonClick","neededIntroStep","showPoints","LookSideBarEditButtonPopper","setShowPoints","aria-describedby","shareModalOpened","setShareModalOpened","shareClick","resetLookClick","LookSideBarShareModal","hideButton","undoButtonClick","keyboardDetect","ctrlKey","popupClose","loginButtonClick","termsButtonClick","LookRegisterButton","LookRoomsMain","LookRoomPreset","closeRooms","afterSwitch","nextRoute","roomPresetClick","renderButton","questionPopups","getDescription","getButtonText","presetToSet","submitButtonClick","stylePrefix","LookStylePopupFeature","LookStylePopupButtons","removeButtonClick","updatedDeletedCartItems","getBundleFeatureWithoutChildItems","bundleFeatureWithoutChildItems","countRelatedProductParent","removeBackContinueButtonClick","removeBackAddItemsBackClick","removeBothButtonClick","titleString","exitPostMessage","leaveButtonClick","getButtons","sourceChanged","sourceChangeType","variantUrl","changedFeature","currentSelected","fromPreset","preparedVariantUrl","lixilVariantUrl","hideFunction","updateDesignButtonClick","LeadCapturePopupContent","isQuotation","getSubTitle","getContent","LeadCapturePopupContentInputs","forgotPasswordLinkClick","LeadCapturePopupFooter","privacyClick","oneButtonOnly","LeadCapturePopupFooterSubmit","tryToSwitchToTwoFa","resendSMSButtonClick","receiveCallButtonClick","fromShare","saveResponse","getSubmitButtonText","LeadCapturePopupTwoFA","LeadCapturePopupTwoFAVerify","LeadCapturePopupBoxImage","UnlockCalculationStep","closeTutorial","preventRequiredFunc","animationData","loop","autoplay","rendererSettings","preserveAspectRatio","LookFeatureItemLocked","LookListFeatureName","LookWizardSectionListFeatureQuantity","PrintPopup","logoString","logoBase64","setLogoBase64","setCartItemsThumbnails","setLogoUrl","newLogo","cartItemsThumbnailsBase64","_initialFlowVisited","inititalFlowOnEnter","checkForInitialFlow","nextState","visualizerOnEnter","visualizerEntered","checkForVisualizerOnly","newScopeOnEnter","materialsPageOnEnter","showTutorialVideo","shoppingCartOnEnter","onEnter","QuoteDesignPage","goToVisualizer","goToQuotingTool","buttonClass","WebsiteButton","showCheckoutLineItemPricesToggle","showPrices","showCostPricesToggle","InitialFlow","setQtCategoriesRooms","roomKey","handleFooterBackClick","InitialFlowFooterQuestion","getFooterQuestion","handleInitialButtonClick","buttonType","InitialFlowRoom","handleInitialRoomClick","kitchenSubscription","exitInitialFlow","InitialFlowLayout","setMissingInititalFlowValues","handleInitialRoomLayoutClick","layoutIndex","getLayouts","IntroVideo","getStepText","videoPath","videos","fluid","ProjectScope","ProjectScopeMobile","checkForResize","shopClicked","scrollY","changeContainerHeight","handleShopClick","$sections","searchInputChange","getSearchItems","getAllFeaturesByText","goToItemInfo","selectionBodyStyles","ProjectScopeSearchInput","handleOnFocus","handleOnBlur","ProjectScopeDesktop","getVisualizerName","ProjectScopeDesktopSearchInput","dropDownItems","smallDropDown","SelectionWindowPage","historyUpdateTimeout","SelectionMainWindow","updateQtRoutePath","getSubPartFeatures","listenToRouteChangeForQtCategories","nextCategory","qtCategoryIndexFromUrl","subPartsMatching","subPartIndexFromUrl","subPartIndexFromUrlTest","setFirstAvailableCategory","setFirstRoute","runActionAfterVisualizerChange","getActiveChildPart","nextCategoryName","hashHistoryListener","listenerObject","existingSelGroup","selGroup","changeActivePart","requestName","_partIdRequestsMade","nextSelGroup","relatedNavItem","checkForCheckedStep","activePartIndex","switchToDirectCategory","closeSelectionWindow","searchRequest","realSubPart","unlisten","listen","showVanityChoose","showShowerChoose","SelectionWindowBvRequests","SelectionMain","paginationOffset","pageCount","featuresPerPage","mobileSearch","canvasLoading","canvasExpanding","canvasCollapsing","needToRefreshItems","_ismounted","checkIfNeedToSwitchListView","checkViewType","setDesktopItemHeight","cameFromBV","firstClickDone","showLockScreen","showHomeButton","showVisualizerExpandButton","showNotInVisualizerView","getZoomingPartId","canvasImageStyles","renderCanvasPosition","handleToggleLayout","getCurrentParent","checkPart","navItemsForPrevParent","InstList","clickedIndex","handleServiceClick","groupIndex","serviceIndex","updateServiceValue","valueName","getSublistHeight","servicesLength","FeatureInfoAssociated","addAllClicked","handleAddAllClick","handleRelatedItemsSearchChange","handleViewAllOptionsClick","prodAll","FeatureInfoAssociatedProducts","relatedFeaturesRequestMade","activeDbFeatureId","getLoadedFeatures","relatedGroupIndex","subItemIndex","FeatureInfoAssociatedProduct","showGalleryButton","data-feature-id","FeatureInfoDesc","FeatureInfoMaterial","featureMaterialValues","materialFilterValue","gImg","changeImage","galleryExist","setVisible","setLoaded","cols","cache","fixedWidth","defaultHeight","SelectionMainVirtualizedList","thisFeatureAdded","rItem","showRowRelatedItems","updateVirtualizedCache","deferredMeasurementCache","RowItemButtons","RowItemQuantity","thisFeature","newRowItems","existingItemIndex","RowItemPrice","existingItem","RowItemRelatedProductsButton","RowItemRelatedProducts","setRelatedFeaturesRequestMade","relGroups","setRelGroups","loadedFeatures","featureHeight","relatedStyles","relatedFeatureIndex","MaterialsWizardSqftButton","WizardList","filterGroupValues","setFilterGroupValues","getFilterValues","filterGroupAll","filteredFilterValues","getRenderFilterValues","filterGroupValuesArray","filObject","WizardDesktopGrid","wizardObjectInterface","enableForVisualizer","WizardMobileGrid","minColumns","SelectionMainVirtualizedGrid","SelectionMainVirtualizedFiltersGrid","setCurrentFilter","defaultTitle","setDefaultTitle","gridFeatures","setGridFeatures","setAllTitles","reversedTitles","setReversedTitles","filterValuesAvailable","firstTitle","getFeaturesAndFirstTitle","renderFeatures","newAllTitles","skipTitles","countertopsFiltered","spacersCount","spacersTitleCount","rowsToAdd","onGridScroll","shiftTitle","firstT","getRowHeight","firstFilterTitle","SelectionGridFiltersTitleDropdown","dropdownOpened","setDropdownOpened","fTitle","fTitleIndex","SelectionMainVirtualizedGridMobile","SelectionMainVirtualizedFiltersGridMobile","columnsToAdd","getColumnWidth","firstRowFeatureIndex","ExpandVisualizerMethods","expandCanvas","wideScreen","bigScreen","SelectionViewSwitchers","showListView","data-view","FiltersButton","SelectionFooter","handleAddCartItemClick","updateCartAndGoBack","otherRoomCartItem","createNewQuoteAndAddNewCartItemAfterConfirmPopupClick","replaceOldCartItemAfterConfirmPopupClick","executeAfterAddToCart","updatedWithQuoteIndexRoomCartItem","exitFeatureInfo","changeRelatedItem","handleAddRowItemsClick","handleSelectItem","footerButtonCick","existingWizSetupIndex","wizObjectIndex","activateWizardAgain","canGoToFeatureInfo","handleNextButtonClick","renderFooterSelect","relatedItemClick","setCurrentWizardStepFinished","addToCartTranslate","rowIsActive","SelectionMainSelect","bvPart","SelectionMainSelectCategory","SelectionFooterSubPart","collapsing","collapseRing","expandTimeoutId","expandRing","SelectionFooterSubSteps","currentSteps","subStepIndex","mapDispathToProps","MaterialsWizardMain","setNavItems","scrollElem","setNavigationItems","newNavItems","setNewCanvasClass","prevFeatureGroup","alreadyAddedCartItem","fakeSetShowLoader","MaterialsMainCanvas","setCanvasLoading","showNotCompatibleViewReal","MaterialsWizardMainList","resizing","setResizing","prevItemHeight","itemHeight","updateHeight","alreadyRequestedWizardFeatures","currentStore","stepFromUrl","MaterialsWizardFooterStep","stepButtonClick","showDoneCheckMark","activeStepIndex","setExpanded","setCollapsing","goToTheNextStep","realNextStep","selectedValueIsNotFromCurrentSelections","currentG","mg","setMaterialsCameFromPage","newItems","isSingleFeatureGroup","showConflictingButton","greenNextIsVisible","hasNavItems","greenNextDisabled","alreadyInCart","addToCartVisible","addToCartDisabled","rowItem","renderWizardList","MaterialsWizardFooterSelectButton","ShoppingCartView","ShoppingCartMobile","onContentScroll","scartContent","needToShowQuestionAgain","handlePaneClick","activePaneIndex","activePane","$activePaneTitle","$scartContent","hardcodedImage","ShoppingCartMobileHeader","ShoppingCartMobileHeaderWithRouter","ChangeRoomButton","handleAddRoomClick","PriceInput","setPrice","CartItemQuantity","cartItemQuantity","isInputDisabled","CartItemCalcButton","handleCalculatorButtonClick","CartItemTotal","CartItemSearch","updateCounter","prevConfirmPopupOpened","updateInputText","updateForNewNavItem","closeDropdown","fromConflicting","neededVisualizerType","CartItemSearchButton","handleSearchButtonClick","ShoppingCartDiscountsList","getDiscountTitle","ShoppingCartDiscountsListItem","ShoppingCartItemsListInstallationItem","handleRemoveInstallationClick","instPrice","otherCartItems","isSlabsCartItem","slabCartItems","selectedQuoteRoomName","SimilarProductsList","SimilarProductsListItem","AdvancedQuotingWizard","notFromWizardCartItems","notFromWizardSlabCartItems","commonVisualizerType","wizardsSelectedObject","AdvancedQuotingWizardGroups","nothingSelected","AdvancedQuotingWizardGroupsSearch","defaultText","ShoppingCartItemsListWizardCustomItem","PriceWorksheetButton","handlePriceWorkSheetButtonClick","ShoppingCartTaxInput","VisualizerButton","ShoppingCartFooterSubParts","setSelectionGroup","firstCatName","ButtonGroup","dropdownOpenedFirstTime","setDropdownOpenedFirstTime","handleArrowClick","buttonIndex","currentQuoteWizards","wizValue","lastFinishedWizard","getLastWizardItem","quoteClick","quoteDeleteClick","updateAllQutoesTiedItems","changedCartFeatures","newAllValues","selectedObject","severalQuotes","showEditButtons","PriceWorksheetList","DiscountAdd","approvePersonSelectHandle","approveObject","optionIndex","DiscountDeposit","DiscountFinance","percentageChangeClick","dropdownItem","monthChangeClick","getDropdownOptions","textAfterProperty","dropdownPercentageItems","setCellVisible","withPercentage","dropdownMonthItems","DiscountNestedParent","allNested","uuIdId","nestedOptions","allSelectedNested","nestedChild","nestedChildIndex","parentDiscount","DiscountNestedChild","discountDropdownClick","updatedDiscounts","updatedDiscount","addNestedDiscountClick","lastSelectedNested","ShoppingCartDesktop","UnlockCalculations","UnlockCalculationsSteps","exitRunAnimations","currentRenderTime","renderUnlockCalcTimes","waitTime","renderIndex","getStep","stepStart","UnlockCalculationsTutorial","countertopButtonStyles","countertopButtonText","checkCountertopButtonStep","countertopSelector","countertopButton","$list","computed","UnlockCalculationsTutorialLowes","buttonStyles","currentDate","currentYear","currentMonth","sureTaxData","sureTaxResponse","totalTax","contractsPopupOpened","checkContractBlobs","contractData","closeContracts","closeSignPopup","ContractsPopupSuccess","showEmail","disableCustomerEmails","ContractsPopupDocument","contractRef","pageRef","depositValue","isReceipt","onLoadSuccess","onRenderSuccess","ContractsPopupFooter","onPagerClick","newContext","pageClick","firstUnFilledCustomField","postSaveContracts","Pagination","handlePageClick","pager","setPage","getPager","pages","startPage","endPage","postContractSign","signaturePngBase64","responseSaveQuote","replacements","customFieldValues","contractFieldValuesOnly","contractSign","getDocumentForJob","fromPostSignContract","pdfReceiptPagesLength","hasContractCallBack","DocumentValueDict","Replacements","CustomFieldValues","coordInterface","fieldInterface","isPresent","occurrencesCount","contractInterface","documentKey","documentOptions","cMapUrl","cMapPacked","needToScrollToViewAfterPageChange","ContractsPopupFields","masterContractFields","handleTextFieldOnKeyDown","scrollToIndicator","handleTextFieldOnBlur","block","handleNextIndicatorClick","pageOffsetLeft","pageOffsetTop","renderFields","selectedFieldCoords","selectedFieldHasValue","coordIndex","llx","lly","urx","yExpand","autoFocus","handleTextFieldOnChange","firstEmpty","ContractsPopupSignatureField","fieldValue","signatureName","alreadySignedSameFieldValue","data-coordname","ContractsPopupCheckboxField","ContractsPopupNextIndicator","ContractsPopupFieldValue","getFieldDiv","balance","SignaturePadPopup","setSignatureImage","sigCanvas","_sigPad","_reset","_canvas","fromDataURL","_isEmpty","isInformationFilled","postContractSignature","pngBase64","getTrimmedCanvas","isReceiptSign","closeContractSigning","contractSigningCallback","canvasProps","getReceiptSignStyles","childView","lookTutorialModalRef","neededNumber","scrollSelector","scrollDiv","firstLockedElem","modalEl","LookLockTutorialModal","nextButtonClick","roundToDecimals","getCurrentPositionFromScale","LookZoomer","currentPosition","setCurrentPosition","isDragging","setIsDragging","startY","setStartY","startPosition","setStartPosition","startZoomCenter","setStartZoomCenter","onZoomEnd","zoomButtonClick","currentScale","MIN_SCALE","getCurrentScaleFromPosition","nextScale","prevScale","thumbStyles","LookContextMenu","LookContextMenuContent","zoomedFeature","isShowerWizard","isVanityWizard","isCenterIslandWizard","wizButtonName","LookContextMenuVanityContent","setLoadingCart","prevOverlayOpened","locked","GroheFeature","GroheFeatureOptionsType","updateOptions","activeMetaDataValue","leftRightArray","GroheFeatureOptionsShelfSide","displaySideOptionsFor","GroheFeatureOptionsSide","leftDisabled","rightDisabled","getPanTranslateId","GroheFeatureOptionsShowerPan","currentMeta","positionsAvailable","GroheFeatureOptionsCabinetSide","neededPosition","isButtonDisabled","positionLetter","regexNumbersAndEmptyString","BODY_SPRAY_POSITIONS","GroheFeatureOptionsBodySpray","currentQuantity","positionIndex","GroheFeatureOptionsSlatWall","addedToCartClicked","setAddedToCartClicked","updateCartItems","cartItemsArray","requiredFeature","addAllToCartButtonClick","GroheFeaturesTotalPrice","totalFeaturesPrice","withDecimals","SLIDE_DIRECTIONS","sliderRef","handleScrollClick","categoriesOpened","GroheCategory","featureGroupClick","closeFilterClick","displaySameColorGroups","zoomToFeatureGroupByFeature","changeFeature","groheSimilarItemClick","GroheFeatureShort","addedToCart","setAddedToCart","addToCartButtonClick","layoutsOpened","wizardSubParts","totalSteps","featureGroupDescription","boundaryCount","hidePrevButton","hideNextButton","activeTitle","setActiveTitle","lixilURL","infoKey","panel","titleKey","LookFeatureInfo3d","arButtonOnly","threeDSrc","glb","usdz","hdr","arButton","slot","LookFeatureInfo3dViewer","reveal","ar-modes","ios-src","environment-image","class","exposure","aar-modes","quick-look-browsers","infoButtonClick","threeActive","threeColor","augActive","augColor","isRoomIdeasOpened","isRoomLayoutsOpened","continueShopping","selectedValues","canBeAdded","getCartButtonText","checkoutDisabled","allowRender","setAllowRender","roomButton","GroheLayoutItem","GroheRoomPreset","presetTitle","presetPrice","GroheTopButtons","topButtonClick","setHomeRoute","GroheMenuButton","GroheShareParentButton","GroheShareButton","shareButtonClick","GroheSaveButton","GroheSameColorFeaturesContent","sameColorFeature","headerButtonClick","GroheCartLoginHeader","allSteps","setUserInputValue","subTitleTranslateId","parentGroupClick","GroheCartDesignRecommendedList","translateIndex","setTranslateIndex","slideButtonCLick","GroheCartDesignRecommendedFeature","termsAcceptClick","GroheCartDeliveryColumn","resendCodeButtonClick","gcRef","cartFooterCheckoutClick","GroheCartFooter","paymentSelect","valuesBeforeCheckbox","setValuesBeforeCheckbox","defaultValues","addressError","setAddressError","confirmButtonClick","shipping_tier","addressValidated","isConfirmed","payment_type","GroheCartPaymentInputs","cardInputChange","countryItems","countryName","countryItem","cartItemsTotalQuantity","deliveriesReceived","setDeliveriesReceived","prevQuantity","getTrumbleResponseShipping","cartItemsString","getShippingHQResponseShipping","getOptionsAndCreateDeliveryList","deliveriesSections","deliveryIndex","GroheCartDeliverySection","deliveryCartItems","fromToString","getMinAndMaxDays","SHIPPING_TIMES","minDays","maxDays","days","groheCartDeliveryInterface","showWizard","selectedInSqft","canSelectNavItem","showFinalPrice","GroheWizardContentFeature","showPriceInput","GroheWizardContentSingleFeature","LookWizardSection","propsTypes","LookWizardSectionGroup","nextPedestal","LookWizardSectionList","setAdditionalFeaturesLoading","activePositionInListExist","LookLockTutorialCaller","LookWizardSectionFilters","LookWizardSectionFilterItem","listFilterClick","setFeature","featureDownloaded","setFeatureDownloaded","getFeature","featureFromUrl","newResponse","ShopFeature","galleryImageClick","galleryImageIndex","galleryImage","ShopFeatureImageGalleryItem","ShopFeatureVisualizeButton","ShopFeaturePrice","priceSplitted","ShopFeatureShipping","ShopFeatureOptions","setActiveOption","ShopFeatureAddToCartComponents","ShopFeatureSuccessMessage","setIsVisible","successElement","ShopFeatureDownloads","ShopFeatureBackNextButtons","ShopFeatureWizardButton","stateFeatureGroup","setStateFeatureGroup","checkReceivedFeatures","useSimpleView","ShopCategoryList","startLoadingAdditionalFeatures","ShopCategoryVirtualizedGrid","listElement","gridColumnCount","featureWidth","gridRowCount","gridItemRenderer","overscanIndicesGetter","cellCount","overscanCellsCount","stopIndex","overscanStartIndex","overscanStopIndex","disableHeight","autoHeight","ShopCategoryListFeature","ShopCategoryListFeatureOptions","prevFeature","ShopCategoryAside","ShopCategoryBackNextButtons","LookCompatabilitySectionButtons","closeAlert","compatabilityObject","compatabilityObjectIndex","toFeature","lm_styles","fullScreenHeight","sectionStyles","buyNow","expandDisabled","contentStyles","featureSectionIsHidden","LookFeatureMatchingStyleAlert","styleAlertModalOpened","setStyleAlertModalOpened","deletedFromCart","LookFeatureMatchingStyleAlertModal","reviewYourLookButtonClick","LookFeatureUnlockButton","setShowAllGroups","showAllGroupsCheckbox","parentObjects","LookWizardContent","thumbnailRef","nextActiveFeature","wizRef","LookIntroBox","urlBeforeIntro","setUrlBeforeIntro","skipIntroButtonClick","showAnotherTextFor","stepTranslateId","getStepTranslateId","roomIdeasTranslate","closeIntro","LookIntroBoxSteps","LookIntroBoxIcon","getPartIdsToHighLight","LookIntroCanvasHighlighting","runHighlighting","partIdsToHighLight","callRecursiveRendering","onTop","videoPlayerRef","video","muted"],"mappings":"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AA6BC,GAClC,OAAQA,GACN,KAAKC,EAAYC,WACf,MAAO,SACT,KAAKD,EAAYE,aACf,MAAO,a,EAGGC,oBAAT,SAA6BC,GAClC,OAAQA,GACN,IAAK,SACH,OAAOJ,EAAYC,WACrB,IAAK,WACH,OAAOD,EAAYE,eAnLzB,YAE0BG,EAAbA,WAAa,CACxBC,QAAS,EACTC,QAAS,EACTC,QAAS,EACTC,QAAS,EACTC,QAAS,EACTC,QAAS,EACTC,QAAS,EACTC,QAAS,EACTC,QAAS,EACTC,SAAU,GACVC,SAAU,GACVC,SAAU,GACVC,SAAU,GACVC,SAAU,GACVC,SAAU,GACVC,SAAU,GACVC,SAAU,GACVC,SAAU,GACVC,SAAU,GACVC,SAAU,IAGsBC,EAArBA,mBAAqB,CAChCC,IAAK,MACLrB,QAAS,UACTC,QAAS,UACTC,QAAS,UACTC,QAAS,UACTC,QAAS,UACTC,QAAS,UACTC,QAAS,UACTC,QAAS,UACTC,QAAS,UACTC,SAAU,WACVC,SAAU,WACVC,SAAU,WACVC,SAAU,WACVC,SAAU,WACVC,SAAU,WACVC,SAAU,WACVC,SAAU,WACVC,SAAU,WACVC,SAAU,WACVC,SAAU,YA5CL,IA+CMG,EAAsBA,EAAtBA,oBAAsB,CACjC,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,YAuDW5B,GArD8B6B,EAA9BA,4BAA8B,CACzC,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WAGsBC,EAAXA,SAAW,CACtBC,IAAK,MACLC,GAAI,KACJC,SAAU,IACVC,UAAW,IACXC,OAAQ,IACRC,MAAO,IACPC,MAAO,IACPC,WAAY,KACZC,WAAY,sBACZC,cAAe,kBACfC,kBAAmB,qBACnBC,sBAAuB,UACvBC,yBAA0B,cAGMC,EAArBA,mBAAqB,CAChCC,cAAe,gBACfC,gBAAiB,kBACjBC,YAAa,cACbC,WAAY,cAGYC,EAAbA,WAAa,CACxBC,uBAAwB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S,GACT,OAAU,GACV,MAAS,GACT,UAAa,UACb,gBAAmB,UACnB,YAAe,aAEjB,CACE,OAAU,sBACV,GAAM,GACN,EAAK,EACL,GAAM,mBACN,SAAY,EACZ,IAAO,iHACP,aAAgB,iHAChB,aAAgB,GAChB,aAAgB,GAChB,cAAiB,GACjB,MAAS,GACT,OAAU,GACV,MAAS,GACT,UAAa,UACb,gBAAmB,UACnB,YAAe,oBAEjB,CACE,OAAU,aACV,GAAM,GACN,EAAK,GACL,GAAM,mBACN,MAAS,GACT,OAAU,GACV,SAAY,gFACZ,YAAe,8GACf,eAAkB,CAChB,CACE,GAAM,GACN,GAAM,YAER,CACE,EAAK,GACL,GAAM,YAER,CACE,EAAK,GACL,GAAM,WAER,CACE,EAAK,EACL,GAAM,WAER,CACE,GAAM,GACN,GAAM,WAER,CACE,GAAM,GACN,GAAM,WAER,CACE,GAAM,GACN,GAAM,aAGV,SAAY,EACV,GACA,GACA,GACA,GACA,GACA,IAGJ,CACE,OAAU,aACV,GAAM,kBACN,EAAK,GACL,GAAM,mBACN,MAAS,GACT,OAAU,GACV,SAAY,gFACZ,YAAe,8GACf,eAAkB,CAChB,CACE,GAAM,GACN,GAAM,YAER,CACE,GAAM,GACN,GAAM,YAER,CACE,GAAM,GACN,GAAM,WAER,CACE,EAAK,EACL,GAAM,WAER,CACE,GAAM,GACN,GAAM,aAGV,SAAY,EACV,GACA,GACA,GACA,IAGJ,CACE,OAAU,aACV,GAAM,kBACN,EAAK,GACL,GAAM,mBACN,MAAS,GACT,OAAU,GACV,SAAY,gFACZ,YAAe,8GACf,eAAkB,CAChB,CACE,GAAM,GACN,GAAM,YAER,CACE,GAAM,GACN,GAAM,YAER,CACE,GAAM,GACN,GAAM,WAER,CACE,GAAM,GACN,GAAM,WAER,CACE,GAAM,GACN,GAAM,aAGV,SAAY,EACV,GACA,GACA,GACA,O,+EC14BmBC,EAAdA,YAAc,CACzBC,KAAM,EACNC,OAAQ,EACRC,OAAQ,EACRC,YAAa,EACbC,QAAS,EACTC,YAAa,EACbjqB,UAAW,GAGkBkqB,EAAlBA,gBAAkB,CAC7BlpD,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AKrB,MAAO,CACL3yB,uBAAwBA,EAAxB,IACA2yB,iBACAE,uB,EAIYqG,wBApNhB,aAmBaC,GAjBAC,+EACAC,+EACAC,2EACAC,gFACAC,sFACqBC,EAArBA,8EAC0BC,EAA1BA,sFACAC,wFACAC,wFACAC,wFACAC,wFACAC,wFACAC,wFACAC,+EACAC,gFACAC,0EACAC,mFACAjB,6EACAkB,8EA4GPC,GA3G2BC,EAApBA,8EACoBC,EAApBA,8EACuBC,EAAvBA,0GACAC,iGACAC,qGAEAC,yKACAC,6KACAC,0JACAC,8JACAC,sJACAC,0JAEmBC,EAAnBA,iBAAmB,CAC9BhhB,MAAOif,EACPvqB,MAAOyrB,GAGec,EAAXA,SAAW,CACtBtsF,iFACAusF,yEACA91E,mFACA+1E,uEACAC,2EACAC,2EACAltE,kFACAmtE,0EACAjyF,8EACAiF,oFACA8f,sFACAC,+FACAJ,kFACAstE,6EACAC,2EACAC,iFACAC,uFACAC,yEACAC,sEACAC,sFACAC,oEACAtvC,oEACAuvC,sEACA7vH,6EACA8vH,gFACAC,uEACAztE,kEACAC,kEACAC,kEACAwtE,4EACAC,6EACA5tE,uEACA6tE,qEACAprE,iEACA1H,gEACAlc,2EACAF,qFACAD,6EACAE,6EAEAmY,2EACAC,+DACA82E,mEACAnxE,iEACAc,yEACAJ,iFACA0wE,qEACAC,sEACAC,uEACAn0E,2EACA8C,gEACAsxE,oEACAv3E,4EACAG,0FACAq3E,8EACAC,kFACAC,wFACAC,yFACAC,iFACAvzE,+EACAC,kFACA5E,oFACAC,uFACAk4E,mEACAC,oEACAntE,uEACAotE,wEACA14E,+DACAuL,6EACA1iC,+DACAkc,4EACA4zF,6EAGwBlzB,EAAbA,WAAa,CACxB37F,SAAU,sFACVQ,OAAQ,wFACRP,QAAS,uGAEqB6uH,EAAnBA,iBAAmB,0FASD,CAC7B,iBAAkB,aAClB,QAAW,eACX,wBAAyB,2BACzB,0BAA2B,6BAC3B,sBAAuB,yBACvB,iBAAkB,uBAClB,OAAU,cACV,OAAU,cACV,MAAS,eACT,eAAgB,kBAChB,eAAgB,kBAChB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","file":"js/bundle.min.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t1: 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// script path function\n \tfunction jsonpScriptSrc(chunkId) {\n \t\treturn __webpack_require__.p + \"js/\" + ({}[chunkId]||chunkId) + \".min.js\"\n \t}\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n \t// The chunk loading function for additional chunks\n \t// Since all referenced chunks are already included\n \t// in this file, this function is empty here.\n \t__webpack_require__.e = function requireEnsure() {\n \t\treturn Promise.resolve();\n \t};\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// on error function for async loading\n \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n\n \tvar jsonpArray = window[\"webpackJsonpQuickQuote\"] = window[\"webpackJsonpQuickQuote\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([2709,0]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","import {createStore, applyMiddleware, compose} from 'redux';\r\nimport thunk from 'redux-thunk';\r\nimport {reducers} from './reducers';\r\n\r\n// const reduxDevtoolsExtensionOptions = {\r\n// actionSanitizer: (action) => { // https://github.com/zalmoxisus/redux-devtools-extension/blob/master/docs/API/Arguments.md#actionsanitizer--statesanitizer\r\n// console.log('action', action);\r\n// return action\r\n// },\r\n// trace: true,\r\n// traceLimit: 25\r\n// };\r\n\r\nconst createStoreWithMiddleware = compose(\r\n applyMiddleware(\r\n thunk\r\n ),\r\n window.__REDUX_DEVTOOLS_EXTENSION__ ? window.__REDUX_DEVTOOLS_EXTENSION__() : f => f\r\n // window.__REDUX_DEVTOOLS_EXTENSION__ ? window.__REDUX_DEVTOOLS_EXTENSION__(reduxDevtoolsExtensionOptions) : f => f\r\n)(createStore);\r\n\r\n\r\n// const store = createStore(\r\n// reducers,\r\n// window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__()\r\n// );\r\n\r\nconst store = createStoreWithMiddleware(reducers);\r\n\r\nexport default store;\r\n","const __bucketName = 'kv3';\r\nlet _zoomLevel = 0;\r\n\r\nlet _isDemo = null;\r\nlet _isShowroomMode = false;\r\nlet _isTimeoutDisabled = false;\r\nlet _isTabletMode = false;\r\nlet _kioskConfigs = {};\r\nlet _userInfo = {};\r\nlet _kioskStandAlone = document.kvConfig && document.kvConfig.kioskMode && (\r\n// eslint-disable-next-line no-restricted-globals\r\n (parent && parent.window && parent.window.app && parent.window.app.db) ||\r\n// eslint-disable-next-line no-restricted-globals\r\n (parent.parent && parent.parent.window && parent.parent.window.app && parent.parent.window.app.db)\r\n);\r\n// eslint-disable-next-line no-restricted-globals\r\nlet _parent = parent || null;\r\n// eslint-disable-next-line no-restricted-globals\r\nif(_kioskStandAlone && parent && parent.parent && parent.parent.window && parent.parent.window.app)\r\n// eslint-disable-next-line no-restricted-globals\r\n _parent = parent.parent;\r\n\r\ntry {\r\n if(parent && parent.exitEditQuote) { //editing from dashboard\r\n _parent = parent;\r\n }\r\n} catch (e) {\r\n //console.log('Error accessing window.parent.property ', e)\r\n console.log('running in iframe on remote site');\r\n}\r\n\r\nexport const UseFullSizeImages = window.location.href.indexOf('fsi=') !== -1;\r\n\r\nexport const IS_OFFLINE_MODE = document.kvConfig.offlineMode || window.location.href.includes(\"offlineMode\");\r\nexport const USE_SERVER_CACHING = true;\r\nexport const AVAILABLE_VISUALIZERS = {\r\n Bathroom: \"Bathroom\",\r\n Kitchen: \"Kitchen\",\r\n Fireplace: \"Fireplace\",\r\n LaundryRoom: \"LaundryRoom\",\r\n};\r\nexport const BATHROOM_VISUALIZER_TYPES = [\"Bathroom\", \"BV\", \"bvScene\", \"bvLook\"];\r\nexport const AVAILABLE_VISUALIZER_TYPES = {\r\n Bathroom: \"Bathroom\", // toolVersion 4\r\n Kitchen: \"Kitchen\", // toolVersion 4\r\n kvScene: \"kvScene\", // toolVersion 5\r\n bvScene: \"bvScene\", // toolVersion 5\r\n bvLook: \"bvLook\", // toolVersion 5\r\n Fireplace: \"Fireplace\", // toolVersion 6\r\n LaundryRoom: \"LaundryRoom\", // toolVersion 6\r\n};\r\n\r\nexport const NAVIGATION_TYPES = {\r\n qkb: \"qkb\", // regular ui\r\n look: \"look\", // lixil 1\r\n product: \"product\", // lixil 2\r\n};\r\n\r\nexport const IS_LIXIL_SERVERS = window.location.host.includes(\"qkandb\")\r\n || window.location.host.includes(\"kbquote\")\r\n || window.location.host.includes(\"grohe\")\r\n || window.location.host.includes(\"americanstandard-us\")\r\n || (document.kvConfig.domain && document.kvConfig.domain.includes(\"qkandb.net\"))\r\n || (document.kvConfig.domain && document.kvConfig.domain.includes(\"kbquote.com\"));\r\n\r\nexport const IS_LIXIL_PRODUCTION = IS_LIXIL_SERVERS && !window.location.host.includes(\"qkandb\");\r\n\r\nif (IS_LIXIL_SERVERS && !document.kvConfig.devMode) {\r\n // document.kvConfig.toolVersion = 6;\r\n if (document.kvConfig.userId === 140818 && document.kvConfig.visualizerType === \"Kitchen\") {\r\n document.kvConfig.toolVersion = 5;\r\n }\r\n if (!window.location.href.includes(\"nav=\")) {\r\n document.kvConfig.navigationType = \"look\";\r\n }\r\n}\r\n\r\nexport const IS_PRODUCT_JOURNEY = document.kvConfig.navigationType === NAVIGATION_TYPES.product || window.location.href.includes(\"nav=product\");\r\nexport const IS_LOOK_JOURNEY = document.kvConfig.navigationType === NAVIGATION_TYPES.look || window.location.href.includes(\"nav=look\");\r\nexport const IS_LIXIL_UI = IS_PRODUCT_JOURNEY || IS_LOOK_JOURNEY;\r\nexport const IS_QKB_UI = document.kvConfig.navigationType === NAVIGATION_TYPES.qkb || !IS_LIXIL_UI;\r\n\r\nexport const USE_FAB_FILTERS_ONLY = window.location.href.includes(\"ff=1\");\r\n\r\nif (IS_PRODUCT_JOURNEY) {\r\n document.kvConfig.navigationType = NAVIGATION_TYPES.product;\r\n // document.body.classList.remove('theme-qc');\r\n document.body.classList.add('bv', 'theme-lixil', 'theme-grohe');\r\n} else if (IS_LOOK_JOURNEY) {\r\n document.kvConfig.navigationType = NAVIGATION_TYPES.look;\r\n // document.body.classList.remove('theme-qc');\r\n document.body.classList.add('bv', 'theme-lixil', 'theme-look');\r\n} else {\r\n document.kvConfig.navigationType = NAVIGATION_TYPES.qkb;\r\n document.body.classList.add('bv', 'theme-qc');\r\n}\r\n\r\nexport const getCommonVisualizerType = (visualizerType) => {\r\n const stringToCheck = visualizerType || document.kvConfig.visualizerType;\r\n switch (stringToCheck) {\r\n case \"Bathroom\":\r\n case \"BV\":\r\n case \"bvScene\":\r\n case \"bvLook\":\r\n return \"bathroom\";\r\n case \"Kitchen\":\r\n case \"KV\":\r\n case \"kvMaster\":\r\n case \"kvScene\":\r\n return \"kitchen\";\r\n case \"Fireplace\":\r\n return \"fireplace\";\r\n case \"LaundryRoom\":\r\n return \"laundryroom\";\r\n default:\r\n return (stringToCheck || \"\").toLowerCase()\r\n }\r\n}\r\n\r\nexport const AVAILABLE_LANGUAGES = [\"en-US\",\"en-AU\",\"fr-FR\",\"pl-PL\",\"es-ES\"];\r\nexport const POST_MESSAGES = {\r\n setIframeLanguage: \"SET_IFRAME_LANGUAGE\",\r\n userRegisterTrue: \"analytics_register_success\",\r\n userRegisterFalse: \"analytics_register_error\",\r\n userLoginTrue: \"analytics_login_success\",\r\n userLoginFalse: \"analytics_login_error\",\r\n};\r\n\r\nexport const IS_BATHROOM_OLD_BV_SCENE = window.location.href.includes(\"kitchen8k.quotesflooring\")\r\n || window.location.href.includes(\"bathroom_8k.quotekandb.com\");\r\n\r\nexport const REACT_APP_GOOGLE_API_KEY = \"AIzaSyCU0TUFdkbHi0O4yAUPMPxSC7tzyTy84AY\"; // same as the Solar app\r\n\r\n// export const USE_LIGHT_QT_CAT_REQUEST = (window.location.href.includes(\"quotekandb.com\") // not used anymore, old logic\r\n// || (document.kvConfig.domain === \"https://quotekandb.com\")\r\n// || IS_LIXIL_SERVERS);\r\n\r\n\r\nconst _isQTEmbedded = window.location.href.indexOf('qt=1') !== -1;\r\nconst _isTutorial = window.location.href.indexOf('intro=1') !== -1;\r\nconst _visMgmt = window.location.href.indexOf('visMgmt=1') !== -1;\r\nconst _isDevMode = (window.location.href.indexOf('dev=1') !== -1) || (document.kvConfig.devMode);\r\nconst _showAllVisualizerGroups = (window.location.href.indexOf('all=1') !== -1) || (document.kvConfig.showAllVisualizerGroups);\r\nconst _isMobile = (/(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|ipad|iris|kindle|Android|Silk|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(navigator.userAgent)\r\n || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(navigator.userAgent.substr(0, 4)));\r\n\r\nexport const IS_AS_BATHROOM = (!window.location.href.includes(\"grohe\")\r\n && ([\"dev\", \"bravo2\"].every(subDom => (window.location.host || \"\").split(\".\")[0] !== subDom))) || _isDevMode;\r\n\r\nlet _subdomain = 'demo';\r\n\r\nif (_kioskStandAlone) {\r\n _parent.window.app.db.tables.config.getConfigs((configs) => {\r\n configs.forEach(c => {\r\n _kioskConfigs[c.key] = c.value;\r\n });\r\n console.log('kiosk_configs', _kioskConfigs);\r\n _isShowroomMode = _kioskConfigs['kv-showroom-mode'] || false;\r\n _isTimeoutDisabled = _kioskConfigs['kv-timeout-disabled'] || false;\r\n _isTabletMode = _kioskConfigs['tablet-mode'] || false;\r\n _subdomain = _kioskConfigs['subdomain'];\r\n });\r\n}\r\n\r\nconst Config = {\r\n AmazonS3: {\r\n bucketName: __bucketName,\r\n root: function() {\r\n if(_kioskStandAlone) {\r\n return \"file:///\" + encodeURI(_parent.window.app.userDataPath.replace(/\\\\/g, \"/\")) + \"/resources/\" + __bucketName + \"/\";\r\n }\r\n //return \"https://s3.amazonaws.com/\" + __bucketName + \"/\";\r\n return `http://${__bucketName}.s3.amazonaws.com/`;\r\n }()\r\n },\r\n getScriptPath: function() {\r\n let scripts = document.getElementsByTagName(\"script\");\r\n if(scripts && scripts.length) {\r\n for(let i = 0; i < scripts.length; i++) {\r\n let src = scripts[i].getAttribute('src');\r\n if(src && (src.includes(\"bundle.js\") || src.includes(\"bundle.min.js\"))) {\r\n return src.substring(0, src.lastIndexOf('/'));\r\n }\r\n }\r\n }\r\n },\r\n appRootNode: '.main-wrapper',\r\n layerSize: function () {\r\n return \"1620x1080\";\r\n\r\n //switch (_zoomLevel) {\r\n // case 0: return \"1620x1080\";\r\n // case 1: return \"2419x1613\";\r\n // case 2: return \"3218x2145\";\r\n // case 3: return \"4018x2678\";\r\n // case 4: return \"4817x3211\";\r\n // case 5: return \"\"; // it is actually 5616x3744, but we use the original image which is of this size and doesn't have the size suffix on S3\r\n // default: throw \"Unsupported zoom level: \" + _zoomLevel;\r\n //}\r\n },\r\n\r\n maxZoom: 10,\r\n zoomIn: () => {\r\n if (_zoomLevel < (this.maxZoom - 1)) {\r\n _zoomLevel++;\r\n }\r\n },\r\n\r\n zoomOut: () => {\r\n if (_zoomLevel > 0) {\r\n _zoomLevel--;\r\n }\r\n },\r\n\r\n zoomLevel: () => _zoomLevel,\r\n\r\n /**\r\n * Returns an object of current view size based on zoom level\r\n */\r\n viewSize: () => {\r\n const w = 1620 + (1620 * _zoomLevel / 100.0) * 5;\r\n\r\n return {width: parseInt(w, 10), height: parseInt(w * 0.666667, 10)};\r\n },\r\n demoUserDomains: ['demo', 'cosentino'],\r\n isDemo: function () {\r\n if (_isDemo !== null) {\r\n return _isDemo;\r\n }\r\n\r\n _isDemo = document.kvConfig &&\r\n document.kvConfig.kioskMode &&\r\n this.demoUserDomains.some((d) => document.kvConfig.subdomain.toLowerCase() === d);\r\n return _isDemo;\r\n },\r\n kioskStandAlone: _kioskStandAlone,\r\n kvConfig: document.kvConfig,\r\n isKiosk: document.kvConfig.kioskMode,\r\n isShowroomMode: () => { return _isShowroomMode; },\r\n isTimeoutDisabled: () => { return _isTimeoutDisabled; },\r\n isTabletMode: () => { return _isTabletMode; },\r\n getSubdomain: () => { return _subdomain; },\r\n isMobile: () => _isMobile,\r\n getParent: () => _parent,\r\n isQTEmbedded: () => _isQTEmbedded,\r\n isTutorial: () => _isTutorial,\r\n isDevMode: () => _isDevMode,\r\n showAllVisualizerGroups: () => _showAllVisualizerGroups,\r\n isVisualizerManagement: () => _visMgmt,\r\n parent: _parent,\r\n /**\r\n * Is filled after the customer logins\r\n */\r\n userInfo: () => _userInfo,\r\n /**\r\n * Set user info\r\n * @param userInfo {object}\r\n */\r\n setUserInfo: (userInfo) => _userInfo = userInfo,\r\n\r\n};\r\n\r\nexport default Config\r\n","import forEach from 'lodash/forEach';\r\nimport uniq from \"lodash/uniq\";\r\n\r\nimport {QuotePricing} from 'shared_components';\r\nimport store from '../store';\r\nimport {getInstallationsTotalCost} from \"../reducers/instReducer\";\r\nimport {DISCOUNT_TYPES} from \"../bvcomponents/priceWorksheet/discounstInterface\";\r\nimport {checkIfInCatProperty} from \"./displayLogic\";\r\nimport {PartMenuType} from \"../bvcomponents/visComponents/constants\";\r\nimport {filterFeaturesByValues, isVisualizerRoute, s3FeatureImagePath, splitFeatureName} from \"./utils\";\r\nimport {getCountertopFeatureGroup, getCurrentLayout} from \"../bvcomponents/appLayout\";\r\nimport {\r\n featureIsMatchingQtCatName,\r\n getCurrentQuoteRoomCartItem,\r\n} from \"./categorySwitchingFunctions\";\r\nimport {\r\n BACKSPLASH_LABELS,\r\n CABINET_LABELS, CORNER_LABELS,\r\n COUNTERTOP_LABELS,\r\n EDGE_LABELS,\r\n SQFT_FEATURES\r\n} from \"../bvcomponents/sqft/constants\";\r\nimport sqftConfig from \"../bvcomponents/sqft/components/canvas/store/sqftConfig\";\r\nimport {mm2ToM2, sqInchesToSqFoot} from \"../bvcomponents/sqft/helpers/sqftHelper\";\r\nimport {getBundledFeatures, isInStock} from \"../bvcomponents/look/lookNavigation/lookFunctions2\";\r\nimport {LIXIL_USER_QUERY_PARAMS} from \"../api/look-api\";\r\nimport {CART_ITEM_ADDED_BY} from \"../bvcomponents/shoppingCart/cartItemInterface\";\r\nimport {ROUTES} from \"../routes\";\r\nimport {getCommonVisualizerType, IS_LIXIL_UI, IS_PRODUCT_JOURNEY} from \"../config\";\r\nimport {LOOK_WALLS_ONLY} from \"../bvcomponents/look/core/constants\";\r\nimport {getFeaturePriceProperty, numberWithCommas, updatePriceWithMarkUp} from \"./priceFunctions\";\r\nimport {getHardCodedFloFormShopCartCost, isCabinetsFabricator, isCafeCountetops} from \"./fabricatorHardcode\";\r\nimport {getDifferentCurrencyCartItems} from \"./misc2\";\r\nimport {\r\n getCafeCountertopsDeliveryCost,\r\n getCartItemShippingCost\r\n} from \"../bvcomponents/look/grohe/groheCart/groheCartDelivery/deliveryFunctions\";\r\nimport {\r\n getDiscountsForSection,\r\n getFilteredSections,\r\n shouldCalculateDiscount\r\n} from \"../bvcomponents/priceWorksheet/discountFunctions\";\r\n\r\nexport const featureThumbnailUrl = (feature, size) => {\r\n if (feature.menuType === PartMenuType.Complex) {\r\n return feature.partThumbnail\r\n }\r\n return feature.dbFeature.customThumbnail\r\n ? feature.dbFeature.customThumbnail\r\n : feature.dbFeature.thumbnailUrl\r\n ? s3FeatureImagePath(feature.dbFeature.thumbnailUrl, size)\r\n : \"\";\r\n}\r\n\r\nexport const getPartThemeThumbnail = (partThumbnail, activeTheme) => {\r\n if (partThumbnail && partThumbnail.includes(\"/images\") && activeTheme && activeTheme !== \"qc\") {\r\n const splitted = partThumbnail.split(\"/images\");\r\n if (splitted[0] && splitted[1]) {\r\n return splitted[0] + \"/images-\" + activeTheme + splitted[1];\r\n }\r\n }\r\n return partThumbnail\r\n}\r\n\r\nexport const TAX_DISCOUNT_PCT = 25;\r\n\r\nexport const browserIsSafari = () => {\r\n return navigator.vendor && navigator.vendor.indexOf('Apple') > -1 &&\r\n navigator.userAgent &&\r\n navigator.userAgent.indexOf('CriOS') === -1 &&\r\n navigator.userAgent.indexOf('FxiOS') === -1;\r\n};\r\nexport const isIOSDevice = () => {\r\n return !!navigator.platform && /iPad|iPhone|iPod/.test(navigator.platform);\r\n};\r\nexport const isChrome = () => {\r\n return !!navigator.userAgent.match('CriOS');\r\n};\r\nexport const isIphoneX = () => { // https://stackoverflow.com/questions/47226824/iphonex-and-notch-detection\r\n let iPhone = /iPhone/.test(navigator.userAgent) && !window.MSStream;\r\n let aspect = window.screen.width / window.screen.height;\r\n return !!(iPhone && aspect.toFixed(3) === \"0.462\")\r\n};\r\nexport const isAndroid = () => {\r\n return navigator.userAgent && navigator.userAgent.toLowerCase().indexOf(\"android\") > -1;\r\n};\r\nexport const isIframe = () => {\r\n try {\r\n return window.self !== window.top;\r\n } catch (e) {\r\n return true;\r\n }\r\n};\r\nexport const isIE = () => {\r\n return (window.navigator.userAgent.indexOf('MSIE ') > 0)\r\n || (!!window.MSInputMethodContext && !!document.documentMode)\r\n || (window.navigator.userAgent.indexOf('Trident/') > 0)\r\n};\r\nexport const isFirefox = () => navigator.userAgent.toLowerCase().indexOf(\"firefox\") > -1;\r\n\r\nlet __pricingProfiles = null;\r\nlet __pricingProfilesHit = false;\r\nconst pricingProfiles = () => {\r\n if (!__pricingProfilesHit) {\r\n __pricingProfilesHit = true;\r\n __pricingProfiles = QuotePricing(store.getState().fabricatorState.pricingPreset);\r\n }\r\n\r\n console.log(\"__pricingProfiles\", __pricingProfiles);\r\n\r\n return __pricingProfiles;\r\n};\r\n\r\nexport const FEATURE_INSTALLATION = 1;\r\nexport const FEATURE_REGULAR = 2;\r\nexport const FEATURE_STONE = 3;\r\n\r\nexport const getFeatureType = dbFeature => {\r\n if (dbFeature && dbFeature.isInstallation)\r\n return FEATURE_INSTALLATION;\r\n if (dbFeature && (!dbFeature.stonePricingId || dbFeature.stonePricingId.length === 0 || dbFeature.stonePricingId[0] === -1))\r\n return FEATURE_REGULAR;\r\n return FEATURE_STONE;\r\n};\r\n\r\n/**\r\n *\r\n * @param cartItem {cartItemInterface} this is used to calculate first all same name countertops, than display it's total price / quantity, exclude current editing\r\n * @return {cartItemInterface}\r\n */\r\nexport const detectComplexLaborCartItem = (cartItem) => {\r\n return cartItem.cartFeature && (cartItem.partId === \"installation\")\r\n && cartItem.cartFeature.dbFeature.autoAddToCart && cartItem.cartFeature.dbFeature.complexLogic\r\n}\r\n\r\nconst hardcodedFloformV5Features = [\"Costco Shop Card\", \"Costco Citi Visa Cardholder\", \"Costco Executive Members\"];\r\n\r\n/**\r\n *\r\n * @param forQuote {any} get total prices only for specific quote (number or null)\r\n * @param calculateDiscount {boolean}\r\n * @param cartItemsToCount {array}\r\n * @param withNotInStock {boolean}\r\n * @return {object}\r\n */\r\nexport const getTotalPrice = (forQuote = null, calculateDiscount = true, cartItemsToCount = null, withNotInStock = false) => {\r\n const state = store.getState();\r\n let cartItems = cartItemsToCount || state.cartState.cartItems;\r\n if (IS_LIXIL_UI && !cartItemsToCount) {\r\n cartItems = cartItems.filter(cartItem => {\r\n if ((IS_PRODUCT_JOURNEY && cartItem.addedBy !== CART_ITEM_ADDED_BY.user) || cartItem.isRemoved) {\r\n return false\r\n }\r\n if (withNotInStock) {\r\n return !getBundledFeatures(cartItem.cartFeature).length\r\n }\r\n return isInStock(cartItem.cartFeature) && !getBundledFeatures(cartItem.cartFeature).length\r\n });\r\n }\r\n const instList = state.instState.instList;\r\n const {fabricatorTaxes, settings} = state.fabricatorState;\r\n const {sureTax} = state.cartState;\r\n\r\n let materialPrice = 0;\r\n let materialTaxes = 0;\r\n let totalDeliveryCost = 0;\r\n let priceTaxes = Array.isArray(fabricatorTaxes) ? fabricatorTaxes.map(fabTax => {\r\n const {id, state, materialRate, laborRate, nameIntl} = fabTax;\r\n return {id, state, materialRate, laborRate, nameIntl, materialTax: 0, laborTax: 0}\r\n }) : [];\r\n let installationPrice = getInstallationsTotalCost(instList);\r\n\r\n if (Number.isInteger(forQuote)) { // get total prices only for specific quote\r\n cartItems = cartItems.filter(cartItem => cartItem.currentQuote === forQuote)\r\n }\r\n\r\n let multipliedCostUsed = false;\r\n\r\n cartItems\r\n .sort((a, b) => (a.partId === \"installation\") - (b.partId === \"installation\"))\r\n .forEach(cartItem => {\r\n\r\n if (getDifferentCurrencyCartItems(settings, [cartItem]).length && !cartItemsToCount) {\r\n return false\r\n }\r\n\r\n if (multipliedCostUsed && detectComplexLaborCartItem(cartItem)) {\r\n return false\r\n }\r\n\r\n if (cartItem.cartFeature && hardcodedFloformV5Features.some(name => cartItem.cartFeature.dbFeature.sharedFeatureName === name)) {\r\n // if (cartItem.cartFeature.dbFeature.sharedFeatureName !== \"Costco Shop Card\") {\r\n return false\r\n // }\r\n }\r\n\r\n const dbFeature = cartItem.cartFeature.dbFeature;\r\n let featurePrice = 0;\r\n\r\n if (parseFloat(cartItem.displayFakePrice) === cartItem.displayFakePrice) {\r\n featurePrice = cartItem.displayFakePrice\r\n } else {\r\n const featureType = getFeatureType(dbFeature);\r\n switch (featureType) {\r\n case FEATURE_INSTALLATION:\r\n // installation dbFeature\r\n //installationPrice += calculateFeatureCost(cartItem.cartFeature, cartItem.quantity);\r\n // never gets here\r\n break;\r\n case FEATURE_REGULAR:\r\n // regular dbFeature, part of the total cost\r\n featurePrice = calculateFeatureCost(cartItem.cartFeature, cartItem.quantity, cartItems, cartItem.fromQtCategory, cartItem.currentQuote);\r\n break;\r\n case FEATURE_STONE: {\r\n const stonePricing = state.serverState.stonePricing;\r\n const stoneSupplier = state.fabricatorState.stoneSupplier;\r\n // dbFeature stone related\r\n const stoneCost = calculateStoneCost(\r\n dbFeature,\r\n cartItem.quantity,\r\n stonePricing,\r\n stoneSupplier,\r\n cartItem.partId === SQFT_FEATURES.slabs && state.sqftSlabState.isSlabPricingEnabled, //cartItem.shouldUseSlabPricing, // calculate shouldUseSlabPricing globally and not per cItem\r\n settings,\r\n state.cartState,\r\n );\r\n const multipliedCost = multiplySlabCostForFeature(cartItem.cartFeature, cartItem.quantity, state, cartItem);\r\n if (multipliedCost && cartItem.partId !== \"slabs\") {\r\n featurePrice = multipliedCost;\r\n multipliedCostUsed = true;\r\n } else {\r\n featurePrice = stoneCost || calculateFeatureCost(cartItem.cartFeature, cartItem.quantity, cartItems, cartItem.fromQtCategory, cartItem.currentQuote);\r\n }\r\n break;\r\n }\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n const productPriceAfterDiscount = calculateDiscount\r\n ? getQuotePriceWithDiscounts({materialPrice:featurePrice}, [], true)\r\n : featurePrice\r\n materialPrice = materialPrice + productPriceAfterDiscount;\r\n if (fabricatorTaxes && !dbFeature.notTaxable && !settings.sureTax) {\r\n if (Array.isArray(fabricatorTaxes)) {\r\n priceTaxes = priceTaxes.map(tax => {\r\n tax.materialTax += productPriceAfterDiscount * tax.materialRate / 100;\r\n return tax\r\n })\r\n } else {\r\n materialTaxes += productPriceAfterDiscount * fabricatorTaxes.materialRate / 100;\r\n }\r\n }\r\n if (settings.useShipping) {\r\n totalDeliveryCost += getCartItemShippingCost(cartItem);\r\n }\r\n });\r\n\r\n if (isCafeCountetops) {\r\n totalDeliveryCost += getCafeCountertopsDeliveryCost(totalDeliveryCost, cartItems, state);\r\n }\r\n\r\n if ((typeof sureTax === \"number\") && sureTax > 0) {\r\n materialTaxes = sureTax;\r\n }\r\n\r\n const result = {\r\n materialPrice: Math.round(materialPrice * 100) / 100,\r\n installationPrice: Math.round(installationPrice * 100) / 100,\r\n materialTaxes: Math.round(materialTaxes * 100) / 100,\r\n totalDeliveryCost: Math.round(totalDeliveryCost * 100) / 100,\r\n priceTaxes,\r\n installationTaxes: 0,\r\n multipliedCostUsed,\r\n };\r\n\r\n if (fabricatorTaxes) {\r\n result.installationTaxes = Array.isArray(fabricatorTaxes)\r\n ? fabricatorTaxes\r\n .filter(fabTax => fabTax.isEnabled)\r\n .reduce((acc, tax) => acc + (result.installationPrice * tax.laborRate / 100.0), 0)\r\n : result.installationPrice * fabricatorTaxes.laborRate / 100.0;\r\n }\r\n\r\n return result;\r\n};\r\n\r\nexport function getQuotePriceWithDiscounts(totalPriceObject, ignoreDiscounts = [], splitStaticPrice = false) {\r\n const state = store.getState();\r\n let totalPrice = totalPriceObject.materialPrice;\r\n if (state.fabricatorState.settings.priceWorksheetEnabled) {\r\n const discountSections = getFilteredSections(state.priceWorksheetState.discountSections);\r\n discountSections.forEach(discountSection => {\r\n const allDiscounts = sortByOrder(getDiscountsForSection(discountSection, state.priceWorksheetState.customAddedDiscounts));\r\n allDiscounts.forEach(discount => {\r\n if (shouldCalculateDiscount(discount)\r\n && (!ignoreDiscounts.length || ignoreDiscounts.every(ignoreDiscount => ignoreDiscount.id !== discount.id))) {\r\n totalPrice = (discount.type === DISCOUNT_TYPES.price)\r\n ? totalPrice - (splitStaticPrice ? discount.amount / state.cartState.cartItems.length : discount.amount)\r\n : totalPrice * (1 - discount.amount/100) // total - percent\r\n }\r\n })\r\n })\r\n }\r\n return totalPrice;\r\n}\r\n\r\nexport function getQuotePriceWithTaxes(totalPriceObject) {\r\n const taxes = totalPriceObject.priceTaxes.length\r\n ? totalPriceObject.priceTaxes.reduce((acc, tax) => acc + tax.materialTax, 0)\r\n : totalPriceObject.materialTaxes;\r\n\r\n const totalPrice = totalPriceObject.totalDeliveryCost + totalPriceObject.materialPrice + taxes + totalPriceObject.installationPrice + totalPriceObject.installationTaxes;\r\n return +toFixedPrice(totalPrice);\r\n}\r\n\r\nexport function getDeliveryCost(deliveryList) {\r\n if (!deliveryList) {\r\n deliveryList = store.getState().cartState.deliveryList || [];\r\n }\r\n let deliveryCostArray = [];\r\n deliveryList.forEach(delivery => {\r\n // const activeDelivery = deliveryList.find((del, deliveryIndex) => deliveryIndex === delivery.activeDeliveryIndex);\r\n // if (activeDelivery && !deliveryCostArray.includes(activeDelivery.price)) {\r\n // deliveryCostArray.push(activeDelivery.price)\r\n // }\r\n if (delivery.cartItems.length) {\r\n deliveryCostArray.push(delivery.price)\r\n }\r\n });\r\n return deliveryCostArray.reduce((total, cost) => total + cost, 0);\r\n}\r\n\r\n/**\r\n *\r\n * @param feature {object} (object which has dbFeature property)\r\n * @param quantity {int}\r\n * @param state {object}\r\n * @param cartItemToSkip {cartItemInterface} this is used to calculate first all same name countertops, than display it's total price / quantity, exclude current editing\r\n * @return {number}\r\n */\r\nconst multiplySlabCostForFeature = (feature, quantity, state, cartItemToSkip) => {\r\n const stonePricing = state.serverState.stonePricing;\r\n const stoneSupplier = state.fabricatorState.stoneSupplier;\r\n const allCartItems = state.cartState.cartItems;\r\n const isSlabPricingEnabled = state.sqftSlabState.isSlabPricingEnabled;\r\n\r\n let allSameFeaturesQuantity = quantity;\r\n const checkCartItems = allCartItems.filter(cItem => {\r\n return cItem.cartFeature && (cItem.cartFeature.dbFeature.sharedFeatureName === feature.dbFeature.sharedFeatureName)\r\n });\r\n checkCartItems.forEach(cItem => {\r\n if (cartItemToSkip && (cartItemToSkip.id === cItem.id)) { // current editing on feature page\r\n return\r\n }\r\n // Skip adding quantity if it's a slab and slab pricing is disabled\r\n if (!(cItem.partId === SQFT_FEATURES.slabs && !isSlabPricingEnabled)) {\r\n allSameFeaturesQuantity += cItem.quantity;\r\n }\r\n });\r\n if ((checkCartItems.length > 1 || (checkCartItems[0] && checkCartItems[0].partId !== feature.partId))\r\n && allSameFeaturesQuantity && (allSameFeaturesQuantity !== quantity)) {\r\n let allStoneCost = calculateStoneCost(\r\n feature.dbFeature,\r\n allSameFeaturesQuantity,\r\n stonePricing,\r\n stoneSupplier,\r\n false,\r\n state.fabricatorState.settings,\r\n state.cartState,\r\n );\r\n const laborExist = allCartItems.find(cItem => detectComplexLaborCartItem(cItem)) // here we check existing auto add to cart feature (which is depending on countertop quantity)\r\n if (laborExist) {\r\n allStoneCost += getFeatureCost(laborExist.cartFeature, laborExist.quantity, laborExist.fromQtCategory);\r\n }\r\n // console.log(\"quantity\", quantity);\r\n // console.log(\"allSameFeaturesQuantity\", allSameFeaturesQuantity);\r\n // console.log(\"allStoneCost\", allStoneCost);\r\n return Math.round((quantity * (allStoneCost / allSameFeaturesQuantity)) * 100) / 100\r\n }\r\n return 0\r\n}\r\n\r\n/**\r\n *\r\n * @param feature {object} (object which has dbFeature property)\r\n * @param quantity {int}\r\n * @param fromQtCategory {string} (cart feature should be calculated from the category it was added)\r\n * @param withTotalSlabCost {boolean} this is used to calculate first all same name countertops, than display it's total price / quantity\r\n * @param cartItemToSkip {cartItemInterface} this is used to calculate first all same name countertops, than display it's total price / quantity, exclude current editing\r\n * @param useSlabSqftPricing {boolean} this is used to calculate slab pricing assigned from algorithms, slabSqftValue from backed\r\n * @param forQuoteIndex {number} for complex logic\r\n * @return {number}\r\n */\r\nexport const getFeatureCost = (feature,\r\n quantity,\r\n fromQtCategory,\r\n withTotalSlabCost = false,\r\n cartItemToSkip = null,\r\n useSlabSqftPricing = false,\r\n forQuoteIndex = null,\r\n) => {\r\n switch (getFeatureType(feature.dbFeature)) {\r\n case FEATURE_INSTALLATION: // installation dbFeature\r\n case FEATURE_REGULAR:\r\n // regular feature, part of the total cost\r\n return calculateFeatureCost(feature, quantity, null, fromQtCategory, forQuoteIndex);\r\n case FEATURE_STONE: {\r\n // is a stone, calculate using a different algorithm.\r\n const state = store.getState();\r\n const stonePricing = state.serverState.stonePricing;\r\n const stoneSupplier = state.fabricatorState.stoneSupplier;\r\n // feature stone related\r\n // console.log(\"stonePricing\", stonePricing);\r\n // console.log(\"stoneSupplier\", stoneSupplier);\r\n // console.log(\"feature.dbFeature.stonePricingId\", feature.dbFeature.stonePricingId);\r\n const stoneCost = calculateStoneCost(\r\n feature.dbFeature,\r\n quantity,\r\n stonePricing,\r\n stoneSupplier,\r\n useSlabSqftPricing,\r\n state.fabricatorState.settings,\r\n state.cartState,\r\n );\r\n if (stoneCost && withTotalSlabCost && cartItemToSkip.partId !== SQFT_FEATURES.slabs) {\r\n // console.log(\"stoneCost\", stoneCost);\r\n const multipliedCost = multiplySlabCostForFeature(feature, quantity, state, cartItemToSkip);\r\n if (multipliedCost) {\r\n return multipliedCost\r\n }\r\n }\r\n return stoneCost || calculateFeatureCost(feature, quantity, null, fromQtCategory, forQuoteIndex);\r\n }\r\n }\r\n};\r\n\r\nexport const toFixedPrice = (price, withCommas = false) => {\r\n try {\r\n if (Math.round(price) !== price || IS_LIXIL_UI) {\r\n price = price.toFixed(2);\r\n }\r\n } catch(ex) {\r\n console.log(\"Helpers toFixedPrice failed for \", price, ex);\r\n }\r\n return withCommas ? numberWithCommas(price) : price\r\n};\r\n\r\n/**\r\n *\r\n * @param feature {object} (object which has dbFeature property)\r\n * @param quantity {int}\r\n * @param fromQtCategory {string} (cart feature should be calculated from the category it was added)\r\n * @param withTotalSlabCost {boolean} this is used to calculate first all same name countertops, than display it's total price / quantity\r\n * @param cartItemToSkip {featureInterface} this is used to calculate first all same name countertops, than display it's total price / quantity, exclude current editing\r\n * @param useSlabSqftPricing {boolean} this is used to calculate slab pricing assigned from algorithms, slabSqftValue from backed\r\n * @param forQuoteIndex {number} for the complex logic\r\n * @return {string}{number}\r\n */\r\nexport const toFixedFeatureCost = (feature,\r\n quantity,\r\n fromQtCategory = \"\",\r\n withTotalSlabCost = false,\r\n cartItemToSkip = null,\r\n useSlabSqftPricing = false,\r\n forQuoteIndex = null,\r\n) => {\r\n let price = getFeatureCost(feature, quantity, fromQtCategory, withTotalSlabCost, cartItemToSkip, useSlabSqftPricing, forQuoteIndex);\r\n return toFixedPrice(price);\r\n};\r\n\r\n/**\r\n *\r\n * @return {number}\r\n */\r\nexport const getSingleSlabArea = () => {\r\n const storeState = store.getState();\r\n const slabImageHeight = storeState.sqftSlabState.slabImageHeight;\r\n const slabImageWidth = storeState.sqftSlabState.slabImageWidth;\r\n const slabArea = slabImageHeight * slabImageWidth;\r\n\r\n return sqftConfig.measureUnit === \"Imperial\"\r\n ? Math.ceil10(sqInchesToSqFoot(slabArea), -2)\r\n : mm2ToM2(slabArea);\r\n};\r\n\r\n/**\r\n *\r\n * @param feature {featureInterface} (object which has dbFeature property)\r\n * @param quantity {int}\r\n * @param cartItems {array}\r\n * @param fromQtCategory {string} (cart feature should be calculated from the category it was added)\r\n * @param quoteIndex {number}\r\n * @return {number}\r\n */\r\nfunction calculateFeatureCost(feature, quantity, cartItems, fromQtCategory, quoteIndex) {\r\n // is a stone, calculate using a different algorithm.\r\n const storeState = store.getState();\r\n const stonePricing = storeState.serverState.stonePricing;\r\n const stoneSupplier = storeState.fabricatorState.stoneSupplier;\r\n const activeQuoteIndex = Number.isInteger(quoteIndex) ? quoteIndex : storeState.quotesState.activeQuoteIndex;\r\n const dbFeature = feature.dbFeature;\r\n\r\n let featureCost = checkIfInCatProperty(feature, \"inCatPrice\", getFeaturePriceProperty(feature), fromQtCategory);\r\n let featureTotalPrice = 0;\r\n\r\n let material = 0;\r\n let materialPrice = 0;\r\n let backsplashMaterial = 0;\r\n\r\n let quoteMaterial = 0;\r\n let quoteBacksplashMaterial = 0;\r\n\r\n let materials = [];\r\n for(let index in storeState.cartState.cartItems) {\r\n let cartItem = storeState.cartState.cartItems[index];\r\n if(cartItem.cartFeature && cartItem.cartFeature.isStoneFeature) {\r\n switch (cartItem.partId) {\r\n case \"vanity_countertop\":\r\n case \"center_island_countertop\":\r\n case \"countertop\":\r\n case \"front_wall\": {\r\n if (cartItem.partId === \"front_wall\") { // added front_wall to the Fireplace material\r\n const visType = cartItem.fromVisualizerType || document.kvConfig.visualizerType;\r\n if (visType !== \"Fireplace\") {\r\n break;\r\n }\r\n }\r\n material += cartItem.quantity;\r\n // dbFeature stone related\r\n const currentPrice = calculateStoneCost(\r\n cartItem.cartFeature.dbFeature,\r\n cartItem.quantity,\r\n stonePricing,\r\n stoneSupplier,\r\n cartItem.partId === SQFT_FEATURES.slabs && storeState.sqftSlabState.isSlabPricingEnabled, //cartItem.shouldUseSlabPricing,// calculate shouldUseSlabPricing globally and not per cItem\r\n storeState.fabricatorState.settings,\r\n storeState.cartState,\r\n );\r\n materialPrice += currentPrice;\r\n if (cartItem.currentQuote === activeQuoteIndex) {\r\n quoteMaterial += cartItem.quantity;\r\n }\r\n materials.push(cartItem.cartFeature.dbFeature);\r\n break;\r\n }\r\n case \"vanity_backsplash\":\r\n case \"backsplash\": {\r\n backsplashMaterial += cartItem.quantity;\r\n if (cartItem.currentQuote === activeQuoteIndex) {\r\n quoteBacksplashMaterial += cartItem.quantity;\r\n }\r\n break;\r\n }\r\n default:\r\n break;\r\n }\r\n }\r\n }\r\n \r\n const measureUnit = storeState.sqftState ? storeState.sqftState.measureUnit : null;\r\n if (validateFeaturePrice(dbFeature, quantity, measureUnit)) {\r\n let complexLogic = checkIfInCatProperty(feature, \"complexLogic\", dbFeature.complexLogic, fromQtCategory);\r\n if (dbFeature.comparisonType === 'gte+' && dbFeature.comparisonFor !== 'complex') {\r\n const baseQuantity = feature.baseQuantity - 1;\r\n let fQuantity = quantity;\r\n if (dbFeature.comparisonFor === 'material') {\r\n fQuantity = 0; // no material quantity\r\n }\r\n const plus = dbFeature.maxQuantity;\r\n let cost = baseQuantity * featureCost;\r\n for (let i = baseQuantity + 1; i <= fQuantity; i++) {\r\n cost += plus;\r\n }\r\n\r\n featureTotalPrice = cost;\r\n } else if (hardcodedFloformV5Features.some(name => dbFeature.sharedFeatureName === name)) {\r\n if (dbFeature.sharedFeatureName === \"Costco Shop Card\") {\r\n featureTotalPrice = getHardCodedFloFormShopCartCost(storeState.cartState.cartItems);\r\n } else {\r\n const totalPrice = getTotalPrice();\r\n featureTotalPrice = totalPrice.materialPrice * 0.02;\r\n }\r\n } else if (dbFeature.comparisonFor === 'complex' && complexLogic) {\r\n try {\r\n\r\n const $m = material; // amount of square foot of material the feature is using, probably have to be calculated based on the meta data size of the feature\r\n const $b = backsplashMaterial; // we added a new backsplash property, if we need to calculate both, we should have ($m + $b) in the complex logic\r\n const getSqft = (stonePricingId) => {\r\n const stoneSupplierStone = stonePricing[stonePricingId]; // stone supplier stone\r\n if (!stoneSupplierStone) {\r\n return -1\r\n }\r\n const pricingProfileId = stoneSupplierStone.pricingPreset_id;\r\n const quotePricing = __quotePricing || (__quotePricing = pricingProfiles());\r\n var profile = _.first(quotePricing.pricingProfiles.filter((pp) => {\r\n return (pp.Id || pp.id) === pricingProfileId;\r\n }));\r\n if(profile) {\r\n var ppdList = storeState.fabricatorState.settings.useFabricatorCostPrices\r\n ? profile.pricingProfileCostData\r\n : storeState.fabricatorState.settings.showSalePrices\r\n ? profile.pricingProfileDiscountData\r\n : profile.pricingProfileData;\r\n if (Array.isArray(ppdList) && ppdList.length) {\r\n for(var n = ppdList.length - 1; n >= 0; n--) {\r\n let ppd = ppdList[n];\r\n switch(ppd.type)\r\n {\r\n case \"pricing-presets/set-slab\":\r\n if(ppd.slabSqftValue > 0) {\r\n return ppd.slabSqftValue;\r\n }\r\n else {\r\n return parseFloat(ppd.value) / parseFloat(ppd.end);\r\n }\r\n default:\r\n return -1;\r\n }\r\n }\r\n }\r\n }\r\n };\r\n var materialSqft = -1;\r\n for (const m in materials) {\r\n if (Array.isArray(materials[m].stonePricingId)\r\n && materials[m].stonePricingId.length\r\n && materials[m].stonePricingId[0]) {\r\n const msqft = getSqft(materials[m].stonePricingId[0]);\r\n if (msqft > materialSqft) {\r\n materialSqft = msqft;\r\n }\r\n }\r\n }\r\n\r\n const $mc = materialSqft > -1 ? materialSqft : materialPrice / material; // material cost broken down to square foot\r\n const $p = 1; // the per-quantity value of the selected material of the feature\r\n\r\n const $f = quantity; // the feature quantity of the selected feature\r\n const $c = featureCost; // the feature cost of the selected features\r\n const $fa = storeState.cartState.cartItems ? storeState.cartState.cartItems.map(ci => ({\r\n id: ci.cartFeature.dbFeature.id,\r\n quantity: ci.quantity,\r\n name: ci.cartFeature.dbFeature.customDisplayName || ci.cartFeature.dbFeature.displayName,\r\n sharedFeatureName: ci.cartFeature.dbFeature.sharedFeatureName,\r\n groupName: ci.cartFeature.dbFeature.groupName,\r\n wizardGroupId: ci.fromWizardGroupId,\r\n currentQuote: ci.currentQuote,\r\n partId: ci.partId,\r\n })) : []; // an array of key value pairs with the keys being feature id and value being quantity\r\n\r\n if (storeState.wizardState.wizardActiveItem) { // we need to check wizard current selected values to display prices\r\n Object.keys(storeState.wizardState.wizardSelectedValues).forEach(stepIndex => {\r\n const selectedValue = storeState.wizardState.wizardSelectedValues[stepIndex];\r\n if (selectedValue.selectedFeature && selectedValue.quantity) {\r\n $fa.push({\r\n id: selectedValue.selectedFeature.dbFeature.id,\r\n quantity: selectedValue.quantity,\r\n name: selectedValue.selectedFeature.dbFeature.customDisplayName || selectedValue.selectedFeature.dbFeature.displayName,\r\n groupName: selectedValue.selectedFeature.dbFeature.groupName\r\n })\r\n }\r\n })\r\n }\r\n const $room = {\r\n $i: activeQuoteIndex,\r\n $m: quoteMaterial,\r\n $b: quoteBacksplashMaterial,\r\n }\r\n const $other = { // to prevent creating new parameters, all new properties should go here\r\n $useCostPrices: storeState.fabricatorState.settings.useFabricatorCostPrices,\r\n $useDiscountPrices: storeState.fabricatorState.settings.showSalePrices,\r\n $sharedFeatureName: dbFeature.sharedFeatureName,\r\n }\r\n // const $fs = layout.dataObject.features; // its an array of all the fabricator's features\r\n const $fs = []; // its an array of all the fabricator's features\r\n const logic = new Function('$m', '$mc', '$f', '$c', '$fa', '$fs', '$p', '$b', '$room', '$other', complexLogic);\r\n featureTotalPrice = logic($m, $mc, $f, $c, $fa, $fs, $p, $b, $room, $other);\r\n // console.log(888, 'Complex', feature.complexLogic, featureCost, quantity);\r\n } catch (e) {\r\n console.log('Feature complex logic failed.', e);\r\n }\r\n } else if (dbFeature.comparisonType === \"min\" && dbFeature.comparisonFor !== \"complex\") {\r\n if (quantity < dbFeature.baseQuantity) {\r\n featureTotalPrice = featureCost * dbFeature.baseQuantity;\r\n } else {\r\n featureTotalPrice = quantity * featureCost;\r\n }\r\n } else {\r\n featureTotalPrice = featureCost * quantity;\r\n }\r\n }\r\n\r\n if (isNaN(featureTotalPrice)) {\r\n return 0\r\n }\r\n if (storeState.cartState.markUpLogic) {\r\n return updatePriceWithMarkUp(featureTotalPrice, storeState.cartState.markUpLogic, storeState.fabricatorState.settings);\r\n }\r\n return featureTotalPrice;\r\n}\r\n\r\nlet __stoneSupplierStones = null;\r\nlet __quotePricing = null;\r\n\r\nexport function calculateStoneCost(feature, quantity, stonePricing, stoneSupplier, useSlabSqftPricing, fabricatorSettings, cartState) {\r\n if (!feature || (feature.stonePricingId && feature.stonePricingId.length === 1) && feature.stonePricingId[0] === -1) {\r\n // stone was not found\r\n if (feature) {\r\n const price = getFeaturePriceProperty({dbFeature: feature});\r\n if (price > 0) {\r\n return price\r\n }\r\n }\r\n return 0;\r\n }\r\n\r\n // only one fabricator here\r\n\r\n let minPrice = -1;\r\n const quotePricing = __quotePricing || (__quotePricing = pricingProfiles());\r\n const stoneSupplierStones = __stoneSupplierStones\r\n || (feature.stonePricingId && feature.stonePricingId.length > 0 ? __stoneSupplierStones = feature.stonePricingId.map(_ => stonePricing[_]) : null);\r\n\r\n if (feature.stonePricingId && feature.stonePricingId.length > 0 && feature.stonePricingId[0]) {\r\n feature.stonePricingId.forEach(id => {\r\n let materialPrice = -1;\r\n const stoneSupplierStone = stonePricing[id]; // stone supplier stone\r\n if (quotePricing && quotePricing.hasPricingProfileAssigned(stoneSupplierStone, fabricatorSettings)) {\r\n const fabPrice = quotePricing.calculatePrice(\r\n stoneSupplierStone.pricingPreset_id,\r\n quantity,\r\n null,\r\n useSlabSqftPricing,\r\n getSingleSlabArea(),\r\n feature,\r\n fabricatorSettings\r\n );\r\n if (materialPrice === -1 || fabPrice < materialPrice) {\r\n materialPrice = fabPrice;\r\n }\r\n if (minPrice === -1 || minPrice > materialPrice) {\r\n minPrice = materialPrice;\r\n }\r\n } else if (stoneSupplierStone) {\r\n let price = stoneSupplierStone.price;\r\n if (stoneSupplierStone.pricePlus > 0) {\r\n price = stoneSupplierStone.pricePlus;\r\n }\r\n let material = quantity;\r\n if (stoneSupplierStone.perQuantity > 1) {\r\n material = Math.ceil(material / stoneSupplierStone.perQuantity);\r\n }\r\n let materialPrice = price * parseFloat(material);\r\n\r\n let baseQuantity;\r\n if (stoneSupplierStone.comparisonType === \"gte+\") {\r\n baseQuantity = parseInt(stoneSupplierStone.baseQuantity) - 1;\r\n if (material > baseQuantity) {\r\n let perUnit = parseFloat(stoneSupplierStone.maxQuantity);\r\n const margin = stoneSupplier.margin;\r\n perUnit = calcPriceWithMargin(perUnit, margin);\r\n materialPrice = baseQuantity * price;\r\n forEach(stoneSupplierStones, function (stoneSupplierStoneInner) {\r\n if (stoneSupplierStoneInner.comparisonType === \"between\" &&\r\n material >= stoneSupplierStoneInner.baseQuantity) {\r\n materialPrice = stoneSupplierStoneInner.price;\r\n for (let n = stoneSupplierStoneInner.maxQuantity + 1; n <= baseQuantity; n++) {\r\n materialPrice += price;\r\n }\r\n }\r\n });\r\n for (let i = baseQuantity + 1; i <= material; i++) {\r\n materialPrice += perUnit;\r\n }\r\n }\r\n } else if (stoneSupplierStone.comparisonType === \"min\") {\r\n if (parseFloat(material) < stoneSupplierStone.baseQuantity) {\r\n materialPrice = price * parseFloat(stoneSupplierStone.baseQuantity);\r\n }\r\n } else if (stoneSupplierStone.comparisonType === \"lte\") {\r\n baseQuantity = parseInt(stoneSupplierStone.baseQuantity);\r\n if (material <= baseQuantity) {\r\n let bFoundOther = false;\r\n forEach(stoneSupplierStones, function (stoneSupplierStoneInner) {\r\n if (stoneSupplierStoneInner.comparisonType === \"lte\" &&\r\n material <= stoneSupplierStoneInner.baseQuantity\r\n && stoneSupplierStoneInner.baseQuantity < baseQuantity) {\r\n bFoundOther = true;\r\n }\r\n });\r\n if (bFoundOther) {\r\n return;\r\n }\r\n }\r\n } else if (stoneSupplierStone.comparisonType === \"between\") {\r\n materialPrice = stoneSupplierStone.price;\r\n }\r\n\r\n if (validStoneSupplierStonePrice(stoneSupplierStone, material)) {\r\n if (minPrice === -1 || minPrice > materialPrice) {\r\n minPrice = materialPrice;\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n if (cartState.markUpLogic) {\r\n minPrice = updatePriceWithMarkUp(minPrice, cartState.markUpLogic, fabricatorSettings);\r\n }\r\n\r\n return Math.trunc(minPrice * 100) / 100;\r\n}\r\n\r\nfunction calcPriceWithMargin(price, margin) {\r\n const total = parseFloat(price);\r\n return (total + (margin * total));\r\n}\r\n\r\n// function calcPriceWithTax(price, tax) {\r\n// const total = parseFloat(price);\r\n// return (total + (tax / 100.0 * total));\r\n// }\r\n\r\nfunction validStoneSupplierStonePrice(stoneSupplierStone, quantity) {\r\n let ret = false;\r\n let material = quantity;\r\n if (stoneSupplierStone.perQuantity > 1) {\r\n material = Math.ceil(material / stoneSupplierStone.perQuantity);\r\n }\r\n switch (stoneSupplierStone.comparisonType) {\r\n case \"lte\":\r\n if (material <= stoneSupplierStone.baseQuantity) {\r\n ret = true;\r\n }\r\n break;\r\n case \"between\":\r\n if (material >= stoneSupplierStone.baseQuantity\r\n && material <= stoneSupplierStone.maxQuantity) {\r\n ret = true;\r\n }\r\n break;\r\n case \"gte\":\r\n case \"gte+\":\r\n if (material >= stoneSupplierStone.baseQuantity) {\r\n ret = true;\r\n }\r\n break;\r\n default:\r\n ret = true;\r\n }\r\n return ret;\r\n}\r\n\r\nfunction validateFeaturePrice(feature, quantity, measureUnit) {\r\n let ret = false;\r\n switch (feature.comparisonType) {\r\n case \"lte\":\r\n if (quantity <= feature.baseQuantity) {\r\n ret = true;\r\n }\r\n break;\r\n case \"between\":\r\n if (quantity >= feature.baseQuantity && quantity <= feature.maxQuantity) {\r\n ret = true;\r\n }\r\n break;\r\n case \"gte\":\r\n case \"gte+\":\r\n if ((quantity >= feature.baseQuantity) || ((measureUnit === \"Metric\") && (quantity > 0) && (feature.baseQuantity === 1))) {\r\n ret = true;\r\n }\r\n break;\r\n default:\r\n ret = true;\r\n }\r\n\r\n return ret;\r\n}\r\n\r\nexport function parseQuery(queryString = null) {\r\n queryString = queryString || window.location.search;\r\n const query = {};\r\n const pairs = (queryString[0] === '?' ? queryString.substr(1) : queryString).split('&');\r\n for (let i = 0; i < pairs.length; i++) {\r\n let pair = pairs[i].split('=');\r\n query[decodeURIComponent(pair[0]).toLowerCase()] = decodeURIComponent(pair[1] || '');\r\n }\r\n return query;\r\n}\r\nexport function metaDataToCamelCase(metaData) {\r\n if (!metaData) {\r\n metaData = {}; // it could be null, so default parameter is not working\r\n }\r\n Object.keys(metaData).forEach(key => { // make all metadata keys CamelCased (dashboard saving issue)\r\n if (key[0] !== key[0].toUpperCase()) {\r\n const value = metaData[key];\r\n const camelCased = key.charAt(0).toUpperCase() + key.slice(1);\r\n metaData[camelCased] = value;\r\n delete metaData[key]; // we don't need lowerCased key anymore\r\n }\r\n });\r\n return metaData;\r\n}\r\n\r\nexport const capitalizeFirstLetters = (str) => {\r\n if (!str) {\r\n return \"\"\r\n }\r\n return str.split(\" \").map(word => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()).join(\" \")\r\n}\r\n\r\n// export const getObjectWithLowerCasedKeys = (obj) => {\r\n// let\r\n// key,\r\n// keys = Object.keys(obj),\r\n// n = keys.length,\r\n// newObj={};\r\n// while (n--) {\r\n// key = keys[n];\r\n// newObj[key.toLowerCase()] = obj[key];\r\n// }\r\n// return newObj\r\n// };\r\n\r\nexport const getCurrencySign = (currencyName, fabricatorSettings) => {\r\n switch (currencyName) {\r\n case \"USD\":\r\n default:\r\n return fabricatorSettings.useDifferentCurrencies ? \"USD\" : \"$\";\r\n case \"SPN\":\r\n case \"EUR\":\r\n return \"€\";\r\n case \"GBP\":\r\n return \"£\";\r\n case \"PAB\":\r\n return \"B/.\";\r\n case \"PLN\":\r\n return \"zł\";\r\n case \"ARS\":\r\n return \"$\";\r\n }\r\n};\r\n\r\nexport const getCurrencyPosition = (currencyName) => {\r\n switch (currencyName) {\r\n case \"USD\":\r\n case \"SPN\":\r\n case \"EUR\":\r\n case \"GBP\":\r\n case \"PAB\":\r\n case \"ARS\":\r\n default:\r\n return \"left\";\r\n case \"PLN\":\r\n return \"right\";\r\n }\r\n};\r\n\r\n/**\r\n *\r\n * @param fabricatorSettings {object} fabricatorSettings\r\n * @param price {string|number}\r\n * @param feature {featureInterface}\r\n * @param withSpace {boolean}\r\n * @param alwaysRound {boolean} // returns $10 -> $10.00\r\n * @return {string}\r\n */\r\nexport const getPriceWithCurrency = (fabricatorSettings, price, feature = null, withSpace = false, alwaysRound = false) => {\r\n if (fabricatorSettings.currencyPosition === \"right\") {\r\n return price + fabricatorSettings.currencySign\r\n }\r\n let currencySign = fabricatorSettings.currencySign;\r\n if (fabricatorSettings.useDifferentCurrencies && feature && feature.getFeatureCurrency) {\r\n const separateCurrency = feature.getFeatureCurrency();\r\n if (separateCurrency) {\r\n currencySign = getCurrencySign(separateCurrency, fabricatorSettings);\r\n }\r\n }\r\n if (fabricatorSettings.useDifferentCurrencies) {\r\n if (currencySign === \"USD\") {\r\n withSpace = true;\r\n }\r\n price = numberWithCommas(price);\r\n }\r\n if (currencySign === \"$\") {\r\n const amount = typeof price === \"string\" ? +(price.replace(\",\", \"\")) : price;\r\n const isExact = !alwaysRound && (Number.isInteger(amount) || amount % 1 === 0);\r\n // Create the formatter\r\n const formatter = new Intl.NumberFormat('en-US', {\r\n style: 'currency',\r\n currency: 'USD',\r\n minimumFractionDigits: isExact ? 0 : 2,\r\n maximumFractionDigits: isExact ? 0 : 2,\r\n });\r\n return formatter.format(amount);\r\n }\r\n return withSpace ? currencySign + \" \" + price : currencySign + price\r\n};\r\n\r\nexport const getFeatureIsLocked = (feature, ignoreLocked = false) => {\r\n if (!feature) {\r\n return false\r\n }\r\n const leadCaptureProperty = isVisualizerRoute() || IS_LIXIL_UI ? \"leadCapture\" : \"leadCaptureOnQuote\";\r\n const {fabricatorState, userState, filterState} = store.getState();\r\n\r\n const fabricatorSettings = fabricatorState.settings;\r\n const {isBackend, jobId, canSaveQuote, visualizerManagement} = document.kvConfig;\r\n const isPhoneNumberValidated = userState.isPhoneNumberValidated;\r\n\r\n if (fabricatorSettings.leadCaptureShoppingCart) {\r\n if (IS_LIXIL_UI && (window.location.hash.includes(ROUTES.cart) || window.location.hash.includes(ROUTES.list))) {\r\n return !isPhoneNumberValidated;\r\n } else {\r\n if (window.location.hash.includes(\"materials\")) {\r\n return false\r\n } else if (window.location.hash.includes(\"shoppingcart\")) {\r\n return !isPhoneNumberValidated;\r\n }\r\n }\r\n }\r\n\r\n let featureIsLocked = !(\r\n ignoreLocked\r\n || !fabricatorSettings[leadCaptureProperty]\r\n || (fabricatorSettings[leadCaptureProperty] && visualizerManagement)\r\n || (fabricatorSettings[leadCaptureProperty] && isPhoneNumberValidated)\r\n || (fabricatorSettings[leadCaptureProperty] && (isBackend && jobId && canSaveQuote)));\r\n if (featureIsLocked) {\r\n featureIsLocked = !((feature.dbFeature && feature.dbFeature.unlocked) || isPhoneNumberValidated);\r\n if (!featureIsLocked && !IS_LIXIL_UI) { // search for locked filters // temporary removed from bvLook\r\n const filterValues = feature.dbFeature && feature.dbFeature.filterValueIDs;\r\n if (filterValues) {\r\n featureIsLocked = Object.keys(filterValues).some((filterKey) => {\r\n const filterGroup = filterState.filterGroups.find(group => group.id === +filterKey);\r\n const filterValue = filterGroup && filterGroup.values && filterGroup.values.find(value => value.id === filterValues[filterKey][0]);\r\n return filterValue && filterValue.lockedInWizard\r\n });\r\n }\r\n }\r\n }\r\n return featureIsLocked\r\n};\r\n\r\nexport const sortByOrder = (array) => {\r\n return array.sort((a, b) => a.order !== b.order ? a.order < b.order ? -1 : 1 : 0); // sort by order property\r\n};\r\n\r\nexport const objectWithoutProperties = (obj, keys) => {\r\n let target = {};\r\n for (let i in obj) {\r\n if (keys.indexOf(i) >= 0) continue;\r\n if (!Object.prototype.hasOwnProperty.call(obj, i)) continue;\r\n target[i] = obj[i];\r\n }\r\n return target;\r\n}\r\n\r\n/**\r\n * returns array of Ids, etc. [2313743, 2313335, 2320458]\r\n * @param bvState {object}\r\n * @param checkDifferentVisualizers {boolean}\r\n * @return {[number]}\r\n */\r\nexport const getArrayOfIdsFromBvState = (bvState, checkDifferentVisualizers = false) => {\r\n let arrayOfIds = [];\r\n if (bvState) {\r\n Object.keys(bvState).forEach((key) => {\r\n const bvStateValue = bvState[key];\r\n if (Number.isInteger(bvStateValue) && bvStateValue > 50) { // check for layout_type\r\n if (key === \"presetPrice\") { // it is a number and it is more than 12\r\n return\r\n }\r\n arrayOfIds.push(bvStateValue)\r\n } else if (Array.isArray(bvStateValue)) {\r\n bvStateValue.forEach((bvStateValueArrayItem) => {\r\n if (Number.isInteger(bvStateValueArrayItem)) {\r\n arrayOfIds.push(bvStateValueArrayItem)\r\n }\r\n })\r\n } else if (typeof bvStateValue === 'object' && bvStateValue !== null) {\r\n [\"cartItems\", \"displayLogicCartItems\"].forEach((property) => {\r\n if (bvStateValue[property] && bvStateValue[property].length) {\r\n bvStateValue[property].forEach((cartItem) => {\r\n if (checkDifferentVisualizers && (cartItem.fromVisualizerType !== bvState.visualizerType)) {\r\n return // load only current visualizer features\r\n }\r\n if (cartItem.cartFeature && cartItem.cartFeature.dbFeatureId) {\r\n arrayOfIds.push(cartItem.cartFeature.dbFeatureId)\r\n } else if (cartItem.cartFeature && cartItem.fabFeatId) { // support for old logic\r\n arrayOfIds.push(cartItem.fabFeatId)\r\n }\r\n });\r\n }\r\n });\r\n }\r\n });\r\n }\r\n return uniq(arrayOfIds)\r\n}\r\n\r\nexport const getShareUrl = (jobId) => {\r\n const url = new URL(window.location.href);\r\n console.log(\"url\", url);\r\n let searchParams = new URLSearchParams(decodeURIComponent(url.search || \"\").replace(/amp;/gi, \"\"));\r\n [\"show\", \"jobId\", \"mode\", \"saveQuote\", ...LIXIL_USER_QUERY_PARAMS].forEach(param => {\r\n searchParams.delete(param);\r\n });\r\n searchParams.set(\"design\", jobId);\r\n // const shareUrl = url.href\r\n // .replace(/&show=?\\w*?&/, \"&\")\r\n // .replace(/&jobId=\\d*/gi, \"\")\r\n // .replace(/&mode=\\w*/gi, \"\")\r\n // .replace(/&saveQuote=\\w*/gi, \"\")\r\n // .split(\"#/\")[0]\r\n\r\n let baseHref = url.origin + url.pathname;\r\n if (baseHref[baseHref.length - 1] === \"/\") {\r\n baseHref.slice(0, -1);\r\n }\r\n\r\n // const shareUrl = baseHref + \"?\" + searchParams.toString() + url.hash;\r\n const shareUrl = baseHref + \"?\" + searchParams.toString();\r\n // console.log(\"shareUrl\", shareUrl);\r\n return shareUrl\r\n};\r\n\r\nexport const getDefaultRoomName = (messages, quoteRoomType = \"\") => {\r\n switch (quoteRoomType || document.kvConfig.visualizerType) {\r\n case \"Bathroom\":\r\n case \"BV\":\r\n case \"bvScene\":\r\n case \"bvLook\":\r\n return messages[\"rooms.Bathroom\"]\r\n case \"Kitchen\":\r\n case \"KV\":\r\n case \"kvMaster\":\r\n case \"kvScene\":\r\n return messages[\"rooms.Kitchen\"]\r\n default:\r\n return quoteRoomType || document.kvConfig.visualizerType || \"\"\r\n }\r\n}\r\n\r\n/**\r\n * @param feature {featureInterface}\r\n * @param messages {object}\r\n * @param locale {string}\r\n * @param fabricatorData {object}\r\n * @param filterGroups {array}\r\n * @param useCollectionName {boolean}\r\n * @return {string}\r\n */\r\nexport const getStringFeatureName = (feature,\r\n messages,\r\n locale,\r\n fabricatorData,\r\n filterGroups,\r\n useCollectionName = false) => {\r\n if (!feature) {\r\n return \"\"\r\n }\r\n\r\n if ((fabricatorData.isLowes || fabricatorData.isCaesarStone) && messages) {\r\n if (locale === \"fr-FR\" && messages[\"transDoc.customDisplayName_FR.\" + feature.dbFeature.sharedFeatureName]) {\r\n return messages[\"transDoc.customDisplayName_FR.\" + feature.dbFeature.sharedFeatureName]\r\n } else if (locale === \"pl-PL\" && messages[\"transDoc.customTranslateName_PL.\" + feature.dbFeature.sharedFeatureName]) {\r\n return messages[\"transDoc.customTranslateName_PL.\" + feature.dbFeature.sharedFeatureName]\r\n }\r\n }\r\n\r\n if ((feature.dbFeature.sharedFeatureName === \"additionalCartItem.minimumCharge\")) {\r\n if (fabricatorData.isCaesarStone) {\r\n return `${messages[feature.dbFeature.sharedFeatureName]} (${feature.fromFeatureName})`\r\n }\r\n return messages[feature.dbFeature.sharedFeatureName]\r\n }\r\n\r\n if (!feature.getFeatureName) {\r\n return feature._customDisplayName || feature.customDisplayName || \"\"\r\n }\r\n\r\n return (useCollectionName && !fabricatorData.isEncore)\r\n ? feature.getCollectionName(filterGroups) || feature.getFeatureName()\r\n : feature.getFeatureName()\r\n}\r\n\r\n/**\r\n * @param quoteIndex {number|string}\r\n * @param cartItems {array}\r\n * @param quotes {array}\r\n * @param messages {object}\r\n * @param locale {string}\r\n * @param fabricatorData {object}\r\n * @return {string}\r\n */\r\nexport const getRoomName = (quoteIndex, cartItems = [], quotes = [], messages, locale, fabricatorData) => {\r\n\r\n quoteIndex = +quoteIndex;\r\n\r\n const getCurentQuoteRoomItem = (quoteIndexToFind) => {\r\n return cartItems.find(cItem => (cItem.currentQuote === quoteIndexToFind) && (cItem.partId === \"room\"))\r\n };\r\n\r\n const quoteRoomNameToCompare = (currentQuoteIndex) => {\r\n const roomCartItem = getCurentQuoteRoomItem(currentQuoteIndex);\r\n if (roomCartItem && roomCartItem.cartFeature && roomCartItem.cartFeature.getLowerCasedCustomDisplayName) {\r\n return roomCartItem.cartFeature.getLowerCasedCustomDisplayName()\r\n }\r\n const quoteRoomType = quotes[currentQuoteIndex] && quotes[currentQuoteIndex].room ? quotes[currentQuoteIndex].room : \"\";\r\n return (getDefaultRoomName(messages, quoteRoomType) || \"\").toLowerCase();\r\n };\r\n\r\n const upperCaseAlp = [\"A\",\"B\",\"C\",\"D\",\"E\",\"F\",\"G\",\"H\",\"I\",\"J\",\"K\",\"L\",\"M\",\"N\",\"O\",\"P\",\"Q\",\"R\",\"S\",\"T\",\"U\",\"V\",\"W\",\"X\",\"Y\",\"Z\"];\r\n const currentRoomName = quoteRoomNameToCompare(quoteIndex);\r\n const quoteRoomType = quotes[quoteIndex] && quotes[quoteIndex].room ? quotes[quoteIndex].room : \"\";\r\n const roomItem = getCurentQuoteRoomItem(quoteIndex);\r\n const baseRoomName = roomItem && roomItem.cartFeature\r\n ? getStringFeatureName(roomItem.cartFeature, messages, locale, fabricatorData)\r\n : getDefaultRoomName(messages, quoteRoomType);\r\n\r\n if (quotes.some((quote, currentQuoteIndex) => {\r\n return (quoteIndex !== currentQuoteIndex) && (quoteRoomNameToCompare(currentQuoteIndex) === currentRoomName)\r\n })) {\r\n let letterIndex = 0;\r\n for (let i = 0; i <= quotes.length; i++) {\r\n if ((i < quoteIndex) && (quoteRoomNameToCompare(i) === currentRoomName)) {\r\n letterIndex++\r\n }\r\n }\r\n return baseRoomName + upperCaseAlp[letterIndex] || \"\"\r\n }\r\n return baseRoomName || \"\"\r\n};\r\n\r\n/**\r\n * @param quoteIndex {number|string}\r\n * @param cartItems {array}\r\n * @param quotes {array}\r\n * @param messages {object}\r\n * @param locale {string}\r\n * @param fabricatorData {object}\r\n * @return {string}\r\n */\r\nexport const getBaseRoomName = (quoteIndex, cartItems = [], quotes = [], messages, locale, fabricatorData) => {\r\n\r\n quoteIndex = +quoteIndex;\r\n\r\n const getCurentQuoteRoomItem = (quoteIndexToFind) => {\r\n return cartItems.find(cItem => (cItem.currentQuote === quoteIndexToFind) && (cItem.partId === \"room\"))\r\n };\r\n\r\n const quoteRoomType = quotes[quoteIndex] && quotes[quoteIndex].room ? quotes[quoteIndex].room : \"\";\r\n const roomItem = getCurentQuoteRoomItem(quoteIndex);\r\n const baseRoomName = roomItem && roomItem.cartFeature\r\n ? getStringFeatureName(roomItem.cartFeature, messages, locale, fabricatorData)\r\n : getDefaultRoomName(messages, quoteRoomType);\r\n\r\n return baseRoomName || \"\"\r\n};\r\n\r\nexport const getEventPosition = (e) => {\r\n const eventX = e.clientX ? e.clientX : (e.touches[0] ? e.touches[0].clientX : e.changedTouches[0].clientX);\r\n const eventY = e.clientY ? e.clientY : (e.touches[0] ? e.touches[0].clientY : e.changedTouches[0].clientY);\r\n return {\r\n x: parseFloat(eventX).toFixed(2),\r\n y: parseFloat(eventY).toFixed(2)\r\n }\r\n};\r\n\r\nexport const getUrlParam = (queryParam) => {\r\n const urlParams = new URLSearchParams(window.location.search);\r\n return urlParams.get(queryParam);\r\n}\r\n\r\n/**\r\n *\r\n * @param feature {object} feature\r\n * @param intl {object} translates provider\r\n * @param fabricatorData {object} fabricator state\r\n * @param quantity {number}\r\n * @return {string}\r\n */\r\nexport const getFeatureUnit = (feature, intl, fabricatorData, quantity) => {\r\n const dbFeature = feature.dbFeature;\r\n if ((fabricatorData.isLowes || fabricatorData.isCaesarStone) && intl.locale === \"fr-FR\" && intl.messages && intl.messages[\"transDoc.units_FR.\" + dbFeature.sharedFeatureName]) {\r\n if ((intl.formatMessage({id: \"transDoc.units_FR.\" + dbFeature.sharedFeatureName}) === \"pieds carrés\") && dbFeature.unit === \"Each\") {\r\n return quantity === 1 ? \"unité\" : \"nombre unites\"\r\n }\r\n return intl.formatMessage({id: \"transDoc.units_FR.\" + dbFeature.sharedFeatureName})\r\n }\r\n if (dbFeature.unit) {\r\n let lowercasedUnit = dbFeature.unit.toLowerCase();\r\n return lowercasedUnit === \"each\" || lowercasedUnit === \"unit\"\r\n ? quantity <= 1\r\n ? intl.formatMessage({id: \"quotingTool.featureInfo.defaultQuantity\"})\r\n : intl.formatMessage({id: \"quotingTool.featureInfo.defaultQuantityMultiple\"})\r\n : dbFeature.unit\r\n }\r\n if (feature.isStoneFeature) {\r\n return intl.formatMessage({id: \"shoppingCart.fetureInCartDefaultQuantitySQFT\"})\r\n }\r\n return intl.formatMessage({id: \"shoppingCart.fetureInCartDefaultQuantity\"})\r\n};\r\n\r\n/**\r\n *\r\n * @param cartItem {object}\r\n * @param intl {object} translates provider\r\n * @return {string}\r\n */\r\nexport const getCartItemUnit = (cartItem, intl) => {\r\n return cartItem.displayFakeFeatureGroupName === \"slabs\"\r\n ? getSlabUnit(cartItem.displayFakeQuantity, intl)\r\n : null\r\n};\r\n\r\n/**\r\n *\r\n * @param totalCount {int}\r\n * @param intl {object} translates provider\r\n * @return {string}\r\n */\r\nexport const getSlabUnit = (totalCount, intl) => {\r\n return totalCount === 1\r\n ? intl.formatMessage({id: \"sqftFeaturesPopup.unit.slab\"})\r\n : intl.formatMessage({id: \"sqftFeaturesPopup.unit.slabs\"})\r\n};\r\n\r\n/**\r\n * @returns {DesignNavigationItem}\r\n */\r\nexport const getSlabsFeatureGroup = (layout = getCurrentLayout()) => {\r\n\r\n const countertopFeatureGroup = getCountertopFeatureGroup(layout);\r\n\r\n // create new featureGroup and add it to qtCategories\r\n let slabsFeatureGroup = layout.addNonVisualizerSubPart(\"Slabs\");\r\n if (countertopFeatureGroup) {\r\n slabsFeatureGroup.part.featuresList = countertopFeatureGroup.featuresList;\r\n slabsFeatureGroup.part.translateId = 'visualizer.kitchen.slabs';\r\n slabsFeatureGroup.part.wasCreatedFromGroupName = countertopFeatureGroup.dbName || countertopFeatureGroup.partName;\r\n }\r\n\r\n return slabsFeatureGroup\r\n}\r\n\r\n/**\r\n * todo: this will add slab featureGroup to each category, we need to check what if qtCategories doesn't match room name\r\n * add Slabs FeatureGroup To First qtCategory\r\n * @returns {DesignNavigationItem}\r\n */\r\nexport const getQtCategoriesWithSlabFeatureGroup = (qtCategories) => {\r\n const state = store.getState();\r\n const fabricatorSettings = state.fabricatorState.settings;\r\n if (qtCategories && fabricatorSettings.showSlabMode) {\r\n const cartItems = state.cartState.cartItems;\r\n const activeQuoteIndex = state.quotesState.activeQuoteIndex;\r\n const selectedQuoteRoomCartItem = getCurrentQuoteRoomCartItem(cartItems, activeQuoteIndex);\r\n const selectedQuoteRoomFeature = selectedQuoteRoomCartItem ? selectedQuoteRoomCartItem.cartFeature : null;\r\n const activeCategory = qtCategories.find(qtCategory => featureIsMatchingQtCatName(selectedQuoteRoomFeature, qtCategory.name, true));\r\n let categoryToSearch = activeCategory ? activeCategory : qtCategories[0];\r\n if (categoryToSearch && !categoryToSearch.subParts.some(subPart => subPart.part.partId === 'slabs')) {\r\n let subParts = [...categoryToSearch.subParts];\r\n let slabsFeatureGroup = getSlabsFeatureGroup();\r\n subParts.push(slabsFeatureGroup);\r\n qtCategories[qtCategories.findIndex(qtCategory => qtCategory === categoryToSearch)].subParts = subParts;\r\n }\r\n }\r\n\r\n return qtCategories\r\n}\r\n\r\n/**\r\n *\r\n * @param featureGroup {object} featureGroup\r\n * @param intl {object} translates provider\r\n * @param fabricatorData {object} fabricator state\r\n * @return {string}\r\n */\r\nexport const getFeatureGroupName = (featureGroup, intl, fabricatorData) => {\r\n if (!featureGroup || !intl || !fabricatorData) {\r\n return \"\"\r\n }\r\n const lowerCasedName = featureGroup.partName.toLowerCase();\r\n if ((fabricatorData.isLowes || fabricatorData.isCaesarStone) && intl.messages) {\r\n if (intl.locale === \"fr-FR\" && intl.messages[\"transDoc.customDisplayName_FR.\" + lowerCasedName]) {\r\n return intl.formatMessage({id: \"transDoc.customDisplayName_FR.\" + lowerCasedName})\r\n } else if (intl.locale === \"pl-PL\" && intl.messages[\"transDoc.customTranslateName_PL.\" + lowerCasedName]) {\r\n return intl.formatMessage({id: \"transDoc.customTranslateName_PL.\" + lowerCasedName})\r\n }\r\n }\r\n if ((intl.locale === \"en-US\" || fabricatorData.isDeStefano) && featureGroup.customGroupDisplayName) {\r\n return featureGroup.customGroupDisplayName\r\n }\r\n if (featureGroup.partName === \"Room\") {\r\n return intl.messages[\"shoppingCart.roomTitle\"]\r\n }\r\n\r\n return intl.messages[featureGroup.translateId] || featureGroup.partName\r\n};\r\n\r\n/**\r\n * Each dbFeature should go through this fixes!\r\n * @param dbFeature {object}\r\n * @return dbFeature {object}\r\n */\r\nexport const fixDbFeatureProperties = (dbFeature) => {\r\n dbFeature.metaData = metaDataToCamelCase(dbFeature.metaData); // make all metadata keys CamelCased(dashboard saving issue)\r\n if (!dbFeature.filterValueIDs) {\r\n dbFeature.filterValueIDs = {}\r\n }\r\n if (!dbFeature.fabFilterValueIDs) {\r\n dbFeature.fabFilterValueIDs = {}\r\n }\r\n if (dbFeature.sharedFeatureName) {\r\n dbFeature.sharedFeatureName = dbFeature.sharedFeatureName.trim();\r\n // if (!dbFeature.sku) {\r\n // dbFeature.sku = dbFeature.sharedFeatureName // bvLook visualizer only has shared feature names, not the sku :(\r\n // }\r\n }\r\n return dbFeature\r\n}\r\n\r\n/**\r\n * @param forFeature {featureInterface}\r\n * @param fabricatorSettings {object}\r\n * @param checkArray {array}\r\n * @return {boolean}\r\n */\r\nexport const canShowSqftButtonForFeature = (forFeature, fabricatorSettings, checkArray = null) => {\r\n if (!checkArray) {\r\n checkArray = [...Object.keys({...COUNTERTOP_LABELS, ...EDGE_LABELS, ...BACKSPLASH_LABELS, ...CORNER_LABELS}), ...LOOK_WALLS_ONLY];\r\n }\r\n const canShowForCommonIds = checkArray.includes(forFeature.partId) || (\r\n forFeature.dbFeature && (forFeature.dbFeature.sharedFeatureName === \"Xtone Underlayment\") // porcelanosa hardcode, but can be used for all\r\n && checkArray.some(key => key === \"center_island_countertop\") // show it only once, cabinets check\r\n )\r\n switch (getCommonVisualizerType()) {\r\n case \"bathroom\": {\r\n if (fabricatorSettings.enableSqFt) { // fabricatorSettings.enableSqFt - is actually disable\r\n return false\r\n }\r\n return canShowForCommonIds\r\n }\r\n case \"fireplace\": { // enableSqFt doesn't work on the fireplace profile omg\r\n return canShowForCommonIds\r\n }\r\n case \"kitchen\":\r\n default: { // remove default as we have fireplace or other visualizer ready\r\n if (fabricatorSettings.enableSqFt) { // fabricatorSettings.enableSqFt - is actually disable\r\n return false\r\n }\r\n return canShowForCommonIds\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * @param forFeature {featureInterface}\r\n * @param fabricatorSettings {object}\r\n * @return {boolean}\r\n */\r\nexport const canShowSqftCabinetButtonForFeature = (forFeature, fabricatorSettings) => {\r\n return isCabinetsFabricator()\r\n || canShowSqftButtonForFeature(forFeature, fabricatorSettings, Object.keys({...CABINET_LABELS}))\r\n}\r\n\r\n/**\r\n * @return {boolean}\r\n */\r\nexport const canShowSqftButton = () => {\r\n const fabricatorSettings = store.getState().fabricatorState.settings;\r\n\r\n if (document.kvConfig.userId === 238280) { // solid surface\r\n return true\r\n }\r\n\r\n return (document.kvConfig.visualizerType === \"Kitchen\" || document.kvConfig.visualizerType === \"KV\" || fabricatorSettings.useCategorySwitching)\r\n && !fabricatorSettings.enableSqFt; // fabricatorSettings.enableSqFt - is actually disable\r\n}\r\n\r\n/**\r\n *\r\n * @param fromFeature {featureInterface}\r\n * @param newQuantity {number}\r\n * @param qtActiveCategory {string}\r\n * @return {cartItemInterface}\r\n */\r\nexport const getCartItemObject = (fromFeature, newQuantity, qtActiveCategory) => {\r\n const subPart = fromFeature.getParent();\r\n const parentName = subPart.getParent ? subPart.getParent().partName : subPart.partName\r\n const cartItemObject = {\r\n selectionGroup: parentName,\r\n quantity: newQuantity,\r\n partId: fromFeature.partId,\r\n cartFeature: fromFeature,\r\n }\r\n // if (fromFeature.inCatProperties) { // added always, to properly switch to feature group and category from cart\r\n cartItemObject.fromQtCategory = qtActiveCategory\r\n // }\r\n return cartItemObject\r\n}\r\n\r\n/**\r\n *\r\n * @param relatedFeatures {array} feature relatedFeatures array\r\n * @param currentFeature {object} feature\r\n * @param searchInputValue\r\n * @return {object}\r\n */\r\nexport const getRelatedFeaturesFromLayout = (relatedFeatures, currentFeature, searchInputValue = \"\", selectedFilters = []) => {\r\n const layout = getCurrentLayout();\r\n const parentParts = Object.values(layout.parts);\r\n let relatedFeaturesFound = [];\r\n let noFeaturesFound = [];\r\n if (!Array.isArray(relatedFeatures)) {\r\n return {noFeaturesFound, relatedFeaturesFound}\r\n }\r\n relatedFeatures.forEach(relatedFeature => {\r\n let featureIsFound = false;\r\n let groupName = relatedFeature.groupName;\r\n if (!groupName) {\r\n groupName = splitFeatureName(relatedFeature.displayName).groupName;\r\n }\r\n groupName = groupName.toLowerCase().trim();\r\n parentParts.forEach(parentPart => {\r\n parentPart.relatedItems.forEach(relItem => {\r\n let edgeCondition = true;\r\n const dbName = (relItem.dbName || relItem.partName).toLowerCase().trim();\r\n // 157699 - hardcode for stone_industries_pan.quotekitchenandbath.com/kitchen - they have back countertop & center island edge\r\n if (groupName === \"edge profile\" && (document.kvConfig.userId !== 157699) && (relItem.partId !== currentFeature.partId)) {\r\n edgeCondition = false; // take edge only for countertop || center_island_countertop\r\n }\r\n if ((dbName === groupName) && edgeCondition) {\r\n let feature = null;\r\n Object.keys(relItem.featuresList).forEach(layoutType => {\r\n feature = feature || relItem.featuresList[layoutType].find(feature => {\r\n return feature.dbFeature.id === relatedFeature.id;\r\n })\r\n });\r\n if (feature) {\r\n if (searchInputValue !== \"\") {\r\n if (feature.getFeatureName().toLowerCase().includes(searchInputValue.trim().toLowerCase())\r\n || (feature.dbFeature && feature.dbFeature.description && feature.dbFeature.description.toLowerCase().includes(searchInputValue.trim().toLowerCase()))\r\n ) {\r\n relatedFeaturesFound.push(feature);\r\n featureIsFound = true;\r\n }\r\n } else {\r\n relatedFeaturesFound.push(feature);\r\n featureIsFound = true;\r\n }\r\n }\r\n }\r\n })\r\n });\r\n if (!featureIsFound) {\r\n noFeaturesFound.push(relatedFeature.id)\r\n }\r\n relatedFeaturesFound = filterFeaturesByValues(relatedFeaturesFound, selectedFilters);\r\n });\r\n return {noFeaturesFound, relatedFeaturesFound}\r\n}\r\n\r\nexport const getFilteredRelatedFeatures = (relatedFeaturesToCheck) => {\r\n // console.log(\"relatedFeaturesToCheck\", relatedFeaturesToCheck);\r\n let relatedFeatures = [];\r\n relatedFeaturesToCheck.forEach((relFeature) => {\r\n const featureAlreadyExistIndex = relatedFeatures.findIndex(currentFeature => {\r\n return currentFeature.getSplittedFeatureName() === relFeature.getSplittedFeatureName()\r\n })\r\n if (featureAlreadyExistIndex > -1) {\r\n if (relFeature.getParent().navigationSubItems().some(navItem => {\r\n return navItem.part.dbFeature.id === relFeature.dbFeature.id\r\n })) {\r\n relatedFeatures.splice(featureAlreadyExistIndex, 1, relFeature)\r\n }\r\n } else {\r\n relatedFeatures.push(relFeature);\r\n }\r\n });\r\n // console.log(\"relatedFeatures\", relatedFeatures);\r\n return relatedFeatures\r\n};\r\n\r\n/**\r\n *\r\n * @param relatedFeatures {array} feature relatedFeatures array\r\n * @param cartItems {array} cartItems array\r\n * @param quoteIndex {number} quoteIndex\r\n * @param intl {object} react-intl instance\r\n * @param fabricatorData {object}\r\n * @return {array}\r\n */\r\nexport const createRelatedGroups = (relatedFeatures, cartItems, quoteIndex, intl, fabricatorData) => {\r\n const relatedGroups = [];\r\n relatedFeatures.forEach(relatedFeature => {\r\n const addedCartItem = cartItems.find(cartItem => {\r\n return cartItem.cartFeature && (cartItem.cartFeature.dbFeature.id === relatedFeature.dbFeature.id)\r\n && cartItem.currentQuote === quoteIndex\r\n })\r\n relatedFeature.cartQuantity = addedCartItem ? addedCartItem.quantity : 0;\r\n const relatedFeatureGroupName = getFeatureGroupName(relatedFeature.getParent(), intl, fabricatorData);\r\n const featureGroup = relatedGroups.find(group => group.name === relatedFeatureGroupName);\r\n if (!featureGroup) {\r\n const name = relatedFeature.getParent\r\n ? relatedFeatureGroupName\r\n : relatedFeature.dbFeature.groupName\r\n relatedGroups.push({\r\n name,\r\n relatedFeatures: [relatedFeature]\r\n })\r\n } else {\r\n featureGroup.relatedFeatures.push(relatedFeature);\r\n }\r\n });\r\n return relatedGroups\r\n}\r\n\r\n/**\r\n *\r\n * @param filterGroup {object}\r\n * @return {array}\r\n */\r\nexport const getAllFilterGroupValuesFromGroup = (filterGroup) => {\r\n const fValues = [];\r\n if (!filterGroup || !filterGroup.values) {\r\n return []\r\n }\r\n filterGroup.values.forEach(fValue => {\r\n fValues.push(fValue);\r\n if (Array.isArray(fValue.items) && fValue.items.length) {\r\n fValue.items.forEach(childValue => {\r\n fValues.push(childValue);\r\n });\r\n }\r\n });\r\n return fValues\r\n};\r\n\r\n/**\r\n *\r\n * @param websiteUrl {string}\r\n */\r\nexport const goToFabricatorUrl = (websiteUrl) => {\r\n websiteUrl = websiteUrl.includes(\"http\") ? websiteUrl : \"//\" + websiteUrl;\r\n if (isIframe()) {\r\n window.parent.location.href = websiteUrl;\r\n } else {\r\n window.location.href = websiteUrl;\r\n }\r\n}\r\n","import * as types from './actionTypes';\r\nimport store from './../store';\r\nimport {loaderEnable} from \"../bvcomponents/ui/loaderView\";\r\nimport * as uuid from \"uuid\";\r\nimport {hashHistory} from \"react-router\";\r\n\r\nimport {showOrderCompletePopup} from \"./shoppingCartFunctions\";\r\nimport {CART_ITEM_ADDED_BY} from \"../bvcomponents/shoppingCart/cartItemInterface\";\r\nimport {\r\n getAvailableSteps, getCorrectedWizardGroupForFeature,\r\n} from \"../bvcomponents/look/lookNavigation/lookMain/lookWizard/lookWizardFunctions\";\r\nimport {\r\n getWizardStepFromCartItemFeature\r\n} from \"../bvcomponents/look/lookNavigation/lookMain/lookWizard/lookWizardFunctions2\";\r\nimport {USE_FAB_FILTERS_ONLY} from \"../config\";\r\nimport {getBundledFeatures} from \"../bvcomponents/look/lookNavigation/lookFunctions2\";\r\nimport {IS_QKB_UI} from \"../config\";\r\n// import {showContractSigning} from \"./contractsActions\";\r\nimport {shouldUseContractSigning} from \"../bvcomponents/popups/contractSign/contractsFunctions\";\r\nimport {ROUTES} from \"../routes\";\r\n\r\n//****** SERVER & GLOBAL ******//\r\nexport const setWindowWidth = (windowWidth) => ({\r\n type: types.SET_WINDOW_WIDTH,\r\n payload: {\r\n windowWidth\r\n }\r\n});\r\nexport const setJavascriptErrors = (javascriptError) => ({\r\n type: types.SET_JAVASCRIPT_ERRORS,\r\n payload: {javascriptError}\r\n});\r\nexport const setWindowHeight = (windowHeight) => ({\r\n type: types.SET_WINDOW_HEIGHT,\r\n payload: {\r\n windowHeight\r\n }\r\n});\r\nexport const setStonePricing = (stonePricing) => ({\r\n type: types.SET_STONE_PRICING,\r\n payload: {\r\n stonePricing\r\n }\r\n});\r\nexport const setCookieAccepted = (cookieAccepted) => ({\r\n type: types.SET_COOKIE_ACCEPTED,\r\n payload: {\r\n cookieAccepted\r\n }\r\n});\r\nexport const addVisualizersLoaded = (newLoadedVisualizer) => ({\r\n type: types.ADD_VISUALIZERS_LOADED,\r\n payload: {\r\n newLoadedVisualizer\r\n }\r\n});\r\nexport const showSuccessNotification = (successNotification) => ({\r\n type: types.SHOW_SUCCESS_NOTIFICATION,\r\n payload: successNotification\r\n});\r\nexport const addProjectDocument = (file, description, sqftDiagram = false) => {\r\n\r\n let documents = store.getState().serverState.documents;\r\n const newDocument = {\r\n name: file.name,\r\n uid: uuid.v4(),\r\n text: description,\r\n created: new Date(),\r\n uploaded: false,\r\n file: file // the blob file\r\n };\r\n\r\n if (sqftDiagram) {\r\n const existingCalcDiagramIndex = documents.findIndex(doc => doc.name === file.name);\r\n if (existingCalcDiagramIndex > -1) {\r\n documents.splice(existingCalcDiagramIndex, 1);\r\n }\r\n }\r\n\r\n return {\r\n type: types.ADD_PROJECT_DOCUMENT,\r\n payload: [...documents, newDocument]\r\n }\r\n};\r\nexport const setProjectDocumentsIds = (documents) => {\r\n\r\n let oldDocuments = store.getState().serverState.documents;\r\n oldDocuments = oldDocuments.map(oldDoc => {\r\n const responseDoc = documents.find(doc => doc.name === oldDoc);\r\n if (responseDoc) {\r\n oldDoc.uploaded = true;\r\n oldDoc.documentId = responseDoc.documentId;\r\n }\r\n return oldDoc\r\n });\r\n\r\n return {\r\n type: types.SET_PROJECT_DOCUMENTS_IDS,\r\n payload: [...oldDocuments]\r\n }\r\n};\r\n\r\n/**\r\n * @param jobId {int}\r\n */\r\nexport const setJobId = (jobId) => ({type: types.SET_JOB_ID, payload: {jobId}});\r\n\r\n//****** STEPS ******//\r\nexport const setStep = (activeStep) => ({\r\n type: types.SET_STEP,\r\n payload: {\r\n activeStep\r\n }\r\n});\r\nexport const setLayoutDataParts = (layoutParts) => ({\r\n type: types.SET_LAYOUT_DATA_PARTS,\r\n payload: {\r\n layoutParts\r\n }\r\n});\r\nexport const setStepSwitching = (isSwitching) => ({\r\n type: types.SET_STEP_SWITCHING,\r\n payload: {\r\n isSwitching\r\n }\r\n});\r\n\r\n//****** SELECTION ******//\r\nexport const toggleSelectionWindow = (selectionOpened, selectionGroup) => {\r\n\r\n const {filterState} = store.getState();\r\n if (filterState.showFilters) {\r\n store.dispatch(showFilters(false));\r\n }\r\n\r\n return {\r\n type: types.TOGGLE_SELECTION_WINDOW,\r\n payload: {\r\n selectionOpened,\r\n selectionGroup\r\n }\r\n };\r\n};\r\nexport const setDefaultSelectionGroup = (selectionGroup) => ({\r\n type: types.SET_DEFAULT_SELECTION_GROUP,\r\n payload: {selectionGroup}\r\n});\r\nexport const setSelectionWindowView = (selectionWindowView) => ({\r\n type: types.SET_SELECTION_WINDOW_VIEW,\r\n payload: {selectionWindowView}\r\n});\r\nexport const toggleSelectionFeatureInfo = (selectionFeatureInfo) => ({\r\n type: types.TOGGLE_SELECTION_INFO,\r\n payload: {selectionFeatureInfo}\r\n});\r\nexport const updateFeatureInfoCount = () => ({\r\n type: types.UPDATE_FEATURE_INFO_COUNT,\r\n});\r\nexport const setVanityType = (vanityTypeSelected) => ({\r\n type: types.SET_VANITY_TYPE,\r\n payload: {vanityTypeSelected}\r\n});\r\nexport const setShowerType = (showerTypeSelected) => ({\r\n type: types.SET_SHOWER_TYPE,\r\n payload: {showerTypeSelected}\r\n});\r\nexport const changeSelectionInfoQuantity = (selectionInfoQuantity) => ({\r\n type: types.CHANGE_SELECTION_INFO_QUANTITY,\r\n payload: {selectionInfoQuantity}\r\n});\r\nexport const togglePulseFeatureInfoQuantity = (pulseFeatureInfoQuantity) => ({\r\n type: types.TOGGLE_PULSE_FEATURE_INFO_QUANTITY,\r\n payload: {pulseFeatureInfoQuantity}\r\n});\r\nexport const changeMaterialsInfoFeatureModules = (materialsInfoFeatureModules) => ({\r\n type: types.CHANGE_MATERIALS_INFO_FEATURE_MODULES,\r\n payload: {materialsInfoFeatureModules}\r\n});\r\nexport const changeActivePartRelatedItemIndex = (newActivePartRelatedItemIndex) => {\r\n return (dispatch, getState) => {\r\n const store = getState();\r\n const {activePartRelatedItemIndex} = store.selectionState;\r\n dispatch({\r\n type: types.CHANGE_SELECTION_ACTIVE_PART_RELATED_INDEX,\r\n payload: {\r\n activePartRelatedItemIndex: newActivePartRelatedItemIndex,\r\n isSameStep: newActivePartRelatedItemIndex === activePartRelatedItemIndex\r\n }\r\n });\r\n }\r\n}\r\nexport const setActiveFeature = (activeFeature) => ({\r\n type: types.SET_ACTIVE_FEATURE,\r\n payload: {activeFeature}\r\n});\r\nexport const toggleShowDescriptionCover = (showDescriptionCover) => ({\r\n type: types.TOGGLE_SHOW_DESCRIPTION_COVER,\r\n payload: {showDescriptionCover}\r\n});\r\n\r\n//****** BATHROOM VISUALIZER COMMANDS ******//\r\nexport const toggleBathroomVisualizerOpen = (bvOpened) => {\r\n const {filterState, bathroomVisualizerState} = store.getState();\r\n if (filterState.showFilters) {\r\n store.dispatch(showFilters(false));\r\n }\r\n if (bvOpened && !bathroomVisualizerState.bvVisited) {\r\n loaderEnable();\r\n }\r\n return {\r\n type: types.TOGGLE_BATHROOM_VISUALIZER_OPEN,\r\n payload: {\r\n bvOpened\r\n }\r\n };\r\n};\r\nexport const setBathroomVisualizerVisited = () => {\r\n return {\r\n type: types.SET_BATHROOM_VISUALIZER_VISITED,\r\n payload: {\r\n bvVisited: true\r\n }\r\n };\r\n};\r\nexport const setBathroomVisualizerFeatures = (bvFeatures) => ({\r\n type: types.SET_BV_FEATURES,\r\n payload: {bvFeatures}\r\n});\r\nexport const setBathroomVisualizerPresets = (bvPresets, visualizerType = document.kvConfig.visualizerType) => ({\r\n type: types.SET_BV_PRESETS,\r\n payload: {bvPresets, visualizerType}\r\n});\r\nexport const setActivePreset = (activePreset = 0) => ({\r\n type: types.SET_ACTIVE_PRESET,\r\n payload: {activePreset}\r\n});\r\nexport const setCanvasId = (id) => ({type: types.SET_BV_CANVAS_ID, payload: {id}});\r\nexport const toggleShowRestorePopup = (showRestorePopup) => ({\r\n type: types.TOGGLE_SHOW_RESTORE_POPUP,\r\n payload: {showRestorePopup}\r\n});\r\nexport const setCanvasDimensions = (canvasDimensions = null) => ({\r\n type: types.SET_CANVAS_DIMENSIONS,\r\n payload: {canvasDimensions}\r\n});\r\nexport const setCanvasScale = (canvasScale = 1) => ({\r\n type: types.SET_CANVAS_SCALE,\r\n payload: {canvasScale}\r\n});\r\nexport const setLoadedPresets = (loadedPresets = []) => ({\r\n type: types.SET_LOADED_PRESETS,\r\n payload: {loadedPresets}\r\n});\r\n\r\n//****** LOADER ******//\r\nexport const toggleLoader = (loaderOpened, loaderText = \"loader.defaultText\", loaderTitle = \"loader.defaultTitle\", loaderFullScreen = false) => ({\r\n type: types.TOGGLE_LOADER,\r\n payload: {\r\n loaderOpened,\r\n loaderTitle,\r\n loaderText,\r\n loaderFullScreen,\r\n }\r\n});\r\nexport const setMultiLoader = (multiLoader) => ({\r\n type: types.SET_MULTI_LOADER,\r\n payload: multiLoader\r\n})\r\n\r\n//****** USER COMMANDS ******//\r\nexport const toggleUserPopup = (userPopupState) => ({\r\n type: types.TOGGLE_USER_POPUP,\r\n payload: {\r\n ...userPopupState\r\n }\r\n});\r\nexport const changeUserInfo = (userInfo) => ({\r\n type: types.CHANGE_USER_INFO,\r\n payload: {userInfo}\r\n});\r\nexport const changeUserInfoErrors = (userInfoErrors) => ({\r\n type: types.CHANGE_USER_INFO_ERRORS,\r\n payload: {userInfoErrors}\r\n});\r\nexport const toggleAdditionalFields = (showAdditionalFields) => ({\r\n type: types.TOGGLE_ADDITIONAL_FIELDS,\r\n payload: {showAdditionalFields}\r\n});\r\nexport const setUserPhoneNumberValidated = (validated) => ({\r\n type: types.SET_USER_PHONE_NUMBER_VALIDATED,\r\n payload: {\r\n isPhoneNumberValidated: validated\r\n }\r\n});\r\nexport const unlockPricing = () => {\r\n return (dispatch, getState) => {\r\n const {userState} = getState();\r\n const {userIsLoggedIn, isPhoneNumberValidated} = userState;\r\n if (!userIsLoggedIn || !isPhoneNumberValidated) {\r\n dispatch(toggleUserPopup({\r\n userPopupOpened: true\r\n }));\r\n }\r\n }\r\n};\r\n\r\n//****** CART COMMANDS ******//\r\nexport const addToCart = (cartItems) => {\r\n return (dispatch, getState) => {\r\n const {quotesState, fabricatorState, wizardState, sqftState, cartState} = getState();\r\n\r\n const {wizardIsActive, wizardActiveItem, wizardActiveStep, wizardSelectedValues, allWizardsValues} = wizardState;\r\n let fromWizardId = null;\r\n let fromWizardGroup = null;\r\n let fromWizardStep = null;\r\n let wizardSteps = null;\r\n if (wizardIsActive && wizardActiveItem) {\r\n fromWizardId = wizardState.wizardActiveItem.id;\r\n fromWizardStep = wizardActiveStep;\r\n fromWizardGroup = wizardSelectedValues[wizardActiveStep] && wizardSelectedValues[wizardActiveStep].wizardGroup\r\n ? wizardSelectedValues[wizardActiveStep].wizardGroup : null;\r\n if (sqftState.isSquareFootageEnabled) {\r\n wizardSteps = getAvailableSteps(wizardActiveItem, wizardSelectedValues, true)\r\n }\r\n }\r\n\r\n let newCartItems = cartItems\r\n .map(cartItem => {\r\n cartItem.id = uuid.v4();\r\n cartItem.currentQuote = Number.isInteger(cartItem.currentQuote) ? cartItem.currentQuote : quotesState.activeQuoteIndex;\r\n cartItem.addedBy = cartItem.addedBy || CART_ITEM_ADDED_BY.user;\r\n cartItem.fromVisualizerType = cartItem.fromVisualizerType || document.kvConfig.visualizerType;\r\n if (!cartItem.noteText && cartItem.cartFeature && cartItem.cartFeature.notesList && cartItem.cartFeature.notesList[cartItem.currentQuote]) {\r\n cartItem.noteText = cartItem.cartFeature.notesList[cartItem.currentQuote];\r\n }\r\n if (wizardIsActive && !cartItem.fromWizardId) { // if it is not passed - add it\r\n if (sqftState.isSquareFootageEnabled && wizardSteps) {\r\n const foundStep = getWizardStepFromCartItemFeature(wizardSteps, cartItem);\r\n if (foundStep) {\r\n cartItem.fromWizardId = fromWizardId;\r\n cartItem.fromWizardStep = foundStep.stepIndex;\r\n cartItem.fromWizardGroupId = fromWizardGroup ? getCorrectedWizardGroupForFeature(foundStep.stepGroups[0], cartItem.cartFeature).id : \"\";\r\n } else {\r\n cartItem.fromWizardId = fromWizardId;\r\n cartItem.fromWizardStep = fromWizardStep;\r\n cartItem.fromWizardGroupId = fromWizardGroup ? getCorrectedWizardGroupForFeature(fromWizardGroup, cartItem.cartFeature).id : \"\";\r\n }\r\n } else {\r\n cartItem.fromWizardId = fromWizardId;\r\n cartItem.fromWizardStep = fromWizardStep;\r\n cartItem.fromWizardGroupId = fromWizardGroup ? getCorrectedWizardGroupForFeature(fromWizardGroup, cartItem.cartFeature).id : \"\";\r\n }\r\n }\r\n return cartItem\r\n })\r\n .filter(newCartItem => {\r\n if (newCartItem.partId === \"room\" && newCartItem.cartFeature && cartState.cartItems.some(oldCartItem => {\r\n return oldCartItem.cartFeature && (oldCartItem.cartFeature.dbFeature.id === newCartItem.cartFeature.dbFeature.id)\r\n && oldCartItem.currentQuote === newCartItem.currentQuote\r\n })) {\r\n return false // do not add duplicate room\r\n }\r\n return !cartState.cartItems.some(oldCartItem => oldCartItem.id === newCartItem.id)\r\n && (newCartItem.quantity > 0 || newCartItem.displayFakeQuantity > 0)\r\n });\r\n\r\n if (IS_QKB_UI) { // on look & product journeys we have another method and relatedProductParent property for bundled features\r\n newCartItems.forEach(newCartItem => {\r\n const bundleFeatures = getBundledFeatures(newCartItem.cartFeature);\r\n if (Array.isArray(bundleFeatures) && bundleFeatures.length) {\r\n bundleFeatures.forEach((bundleFeature) => {\r\n const quantity = newCartItem.cartFeature.dbFeature.bundledFeatureQuantities\r\n ? newCartItem.cartFeature.dbFeature.bundledFeatureQuantities[bundleFeature.dbFeature.id] || 1\r\n : 1;\r\n const cartItem = Object.assign({}, newCartItem, {\r\n id: uuid.v4(),\r\n cartFeature: bundleFeature,\r\n partId: bundleFeature.partId,\r\n noteText: \"\",\r\n bundleParentId: newCartItem.id,\r\n quantity: quantity * newCartItem.quantity,\r\n });\r\n // console.log(\"parent cartItem\", newCartItem);\r\n // console.log(\"bundle cartItem\", cartItem);\r\n newCartItems.push(cartItem);\r\n })\r\n }\r\n });\r\n }\r\n\r\n dispatch({\r\n type: types.ADD_TO_CART,\r\n payload: {\r\n cartItems: newCartItems,\r\n fabricatorState,\r\n allWizardsValues,\r\n }\r\n });\r\n }\r\n};\r\nexport const addDisplayLogicCartItem = (cartItem, fromVisualizerType = document.kvConfig.visualizerType) => ({\r\n type: types.ADD_DISPLAY_LOGIC_CART_ITEM,\r\n payload: {\r\n cartItem: Object.assign({}, cartItem, {\r\n id: uuid.v4(),\r\n isAddedFromDisplayLogic: true,\r\n addedBy: CART_ITEM_ADDED_BY.user,\r\n fromVisualizerType,\r\n })\r\n }\r\n});\r\nexport const changeCartItemQuantity = (cartItem, quantity, removeFakeQuantity = false) => {\r\n return (dispatch, getState) => {\r\n const {fabricatorState, wizardState} = getState();\r\n dispatch({\r\n type: types.CHANGE_CART_QUANTITY,\r\n payload: { cartItem, quantity, fabricatorState, removeFakeQuantity, allWizardsValues: wizardState.allWizardsValues }\r\n });\r\n }\r\n};\r\nexport const removeFromCart = (cartItem) => {\r\n return (dispatch, getState) => {\r\n const {fabricatorState, wizardState} = getState();\r\n dispatch({\r\n type: types.REMOVE_FROM_CART,\r\n payload: { cartItem, fabricatorState, allWizardsValues: wizardState.allWizardsValues }\r\n });\r\n }\r\n};\r\nexport const changeCartFeature = (cartItem, skipOtherRules = false) => {\r\n return (dispatch, getState) => {\r\n const {fabricatorState} = getState();\r\n dispatch({\r\n type: types.CHANGE_CART_FEATURE,\r\n payload: {cartItem, fabricatorState, skipOtherRules}\r\n });\r\n }\r\n};\r\nexport const removeInstallationServiceFromCart = installationService => ({\r\n type: types.REMOVE_INSTALLATION_SERVICE_FROM_CART,\r\n payload: {\r\n installationService\r\n }\r\n});\r\nexport const clearCart = () => ({\r\n type: types.CLEAR_CART\r\n});\r\nexport const toggleApplyPopup = (applyPopupOpened, activeApplyPopupItems = []) => ({\r\n type: types.TOGGLE_APPLY_POPUP,\r\n payload: {\r\n applyPopupOpened,\r\n activeApplyPopupItems\r\n }\r\n});\r\nexport const clickQuestionNo = (questionNoClicked) => ({\r\n type: types.CLICK_QUESTION_NO,\r\n payload: {\r\n questionNoClicked\r\n }\r\n});\r\nexport const setCameFromPage = (cameFromPage) => ({\r\n type: types.CAME_FROM_PAGE,\r\n payload: {\r\n cameFromPage\r\n }\r\n});\r\nexport const addToRecentlyViewed = (feature) => ({\r\n type: types.ADD_TO_RECENTLY_VIEWED,\r\n payload: {\r\n feature\r\n }\r\n});\r\nexport const showCheckoutPopup = (show) => ({\r\n type: types.SHOW_CHECKOUT_POPUP,\r\n payload: {\r\n show\r\n }\r\n});\r\nexport const restoreCart = (cartState) => {\r\n return (dispatch, getState) => {\r\n const {fabricatorState, quotesState, wizardState} = getState();\r\n if (cartState && cartState.cartItems) {\r\n cartState.cartItems = cartState.cartItems.map(cartItem => {\r\n cartItem.id = cartItem.id || uuid.v4();\r\n cartItem.currentQuote = Number.isInteger(cartItem.currentQuote) ? cartItem.currentQuote : quotesState.activeQuoteIndex;\r\n cartItem.addedBy = cartItem.addedBy || CART_ITEM_ADDED_BY.user;\r\n return cartItem\r\n })\r\n }\r\n dispatch({\r\n type: types.RESTORE_CART,\r\n payload: { cartState, fabricatorState, allWizardsValues: wizardState.allWizardsValues }\r\n });\r\n }\r\n};\r\n\r\n//****** INSTALLATION COMMANDS ******//\r\nexport const toggleInstOpened = (instOpened) => ({\r\n type: types.TOGGLE_INST_OPENED,\r\n payload: {\r\n instOpened\r\n }\r\n});\r\nexport const setInstList = (instList) => ({\r\n type: types.SET_INST_LIST,\r\n payload: {\r\n instList\r\n }\r\n});\r\nexport const setDefaultInstallations = (defaultInstallations) => ({\r\n type: types.SET_DEFAULT_INST_LIST,\r\n payload: {defaultInstallations}\r\n});\r\n\r\n//****** TOOL STATE ***************//\r\nexport const changeStateToQuote = () => ({\r\n type: types.SET_STATE_TO_QUOTE\r\n});\r\n\r\n//****** FABRICATOR COMMANDS ******//\r\nexport const setFabricatorData = (fabricatorData) => ({\r\n type: types.SET_FABRICATOR_DATA,\r\n payload: {\r\n ...fabricatorData\r\n }\r\n});\r\nexport const setFabricatorTaxes = (fabricatorTaxes) => ({\r\n type: types.SET_FABRICATOR_TAXES,\r\n payload: {fabricatorTaxes}\r\n});\r\n\r\nexport const updateFabricatorSettings = () => ({\r\n type: types.UPDATE_FABRICATOR_SETTINGS,\r\n});\r\n\r\nexport const toggleHideItemsSwitcher = () => ({\r\n type: types.TOGGLE_HIDE_ITEMS_PRICES,\r\n});\r\n\r\nexport const toggleUseFabricatorCostPrices = (useFabricatorCostPrices) => ({\r\n type: types.TOGGLE_USE_FABRICATOR_COST_PRICES,\r\n payload: {useFabricatorCostPrices}\r\n});\r\n\r\n//****** MESSAGEBOX COMMANDS ******//\r\nexport const changeMessageBoxState = (messageBoxState) => ({\r\n type: types.CHANGE_MESSAGE_BOX,\r\n payload: {\r\n ...messageBoxState\r\n }\r\n});\r\n\r\n//******** FILTER COMMANDS **********//\r\nexport const setSelectedFilters = (selectedFilters) => ({\r\n type: types.SET_SELECTED_FILTERS,\r\n payload: [...selectedFilters]\r\n});\r\n\r\nexport const loadFilters = (filterGroups) => {\r\n\r\n if (USE_FAB_FILTERS_ONLY) {\r\n// console.log(\"fabricator only filterGroups\", filterGroups.map(fg => {\r\n// return Object.assign ({}, fg, {\r\n// values: fg.values.filter(fgValue => fgValue.isFabricatorCustomFilter)\r\n// })\r\n// }).filter(fg => fg.values.length));\r\n filterGroups = filterGroups.filter(fg => {\r\n if (!Array.isArray(fg.values) || !fg.values.length) {\r\n return false\r\n }\r\n fg.values = fg.values.filter(fgValue => fgValue.isFabricatorCustomFilter);\r\n return fg.values.length\r\n })\r\n console.log(\"fabricator only filterGroups\", filterGroups);\r\n }\r\n return {\r\n type: types.LOAD_FILTERS,\r\n payload: filterGroups\r\n }\r\n};\r\n\r\nexport const setExpandedFilters = (expandedFilters) => ({\r\n type: types.SET_EXPANDED_FILTERS,\r\n payload: expandedFilters\r\n});\r\n\r\nexport const showFilters = (show = false, filterId = \"\") => ({\r\n type: types.SHOW_FILTERS,\r\n payload: {show, filterId}\r\n});\r\n\r\nexport const showFiltersIfHidden = (filterId = \"\") => ({\r\n type: types.SHOW_FILTERS_IF_NOT_VISIBLE,\r\n payload: filterId\r\n});\r\n\r\nexport const setFilterVisible = (filter) => ({\r\n type: types.SET_FILTER_VISIBLE,\r\n payload: filter\r\n});\r\n\r\n\r\n//********* MOBILE NAVIGATION COMMANDS *********/\r\nexport const loadMobileNav = (data) => ({\r\n type: types.LOAD_MOBILE_NAV,\r\n payload: data\r\n});\r\n\r\nexport const hideUserPopup = () => ({\r\n type: types.CHANGE_MESSAGE_BOX,\r\n payload: {\r\n visible: false,\r\n inline: false\r\n }\r\n});\r\n\r\nexport const showSchedulerPopup = show => {\r\n return {\r\n type: types.SHOW_SCHEDULER,\r\n payload: {show}\r\n }\r\n};\r\nexport const toggleConfirmPopup = (confirmPopupOpened, confirmPopupType) => ({\r\n type: types.TOGGLE_CONFIRM_POPUP,\r\n payload: {confirmPopupOpened, confirmPopupType}\r\n});\r\n\r\n//********* DOCU SIGN *********/\r\nexport const showDocuSign = (show, callback = null) => ({\r\n type: types.SHOW_DOCUSIGN,\r\n payload: {show, callback}\r\n});\r\n\r\nexport const showDeposit = (show, callback = null) => ({\r\n type: types.SHOW_DEPOSIT,\r\n payload: {show, callback}\r\n});\r\n\r\nconst _showCheckoutPopup = (fabricatorSettings) => {\r\n return new Promise((resolve) => {\r\n if (fabricatorSettings.checkout && fabricatorSettings.hasPaymentGateway) {\r\n store.dispatch(showCheckoutPopup(true));\r\n store.dispatch(showDocuSign(false, resolve)); // we need only callback from here\r\n } else {\r\n resolve();\r\n }\r\n });\r\n}\r\n\r\nconst _showDeposit = (fabricatorSettings) => {\r\n return new Promise((resolve) => {\r\n const state = store.getState();\r\n console.log(\"state__state\", state);\r\n if (fabricatorSettings.enableDeposit && (!fabricatorSettings.leadCaptureShoppingCart || state.unlockCalculationsState.unlockCalculationsTutorialIsFinished)) {\r\n store.dispatch(showDeposit(true, resolve))\r\n } else {\r\n resolve();\r\n }\r\n });\r\n}\r\n\r\nconst _showDocuSign = (fabricatorSettings) => {\r\n return new Promise((resolve) => {\r\n if (fabricatorSettings.enableDocuSign) {\r\n store.dispatch(showDocuSign(true, resolve))\r\n } else {\r\n resolve();\r\n }\r\n });\r\n}\r\n\r\nconst _showContractSigning = (fabricatorSettings) => {\r\n return new Promise((resolve) => {\r\n if (shouldUseContractSigning(fabricatorSettings)) {\r\n // store.dispatch(showContractSigning(true, resolve))\r\n hashHistory.push(ROUTES.contract);\r\n } else {\r\n resolve();\r\n }\r\n });\r\n};\r\n\r\nexport const checkForOrderCompletePopup = (fabricatorSettings) => {\r\n return new Promise((resolve) => {\r\n if (fabricatorSettings.checkout && (!fabricatorSettings.hasPaymentGateway || window.checkoutSuccess)) {\r\n store.dispatch(showOrderCompletePopup(true));\r\n }\r\n resolve();\r\n });\r\n}\r\n\r\nexport const showCheckoutLayout = (fabricatorSettings) => {\r\n let p = _showDeposit(fabricatorSettings)\r\n .then(() => _showDocuSign(fabricatorSettings))\r\n .then(() => _showCheckoutPopup(fabricatorSettings))\r\n .then(() => _showContractSigning(fabricatorSettings))\r\n .then(() => checkForOrderCompletePopup(fabricatorSettings));\r\n // .then(() => printReceipt(fabricatorSettings));\r\n return p.catch(console.error);\r\n}\r\n\r\n//********* QUOTING TOOL COMMANDS *********/\r\nexport const setQtCategoriesRequested = (qtCategoriesRequested) => ({\r\n type: types.SET_QT_CATEGORIES_REQUESTED,\r\n payload: {\r\n qtCategoriesRequested\r\n }\r\n});\r\nexport const setQtCategoriesLoaded = (qtCategoriesLoaded) => ({\r\n type: types.SET_QT_CATEGORIES_LOADED,\r\n payload: {\r\n qtCategoriesLoaded\r\n }\r\n});\r\nexport const setQtActiveCategory = (qtActiveCategory) => ({\r\n type: types.SET_QT_ACTIVE_CATEGORY,\r\n payload: {\r\n qtActiveCategory\r\n }\r\n});\r\n\r\nexport const setIntroVideo = (introVideo) => ({\r\n type: types.SET_INTRO_VIDEO,\r\n payload: introVideo\r\n})\r\n\r\nexport const updateCanvasCount = () => ({\r\n type: types.UPDATE_CANVAS_COUNT\r\n})\r\n\r\nexport const setPresetWasChangedByUser = (presetWasChangedByUser) => ({\r\n type: types.SET_PRESET_WAS_CHANGED_BY_USER,\r\n payload: {presetWasChangedByUser}\r\n})\r\n\r\nexport const setFirstLoadedPreset = (firstLoadedPreset) => ({\r\n type: types.SET_FIRST_LOADED_PRESET,\r\n payload: {firstLoadedPreset}\r\n})\r\n\r\nexport const addLayoutHistory = (layoutState) => ({\r\n type: types.ADD_LAYOUT_HISTORY,\r\n payload: {\r\n layoutState\r\n }\r\n});\r\n\r\nexport const setLayoutHistory = (layoutHistory) => ({\r\n type: types.SET_LAYOUT_HISTORY,\r\n payload: {\r\n layoutHistory\r\n }\r\n});\r\n","import {layout as bvLayout} from \"../bvcomponents/bvComponent/bathroomVisualizer\";\r\nimport {layout as kvLayout} from \"../bvcomponents/kvComponent/kitchenVisualizer\";\r\n// import {layout as kvMasterLayout} from \"../bvcomponents/kvMasterComponent/kvMasterVisualizer\";\r\nimport {layout as kvSceneLayout} from \"../bvcomponents/kvSceneComponent/kvSceneVisualizer\";\r\nimport {layout as bvSceneLayout} from \"../bvcomponents/bvSceneComponent/bvSceneVisualizer\";\r\nimport {layout as bvLookLayout} from \"../bvcomponents/look/lookVisualizer\";\r\nimport {layout as fireplaceLayout} from \"../bvcomponents/fireplace/fireplaceVisualizer\";\r\nimport laundryRoomLayout from \"../bvcomponents/commonVisualizer/core/laundryRoomLayout\";\r\n\r\nimport {Layout as bvLayoutInstance} from \"../bvcomponents/bvComponent/core/layout\";\r\nimport {Layout as kvLayoutInstance} from \"../bvcomponents/kvComponent/core/layout\";\r\n// import {Layout as kvMasterLayoutInstance} from \"../bvcomponents/kvMasterComponent/core/layout\";\r\nimport {Layout as kvSceneLayoutInstance} from \"../bvcomponents/kvSceneComponent/core/layout\";\r\nimport {Layout as bvSceneLayoutInstance} from \"../bvcomponents/bvSceneComponent/core/layout\";\r\nimport {Layout as bvLookLayoutInstance} from \"../bvcomponents/look/core/layout\";\r\nimport {Layout as fireplaceLayoutInstance} from \"../bvcomponents/fireplace/core/layout\";\r\nimport {LaundryRoomLayout as laundryRoomLayoutInstance} from \"../bvcomponents/commonVisualizer/core/laundryRoomLayout\";\r\n\r\nimport ImageCanvasCommon from \"./visComponents/imageCanvasCommon\";\r\nimport ImageCanvasCommonNew from \"./visComponents/imageCanvasCommonNew\";\r\n\r\nimport bvZIndexes from \"../bvcomponents/bvComponent/core/parts/zIndex\";\r\nimport kvZIndexes from \"../bvcomponents/kvComponent/core/zIndex\";\r\n// import kvMasterZIndexes from \"../bvcomponents/kvMasterComponent/core/zIndex\";\r\nimport kvSceneZIndexes from \"../bvcomponents/kvSceneComponent/core/zIndex\";\r\nimport bvSceneZIndexes from \"../bvcomponents/bvSceneComponent/core/zIndex\";\r\nimport bvLookZIndexes from \"../bvcomponents/look/core/zIndex\";\r\nimport fireplaceZIndexes from \"../bvcomponents/fireplace/core/zIndex\";\r\n\r\nimport {AVAILABLE_VISUALIZER_TYPES, getCommonVisualizerType} from \"../config\";\r\nimport {LOOK_ROOM_TYPES} from \"./look/core/constants\";\r\nimport {COUNTERTOP_LABELS} from \"./sqft/constants\";\r\n\r\nexport const getCurrentLayout = (visualizerType = document.kvConfig.visualizerType) => { // layout should be dynamic (could be switched)\r\n switch (visualizerType) {\r\n case \"Kitchen\":\r\n case \"KV\":\r\n return kvLayout;\r\n case \"Bathroom\":\r\n case \"BV\":\r\n return bvLayout;\r\n // case \"kvMaster\":\r\n // return kvMasterLayout;\r\n case \"kvScene\":\r\n case \"KitchenV5\":\r\n return kvSceneLayout;\r\n case \"bvScene\":\r\n case \"BathroomV5\":\r\n return bvSceneLayout;\r\n case \"bvLook\":\r\n case \"BathroomV6\":\r\n return bvLookLayout;\r\n case \"Fireplace\":\r\n return fireplaceLayout;\r\n case \"LaundryRoom\":\r\n return laundryRoomLayout;\r\n default:\r\n // console.trace(\"Incorrect layout selected (document.kvConfig.visualizerType)\");\r\n return null\r\n }\r\n};\r\n\r\nexport const getCurrentLayoutInstance = (visualizerType = document.kvConfig.visualizerType) => { // is used for creating fake layouts (to show layouts, scenes, etc.), to show thumbnails\r\n switch (visualizerType) {\r\n case \"Kitchen\":\r\n case \"KV\":\r\n return kvLayoutInstance;\r\n case \"Bathroom\":\r\n case \"BV\":\r\n return bvLayoutInstance;\r\n // case \"kvMaster\":\r\n // return kvMasterLayoutInstance;\r\n case \"kvScene\":\r\n return kvSceneLayoutInstance;\r\n case \"bvScene\":\r\n return bvSceneLayoutInstance;\r\n case \"bvLook\":\r\n return bvLookLayoutInstance;\r\n case \"Fireplace\":\r\n return fireplaceLayoutInstance;\r\n case \"LaundryRoom\":\r\n return laundryRoomLayoutInstance;\r\n default:\r\n // console.trace(\"Incorrect layout selected (document.kvConfig.visualizerType)\");\r\n return null\r\n }\r\n};\r\n\r\nexport const getCurrentCanvas = (visualizerType = document.kvConfig.visualizerType) => { // layout should be dynamic (could be switched)\r\n switch (visualizerType) {\r\n case \"Kitchen\":\r\n case \"KV\":\r\n case \"kvMaster\":\r\n case \"Bathroom\":\r\n case \"BV\":\r\n case \"bvScene\":\r\n return ImageCanvasCommon;\r\n case \"bvLook\":\r\n case \"kvScene\":\r\n case \"Fireplace\":\r\n case \"LaundryRoom\":\r\n default:\r\n return ImageCanvasCommonNew;\r\n }\r\n};\r\n\r\n\r\nexport const getCurrentZIndexes = (visualizerType = document.kvConfig.visualizerType) => {\r\n switch (visualizerType) {\r\n case \"Kitchen\":\r\n case \"KV\":\r\n return kvZIndexes;\r\n case \"Bathroom\":\r\n case \"BV\":\r\n return bvZIndexes;\r\n // case \"kvMaster\":\r\n // return kvMasterZIndexes;\r\n case \"kvScene\":\r\n return kvSceneZIndexes;\r\n case \"bvScene\":\r\n return bvSceneZIndexes;\r\n case \"bvLook\":\r\n return bvLookZIndexes;\r\n case \"Fireplace\":\r\n case \"LaundryRoom\":\r\n return fireplaceZIndexes;\r\n default:\r\n // console.trace(\"Incorrect layout selected (document.kvConfig.visualizerType)\");\r\n return null\r\n }\r\n};\r\n\r\n/**\r\n * Returns the fake created layout,\r\n * @param asLayout {object}\r\n * @param type {number} to filter features for this specific layout\r\n * @param scene {string} to filter features for this specific scene\r\n * @returns {object}\r\n */\r\nexport const createFakeLayout = (asLayout = getCurrentLayout(), type, scene) => {\r\n const LayoutInstance = getCurrentLayoutInstance(asLayout.visualizerType);\r\n const fakeLayout = new LayoutInstance();\r\n fakeLayout.isFakeLayout = true;\r\n const parentGroups = fakeLayout.getFeatures(true);\r\n let needToLoadFeatures = type || scene\r\n ? asLayout.allDbFeatures.filter(dbFeature => {\r\n if (!dbFeature.s3Bindings || !dbFeature.metaData) {\r\n return false\r\n }\r\n if (type && !dbFeature.metaData.RoomLayout || !dbFeature.metaData.RoomLayout.includes(type)) {\r\n return false\r\n }\r\n if (asLayout.isNewLayout && scene && !dbFeature.metaData.RoomScene || !dbFeature.metaData.RoomScene.includes(scene)) {\r\n return false\r\n }\r\n return true\r\n })\r\n : asLayout.allDbFeatures;\r\n // console.log(\"asLayout.allDbFeatures\", asLayout.allDbFeatures);\r\n // console.log(\"needToLoadFeatures\", needToLoadFeatures);\r\n for (let i = 0; i < needToLoadFeatures.length; i++) {\r\n fakeLayout.loadDbFeature(needToLoadFeatures[i], parentGroups)\r\n }\r\n fakeLayout.createCustomConfigurations(); // set shower body first\r\n fakeLayout.setDefaultFeatures();\r\n fakeLayout.initialized = true;\r\n return fakeLayout\r\n};\r\n\r\n/**\r\n * Returns the visualizer type from saved quote\r\n * @param bvScene {object} main object that passed between backend and frontend\r\n // * @param quoteObject {object} not required // main parent quote(room) object that passed between backend and frontend\r\n * @returns {string}\r\n */\r\nexport const getVisualizerTypeFromBvScene = (bvScene) => {\r\n if (bvScene.visualizerType) {\r\n return bvScene.visualizerType // this should be the most common case, but we still need to support old quotes :(\r\n }\r\n if (bvScene.bathroom_floor || bvScene.shower_body) {\r\n switch (document.kvConfig.toolVersion) {\r\n case 6:\r\n return AVAILABLE_VISUALIZER_TYPES.bvLook\r\n case 5:\r\n return AVAILABLE_VISUALIZER_TYPES.bvScene\r\n case 4:\r\n default:\r\n return AVAILABLE_VISUALIZER_TYPES.Bathroom\r\n }\r\n }\r\n if (bvScene.kitchen_floor) {\r\n return document.kvConfig.toolVersion === 5 ? AVAILABLE_VISUALIZER_TYPES.kvScene : AVAILABLE_VISUALIZER_TYPES.Kitchen\r\n }\r\n // return quoteObject ? quoteObject.room : \"\"\r\n return document.kvConfig.visualizerType\r\n};\r\n\r\n/**\r\n * @param layout {object}\r\n */\r\nexport const getCurrentRoomType = (layout = getCurrentLayout()) => {\r\n if (layout.type >= 10) {\r\n return LOOK_ROOM_TYPES.as\r\n }\r\n return LOOK_ROOM_TYPES.grohe\r\n // return IS_AS_BATHROOM ? LOOK_ROOM_TYPES.as : LOOK_ROOM_TYPES.grohe\r\n};\r\n\r\n\r\n/**\r\n * @param layout {object}\r\n * @returns featureGroup {featureGroupInterface}\r\n */\r\nexport const getCountertopFeatureGroup = (layout = getCurrentLayout(), ) => {\r\n let mainNeeded, oppositeNeeded;\r\n switch (getCommonVisualizerType(layout.visualizerType)) {\r\n case \"kitchen\":\r\n mainNeeded = \"center_island_countertop\";\r\n oppositeNeeded = \"countertop\";\r\n break;\r\n case \"bathroom\":\r\n mainNeeded = COUNTERTOP_LABELS.shower_wall;\r\n oppositeNeeded = \"vanity_countertop\";\r\n break;\r\n case \"fireplace\":\r\n mainNeeded = \"front_wall\";\r\n break;\r\n default:\r\n mainNeeded = \"countertop\";\r\n break;\r\n }\r\n let featureGroupCountertop = layout.getSubPartFromQtCategories(mainNeeded);\r\n if (!featureGroupCountertop && oppositeNeeded) {\r\n featureGroupCountertop = layout.getSubPartFromQtCategories(oppositeNeeded);\r\n }\r\n if (featureGroupCountertop) {\r\n return featureGroupCountertop.part\r\n }\r\n\r\n return layout.getFeatureGroupByPartId(mainNeeded) || (oppositeNeeded ? layout.getFeatureGroupByPartId(oppositeNeeded) : null)\r\n}\r\n","import {ROUTES} from \"../../../routes\";\r\n\r\nexport const LayoutType = {\r\n Layout1: 1,\r\n Layout2: 2,\r\n Layout3: 3,\r\n Layout4: 4,\r\n Layout5: 5,\r\n Layout6: 6,\r\n Layout7: 7,\r\n Layout8: 8,\r\n Layout9: 9,\r\n Layout10: 10,\r\n Layout11: 11,\r\n Layout12: 12,\r\n Layout13: 13,\r\n Layout14: 14,\r\n Layout15: 15,\r\n Layout16: 16,\r\n Layout17: 17,\r\n Layout18: 18,\r\n Layout19: 19,\r\n Layout20: 20,\r\n};\r\n\r\nexport const LayoutAbbreviation = {\r\n All: \"ALL\",\r\n Layout1: \"Layout1\",\r\n Layout2: \"Layout2\",\r\n Layout3: \"Layout3\",\r\n Layout4: \"Layout4\",\r\n Layout5: \"Layout5\",\r\n Layout6: \"Layout6\",\r\n Layout7: \"Layout7\",\r\n Layout8: \"Layout8\",\r\n Layout9: \"Layout9\",\r\n Layout10: \"Layout10\",\r\n Layout11: \"Layout11\",\r\n Layout12: \"Layout12\",\r\n Layout13: \"Layout13\",\r\n Layout14: \"Layout14\",\r\n Layout15: \"Layout15\",\r\n Layout16: \"Layout16\",\r\n Layout17: \"Layout17\",\r\n Layout18: \"Layout18\",\r\n Layout19: \"Layout19\",\r\n Layout20: \"Layout20\",\r\n};\r\n\r\nexport const LayoutAbbreviations = [\r\n \"Layout1\",\r\n \"Layout2\",\r\n \"Layout3\",\r\n \"Layout4\",\r\n \"Layout5\",\r\n \"Layout6\",\r\n \"Layout7\",\r\n \"Layout8\",\r\n \"Layout9\",\r\n \"Layout10\",\r\n \"Layout11\",\r\n \"Layout12\",\r\n \"Layout13\",\r\n \"Layout14\",\r\n \"Layout15\",\r\n \"Layout16\",\r\n \"Layout17\",\r\n \"Layout18\",\r\n \"Layout19\",\r\n \"Layout20\",\r\n];\r\nexport const LayoutAbbreviationsToRemove = [\r\n \"Layout20\",\r\n \"Layout19\",\r\n \"Layout18\",\r\n \"Layout17\",\r\n \"Layout16\",\r\n \"Layout15\",\r\n \"Layout14\",\r\n \"Layout13\",\r\n \"Layout12\",\r\n \"Layout11\",\r\n \"Layout10\",\r\n \"Layout9\",\r\n \"Layout8\",\r\n \"Layout7\",\r\n \"Layout6\",\r\n \"Layout5\",\r\n \"Layout4\",\r\n \"Layout3\",\r\n \"Layout2\",\r\n \"Layout1\",\r\n];\r\n\r\nexport const METADATA = {\r\n ALL: \"ALL\",\r\n NO: \"NO\",\r\n LeftSide: \"L\", // used as side for shower grab bars\r\n RightSide: \"R\", // used as side for shower grab bars\r\n Center: \"C\", // used as side for shower doors and others\r\n Inner: \"T\", // used for sinks & faucets\r\n Outer: \"S\", // used for sinks & faucets,\r\n StandAlone: \"ST\", // used for sinks & faucets,\r\n SingleHole: \"Single Hole Faucets\", // used for sinks & faucets,\r\n WallHungSinks: \"Wall Hung Sinks\", // used for sinks & faucets,\r\n WidespreadFaucets: \"Widespread Faucets\", // used for sinks & faucets,\r\n BathtubWithEnclosures: \"Drop-in\", // used for bathtubs & enclosures,\r\n BathtubWithoutEnclosures: \"StandAlone\", // used for bathtubs & enclosures,\r\n};\r\n\r\nexport const ShowerComboTubType = {\r\n bathtub_liner: \"bathtub_liner\",\r\n replacement_tub: \"replacement_tub\",\r\n walk_in_tub: \"walk_in_tub\",\r\n jetted_tub: \"jetted_tub\",\r\n};\r\n\r\nexport const CountsType = {\r\n allLayoutFeaturesCount: \"All\", // not used\r\n largeLayoutFeaturesCount: \"Large\",\r\n smallLayoutFeaturesCount: \"Small\",\r\n totalFeaturesCount: \"Total\" // not used\r\n};\r\n\r\nexport const BathTubType = {\r\n Custom60in: 'Custom60in',\r\n FreeStanding: 'BathTubFreeStanding'\r\n};\r\n\r\nexport const VanityTypes = {\r\n Complete: 'Complete',\r\n Custom: 'Custom'\r\n};\r\n\r\nexport const ShowerBodyType = {\r\n Glass: 0,\r\n Door: 1\r\n};\r\n\r\nexport const PartMenuType = {\r\n Simple: 0, // i.e. Toilet - doesn't have any sub-items\r\n Complex: 1, // i.e. Vanity - has sub-menu items, Sink, Faucet Mirror\r\n};\r\n\r\nexport const ShowerHeadTypes = { // todo we might will change it soon, tbd\r\n shower_arm: \"shower_arm\", // old\r\n shower_head_bundle: \"shower_head_bundle\", // old\r\n shower_trim_kit: \"shower_trim_kit\", // new\r\n shower_fixture: \"shower_fixture\", // new\r\n shower_system: \"shower_system\", // new\r\n};\r\n\r\nexport const ShowerHandTypes = { // https://qc-cdn.s3.amazonaws.com/lixil/shower_hand_logic.png\r\n hand_shower_kit: \"hand_shower_kit\",\r\n hand_shower_holder: \"hand_shower_holder\",\r\n};\r\n\r\nexport const VANITY_TYPES = {\r\n // standAlone: \"standAlone\", // ST\r\n vanity_cabinet: \"vanity_cabinet\", // S, W, A, U\r\n vanity_console: \"vanity_console\", // T\r\n vanity_washstand: \"vanity_washstand\", // T, S, W, A, U\r\n};\r\n\r\nexport const useNewNavLogicPartIds = [\"vanity_sink\", ...Object.keys(VANITY_TYPES)];\r\n\r\nexport function bathTubTypeToString(bathTypeType) {\r\n switch (bathTypeType) {\r\n case BathTubType.Custom60in:\r\n return 'Custom';\r\n case BathTubType.FreeStanding:\r\n return 'Complete';\r\n }\r\n}\r\nexport function bathTubStringToType(bathtubString) {\r\n switch (bathtubString) {\r\n case 'custom':\r\n return BathTubType.Custom60in;\r\n case 'complete':\r\n return BathTubType.FreeStanding;\r\n }\r\n}\r\n\r\nexport const vanityWizardFilters = [\"Size\", \"DoorStyle\", \"Material\", \"Color\"];\r\n\r\nexport const showerWizardFilters = [\"Material\", \"DuraBathColor\", \"SlabColor\", \"TileColor\", \"TilePattern\", \"AcrylicPattern\", \"AcrylicColor\"];\r\n\r\nexport const NotQCVanityDoorStylesFilters = [\"Centennial\", \"Hudson\", \"Northbrook\", \"Osage\", \"Quebec\", \"Riverside\", \"Villager\", \"Zurich\"];\r\n\r\nexport const COUNTERTOP_GROUP_BATHROOM = [\"vanity_countertop\", \"vanity_backsplash\"];\r\n\r\nexport const CABINET_GROUP_BATHROOM = [\"vanity_cabinet\", \"vanity_mirror\"];\r\n\r\nexport const CORNER_SHELVES_POSITIONS = [\"L1\",\"L2\",\"L3\",\"R1\",\"R2\",\"R3\"];\r\n\r\nexport const SIDE_POSITIONS = [\"L\",\"R\", \"C\"];\r\nexport const createParentPositions = (object) => {\r\n if (!object.layerPositions) {\r\n object.layerPositions = {};\r\n }\r\n SIDE_POSITIONS.forEach(position => {\r\n object.layerPositions[position] = null;\r\n })\r\n}\r\nexport const createPageToLoadArray = (object) => {\r\n object.nextFeaturesPageToLoadArray = {};\r\n LayoutAbbreviations.forEach(layoutAbbreviation => {\r\n object.nextFeaturesPageToLoadArray[layoutAbbreviation] = {\r\n page: 0,\r\n allReceived: false,\r\n };\r\n });\r\n}\r\n\r\nexport const PAN_POSITIONS = [\"L\",\"C\",\"R\"];\r\n\r\nexport const VANITY_POSITIONS = [\"L\",\"0\",\"R\"];\r\n\r\nexport const LOOK_OPENED_TYPES = {\r\n edit: \"edit\",\r\n featureZoom: \"featureZoom\"\r\n}\r\n\r\nexport const LOOK_FEATURE_CONTENT = {\r\n info: \"info\",\r\n threeD: \"threeD\",\r\n aug: \"aug\",\r\n gallery: \"gallery\", //todo\r\n}\r\n\r\nexport const LOOK_OVERLAYS = {\r\n exit: \"exit\",\r\n intro: \"intro\",\r\n print: \"print\",\r\n reset: \"reset\",\r\n loadingCart: \"loadingCart\",\r\n questionLogin: \"questionLogin\",\r\n questionShare: \"questionShare\",\r\n questionView: \"questionView\",\r\n questionViewUpdated: \"questionViewUpdated\",\r\n questionRemove: \"questionRemove\",\r\n saveSucess: \"saveSucess\",\r\n stylePairing: \"stylePairing\",\r\n styleColor: \"styleColor\",\r\n styleRemove: \"styleRemove\",\r\n styleRemoveBack: \"styleRemoveBack\",\r\n styleRemoveFeature: \"styleRemoveFeature\",\r\n notCompatiblePopup: \"notCompatiblePopup\",\r\n leadCapture: \"leadCapture\",\r\n}\r\n\r\nexport const LOCAL_STORAGE_KEYS = {\r\n introVisited: \"introVisited\",\r\n saveQuoteRequired: \"saveQuoteRequired\", // not used anymore\r\n requiredShareButton: \"requiredShareButton\" // not used anymore\r\n}\r\n\r\nexport const LOOK_INTRO_STEPS = {\r\n welcome: 0,\r\n // edit: 1,\r\n layoutsAndRooms: 1,\r\n wallsAndFloor: 2,\r\n saveAndMore: 3,\r\n review: 4,\r\n}\r\n\r\nexport const LOOK_INTRO_STEPS_MOBILE = {\r\n welcome: 0,\r\n wallsAndFloor: 1,\r\n layouts: 2,\r\n saveAndMore: 3,\r\n rooms: 4,\r\n review: 5,\r\n}\r\n\r\nexport const CONTEXT_MENU_VANITY_ONLY = [...Object.keys(VANITY_TYPES), \"vanity_legs\"];\r\nexport const CONTEXT_MENU_VANITY_BUTTONS = [\"vanity_faucet\", \"vanity_sink\", \"vanity_countertop\", \"vanity_backsplash\", ...CONTEXT_MENU_VANITY_ONLY];\r\nexport const CONTEXT_MENU_BATHTUB_BUTTONS = [\"bathtub_body\", \"bathtub_fixture\"];\r\nexport const CONTEXT_MENU_SPLIT_WALL = [\"split_wall\", \"shower_screen\"];\r\nexport const CONTEXT_MENU_SHOWER_ALL = [\"shower_fixture\", \"shower_arm\", \"shower_head\", \"shower_head_bundle\",\r\n \"hand_shower_kit\", \"shower_wall\", \"shower_door\", \"shower_pan_combo\", \"replacement_tub\"];\r\nexport const CONTEXT_MENU_SHOWER_OTHER = [\"valve_trim\", \"body_spray\", \"wall_union\", \"shower_hose\", \"hand_shower_holder\",\r\n \"hand_shower_only\", \"hand_shower\", \"diverter_trim\"];\r\nexport const CONTEXT_MENU_SHOWER_ACCESSORIES = [\"shower_pod\", \"grab_bar\", \"corner_shelf\", \"large_corner_seat\",\r\n \"shower_seats\", \"soap_dish\", \"shower_rod\"];\r\n\r\nexport const CONTEXT_MENU_KITCHEN_COUNTERTOPS = [\"countertop\", \"faucet\", \"sink\", \"edge_profile\"];\r\nexport const CONTEXT_MENU_KITCHEN_CENTER_ISLAND = [\"center_island_sink\", \"center_island_faucet\", \"center_island_countertop\",\r\n \"center_island_stovetop\", \"center_island_range\", \"center_island_edge\"];\r\n\r\nexport const ALL_CONTEXT_MENU = [\r\n ...CONTEXT_MENU_VANITY_BUTTONS,\r\n ...CONTEXT_MENU_BATHTUB_BUTTONS,\r\n ...CONTEXT_MENU_SPLIT_WALL,\r\n ...CONTEXT_MENU_SHOWER_ALL,\r\n ...CONTEXT_MENU_SHOWER_OTHER,\r\n ...CONTEXT_MENU_SHOWER_ACCESSORIES,\r\n];\r\n\r\nexport const ALL_CONTEXT_MENU_KITCHEN = [\r\n ...CONTEXT_MENU_KITCHEN_CENTER_ISLAND,\r\n ...CONTEXT_MENU_KITCHEN_COUNTERTOPS,\r\n];\r\n\r\nexport const DECORS_MAX = 100;\r\n\r\nexport let LOOK_WALLS = [\"left_wall\", \"right_wall\", \"front_wall\", \"back_wall\", \"split_wall\", \"left_wall_splitter\", \"shower_wall\", \"bathroom_floor\"];\r\nfor (let i = 1; i <= DECORS_MAX; i++) {\r\n LOOK_WALLS.push(\"decor_\" + i);\r\n}\r\n\r\nexport const LOOK_WALLS_ONLY = [\"left_wall\", \"right_wall\", \"front_wall\", \"back_wall\", \"split_wall\", \"left_wall_splitter\",\r\n \"shower_wall\", \"wainscoting\", \"enclosure_top\", \"enclosure_bottom\", \"center_wall\", \"shower_floor\", \"shower_curb\", \"pony_wall\"];\r\n\r\nexport const POSSIBLE_ONE_POSITION = [\"towel_bar\", \"robe_hook\"];\r\n\r\nexport const WHITE_PAGE_ROUTES = [ROUTES.view, ROUTES.list, ROUTES.login, ROUTES.register, ROUTES.rooms];\r\n\r\nexport const AVAILABLE_FILTERS = [\"Color\", \"Material\", \"Collection\", \"Size\"];\r\n\r\nexport const WIZARD_STEP_WIDTH = 184; // 176 + 8\r\nexport const WIZARD_STEP_MOBILE_WIDTH = 96; // 88 + 8\r\nexport const WIZARD_STEP_PRODUCT_JOURNEY = 88; // 80 + 8\r\n\r\nexport const LOOK_NAVIGATION_LIST_TYPES = {\r\n regular: \"regular\",\r\n designRec: \"designRec\",\r\n notMatchingMeta: \"notMatchingMeta\"\r\n}\r\n\r\nexport const LOOK_ROOM_TYPES = {\r\n as: \"americanstandard\",\r\n grohe: \"grohe\",\r\n}\r\n","import store from \"./store\";\r\nimport {IS_LIXIL_PRODUCTION} from \"./config\";\r\nimport {isIframe} from \"./misc/helpers\";\r\n\r\nfunction isAnalytics() {\r\n return (typeof window.ga !== 'undefined');\r\n}\r\n\r\nfunction isMixPanel() {\r\n return (typeof window.mixpanel !== 'undefined');\r\n}\r\n\r\nfunction isGtag() {\r\n return (typeof window.gtag !== 'undefined')\r\n}\r\n\r\nconst Analytics = {\r\n sendEvent: function(action, label, data) {\r\n if(window.analyticsDebugging)\r\n console.log('analytics tracking', action, label, data);\r\n if(isAnalytics()) {\r\n ga('send', 'event', 'bathroom-visualizer', action, label);\r\n }\r\n if(isGtag()) {\r\n gtag('event', action, {\r\n 'event_category': 'visualizer',\r\n 'event_label': label\r\n });\r\n }\r\n if(isMixPanel()) {\r\n mixpanel.track(action, {\r\n source: 'bathroom-visualizer',\r\n label: label,\r\n shareUrl: window.shareUrl,\r\n domain: window.location.host,\r\n ...data\r\n });\r\n }\r\n return true;\r\n },\r\n sendPageEvent: function(label, data) {\r\n return this.sendEvent('page-change-to', label, data);\r\n },\r\n sendDataEnteredEvent: function(label, data) {\r\n return this.sendEvent('data-entered', label, data);\r\n },\r\n sendClickEvent: function(label, data) {\r\n const {isMobile} = store.getState().serverState;\r\n if (isMobile) {\r\n label = `mobile-${label}`;\r\n }\r\n console.log(\"label\", label);\r\n return this.sendEvent('clicked-on', label, data);\r\n },\r\n sendEcommerceEvent: function(action, data) {\r\n if (!IS_LIXIL_PRODUCTION) {\r\n return false\r\n }\r\n console.log(\"analytics ecommerce event:\", action, data);\r\n if (window.gtag) {\r\n window.gtag('event', action, data); // https://support.google.com/analytics/answer/9267735#online-sales\r\n }\r\n return true;\r\n },\r\n setUserId: function(userId) {\r\n if(isAnalytics()) {\r\n ga('set', 'userId', userId);\r\n }\r\n },\r\n setMixPanelPerson: function(email, name, phone) {\r\n if(isMixPanel()) {\r\n if(window.analyticsDebugging)\r\n console.log('set mixpanel identity', email, name, phone);\r\n mixpanel.alias(email);\r\n mixpanel.identify(email);\r\n mixpanel.people.set({'$email': email, '$created': new Date(),'$name': name, '$phone':phone});\r\n }\r\n },\r\n setExistingMixPanelPerson: function(email) {\r\n if(isMixPanel()) {\r\n if(window.analyticsDebugging)\r\n console.log(\"set existing mixpanel identity\");\r\n mixpanel.identify(email);\r\n }\r\n },\r\n logOutMixPanel: function() {\r\n if(window.analyticsDebugging)\r\n console.log('reset mixpanel identity', email, name, phone);\r\n if(isMixPanel()) {\r\n mixpanel.reset();\r\n }\r\n },\r\n sendParentPostMessage: function (action) {\r\n if (!isIframe() || !window.parent) {\r\n return\r\n }\r\n const {country, email, firstName, phoneNumber, postal} = store.getState().userState.userInfo;\r\n window.parent.postMessage({\r\n action,\r\n payload: {country, email, firstName, phoneNumber, postal},\r\n }, \"*\");\r\n },\r\n getSkuForAnalytics: function(feature, withPartId = true) {\r\n const sku = feature.dbFeature.sku || feature.dbFeature.sharedFeatureName;\r\n return withPartId\r\n ? feature.partId + \"-\" + sku.replace(/ /gi, \"_\")\r\n : sku.replace(/ /gi, \"_\")\r\n },\r\n getStringForAnalytics: function(string = \"\") {\r\n return string.replace(/ /gi, \"_\")\r\n },\r\n}\r\n\r\nexport const QKB_ANALYTIC_EVENTS = {\r\n quotingToolWizardSwitch: \"quotingtool-wizard-switch-\",\r\n}\r\n\r\nexport const LOOK_JOURNEY_ANALYTIC_EVENTS = {\r\n lookExit: \"look-exit\",\r\n lookCartButton: \"look-cart-button\",\r\n lookSidebarHome: \"look-sidebar-home\",\r\n lookSidebarFilters: \"look-sidebar-filters\",\r\n lookSidebarEdit: \"look-sidebar-edit\",\r\n lookSidebarRooms: \"look-sidebar-rooms\",\r\n lookSidebarPingPilot: \"look-sidebar-ping-pilot\",\r\n lookSidebarSave: \"look-sidebar-save\",\r\n lookSidebarMore: \"look-sidebar-more\",\r\n lookSidebarShare: \"look-sidebar-share\",\r\n lookSidebarReset: \"look-sidebar-reset\",\r\n lookSidebarFacebook: \"look-sidebar-facebook\",\r\n lookSidebarTwitter: \"look-sidebar-twitter\",\r\n lookSidebarPinterest: \"look-sidebar-pinterest\",\r\n lookSidebarFeatureGroup: \"look-sidebar-feature-group-\",\r\n lookFooterExpandMenu: \"look-footer-expand-menu\",\r\n lookFooterCloseMenu: \"look-footer-close-menu\",\r\n lookMenuHeaderClose: \"look-menu-header-close\",\r\n lookMenuHeaderBack: \"look-menu-header-back\",\r\n lookMenuHeaderViewType: \"look-menu-header-view-type-\",\r\n lookFooterList: \"look-footer-your-list\",\r\n lookZoomPlus: \"look-zoom-plus\",\r\n lookZoomMinus: \"look-zoom-minus\",\r\n lookCanvasLayer: \"look-canvas-layer-\",\r\n lookCanvasContextMenu: \"look-canvas-context-menu-\",\r\n lookCanvasContextMenuItem: \"look-canvas-context-menu-item-\",\r\n lookCanvasDemoPoint: \"look-canvas-demo-point-\",\r\n lookFeatureImageChangeLeft: \"look-feature-image-change-left\",\r\n lookFeatureImageChangeRight: \"look-feature-image-change-right\",\r\n lookFeature3dAndArOpen: \"look-feature-3d-and-ar-open\",\r\n lookFeature3dAndArClose: \"look-feature-3d-and-ar-close\",\r\n lookFeatureMoreInfoOpen: \"look-feature-more-info-open\",\r\n lookFeatureMoreInfoClose: \"look-feature-more-info-close\",\r\n lookFeatureInfoContentHeaderClose: \"look-feature-info-content-header-close\",\r\n lookFeatureInfoContent3dAr: \"look-feature-info-content-3d-ar\",\r\n lookFeatureInfoContentSwitch: \"look-feature-info-content-switch-\",\r\n lookFeatureInfoContentFeatureLink: \"look-feature-info-content-feature-link-\",\r\n lookFeatureInfoContentAccordionOpen: \"look-feature-info-content-accordion-open-\",\r\n lookFeatureInfoContentAccordionClose: \"look-feature-info-content-accordion-close-\",\r\n lookFeatureChange: \"look-feature-change\",\r\n lookFeatureUnlock: \"look-feature-unlock\",\r\n lookFeatureRemove: \"look-feature-remove-\",\r\n lookFeatureEnable: \"look-feature-enable-\",\r\n lookFeatureConfirmChange: \"look-feature-confirm-change\",\r\n lookFeatureOptions: \"look-feature-options-\",\r\n lookFeatureMatchColorsCheckbox: \"look-feature-match-colors-checkbox-\",\r\n lookFeatureMobile3dButton: \"look-feature-mobile-3d-button\",\r\n lookFeaturesListDesignRecommended: \"look-features-list-design-recommended-\",\r\n lookFeaturesList: \"look-features-list-\",\r\n lookFeaturesFiltersClose: \"look-features-filters-close\",\r\n lookFeaturesFiltersReset: \"look-features-filters-reset\",\r\n lookFeaturesFiltersAccordionOpen: \"look-features-filters-filter-group-open-\",\r\n lookFeaturesFiltersAccordionClose: \"look-features-filters-filter-group-close-\",\r\n lookFeaturesFiltersValueChecked: \"look-features-filters-filter-value-checked-\",\r\n lookFeaturesFiltersValuerUnChecked: \"look-features-filters-filter-value-unchecked-\",\r\n lookOverlayLeave: \"look-overlay-leave\",\r\n lookOverlaySave: \"look-overlay-save\",\r\n lookPopupLogin: \"look-popup-login\",\r\n lookRoom: \"look-room-\",\r\n lookLeadCapturePopupLogin: \"look-lead-capture-popup-login\",\r\n lookLeadCapturePopupRegister: \"look-lead-capture-popup-register\",\r\n lookLeadCapturePopupForgotPassword: \"look-lead-capture-popup-forgot-password\",\r\n lookLeadCapturePopupTwoFAResendCode: \"look-lead-capture-popup-two-fa-resend-code\",\r\n lookLeadCapturePopupTwoFAReceiveCall: \"look-lead-capture-popup-two-fa-receive-call\",\r\n lookLeadCapturePopupTwoFAUpdatePhone: \"look-lead-capture-popup-two-fa-update-phone\",\r\n lookMobileActiveFeatureButton: \"look-mobile-active-feature-button\",\r\n lookMobileListClose: \"look-mobile-list-close\",\r\n lookIntroLearnToUse: \"look-intro-learn-to-use\",\r\n lookIntroStartDesign: \"look-intro-start-design\",\r\n lookIntroSkip: \"look-intro-skip-on-step-\",\r\n lookIntroFinalStepStartDesign: \"look-intro-final-step-start-design\",\r\n lookIntroPagination: \"look-intro-pagination-\",\r\n lookIntroNextStep: \"look-intro-next-step-\",\r\n lookRoomIdeasOnIntro: \"look-room-ideas-on-intro\",\r\n lookRoomIdeasOpen: \"look-room-ideas-open\",\r\n lookRoomIdeasClose: \"look-room-ideas-close\",\r\n lookRoomIdeasPreset: \"look-room-ideas-preset-\",\r\n lookMainCategory: \"look-main-category-\",\r\n lookCanvasPolicyLinks: \"look-canvas-policy-links-\",\r\n lookListPolicyLinks: \"look-list-policy-links-\",\r\n lookListHeaderSave: \"look-list-header-save\",\r\n lookListBackToCustomize: \"look-list-back-to-customize\",\r\n lookListAddToCart: \"look-list-add-to-cart\",\r\n lookListOpenMiniCart: \"look-list-open-mini-cart\",\r\n lookListSelectAllItems: \"look-list-select-all-items-\",\r\n lookListCartItemSelect: \"look-list-cart-item-\",\r\n lookListCartItemQuantityChange: \"look-list-cart-item-quantity-\",\r\n lookListCartItemRemove: \"look-list-cart-item-remove-\",\r\n lookListCartItemMoreDropdown: \"look-list-cart-item-more-dropdown-\",\r\n lookListCartItemMoreDropdownWishlist: \"look-list-cart-item-more-dropdown-wishlist-\",\r\n lookListCartItemMoreDropdownChange: \"look-list-cart-item-more-dropdown-change-\",\r\n lookStylePopupConfirmRemove: \"look-style-popup-confirm-remove\",\r\n lookStylePopupRemoveBackContinue: \"look-style-popup-remove-back-continue\",\r\n lookStylePopupRemoveBack: \"look-style-popup-remove-back\",\r\n lookStylePopupConfirm: \"look-style-popup-confirm\",\r\n lookPopupSaveSuccessSubmit: \"look-popup-save-success-submit\",\r\n lookPopupSaveResetSubmit: \"look-popup-reset-submit\",\r\n lookPopupChangeViewSubmit: \"look-popup-change-view-submit\",\r\n lookMenuWizard: \"look-menu-wizard-\",\r\n lookWizardParent: \"look-wizard-parent-\",\r\n lookWizardListFeature: \"look-wizard-list-feature-\",\r\n lookWizardListFilter: \"look-wizard-list-filter-\",\r\n lookWizardMatchAll: \"look-wizard-match-all-\",\r\n lookWizardCompletedClose: \"look-wizard-completed-close\",\r\n lookShowCompatabilityAlert: \"look-show-compatability-alert\",\r\n lookCloseCompatabilityAlert: \"look-close-compatability-alert\",\r\n lookCloseAndApplyCompatabilityAlert: \"look-close-and-apply-compatability-alert\",\r\n lookLockedButton: \"look-locked-button\",\r\n lookSidebarRevertCtrlZ: \"look-sidebar-revert-or-ctrl-z\",\r\n}\r\n\r\nexport const PRODUCT_JOURNEY_ANALYTIC_EVENTS = {\r\n productTopButtonsShop: \"product-top-buttons-shop\",\r\n productTopButtonsExit: \"product-top-buttons-exit\",\r\n productTopButtonsMenu: \"product-top-buttons-menu\",\r\n productTopButtonsShare: \"product-top-buttons-share-\",\r\n productTopButtonsPingPilot: \"product-top-buttons-ping-pilot\",\r\n productTopButtonsShareFacebook: \"product-top-buttons-share-facebook\",\r\n productTopButtonsShareTwitter: \"product-top-buttons-share-twitter\",\r\n productTopButtonsSharePinterest: \"product-top-buttons-share-pinterest\",\r\n productTopButtonsSave: \"product-top-buttons-save\",\r\n productCanvasLayer: \"product-canvas-layer-\",\r\n productCanvasContextMenu: \"product-canvas-context-menu-\",\r\n productCanvasContextMenuItem: \"product-canvas-context-menu-item-\",\r\n productCanvasDemoPoint: \"product-canvas-demo-point-\",\r\n productSidebarHeaderAllProducts: \"product-sidebar-header-all-products\",\r\n productSidebarHeaderRoomLayouts: \"product-sidebar-header-room-layouts\",\r\n productSidebarHeaderCart: \"product-sidebar-header-cart\",\r\n productSidebarCategory: \"product-sidebar-category-\",\r\n productFeatureChange: \"product-feature-change\",\r\n productFeatureImageChangeLeft: \"product-feature-image-change-left\",\r\n productFeatureImageChangeRight: \"product-feature-image-change-right\",\r\n productFeatureMoreInfoOpen: \"product-feature-more-info-open\",\r\n productFeatureMoreInfoClose: \"product-feature-more-info-close\",\r\n productFeatureInfoContentAccordionOpen: \"product-feature-info-content-accordion-open-\",\r\n productFeatureInfoContentAccordionClose: \"product-feature-info-content-accordion-close-\",\r\n productFeatureQuantityChange: \"product-feature-quantity-change\",\r\n productFeatureRemove: \"product-feature-remove-\",\r\n productFeatureEnable: \"product-feature-enable-\",\r\n productFeature3dAndArOpen: \"product-feature-3d-and-ar-open\",\r\n productFeature3dAndArClose: \"product-feature-3d-and-ar-close\",\r\n productFeatureInfoContentHeaderClose: \"product-feature-info-content-header-close\",\r\n productFeatureInfoContent3dAr: \"product-feature-info-content-3d-ar\",\r\n productFeatureInfoContentSwitch: \"product-feature-info-content-switch-\",\r\n productFeatureInfoContentFeatureLink: \"product-feature-info-content-feature-link-\",\r\n productFeatureUnlockNow: \"product-feature-unlock-now\",\r\n productFeatureLockedBadge: \"product-feature-locked-badge\",\r\n productFeatureLocked3DButton: \"product-feature-locked-3d-button\",\r\n productFeatureSQFT: \"product-feature-sqft\",\r\n productFeatureAddToCart: \"product-feature-add-to-cart-\",\r\n productFeatureContinueShopping: \"product-feature-continue-shopping\",\r\n productFeatureCloseProductsList: \"product-feature-close-features-list\",\r\n productFeatureOptions: \"product-feature-options-\",\r\n productFeatureMobile3dButton: \"product-feature-mobile-3d-button\",\r\n productFeaturesNext: \"product-features-next-\",\r\n productFeaturesList: \"product-features-list-\",\r\n productFeaturesListViewType: \"product-features-list-view-type-\",\r\n productFeaturesFiltersClose: \"product-features-filters-close\",\r\n productFeaturesFiltersReset: \"product-features-filters-reset\",\r\n productFeaturesFiltersAccordionOpen: \"product-features-filters-filter-group-open-\",\r\n productFeaturesFiltersAccordionClose: \"product-features-filters-filter-group-close-\",\r\n productFeaturesFiltersValueChecked: \"product-features-filters-filter-value-checked-\",\r\n productFeaturesFiltersValuerUnChecked: \"product-features-filters-filter-value-unchecked-\",\r\n productSimilarListClose: \"product-similar-list-close\",\r\n productSimilarListTitle: \"product-similar-list-title\",\r\n productSimilarListFeature: \"product-similar-list-feature-\",\r\n productSimilarListFeatureAddToCart: \"product-similar-list-feature-add-to-cart-\",\r\n productOverlayLeave: \"product-overlay-leave\",\r\n productOverlaySave: \"product-overlay-save\",\r\n productPopupLogin: \"product-popup-login\",\r\n productMatchColorsVisualizeAllCheckbox: \"product-match-colors-visualize-all-checkbox-\",\r\n productRoom: \"product-room-\",\r\n productRoomLayouts: \"product-room-layouts\",\r\n productRoomIdeas: \"product-room-ideas\",\r\n productRoomIdeasPreset: \"product-room-ideas-preset-\",\r\n productFiltersOpen: \"product-filters-open\",\r\n productMenuFooterButton: \"product-menu-footer-button\",\r\n productPopupSaveSuccessSubmit: \"product-popup-save-success-submit\",\r\n productPopupResetSubmit: \"product-popup-reset-submit\",\r\n productPopupChangeViewSubmit: \"product-popup-change-view-submit\",\r\n roomsRoomLayouts: \"rooms-room-layouts\",\r\n roomsRoomIdeas: \"rooms-room-ideas\",\r\n cartCheckoutLogin: \"cart-checkout-login\",\r\n cartCheckoutRegister: \"cart-checkout-register\",\r\n cartCheckoutSuccessContinueShopping: \"cart-checkout-success-continue-shopping\",\r\n cartCheckoutSuccessViewAll: \"cart-checkout-success-view-all-\",\r\n cartCheckoutSuccessFeature: \"cart-checkout-success-feature-\",\r\n cartTermsAccept: \"cart-terms-accept\",\r\n cartTwoFANext: \"cart-two-fa-next\",\r\n cartTwoFAUpdatePhone: \"cart-two-fa-update-phone\",\r\n cartTwoFAResendCode: \"cart-two-fa-resend-code\",\r\n cartTwoFAReceiveCall: \"cart-two-fa-receive-call\",\r\n leadCapturePopupLogin: \"lead-capture-popup-login\",\r\n leadCapturePopupRegister: \"lead-capture-popup-register\",\r\n leadCapturePopupForgotPassword: \"lead-capture-popup-forgot-password\",\r\n leadCapturePopupTwoFAResendCode: \"lead-capture-popup-two-fa-resend-code\",\r\n leadCapturePopupTwoFAReceiveCall: \"lead-capture-popup-two-fa-receive-call\",\r\n leadCapturePopupTwoFAUpdatePhone: \"lead-capture-popup-two-fa-update-phone\",\r\n productLockedButton: \"product-locked-button\",\r\n shopFeaturesList: \"shop-features-list-\",\r\n shopFeaturesListOptions: \"shop-features-list-options-\",\r\n shopFeatureOptions: \"shop-feature-options-\",\r\n shopFeatureAddToCart: \"shop-feature-add-to-cart-\",\r\n shopHelpChat: \"shop-help-chat\",\r\n shopSQFTButton: \"shop-feature-sqft\",\r\n}\r\n\r\nexport default Analytics\r\n","import {\r\n hardCodeIsCaesarStone,\r\n hardCodeIsLowes,\r\n hardCodeIsMcDermott,\r\n hardCodeIsModerno,\r\n hardCodeIsPorcelanosa,\r\n isProd\r\n} from \"../../misc/fabricatorHardcode\";\r\n\r\nexport const isDevMode = () => {\r\n return window.location.href.includes(\"dev=1\") || document.kvConfig.devMode\r\n};\r\n\r\nexport const SQFT_POST_MESSAGE_ACTIONS = {\r\n initialLoad: \"initialLoad\",\r\n setQTData: \"setQTData\",\r\n closeSqFtCalc: \"closeSqFtCalc\",\r\n callResetDataPopup: \"callResetDataPopup\",\r\n callChangeLayoutDataPopup: \"callChangeLayoutDataPopup\",\r\n userIdleResetCounter: \"userIdleResetCounter\",\r\n resetHistory: \"resetHistory\",\r\n saveHistory: \"saveHistory\",\r\n setNewLayoutOnSqft: \"setNewLayoutOnSqft\",\r\n setCanvasCenter: \"setCanvasCenter\",\r\n stopRender: \"stopRender\",\r\n startRender: \"startRender\",\r\n};\r\n\r\nexport const MEASURE_UNITS = {\r\n Metric: \"Metric\",\r\n Imperial: \"Imperial\",\r\n};\r\n\r\n/**\r\n *\r\n * This is used only to take shape part id\r\n * @type {{top_cabinet: string, bottom_cabinet: string, center_island_countertop: string, slabPlaceHolder: string, seamPiece: string, countertop: string, spacer: string, vanity_countertop: string, backsplashPiece: string}}\r\n */\r\nexport const SHAPE_PART_ID = {\r\n edge: 'edge',\r\n seamPiece: 'seamPiece',\r\n backsplashPiece: 'backsplashPiece',\r\n waterfallPiece: 'waterfallPiece',\r\n slabPlaceHolder: 'slabPlaceHolder',\r\n top_cabinet: 'top_cabinet',//\r\n bottom_cabinet: 'bottom_cabinet',//\r\n tall_cabinet: 'tall_cabinet', //\r\n lower_cabinet_boxes: 'lower_cabinet_boxes',\r\n upper_cabinet_boxes: 'upper_cabinet_boxes',\r\n tall_cabinet_boxes: 'tall_cabinet_boxes',\r\n countertop: 'countertop',\r\n spacer: 'spacer',\r\n vanity_countertop: 'vanity_countertop',\r\n center_island_countertop: 'center_island_countertop',\r\n dishwasher: \"dishwasher\",\r\n hood: \"hood\",\r\n};\r\n\r\nexport const FEATUREGROUP_PART_ID = {\r\n specialty_cut_and_designs: 'specialty_cut_and_designs'\r\n}\r\n\r\nexport const SHAPE_ROTATE_DIRECTION = {\r\n right: 0,\r\n left: 1,\r\n};\r\n\r\nexport const ALIGN = {\r\n right: 'right',\r\n left: 'left',\r\n center: 'center',\r\n};\r\n\r\nexport const SHAPE_TYPE = {\r\n polygon: \"polygon\",\r\n square: \"square\",\r\n wideangle: \"wideangle\",\r\n horseshoe: \"horseshoe\",\r\n appliances: \"appliances\",\r\n};\r\n\r\nexport const RENDER_TEMPLATES = {\r\n default: \"default\",\r\n linesOnly: \"linesOnly\",\r\n filledPrimary: \"filledPrimary\",\r\n accordingToFeature: \"accordingToFeature\",\r\n filledActive: \"filledActive\",\r\n};\r\n\r\n/**\r\n * NAVIGATION\r\n */\r\nexport const SIDEBAR2_BUTTONS = [\r\n {\r\n menu: \"summary\",\r\n classNames: \"button--parent button--summary\",\r\n text: \"mobile.summary\",\r\n hasMenu: true\r\n },\r\n // {\r\n // menu: \"settings\",\r\n // classNames: \"button--parent button--settings\",\r\n // text: \"settings\",\r\n // hasMenu: true\r\n // }\r\n];\r\n\r\nexport const SIDEBAR_BUTTONS_MENU = {\r\n move: \"move\",\r\n shapes: \"shapes\",\r\n layouts: \"layouts\",\r\n summary: \"summary\",\r\n delete: \"delete\",\r\n cabinetset: \"cabinetset\"\r\n}\r\n\r\nexport const SIDEBAR_SLAB_BUTTONS = {\r\n move: \"move\",\r\n //moveSlab: \"moveSlab\",\r\n rotate: \"rotate\",\r\n loadSlab: \"loadSlab\",\r\n seam: \"seam\",\r\n duplicate: \"duplicate\",\r\n delete: \"delete\",\r\n};\r\n\r\nexport const MOVABLE_IMAGE_TYPES = {\r\n slabImage: \"slabImage\",\r\n};\r\n\r\nexport const SIDEBAR_SLAB_SEAM_BUTTONS = {\r\n //addFreeSeam: \"addFreeSeam\", //todo enable when ready\r\n addSeamHorizontal: \"addSeamHorizontal\",\r\n addSeamVertical: \"addSeamVertical\",\r\n undoSeam: \"undoSeam\",\r\n resetSeams: \"resetSeams\",\r\n};\r\n\r\n/**\r\n * remember to update SIDEBAR_HIDDEN_BUTTONS (names should be the same)\r\n */\r\nexport const SIDEBAR_NAVIGATION_BUTTONS = {\r\n move: \"move\",\r\n freeDraw: \"freeDraw\",\r\n resize: \"resize\",\r\n rotate: \"rotate\",\r\n corners: \"corners\",\r\n radius: \"radius\",\r\n edge: \"edge\",\r\n backsplash: \"backsplash\",\r\n end_cap: \"end_cap\",\r\n appliances: \"appliances\", // disable appliances for caes\r\n angle: \"angle\",\r\n bumpout: \"bumpout\",\r\n label: \"label\", // disable appliances for caes\r\n text: \"text\",\r\n ...((!hardCodeIsLowes()) && { mitered: \"mitered\" }),\r\n ...((!hardCodeIsMcDermott() && !hardCodeIsLowes()) && { toolWaterfall: \"toolWaterfall\" }),\r\n ...((!isProd && (hardCodeIsModerno() || hardCodeIsPorcelanosa() || isDevMode())) && { toolUnderlayment: \"toolUnderlayment\" }),\r\n duplicate: \"duplicate\",\r\n};\r\n\r\nexport const SIDEBAR_TYPE_AREA_NAVIGATION_BUTTONS = {\r\n move: \"move\",\r\n freeDraw: \"freeDraw\",\r\n resize: \"resize\",\r\n rotate: \"rotate\",\r\n corners: \"corners\",\r\n edge: \"edge\",\r\n bumpout: \"bumpout\",\r\n mitered: \"mitered\",\r\n ...((hardCodeIsModerno() || hardCodeIsPorcelanosa() || isDevMode()) && {toolWaterfall: \"toolWaterfall\"}),\r\n label: \"label\", // disable appliances for caes\r\n text: \"text\",\r\n duplicate: \"duplicate\",\r\n};\r\n\r\nexport const SIDEBAR_NAVIGATION_CABINET_BUTTONS = {\r\n move: \"move\",\r\n resize: \"resize\",\r\n rotate: \"rotate\",\r\n lower: \"lower\",\r\n upper: \"upper\",\r\n tall: \"tall\",\r\n centerIsland: \"centerIsland\",\r\n spacer: \"spacer\",\r\n //style: \"style\",\r\n wall: \"wall\",\r\n //crown: \"crown\",\r\n top_handle: \"top_handle\",\r\n bottom_handle: \"bottom_handle\",\r\n end_panel: \"end_panel\",\r\n appliances: \"appliances\", // disable appliances for caes\r\n text: \"text\",\r\n};\r\n\r\nexport const SIDEBAR_NAVIGATION_BUTTONS_LEVEL3 = {\r\n filters: \"filters\",\r\n};\r\n\r\nexport const SIDEBAR_BUTTONS = [\r\n {\r\n menu: \"move\",\r\n message: \"sqft.navigation.menu.tools\",\r\n shouldHardcodeMessage: true,\r\n hasMenu: true,\r\n subMenu: SIDEBAR_NAVIGATION_BUTTONS\r\n }, {\r\n menu: \"shapes\",\r\n message: \"sqft.navigation.menu.shapes\",\r\n hasMenu: true\r\n }, {\r\n menu: \"layouts\",\r\n message: \"sqft.navigation.menu.layouts\",\r\n hasMenu: true\r\n }, { // disable summary for caes\r\n menu: \"summary\",\r\n message: \"sqft.navigation.menu.summary\",\r\n hasMenu: true\r\n }, {\r\n menu: \"delete\",\r\n message: \"sqft.navigation.menu.delete\",\r\n title: \"Remove an object from the workspace\", //todo translation\r\n additionalClassNames: \"dot-delete\"\r\n },\r\n // {\r\n // menu: \"settings\",\r\n // message: \"sqft.navigation.menu.settings\"\r\n // },\r\n];\r\n\r\nexport const SIDEBAR_TYPE_AREA_BUTTONS = [\r\n {\r\n menu: \"move\",\r\n message: \"sqft.navigation.menu.move\",\r\n hasMenu: true,\r\n subMenu: SIDEBAR_NAVIGATION_BUTTONS\r\n }, {\r\n menu: \"shapes\",\r\n message: \"sqft.navigation.menu.shapes\",\r\n hasMenu: true\r\n }, { // disable summary for caes\r\n menu: \"summary\",\r\n message: \"sqft.navigation.menu.summary\",\r\n hasMenu: true\r\n }, {\r\n menu: \"delete\",\r\n message: \"sqft.navigation.menu.delete\",\r\n title: \"Remove an object from the workspace\", //todo translation\r\n additionalClassNames: \"dot-delete\"\r\n },\r\n];\r\n\r\nexport const SIDEBAR_CABINET_BUTTONS = [\r\n {\r\n menu: \"move\",\r\n message: \"sqft.navigation.menu.move\",\r\n hasMenu: true,\r\n subMenu: SIDEBAR_NAVIGATION_CABINET_BUTTONS\r\n }, { // disable summary for caes\r\n menu: \"summary\",\r\n message: \"sqft.navigation.menu.summary\",\r\n hasMenu: true\r\n }, {\r\n menu: \"delete\",\r\n message: \"sqft.navigation.menu.delete\",\r\n title: \"Remove an object from the workspace\", //todo translation\r\n additionalClassNames: \"dot-delete\"\r\n },...(isDevMode() ? [{\r\n menu: \"cabinetset\",\r\n message: \"Cabinet Set\",\r\n }] : []),\r\n // {\r\n // menu: \"settings\",\r\n // message: \"sqft.navigation.menu.settings\"\r\n // },\r\n];\r\n\r\nexport const SIDEBAR_WITH_FEATURES_SUBMENU = [\r\n SIDEBAR_NAVIGATION_BUTTONS.end_cap,\r\n SIDEBAR_NAVIGATION_CABINET_BUTTONS.end_panel,\r\n SIDEBAR_NAVIGATION_CABINET_BUTTONS.centerIsland\r\n];\r\n\r\nexport const SIDEBAR_HIDDEN_BUTTONS = {\r\n mitered: \"mitered\",\r\n toolWaterfall: \"toolWaterfall\",\r\n toolUnderlayment: \"toolUnderlayment\",\r\n buttonMitered: \"buttonMitered\",\r\n buttonCustomBacksplash: \"buttonCustomBacksplash\",\r\n edgePeninsulaUnderwrap: \"edgePeninsulaUnderwrap\",\r\n};\r\n\r\nexport const SIDEBAR_SHAPE_BUTTONS = {\r\n square: \"square\",\r\n lshape: \"lshape\",\r\n wideangle: \"wideangle\",\r\n rectangle: \"rectangle\",\r\n dot: \"dot\",\r\n freeDraw: \"freeDraw\",\r\n};\r\n\r\n/*\r\n* Hide shapes after removing them in popup window\r\n*/\r\nexport const isDisabledInPopupShouldBeHidden = () => {\r\n return hardCodeIsCaesarStone() //enabled only for caesarstone\r\n}\r\n\r\nexport const SIDEBAR_LAYOUTS_BUTTONS = [\r\n \"S\", \"SP\", \"SI\", \"SPI\", \"SN\", \"SPN\", \"SNI\", \"SPNI\", \"L\", \"LI\", \"LN\", \"LNI\"\r\n];\r\n\r\nexport const SQFT_APPLIANCES = {\r\n hood: \"hood\",\r\n refrigerator: \"refrigerator\",\r\n range: \"range\",\r\n sink: \"sink\",\r\n doubleSink: \"doubleSink\",\r\n dishwasher: \"dishwasher\",\r\n iceMachine: \"ice machine\",\r\n oven: \"oven\",\r\n stovetop: \"stovetop\",\r\n trashCompactor: \"trash compactor\",\r\n wineFridge: \"wine fridge\"\r\n};\r\n\r\nexport const SQFT_APPLIANCES_CAES = {\r\n hood: \"hood\",\r\n sink: \"sink\",\r\n stovetop: \"stovetop\",\r\n};\r\n\r\nexport const CABINET_LABELS = {\r\n top_cabinet: 'top_cabinet',\r\n bottom_cabinet: 'bottom_cabinet',\r\n tall_cabinet: 'tall_cabinet',\r\n crown_molding: 'crown_molding',\r\n tall_cabinet_boxes: 'tall_cabinet_boxes',\r\n lower_cabinet_boxes: 'lower_cabinet_boxes',\r\n upper_cabinet_boxes: 'upper_cabinet_boxes',\r\n handle: 'handle',\r\n};\r\n\r\nexport const SQFT_CABINET_APPLIANCES = {\r\n //hood: \"hood\",\r\n //microwave: \"microwave\",\r\n};\r\n\r\nexport const SQFT_APPLIANCES_WITH_SUBMENU = [\r\n SQFT_APPLIANCES.oven,\r\n SQFT_APPLIANCES.hood,\r\n SQFT_APPLIANCES.dishwasher,\r\n SQFT_APPLIANCES.stovetop,\r\n SQFT_APPLIANCES.refrigerator,\r\n SQFT_APPLIANCES.range,\r\n SQFT_CABINET_APPLIANCES.microwave,\r\n //partIds which names are mismatched\r\n 'stove',\r\n 'fridge',\r\n]\r\n\r\nexport const SQFT_SHAPES_THAT_ADD_OVERHANG = [\r\n SQFT_APPLIANCES.oven,\r\n SQFT_APPLIANCES.range,\r\n SQFT_APPLIANCES.hood,\r\n SQFT_APPLIANCES.dishwasher,\r\n SQFT_APPLIANCES.stovetop,\r\n SQFT_APPLIANCES.refrigerator,\r\n CABINET_LABELS.tall_cabinet_boxes,\r\n CABINET_LABELS.lower_cabinet_boxes,\r\n //partIds which names are mismatched\r\n 'stove',\r\n 'fridge',\r\n]\r\n\r\nexport const SQFT_MODE = {\r\n regular: \"regular\",\r\n slab: \"slab\",\r\n};\r\n\r\nexport const SQFT_VIEW_MODE = {\r\n twoDMode: \"2d Mode\",\r\n threeDMode: \"3d Mode\",\r\n threeDModeDoors: \"3d Mode doors\",\r\n augmentedReality: \"Augmented reality\",\r\n augmentedRealityDoors: \"Augmented reality doors\"\r\n}\r\n\r\nexport const MANUAL_CALCULATION_ROW_TYPES = {\r\n countertopRows: \"countertopRows\",\r\n backsplashRows: \"backsplashRows\",\r\n edgeRows: \"edgeRows\",\r\n};\r\n\r\nexport const DIRECTION = {\r\n north: \"north\",\r\n east: \"east\",\r\n south: \"south\",\r\n west: \"west\",\r\n};\r\n\r\nexport const MANUAL_CALCULATION_MEASURE = {\r\n length: \"length\",\r\n height: \"height\",\r\n width: \"width\",\r\n selectedFeature: \"selectedFeature\",\r\n};\r\n\r\nexport const SQFT_BACKSPLASH_TYPES = [\"4\", \"6\", \"18\"];\r\nexport const SQFT_BACKSPLASH_TYPES_METRIC = [\"100\", \"150\", \"600\"];\r\nexport const SQFT_WALL_TYPES = [\"wall\"];\r\nexport const SQFT_MEASURE_UNIT = {\r\n imperial: \"Imperial\",\r\n metric: \"Metric\",\r\n};\r\nexport const FREE_DRAW_TYPE = {\r\n shape: \"shape\",\r\n wall: \"wall\",\r\n};\r\n\r\nexport const CONTEXT_MENU_TYPE = {\r\n list: \"list\",\r\n buttons: \"buttons\",\r\n};\r\n\r\nexport const SQFT_FEATURES = {\r\n bumpouts: 'bumpouts',\r\n countertop: 'countertop',\r\n center_island_countertop: 'center_island_countertop',\r\n slabs: 'slabs',\r\n backsplashes: 'backsplashes',\r\n edges: 'edges',\r\n radius: 'radius',\r\n corners: 'corners',\r\n shower_wall: 'shower_wall',\r\n shower_floor: 'shower_floor',\r\n kitchen_floor: 'kitchen_floor',\r\n vanity_accent: 'vanity_accent',\r\n vanity_countertop: 'vanity_countertop',\r\n vanity_backsplash: 'vanity_backsplash',\r\n shower_interior_wall: 'shower_interior_wall',\r\n shower_interior_wall_accent: 'shower_interior_wall_accent',\r\n shower_wall_accent: 'shower_wall_accent',\r\n accent_wall: 'accent_wall',\r\n bathroom_floor: 'bathroom_floor',\r\n wall_a: 'wall_a',\r\n wall_b: 'wall_b',\r\n wall_c: 'wall_c',\r\n front_wall: 'front_wall',\r\n top_cabinet: 'top_cabinet',\r\n bottom_cabinet: 'bottom_cabinet',\r\n lower_cabinet_boxes: 'lower_cabinet_boxes',\r\n upper_cabinet_boxes: 'upper_cabinet_boxes',\r\n tall_cabinet_boxes: 'tall_cabinet_boxes',\r\n crown_molding: 'crown_molding',\r\n handle: 'handle',\r\n top_handle: 'top_handle',\r\n bottom_handle: 'bottom_handle',\r\n underlayment: 'underlayment',\r\n wall_door_end_accessory: 'wall_door_end_accessory',\r\n base_door: 'base_door',\r\n island_panel: 'island_panel',\r\n refridgerator_panel: 'refridgerator_panel',\r\n end_cap: 'end_cap'\r\n};\r\n\r\nexport const PARENT_KEYS_WITH_COMBINED_FEATURES_IN_CART = [\r\n 'edges',\r\n 'backsplashes',\r\n 'countertop',\r\n 'center_island_countertop',\r\n 'radius',\r\n 'corners',\r\n 'slabs',\r\n 'vanity_countertop',\r\n 'vanity_backsplash',\r\n 'shower_wall',\r\n 'shower_interior_wall',\r\n 'shower_interior_wall_accent',\r\n 'accent_wall',\r\n 'shower_floor',\r\n 'bathroom_floor',\r\n 'kitchen_floor',\r\n 'wall_a',\r\n 'wall_b',\r\n 'wall_c',\r\n 'front_wall',\r\n];\r\n\r\nexport const END_CAP_CABINETS_PART_IDS = [\r\n SQFT_FEATURES.wall_door_end_accessory,\r\n SQFT_FEATURES.base_door,\r\n SQFT_FEATURES.island_panel,\r\n SQFT_FEATURES.refridgerator_panel,\r\n];\r\n\r\nexport const END_CAP_AREA_PART_IDS = [\r\n SQFT_FEATURES.end_cap,\r\n];\r\n\r\nexport const END_CAP_PART_IDS = [\r\n ...END_CAP_CABINETS_PART_IDS,\r\n ...END_CAP_AREA_PART_IDS,\r\n];\r\n\r\nexport const SQFT_PARENT_FEATURE_GROUP_PART_IDS = {\r\n upper_cabinet_boxes: 'top_cabinet',\r\n tall_cabinet_boxes: 'tall_cabinet',\r\n lower_cabinet_boxes: 'bottom_cabinet',\r\n}\r\n\r\nexport const SQFT_CHILD_FEATURE_GROUP_PART_IDS = {\r\n top_cabinet: 'upper_cabinet_boxes',\r\n tall_cabinet: 'tall_cabinet_boxes',\r\n bottom_cabinet: 'lower_cabinet_boxes',\r\n}\r\n\r\nexport const SQFT_AREA_TYPE_PART_IDS = {\r\n shower_wall: 'shower_wall',\r\n shower_floor: 'shower_floor',\r\n kitchen_floor: 'kitchen_floor',\r\n shower_interior_wall: 'shower_interior_wall',\r\n shower_interior_wall_accent: 'shower_interior_wall_accent',\r\n shower_wall_accent: 'shower_wall_accent',\r\n accent_wall: 'accent_wall',\r\n bathroom_floor: 'bathroom_floor',\r\n wall_a: 'wall_a',\r\n wall_b: 'wall_b',\r\n wall_c: 'wall_c',\r\n};\r\n\r\nexport const COUNTERTOP_LABELS = {\r\n center_island_countertop: 'center_island_countertop',\r\n countertop: 'countertop',\r\n vanity_countertop: 'vanity_countertop',\r\n vanity_accent: 'vanity_accent',\r\n shower_wall: 'shower_wall',\r\n shower_wall_accent: 'shower_wall_accent',\r\n shower_interior_wall: 'shower_interior_wall',\r\n shower_interior_wall_accent: 'shower_interior_wall_accent',\r\n accent_wall: 'accent_wall',\r\n shower_floor: 'shower_floor',\r\n bathroom_floor: 'bathroom_floor',\r\n kitchen_floor: 'kitchen_floor',\r\n wall_a: 'wall_a',\r\n wall_b: 'wall_b',\r\n wall_c: 'wall_c',\r\n front_wall: 'front_wall',\r\n};\r\n\r\nexport const HANDLE_TO_CABINETS = {\r\n [SQFT_FEATURES.top_handle]: [SQFT_FEATURES.upper_cabinet_boxes],\r\n [SQFT_FEATURES.bottom_handle]: [SQFT_FEATURES.lower_cabinet_boxes],\r\n [SQFT_FEATURES.handle]: [SQFT_FEATURES.upper_cabinet_boxes, SQFT_FEATURES.lower_cabinet_boxes],\r\n};\r\n\r\nexport const CABINET_COMMON_COLOR_PART_IDS = [\r\n SHAPE_PART_ID.top_cabinet,\r\n SHAPE_PART_ID.bottom_cabinet,\r\n SHAPE_PART_ID.tall_cabinet,\r\n SHAPE_PART_ID.tall_cabinet_boxes,\r\n SHAPE_PART_ID.upper_cabinet_boxes,\r\n SHAPE_PART_ID.lower_cabinet_boxes,\r\n];\r\n\r\nexport const FEATURE_QUANTITY_UNITS = [\r\n SHAPE_PART_ID.upper_cabinet_boxes,\r\n SHAPE_PART_ID.lower_cabinet_boxes,\r\n SHAPE_PART_ID.tall_cabinet_boxes\r\n];\r\n\r\nexport const BACKSPLASH_LABELS = {\r\n backsplash: 'backsplash',\r\n backsplashes: 'backsplashes',\r\n vanity_backsplash: 'vanity_backsplash',\r\n};\r\n\r\nexport const EDGE_LABELS = {\r\n edge: 'edge',\r\n edge_profile: 'edge_profile',\r\n center_island_edge: 'center_island_edge',\r\n};\r\n\r\nexport const CORNER_LABELS = {\r\n radius: 'radius',\r\n corner: 'corner',\r\n};\r\n\r\n// export const FEATURES_WITH_0_VALUE_FOR_THE_SLABS = [\r\n// SQFT_FEATURES.backsplashes,\r\n// SQFT_FEATURES.countertop,\r\n// SQFT_FEATURES.center_island_countertop,\r\n// SQFT_FEATURES.shower_wall,\r\n// SQFT_FEATURES.shower_floor,\r\n// SQFT_FEATURES.kitchen_floor,\r\n// SQFT_FEATURES.vanity_countertop,\r\n// SQFT_FEATURES.vanity_backsplash,\r\n// SQFT_FEATURES.shower_interior_wall,\r\n// SQFT_FEATURES.shower_interior_wall_accent,\r\n// SQFT_FEATURES.bathroom_floor,\r\n// SQFT_FEATURES.wall_a,\r\n// SQFT_FEATURES.wall_b,\r\n// SQFT_FEATURES.wall_c\r\n// ];\r\n\r\nexport const SHAPE_PART_IDS_USING_SAME_COLOR = {\r\n ...COUNTERTOP_LABELS,\r\n ...BACKSPLASH_LABELS,\r\n waterfallPiece: SHAPE_PART_ID.waterfallPiece,\r\n backsplashPiece: SHAPE_PART_ID.backsplashPiece,\r\n seamPiece: SHAPE_PART_ID.seamPiece,\r\n}\r\n\r\nexport const FEATURES_WITH_0_VALUE_FOR_THE_SLABS = {\r\n ...COUNTERTOP_LABELS,\r\n ...BACKSPLASH_LABELS,\r\n}\r\n\r\nexport const ALLOWED_LABEL_NAV_ITEMS = {\r\n ...COUNTERTOP_LABELS,\r\n ...BACKSPLASH_LABELS,\r\n ...CABINET_LABELS,\r\n ...SQFT_AREA_TYPE_PART_IDS,\r\n ...END_CAP_PART_IDS\r\n}\r\n\r\nexport const POINT_PROPERTY = {\r\n angle: 'angle', // 45 degCorner\r\n arcLength: 'arcLength', // Radius\r\n}\r\n\r\nexport const RESOURCE_TYPE = {\r\n attachedToLine: 'attachedToLine',\r\n waterfallSectionsData: 'waterfallSectionsData',\r\n underlaymentSections: 'underlaymentSections',\r\n selectedFeature: null\r\n}\r\n\r\nexport const RESOURCE_ATTACHED_TO_TYPE = {\r\n edge: 'edge',\r\n backsplash: 'backsplash',\r\n wall: 'wall',\r\n mitered: 'mitered',\r\n underlayment: 'underlayment',\r\n bumpout: 'bumpout',\r\n waterfall: 'waterfall',\r\n crown_molding: 'crown_molding',\r\n end_cap: 'end_cap',\r\n}\r\n\r\nexport const RESOURCE_ATTACHED_TO_NAME = {\r\n waterfall: 'Waterfall',\r\n}\r\n\r\nexport const WORKSPACE_RESOURCES = {\r\n spacers: 'spacers',\r\n handles: 'handles',\r\n walls: 'walls',\r\n shapeColors: 'shapeColors',\r\n waterfall: 'waterfall',\r\n removedFeatures: 'removedFeatures',\r\n snappedShapeGroups: 'snappedShapeGroups',\r\n selectedShapes: 'selectedShapes',\r\n images3d: 'images3d',\r\n}\r\n\r\n/**\r\n * Should be unique\r\n * @type {{peninsulaUnderwrap: string, underlayment: string, waterfall: string, cabinetReturn: string, overhangReturn: string}}\r\n */\r\nexport const WATERFALL_SHAPES_KEY = {\r\n cabinetReturn: 'Cabinet Return',\r\n waterfall: 'Waterfall Panel',\r\n overhangReturn: 'Overhang Return',\r\n underlayment: 'Underlayment',\r\n peninsulaUnderwrap: 'Ppeninsula Underwrap',\r\n}\r\n\r\nexport const WATERFALL_SHAPES_NAME = {\r\n cabinetReturn: 'Cabinet Return',\r\n waterfall: 'Waterfall Panel',\r\n overhangReturn: 'Overhang Return',\r\n underlayment: 'Underlayment',\r\n peninsulaUnderwrap: 'Underlayment',\r\n}\r\n\r\nexport const SQFT_GROUP = {\r\n area: 'area',\r\n cabinets: 'cabinets',\r\n default: 'default',\r\n}\r\n\r\nexport const SQFT_AR3D_POPUP_CONTENT_TYPE = {\r\n ar: 'ar',\r\n threeD: 'threeD',\r\n}\r\n\r\nexport const SQFT_AR3D_GLB_VIEWER = {\r\n singleModel: 'singleModel',\r\n separateModels: 'separateModels',\r\n}\r\n\r\nexport const MITER_UNDERWRAP_EDGE_NAMES = [\r\n \"miter underwrap\"\r\n];\r\n\r\nexport const MITER_EDGE_NAMES = [\r\n 'Miter 1 1/2\"',\r\n 'Miter 2\"-3\"',\r\n 'Miter 4\"-6\"',\r\n 'Miter Edge',\r\n 'Mitered Edge',\r\n 'Rimrock - 981',\r\n 'Ingletado',\r\n 'Inglete',\r\n 'Inglete.',\r\n]\r\n\r\nexport const WATERFALL_OVERLAY_TYPE = {\r\n waterfall: 'waterfall',\r\n peninsulaUnderwrap: 'peninsulaUnderwrap',\r\n}\r\n\r\nexport const MITERED_OVERLAY_TYPE = {\r\n mitered: \"mitered\",\r\n underlayment: \"underlayment\",\r\n}\r\n\r\nexport const APPLIANCES_THAT_SHOULD_RENDER_MEASUREMENTS_INSIDE_THE_SHAPE = [\r\n SQFT_APPLIANCES.sink,\r\n SQFT_APPLIANCES.doubleSink,\r\n SQFT_APPLIANCES.stovetop\r\n]\r\n\r\nexport const CABINET_SET2 = {\r\n \"doors_only\": false,\r\n \"positions\": [\r\n {\r\n \"partId\": \"stove\",\r\n \"x\": 77.99999999999999,\r\n \"y\": 0,\r\n \"z\": -112.66666666666666,\r\n \"rotation\": -90,\r\n \"url\": \"https://qc-3dfiles.s3.amazonaws.com/ar-composer/All-Stove-ZLINE-RA-RG-36.glb\",\r\n \"width\": 36,\r\n \"height\": 12,\r\n \"depth\": 27.7656\r\n },\r\n {\r\n \"partId\": \"lower_cabinet_boxes\",\r\n \"x\": 18,\r\n \"y\": 0,\r\n \"z\": -112.66666666666667,\r\n \"rotation\": 0,\r\n \"url\": \"https://d1mb1i73swc8dz.cloudfront.net/ar-composer/B42 Satin Black.glb\",\r\n \"material_url\": \"https://qc-3dfiles.s3.amazonaws.com/ar-composer/All-Bottom Cabinet-Light Italian Walnut-Bryant-12-34.5-3DB.glb\",\r\n \"target_width\": 42,\r\n \"target_depth\": 24,\r\n \"target_height\": 34,\r\n \"width\": 42,\r\n \"height\": 34,\r\n \"depth\": 24,\r\n \"featureId\": 195671726,\r\n \"parentFeatureId\": 195833433,\r\n \"shapeLayout\": \"rectangle\"\r\n },\r\n {\r\n \"partId\": \"lower_cabinet_boxes\",\r\n \"x\": -18,\r\n \"y\": 0,\r\n \"z\": -112.66666666666667,\r\n \"rotation\": 0,\r\n \"url\": \"https://d1mb1i73swc8dz.cloudfront.net/ar-composer/All-Bottom Cabinet-Winter Cape-Bryant-36-34.5-SM-ERB-BER.glb\",\r\n \"material_url\": \"https://qc-3dfiles.s3.amazonaws.com/ar-composer/All-Bottom Cabinet-Light Italian Walnut-Bryant-12-34.5-3DB.glb\",\r\n \"target_width\": 36,\r\n \"target_depth\": 36,\r\n \"target_height\": 34,\r\n \"width\": 36,\r\n \"height\": 34,\r\n \"depth\": 24,\r\n \"featureId\": 195671868,\r\n \"parentFeatureId\": 195833433,\r\n \"shapeLayout\": \"lowerLayoutType1\"\r\n },\r\n {\r\n \"partId\": \"countertop\",\r\n \"x\": -18,\r\n \"y\": 34,\r\n \"z\": -112.66666666666667,\r\n \"width\": 78,\r\n \"height\": 36,\r\n \"edge_url\": \"https://quotecountertops.com/video/sqft/countertop_edges/Eased Countertop.glb\",\r\n \"texture_url\": \"https://qc-3dfiles.s3.amazonaws.com/ar-textures/Absolute White - MSI - Marble - color - 1 - 0.16 - 0.33.png\",\r\n \"contour_points\": [\r\n {\r\n \"x\": -18,\r\n \"y\": -112.666667\r\n },\r\n {\r\n \"x\": 60,\r\n \"y\": -112.666667\r\n },\r\n {\r\n \"x\": 60,\r\n \"y\": -88.666667\r\n },\r\n {\r\n \"x\": 6,\r\n \"y\": -88.666667\r\n },\r\n {\r\n \"x\": -84,\r\n \"y\": -76.666667\r\n },\r\n {\r\n \"x\": -18,\r\n \"y\": -76.666667\r\n },\r\n {\r\n \"x\": -18,\r\n \"y\": -112.666667\r\n }\r\n ],\r\n \"overhang\": [\r\n true,\r\n false,\r\n true,\r\n true,\r\n true,\r\n true\r\n ]\r\n },\r\n {\r\n \"partId\": \"countertop\",\r\n \"x\": -84.00000000000003,\r\n \"y\": 34,\r\n \"z\": -100.66666666666664,\r\n \"width\": 36,\r\n \"height\": 24,\r\n \"edge_url\": \"https://quotecountertops.com/video/sqft/countertop_edges/Eased Countertop.glb\",\r\n \"texture_url\": \"https://qc-3dfiles.s3.amazonaws.com/ar-textures/Absolute White - MSI - Marble - color - 1 - 0.16 - 0.33.png\",\r\n \"contour_points\": [\r\n {\r\n \"x\": -84,\r\n \"y\": -100.666667\r\n },\r\n {\r\n \"x\": -48,\r\n \"y\": -100.666667\r\n },\r\n {\r\n \"x\": -48,\r\n \"y\": -76.666667\r\n },\r\n {\r\n \"x\": 6,\r\n \"y\": -76.666667\r\n },\r\n {\r\n \"x\": -84,\r\n \"y\": -100.666667\r\n }\r\n ],\r\n \"overhang\": [\r\n true,\r\n false,\r\n true,\r\n false\r\n ]\r\n },\r\n {\r\n \"partId\": \"countertop\",\r\n \"x\": -48.00000000000003,\r\n \"y\": 34,\r\n \"z\": -100.66666666666664,\r\n \"width\": 36,\r\n \"height\": 24,\r\n \"edge_url\": \"https://quotecountertops.com/video/sqft/countertop_edges/Eased Countertop.glb\",\r\n \"texture_url\": \"https://qc-3dfiles.s3.amazonaws.com/ar-textures/Absolute White - MSI - Marble - color - 1 - 0.16 - 0.33.png\",\r\n \"contour_points\": [\r\n {\r\n \"x\": -48,\r\n \"y\": -100.666667\r\n },\r\n {\r\n \"x\": -12,\r\n \"y\": -100.666667\r\n },\r\n {\r\n \"x\": -12,\r\n \"y\": -76.666667\r\n },\r\n {\r\n \"x\": -48,\r\n \"y\": -76.666667\r\n },\r\n {\r\n \"x\": -48,\r\n \"y\": -100.666667\r\n }\r\n ],\r\n \"overhang\": [\r\n true,\r\n true,\r\n true,\r\n false\r\n ]\r\n }\r\n ]\r\n}\r\n","export const ContentType = {\r\n None: 0,\r\n Layout: 1,\r\n Design: 2,\r\n DisplayRoom: 3,\r\n Loading: 4,\r\n QuotedItems: 5,\r\n RoomScene: 6,\r\n};\r\n\r\nexport const ContentTypeName = {\r\n 1: \"Room Layout\",\r\n 2: \"Design\",\r\n 3: \"Room Ideas\",\r\n 6: \"Room Scene\",\r\n};\r\n\r\nexport const ContentTypeNameTranslate = {\r\n 1: \"desktop.nav.roomLayout\",\r\n 2: \"desktop.nav.designButton\",\r\n 3: \"desktop.nav.roomIdeas\",\r\n 6: \"desktop.nav.roomScene\",\r\n};\r\n\r\nexport const PartMenuType = {\r\n Simple: 0,\r\n Complex: 1,\r\n};\r\n\r\nexport const UserPopupTypes = {\r\n Unlock: 1, // simple User Login popup\r\n GetQuote: 2, // Get quote button\r\n NewDesign: 3, // when N clicks happen & Email Design Click\r\n Schedule: 4, // schedule button\r\n};\r\nexport const ConfirmPopupTypes = {\r\n ConsultationRequest: 1,\r\n SqftResetChanges: 2,\r\n SqftUpdateQuestion: 3,\r\n AssignQuoteOnExistingUser: 4,\r\n DeleteCartItemsPopup: 5,\r\n ChangeWizardToPreviousStepSelection: 6,\r\n ReplaceRoomWhenItExistsInCartButWeAddNew: 7,\r\n};\r\n\r\nexport const UserPopupContent = {\r\n register: \"register\",\r\n login: \"login\",\r\n terms: \"terms\",\r\n forgot: \"forgot\",\r\n twoFA: \"twoFA\",\r\n twoFAVerify: \"twoFAVerify\",\r\n};\r\n\r\nexport const QuoteRequestType = {\r\n RequestQuote: 'RequestQuote',\r\n ScheduleAnAppointment: 'ScheduleAnAppointment',\r\n RequestDateTime: 'RequestDateTime',\r\n RegularDesign: 'RegularDesign', //Email Design\r\n RequestConsultation: 'RequestConsultation'\r\n};\r\n\r\nexport const UserAction = {\r\n Login: 1,\r\n Register: 2\r\n};\r\n\r\nexport const SqftUpdateTypes = {\r\n Reset: 1,\r\n UpdateData: 2\r\n};\r\n\r\nexport const dbFeatureRelatedFeaturesProperties = [\"relatedFeatures\", \"bundledFeatures\"];\r\nexport const dbFeatureFilterProperties = [\"fabFilterValueIDs\", \"filterValueIDs\"];\r\nexport const otherMissingProperties = [\"thirdPartyAR3DUrls\", \"thirdPartyAR3DMetaData\",\"lixilAR3DUrls\",\"lixilQRCode\"];\r\n","export default class DesignNavigationItem {\r\n /**\r\n *\r\n * @type {string}\r\n */\r\n text = '';\r\n\r\n /**\r\n *\r\n * @type {featureInterface}\r\n */\r\n part = null;\r\n\r\n /**\r\n *\r\n * @type {boolean}\r\n */\r\n matchesMetaFailed = false;\r\n\r\n /**\r\n *\r\n * @type {[featureInterface]}\r\n */\r\n colorOptions = null;\r\n\r\n constructor(text, feature, colorOptions = null) {\r\n this.text = text;\r\n this.part = feature;\r\n this.matchesMetaFailed = feature.matchesMetaFailed || false;\r\n this.colorOptions = colorOptions;\r\n // this.matchesMetaFailedArray = part.matchesMetaFailedArray || null\r\n }\r\n}\r\n","import COLOR_THEMES from \"./colorThemes\";\r\nimport $ from \"jquery\";\r\nimport {hardCodeIsPorcelanosa} from \"../../../../../misc/fabricatorHardcode\";\r\nimport {SQFT_AR3D_GLB_VIEWER} from \"../../../constants\";\r\n\r\nclass SqftConfig {\r\n constructor() {\r\n // Initialization of properties\r\n this.ctx = null;\r\n this.measureUnit = \"Imperial\";\r\n this.mmDivider = 1000;\r\n this.mm2ToM2Divider = 1000000;\r\n this.millimetersMultiplier = 25.4;\r\n this.inchesToMMultiplier = 1 / 39.37;\r\n this.sqftToMmMultiplier = 92903;\r\n this.sqftToM2Multiplier = 1 / 10.764;\r\n this.lnftToMmMultiplier = 304.8;\r\n this.waterfallImperialHeight = 36;\r\n this.waterfallMetricHeight = 900;\r\n this.miteredEdgeAdditionalImperialArea = hardCodeIsPorcelanosa() ? 1.5 : 0;\r\n this.miteredEdgeAdditionalMetricArea = 0; //40;//38.1;\r\n this.edgeHeightImperial = 1.25;\r\n this.edgeHeightMetric = 30;\r\n this.minApplianceLineLength = 1;\r\n this.maxApplianceLineLength = 150;\r\n this.slab = {\r\n imageWidthMetric: 3200,\r\n imageHeightMetric: 1600,\r\n imageWidthImperial: 120,\r\n imageHeightImperial: 60\r\n };\r\n this.workspace = {\r\n canvas: $('#workspace'),\r\n gridSize: 12,\r\n getScaledGridSize: () => this.getScaledGridSize(this.workspace.gridSize),\r\n getDefaultScaledGridSize: () => this.getScaledGridSize(this.workspace.gridSize, true),\r\n fontSize: $(window).width() <= 1024 ? 14 : 16,\r\n fontSizeMetric: $(window).width() <= 1024 ? 14 : 16,\r\n fontSizeSmallest: $(window).width() <= 1024 ? 11 : 11,\r\n debug: false,\r\n snapToGrid: false,\r\n menuItemActive: null\r\n };\r\n this.defaultScaleExport = 7;\r\n this.zoomSpeed = 5;\r\n this.controls = {\r\n scale: $('#scale-control'),\r\n scaleHoriz: $('#scale-control-horiz'),\r\n snapToGrid: $('#snapToGrid'),\r\n debug: $('#debug'),\r\n delete: $('#delete'),\r\n flipH: $('#flipH'),\r\n flipV: $('#flipV'),\r\n rotateLeft: $('#rotateLeft'),\r\n rotateRight: $('#rotateRight')\r\n };\r\n this.activeClass = 'active';\r\n this.activePalletItemClass = \"pallet-tool-icon-selected\";\r\n this.groups = {\r\n tools: \"tools\"\r\n };\r\n this.filterGroups = [];\r\n this.tutorialIsRunning = false;\r\n this.highlight = {\r\n points: false,\r\n lines: false,\r\n type: '',\r\n id: null,\r\n demoShow: false,\r\n rotateAngle: false,\r\n };\r\n this.activeTheme = Object.keys(COLOR_THEMES)[0];\r\n this.SNAP_OFFSET = 12;\r\n this.activeFontRegular = \"playregular\";\r\n this.activeFontBold = \"playbold\";\r\n this.crownMoldingParams = {\r\n distance: 10\r\n };\r\n this.threeD = {\r\n //glbViewer: SQFT_AR3D_GLB_VIEWER.singleModel,\r\n glbViewer: SQFT_AR3D_GLB_VIEWER.separateModels,\r\n useGoogleModelViewer: false, // this requires singleModel\r\n useStagingDomain: false,\r\n }\r\n\r\n // Initialize dependent properties\r\n this.initializeDependentProperties();\r\n\r\n // Add event listeners\r\n document.addEventListener('DOMContentLoaded', this.initialize);\r\n window.addEventListener('resize', this.updateDimensions);\r\n }\r\n\r\n initializeDependentProperties = () => {\r\n this.fieldWidth = this.getMM() * 13;\r\n this.fieldWidthCabinet = 4;\r\n this.updateDimensions();\r\n this.updateDefaultScale();\r\n this.scale = this.defaultScale;\r\n }\r\n\r\n getMM = () => {\r\n const getDPI = () => {\r\n const div = document.createElement('div');\r\n div.style.height = '1in';\r\n const body = document.getElementsByTagName('body')[0];\r\n body.appendChild(div);\r\n const dpi = div.offsetHeight;\r\n body.removeChild(div);\r\n return dpi === 0 ? 96 : dpi;\r\n }\r\n return getDPI() / 25.4;\r\n }\r\n\r\n isKiosk = (() => {\r\n let isKiosk = false;\r\n try {\r\n isKiosk = (parent && parent.parent && parent.parent.window.app && parent.parent.window.app.db);\r\n } catch (e) {\r\n isKiosk = false;\r\n }\r\n return isKiosk;\r\n })();\r\n\r\n kioskApp = (() => {\r\n if (this.isKiosk) {\r\n return parent.parent.window.app;\r\n }\r\n })();\r\n\r\n initialize = () => {\r\n this.updateDimensions();\r\n this.initializeDependentProperties();\r\n }\r\n\r\n updateDimensions = () => {\r\n this.updateDefaultScale();\r\n this.updateWorkspace(window.innerWidth);\r\n }\r\n\r\n updateDefaultScale = () => {\r\n this.defaultScale = window.innerWidth <= 1024 ? 1.5 : 3.75;\r\n };\r\n\r\n updateWorkspace = (windowWidth) => {\r\n this.workspace.fontSize = windowWidth <= 1024 ? 14 : 16;\r\n this.workspace.fontSizeMetric = windowWidth <= 1024 ? 14 : 16;\r\n this.workspace.fontSizeSmallest = windowWidth <= 1024 ? 11 : 11;\r\n }\r\n\r\n getMeasureMultiplier = () => {\r\n switch (this.measureUnit) {\r\n case \"Metric\":\r\n return this.millimetersMultiplier;\r\n case \"Metric-meters\":\r\n return 1 / 39.37;\r\n case \"Imperial\":\r\n default:\r\n return 1;\r\n }\r\n }\r\n\r\n getMeasureUnitPostfix = (shouldAddWhitespace = false) => {\r\n switch (this.measureUnit) {\r\n case \"Metric\":\r\n return shouldAddWhitespace ? \" mm\" : \"mm\";\r\n case \"Imperial\":\r\n default:\r\n return \"\\\"\";\r\n }\r\n }\r\n\r\n isDevMode = () => window.location.href.includes(\"dev=1\");\r\n\r\n isCabinetGroupInURL = () => window.location.href.includes(\"cabinets=1\");\r\n\r\n isSQFTEnabledInURL = () => window.location.hash.includes(\"sqft\");\r\n\r\n getScaledGridSize = (gridSize, isDefault = false) => {\r\n const scale = isDefault ? this.defaultScale : this.scale;\r\n let scaledGridSize = Math.round(gridSize / scale);\r\n let nearest = (12 % scaledGridSize);\r\n return nearest < scaledGridSize / 2 ?\r\n scaledGridSize - nearest :\r\n scaledGridSize + nearest;\r\n }\r\n}\r\n\r\nexport default new SqftConfig();\r\n","import _ from 'lodash';\r\nimport $ from \"jquery\";\r\n\r\nimport Shape from \"./shapes/sqftShape\";\r\nimport MovableImage from \"./shapes/movableImage\";\r\nimport WorkspaceEvents, {clearAllMenusEvents} from \"./workspace/workspaceEvents\";\r\nimport EventManager from \"./../store/sqftEventManager\";\r\nimport RulerOverlay from \"./workspace/ruler\";\r\nimport history from \"./workspaceHistory\";\r\nimport config from \"./../store/sqftConfig\";\r\nimport {\r\n mmToM,\r\n sqInchesToSqFoot,\r\n mm2ToM2,\r\n getEdgeLength,\r\n getBacksplashArea, getEdgeArea, getPointField\r\n} from \"../../../helpers/sqftHelper\";\r\n//todo sqft-react\r\n// import edges from \"./controls/edges\";\r\n// import Edges from \"./controls/edges\";\r\n// import TranslatesProvider from \"./../../../translatesProvider\";\r\nimport ShapeHelper, {getEdgeFeatures} from \"../../../helpers/shapeHelper\";\r\nimport store from \"../../../../../store\";\r\nimport {getBacksplashLength} from \"../../../helpers/sqftHelper\";\r\nimport {\r\n FEATUREGROUP_PART_ID,\r\n MOVABLE_IMAGE_TYPES,\r\n RESOURCE_ATTACHED_TO_TYPE,\r\n SHAPE_PART_ID,\r\n SHAPE_TYPE,\r\n WORKSPACE_RESOURCES\r\n} from \"../../../constants\";\r\nimport ResultImages from \"./workspace/resultImages\";\r\nimport sqftShapeManager from \"../store/sqftShapeManager\";\r\nimport sqftImageManager from \"../store/sqftImageManager\";\r\nimport {deleteCroppedSlabImage, setSqftCroppedSlabImages} from \"../../../../../actions/sqftSlabFunctions\";\r\nimport sqftSlabManager from \"../store/sqftSlabManager\";\r\nimport {updateSQFTCalculations} from \"../../../../../actions/sqftFunctions\";\r\nimport {attachResource, closeSQFTPopup} from \"./controls/resourseCanas\";\r\nimport slabWorkspace from \"./slab/slabWorkspace\";\r\nimport sqftShape from \"./shapes/sqftShape\";\r\nimport {checkShapeForAvailablePartId} from \"./shapes/shapeFunctions\";\r\nimport {getFeatureGroupName} from \"../../../../../misc/helpers\";\r\nimport {getFeatureGroup} from \"../../../helpers/sqftHelperUi\";\r\nimport {getQtCatName} from \"../../../helpers/sqftQuotesHelper\";\r\nimport cabinetWorkspace from \"./cabinet/cabinetWorkspace\";\r\nimport LineCorner from \"./shapes/lineHooks/lineCorner\";\r\nimport TextBoxManager from \"./workspace/textBoxManager\";\r\nimport {\r\n setShapeIdsWithMissingFeature,\r\n setShouldShowChangeShapeFeatureMissingMessage,\r\n setSQFTPopup\r\n} from \"../../../../../actions/sqftMenuFunctions\";\r\nimport {getShapeFeatureId} from \"../../../helpers/featureHelper\";\r\nimport sqftResourcesManager from \"../store/sqftResoursesManager\";\r\nimport {SHAPE_PART_IDS_VISIBLE_ONLY_IN_THE_SLAB_MODE} from \"../../../constantsFeature\";\r\nimport workspaceControllers, {importControllersData} from \"../store/workspaceControllers\";\r\nimport {isSFTCabinetsGroup} from \"../../../helpers/sqftNavigationHelper\";\r\nimport sqftShapeIntersectionsManager from \"../store/sqftShapeIntersectionsManager\";\r\nimport {FeatureObjectDTO} from \"../../../dto/FeatureObjectDTO\";\r\nimport SqftStore from \"../store/sqftStore\";\r\n\r\nconst workspace = function() {\r\n //private variables\r\n var canvas = null;\r\n var self = this;\r\n var state = {\r\n mouseDown: false,\r\n mouseDownPosition: null,\r\n allowDragEdge: false,\r\n allowDragBumpoutEdge: false,\r\n allowDragMiteredEdge: false,\r\n lineHighlight: true,\r\n loading: false\r\n };\r\n var objIds = 0;\r\n var pos = { //workspace top-left corner position\r\n x: 0,\r\n y: 0\r\n };\r\n var shapes = [];\r\n var nodes = {\r\n appBody : $('body'),\r\n tools: {\r\n designDefault: $('#design-default')\r\n }\r\n };\r\n //public variables\r\n this.name = 'workspace';\r\n this.isInitialized = false;\r\n this.isEdgeFeatureError = false;\r\n this.dataHasBeenImported = false;\r\n this.isLastParent = true; // used to get {x: 0, y:0} position\r\n this.miteredController = null;\r\n this.underlaymentController = null;\r\n this.resultImages = new ResultImages(this);\r\n this.textBoxManager = new TextBoxManager();\r\n this[WORKSPACE_RESOURCES.spacers] = [];\r\n this[WORKSPACE_RESOURCES.handles] = [];\r\n this[WORKSPACE_RESOURCES.walls] = [];\r\n this[WORKSPACE_RESOURCES.shapeColors] = [];\r\n this[WORKSPACE_RESOURCES.waterfall] = [];\r\n this[WORKSPACE_RESOURCES.removedFeatures] = [];\r\n this[WORKSPACE_RESOURCES.snappedShapeGroups] = [];\r\n this[WORKSPACE_RESOURCES.selectedShapes] = [];\r\n this[WORKSPACE_RESOURCES.images3d] = [];\r\n\r\n //private functions\r\n function setCanvas(value) {\r\n canvas = value;\r\n }\r\n var moveWorkspace = function(mousePos) {\r\n var xDiff = mousePos.x - state.mouseDownPosition.x;\r\n var yDiff = mousePos.y - state.mouseDownPosition.y;\r\n\r\n pos.x -= xDiff;\r\n state.mouseDownPosition.x = mousePos.x;\r\n\r\n pos.y -= yDiff;\r\n state.mouseDownPosition.y = mousePos.y;\r\n\r\n slabWorkspace.setPos({\r\n x: slabWorkspace.pos.x += xDiff,\r\n y: slabWorkspace.pos.y += yDiff\r\n }\r\n )\r\n };\r\n //private events\r\n var onMouseDown = function(mousePos, e) {\r\n void e;\r\n //debugger // eslint-disable-line no-debugger\r\n if (!window.lineInputFocused) {\r\n EventManager.stealCursor(true, true);\r\n state.mouseDown = true;\r\n state.mouseDownPosition = mousePos;\r\n EventManager.setCursor('grabbing', self, false);\r\n //debugger // eslint-disable-line no-debugger\r\n return true;\r\n }\r\n };\r\n\r\n function onMouseUp(mousePos, e) {\r\n state.mouseDown = false;\r\n state.mouseDownPosition = null;\r\n // var selectedMenu = $('.pallet-tool-icon-selected');\r\n // if (!(selectedMenu && selectedMenu.attr('data-action') === \"rotate-left\" || selectedMenu.attr('data-action') === \"delete\")) {\r\n // EventManager.resetCursor(self);\r\n // config.highlight.type = '';\r\n // $('.steps-scope-config-button').removeClass('active');\r\n // }\r\n //todo this takes too much time to update\r\n sqftShapeIntersectionsManager.updateShapesIntersections();\r\n workspaceControllers.snappedShapeGroups.updateShapesSnappedGroups(false);\r\n\r\n return onMouseMove(mousePos, e);\r\n }\r\n function onMouseMove(mousePos, e) {\r\n //debugger // eslint-disable-line no-debugger\r\n if(e.terminate) {\r\n return false;\r\n }\r\n if(state.mouseDown) {\r\n moveWorkspace(mousePos);\r\n // EventManager.setCursor('grabbing', self);\r\n } else {\r\n EventManager.resetCursor(self);\r\n }\r\n return true;\r\n }\r\n\r\n //public functions\r\n this.getObjIds = function() {\r\n return objIds;\r\n };\r\n this.setObjIds = (value) => {\r\n objIds = value\r\n };\r\n this.stealCursor = function(who) {\r\n EventManager.resetCursor(self);\r\n for(var i = 0; i < shapes.length; i++) {\r\n shapes[i].stealCursor(who);\r\n }\r\n };\r\n this.setAllowEdges = function(allow) {\r\n state.allowDragEdge = allow;\r\n };\r\n this.getAllowEdges = function() {\r\n return state.allowDragEdge\r\n };\r\n this.setAllowBumpoutEdges = function(allow) {\r\n state.allowDragBumpoutEdge = allow;\r\n };\r\n this.getAllowBumpoutEdges = function() {\r\n return state.allowDragBumpoutEdge\r\n };\r\n this.setAllowMiteredEdges = function(allow) {\r\n state.allowDragMiteredEdge = allow;\r\n };\r\n this.getAllowMiteredEdges = function() {\r\n return state.allowDragMiteredEdge\r\n };\r\n this.setAllowLineHighlight = function(allow) {\r\n state.lineHighlight = allow;\r\n };\r\n this.getAllowLineHighlight = function() {\r\n return state.lineHighlight\r\n };\r\n this.getCenter = function() {\r\n return {\r\n x: pos.x * -1,\r\n y: pos.y * -1\r\n }\r\n };\r\n this.setCenter = function(canvasWidth = window.innerWidth, canvasHeight = window.innerHeight) {\r\n pos.x = parseInt(0 - (canvasWidth / 2));\r\n pos.y = parseInt(0 - (canvasHeight / 2));\r\n //console.log(\"pos.x!\", pos.x)\r\n //console.log(\"pos.y!\", pos.y)\r\n };\r\n this.getVisibleCenter = function() {\r\n return {\r\n x: (pos.x + (canvas.width()/2)) / config.scale,\r\n y: (pos.y + (canvas.height()/2)) / config.scale\r\n };\r\n };\r\n this.getAllShapePoints = () => {\r\n let allShapePoints = [];\r\n for (const shape of shapes) {\r\n //allShapePoints.push(...shape.getPointFieldArray());\r\n const shapeCenter = shape.getCenter();\r\n const shapeCenterPointField = getPointField(shapeCenter, shape);\r\n void shapeCenterPointField;\r\n allShapePoints.push(shapeCenter);\r\n }\r\n return allShapePoints\r\n }\r\n this.getShapesCenterPoint = () => {\r\n const allShapePoints = this.getAllShapePoints();\r\n return ShapeHelper.getCenterPoint(allShapePoints);\r\n }\r\n this.getCanvas = function() {\r\n return canvas[0];\r\n };\r\n this.get$Canvas = function() {\r\n return canvas;\r\n };\r\n this.getOffset = function() {\r\n return self.getCenter();\r\n };\r\n this.setPosition = (newPos) => {\r\n slabWorkspace.setPos({\r\n x: slabWorkspace.pos.x += pos.x - newPos.x,\r\n y: slabWorkspace.pos.y += pos.y - newPos.y\r\n }\r\n )\r\n pos = _.clone(newPos);\r\n };\r\n this.getPosition = function() {\r\n return pos;\r\n };\r\n this.getScale = function() {\r\n return config.scale;\r\n };\r\n this.getState = function() {\r\n return state;\r\n };\r\n this.isEmpty = () => {\r\n return this.getShapes().length === 0\r\n }\r\n this.getHoverShape = function() {\r\n for (var i = 0; i < shapes.length; i++) {\r\n var shape = shapes[i];\r\n if (shape.isHovering()) {\r\n return shape;\r\n }\r\n }\r\n };\r\n this.getHoveredSqftShape = function() {\r\n for (let i = 0; i < shapes.length; i++) {\r\n let shape = shapes[i];\r\n if (shape.isHovering() && shape instanceof sqftShape) {\r\n return shape;\r\n }\r\n }\r\n };\r\n this.getMovingShape = () => {\r\n for (let i = 0; i < shapes.length; i++) {\r\n let shape = shapes[i];\r\n if (shape.getState().mouseDown && shape instanceof sqftShape) {\r\n return shape;\r\n }\r\n }\r\n };\r\n this.getHoverBumpout = function() {\r\n for (let i = 0; i < shapes.length; i++) {\r\n let shape = shapes[i];\r\n let lines = shape.getLines ? shape.getLines() : null;\r\n if (lines) {\r\n for (let n = 0; n < lines.length; n++) {\r\n if (lines[n].isWithBumpout && lines[n].isWithBumpout() && lines[n].bumpoutOverlay.isHoveringRect()) {\r\n return lines[n];\r\n }\r\n }\r\n }\r\n }\r\n };\r\n this.getLineWithMovingBumpout = function() {\r\n for (let i = 0; i < shapes.length; i++) {\r\n let shape = shapes[i];\r\n let lines = shape.getLines ? shape.getLines() : null;\r\n if (lines) {\r\n for (let n = 0; n < lines.length; n++) {\r\n if (lines[n].isWithBumpout && lines[n].isWithBumpout() && lines[n].bumpoutOverlay.isBumpoutPointMoving()) {\r\n return lines[n];\r\n }\r\n }\r\n }\r\n }\r\n };\r\n this.getHoverPoint = function() {\r\n for(var i = 0; i < shapes.length; i++) {\r\n if(typeof (shapes[i].getHoverPoint) === 'function') {\r\n var point = shapes[i].getHoverPoint();\r\n if(point) {\r\n return point;\r\n }\r\n }\r\n }\r\n };\r\n this.getHoverMiteredPoint = function() {\r\n for(let i = 0; i < shapes.length; i++) {\r\n if(typeof (shapes[i].getHoverPoint) === 'function' && shapes[i].isWithMitered()) {\r\n let point = shapes[i].getHoverMiteredPoint();\r\n if(point) {\r\n return point;\r\n }\r\n }\r\n }\r\n };\r\n this.getHoveredLine = function() {\r\n for (let i = 0; i < shapes.length; i++) {\r\n if (typeof (shapes[i].getHoverSegment) === 'function') {\r\n let hoveredLine = shapes[i].getHoverSegment();\r\n if (hoveredLine) {\r\n return hoveredLine;\r\n }\r\n }\r\n }\r\n };\r\n this.getHoveredLines = (skipShapeIds = []) => {\r\n const iterateShapes = shapes.filter(shp => !skipShapeIds.includes(shp.id));\r\n const hoveredLines = [];\r\n for (let i = 0; i < iterateShapes.length; i++) {\r\n if (typeof (iterateShapes[i].getHoverSegment) === 'function') {\r\n let hoveredLine = iterateShapes[i].getHoverSegmentV2();\r\n if (hoveredLine) {\r\n hoveredLines.push(hoveredLine);\r\n }\r\n }\r\n }\r\n return hoveredLines\r\n };\r\n this.getHoveredLineCorner = function() {\r\n for (let i = 0; i < shapes.length; i++) {\r\n if (typeof (shapes[i].getHoverSegmentOutlineCorner) === 'function') {\r\n let hoveredLine = shapes[i].getHoverSegmentOutlineCorner();\r\n if (hoveredLine) {\r\n return hoveredLine;\r\n }\r\n }\r\n }\r\n };\r\n this.getShapesWithoutAttachedResources = (isWithoutHidden = false) => {\r\n if (isWithoutHidden) {\r\n return shapes.filter(shape => !shape.isHidden);\r\n }\r\n return shapes\r\n }\r\n\r\n this.getShapes = (isWithoutHidden = false) => {\r\n const state = store.getState();\r\n const attachedToLineResources = state.sqftResourceState.attachedToLine;\r\n\r\n if (isWithoutHidden) {\r\n return shapes.concat(attachedToLineResources).filter(shape => !shape.isHidden);\r\n }\r\n\r\n return shapes.concat(attachedToLineResources);\r\n };\r\n this.getShapeIds = function() {\r\n const shapes = this.getShapes();\r\n\r\n return shapes.map(shape => shape.id);\r\n };\r\n this.getShapesByIds = (ids) => {\r\n const shapes = this.getShapes();\r\n\r\n return shapes.filter(shape => ids.includes(shape.id));\r\n };\r\n this.getShapesBySlabModeCoreParentId = (ids) => {\r\n const shapes = this.getShapes();\r\n\r\n return shapes.filter(shape => ids.includes(shape.slabModeCoreParentId));\r\n };\r\n this.getAttachedToLineResource = (type) => {\r\n const reduxState = store.getState();\r\n return reduxState.sqftResourceState.attachedToLine.filter(attachedToLine => {\r\n return attachedToLine.type === type\r\n });\r\n };\r\n\r\n this.clearWorkspace = () => {\r\n this.removeAllShapes();\r\n objIds = 0;\r\n shapes = [];\r\n this.textBoxManager.removeAllTextBoxes();\r\n sqftImageManager.removeAllSlabImages();\r\n sqftSlabManager.removeAllSlabBacksplashes();\r\n sqftResourcesManager.deleteAllResources();\r\n sqftResourcesManager.deleteAllMiteredSections();\r\n sqftSlabManager.deleteShapeOffset();\r\n }\r\n\r\n this.import = (importData) => {\r\n //todo on cancel click line state.withBumout somehow turns to false\r\n this.clearWorkspace();\r\n clearAllMenusEvents();\r\n SqftStore.edgeFeatures = [];\r\n\r\n console.log(\"importData to SQFT\", importData);\r\n this.dataHasBeenImported = true;\r\n objIds = importData.objIds || 0;\r\n const values = importData.countertops || importData.shapes; // QCDES-1639 \"shapes\" for old compatibility\r\n state.loading = true;\r\n let _images = [];\r\n let _attachedResources = [];\r\n if (values) {\r\n for (let i = values.length - 1; i >= 0; i--) {\r\n let value = values[i];\r\n if (value.lines) {\r\n this.importShape(value);\r\n } else if (Object.keys(RESOURCE_ATTACHED_TO_TYPE).some((key) => key === value.type)) {\r\n _attachedResources.push(value);\r\n } else if (value.image && value.type !== MOVABLE_IMAGE_TYPES.slabImage) {\r\n _images.push(value);\r\n }\r\n }\r\n }\r\n //1) Import additional shapes that are visible only in the slab mode\r\n sqftSlabManager.importSlabBacksplashes(importData.slabAdditionalShapesList || []);\r\n\r\n //2) Add attached resources\r\n //We will skip adding mitered as it was already added when the line was initiated\r\n for (const attachedResource of _attachedResources) {\r\n let lines = this.getLinesAndLineCorners();\r\n lines.forEach((line) => {\r\n if (attachedResource.attachedToId === line.id) {\r\n line.isDisabledInPopup = attachedResource.isDisabledInPopup;\r\n attachResource(line.isLine ? line : null,\r\n line instanceof LineCorner ? line : null,\r\n attachedResource.type,\r\n attachedResource.featureId,\r\n attachedResource.partId,\r\n attachedResource.name,\r\n attachedResource.height ? attachedResource.height : attachedResource.featureId, //support for old quotes, can be removed in future\r\n attachedResource.id,\r\n attachedResource.qtCatName\r\n );\r\n } else if (attachedResource.attachedTo === line.id) {\r\n //old version support\r\n attachResource(line.isLine ? line : null,\r\n line instanceof LineCorner ? line : null,\r\n attachedResource.type,\r\n attachedResource.featureId,\r\n attachedResource.partId,\r\n attachedResource.image.name,\r\n attachedResource.height ? attachedResource.height : attachedResource.featureId, //support for old quotes, can be removed in future\r\n attachedResource.id\r\n );\r\n }\r\n });\r\n }\r\n //Add movable images\r\n\r\n for (let i = 0; i < _images.length; i++) {\r\n this.importImage(_images[i]);\r\n\r\n // if (data.attachedTo) {\r\n // switch(value.type) {\r\n // case \"backsplash\":\r\n // case \"wall\":\r\n // if (value.part === 'lineCorner') {\r\n // data.attachedTo.addBacksplashToCornerLine(value.image.name, value.type, value.image.id);\r\n // } else {\r\n // data.attachedTo.addBacksplashToLine(value.image.name, value.type, value.image.id);\r\n // }\r\n // break;\r\n // case \"edge\":\r\n // if (value.part === 'lineCorner') {\r\n // data.attachedTo.lineCorner.addEdgeToCornerLine(value.image.name, value.image.id);\r\n // } else {\r\n // data.attachedTo.addEdgeToLine(value.image.name, value.image.id);\r\n // }\r\n // break;\r\n // }\r\n // }\r\n }\r\n\r\n this.textBoxManager.setImportedTextBoxes(importData.textBoxes);\r\n sqftImageManager.importSlabImages(importData.slabImages || []);\r\n\r\n const {sqftMenuState} = store.getState();\r\n const {isShapeFeatureMissing} = sqftMenuState;\r\n if (isShapeFeatureMissing) {\r\n this.showChangeShapeColorsMessage();\r\n }\r\n importControllersData(importData.controllers);\r\n\r\n history.rememberShapes();\r\n state.loading = false;\r\n };\r\n this.importImage = (imageData) => {\r\n const image = this.generateImage(imageData.image);\r\n const importedMovableImage = this.addImage(\r\n image,\r\n imageData.size.width,\r\n imageData.size.height,\r\n imageData.attachedTo,\r\n imageData.attachedTo ? imageData.attachedTo.getParent() : null,\r\n imageData.type,\r\n imageData.subtype,\r\n null,\r\n null,\r\n imageData.part,\r\n imageData.id,\r\n imageData.priority,\r\n imageData.featureId\r\n );\r\n // _img.pos.x = imageData.pos.x;\r\n // _img.pos.y = imageData.pos.y;\r\n importedMovableImage.importData(imageData); //import object here\r\n\r\n return importedMovableImage\r\n }\r\n this.generateImage = (imageData) => {\r\n let image = new Image();\r\n for (const imageProperty in imageData) {\r\n if (imageData.hasOwnProperty(imageProperty)) {\r\n image[imageProperty] = imageData[imageProperty];\r\n }\r\n }\r\n return image\r\n };\r\n this.importShape = (shapeData) => {\r\n let shape = new Shape();\r\n shape.import(shapeData);\r\n shapes.push(shape);\r\n\r\n return shape\r\n }\r\n this.showChangeShapeColorsMessage = () => {\r\n const {sqftMenuState} = store.getState();\r\n const {isShapeFeatureMissing, shapeIdsWithMissingFeature} = sqftMenuState;\r\n if (isShapeFeatureMissing) {\r\n store.dispatch(setSQFTPopup(\r\n {\r\n title: this.intl.formatMessage({id: \"sqft.popup.title.systemMessage\"}),\r\n content: this.intl.formatMessage({id: \"sqft.popup.system.shapeFeaturesWasFailed\"}),\r\n isOpened: true,\r\n confirmCallback: () => {\r\n this.removeShapeWithIds(shapeIdsWithMissingFeature);\r\n store.dispatch(setShapeIdsWithMissingFeature([]));\r\n store.dispatch(setShouldShowChangeShapeFeatureMissingMessage(false));\r\n closeSQFTPopup();\r\n },\r\n confirmText: this.intl.formatMessage({id: \"sqft.popup.button.yes\"}),\r\n cancelCallback: () => {\r\n store.dispatch(setShapeIdsWithMissingFeature([]));\r\n store.dispatch(setShouldShowChangeShapeFeatureMissingMessage(false));\r\n closeSQFTPopup();\r\n },\r\n cancelText: this.intl.formatMessage({id: \"sqft.popup.button.no\"}),\r\n }\r\n ));\r\n }\r\n }\r\n this.getPointProperty = (property) => {\r\n let arcLengths = [];\r\n for (let i = 0; i < shapes.length; i++) {\r\n let shape = shapes[i];\r\n if (shape.getLines) {\r\n let lines = shape.getLines();\r\n for (let n = 0; n < lines.length; n++) {\r\n let point = lines[n].from;\r\n if (point[property] > 0) {\r\n arcLengths.push({\r\n id: point.id,\r\n value: point[property],\r\n featureId: point.featureId,\r\n qtCatName: getQtCatName()\r\n });\r\n }\r\n }\r\n }\r\n }\r\n return arcLengths;\r\n };\r\n this.getSink = function() {\r\n var sinks = [];\r\n for(var i = 0; i < shapes.length; i++) {\r\n var shape = shapes[i];\r\n if(shape.getAttachedTo && !shape.getAttachedTo()) { //sink not edging\r\n var img = shape.getImage();\r\n var sinkId = img.dataset.id;\r\n if(sinkId) {\r\n var bExists = false;\r\n for(var n = 0; n < sinks.length; n++) {\r\n if(sinks[n].id === sinkId) {\r\n sinks[n].qty++;\r\n bExists = true;\r\n break;\r\n }\r\n }\r\n if(!bExists) {\r\n sinks.push({\r\n sink: img,\r\n name: img.dataset.name,\r\n id: sinkId,\r\n qty: 1\r\n });\r\n }\r\n }\r\n }\r\n }\r\n return sinks;\r\n };\r\n /**\r\n * get all bumpouts\r\n */\r\n this.getBumpouts = () => {\r\n return shapes\r\n .filter(shape => shape.getLines)\r\n .flatMap(shape =>\r\n shape.getLines()\r\n .filter(line => line.isWithBumpout && line.isWithBumpout())\r\n .map(line => {\r\n const area = config.measureUnit === \"Metric\"\r\n ? line.bumpoutOverlay.getBumpoutTotalArea().millimeters\r\n : line.bumpoutOverlay.getBumpoutTotalArea().inches;\r\n const featureObjectDTO = new FeatureObjectDTO(line.bumpoutOverlay.id, FEATUREGROUP_PART_ID.specialty_cut_and_designs, line.bumpoutOverlay.featureId);\r\n featureObjectDTO.addBumpoutArea(area)\r\n\r\n return featureObjectDTO;\r\n })\r\n );\r\n };\r\n\r\n this.getLines = () => {\r\n let allLines = [];\r\n for (let i = 0; i < shapes.length; i++) {\r\n let shape = shapes[i];\r\n if (shape.getLines && shape instanceof sqftShape) {\r\n allLines = allLines.concat(shape.getLines());\r\n }\r\n }\r\n\r\n return allLines;\r\n };\r\n\r\n this.getLineCorners = () => {\r\n let allLineCorners = [];\r\n for (let i = 0; i < shapes.length; i++) {\r\n let shape = shapes[i];\r\n if (shape.getLineCorners) {\r\n allLineCorners = allLineCorners.concat(shape.getLineCorners());\r\n }\r\n }\r\n\r\n return allLineCorners;\r\n };\r\n\r\n this.getLinesAndLineCorners = () => {\r\n return this.getLines().concat(this.getLineCorners())\r\n }\r\n\r\n this.getLineById = (id) => {\r\n let allLines = this.getLines();\r\n\r\n return allLines.find((line) => line.id === id);\r\n };\r\n\r\n this.getLineCornerById = (id) => {\r\n let allLines = this.getLines();\r\n const line = allLines.find((line) => line.lineCorner !== undefined && line.lineCorner.id === id);\r\n\r\n if (line !== undefined) {\r\n return line.lineCorner\r\n }\r\n };\r\n\r\n this.getLineOrCornerLineById = (id) => {\r\n let lineSegment = this.getLineById(id)\r\n if (lineSegment) {\r\n return lineSegment\r\n }\r\n return this.getLineCornerById(id)\r\n };\r\n\r\n this.getMiteredSections = function() {\r\n // let mitered = [];\r\n // for(let i = 0; i < shapes.length; i++) {\r\n // let shape = shapes[i];\r\n // if(shape.getLines) {\r\n // let lines = shape.getLines();\r\n // for(let n = 0; n < lines.length; n++) {\r\n // if(lines[n].isWithMitered()) {\r\n // mitered.push(lines[n].miteredOverlay);\r\n // }\r\n // }\r\n // }\r\n // }\r\n const reduxState = store.getState();\r\n\r\n return reduxState.sqftMiteredState.miteredSections;\r\n };\r\n\r\n /**\r\n * @deprecated use features from redux store\r\n */\r\n this.getShapeType = (type) => {\r\n let addedEdges = [];\r\n let edgeName;\r\n let isImageShapeType;\r\n let isLabelShapeType;\r\n let backsplashLength = 0;\r\n let area = 0;\r\n let length = 0;\r\n let realLength = 0;\r\n let lineLength = 0;\r\n let unit = null;\r\n const storedShapes = this.getShapes().filter(shp => {\r\n return !SHAPE_PART_IDS_VISIBLE_ONLY_IN_THE_SLAB_MODE.includes(shp.partId)\r\n });\r\n const state = store.getState();\r\n const fabricatorData = state.fabricatorState;\r\n\r\n for (let i = 0; i < storedShapes.length; i++) {\r\n const shape = storedShapes[i];\r\n isImageShapeType = shape.type && shape.type.includes(type);\r\n isLabelShapeType = shape instanceof sqftShape && shape.partId.includes(type);\r\n if (isImageShapeType && !isLabelShapeType) {\r\n const attachedTo = shape.attachedToId\r\n ? this.getLineOrCornerLineById(shape.attachedToId)\r\n : shape.historyProps\r\n ? shape.historyProps.attachedTo\r\n : null; //old quotes support can be removed in future\r\n\r\n let featureId = +shape.featureId;\r\n length = 0;\r\n area = 0;\r\n\r\n if (type === \"backsplash\") {\r\n length = attachedTo ? getBacksplashArea(attachedTo.getBacksplashHeight(), attachedTo) : 0;\r\n backsplashLength = attachedTo ? getBacksplashLength(attachedTo) : 0;\r\n } else if (type === \"wall\") {\r\n length = realLength = getEdgeLength(attachedTo);\r\n } else {\r\n const navItems = getEdgeFeatures();\r\n let edge = navItems.find(edge => edge.part.dbFeature.id === featureId);\r\n if (edge && edge.part) {\r\n let edgeFeature = edge.part.dbFeature;\r\n unit = edgeFeature ? edgeFeature.unit : null;\r\n }\r\n // count only one length for \"each\" units\r\n length = (unit ? unit.toLowerCase() : null) === \"each\" ? 1 : getEdgeLength(attachedTo);\r\n realLength = getEdgeLength(attachedTo);\r\n lineLength = config.measureUnit === \"Imperial\" ? attachedTo.getLineLength() : attachedTo.getLineLengthMm();\r\n area = getEdgeArea(attachedTo, lineLength, featureId);\r\n }\r\n // export all edges (combine them after adding to cart from popup)\r\n\r\n // for (let n = 0; n < addedEdges.length; n++) {\r\n // if(addedEdges[n].id === edgeId) {\r\n // addedEdges[n].length += length;\r\n // addedEdges[n].realLength += realLength;\r\n // addedEdges[n].area += area;\r\n // addedEdges[n].pieces.push(backsplashLength);\r\n // addedEdges[n].segments += 1;\r\n // //bExists = true;\r\n // break;\r\n // }\r\n // }\r\n //if(!bExists) {\r\n //todo sqft-react translate\r\n //edgeName = TranslatesProvider.translate('transDoc.customDisplayName_FR.' + img.dataset.sharedFeatureName, img.dataset.name);\r\n edgeName = shape.name; //intl.formatMessage({id: edgeFeature.dbFeature.sharedFeatureName}); //img.dataset.name;\r\n\r\n addedEdges.push({\r\n parentId: attachedTo ? attachedTo.getParent().id : null,\r\n partId: attachedTo ? attachedTo.getParent().partId : null,\r\n fromWizardGroupId: attachedTo ? attachedTo.getParent().fromWizardGroupId : \"\",\r\n edge: featureId,//img,\r\n name: edgeName,\r\n id: featureId,\r\n segments: 1,\r\n pieces: [backsplashLength],\r\n length,\r\n realLength,\r\n unit,\r\n area\r\n });\r\n //}\r\n } else if (isLabelShapeType && shape.getTotalInches) {\r\n area = config.measureUnit === \"Imperial\" ? sqInchesToSqFoot(shape.getTotalInches()) : mm2ToM2(shape.getTotalMillimeters());\r\n length = config.measureUnit === \"Imperial\" ? sqInchesToSqFoot(shape.getTotalInches()) : mm2ToM2(shape.getTotalMillimeters());\r\n let featureGroup = getFeatureGroup(shape.partId);\r\n if (featureGroup && featureGroup.part) {\r\n let featureGroupName = getFeatureGroupName(featureGroup.part, this.intl, fabricatorData);\r\n addedEdges.push({\r\n partId: shape.partId,\r\n fromWizardGroupId: shape.fromWizardGroupId,\r\n //edge: img,\r\n name: featureGroupName,\r\n //id: edgeId,\r\n segments: 1,\r\n length,\r\n area\r\n });\r\n }\r\n }\r\n }\r\n if (type === \"edge\") {\r\n for (let n = 0; n < addedEdges.length; n++) {\r\n addedEdges[n].length = config.measureUnit === \"Imperial\" ? addedEdges[n].length : mmToM(addedEdges[n].length);\r\n }\r\n }\r\n\r\n return addedEdges;\r\n };\r\n\r\n this.addImage = function(\r\n image,\r\n width,\r\n height,\r\n attachedTo,\r\n hoverShape,\r\n type,\r\n subType, // appliance type\r\n historyCallBack,\r\n historyPosition,\r\n part = null,\r\n objId = null,\r\n priority = null,\r\n featureId = null,\r\n hide = false,\r\n ) {\r\n let vc = self.getVisibleCenter(),\r\n newImage = new MovableImage(objId ? objId : ++objIds, priority, subType);\r\n\r\n newImage.onHover = self.onShapeHover;\r\n newImage.onInit = self.onShapeReady;\r\n newImage.attachedToShape = hoverShape;\r\n newImage.type = type;\r\n newImage.part = part;\r\n newImage.featureId = featureId;\r\n newImage.init(\r\n historyPosition || {x: vc.x - (width / 2), y: vc.y - (height/2)},\r\n image,\r\n { width: width, height: height},\r\n attachedTo,\r\n hide\r\n );\r\n attachedTo && (attachedTo.attachedShape = newImage);\r\n newImage.historyProps = {\r\n image: image,\r\n width: width,\r\n height: height,\r\n attachedTo: attachedTo,\r\n attachedToParentId: attachedTo\r\n ? attachedTo.getParent ? attachedTo.getParent().id : null\r\n : null,\r\n hoverShape: hoverShape,\r\n type: type,\r\n subType: subType,\r\n part: part,\r\n historyCallBack: historyCallBack,\r\n featureId: featureId\r\n };\r\n shapes.unshift(newImage);\r\n\r\n return newImage;\r\n };\r\n\r\n this.getAttachedTo = function(attachedTo) {\r\n const state = store.getState();\r\n\r\n return state.sqftResourceState.attachedToLine.find(attachedToLine => attachedToLine.attachedToId === attachedTo.id)\r\n };\r\n this.getImagesAttachedTo = function(attachedTo) {\r\n for (var i = 0; i < shapes.length; i++) {\r\n if(shapes[i].getAttachedTo) {\r\n if(shapes[i].getAttachedTo() === attachedTo) {\r\n return shapes[i];\r\n }\r\n }\r\n }\r\n };\r\n this.onShapeReady = function() {\r\n\r\n };\r\n\r\n this.addShape = function(segments, shapeType, historyPosition, partId, fromLayout = null, shapeParams = {}) {\r\n const realPartId = checkShapeForAvailablePartId(partId);\r\n let vc = self.getVisibleCenter(),\r\n mm = sqftShapeManager.getMinMax(segments),\r\n shapeId = ++objIds,\r\n newShape = new Shape(shapeId, shapes.length, shapeType, realPartId, fromLayout, shapeParams),\r\n openedMobileButton = $('.pallet-wrapper--opened');\r\n\r\n newShape.setQtCatName(getQtCatName())\r\n newShape.onHover = self.onShapeHover;\r\n newShape.onInit = self.onShapeReady;\r\n newShape.init(\r\n historyPosition || {x: vc.x - (mm.width/2), y: vc.y - (mm.height/2)}, //position\r\n segments\r\n );\r\n shapes.unshift(newShape);\r\n !nodes.appBody.hasClass('step--shapes--selected') && nodes.appBody.addClass('step--shapes--selected');\r\n (openedMobileButton.length > 0) && openedMobileButton.removeClass('pallet-wrapper--opened');\r\n if (nodes.appBody.hasClass('tutorial--enabled')) {\r\n this.tutorialShape = newShape;\r\n }\r\n newShape.setFeatureId(getShapeFeatureId(realPartId));\r\n\r\n return shapeId\r\n };\r\n\r\n this.removeTutorialShape = function () {\r\n this.tutorialShape && this.removeShape(this.tutorialShape);\r\n };\r\n\r\n this.removeShapeWithIds = (shapeIds) => {\r\n for (let i = shapeIds.length - 1; i >= 0; i--) {\r\n this.removeShapeById(shapeIds[i]);\r\n }\r\n }\r\n\r\n this.removeShapeById = function(id) {\r\n for (let i = shapes.length - 1; i >= 0; i--) {\r\n if (shapes[i] && shapes[i].id === id) {\r\n if (shapes[i] instanceof MovableImage && shapes[i].type === MOVABLE_IMAGE_TYPES.slabImage) {\r\n this.removeSlabImage(shapes[i]);\r\n } else {\r\n this.removeShape(shapes[i])\r\n }\r\n }\r\n }\r\n };\r\n\r\n this.removeSlabImage = (movableImage) => {\r\n const reduxState = store.getState();\r\n const croppedSlabImages = reduxState.sqftSlabState.croppedSlabImages || [];\r\n\r\n if (!Array.isArray(croppedSlabImages)) {\r\n console.error('croppedSlabImages is not a valid array');\r\n return;\r\n }\r\n\r\n store.dispatch(deleteCroppedSlabImage(movableImage.id));\r\n this.removeShape(movableImage);\r\n\r\n if (croppedSlabImages.length === 0) {\r\n slabWorkspace.deregisterEvents();\r\n }\r\n };\r\n\r\n this.getShapeById = (id) => {\r\n const combinedShapes = this.getShapes();\r\n for (let i = combinedShapes.length - 1; i >= 0; i--) {\r\n if (combinedShapes[i].id === id) {\r\n return combinedShapes[i]\r\n }\r\n }\r\n\r\n return null\r\n };\r\n\r\n this.removeShape = (shape) => {\r\n console.log(\"----- remove shape-----\");\r\n console.log(\"shapes\", shapes.map(shp => shp.id));\r\n console.log(\"shape.id\", shape.id);\r\n\r\n // Copy shapes array for the safe iteration\r\n const shapesCopy = [...shapes];\r\n\r\n // Iterate a copy of the shapes array from end to beginning\r\n for (let i = shapesCopy.length - 1; i >= 0; i--) {\r\n const currentShape = shapesCopy[i];\r\n\r\n if (currentShape && currentShape.id === shape.id) {\r\n\r\n if (currentShape.shapeType in SHAPE_TYPE) {\r\n currentShape.getLines().forEach((line) => {\r\n if (line.overlay) {\r\n line.overlay.destroy();\r\n }\r\n line.deleteAttachedItem ? line.deleteAttachedItem() : void null;\r\n line.to.removeAttachedItem ? line.to.removeAttachedItem() : void null;\r\n });\r\n }\r\n\r\n if (currentShape) {\r\n currentShape.destroy();\r\n\r\n // Find current shape index in the original array and delete it\r\n const originalIndex = shapes.indexOf(currentShape);\r\n console.log(\"originalIndex\", originalIndex);\r\n if (originalIndex !== -1) {\r\n shapes.splice(originalIndex, 1);\r\n }\r\n console.log(\"shapes after splice\", shapes);\r\n }\r\n }\r\n }\r\n\r\n if (shape.removeShapePieces) {\r\n shape.removeShapePieces();\r\n }\r\n\r\n slabWorkspace.slabAdditionalShapes.removeShapeFromList(shape);\r\n\r\n const reduxState = store.getState();\r\n const updateCalculations = reduxState.sqftState.updateCalculations;\r\n store.dispatch(updateSQFTCalculations(updateCalculations + 1));\r\n };\r\n\r\n\r\n this.updateRemovedFeatures = (shape) => {\r\n if (shape.partId === SHAPE_PART_ID.slabPlaceHolder\r\n || shape.type === MOVABLE_IMAGE_TYPES.slabImage\r\n ) {\r\n workspaceControllers.removedFeatures.addResource(shape.id);\r\n }\r\n };\r\n\r\n this.removeAllShapes = function() {\r\n for (let i = shapes.length - 1; i >= 0; i--) {\r\n if (shapes[i]) {\r\n self.removeShape(shapes[i])\r\n }\r\n }\r\n // todo sqft react: lineLength are not equal when going back to sqft\r\n //_.isEqual(sqftEventManager.activeEvents[\"render\"][11].sender, shapes[i].getLines()[3].overlay)\r\n };\r\n this.removeFeatureBySQFTId = (sqftId) => {\r\n //console.log(\"sqftId to remove\", sqftId);\r\n this.removeShapeById(sqftId);\r\n sqftResourcesManager.deleteAttachedItemById(sqftId);\r\n\r\n // sqftImageManager.removeAllSlabImages();\r\n // sqftSlabManager.removeAllSlabBacksplashes();\r\n // sqftResourcesManager.deleteAllResources();\r\n // sqftResourcesManager.deleteAllMiteredSections();\r\n // sqftSlabManager.deleteShapeOffset();\r\n };\r\n this.removeAllBumpouts = function() {\r\n for (let i = shapes.length - 1; i >= 0; i--) {\r\n if (shapes[i] && shapes[i].removeBumpouts) {\r\n shapes[i].removeBumpouts()\r\n }\r\n }\r\n };\r\n this.removeAllSlabImages = () => {\r\n for (let i = shapes.length - 1; i >= 0; i--) {\r\n if (shapes[i] instanceof MovableImage && shapes[i].type === 'slabImage') {\r\n self.removeShape(shapes[i].destroy())\r\n }\r\n }\r\n store.dispatch(setSqftCroppedSlabImages([]));\r\n };\r\n\r\n this.onShapeHover = function() {\r\n };\r\n this.setIntl = (intl) => {\r\n this.intl = intl\r\n };\r\n\r\n this.init = ($canvas = null, intl = null) => {\r\n //set global configuration\r\n this.isInitialized = true;\r\n this.name = config.workspace.name;\r\n setCanvas($canvas);\r\n if (intl) {\r\n this.intl = intl\r\n }\r\n //initialize workspace canvas such that 0x 0y is in the center\r\n pos.x = parseInt(0 - (canvas.width() / 2));\r\n pos.y = parseInt(0 - (canvas.height() / 2));\r\n //connect events\r\n EventManager.init(canvas[0]);\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_MOVE,\r\n onMouseMove,\r\n self,\r\n EventManager.priorities.WORKSPACE\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_DOWN,\r\n onMouseDown,\r\n self,\r\n EventManager.priorities.WORKSPACE\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_UP,\r\n onMouseUp,\r\n self,\r\n EventManager.priorities.WORKSPACE\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.RENDER,\r\n self.render,\r\n self,\r\n EventManager.priorities.WORKSPACE\r\n );\r\n\r\n WorkspaceEvents.init();\r\n RulerOverlay.init();\r\n if (isSFTCabinetsGroup()) {\r\n cabinetWorkspace.initCabinetEvents();\r\n }\r\n };\r\n\r\n this.render = (ctx) => {\r\n this.renderGrid(ctx);\r\n Object.values(workspaceControllers).forEach(workspaceController => {\r\n if (workspaceController.render) {\r\n workspaceController.render();\r\n }\r\n });\r\n };\r\n\r\n this.renderGrid = (ctx) => {\r\n let i;\r\n var scale = config.scale;\r\n var gridSize = config.workspace.gridSize * scale;\r\n var start = {\r\n x: ((pos.x % gridSize) * -1),\r\n y: ((pos.y % gridSize) * -1)\r\n };\r\n var canvasWidth = canvas[0].width;\r\n var canvasHeight = canvas[0].height;\r\n var center = self.getCenter();\r\n var scaledGrid = gridSize / Math.round(config.workspace.gridSize / config.workspace.getScaledGridSize());\r\n //render grid background\r\n ctx.lineWidth = 1;\r\n ctx.clearRect(0, 0, canvasWidth, canvasHeight);\r\n // rendering cells\r\n if(scale > 1) {\r\n ctx.beginPath();\r\n for(i = start.x % scaledGrid; i < canvasWidth; i+= scaledGrid) {\r\n ctx.moveTo(i, 0);\r\n ctx.lineTo(i, canvasHeight);\r\n }\r\n for(i = start.y % scaledGrid; i < canvasHeight; i+= scaledGrid) {\r\n ctx.moveTo(0, i);\r\n ctx.lineTo(canvasWidth, i);\r\n }\r\n ctx.strokeStyle = \"#EEEEEE\";\r\n ctx.stroke();\r\n }\r\n //render 12inch grid\r\n ctx.beginPath();\r\n for(i = start.x; i < canvasWidth; i+=gridSize) {\r\n ctx.moveTo(i, 0);\r\n ctx.lineTo(i, canvasHeight);\r\n }\r\n for(i = start.y; i < canvasHeight; i+= gridSize) {\r\n ctx.moveTo(0, i);\r\n ctx.lineTo(canvasWidth, i);\r\n }\r\n ctx.strokeStyle = '#DDDDDD';\r\n ctx.stroke();\r\n //render center lines\r\n ctx.beginPath();\r\n ctx.moveTo(center.x, 0);\r\n ctx.lineTo(center.x, canvasHeight);\r\n ctx.moveTo(0, center.y);\r\n ctx.lineTo(canvasWidth, center.y);\r\n ctx.strokeStyle = '#BBBBBB';\r\n ctx.stroke();\r\n };\r\n};\r\n\r\nexport default new workspace\r\n","//********* NAVIGATION *********//\r\nimport * as types from \"./actionTypes\";\r\nimport {setTrumbleInventoryForFeatures} from \"../api/look-api\";\r\n\r\nexport const setLookOpened = (lookOpened = false) => {\r\n return (dispatch, getState) => {\r\n const store = getState();\r\n const {isMobile} = store.serverState;\r\n dispatch({\r\n type: types.SET_LOOK_OPENED,\r\n payload: {lookOpened, isMobile}\r\n });\r\n }\r\n};\r\n\r\nexport const setLookExpanded = (lookExpanded = false) => ({\r\n type: types.SET_LOOK_OPENED,\r\n payload: {lookExpanded}\r\n});\r\n\r\nexport const setLookParentKeys = (lookParentKeys = []) => ({\r\n type: types.SET_LOOK_PARENT_KEYS,\r\n payload: {lookParentKeys}\r\n});\r\n\r\nexport const setLookViewType = (lookViewType = 1) => ({\r\n type: types.SET_LOOK_VIEW_TYPE,\r\n payload: {lookViewType}\r\n});\r\n\r\nexport const setWishlistPopupOpened = (wishlistPopupOpened = false) => ({\r\n type: types.SET_WISHLIST_POPUP_OPENED,\r\n payload: {wishlistPopupOpened}\r\n});\r\n\r\nexport const setSidebarModalOpened = (sidebarModalOpened = false) => ({\r\n type: types.SET_SIDEBAR_MODAL_OPENED,\r\n payload: {sidebarModalOpened}\r\n});\r\n\r\nexport const setLookActiveFeature = (newLookActiveFeature = null, lookActiveFeaturePositionInList = null) => {\r\n return (dispatch, getState) => {\r\n const store = getState();\r\n const {isMobile} = store.serverState;\r\n dispatch({\r\n type: types.SET_LOOK_ACTIVE_FEATURE,\r\n payload: {lookActiveFeature: newLookActiveFeature, lookActiveFeaturePositionInList, isMobile}\r\n });\r\n\r\n const {settings} = store.fabricatorState;\r\n if (newLookActiveFeature && settings.useTrumbleApi && !newLookActiveFeature.quantityOptions) {\r\n setTrumbleInventoryForFeatures([newLookActiveFeature]).then(() => {\r\n dispatch({\r\n type: types.UPDATE_LOOK_ACTIVE_FEATURE_STOCK_COUNT,\r\n });\r\n })\r\n }\r\n }\r\n};\r\n\r\nexport const setLookActiveCategory = (lookActiveCategory = \"\") => {\r\n return (dispatch, getState) => {\r\n const store = getState();\r\n const {isMobile} = store.serverState;\r\n dispatch({\r\n type: types.SET_LOOK_ACTIVE_CATEGORY,\r\n payload: {lookActiveCategory, isMobile}\r\n });\r\n }\r\n};\r\n\r\nexport const setLookMoreInfoOpened = (moreInfoOpened = \"\", moreInfoContent = \"\") => ({\r\n type: types.SET_LOOK_MORE_INFO_OPENED,\r\n payload: {moreInfoOpened, moreInfoContent}\r\n});\r\n\r\nexport const setLookPageOpened = (lookPageOpened) => ({\r\n type: types.SET_LOOK_PAGE_OPENED,\r\n payload: {lookPageOpened}\r\n});\r\n\r\nexport const setLookOverlayOpened = (lookOverlayOpened, lookOverlayAction = \"\") => ({\r\n type: types.SET_LOOK_OVERLAY_OPENED,\r\n payload: {lookOverlayOpened, lookOverlayAction}\r\n});\r\n\r\nexport const setLookViewChangeOptions = (lookViewChangeOptions) => ({\r\n type: types.SET_LOOK_VIEW_CHANGE_OPTIONS,\r\n payload: {lookViewChangeOptions}\r\n});\r\n\r\nexport const setLookStylePopup = (lookStylePopup) => ({\r\n type: types.SET_LOOK_STYLE_POPUP,\r\n payload: {lookStylePopup}\r\n});\r\n\r\nexport const setLookRemovePopup = (lookRemovePopup) => ({\r\n type: types.SET_LOOK_REMOVE_POPUP,\r\n payload: {lookRemovePopup}\r\n});\r\n\r\nexport const setLookIntroStep = (introStep) => ({\r\n type: types.SET_LOOK_INTRO_STEP,\r\n payload: {introStep}\r\n});\r\n\r\nexport const setLookIntroHidden = (introHidden) => ({\r\n type: types.SET_LOOK_INTRO_HIDDEN,\r\n payload: {introHidden}\r\n});\r\n\r\nexport const setLookContextMenu = (contextMenu) => ({\r\n type: types.SET_LOOK_CONTEXT_MENU,\r\n payload: {contextMenu}\r\n});\r\n\r\nexport const setLookWallsApplyTo = (lookWallsApplyTo) => ({\r\n type: types.SET_LOOK_WALLS_APPLY_TO,\r\n payload: {lookWallsApplyTo}\r\n});\r\n\r\nexport const setLookAllWallsOpened = (lookAllWallsOpened) => ({\r\n type: types.SET_LOOK_ALL_WALLS_OPENED,\r\n payload: {lookAllWallsOpened}\r\n});\r\n\r\nexport const setLookReturnAction = (lookReturnAction) => ({\r\n type: types.SET_LOOK_RETURN_ACTION,\r\n payload: {lookReturnAction}\r\n});\r\n\r\nexport const setLookDemoPointsClicked = (lookDemoPointsClicked) => ({\r\n type: types.SET_LOOK_DEMO_POINTS_CLICKED,\r\n payload: {lookDemoPointsClicked}\r\n});\r\n\r\nexport const updateNavigationCount = () => ({\r\n type: types.UPDATE_LOOK_NAVIGATION_COUNT,\r\n});\r\n\r\n// export const updateFeatureGroupCount = () => ({\r\n// type: types.UPDATE_LOOK_FEATURE_GROUP_COUNT,\r\n// });\r\n\r\nexport const setLookCompatabilityAlert = (lookCompatabilityAlert) => ({\r\n type: types.SET_LOOK_COMPATABILITY_ALERT,\r\n payload: {lookCompatabilityAlert}\r\n});\r\n\r\nexport const setLookRestoreState = (lookRestoreState) => ({\r\n type: types.SET_LOOK_RESTORE_STATE,\r\n payload: {lookRestoreState}\r\n});\r\n\r\nexport const setLookLockedTutorial = (lookLockedTutorial) => ({\r\n type: types.SET_LOOK_LOCK_TUTORIAL,\r\n payload: {lookLockedTutorial}\r\n});\r\n\r\nexport const setLookAllWallsTutorial = (lookAllWallsTutorial) => ({\r\n type: types.SET_LOOK_ALL_WALLS_TUTORIAL,\r\n payload: {lookAllWallsTutorial}\r\n});\r\n","// STEPS\r\nexport const SET_STEP = 'SET_STEP';\r\nexport const SET_STEP_SWITCHING = 'SET_STEP_SWITCHING';\r\n\r\n// SELECTION(MATERIALS PAGE)\r\nexport const SET_DEFAULT_SELECTION_GROUP = 'SET_DEFAULT_SELECTION_GROUP';\r\nexport const TOGGLE_SELECTION_WINDOW = 'TOGGLE_SELECTION_WINDOW';\r\nexport const SET_SELECTION_WINDOW_VIEW = 'SET_SELECTION_WINDOW_VIEW';\r\nexport const TOGGLE_SELECTION_INFO = 'TOGGLE_SELECTION_INFO';\r\nexport const UPDATE_FEATURE_INFO_COUNT = 'UPDATE_FEATURE_INFO_COUNT';\r\nexport const SET_VANITY_TYPE = 'SET_VANITY_TYPE';\r\nexport const SET_SHOWER_TYPE = 'SET_SHOWER_TYPE';\r\nexport const CHANGE_SELECTION_INFO_QUANTITY = 'CHANGE_SELECTION_INFO_QUANTITY';\r\nexport const TOGGLE_PULSE_FEATURE_INFO_QUANTITY = 'TOGGLE_PULSE_FEATURE_INFO_QUANTITY';\r\nexport const CHANGE_MATERIALS_INFO_FEATURE_MODULES = 'CHANGE_MATERIALS_INFO_FEATURE_MODULES';\r\nexport const CHANGE_SELECTION_ACTIVE_PART_RELATED_INDEX = 'CHANGE_SELECTION_ACTIVE_PART_RELATED_INDEX';\r\nexport const SET_ACTIVE_FEATURE = 'SET_ACTIVE_FEATURE';\r\nexport const SET_RELATED_GROUPS = 'SET_RELATED_GROUPS';\r\nexport const SET_RELATED_GROUPS_SEARCH = 'SET_RELATED_GROUPS_SEARCH';\r\nexport const TOGGLE_SHOW_DESCRIPTION_COVER = 'TOGGLE_SHOW_DESCRIPTION_COVER';\r\nexport const TOGGLE_GALLERY_VISIBLE = 'TOGGLE_GALLERY_VISIBLE';\r\nexport const SET_GALLERY_ACTIVE_IMAGE_INDEX = 'SET_GALLERY_ACTIVE_IMAGE_INDEX';\r\nexport const SET_MATERIALS_PAGE_SUB_STEPS = 'SET_MATERIALS_PAGE_SUB_STEPS';\r\nexport const SET_MATERIALS_PAGE_ACTIVE_SUB_STEP = 'SET_MATERIALS_PAGE_ACTIVE_SUB_STEP';\r\nexport const TOGGLE_NOT_COMPATIBLE_VIEW = 'TOGGLE_NOT_COMPATIBLE_VIEW';\r\nexport const TOGGLE_PRODUCT_NOTE_EDITOR_VISIBLE = 'TOGGLE_PRODUCT_NOTE_EDITOR_VISIBLE';\r\nexport const SET_ROW_ITEMS = 'SET_ROW_ITEMS';\r\nexport const SET_MATERIALS_PAGE_CANVAS_CLASS = 'SET_MATERIALS_PAGE_CANVAS_CLASS';\r\n\r\n// SERVER COMMANDS\r\nexport const SET_LAYOUT_DATA_PARTS = 'SET_LAYOUT_DATA_PARTS';\r\nexport const SET_JAVASCRIPT_ERRORS = 'SET_JAVASCRIPT_ERRORS';\r\nexport const SET_WINDOW_WIDTH = 'SET_WINDOW_WIDTH';\r\nexport const SET_WINDOW_HEIGHT = 'SET_WINDOW_HEIGHT';\r\nexport const SET_JOB_ID = 'SET_JOB_ID';\r\nexport const SET_FABRICATOR_DATA = 'SET_FABRICATOR_DATA';\r\nexport const SET_FABRICATOR_TAXES = 'SET_FABRICATOR_TAXES';\r\nexport const UPDATE_FABRICATOR_SETTINGS = 'UPDATE_FABRICATOR_SETTINGS';\r\nexport const TOGGLE_HIDE_ITEMS_PRICES = 'TOGGLE_HIDE_ITEMS_PRICES';\r\nexport const TOGGLE_USE_FABRICATOR_COST_PRICES = 'TOGGLE_USE_FABRICATOR_COST_PRICES';\r\nexport const SET_STONE_PRICING = 'SET_STONE_PRICING';\r\nexport const ADD_VISUALIZERS_LOADED = 'ADD_VISUALIZERS_LOADED';\r\nexport const SET_COOKIE_ACCEPTED = 'SET_COOKIE_ACCEPTED';\r\nexport const SHOW_SUCCESS_NOTIFICATION = 'SHOW_SUCCESS_NOTIFICATION';\r\nexport const SET_LANGUAGE = 'SET_LANGUAGE';\r\nexport const SET_ACTIVE_THEME = 'SET_ACTIVE_THEME';\r\nexport const SET_NETWORK_CONNECTION = 'SET_NETWORK_CONNECTION';\r\nexport const SET_INITIAL_VISUALIZER_TYPE = 'SET_INITIAL_VISUALIZER_TYPE';\r\n\r\n// QUOTINGTOOL CATEGORIES\r\nexport const SET_QT_CATEGORIES_REQUESTED = 'SET_QT_CATEGORIES_REQUESTED';\r\nexport const SET_QT_CATEGORIES_LOADED = 'SET_QT_CATEGORIES_LOADED';\r\nexport const SET_QT_ACTIVE_CATEGORY = 'SET_QT_ACTIVE_CATEGORY';\r\n\r\n// BATHROOM VISUALIZER COMMANDS\r\nexport const TOGGLE_BATHROOM_VISUALIZER_OPEN = 'TOGGLE_BATHROOM_VISUALIZER_OPEN';\r\nexport const SET_BATHROOM_VISUALIZER_VISITED = 'SET_BATHROOM_VISUALIZER_VISITED';\r\nexport const SET_BV_CANVAS_ID = 'SET_BV_CANVAS_ID';\r\nexport const SET_BV_FEATURES = 'SET_BV_FEATURES';\r\nexport const SET_BV_PRESETS = 'SET_BV_PRESETS';\r\nexport const SET_ACTIVE_PRESET = 'SET_ACTIVE_PRESET';\r\nexport const TOGGLE_SHOW_RESTORE_POPUP = 'TOGGLE_SHOW_RESTORE_POPUP';\r\nexport const SET_CANVAS_DIMENSIONS = 'SET_CANVAS_DIMENSIONS';\r\nexport const SET_STATIC_CANVAS_IMAGE = 'SET_STATIC_CANVAS_IMAGE';\r\nexport const SET_CANVAS_SCALE = 'SET_CANVAS_SCALE';\r\nexport const UPDATE_CANVAS_COUNT = 'UPDATE_CANVAS_COUNT';\r\nexport const SET_PRESET_WAS_CHANGED_BY_USER = 'SET_PRESET_WAS_CHANGED_BY_USER';\r\nexport const SET_FIRST_LOADED_PRESET = 'SET_FIRST_LOADED_PRESET';\r\nexport const SET_LOADED_PRESETS = 'SET_LOADED_PRESETS';\r\n\r\n// LOADER\r\nexport const TOGGLE_LOADER = 'TOGGLE_LOADER';\r\nexport const SET_MULTI_LOADER = 'SET_MULTI_LOADER';\r\n\r\n// APPLY POPUP\r\nexport const TOGGLE_APPLY_POPUP = 'TOGGLE_APPLY_POPUP';\r\n// CONFIRM POPUP\r\nexport const TOGGLE_CONFIRM_POPUP = 'TOGGLE_CONFIRM_POPUP';\r\n\r\n// USER COMMANDS\r\nexport const TOGGLE_USER_POPUP = 'TOGGLE_USER_POPUP';\r\nexport const CHANGE_USER_INFO = 'CHANGE_USER_INFO';\r\nexport const CHANGE_USER_INFO_ERRORS = 'CHANGE_USER_INFO_ERRORS';\r\nexport const SET_EMPLOYEES_LIST = 'SET_EMPLOYEES_LIST';\r\nexport const TOGGLE_ADDITIONAL_FIELDS = 'TOGGLE_ADDITIONAL_FIELDS';\r\nexport const SET_USER_PHONE_NUMBER_VALIDATED = 'SET_USER_PHONE_NUMBER_VALIDATED';\r\nexport const RESTORE_USER_STATE = 'RESTORE_USER_STATE';\r\nexport const SET_ALREADY_REGISTERED_USER = 'SET_ALREADY_REGISTERED_USER';\r\nexport const SET_LEAD_CAPTURE_CLICK_COUNT = 'SET_LEAD_CAPTURE_CLICK_COUNT';\r\nexport const SET_USER_POPUP_CONTENT = 'SET_USER_POPUP_CONTENT';\r\nexport const SET_USER_TWO_FA = 'SET_USER_TWO_FA';\r\nexport const SET_USER_OPT_IN = 'SET_USER_OPT_IN';\r\n\r\n// CART COMMANDS\r\nexport const ADD_TO_CART = 'ADD_TO_CART';\r\nexport const ADD_DISPLAY_LOGIC_CART_ITEM = 'ADD_DISPLAY_LOGIC_CART_ITEM';\r\nexport const REMOVE_FROM_CART = 'REMOVE_FROM_CART';\r\nexport const REMOVE_INSTALLATION_SERVICE_FROM_CART = 'REMOVE_INSTALLATION_SERVICE_FROM_CART';\r\nexport const CHANGE_CART_QUANTITY = 'CHANGE_CART_QUANTITY';\r\nexport const CHANGE_CART_FEATURE = 'CHANGE_CART_FEATURE';\r\nexport const CLICK_QUESTION_NO = 'CLICK_QUESTION_NO';\r\nexport const CAME_FROM_PAGE = 'CAME_FROM_PAGE';\r\nexport const CLEAR_CART = 'CLEAR_CART';\r\nexport const RESTORE_CART = 'RESTORE_CART';\r\nexport const ADD_TO_RECENTLY_VIEWED = 'ADD_TO_RECENTLY_VIEWED';\r\nexport const SHOW_CHECKOUT_POPUP = 'SHOW_CHECKOUT_POPUP';\r\nexport const SUBMIT_PAYMENT = 'SUBMIT_PAYMENT';\r\nexport const SUBMIT_PAYMENT_RESPONSE = 'SUBMIT_PAYMENT_RESPONSE';\r\nexport const SHOW_ORDER_COMPLETE_POPUP = 'SHOW_ORDER_COMPLETE_POPUP';\r\nexport const TOGGLE_SHOW_MOBILE_QUOTES = 'TOGGLE_SHOW_MOBILE_QUOTES';\r\nexport const TOGGLE_SHOW_ALL_QUOTES_CART_ITEMS_LIST = 'TOGGLE_SHOW_ALL_QUOTES_CART_ITEMS_LIST';\r\nexport const SET_AGREE_EMAIL_CHECKBOX = 'SET_AGREE_EMAIL_CHECKBOX';\r\nexport const SET_CART_FOOTER_ACTIVE_BUTTON_INDEX = 'SET_CART_FOOTER_ACTIVE_BUTTON_INDEX';\r\nexport const SET_CART_ITEM_EDIT_FEATURE = 'SET_CART_ITEM_EDIT_FEATURE';\r\nexport const SET_LOOK_REMOVED_CART_ITEMS = 'SET_LOOK_REMOVED_CART_ITEMS';\r\nexport const SET_AMAZON_IMAGE_URL = 'SET_AMAZON_IMAGE_URL';\r\nexport const SET_CART_ITEMS_ADDED_TO_PARENT_CART = 'SET_CART_ITEMS_ADDED_TO_PARENT_CART';\r\nexport const CHANGE_ALL_CART_ITEMS = 'CHANGE_ALL_CART_ITEMS';\r\nexport const SET_SURE_TAX = 'SET_SURE_TAX';\r\nexport const SET_SURE_TAX_LOADING = 'SET_SURE_TAX_LOADING';\r\nexport const SET_MANUAL_TAX = 'SET_MANUAL_TAX';\r\n\r\nexport const SET_MARK_UP_LOGIC = 'SET_MARK_UP_LOGIC';\r\nexport const SET_DELIVERY_LIST = 'SET_DELIVERY_LIST';\r\nexport const SET_ALL_FEATURES_LOADED = 'SET_ALL_FEATURES_LOADED';\r\nexport const SET_ALLOW_ROUTING = 'SET_ALLOW_ROUTING';\r\nexport const SET_ALLOW_MAIN_LOADING = 'SET_ALLOW_MAIN_LOADING';\r\nexport const SET_ACTION_AFTER_VISUALIZER_TYPE_CHANGED = 'SET_ACTION_AFTER_VISUALIZER_TYPE_CHANGED';\r\nexport const SET_VISUALIZER_TYPE_CHANGING = 'SET_VISUALIZER_TYPE_CHANGING';\r\n\r\n// INSTALLATION COMMANDS\r\nexport const TOGGLE_INST_OPENED = 'TOGGLE_INST_OPENED';\r\nexport const SET_INST_LIST = 'SET_INST_LIST';\r\nexport const SET_DEFAULT_INST_LIST = 'SET_DEFAULT_INST_LIST';\r\n\r\n// QUOTE STATE\r\nexport const SET_STATE_TO_QUOTE = \"SET_STATE_TO_QUOTE\";\r\n\r\n// PRICE WORKSHEET\r\nexport const TOGGLE_PRICE_WORKSHEET_OPENED = 'TOGGLE_PRICE_WORKSHEET_OPENED';\r\nexport const SET_DISCOUNT_SECTIONS = 'SET_DISCOUNT_SECTIONS';\r\nexport const SET_CUSTOM_ADDED_DISCOUNTS = 'SET_CUSTOM_ADDED_DISCOUNTS';\r\nexport const SET_FINANCE_PERCENTAGE = 'SET_FINANCE_PERCENTAGE';\r\nexport const SET_ALL_FINANCE_OPTIONS_POPUP_VISIBLE = 'SET_ALL_FINANCE_OPTIONS_POPUP_VISIBLE';\r\nexport const SET_DISCOUNT_FINANCE_CELLS_VISIBLE = 'SET_DISCOUNT_FINANCE_CELLS_VISIBLE';\r\n\r\n// MESSAGE BOX COMMANDS\r\nexport const CHANGE_MESSAGE_BOX = 'CHANGE_MESSAGE_BOX';\r\n\r\n// FILTERS\r\nexport const SET_SELECTED_FILTERS = 'SET_SELECTED_FILTERS';\r\nexport const LOAD_FILTERS = 'LOAD_FILTERS';\r\nexport const SET_EXPANDED_FILTERS = 'SET_EXPANDED_FILTERS';\r\nexport const SHOW_FILTERS = 'SHOW_FILTERS';\r\nexport const SHOW_FILTERS_IF_NOT_VISIBLE = \"SHOW_FILTERS_IF_NOT_VISIBLE\";\r\nexport const SET_FILTER_VISIBLE = 'SET_FILTER_VISIBLE';\r\nexport const SET_AVAILABLE_FILTER_VALUES = 'SET_AVAILABLE_FILTER_VALUES';\r\nexport const UPDATE_FILTERS_COUNT = 'UPDATE_FILTERS_COUNT';\r\nexport const SET_COUNTERTOP_FILTERS_RECEIVED = 'SET_COUNTERTOP_FILTERS_RECEIVED';\r\n\r\n// DESKTOP NAVIGATION\r\nexport const TOGGLE_DESKTOP_NAVIGATION = \"TOGGLE_DESKTOP_NAVIGATION\";\r\nexport const SET_ACTIVE_NAVIGATION_NAMES = \"SET_ACTIVE_NAVIGATION_NAMES\";\r\n\r\n// MOBILE MENU NAV\r\nexport const LOAD_MOBILE_NAV = \"LOAD_MOBILE_NAV\";\r\nexport const SHOW_SCHEDULER = \"SHOW_SCHEDULER\";\r\nexport const SCHEDULER_SCHEDULE = \"SCHEDULER_SCHEDULE\";\r\n\r\n// COMMON NAVIGATION\r\nexport const SET_MODULE_CONTEXT_MENU_TYPE = \"SET_MODULE_CONTEXT_MENU_TYPE\";\r\nexport const SET_MODULE_CONTEXT_MENU_MODULE = \"SET_MODULE_CONTEXT_MENU_MODULE\";\r\nexport const SET_MODULE_CONTEXT_MENU_MODULE_PART = \"SET_MODULE_CONTEXT_MENU_MODULE_PART\";\r\nexport const SET_MODULE_CONTEXT_MENU_DIRECTION = \"SET_MODULE_CONTEXT_MENU_DIRECTION\";\r\nexport const SET_NAVIGATION_VIEW_TYPE = \"SET_NAVIGATION_VIEW_TYPE\";\r\nexport const SET_CABINETS_APPLY_TO = \"SET_CABINETS_APPLY_TO\";\r\nexport const SET_CABINETS_APPLY_TO_BATHROOM = \"SET_CABINETS_APPLY_TO_BATHROOM\";\r\nexport const SET_COUNTERTOPS_APPLY_TO = \"SET_COUNTERTOPS_APPLY_TO\";\r\nexport const SET_COUNTERTOPS_APPLY_TO_BATHROOM = \"SET_COUNTERTOPS_APPLY_TO_BATHROOM\";\r\nexport const SET_APPLY_TO_COMMON = \"SET_APPLY_TO_COMMON\";\r\nexport const SET_EDGES_APPLY_TO = \"SET_EDGES_APPLY_TO\";\r\nexport const SET_NAVIGATION_LOADING = \"SET_NAVIGATION_LOADING\";\r\nexport const UPDATE_DISABLE_FEATURE_GROUP_RADIO = \"UPDATE_DISABLE_FEATURE_GROUP_RADIO\";\r\nexport const TOGGLE_NAV_ITEM_POSITION_MODAL = \"TOGGLE_NAV_ITEM_POSITION_MODAL\";\r\nexport const SET_USE_FEATURES_LIGHT_REQUEST = \"SET_USE_FEATURES_LIGHT_REQUEST\";\r\n\r\n// CABINET MODULE FILTERS\r\nexport const SET_ACTIVE_NAVIGATION_FILTER = \"SET_ACTIVE_NAVIGATION_FILTER\";\r\nexport const SET_ACTIVE_NAVIGATION_FILTER_STEP_INDEX = \"SET_ACTIVE_NAVIGATION_FILTER_STEP_INDEX\";\r\nexport const SET_CABINET_NAVIGATION_FILTER_COMPLETED = \"SET_CABINET_NAVIGATION_FILTER_COMPLETED\";\r\n\r\n//COUNTERTOP WIZARD\r\nexport const SET_COUNTERTOP_NAVIGATION_FILTER_COMPLETED = \"SET_COUNTERTOP_NAVIGATION_FILTER_COMPLETED\";\r\nexport const SET_COUNTERTOP_WIZARD = \"SET_COUNTERTOP_WIZARD\";\r\n\r\n//NEW DASHBOARD WIZARD\r\nexport const SET_WIZARD_CONFIG = \"SET_WIZARD_CONFIG\";\r\nexport const SET_WIZARD_IS_ACTIVE = \"SET_WIZARD_IS_ACTIVE\";\r\nexport const SET_WIZARD_ACTIVE_FILTER_GROUP_INDEX = \"SET_WIZARD_ACTIVE_FILTER_GROUP_INDEX\";\r\nexport const SET_WIZARD_LIST = \"SET_WIZARD_LIST\";\r\nexport const SET_WIZARD_ACTIVE_ITEM = \"SET_WIZARD_ACTIVE_ITEM\";\r\nexport const SET_WIZARD_SHOW_FEATURE_SECTION = \"SET_WIZARD_SHOW_FEATURE_SECTION\";\r\nexport const SET_WIZARD_ACTIVE_STEP = \"SET_WIZARD_ACTIVE_STEP\";\r\nexport const SET_WIZARD_SELECTED_VALUES = \"SET_WIZARD_SELECTED_VALUES\";\r\nexport const SET_ALL_WIZARD_SELECTED_VALUES = \"SET_ALL_WIZARD_SELECTED_VALUES\";\r\nexport const SET_WIZARD_CONFLICT_POPUP_OPENED = \"SET_WIZARD_CONFLICT_POPUP_OPENED\";\r\nexport const SET_WIZARD_CONFLICT_STEPS = \"SET_WIZARD_CONFLICT_STEPS\";\r\nexport const RESTORE_ALL_WIZARD_SELECTED_VALUES = \"RESTORE_ALL_WIZARD_SELECTED_VALUES\";\r\nexport const SET_WIZARD_MISSING_FEATURES = \"SET_WIZARD_MISSING_FEATURES\";\r\nexport const SET_WIZARD_SQFT_CART_ITEMS = \"SET_WIZARD_SQFT_CART_ITEMS\";\r\nexport const SET_WIZARD_ALLOW_SKIP_DONE_STEPS = \"SET_WIZARD_ALLOW_SKIP_DONE_STEPS\";\r\n\r\n// SQUARE FOOTAGE TOOL\r\n// export const TOGGLE_SQFT = \"TOGGLE_SQFT\";\r\nexport const ENABLE_SQUARE_FOOTAGE = \"ENABLE_SQUARE_FOOTAGE\";\r\nexport const SET_SQUARE_FOOTAGE_GROUP = \"SET_SQUARE_FOOTAGE_GROUP\";\r\nexport const SET_SQFT_VIEW_MODE = \"SET_SQFT_VIEW_MODE\";\r\nexport const LOAD_SQFT = \"LOAD_SQFT\";\r\nexport const UPDATE_SQFT = \"UPDATE_SQFT\";\r\nexport const UPDATE_SQFT_CALCULATIONS = \"UPDATE_SQFT_CALCULATIONS\";\r\nexport const SET_SQFT_SQUARE_FEET = \"SET_SQFT_SQUARE_FEET\";\r\nexport const TOGGLE_CHANGE_LAYOUT_POPUP = \"TOGGLE_CHANGE_LAYOUT_POPUP\";\r\nexport const SET_NEW_LAYOUT_ON_SQFT = \"SET_NEW_LAYOUT_ON_SQFT\";\r\nexport const SET_SQFT_MEASURE_UNIT = \"SET_SQFT_MEASURE_UNIT\";\r\nexport const CHANGE_SQFT_FEATURES_POPUP = \"CHANGE_SQFT_FEATURES_POPUP\";\r\nexport const SQT_SQFT_FROM_FEATURE = \"SQT_SQFT_FROM_FEATURE\";\r\nexport const SET_CABINETS_GLB = \"SET_CABINETS_GLB\";\r\nexport const SET_CABINETS_AR_BLOB_URL = \"SET_CABINETS_AR_BLOB_URL\";\r\nexport const SET_API_ERROR_MESSAGE = \"SET_API_ERROR_MESSAGE\";\r\nexport const SET_SHAPE_IDS_WITH_MISSING_FEATURES = \"SET_SHAPE_IDS_WITH_MISSING_FEATURES\";\r\nexport const SET_CHANGE_SHAPE_FEATURE_MISSING_MESSAGE = \"SET_CHANGE_SHAPE_FEATURE_MISSING_MESSAGE\";\r\nexport const ADD_SHAPE_ID_WITH_MISSING_FEATURES = \"ADD_SHAPE_ID_WITH_MISSING_FEATURES\";\r\nexport const SET_SELECTED_COUNTERTOP = \"SET_SELECTED_COUNTERTOP\";\r\nexport const SET_ABORT_CONTROLLER = \"SET_ABORT_CONTROLLER\";\r\n\r\n// SLAB TOOL\r\nexport const SHOW_SLAB_TOOL = \"SHOW_SLAB_TOOL\";\r\nexport const SET_SLAB_TOOL_VISITED = \"SET_SLAB_TOOL_VISITED\";\r\nexport const ADD_ROOM_WITH_VISITED_SLAB_TOOL = \"ADD_ROOM_WITH_VISITED_SLAB_TOOL\";\r\nexport const SET_ACTIVE_SLAB_ID = \"SET_ACTIVE_SLAB_ID\";\r\nexport const SET_ACTIVE_SLAB_URL = \"SET_ACTIVE_SLAB_URL\";\r\nexport const SET_SQFT_SLAB_ACTIVE_STEP = \"SET_SQFT_SLAB_ACTIVE_STEP\";\r\nexport const SET_SQFT_SLAB_SEARCH_TEXT = \"SET_SQFT_SLAB_SEARCH_TEXT\";\r\nexport const SET_SQFT_SLAB_ASPECT_RATIO = \"SET_SQFT_SLAB_ASPECT_RATIO\";\r\nexport const SET_SQFT_SLAB_IMAGE_WIDTH = \"SET_SQFT_SLAB_IMAGE_WIDTH\";\r\nexport const SET_SQFT_SLAB_IMAGE_HEIGHT = \"SET_SQFT_SLAB_IMAGE_HEIGHT\";\r\nexport const SET_SQFT_SLAB_CROPPER_DATA = \"SET_SQFT_SLAB_CROPPER_DATA\";\r\nexport const SET_SQFT_CROPPED_SLAB_IMAGES = \"SET_SQFT_CROPPED_SLAB_IMAGES\";\r\nexport const ADD_SQFT_CROPPED_SLAB_IMAGE = \"ADD_SQFT_CROPPED_SLAB_IMAGE\";\r\nexport const DELETE_CROPPED_SLAB_IMAGE = \"DELETE_CROPPED_SLAB_IMAGE\";\r\nexport const SET_PRICE_PER_AREA = \"SET_PRICE_PER_AREA\";\r\nexport const SET_SLAB_IMAGE_TYPE = \"SET_SLAB_IMAGE_TYPE\";\r\nexport const SET_IS_MEASUREMENT_VISIBLE_IN_SLAB_MODE = \"SET_IS_MEASUREMENT_VISIBLE_IN_SLAB_MODE\";\r\nexport const SET_IS_SIZE_VALIDATION_FAILED = \"SET_IS_SIZE_VALIDATION_FAILED\";\r\nexport const SET_IS_SLAB_PRICING_ENABLED = \"SET_IS_SLAB_PRICING_ENABLED\";\r\n\r\n// MITERED\r\nexport const SET_MITERED_SECTIONS = \"SET_MITERED_SECTIONS\";\r\nexport const ADD_MITERED_SECTION = \"ADD_MITERED_SECTION\";\r\nexport const CHANGE_MITERED_SECTION = \"CHANGE_MITERED_SECTION\";\r\nexport const DELETE_MITERED_SECTION = \"DELETE_MITERED_SECTION\";\r\nexport const DELETE_ALL_MITERED_SECTIONS = \"DELETE_ALL_MITERED_SECTIONS\";\r\n\r\n// RESOURCE\r\nexport const SET_RESOURCES = \"SET_RESOURCES\";\r\nexport const ADD_RESOURCE = \"ADD_RESOURCE\";\r\nexport const CHANGE_RESOURCE = \"CHANGE_RESOURCE\";\r\nexport const DELETE_RESOURCE = \"DELETE_RESOURCE\";\r\nexport const DELETE_RESOURCE_ATTACHED_TO = \"DELETE_RESOURCE_ATTACHED_TO\";\r\nexport const DELETE_ALL_RESOURCES = \"DELETE_ALL_RESOURCES\";\r\nexport const SET_SELECTED_FEATURE = \"SET_SELECTED_FEATURE\";\r\nexport const SET_SELECTED_PART_IDS = \"SET_SELECTED_PART_IDS\";\r\n\r\n// SQUARE FOOTAGE MENU\r\nexport const SET_SQFT_MENU_OPENED = \"SET_SQFT_MENU_OPENED\";\r\nexport const SET_SQFT_MENU_LOCK = \"SET_SQFT_MENU_LOCK\";\r\nexport const SET_SQFT_MENU_ACTIVE_BUTTON = \"SET_SQFT_MENU_ACTIVE_BUTTON\";\r\nexport const SET_SQFT_SYSTEM_MESSAGE = \"SET_SQFT_SYSTEM_MESSAGE\";\r\nexport const SET_SQFT_AR3D_POPUP = \"SET_SQFT_AR3D_POPUP\";\r\nexport const SET_SQFT_POPUP = \"SET_SQFT_POPUP\";\r\nexport const SET_SQFT_CONTEXT_MENU = \"SET_SQFT_CONTEXT_MENU\";\r\nexport const SET_SQFT_CONTEXT_MENU_V2 = \"SET_SQFT_CONTEXT_MENU_V2\";\r\nexport const SET_SQFT_SYSTEM_DELETE_MESSAGE = \"SET_SQFT_SYSTEM_DELETE_MESSAGE\";\r\nexport const SET_SQFT_ACTIVE_SUB_MENU_BUTTON = \"SET_SQFT_ACTIVE_SUB_MENU_BUTTON\";\r\nexport const SET_SQFT_ACTIVE_LEVEL3_BUTTON = \"SET_SQFT_ACTIVE_LEVEL3_BUTTON\";\r\nexport const SET_SQFT_ROOM_LAYOUTS = \"SET_SQFT_ROOM_LAYOUTS\";\r\nexport const SET_SQFT_ACTIVE_ROOM = \"SET_SQFT_ACTIVE_ROOM\";\r\nexport const SET_SQFT_ACTIVE_ROOM_ID = \"SET_SQFT_ACTIVE_ROOM_ID\";\r\nexport const SET_SQFT_ACTIVE_ROOM_TYPE = \"SET_SQFT_ACTIVE_ROOM_TYPE\";\r\nexport const SET_SQFT_ACTIVE_ROOM_INDEX = \"SET_SQFT_ACTIVE_ROOM_INDEX\";\r\nexport const SET_SQFT_ROOM_SWITCHER_VISIBLE= \"SET_SQFT_ROOM_SWITCHER_VISIBLE\";\r\nexport const SET_FREE_DRAW_MODE = \"SET_FREE_DRAW_MODE\";\r\n\r\nexport const SET_CHANGE_VALUE_POPUPS = \"SET_CHANGE_VALUE_POPUPS\";\r\nexport const ADD_CHANGE_VALUE_POPUP = \"ADD_CHANGE_VALUE_POPUP\";\r\nexport const CHANGE_VALUE_POPUP = \"CHANGE_VALUE_POPUP\";\r\nexport const DELETE_CHANGE_VALUE_POPUP = \"DELETE_CHANGE_VALUE_POPUP\";\r\n\r\nexport const SET_VALIDATION_POPUPS = \"SET_VALIDATION_POPUPS\";\r\nexport const ADD_VALIDATION_POPUP = \"ADD_VALIDATION_POPUP\";\r\nexport const VALIDATION_POPUP = \"VALIDATION_POPUP\";\r\nexport const DELETE_VALIDATION_POPUP = \"DELETE_VALIDATION_POPUP\";\r\n\r\nexport const SET_WALLS_UP_MODE = \"SET_WALLS_UP_MODE\";\r\nexport const SET_WALLS_LOCK_MODE = \"SET_WALLS_LOCK_MODE\";\r\nexport const SET_IS_ITEXT_EDITING = \"SET_IS_ITEXT_EDITING\";\r\nexport const SET_SLAB_PLACEHOLDER_OVERLAPS_WITH_MULTIPLE_SHAPES = \"SET_SLAB_PLACEHOLDER_OVERLAPS_WITH_MULTIPLE_SHAPES\";\r\nexport const SET_RE_CACHE_MENU_COUNTER = \"SET_RE_CACHE_MENU_COUNTER\";\r\n\r\n// SQUARE FOOTAGE MANUAL CALCULATION\r\nexport const TOGGLE_SHOW_MANUAL_CALCULATION = \"TOGGLE_SHOW_MANUAL_CALCULATION\";\r\nexport const SET_SWITCHER_POSITION = \"SET_SWITCHER_POSITION\";\r\nexport const ADD_MANUAL_CALCULATION_ROW = \"ADD_MANUAL_CALCULATION_ROW\";\r\nexport const UPDATE_MANUAL_CALCULATION_ROW = \"UPDATE_MANUAL_CALCULATION_ROW\";\r\nexport const UPDATE_MANUAL_CALCULATION_ROWS = \"UPDATE_MANUAL_CALCULATION_ROWS\";\r\nexport const DELETE_MANUAL_CALCULATION_ROW = \"DELETE_MANUAL_CALCULATION_ROW\";\r\n\r\n// SQUARE FOOTAGE TUTORIAL\r\nexport const SET_SQFT_TUTORIAL_STEP = 'SET_SQFT_TUTORIAL_STEP';\r\nexport const SET_SQFT_TUTORIAL_SWITCHING = 'SET_SQFT_TUTORIAL_SWITCHING';\r\n\r\n// CHECKOUT DOCUSIGN IFRAME\r\nexport const SHOW_DOCUSIGN = 'SHOW_DOCUSIGN';\r\nexport const SHOW_DEPOSIT = 'SHOW_DEPOSIT';\r\nexport const SHOW_CONTRACT_SIGNING = 'SHOW_CONTRACT_SIGNING';\r\nexport const SET_AFTER_CONTRACT_SIGN_CALLBACK = 'SET_AFTER_CONTRACT_SIGN_CALLBACK';\r\n\r\n// UPLOADS, NOTES & SQFT\r\nexport const ADD_PROJECT_DOCUMENT = 'ADD_PROJECT_DOCUMENT';\r\n// export const EDIT_PROJECT_DOCUMENTS = 'EDIT_PROJECT_DOCUMENTS';\r\nexport const SET_PROJECT_DOCUMENTS_IDS = 'SET_PROJECT_DOCUMENTS_IDS';\r\n\r\n// UPLOADS, NOTES & SQFT\r\nexport const SHOW_MATERIALS_TUTORIAL = 'SHOW_MATERIALS_TUTORIAL';\r\nexport const SET_MATERIALS_TUTORIAL_STEP = 'SET_MATERIALS_TUTORIAL_STEP';\r\nexport const SET_MATERIALS_TUTORIAL_FINISHED = 'SET_MATERIALS_TUTORIAL_FINISHED';\r\nexport const SHOW_MATERIALS_AGENT_TUTORIAL = 'SHOW_MATERIALS_AGENT_TUTORIAL';\r\nexport const SET_MATERIALS_AGENT_TUTORIAL_FINISHED = 'SET_MATERIALS_AGENT_TUTORIAL_FINISHED';\r\nexport const SHOW_VISUALIZER_TUTORIAL = 'SHOW_VISUALIZER_TUTORIAL';\r\nexport const SET_VISUALIZER_TUTORIAL_STEP = 'SET_VISUALIZER_TUTORIAL_STEP';\r\nexport const SET_VISUALIZER_TUTORIAL_FINISHED = 'SET_VISUALIZER_TUTORIAL_FINISHED';\r\n\r\n// CONTRACT SIGNING\r\nexport const CONTRACT_SIGNING_SET_STEP = 'CONTRACT_SIGNING_SET_STEP';\r\nexport const CONTRACT_SIGNING_POST_SIGNATURE = 'CONTRACT_SIGNING_POST_SIGNATURE';\r\nexport const CONTRACT_SIGNING_JOB_DOCUMENT = 'CONTRACT_SIGNING_JOB_DOCUMENT';\r\nexport const CONTRACT_SIGNING_SHOW_SIGNATURE_PAD = 'CONTRACT_SIGNING_SHOW_SIGNATURE_PAD';\r\nexport const CONTRACT_SIGNING_SET_CONTRACTS_VALUES = 'CONTRACT_SIGNING_SET_CONTRACTS_VALUES';\r\nexport const SET_CONTRACT_BLOB = 'SET_CONTRACT_BLOB';\r\nexport const CONTRACT_SIGNING_RESTORE_VALUES = 'CONTRACT_SIGNING_RESTORE_VALUES';\r\nexport const CONTRACT_SIGNING_SET_CONTRACTS_LIST = 'CONTRACT_SIGNING_SET_CONTRACTS_LIST';\r\n\r\n// INITIAL FLOW\r\nexport const SET_FABRICATOR_SUBSCRIPTIONS = 'SET_FABRICATOR_SUBSCRIPTIONS';\r\nexport const SET_INITIAL_FLOW_FINISHED = 'SET_INITIAL_FLOW_FINISHED';\r\nexport const SET_INITIAL_FLOW_ADDITIONAL_ROOMS = 'SET_INITIAL_FLOW_ADDITIONAL_ROOMS';\r\nexport const SET_INITIAL_FLOW_BUTTON = 'SET_INITIAL_FLOW_BUTTON';\r\nexport const SET_INITIAL_FLOW_ROOM = 'SET_INITIAL_FLOW_ROOM';\r\nexport const SET_INITIAL_FLOW_VISUALIZER_NOT_AVAILABLE = 'SET_INITIAL_FLOW_VISUALIZER_NOT_AVAILABLE';\r\nexport const SET_INITIAL_FLOW_ROOM_LAYOUT = 'SET_INITIAL_FLOW_ROOM_LAYOUT';\r\nexport const SET_INITIAL_FLOW_STEP = 'SET_INITIAL_FLOW_STEP';\r\n\r\n// UNLOCK CALCULATIONS TUTORIAL\r\nexport const SET_SHOW_UNLOCK_CALCULATIONS = 'SET_SHOW_UNLOCK_CALCULATIONS';\r\nexport const SET_UNLOCK_CALCULATIONS_STEP = 'SET_UNLOCK_CALCULATIONS_STEP';\r\nexport const SHOW_UNLOCK_CALCULATIONS_CART_ITEM = 'SHOW_UNLOCK_CALCULATIONS_CART_ITEM';\r\nexport const SHOW_UNLOCK_CALCULATIONS_TOTAL_ITEM = 'SHOW_UNLOCK_CALCULATIONS_TOTAL_ITEM';\r\nexport const SHOW_UNLOCK_CALCULATIONS_TUTORIAL = 'SHOW_UNLOCK_CALCULATIONS_TUTORIAL';\r\nexport const SET_UNLOCK_CALCULATIONS_TUTORIAL_STEP = 'SET_UNLOCK_CALCULATIONS_TUTORIAL_STEP';\r\nexport const SET_UNLOCK_CALCULATIONS_TUTORIAL_FINISHED = 'SET_UNLOCK_CALCULATIONS_TUTORIAL_FINISHED';\r\n\r\n// INTRO VIDEO\r\nexport const SET_INTRO_VIDEO = 'SET_INTRO_VIDEO';\r\n\r\n// QUOTES\r\nexport const ADD_NEW_QUOTE = 'ADD_NEW_QUOTE';\r\nexport const SET_QUOTES = 'SET_QUOTES';\r\nexport const UPDATE_QUOTE = 'UPDATE_QUOTE';\r\nexport const SET_ACTIVE_QUOTE_INDEX = 'SET_ACTIVE_QUOTE_INDEX';\r\n\r\n// ADVANCED QUOTING\r\nexport const TOGGLE_SHOW_ADVANCED_QUOTING = 'TOGGLE_SHOW_ADVANCED_QUOTING';\r\nexport const SET_ADVANCED_QUOTING_SEARCH_ITEM = 'SET_ADVANCED_QUOTING_SEARCH_ITEM';\r\n\r\n// ADVANCED QUOTING\r\nexport const TOGGLE_SHOW_ASSIGN_QUOTE_POPUP = 'TOGGLE_SHOW_ASSIGN_QUOTE_POPUP';\r\nexport const SET_ASSIGN_QUOTE_POPUP_SEARCH_TEXT = 'SET_ASSIGN_QUOTE_POPUP_SEARCH_TEXT';\r\nexport const SET_ASSIGN_QUOTE_POPUP_EMPLOYEE = 'SET_ASSIGN_QUOTE_POPUP_EMPLOYEE';\r\nexport const SET_ASSIGN_QUOTE_POPUP_CUSTOMER = 'SET_ASSIGN_QUOTE_POPUP_CUSTOMER';\r\nexport const SET_ASSIGN_QUOTE_POPUP_SUCCESS_TEXT = 'SET_ASSIGN_QUOTE_POPUP_SUCCESS_TEXT';\r\nexport const SET_ASSIGN_QUOTE_CLONE_MODE = 'SET_ASSIGN_QUOTE_CLONE_MODE';\r\nexport const SET_ASSIGN_QUOTE_OFFLINE_DATA = 'SET_ASSIGN_QUOTE_OFFLINE_DATA';\r\n\r\n// RECEIPT\r\nexport const SET_RECEIPT_URL = 'SET_RECEIPT_URL';\r\nexport const SET_RECEIPT_SIGNATURE = 'SET_RECEIPT_SIGNATURE';\r\n\r\n// LOOK ACTIONS\r\nexport const SET_LOOK_OPENED = 'SET_LOOK_OPENED';\r\nexport const SET_LOOK_EXPANDED = 'SET_LOOK_EXPANDED';\r\nexport const SET_LOOK_PARENT_KEY = 'SET_LOOK_PARENT_KEY';\r\nexport const SET_LOOK_PARENT_KEYS = 'SET_LOOK_PARENT_KEYS';\r\nexport const SET_LOOK_VIEW_TYPE = 'SET_LOOK_VIEW_TYPE';\r\nexport const SET_WISHLIST_POPUP_OPENED = 'SET_WISHLIST_POPUP_OPENED';\r\nexport const SET_SIDEBAR_MODAL_OPENED = 'SET_SIDEBAR_MODAL_OPENED';\r\nexport const SET_LOOK_ACTIVE_FEATURE = 'SET_LOOK_ACTIVE_FEATURE';\r\nexport const UPDATE_LOOK_ACTIVE_FEATURE_STOCK_COUNT = 'UPDATE_LOOK_ACTIVE_FEATURE_STOCK_COUNT';\r\nexport const SET_LOOK_ACTIVE_CATEGORY = 'SET_LOOK_ACTIVE_CATEGORY';\r\nexport const SET_LOOK_MORE_INFO_OPENED = 'SET_LOOK_MORE_INFO_OPENED';\r\nexport const SET_LOOK_LAYOUT_OPENED = 'SET_LOOK_LAYOUT_OPENED';\r\nexport const SET_LOOK_PAGE_OPENED = 'SET_LOOK_PAGE_OPENED';\r\nexport const SET_LOOK_OVERLAY_OPENED = 'SET_LOOK_OVERLAY_OPENED';\r\nexport const SET_LOOK_VIEW_CHANGE_OPTIONS = 'SET_LOOK_VIEW_CHANGE_OPTIONS';\r\nexport const SET_LOOK_STYLE_POPUP = 'SET_LOOK_STYLE_POPUP';\r\nexport const SET_LOOK_REMOVE_POPUP = 'SET_LOOK_REMOVE_POPUP';\r\nexport const SET_LOOK_INTRO_STEP = 'SET_LOOK_INTRO_STEP';\r\nexport const SET_LOOK_INTRO_HIDDEN = 'SET_LOOK_INTRO_HIDDEN';\r\nexport const SET_LOOK_CONTEXT_MENU = 'SET_LOOK_CONTEXT_MENU';\r\nexport const SET_LOOK_WALLS_APPLY_TO = 'SET_LOOK_WALLS_APPLY_TO';\r\nexport const SET_LOOK_ALL_WALLS_OPENED = 'SET_LOOK_ALL_WALLS_OPENED';\r\nexport const SET_LOOK_RETURN_ACTION = 'SET_LOOK_RETURN_ACTION';\r\nexport const SET_LOOK_DEMO_POINTS_CLICKED = 'SET_LOOK_DEMO_POINTS_CLICKED';\r\nexport const UPDATE_LOOK_NAVIGATION_COUNT = 'UPDATE_LOOK_NAVIGATION_COUNT';\r\n// export const UPDATE_LOOK_FEATURE_GROUP_COUNT = 'UPDATE_LOOK_FEATURE_GROUP_COUNT';\r\nexport const SET_LOOK_COMPATABILITY_ALERT = 'SET_LOOK_COMPATABILITY_ALERT';\r\nexport const SET_LOOK_RESTORE_STATE = 'SET_LOOK_RESTORE_STATE';\r\nexport const SET_LOOK_LOCK_TUTORIAL = 'SET_LOOK_LOCK_TUTORIAL';\r\nexport const SET_LOOK_ALL_WALLS_TUTORIAL = 'SET_LOOK_ALL_WALLS_TUTORIAL';\r\n\r\n// IFRAME ACTIONS\r\nexport const SET_IFRAME_INTEGRATION_REQUEST = 'SET_IFRAME_INTEGRATION_REQUEST';\r\nexport const SET_IFRAME_INTEGRATION_RESPONSE = 'SET_IFRAME_INTEGRATION_RESPONSE';\r\n\r\n// GROHE ACTIONS\r\n// export const SET_GROHE_CATEGORIES_OPENED = 'SET_GROHE_CATEGORIES_OPENED';\r\nexport const SET_GROHE_FILTERS_OPENED = 'SET_GROHE_FILTERS_OPENED';\r\nexport const SET_GROHE_SIMILAR_FEATURE = 'SET_GROHE_SIMILAR_FEATURE';\r\nexport const SET_GROHE_SIMILAR_PRODUCTS_OPENED = 'SET_GROHE_SIMILAR_PRODUCTS_OPENED';\r\nexport const SET_GROHE_REQUIRED_BUT_NOT_INCLUDED_FEATURE = 'SET_GROHE_REQUIRED_BUT_NOT_INCLUDED_FEATURE';\r\nexport const SET_GROHE_FILTERS_SEARCH_TEXT = 'SET_GROHE_FILTERS_SEARCH_TEXT';\r\nexport const SET_GROHE_LAST_OPENED_CATEGORY = 'SET_GROHE_LAST_OPENED_CATEGORY';\r\nexport const SET_GROHE_SUB_CATEGORY_OPENED = 'SET_GROHE_SUB_CATEGORY_OPENED';\r\nexport const SET_GROHE_SHOW_ADDED_TO_THE_CART_SUCCESS = 'SET_GROHE_SHOW_ADDED_TO_THE_CART_SUCCESS';\r\nexport const SET_GROHE_ACTIVE_FEATURE_QUANTITY = 'SET_GROHE_ACTIVE_FEATURE_QUANTITY';\r\nexport const SET_GROHE_SHARE_BUTTONS_OPENED = 'SET_GROHE_SHARE_BUTTONS_OPENED';\r\nexport const SET_GROHE_SAME_COLOR_ACTIVE_FEATURE = 'SET_GROHE_SAME_COLOR_ACTIVE_FEATURE';\r\nexport const SET_GROHE_SAME_COLOR_SECTION_OPENED = 'SET_GROHE_SAME_COLOR_SECTION_OPENED';\r\nexport const SET_GROHE_SAME_COLOR_CHECKBOX_APPLIED = 'SET_GROHE_SAME_COLOR_CHECKBOX_APPLIED';\r\nexport const SET_GROHE_EXISTING_TEMP_ID = 'SET_GROHE_EXISTING_TEMP_ID';\r\n\r\n// GROHE QUOTING TOOL ACTIONS\r\nexport const SET_GROHE_WIZARD_NAME = 'SET_GROHE_WIZARD_NAME';\r\nexport const SET_GROHE_WIZARD_OPENED = 'SET_GROHE_WIZARD_OPENED';\r\nexport const SET_GROHE_WIZARD_STEP = 'SET_GROHE_WIZARD_STEP';\r\n\r\n// GROHE SHOPPING CART PAYMENT\r\nexport const SET_PAYMENT_INFO = 'SET_PAYMENT_INFO';\r\nexport const SET_CARD_INFO = 'SET_CARD_INFO';\r\nexport const SET_CARD_ERRORS = 'SET_CARD_ERRORS';\r\nexport const SET_SHIPPING_ERRORS = 'SET_SHIPPING_ERRORS';\r\nexport const SET_SHIPPING_INFO = 'SET_SHIPPING_INFO';\r\nexport const SET_BILLING_INFO = 'SET_BILLING_INFO';\r\nexport const RESTORE_PAYMENT_INFO = 'RESTORE_PAYMENT_INFO';\r\n\r\n//HISTORY\r\nexport const ADD_LAYOUT_HISTORY = 'ADD_LAYOUT_HISTORY';\r\nexport const SET_LAYOUT_HISTORY = 'SET_LAYOUT_HISTORY';\r\n\r\n//SHOP PAGES\r\nexport const SET_SHOP_PAGE_LOADED = 'SET_SHOP_PAGE_LOADED';\r\nexport const SET_SHOP_PAGE_OPENED = 'SET_SHOP_PAGE_OPENED';\r\nexport const SET_SHOP_LAST_PAGE_VISITED = 'SET_SHOP_LAST_PAGE_VISITED';\r\nexport const SET_SHOP_PAGE_LEAVED = 'SET_SHOP_PAGE_LEAVED';\r\n// export const SET_SHOP_ACTIVE_CATEGORY = 'SET_SHOP_ACTIVE_CATEGORY';\r\n// export const SET_SHOP_ACTIVE_FEATURE = 'SET_SHOP_ACTIVE_FEATURE';\r\n","import config from \"./../components/canvas/store/sqftConfig\";\r\n///todo sqft-reacet//import 'core-js/es/array';\r\nimport workspace from \"./../components/canvas/core/workspace\";\r\nimport line from \"./../components/canvas/core/shapes/line\";\r\nimport $ from \"jquery\";\r\nimport sqftConfig from \"../components/canvas/store/sqftConfig\";\r\nimport {getEdgeFeatures} from \"./shapeHelper\";\r\nimport {isPointInsidePolygon} from \"../lib/pnpoly\";\r\nimport LineCorner from \"../components/canvas/core/shapes/lineHooks/lineCorner\";\r\nimport {getMiterEdgeHeight, isMiterEdge, isWaterfallFeature} from \"./featureHelper\";\r\n\r\nconst S3_FEATURES_Root = 'https://features-thumbnails.s3-accelerate.amazonaws.com/';\r\n\r\nexport const THUMBNAIL_SIZES = {\r\n small: `_100x100`,\r\n medium: `_175x175`,\r\n large: `_400x400`,\r\n};\r\n\r\nexport const featureThumbnailUrl = (dbFeature, size) => {\r\n return dbFeature.customThumbnail\r\n ? dbFeature.customThumbnail\r\n : dbFeature.thumbnailUrl\r\n ? s3FeatureImagePath(dbFeature.thumbnailUrl, size)\r\n : \"\";\r\n};\r\n\r\nexport function s3FeatureImagePath(imageThumbnail, size) {\r\n // const features_root = document.kvConfig.kioskMode ? KIOSK_FEATURES_Root : S3_FEATURES_Root;\r\n const features_root = S3_FEATURES_Root;\r\n return size\r\n ? `${features_root}feature-${imageThumbnail + size}.png`\r\n : `${features_root}feature-${imageThumbnail}.png` // full image path\r\n}\r\n\r\nexport const getUrlSQFTHashParam = (queryParam) => {\r\n let hash = window.location.hash.substr(1);\r\n hash = hash.replace('/sqft?', '');\r\n\r\n const hashParsed = hash.split('&').reduce(function (res, item) {\r\n let parts = item.split('=');\r\n res[parts[0]] = parts[1];\r\n return res;\r\n }, {});\r\n\r\n return hashParsed[queryParam];\r\n}\r\n\r\nexport const isIphoneX = () => { // https://stackoverflow.com/questions/47226824/iphonex-and-notch-detection\r\n let iPhone = /iPhone/.test(navigator.userAgent) && !window.MSStream;\r\n let aspect = window.screen.width / window.screen.height;\r\n return !!(iPhone && aspect.toFixed(3) === \"0.462\")\r\n};\r\nexport const isAndroid = () => {\r\n return navigator.userAgent && navigator.userAgent.toLowerCase().indexOf(\"android\") > -1;\r\n};\r\nexport const isChrome = () => {\r\n return !!navigator.userAgent.match('CriOS');\r\n};\r\nexport const isIOSDevice = () => {\r\n return !!navigator.platform && /iPad|iPhone|iPod/.test(navigator.platform);\r\n};\r\nexport const isIE = () => {\r\n return (window.navigator.userAgent.indexOf('MSIE ') > 0)\r\n || (!!window.MSInputMethodContext && !!document.documentMode)\r\n || (window.navigator.userAgent.indexOf('Trident/') > 0)\r\n};\r\nexport const isEdge = () => {\r\n return window.navigator.userAgent.indexOf('Edge') > 0\r\n};\r\nexport const isFirefox = () => navigator.userAgent.toLowerCase().indexOf(\"firefox\") > -1;\r\n\r\nexport const hardCodeIsLowes = () => {\r\n const fabricatorId = getParamFromUrl(\"fabricatorId\") || window.fabricatorId || document.kvConfig.userId || 137530; // master countertops2\r\n return fabricatorId === 139043 || window.location.href.includes(\"mdp_surfaces\") || window.location.href.includes(\"lowes_\")\r\n};\r\n\r\nexport const getFontsize = () => {\r\n return config.measureUnit === \"Imperial\" ? config.workspace.fontSize : config.workspace.fontSizeMetric;\r\n};\r\n\r\nexport const getFontsizeSmall = () => {\r\n return $(window).width() <= 1024 ? getFontsize() - 4 : getFontsize() - 4;\r\n};\r\n\r\nexport const rotatePoint = (point, center, angle) => {\r\n angle = angle * (Math.PI/180); // Convert to radians\r\n const rotatedX = Math.cos(angle) * (point.x - center.x) - Math.sin(angle) * (point.y-center.y) + center.x;\r\n const rotatedY = Math.sin(angle) * (point.x - center.x) + Math.cos(angle) * (point.y - center.y) + center.y;\r\n return {x: rotatedX, y: rotatedY}\r\n};\r\n\r\nexport const getPointDistance = (from, to) => {\r\n var pointDistance = Math.sqrt(Math.pow(to.x - from.x, 2) + Math.pow(to.y - from.y, 2));\r\n return Math.round10(pointDistance, -3)\r\n};\r\n\r\nexport const getClosestPoint = (point, points) => {\r\n return points.reduce((a, b) => getPointDistance(point, a) < getPointDistance(point, b) ? a : b);\r\n};\r\n\r\nexport const get45CornerLegDistanceByHypotenuse = (hypotenuseDistance) => {\r\n return Math.sqrt(Math.pow(hypotenuseDistance, 2) / 2)\r\n};\r\n\r\nexport const getMidPoint = (point1, point2) => {\r\n return {\r\n x: (point1.x + point2.x) / 2,\r\n y: (point1.y + point2.y) / 2\r\n };\r\n};\r\n\r\nexport const getSectionPartPoint = (point1, point2, part) => {\r\n return {\r\n x: (point1.x + 1/part * point2.x) / (1 + 1/part),\r\n y: (point1.y + 1/part * point2.y) / (1 + 1/part)\r\n };\r\n};\r\n\r\nexport const getParralelPoint = (pointA, pointB, distanceFromLine = 5) => {\r\n // pointA - closest to the needed point\r\n // pointB - far to the needed point\r\n const midPoint = getPointBetweenPoints(pointA, pointB, distanceFromLine);\r\n const x = pointA.x + (pointA.x - midPoint.x) * 2;\r\n const y = pointA.y + (pointA.y - midPoint.y) * 2;\r\n\r\n return {x, y}\r\n};\r\n\r\nexport const getParallelPoints = (pointA, pointB, distanceFromLine = 5) => {\r\n let vector = {x: pointB.x - pointA.x, y: pointB.y - pointA.y}\r\n let len = Math.sqrt(Math.pow(vector.x, 2) + Math.pow(vector.y, 2));\r\n let ud = {x: vector.x / len, y: vector.y / len};\r\n //let perpendicularVector = {x: -ud.y, y: ud.x };\r\n\r\n let parallelPoint1 = {\r\n x: pointA.x - ud.y * distanceFromLine,\r\n y: pointA.y + ud.x * distanceFromLine\r\n };\r\n let parallelPoint2 = {\r\n x: parallelPoint1.x + vector.x,\r\n y: parallelPoint1.y + vector.y,\r\n };\r\n\r\n return [parallelPoint2, parallelPoint1];\r\n};\r\n\r\nexport const getDistanceFromPointToLine = (x, y, x1, y1, x2, y2) => {\r\n let A = x - x1;\r\n let B = y - y1;\r\n let C = x2 - x1;\r\n let D = y2 - y1;\r\n\r\n let dot = A * C + B * D;\r\n let len_sq = C * C + D * D;\r\n let param = -1;\r\n if (len_sq !== 0) //in case of 0 length line\r\n param = dot / len_sq;\r\n\r\n let xx, yy;\r\n if (param < 0) {\r\n xx = x1;\r\n yy = y1;\r\n } else if (param > 1) {\r\n xx = x2;\r\n yy = y2;\r\n } else {\r\n xx = x1 + param * C;\r\n yy = y1 + param * D;\r\n }\r\n\r\n let dx = x - xx;\r\n let dy = y - yy;\r\n\r\n return Math.sqrt(dx * dx + dy * dy);\r\n}\r\n\r\nexport const getDistanceFromPointToInfiniteLine = (x, y, x1, y1, x2, y2) => {\r\n return Math.abs((y2 - y1) * x - (x2 - x1) * y + x2 * y1 - y2 * x1) /\r\n Math.sqrt( Math.pow(y2 - y1, 2) + Math.pow(x2 - x1, 2))\r\n}\r\n\r\n/**\r\n * @param pointA closest to the needed point\r\n * @param pointB far to the needed point\r\n * @param distanceFromPointA\r\n * @param decimals\r\n * @return {{x: *, y: *}}\r\n */\r\nexport const getPointBetweenPoints = (pointA, pointB, distanceFromPointA = 5, decimals = null) => {\r\n // Calculate distance between pointA and pointB\r\n const distance = getPointDistance(pointA, pointB);\r\n const Xa = pointA.x;\r\n const Ya = pointA.y;\r\n const Xb = pointB.x;\r\n const Yb = pointB.y;\r\n\r\n // Calculate proportion k\r\n const k = distanceFromPointA / distance;\r\n let Xc = Xa + (Xb - Xa) * k;\r\n let Yc = Ya + (Yb - Ya) * k;\r\n\r\n // Check if decimals is not null and round if needed\r\n if (decimals !== null) {\r\n Xc = parseFloat(Math.round10(Xc, decimals));\r\n Yc = parseFloat(Math.round10(Yc, decimals));\r\n }\r\n\r\n return { x: Xc, y: Yc };\r\n};\r\n\r\nexport const getPointField = (posX, posY, parent = workspace) => {\r\n let scale = workspace.getScale(),\r\n offset = parent.getOffset();\r\n\r\n return {\r\n x: (posX * scale) + offset.x,\r\n y: (posY * scale) + offset.y\r\n };\r\n};\r\n\r\nexport const getPointOnWorkspace = (posX, posY, parent = workspace) => {\r\n let offset = parent.getOffset();\r\n\r\n return {\r\n x: posX + offset.x,\r\n y: posY + offset.y\r\n };\r\n};\r\n\r\nexport const getMousePositionOnField = (mouseX, mouseY) => {\r\n let wPos = workspace.getPosition();\r\n let scale = config.scale;\r\n\r\n return {\r\n x: (mouseX + wPos.x) / scale,\r\n y: (mouseY + wPos.y) / scale\r\n };\r\n};\r\n\r\nexport const getMousePositionOnShape = (mouseX, mouseY, shape) => {\r\n const pointPosOnShape = getMousePositionOnField(mouseX, mouseY, shape);\r\n const pos = shape.getPosition();\r\n return {\r\n x: pointPosOnShape.x - pos.x,\r\n y: pointPosOnShape.y - pos.y\r\n };\r\n};\r\n\r\nexport const getPointPositionOnShape = (pointPosX, pointPosY, shape) => {\r\n const pos = shape.getPosition();\r\n return {\r\n x: pointPosX - pos.x,\r\n y: pointPosY - pos.y\r\n };\r\n};\r\n\r\n/**\r\n * Return the first two pairs which have the smallest distances\r\n * @param pointsA\r\n * @param pointsB\r\n * @return {*[]}\r\n */\r\nexport const findClosestPointPairs = (pointsA, pointsB) => {\r\n let pairs = [];\r\n\r\n // Find the closest point from pointsB for each point in pointsA\r\n pointsA.forEach(pointA => {\r\n let closestPoint = null;\r\n let minDistance = Number.MAX_VALUE;\r\n\r\n // Iterating over each point in pointsB\r\n pointsB.forEach(pointB => {\r\n let distance = getPointDistance(pointA, pointB);\r\n // Updating the closest point and minimum distance if a closer point is found\r\n if (distance < minDistance) {\r\n closestPoint = pointB;\r\n minDistance = distance;\r\n }\r\n });\r\n\r\n pairs.push({ pointA, pointB: closestPoint, distance: minDistance });\r\n });\r\n\r\n // Sorting the pairs by distance\r\n pairs.sort((a, b) => a.distance - b.distance);\r\n\r\n return pairs.slice(0, 2);\r\n}\r\n\r\nexport const orientation = {\r\n VERTICAL: 0,\r\n HORIZONTAL: 1,\r\n NORTHWEST: 2,\r\n SOUTHEAST: 3,\r\n NORTHEAST: 4,\r\n SOUTHWEST: 5\r\n};\r\n\r\nexport const getParamFromUrl = (name, url = window.location.href) => {\r\n name = name.replace(/[\\[\\]]/g, \"\\\\$&\");\r\n var regex = new RegExp(\"[?&]\" + name + \"(=([^&#]*)|&|#|$)\"),\r\n results = regex.exec(url);\r\n if (!results) return null;\r\n if (!results[2]) return '';\r\n return decodeURIComponent(results[2].replace(/\\+/g, \" \"));\r\n};\r\n\r\nexport const numToLetter = (num) => {\r\n let mod = num % 26;\r\n let pow = num / 26 | 0;\r\n let out = mod ? String.fromCharCode(64 + mod) : (pow--, 'Z');\r\n\r\n return pow ? numToLetter(pow) + out : out;\r\n};\r\n\r\nexport const letterToNum = (str) => {\r\n let out = 0,\r\n len = str.length,\r\n pos = len;\r\n\r\n while ((pos -= 1) > -1) {\r\n out += (str.charCodeAt(pos) - 64) * Math.pow(26, len - 1 - pos);\r\n }\r\n\r\n return out;\r\n};\r\n\r\n//// CONVERT MEASURE UNIT START ////\r\n\r\nexport const mmToM = (mm) => {\r\n return Math.ceil10(mm / config.mmDivider, -2);\r\n};\r\n\r\nexport const mm2ToM2 = (mm) => {\r\n return Math.ceil10(mm / config.mm2ToM2Divider, -2);\r\n};\r\n\r\nexport const cmToInches = (cm) => {\r\n return Math.ceil10(cm / 2.54, -2);\r\n};\r\n\r\nexport const mmToInches = (mm) => {\r\n return Math.ceil10(mm / 25.4, -3);\r\n};\r\n\r\nexport const cmToMm = (cm) => {\r\n return Math.ceil10(cm * 10, -2);\r\n};\r\n\r\nexport const inchesToMm = (totalInches, shouldCeil = true, shouldRound = false) => {\r\n if (shouldCeil) {\r\n return Math.ceil(totalInches * config.millimetersMultiplier);\r\n } else if (shouldRound) {\r\n return Math.round(totalInches * config.millimetersMultiplier);\r\n }\r\n return totalInches * config.millimetersMultiplier;\r\n};\r\n\r\nexport const inchesToM = (totalInches) => {\r\n return Math.ceil10(totalInches * config.inchesToMMultiplier, -2);\r\n};\r\nexport const inchesToLNFT = (totalInches) => {\r\n return Math.ceil10(totalInches * 0.08333, -2);\r\n};\r\nexport const sqInchesToSqFoot = (totalInches) => {\r\n return Math.ceil10(totalInches / 144, -2);\r\n};\r\n\r\nexport const sqInchesToMM2 = (inches) => {\r\n return Math.ceil10(inches * 645.16, -2);\r\n};\r\n\r\nexport const sqInchesToM2 = (totalInches) => {\r\n return Math.ceil10(totalInches / 1550, -2);\r\n};\r\n\r\nexport const sqftToMM2 = (length) => {\r\n return Math.ceil(length * config.sqftToMmMultiplier);\r\n};\r\n\r\nexport const lnftToMM = (length) => {\r\n return Math.ceil(length * config.lnftToMmMultiplier);\r\n};\r\n\r\nexport const sqftToM2 = (length) => {\r\n return Math.ceil10(length * config.sqftToM2Multiplier, -2);\r\n};\r\n\r\nexport const getTransformedMeasureUnit = (value) => {\r\n return sqftConfig.measureUnit === \"Metric\"\r\n ? measureDistanceToInches(value).millimeters // ? distanceToMillimeters(inchesToMm(segment.length.value))\r\n : value;\r\n}\r\n\r\n//// CONVERT MEASURE UNIT END ////\r\n\r\n//// MEASURE DISTANCE START ////\r\n\r\n// Reduce a fraction by finding the Greatest Common Divisor and dividing by it.\r\nconst gcd = (a, b) => {\r\n if (b === 0) return a;\r\n return gcd(b, a % b);\r\n};\r\n\r\nconst reduce = (numerator, denominator) => {\r\n const common = gcd(numerator, denominator);\r\n return [numerator / common, denominator / common];\r\n};\r\n\r\nexport const measureDistanceToInches = (distance) => {\r\n let denom = 16;\r\n var total_segments = Math.ceil(distance * denom),\r\n // todo check if calculations are correct\r\n // millimeters = inchesToMm(distance),\r\n millimeters = Math.round(distance * config.millimetersMultiplier),\r\n segmentDistance = total_segments / denom,\r\n fraction = total_segments % denom,\r\n rounded = Math.floor(segmentDistance),\r\n inches = rounded % 12,\r\n feet = (rounded - inches) / 12,\r\n reduced = [0,0],\r\n decimal = 0;\r\n\r\n if(fraction > 0) {\r\n reduced = reduce(fraction, denom);\r\n }\r\n\r\n if(reduced[0] !== 0 && reduced[1] !== 0) {\r\n decimal = Math.floor((reduced[0] * 100) / (reduced[1] * 100)) / 100;\r\n }\r\n\r\n return {\r\n feet: feet,\r\n inches: inches,\r\n millimeters: millimeters,\r\n rounded: rounded,\r\n reduced: reduced,\r\n decimal: decimal\r\n }\r\n};\r\n\r\nexport const getSnappedPos = function(pos) {\r\n let scaledGridSize = sqftConfig.workspace.getScaledGridSize();\r\n let newX = Math.round(pos.x / scaledGridSize) * scaledGridSize;\r\n let newY = Math.round(pos.y / scaledGridSize) * scaledGridSize;\r\n return {\r\n x: newX,\r\n y: newY\r\n };\r\n};\r\n\r\nexport const distanceToInches = (distance) => {\r\n var dist = measureDistanceToInches(distance),\r\n ret = \"\";\r\n\r\n if(dist.feet > 0)\r\n ret = dist.feet + \"'\";\r\n if(dist.inches > 0)\r\n ret += dist.inches + \"\\\"\";\r\n\r\n if(dist.reduced[0] > 0) {\r\n var fraction_text = dist.reduced[0] + \"/\" + dist.reduced[1];\r\n ret = ret.toString().substr(0, ret.length - 1) + \" \" + fraction_text + \"\\\"\";\r\n dist.rounded += \" \" + fraction_text;\r\n }\r\n\r\n ret = dist.rounded + \"\\\"\";\r\n\r\n return ret;\r\n};\r\n\r\nexport const distanceToMillimeters = (distance) => {\r\n var dist = measureDistanceToInches(distance);\r\n\r\n return dist.millimeters + \" mm\";\r\n};\r\n\r\n/*\r\n * edge can be applied to line and to lineCorner\r\n */\r\nexport const getEdgeLength = (attachedTo) => {\r\n let lineBumpoutTotalHeight = 0;\r\n let lineCornerWidth = 0;\r\n let length = 0;\r\n if (attachedTo instanceof LineCorner) {\r\n switch (config.measureUnit) {\r\n case \"Imperial\": length += inchesToLNFT(attachedTo.getLength()); break;\r\n case \"Metric\": length += inchesToM(attachedTo.getLength()); break;\r\n }\r\n } else if (attachedTo instanceof line) {\r\n if (attachedTo.isWithBumpout()) {\r\n lineBumpoutTotalHeight = attachedTo.getLineBumpoutTotalHeight();\r\n }\r\n if (attachedTo.lineCorner) {\r\n lineCornerWidth += attachedTo.get45CornerLegDistance();\r\n }\r\n const prevLine = attachedTo.getParent().getPrevLine(attachedTo);\r\n if (prevLine.lineCorner) {\r\n lineCornerWidth += prevLine.get45CornerLegDistance();\r\n }\r\n if (config.measureUnit === \"Imperial\") {\r\n length = Math.round(( Math.sqrt(\r\n Math.pow(attachedTo.to.x - attachedTo.from.x, 2)\r\n +\r\n Math.pow(attachedTo.to.y - attachedTo.from.y, 2)\r\n ) + lineBumpoutTotalHeight - lineCornerWidth) / 12 * 100) / 100;\r\n } else {\r\n length = inchesToM(\r\n Math.abs(attachedTo.to.x - attachedTo.from.x + attachedTo.to.y - attachedTo.from.y)\r\n + lineBumpoutTotalHeight - lineCornerWidth\r\n )\r\n }\r\n }\r\n\r\n return length;\r\n};\r\n\r\nexport const getEdgeArea = (line, length, featureId) => {\r\n let totalArea = 0;\r\n const navItems = getEdgeFeatures();\r\n let edge = navItems.find(edge => edge.part.dbFeature.id === featureId);\r\n // let edge = edges.edges.find(edge => edge.id === +img.dataset.id);\r\n // let edgeFeature = edges.getFeatureEdgeFilter(edge);\r\n\r\n if (!edge) {\r\n if (!workspace.isEdgeFeatureError) {\r\n console.log('edgeFeature not found', featureId);\r\n workspace.isEdgeFeatureError = true\r\n }\r\n\r\n return totalArea;\r\n }\r\n\r\n // 1.) additional area for waterfall edges\r\n if (isWaterfallFeature(edge.part.dbFeature.id)) { // && !isFeatureUnitUseEach(edge.part)\r\n switch (config.measureUnit) {\r\n case \"Imperial\": totalArea += length * config.waterfallImperialHeight; break;\r\n case \"Metric\": totalArea += length * config.waterfallMetricHeight; break;\r\n }\r\n // additional area for 40mm edges\r\n }\r\n\r\n // 2.) additional area for mitered edges (additional area for the mitered edge tool added separately)\r\n if (isMiterEdge(featureId) && !line.isWithMitered() ) {\r\n // additional area for 40mm edges\r\n const miterEdgeHeight = getMiterEdgeHeight(featureId);\r\n if (miterEdgeHeight) {\r\n totalArea += length * miterEdgeHeight\r\n }\r\n }\r\n\r\n //let edge40mmIds = edges.getEdgeFilterByValue(\"40mm Waterfall\").map(({ id }) => id);\r\n //let is40mmEdge = edge40mmIds.filter(value => edgeFeature.includes(value)).length > 0;\r\n\r\n // else if (is40mmEdge) { // by text: edge.displayName.includes('40mm')\r\n // switch (config.measureUnit) {\r\n // //case \"Imperial\": totalArea += length * config.waterfallImperialHeight; break;\r\n // case \"Metric\": totalArea += length * 40; break;\r\n // }\r\n // }\r\n\r\n return totalArea;\r\n}\r\n\r\nexport const getBacksplashArea = (backsplashValue, attachedTo) => {\r\n backsplashValue = config.measureUnit === \"Imperial\" ? +backsplashValue : mmToInches(+backsplashValue);\r\n const backsplashLength = sqInchesToSqFoot(getBacksplashLength(attachedTo));\r\n const backsplashArea = Math.round10(backsplashValue * backsplashLength, -2)\r\n\r\n return config.measureUnit === \"Imperial\" ? backsplashArea : sqftToM2(backsplashArea);\r\n};\r\n\r\n/*\r\n * backsplash can be applied to line and to lineCorner\r\n * return sqft\r\n */\r\nexport const getBacksplashLength = (attachedTo) => {\r\n let length = 0;\r\n let lineCornerWidth = 0;\r\n\r\n if (attachedTo instanceof LineCorner) {\r\n length += attachedTo.getLength();\r\n } else if(attachedTo instanceof line) {\r\n const prevLine = attachedTo.getParent().getPrevLine(attachedTo);\r\n let lineLength = attachedTo.getLineLength();\r\n\r\n if (attachedTo.isWithBumpout()) {\r\n lineLength += attachedTo.getLineBumpoutTotalHeight();\r\n }\r\n if (attachedTo.lineCorner) {\r\n lineCornerWidth += attachedTo.get45CornerLegDistance();\r\n }\r\n if (prevLine.lineCorner) {\r\n lineCornerWidth += prevLine.get45CornerLegDistance();\r\n }\r\n\r\n length += lineLength - lineCornerWidth;\r\n }\r\n\r\n return length;\r\n};\r\n\r\n//// MEASURE DISTANCE END ////\r\n\r\nexport const truncate = (source, size) => {\r\n let quot = '"';\r\n if(source.slice(0, size - 1 + quot.length).includes(quot)) {\r\n size += quot.length - 1;\r\n }\r\n\r\n return source.length > size ? source.slice(0, size - 1) + \"…\" : source;\r\n};\r\n\r\n//// HTML ////\r\n\r\nexport const setStylesOnElement = (element, styles) => {\r\n Object.assign(element.style, styles);\r\n};\r\n\r\nexport const getMinInArray = (array, attrib) => {\r\n return array.reduce(function(prev, curr) {\r\n return prev[attrib] < curr[attrib] ? prev : curr;\r\n });\r\n};\r\n\r\nexport const getMaxInArray = (array, attrib) =>{\r\n return array.reduce(function(prev, curr) {\r\n return prev[attrib] < curr[attrib] ? prev : curr;\r\n });\r\n};\r\n\r\n/// SLAB ///\r\n\r\nexport const getGCD = function(a, b) {\r\n if (!b) {\r\n return a;\r\n }\r\n\r\n return getGCD(b, a % b);\r\n};\r\n\r\nexport const getAspectRatio = function(height, width) {\r\n let heightGCD = getGCD(height, width);\r\n let aspectHeight = height / heightGCD;\r\n let aspectWidth = width / heightGCD;\r\n\r\n console.log(\"heightGCD\", heightGCD);\r\n console.log(\"aspectHeight\", aspectHeight);\r\n console.log(\"aspectWidth\", aspectWidth);\r\n\r\n return {aspectHeight, aspectWidth, heightGCD};\r\n};\r\n\r\n/**\r\n * If shouldExtend is true this will always return point if segments are not parallel.\r\n * @param {{x: number, y: number}} point1\r\n * @param {{x: number, y: number}} point2\r\n * @param {{x: number, y: number}} point3\r\n * @param {{x: number, y: number}} point4\r\n * @param {boolean} isRounded\r\n * @param {boolean} shouldExtend\r\n * @return {{x: number, y: number}|null} new point on the line\r\n */\r\nexport const getIntersectCordsBetweenLines = (point1, point2, point3, point4, isRounded, shouldExtend = false) => {\r\n const points = [point1.x, point1.y, point2.x, point2.y, point3.x, point3.y, point4.x, point4.y];\r\n if (shouldExtend) {\r\n return getIntersectCordsWithExtendedSegments(...points);\r\n } else {\r\n return getIntersectCords(...points, isRounded)\r\n }\r\n\r\n}\r\n\r\n// line intercept math by Paul Bourke http://paulbourke.net/geometry/pointlineplane/\r\n// Determine the intersection point of two line segments\r\n// Return FALSE if the lines don't intersect\r\nexport const getIntersectCords = function(x1, y1, x2, y2, x3, y3, x4, y4, rounded) {\r\n\r\n // Check if none of the lines are of length 0\r\n if ((x1 === x2 && y1 === y2) || (x3 === x4 && y3 === y4)) {\r\n return false\r\n }\r\n let denominator = ((y4 - y3) * (x2 - x1) - (x4 - x3) * (y2 - y1));\r\n\r\n // Lines are parallel\r\n if (denominator === 0) {\r\n return false\r\n }\r\n\r\n let ua = ((x4 - x3) * (y1 - y3) - (y4 - y3) * (x1 - x3)) / denominator;\r\n let ub = ((x2 - x1) * (y1 - y3) - (y2 - y1) * (x1 - x3)) / denominator;\r\n\r\n // is the intersection along the segments\r\n if (ua < 0 || ua > 1 || ub < 0 || ub > 1) {\r\n return false\r\n }\r\n\r\n // Return a object with the x and y coordinates of the intersection\r\n let x = x1 + ua * (x2 - x1);\r\n let y = y1 + ua * (y2 - y1);\r\n if (rounded) {\r\n x = Math.round(x);\r\n y = Math.round(y);\r\n }\r\n\r\n return {x, y}\r\n};\r\n\r\n/**\r\n * We expand two segments and get their intersection point. This will always return point if segments are not parallel.\r\n * @param x1\r\n * @param y1\r\n * @param x2\r\n * @param y2\r\n * @param x3\r\n * @param y3\r\n * @param x4\r\n * @param y4\r\n * @return {{x: number, y: number}|null} new point on the line\r\n **/\r\nconst getIntersectCordsWithExtendedSegments = (x1, y1, x2, y2, x3, y3, x4, y4) => {\r\n const A1 = y2 - y1;\r\n const B1 = x1 - x2;\r\n const C1 = A1 * x1 + B1 * y1;\r\n\r\n const A2 = y4 - y3;\r\n const B2 = x3 - x4;\r\n const C2 = A2 * x3 + B2 * y3;\r\n\r\n const det = A1 * B2 - A2 * B1;\r\n\r\n if (det === 0) {\r\n return null;\r\n } else {\r\n const x = (B2 * C1 - B1 * C2) / det;\r\n const y = (A1 * C2 - A2 * C1) / det;\r\n return { x, y };\r\n }\r\n};\r\n\r\n/**\r\n * get new point on the beam which is at distant from the second point at a certain length distance\r\n * @param {{x: number, y: number}} point1\r\n * @param {{x: number, y: number}} point2\r\n * @param {number} distance\r\n * @return {{x: number, y: number}} new point on the line\r\n */\r\nexport const getPointOnTheLine = (point1, point2, distance) => {\r\n const length = getPointDistance(point1, point2);\r\n const k = 1 + distance / length;\r\n const x = parseFloat(point2.x) + k * (parseFloat(point1.x) - parseFloat(point2.x));\r\n const y = parseFloat(point2.y) + k * (parseFloat(point1.y) - parseFloat(point2.y));\r\n\r\n return {x, y}\r\n}\r\n\r\n/**\r\n * Determines whether a point is inside a shape or on its border.\r\n *\r\n * @param {Object} point - The point to check, with properties x and y.\r\n * @param {Object} shape - The shape object, which has a getLines method returning line segments.\r\n * @param {boolean} [includeBorder=false] - If true, the function also returns true when the point is on the border of the shape.\r\n * @returns {boolean} True if the point is inside the shape or on its border (depending on includeBorder), otherwise false.\r\n */\r\nexport const isPointInsideShape = (point, shape, includeBorder = false) => {\r\n let x = point.x, y = point.y;\r\n let inside = false;\r\n let shapeLines = shape.getLines(true);\r\n\r\n for (let i = 0, j = shapeLines.length - 1; i < shapeLines.length; j = i++) {\r\n const iPosition = getPointField(shapeLines[i].from.x, shapeLines[i].from.y, shapeLines[i]);\r\n const jPosition = getPointField(shapeLines[j].to.x, shapeLines[i].to.y, shapeLines[j]);\r\n\r\n let xi = iPosition.x, yi = iPosition.y;\r\n let xj = jPosition.x, yj = jPosition.y;\r\n\r\n // Check if the point is on the line segment\r\n if (includeBorder && isPointOnLine(point, {x: xi, y: yi}, {x: xj, y: yj})) {\r\n return true;\r\n }\r\n\r\n if (((yi > y) !== (yj > y)) && (x < (xj - xi) * (y - yi) / (yj - yi) + xi)) {\r\n inside = !inside;\r\n }\r\n }\r\n\r\n return inside;\r\n};\r\n\r\n/**\r\n * Checks if a point is on a line segment defined by two points.\r\n *\r\n * @param {Object} pt - The point to check, with properties x and y.\r\n * @param {Object} linePt1 - The first point of the line segment, with properties x and y.\r\n * @param {Object} linePt2 - The second point of the line segment, with properties x and y.\r\n * @returns {boolean} True if the point is on the line segment, otherwise false.\r\n */\r\nfunction isPointOnLine(pt, linePt1, linePt2) {\r\n const dxc = pt.x - linePt1.x;\r\n const dyc = pt.y - linePt1.y;\r\n const dxl = linePt2.x - linePt1.x;\r\n const dyl = linePt2.y - linePt1.y;\r\n\r\n const cross = dxc * dyl - dyc * dxl;\r\n if (cross !== 0) return false; // Point is not on the line\r\n\r\n // Check if the point is within the line segment bounds\r\n if (Math.abs(dxl) >= Math.abs(dyl))\r\n return dxl > 0 ? linePt1.x <= pt.x && pt.x <= linePt2.x : linePt2.x <= pt.x && pt.x <= linePt1.x;\r\n else\r\n return dyl > 0 ? linePt1.y <= pt.y && pt.y <= linePt2.y : linePt2.y <= pt.y && pt.y <= linePt1.y;\r\n}\r\n\r\nexport const getAreaByShoelaceFormula = (lines) => {\r\n let area = 0;\r\n for (let i = 0; i < lines.length; i++) {\r\n area += lines[i].to.x * (lines[i + 1] ? lines[i + 1].to.y : lines[0].to.y );\r\n area -= lines[i].to.y * (lines[i + 1] ? lines[i + 1].to.x : lines[0].to.x );\r\n }\r\n\r\n return area / 2;\r\n};\r\n\r\nexport const addDecimalToLength = (lineLength) => {\r\n let decimal = 0;\r\n if (lineLength.reduced.length) {\r\n if (lineLength.reduced[0] === 1 && lineLength.reduced[1] === 4) {\r\n decimal = 0.25;\r\n } else if (lineLength.reduced[0] === 1 && lineLength.reduced[1] === 2) {\r\n decimal = 0.5;\r\n } else if (lineLength.reduced[0] === 3 && lineLength.reduced[1] === 4) {\r\n decimal = 0.75;\r\n }\r\n }\r\n\r\n return lineLength.rounded + decimal\r\n};\r\n\r\nexport const getAngleBetweenTwoPoints = (point1, point2) => {\r\n return Math.atan2(point2.y - point1.y, point2.x - point1.x) * 180 / Math.PI;\r\n}\r\n\r\nexport const getAngleRelativeToTheHorizontalAxis = (point1, point2) => {\r\n let dx = point1.x - point2.x;\r\n let dy = point1.y - point2.y;\r\n\r\n return (Math.atan2(dy, dx) * 180 / Math.PI + 360) % 360;\r\n}\r\n\r\nexport const getTanDeg = (deg) => {\r\n let rad = deg * Math.PI/180;\r\n return Math.tan(rad);\r\n}\r\n\r\n/**\r\n * return closest higher number in array than needle\r\n * @param {int} needle\r\n * @param {[int]} array\r\n * @return {*}\r\n */\r\nexport const getClosestHigherNumber = (needle, array) => {\r\n return array.reduce((prev, curr) => {\r\n if (curr <= needle) {\r\n return prev\r\n }\r\n if (prev === null) {\r\n return curr\r\n }\r\n return curr - needle < prev - needle ? curr : prev;\r\n }, null);\r\n}\r\n\r\nexport const isDisabledInPopupWithParents = (item) => {\r\n if (item.isDisabledInPopup) {\r\n return true\r\n }\r\n if (item.getParent && item.getParent()) {\r\n return isDisabledInPopupWithParents(item.getParent());\r\n }\r\n\r\n return false\r\n}\r\n\r\n/**\r\n * Point 1,2,3 is a corner, where 2 is midpoint\r\n * we assume that distance between lines is more than minLineLength\r\n * @param shape\r\n * @param point1\r\n * @param point2\r\n * @param point3\r\n * @param {number} minLineLength\r\n */\r\nexport const isInnerCorner = (shape, point1, point2, point3, minLineLength = 25) => {\r\n const shapePoints = shape.getPointFieldArray();\r\n const closePoint1 = getPointOnTheLine(point2, point1, -minLineLength);\r\n const closePoint2 = getPointOnTheLine(point2, point3, -minLineLength);\r\n const midPoint = getMidPoint(closePoint1, closePoint2);\r\n\r\n // RenderFigures.renderCircle(closePoint1, 12,1, '#63b141');\r\n // RenderFigures.renderCircle(closePoint2, 12,1, '#63b141');\r\n // RenderFigures.renderCircle(midPoint, 10, 1);\r\n // console.log(\"midPoint\", midPoint);\r\n // console.log(\"isPointInsidePolygon\", isPointInsidePolygon(midPoint, shapePoints));\r\n // debugger // eslint-disable-line no-debugger\r\n return !isPointInsidePolygon(midPoint, shapePoints);\r\n}\r\n\r\nexport const parseImperialFractionToDecimal = (input) => {\r\n const sanitizedInput = input.replace(/['\"]/g, \"\");\r\n const [wholePart, fractionPart] = sanitizedInput.split(\" \");\r\n\r\n let decimalValue = parseFloat(wholePart) || 0; // Default to 0 if no whole part\r\n\r\n // If there's a fraction part, convert it to decimal\r\n if (fractionPart && fractionPart.includes(\"/\")) {\r\n const [numerator, denominator] = fractionPart.split(\"/\").map(Number);\r\n if (denominator) {\r\n decimalValue += numerator / denominator;\r\n }\r\n }\r\n\r\n return decimalValue;\r\n};\r\n","import invert from \"lodash/invert\";\r\nimport uniqBy from \"lodash/uniqBy\";\r\nimport isEqual from \"lodash/isEqual\";\r\n\r\nimport {getFilterGroupValues, splitFeatureName} from \"../../../misc/utils\";\r\nimport DesignNavigationItem from \"../../visComponents/designNavigationItem\";\r\nimport {Part} from \"./part\";\r\nimport store from '../../../store';\r\nimport {\r\n LayoutAbbreviation, LayoutType, LayoutAbbreviationsToRemove, SIDE_POSITIONS,\r\n useNewNavLogicPartIds, LOOK_WALLS_ONLY, COUNTERTOP_GROUP_BATHROOM, PAN_POSITIONS\r\n} from \"./constants\";\r\nimport {getFeatureIsLocked} from \"../../../misc/helpers\";\r\nimport {getOptionsFromNavItemsForFeature, navFeatureCLick} from \"../lookNavigation/lookFunctions\";\r\nimport {allowCheckForCollection} from \"../grohe/groheNavigation/groheFunctions\";\r\nimport {getSkusDifferences, getSkuWithoutDot} from \"../lookNavigation/lookFunctions2\";\r\nimport {getColorFilterValue} from \"../../../misc/filtersFunctions\";\r\nimport {IS_LIXIL_SERVERS, IS_QKB_UI} from \"../../../config\";\r\nimport {HANDLES_GROUP_BATHROOM} from \"../../bvSceneComponent/core/constants\";\r\nimport {isEncore} from \"../../../misc/fabricatorHardcode\";\r\n\r\n/**\r\n * Used for Complex parts such as Vanity, to perform some base functionality for related items\r\n */\r\nexport class IntermediatePart extends Part {\r\n\r\n constructor(isChild) {\r\n super(false, isChild);\r\n this.disabled = false;\r\n this.defaultDisabled = false; // used after reset click\r\n this.canBeDisabled = false;\r\n }\r\n\r\n /**\r\n * This will be called on feature creation\r\n * @param dbFeature\r\n */\r\n load(dbFeature) {\r\n if (this.layerPositions) {\r\n dbFeature.metaData[\"layerPosition\"] = dbFeature.metaData[\"Side\"] && dbFeature.metaData[\"Side\"][0] !== \"0\"\r\n ? dbFeature.metaData[\"Side\"][0]\r\n : SIDE_POSITIONS[0];\r\n const partNumber = dbFeature.metaData[\"layerPosition\"] === SIDE_POSITIONS[0] ? 1 : 2;\r\n const instance = new this.constructor(false, partNumber);\r\n return this.load_(dbFeature, instance, true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n return this.load_(dbFeature, new this.constructor());\r\n }\r\n\r\n /**\r\n * This will be called by the underlying vanity feature with a concrete instance of the part\r\n * @param dbFeature\r\n * @param part {Part}\r\n * @param setParent {boolean}\r\n * @param features\r\n */\r\n load_(dbFeature, part, setParent = true, features = 'features') {\r\n\r\n const featureList = features + \"List\";\r\n\r\n const {displayName} = dbFeature;\r\n let {featureName} = splitFeatureName(displayName);\r\n if (!featureName && dbFeature.groupName && dbFeature.displayName) {\r\n featureName = dbFeature.displayName.replace(dbFeature.groupName + \" - \", \"\")\r\n }\r\n // console.log('displayName:', displayName);\r\n\r\n if (setParent) {\r\n part.getParent = () => this;\r\n if (dbFeature.galleryImages) {\r\n const featured = dbFeature.galleryImages.find(galImage => galImage.featured);\r\n if (featured) {\r\n this.featuredImage = featured.url\r\n }\r\n dbFeature.galleryImages = dbFeature.galleryImages.sort((a, b) => b.default - a.default)\r\n }\r\n }\r\n\r\n if (!dbFeature.sharedFeatureName) {\r\n console.error(\"No sharedFeatureName property:\", dbFeature);\r\n }\r\n\r\n part.partName = featureName;\r\n part.metaData = dbFeature.metaData || {};\r\n\r\n if (dbFeature.s3Bindings && dbFeature.s3Bindings.length) {\r\n // dbFeature.s3Bindings = dbFeature.s3Bindings.filter(binding => binding.visualizer === \"BathroomV5\")\r\n }\r\n\r\n part.dbFeature = dbFeature || {};\r\n if (!part.dbFeature.filterValueIDs) {\r\n part.dbFeature.filterValueIDs = {}\r\n }\r\n part.notAvailableInVisualizer = !dbFeature.s3Bindings || !dbFeature.s3Bindings.length;\r\n\r\n if (part.metaData.RoomLayout) {\r\n const roomLayout = part.metaData.RoomLayout;\r\n if (roomLayout.includes(LayoutAbbreviation.All)) {\r\n Object.keys(LayoutType).forEach(layoutName => {\r\n this[featureList][layoutName].push(part);\r\n })\r\n } else if (Array.isArray(roomLayout) && roomLayout.length) {\r\n roomLayout.forEach(roomLayoutAbbreviation => {\r\n const layoutName = invert(LayoutAbbreviation)[roomLayoutAbbreviation];\r\n if (layoutName) { // Prevent bad roomLayout Metadata\r\n this[featureList][layoutName].push(part);\r\n }\r\n });\r\n } else { // single value\r\n const layoutName = invert(LayoutAbbreviation)[roomLayout];\r\n if(layoutName) {\r\n this[featureList][layoutName].push(part);\r\n }\r\n }\r\n }\r\n\r\n if (part.notAvailableInVisualizer || !part.metaData.RoomLayout) {\r\n part.notAvailableInVisualizer = true;\r\n Object.keys(LayoutType).forEach(layoutName => {\r\n this[featureList][layoutName].push(part);\r\n })\r\n }\r\n\r\n // Object.keys(LayoutType).forEach(layoutName => {\r\n // this[features+\"List\"][layoutName].push(part);\r\n // });\r\n\r\n this.loadFeatureCommon(part);\r\n\r\n return part\r\n }\r\n\r\n getActiveFeatureConditions() {\r\n return this.getArrayOfConditions()\r\n }\r\n\r\n // someFeatureInStock(feature, arrayOfFeatures) {\r\n // // console.log(\"someFeatureInStock\", feature);\r\n // return isInStock(feature) || arrayOfFeatures.some(currentFeature => {\r\n // // if ((feature._collectionName === currentFeature._collectionName) && (currentFeature.dbFeature.id !== feature.dbFeature.id) && isInStock(currentFeature)) {\r\n // // console.log(\"currentFeature\", currentFeature);\r\n // // }\r\n // if (feature.partId === \"vanity_sink\") {\r\n // return (feature._collectionName === currentFeature._collectionName)\r\n // && (currentFeature.dbFeature.id !== feature.dbFeature.id) && isInStock(currentFeature)\r\n // }\r\n // return (feature._collectionName === currentFeature._collectionName)\r\n // && (feature.dbFeature.lixilProductSubCategory === currentFeature.dbFeature.lixilProductSubCategory)\r\n // && (currentFeature.dbFeature.id !== feature.dbFeature.id) && isInStock(currentFeature)\r\n // })\r\n // }\r\n\r\n // navigationSubItems(filters, searchText, forFeature, filterGroups, restOptions) { // to do\r\n navigationSubItemsSimple(filters, searchText) {\r\n const featuresList = this.activeFeature && this.activeFeature.metaData.layerPosition\r\n && this.activeFeature.metaData.layerPosition !== SIDE_POSITIONS[0] ? this.featuresParts : this.features;\r\n const filteredAvailableFeatures = this.getFeaturesBySearchText(this.getFilteredFeaturesByFilters(filters, featuresList), searchText);\r\n let featuresToDisplay = this.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(true), filteredAvailableFeatures);\r\n // console.log(\"filterGroups\", filterGroups);\r\n return this.returnUniqueNavFeatures(featuresToDisplay)\r\n }\r\n\r\n navigationSubItems(filters, searchText, forFeature, filterGroups, restOptions = {}) {\r\n // const {firstOpenedFeature, firstOpenedConditions, returnAllFeatures} = restOptions;\r\n const {returnAllFeatures} = restOptions;\r\n const featuresList = this.getFeaturesForNavigationFrom(restOptions);\r\n const filteredAvailableFeatures = this.getFeaturesBySearchText(this.getFilteredFeaturesByFilters(filters, featuresList), searchText);\r\n let featuresToDisplay = returnAllFeatures\r\n ? filteredAvailableFeatures\r\n : this.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(true), filteredAvailableFeatures);\r\n if (this.partId === \"vanity_faucet\" || HANDLES_GROUP_BATHROOM.includes(this.partId) || this.nextFeaturesPageToLoadArray) {\r\n const allConditions = this.getArrayOfConditions();\r\n if (this.partId === \"vanity_faucet\") {\r\n const mountTypeCondition = allConditions.find(cond => cond.propName === \"MountType\");\r\n if (mountTypeCondition) {\r\n featuresToDisplay = featuresToDisplay.sort((a, b) => {\r\n return b.matchesMetaForCondition(mountTypeCondition.propName, mountTypeCondition.propValue)\r\n - a.matchesMetaForCondition(mountTypeCondition.propName, mountTypeCondition.propValue)\r\n })\r\n }\r\n } else { // vanity_backsplash and vanity_countertop should show in visualizer first\r\n featuresToDisplay = featuresToDisplay.sort((a, b) => {\r\n return b.matchesMetaForArrayOfConditions(allConditions) - a.matchesMetaForArrayOfConditions(allConditions)\r\n })\r\n }\r\n }\r\n // console.log(\"filterGroups\", filterGroups);\r\n if (this.layerPositions || this.oneLayerPosition || returnAllFeatures) {\r\n featuresToDisplay = uniqBy(featuresToDisplay, (feature) => feature.getSplittedFeatureName());\r\n }\r\n return this.navigationItemsWithOptions(filters, forFeature, filterGroups, featuresToDisplay)\r\n }\r\n\r\n // navigationSubItems(filters, searchText, forFeature, filterGroups, restOptions) { // to do\r\n navigationItemsWithOptions(filters, forFeature, filterGroups, featuresToDisplay) {\r\n let newFeatures = [];\r\n let navItems = [];\r\n const matchingFeatureProperty = this.useMatchingFeatureReplacement || \"MatchingFeature\";\r\n\r\n if (filterGroups && filterGroups.length && (!filters || !Object.keys(filters).length) && !IS_QKB_UI && !isEncore) {\r\n // console.log(\"filteredAvailableFeatures\", filteredAvailableFeatures);\r\n // console.log(\"featuresToDisplay\", featuresToDisplay);\r\n for (let i = 0; i < featuresToDisplay.length; i++) { // 1) take all others\r\n const currentFeature = featuresToDisplay[i];\r\n // if (currentFeature.dbFeature.sharedFeatureName === \"26128EN2\") {\r\n // debugger;//eslint-disable-line\r\n // }\r\n const collectionName = currentFeature.getCollectionName(filterGroups);\r\n const colorName = currentFeature.getColorName(filterGroups);\r\n const matchingOptionsName = currentFeature.getMatchingOptionsName();\r\n const matchByCollection = allowCheckForCollection(currentFeature) ? !newFeatures.some(feature => {\r\n return feature._collectionName === collectionName && feature.dbFeature.lixilProductSubCategory === currentFeature.dbFeature.lixilProductSubCategory\r\n }) : false;\r\n let conditionPassed = false;\r\n if (useNewNavLogicPartIds.includes(this.partId)) {\r\n const sku = getSkuWithoutDot(currentFeature.dbFeature.sharedFeatureName);\r\n conditionPassed = !collectionName\r\n || matchByCollection\r\n || (!colorName && !newFeatures.some(feature => getSkusDifferences(feature.dbFeature.sharedFeatureName, currentFeature.dbFeature.sharedFeatureName) <= 1))\r\n || (colorName && !newFeatures.some(feature => {\r\n const skuDiff = getSkusDifferences(feature.dbFeature.sharedFeatureName, currentFeature.dbFeature.sharedFeatureName);\r\n if (this.partId === \"vanity_cabinet\" && skuDiff <= 2) {\r\n // case when K-33554-ASB-1WT and K-33555-ASB-0 and K-33555-ASB-1WT should be shown separately\r\n return false\r\n }\r\n return skuDiff <= 1 || getSkuWithoutDot(feature.dbFeature.sharedFeatureName) === sku\r\n }))\r\n } else {\r\n conditionPassed = !collectionName\r\n || !colorName\r\n || matchByCollection\r\n || !newFeatures.some(feature => feature.getMatchingOptionsName() === matchingOptionsName)\r\n || !newFeatures.some(feature => feature.metaData[matchingFeatureProperty] && currentFeature.metaData[matchingFeatureProperty]\r\n && isEqual(feature.metaData[matchingFeatureProperty], currentFeature.metaData[matchingFeatureProperty]))\r\n }\r\n if (conditionPassed) {\r\n newFeatures.push(currentFeature);\r\n }\r\n }\r\n // console.log(\"newFeatures\", newFeatures);\r\n navItems = this.returnUniqueNavFeatures(this.getNavItemsWithOptions(forFeature, newFeatures, featuresToDisplay, filterGroups).map(featureObject => {\r\n return new DesignNavigationItem(featureObject.mainFeature.featureName, featureObject.mainFeature, featureObject.otherOptions)\r\n }), false);\r\n }\r\n if (!navItems.length) {\r\n navItems = this.returnUniqueNavFeatures(featuresToDisplay)\r\n }\r\n if (this.filterNavigationItems && forFeature) {\r\n navItems = this.filterNavigationItems(navItems, forFeature)\r\n }\r\n // console.log(\"navItems\", navItems);\r\n return navItems\r\n }\r\n\r\n /**\r\n * this is almost the same as feature options, it is replacing next nav items with the needed color feature\r\n * @param forFeature {featureInterface} featureInterface\r\n * @param newFeatures {[featureInterface]}\r\n * @param allFeatures {[featureInterface]}\r\n * @param filterGroups {[filterGroupInterface]}\r\n * @returns {array}\r\n */\r\n getNavItemsWithOptions = (forFeature= null,\r\n newFeatures = [],\r\n allFeatures = [],\r\n filterGroups) => {\r\n\r\n const matchingFeatureProperty = this.useMatchingFeatureReplacement || \"MatchingFeature\";\r\n const neededColorName = forFeature ? forFeature.getColorName(filterGroups) : \"\";\r\n\r\n return newFeatures.map(currentFeature => {\r\n const filterValue = getColorFilterValue(currentFeature, filterGroups);\r\n const otherOptions = getOptionsFromNavItemsForFeature(currentFeature, allFeatures, filterGroups);\r\n\r\n const currentFeatureColor = currentFeature.getColorName(filterGroups);\r\n const customFullDisplayName = currentFeature.getMatchingOptionsName();\r\n const matchByCollection = forFeature && allowCheckForCollection(currentFeature) ? (currentFeature._collectionName === forFeature._collectionName) : true;\r\n let matchForSimilarSku = forFeature && useNewNavLogicPartIds.includes(this.partId) && matchByCollection\r\n && getSkusDifferences(currentFeature.dbFeature.sharedFeatureName, forFeature.dbFeature.sharedFeatureName) <= 1;\r\n if (this.partId === \"vanity_cabinet\" && matchForSimilarSku) {\r\n matchForSimilarSku = customFullDisplayName === forFeature.getMatchingOptionsName() // cases when 48 replaced 24\r\n }\r\n if (forFeature && (currentFeature.dbFeature.id === forFeature.dbFeature.id || matchForSimilarSku || (\r\n (customFullDisplayName === forFeature.getMatchingOptionsName())\r\n && (!forFeature.metaData[matchingFeatureProperty] || isEqual(forFeature.metaData[matchingFeatureProperty], currentFeature.metaData[matchingFeatureProperty]))\r\n && matchByCollection\r\n && (forFeature.partId === \"vanity_sink\" ? true : forFeature.dbFeature.lixilProductSubCategory === currentFeature.dbFeature.lixilProductSubCategory)\r\n && (currentFeature.dbFeature.id !== forFeature.dbFeature.id)\r\n && (currentFeatureColor && forFeature.getColorName(filterGroups) && (currentFeatureColor !== forFeature.getColorName(filterGroups)))\r\n ))) {\r\n if (filterValue && !otherOptions.some(option => option.colorValue.id === filterValue.id)) {\r\n otherOptions.push({feature: currentFeature, colorValue: filterValue})\r\n }\r\n return {\r\n mainFeature: forFeature,\r\n otherOptions: otherOptions.filter(option => option.feature.dbFeature.id !== forFeature.dbFeature.id)\r\n };\r\n } else {\r\n // console.log(\"neededColorName\", neededColorName);\r\n // console.log(\"otherOptions\", otherOptions);\r\n if (!filterValue || !otherOptions.length) {\r\n return {mainFeature: currentFeature, otherOptions: []}\r\n }\r\n if (!LOOK_WALLS_ONLY.includes(this.partId) && !COUNTERTOP_GROUP_BATHROOM.includes(this.partId)) {\r\n const allOptions = [{feature: currentFeature, colorValue: filterValue}, ...otherOptions];\r\n const mainOption = (forFeature && neededColorName && allOptions.find(option => option.feature.getColorName(filterGroups) === neededColorName))\r\n || allOptions.find(option => option.feature.getColorName(filterGroups) && option.feature.getColorName(filterGroups).includes(\"Chrome\"))\r\n || allOptions.find(option => option.feature.getColorName(filterGroups) && option.feature.getColorName(filterGroups).includes(\"White\"))\r\n || allOptions.find(option => option.feature.getColorName(filterGroups) && option.feature.getColorName(filterGroups).includes(\"rushed\")) // brushed nickel;\r\n // console.log(\"mainOption\", mainOption);\r\n if (mainOption) {\r\n return {\r\n mainFeature: mainOption.feature,\r\n otherOptions: allOptions.filter(option => option.feature.dbFeature.id !== mainOption.feature.dbFeature.id)\r\n }\r\n }\r\n }\r\n return {mainFeature: currentFeature, otherOptions}\r\n }\r\n });\r\n }\r\n\r\n\r\n\r\n navigationSubItemsWithSides(filters, searchText) {\r\n const filteredAvailableFeatures = this.getFeaturesBySearchText(this.getFilteredFeaturesByFilters(filters), searchText);\r\n const featuresToDisplay = this.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(true), filteredAvailableFeatures);\r\n\r\n let navFeatures = [];\r\n const activePosition = this.activeFeature && this.activeFeature.dbFeature.metaData[\"layerPosition\"]\r\n ? this.activeFeature.dbFeature.metaData[\"layerPosition\"]\r\n : SIDE_POSITIONS[0];\r\n navFeatures = featuresToDisplay.filter(feature => {\r\n return feature.dbFeature.metaData[\"layerPosition\"] === activePosition\r\n })\r\n featuresToDisplay.forEach(feature => {\r\n const name1 = feature.getSplittedFeatureName();\r\n if (!navFeatures.some(navFeature => navFeature.getSplittedFeatureName() === name1)) {\r\n navFeatures.push(feature)\r\n }\r\n })\r\n return this.returnUniqueNavFeatures(navFeatures)\r\n }\r\n\r\n navigationSubItemsWithFilter(propName, propValue, featuresToCheck = this.features) {\r\n return featuresToCheck.filter((feature) => {\r\n return feature.matchesMetaForCondition(propName, propValue);\r\n }).map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n navigationSubItemsWithFilterMultipleConditions(arrayOfConditions, featuresToCheck = this.features) {\r\n // console.log('arrayOfConditions', arrayOfConditions);\r\n // console.log('featuresToCheck', featuresToCheck);\r\n return featuresToCheck.filter((feature) => {\r\n return feature.notAvailableInVisualizer || arrayOfConditions.every((conditionObject) => {\r\n const {propName, propValue} = conditionObject;\r\n return feature.matchesMetaForCondition(propName, propValue);\r\n });\r\n })\r\n }\r\n\r\n setDefault(layout, setNotInVisFeature = false) {\r\n this.setFeatureGroupDefault(layout, setNotInVisFeature)\r\n }\r\n\r\n setLayerPositions = (activeFeature = this.activeFeature) => {\r\n if (!activeFeature) {\r\n return\r\n }\r\n const layout = this.getParent().layout;\r\n const conditions = this.getArrayOfConditions();\r\n if (layout && this.defaultLayerLayoutPositions && this.defaultLayerLayoutPositions[layout.type]) {\r\n Object.keys(this.layerPositions).forEach(key => {\r\n if (this.defaultLayerLayoutPositions[layout.type] === key\r\n && (!this.layerPositions[key] || !this.layerPositions[key].matchesMetaForArrayOfConditions(conditions))) {\r\n this.layerPositions[key] = activeFeature;\r\n } else if (activeFeature.dbFeature.metaData[\"layerPosition\"] !== key) {\r\n this.layerPositions[key] = null;\r\n }\r\n })\r\n } else {\r\n Object.keys(this.layerPositions).forEach(key => {\r\n if ((activeFeature.dbFeature.metaData[\"layerPosition\"] === key)\r\n && (!this.layerPositions[key] || !this.layerPositions[key].matchesMetaForArrayOfConditions(conditions))) {\r\n this.layerPositions[key] = activeFeature;\r\n // } else if (this.setAllLayerPositions) {\r\n } else if ((key !== \"C\" && activeFeature.metaData.layerPosition === \"C\") || (activeFeature.metaData.layerPosition !== \"C\" && key === \"C\")) {\r\n this.layerPositions[key] = null;\r\n } else {\r\n const matchingPositionFeature = this.getMatchingPositionFeature(key);\r\n if (matchingPositionFeature) {\r\n this.layerPositions[key] = matchingPositionFeature;\r\n }\r\n }\r\n })\r\n }\r\n }\r\n\r\n toggleLayerPositions() {\r\n if (this.layerPositions) { // just in case\r\n Object.keys(this.layerPositions).forEach(key => {\r\n this.layerPositions[key] = this.disabled ? null : this.getMatchingPositionFeature(key)\r\n })\r\n }\r\n }\r\n\r\n getMatchingPositionFeature = (position = \"\",\r\n fromFeature = this.activeFeature,\r\n fromLayout = null,\r\n conditions = null) => {\r\n if (fromFeature) { //just in case\r\n const name1 = fromFeature.getSplittedFeatureName();\r\n let arrayOfConditions = (conditions || this.getArrayOfConditions()).filter(cond => cond.propName !== \"Side\");\r\n // if (fromFeature.metaData[\"SkuName\"]) {\r\n // arrayOfConditions.push({\r\n // propName: \"SkuName\",\r\n // propValue: fromFeature.metaData[\"SkuName\"]\r\n // })\r\n // }\r\n if (fromLayout) {\r\n let roomLayoutMeta = arrayOfConditions.find(condition => condition.propName === \"RoomLayout\");\r\n let roomSceneMeta = arrayOfConditions.find(condition => condition.propName === \"RoomScene\");\r\n if (roomLayoutMeta) {\r\n roomLayoutMeta.propValue = fromLayout.getCurrentLayoutAbbreviation();\r\n }\r\n if (roomSceneMeta) {\r\n roomSceneMeta.propValue = fromLayout.scene;\r\n }\r\n }\r\n const skuNamesPartIds = [\"walk_in_tub\"];\r\n\r\n const whereToFind = (!this.layerPositions || (position === Object.keys(this.layerPositions)[0])\r\n || (this.partId === \"grab_bar\" && position === \"C\"))\r\n ? fromLayout ? this.featuresList[fromLayout.getCurrentLayoutName()] : this.features\r\n : fromLayout ? this.featuresPartsList[fromLayout.getCurrentLayoutName()] : this.featuresParts;\r\n\r\n let matchFeature = null;\r\n if (fromFeature.metaData[\"SkuName\"]) {\r\n const withSkuNameConditions = [...arrayOfConditions, {\r\n propName: \"SkuName\",\r\n propValue: fromFeature.metaData[\"SkuName\"][0],\r\n }]\r\n matchFeature = whereToFind.find((feature) => {\r\n return (skuNamesPartIds.includes(this.partId) || name1 === feature.getSplittedFeatureName())\r\n && feature.matchesMetaForArrayOfConditions(withSkuNameConditions) && feature.metaData[\"layerPosition\"] === position\r\n });\r\n }\r\n if (!matchFeature) {\r\n matchFeature = whereToFind.find((feature) => {\r\n return (skuNamesPartIds.includes(this.partId) || name1 === feature.getSplittedFeatureName())\r\n && feature.matchesMetaForArrayOfConditions(arrayOfConditions) && feature.metaData[\"layerPosition\"] === position\r\n });\r\n }\r\n return matchFeature\r\n }\r\n return null\r\n };\r\n\r\n getArrayOfConditions() {\r\n const layout = this.getParent().layout;\r\n return [{\r\n propName: 'RoomLayout',\r\n propValue: layout.getCurrentLayoutAbbreviation()\r\n }, {\r\n propName: 'RoomScene',\r\n propValue: layout.scene\r\n }];\r\n }\r\n\r\n setLayers(layout) {\r\n if (this.hideLayerCondition && this.hideLayerCondition()) {\r\n this.hideLayers();\r\n return;\r\n }\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions()))) {\r\n if (this.hasAdditionalParts) {\r\n this.checkIfFeaturePartIsMatching();\r\n }\r\n return this._setLayers(layout);\r\n }\r\n this.setDefault(layout);\r\n return this._setLayers(layout);\r\n }\r\n\r\n showLayerPositionsModal(forFeature) {\r\n const checkSidesFeatureGroups = [\"shower_door\", \"shower_fixture\", \"grab_bar\", \"large_corner_seat\",\r\n \"replacement_tub\", \"shower_pan_combo\", \"corner_caddie\", \"large_corner_caddie\", \"soap_dish\", \"walk_in_tub\",\r\n \"shower_seats\", \"replacement_tub_fixture\"];\r\n if (checkSidesFeatureGroups.includes(this.partId)) {\r\n const positionsAvailable = PAN_POSITIONS.filter(position => {\r\n return !!this.getMatchingPositionFeature(position, forFeature);\r\n });\r\n return positionsAvailable.length > 1\r\n }\r\n return false\r\n }\r\n\r\n clickFromAllWalls(ignoreLocked) {\r\n if (this && this.dbFeature && this.dbFeature.sharedFeatureName) {\r\n console.log(`${this.partId}:`, this.dbFeature.sharedFeatureName);\r\n }\r\n navFeatureCLick(this, false, ignoreLocked, false);\r\n // this.handleClick(ignoreLocked, \"all_walls\");\r\n }\r\n\r\n /**\r\n * @param ignoreLocked {boolean} // false by the default, is used by wizard ONLY\r\n */\r\n handleClick(ignoreLocked = false) {\r\n const parent = this.getParent();\r\n const {activeQuoteIndex} = store.getState().quotesState;\r\n parent.firstClick[activeQuoteIndex] = true; // allow to show active item\r\n const featureIsLocked = getFeatureIsLocked(this, ignoreLocked);\r\n if (featureIsLocked) {\r\n parent.activeLockedFeature = this;\r\n } else {\r\n if (parent.activeLockedFeature) {\r\n parent.activeLockedFeature = null;\r\n }\r\n this.featureClick();\r\n }\r\n }\r\n\r\n featureClick() {\r\n const parent = this.getParent();\r\n parent.placeholderChanged = true;\r\n if (this.notAvailableInVisualizer) {\r\n parent.activeNotInVisualizerFeature = this; // do not change the activeFeature (in order to keep the layer)\r\n } else if (parent.activeNotInVisualizerFeature) {\r\n parent.activeNotInVisualizerFeature = null; // remove it from other searches and so on\r\n parent.activeFeature = this;\r\n } else {\r\n parent.activeFeature = this;\r\n }\r\n this.featureClicked();\r\n }\r\n\r\n hideLayers() {\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.src = '';\r\n }\r\n if (Array.isArray(this.activeFeatureParts) && this.activeFeatureParts.length) {\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n if (activeFeaturePart && activeFeaturePart.layer) {\r\n activeFeaturePart.layer.src = '';\r\n }\r\n })\r\n }\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.src = '';\r\n }\r\n if (this.layerPositions) {\r\n Object.keys(this.layerPositions).forEach(key => {\r\n if (this.layerPositions[key]) {\r\n this.layerPositions[key].layer.src = '';\r\n }\r\n })\r\n }\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n\r\n const getZIndex = (feature, partId = null) => {\r\n return feature.metaData[\"ZSorting\"] ? feature.metaData[\"ZSorting\"] * 1000 : zIndexes[partId || this.partId];\r\n }\r\n\r\n let increase = 0;\r\n if (this.layerPositions) {\r\n Object.keys(this.layerPositions).forEach((key) => {\r\n const feature = this.layerPositions[key];\r\n if (feature) {\r\n increase = increase + 0.000001;\r\n feature.layer.zIndex = getZIndex(feature) + increase;\r\n }\r\n })\r\n } else if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = getZIndex(this.activeFeature);\r\n if (this.hasAdditionalParts && this.activeFeatureParts && this.activeFeatureParts.length) {\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n if (this.partId === \"attachment\") {\r\n activeFeaturePart.layer.zIndex = getZIndex(activeFeaturePart, this.additionalPartPartId)\r\n } else {\r\n increase = increase + 0.000001;\r\n activeFeaturePart.layer.zIndex = getZIndex(activeFeaturePart, this.additionalPartPartId) + increase;\r\n }\r\n });\r\n }\r\n }\r\n }\r\n\r\n removeLayoutFromPartName(partName) {\r\n LayoutAbbreviationsToRemove.forEach(abbr => {\r\n const spaceWithLayoutName = \" \"+abbr;\r\n partName = partName.replace(spaceWithLayoutName + \" \", \" \"); // 1) replace \" Agra S Some edge name\" -> \" Agra Some edge name\"\r\n if (partName.slice(-spaceWithLayoutName.length) === spaceWithLayoutName) {\r\n partName = partName.substring(0, partName.length - spaceWithLayoutName.length); // 2) replace \" Agra Some edge name S\" -> \" Agra Some edge name\"\r\n }\r\n });\r\n partName = partName.replace(\" Backsplash\", \"\");\r\n return partName\r\n }\r\n\r\n removeEdgeFromPartName(partName) {\r\n const filterGroups = store.getState().filterState.filterGroups;\r\n const edgeFilterGroup = filterGroups.find(group => group.name === \"Edge\" || group.name === \"Edge Profile\");\r\n if (edgeFilterGroup && edgeFilterGroup.values && edgeFilterGroup.values.length) {\r\n const edgeFilterGroupValues = edgeFilterGroup.values.sort((a,b) => {\r\n return a.value && b.value && (b.value.length - a.value.length)\r\n }); // 1st should be \"Full Bullnose\", then simple \"Bullnose\"\r\n edgeFilterGroupValues.forEach((filterGroupValue) => { // arrayOf {id: 293, value: \"Eased\", displayText: \"Eased\", parent_id: null, icon: \"\", …}\r\n partName = partName.split(\" \"+filterGroupValue.value).join(\"\");\r\n });\r\n }\r\n return partName\r\n }\r\n\r\n getCountertopGroupsSplittedFeatureName = () => {\r\n if (this._countertopGroupsCustomDisplayName == null) {\r\n this._countertopGroupsCustomDisplayName = this.dbFeature.sharedFeatureName || \"\";\r\n }\r\n return this._countertopGroupsCustomDisplayName\r\n };\r\n\r\n getSplittedFeatureName = () => {\r\n if (this._customDisplayName == null || this.dbFeature.wasUpdatedFromAnotherResponse) {\r\n this._customDisplayName = this.dbFeature.sharedFeatureName || this.partName || \"\";\r\n if (LOOK_WALLS_ONLY.includes(this.partId) || COUNTERTOP_GROUP_BATHROOM.includes(this.partId)) {\r\n const manufacturerFilter = getFilterGroupValues(this, {id: 35});\r\n if (Array.isArray(manufacturerFilter)) {\r\n this._customDisplayName = this._customDisplayName + manufacturerFilter[0];\r\n }\r\n } else if (this.partId === \"shower_pan_combo\") {\r\n this._customDisplayName = !IS_LIXIL_SERVERS && this.metaData && Array.isArray(this.metaData[\"MatchingFeature\"])\r\n && this.metaData[\"MatchingFeature\"][0]\r\n ? this.metaData[\"MatchingFeature\"][0]\r\n : this._customDisplayName.replace(/LHO/g, \"\").replace(/RHO/g, \"\");\r\n }\r\n }\r\n if (this.dbFeature.wasUpdatedFromAnotherResponse) {\r\n this.dbFeature.wasUpdatedFromAnotherResponse = false;\r\n }\r\n return this._customDisplayName\r\n };\r\n\r\n getMatchingOptionsName = () => {\r\n if (!this._customMatchingOptionsName) {\r\n switch (this.partId) {\r\n case \"vanity_cabinet\":\r\n this._customMatchingOptionsName = getSkuWithoutDot(this.getCustomFullDisplayName()).split(\"-ASB\")[0];\r\n break;\r\n case \"hand_shower_only\": {\r\n this._customMatchingOptionsName = this.getCustomFullDisplayName();\r\n if (this.metaData[\"MatchingFeature\"] && this.metaData[\"MatchingFeature\"][0]) {\r\n this._customMatchingOptionsName += this.metaData[\"MatchingFeature\"][0];\r\n }\r\n break;\r\n }\r\n case \"vanity_backsplash\":\r\n case \"vanity_countertop\":\r\n case \"walk_in_tub_fixture\":\r\n this._customMatchingOptionsName = this.getSplittedFeatureName();\r\n break;\r\n case \"shower_fixture\":\r\n case \"shower_door\":\r\n this._customMatchingOptionsName = getSkuWithoutDot(this.getSplittedFeatureName()); // TU105507.243 -> TU105507\r\n break;\r\n case \"body_spray\":\r\n this._customMatchingOptionsName = this.getSplittedFeatureName().substr(0, 5);\r\n break;\r\n default:\r\n this._customMatchingOptionsName = getSkuWithoutDot(this.getCustomFullDisplayName()).substr(0, 5);\r\n break;\r\n }\r\n if (LOOK_WALLS_ONLY.includes(this.partId)) {\r\n const manufacturerFilter = getFilterGroupValues(this, {id: 35});\r\n if (Array.isArray(manufacturerFilter)) {\r\n this._customMatchingOptionsName = this._customMatchingOptionsName + manufacturerFilter[0];\r\n }\r\n }\r\n }\r\n return this._customMatchingOptionsName\r\n };\r\n\r\n getSplittedSku = () => {\r\n if (!this._splittedSku) {\r\n this._splittedSku = this.dbFeature.isFromAsRoom\r\n ? getSkuWithoutDot(this.dbFeature.sku || this.dbFeature.sharedFeatureName || \"\") // as rooms should have 8\r\n : (this.dbFeature.sku || this.dbFeature.sharedFeatureName || \"\").substr(0, 5); // grohe rooms should have 5\r\n }\r\n return this._splittedSku\r\n }\r\n\r\n getMatchingFeatureName = () => {\r\n return this.getSplittedFeatureName()\r\n };\r\n\r\n getCustomFullDisplayName = () => {\r\n if (!this._customFullDisplayName) {\r\n this._customFullDisplayName = this.dbFeature.customDisplayName || \"\";\r\n switch (this.partId) {\r\n case \"vanity_faucet\":\r\n this._customFullDisplayName = this._customFullDisplayName\r\n .replace(\" With Lever Handles\", \"\")\r\n .replace(\" With Lever Handle\", \"\");\r\n break;\r\n case \"vanity_sink\":\r\n this._customFullDisplayName = this._customFullDisplayName\r\n .replace(\"4 Inch Centerset \", \"\")\r\n .replace(\"8 Inch Widespread \", \"\")\r\n .replace(\"Center Hole Only \", \"\");\r\n break;\r\n case \"shower_hose\":\r\n this._customFullDisplayName = this._customFullDisplayName.replace(\" Longlife\", \"\")\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n return this._customFullDisplayName\r\n };\r\n\r\n getModuleFeatureName = () => {\r\n // return this.partName.split(\" M_\")[0];\r\n return this.partName.split(\" M\")[0];\r\n };\r\n\r\n featureIsMatchingFilters(currentFeature, activeFilters, filters = []) {\r\n return filters.every(filter => {\r\n return activeFilters[filter.id]\r\n && currentFeature.dbFeature.filterValueIDs[filter.id]\r\n && currentFeature.dbFeature.filterValueIDs[filter.id].includes(activeFilters[filter.id][0])\r\n })\r\n }\r\n\r\n getActiveFeaturePartsAccordingToActiveFeature(fromFeature = this.activeFeature, activeFeatureConditions = []) {\r\n let activeFeatureParts = [];\r\n if (fromFeature && fromFeature.partNumber) {\r\n let activeFeaturePart;\r\n const name1 = fromFeature.getSplittedFeatureName();\r\n // console.log(\"name1\", name1);\r\n let arrayOfConditions = activeFeatureConditions.length\r\n ? activeFeatureConditions\r\n : this.getActiveFeatureConditions(fromFeature);\r\n // if (this.partId === \"right_wall\") {\r\n // arrayOfConditions = arrayOfConditions.filter(condition => condition.propName !== \"MirrorSize\");\r\n // }\r\n if (this.getAdditionalPartsConditions) {\r\n arrayOfConditions = this.getAdditionalPartsConditions(arrayOfConditions); // modify or extend parts conditions\r\n }\r\n activeFeatureParts = this.featuresParts.filter((feature) => name1 === feature.getSplittedFeatureName());\r\n // console.log(\"this.featuresParts\", this.featuresParts);\r\n // console.log(\"activeFeatureParts\", activeFeatureParts);\r\n if (activeFeatureParts.length) {\r\n activeFeaturePart = activeFeatureParts.find((feature) => {\r\n return feature.matchesMetaForArrayOfConditions(arrayOfConditions)\r\n });\r\n if (!activeFeaturePart) {\r\n activeFeaturePart = activeFeatureParts[0];\r\n }\r\n }\r\n activeFeatureParts = activeFeaturePart ? [activeFeaturePart] : [];\r\n activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n }\r\n return activeFeatureParts\r\n }\r\n\r\n checkIfFeaturePartIsMatching() {\r\n if (this.activeFeatureParts && this.activeFeatureParts.length) {\r\n let activeFeatureConditions = this.getActiveFeatureConditions();\r\n if (this.getAdditionalPartsConditions) {\r\n activeFeatureConditions = this.getAdditionalPartsConditions(activeFeatureConditions); // modify or extend parts conditions\r\n }\r\n const name1 = this.activeFeature.getSplittedFeatureName();\r\n const activeFeaturePart = this.activeFeatureParts[0];\r\n if (!(activeFeaturePart.matchesMetaForArrayOfConditions(activeFeatureConditions)\r\n && name1 === activeFeaturePart.getSplittedFeatureName())) {\r\n this.activeFeatureParts = this.setActiveFeatureParts(this.activeFeature, activeFeatureConditions);\r\n }\r\n } else {\r\n this.activeFeatureParts = this.setActiveFeatureParts();\r\n }\r\n }\r\n\r\n setActiveFeatureParts(fromFeature = this.activeFeature, activeFeatureConditions = []) {\r\n if (!this.hasAdditionalParts) {\r\n return []\r\n }\r\n return this.getActiveFeaturePartsAccordingToActiveFeature(fromFeature, activeFeatureConditions);\r\n }\r\n\r\n\r\n // OLD SHOWER LOGIC\r\n\r\n rememberPreviousSelection(shower, currentActiveFeature) {\r\n const layoutAbbr = shower.layout.getCurrentLayoutAbbreviation();\r\n const currentShowerBodyId = IntermediatePart.getCurrentShowerBodyId(shower);\r\n const wallConfiguration = shower.layout.parts[\"Shower Tub Combo\"] && shower.layout.parts[\"Shower Tub Combo\"].wallConfiguration;\r\n if (this.currentShowerBodyId !== currentShowerBodyId && currentActiveFeature && !currentActiveFeature.partName.includes(\"laceholder\")) {\r\n if (!this.previouslySelectedFeatures[layoutAbbr]) {\r\n this.previouslySelectedFeatures[layoutAbbr] = {}\r\n }\r\n this.previouslySelectedFeatures[layoutAbbr][this.currentShowerBodyId] = currentActiveFeature; // remember previous active item\r\n if (wallConfiguration\r\n && wallConfiguration.features.some(feature => feature.showerBodyId === this.currentShowerBodyId)) {\r\n wallConfiguration.features.forEach((wallConfigurationFeature) => { // remember previous active item for all wall conf\r\n this.previouslySelectedFeatures[layoutAbbr][wallConfigurationFeature.showerBodyId] = currentActiveFeature;\r\n })\r\n }\r\n }\r\n this.currentShowerBodyId = currentShowerBodyId; // set new shower type\r\n }\r\n\r\n setDefaultAccordingToPreviousSelect(shower, filteredFeatures, hardCodedDefaultName, placeholderDefaultName = \"laceholder\") {\r\n const layoutAbbr = shower.layout.getCurrentLayoutAbbreviation();\r\n const currentShowerBodyId = IntermediatePart.getCurrentShowerBodyId(shower);\r\n // console.log('currentShowerBodyId', currentShowerBodyId);\r\n // console.log('this.previouslySelectedFeatures', this.previouslySelectedFeatures);\r\n\r\n if (this.currentShowerBodyId !== currentShowerBodyId\r\n && this.previouslySelectedFeatures[layoutAbbr]\r\n && this.previouslySelectedFeatures[layoutAbbr][currentShowerBodyId]\r\n && filteredFeatures.some(f => f.dbFeature.id === this.previouslySelectedFeatures[layoutAbbr][currentShowerBodyId].dbFeature.id)) {\r\n this.activeFeature = this.previouslySelectedFeatures[layoutAbbr][currentShowerBodyId]; // restore from previous chosen\r\n } else {\r\n const hardCodedDefault = hardCodedDefaultName && filteredFeatures.find((feature) => {\r\n return !feature.notAvailableInVisualizer && feature.dbFeature.displayName && feature.dbFeature.displayName.includes(hardCodedDefaultName);\r\n });\r\n this.activeFeature = hardCodedDefault || filteredFeatures[0];\r\n }\r\n const placeholderDefault = filteredFeatures.find((feature) => {\r\n return !feature.notAvailableInVisualizer && feature.dbFeature.displayName\r\n && feature.dbFeature.displayName.includes(placeholderDefaultName);\r\n });\r\n this.placeholderFeature = placeholderDefault || null;\r\n }\r\n\r\n canDisplayDemoPoint() {\r\n return true\r\n }\r\n\r\n /** shower door, fixture methods **/\r\n static getCurrentShowerBodyId(shower) {\r\n let currentShowerBodyId = \"\";\r\n const showerTubComboIsActive = shower.showerTubComboIsActive();\r\n if (!showerTubComboIsActive && shower.showerBody && shower.showerBody.activeFeature) {\r\n currentShowerBodyId = shower.showerBody.activeFeature.showerBodyId;\r\n } else if (showerTubComboIsActive && shower.layout.parts[\"Shower Tub Combo\"]\r\n && shower.layout.parts[\"Shower Tub Combo\"].wallConfiguration\r\n && shower.layout.parts[\"Shower Tub Combo\"].wallConfiguration.activeFeature) {\r\n currentShowerBodyId = shower.layout.parts[\"Shower Tub Combo\"].wallConfiguration.activeFeature.showerBodyId;\r\n }\r\n return currentShowerBodyId\r\n }\r\n\r\n canBeEnabled() {\r\n const {wizardActiveItem, wizardSelectedValues, wizardActiveStep} = store.getState().wizardState;\r\n if (wizardActiveItem && wizardActiveItem.hideItems && wizardActiveItem.wizardGroups\r\n && wizardActiveItem.wizardGroups.length\r\n && wizardActiveItem.wizardGroups.some(wizardGroup => wizardGroup.groupName === (this.dbName || this.partName))\r\n && !Object.keys(wizardSelectedValues).some(key => key <= wizardActiveStep && wizardSelectedValues[key].partId === this.partId)) {\r\n return false // do not enable feature group if it uses hide items (shower wizard issue)\r\n }\r\n return true\r\n }\r\n\r\n /**\r\n * @param position {string}\r\n * @param clickedFeature {featureInterface}\r\n * @returns {[featureInterface]}\r\n */\r\n checkConflictingPosition(position, clickedFeature) {\r\n if (!position || !clickedFeature || !this.conflictingPositions\r\n || ((clickedFeature.partId === \"shower_seats\")\r\n && !clickedFeature.dbFeature.sharedFeatureName.includes(\"Comfort Plus\"))) { // hardcode - should be metadata here\r\n return []\r\n }\r\n const accParent = this.getParent();\r\n let conflictingPositions = [];\r\n this.conflictingPositions.forEach(partId => {\r\n const relItem = accParent.layout.getFeatureGroupByPartId(partId);\r\n if (relItem && !relItem.disabled && relItem.layerPositions && relItem.layerPositions[position]) {\r\n if ((clickedFeature.partId === \"valve_trim\")\r\n && !relItem.layerPositions[position].dbFeature.sharedFeatureName.includes(\"Comfort Plus\")) {\r\n // hardcode - should be metadata here. for now only Comfort Plus are conflicting\r\n return\r\n }\r\n conflictingPositions.push(relItem.layerPositions[position])\r\n }\r\n });\r\n return conflictingPositions\r\n }\r\n\r\n applyConflictingPosition(position, clickedFeature) {\r\n const conflictingPositions = this.checkConflictingPosition(position, clickedFeature);\r\n conflictingPositions.forEach(feature => {\r\n const parent = feature.getParent();\r\n parent.layerPositions[position] = null;\r\n })\r\n }\r\n\r\n}\r\n","import imagePolygon from \"./imagePolygon\";\r\nimport {UseFullSizeImages} from \"../config\";\r\n\r\nconst KIOSK_BVR_Root = document.kvConfig.imageServer + \"/brv/\";\r\nconst KIOSK_BV5_Root = document.kvConfig.imageServer + \"/bv5/\";\r\n\r\nconst KIOSK_KV_Root = document.kvConfig.imageServer + \"/kv4/\";\r\nconst KIOSK_KV5_Root = document.kvConfig.imageServer + \"/kv5/\";\r\n\r\nconst S3_BVR_Root = 'https://brv.s3-accelerate.amazonaws.com/';\r\nconst S3_BV5_Root = document.kvConfig.visualizerType === \"bvLook\"\r\n ? 'https://qc-bv5.s3-accelerate.amazonaws.com/'\r\n : 'https://qc-bv5.s3.amazonaws.com/';\r\nconst S3_BV6_Root = 'https://qc-fp5.s3.amazonaws.com/';\r\n\r\nconst S3_KV4_Root = 'https://kv4.s3-accelerate.amazonaws.com/';\r\nconst S3_KV5_Root = 'https://kv5.s3-accelerate.amazonaws.com/';\r\n//const S3_BVR_Root = 'http://s3.gfd.us/';\r\n\r\nconst KIOSK_FEATURES_Root = document.kvConfig.imageServer + \"/features-thumbnails/\";\r\nconst S3_FEATURES_Root = 'https://features-thumbnails.s3-accelerate.amazonaws.com/';\r\nconst S3_FILTERS_Root = 'https://s3.amazonaws.com/';\r\n\r\nexport const THUMBNAIL_SIZES = {\r\n small: `_100x100`,\r\n medium: `_175x175`,\r\n large: `_400x400`,\r\n}\r\nexport const LAYERS_SIZES = {\r\n normal: {\r\n width: 1620,\r\n height: 1080,\r\n },\r\n full_hd: {\r\n width: 1920,\r\n height: 1080,\r\n },\r\n full_hd_large: {\r\n width: 2880,\r\n height: 1620,\r\n },\r\n large: {\r\n width: 3000,\r\n height: 2000,\r\n },\r\n}\r\n\r\n/**\r\n * Case insensitive string inclusion\r\n * @param s3BindingName {string}\r\n * @param visualizer {string}\r\n * @param isCropped {boolean}\r\n * @param bucketName {string}\r\n * @returns {string}\r\n */\r\nexport function s3Path(s3BindingName, visualizer, isCropped = false, bucketName = \"\") {\r\n let bvr_root = document.kvConfig.kioskMode ? KIOSK_BVR_Root : S3_BVR_Root;\r\n let bv5_root = document.kvConfig.kioskMode ? KIOSK_BV5_Root : S3_BV5_Root;\r\n let kv4_root = document.kvConfig.kioskMode ? KIOSK_KV_Root : S3_KV4_Root;\r\n let kv5_root = document.kvConfig.kioskMode ? KIOSK_KV5_Root : S3_KV5_Root;\r\n let bv6_root = document.kvConfig.kioskMode ? KIOSK_KV5_Root : S3_BV6_Root;\r\n // https://brv.s3.amazonaws.com/features/All%20-%20Background%20-%20Default.png\r\n let s3Root = \"\";\r\n switch (visualizer) {\r\n case \"bv\":\r\n s3Root = document.kvConfig.toolVersion === 5 || document.kvConfig.toolVersion === 6 ? bv5_root : bvr_root;\r\n break;\r\n case \"kv\":\r\n s3Root = document.kvConfig.toolVersion === 5 || document.kvConfig.toolVersion === 6 ? kv5_root : kv4_root;\r\n break;\r\n case \"fireplace\":\r\n s3Root = bv6_root;\r\n break;\r\n default:\r\n s3Root = `https://${bucketName}.s3.amazonaws.com/`\r\n // console.error(\"undefined visualizer\", visualizer, s3BindingName);\r\n break;\r\n }\r\n let url = s3Root + s3BindingName;\r\n switch (document.kvConfig.layersSize) {\r\n case \"full_hd\":\r\n url += UseFullSizeImages || isCropped ? \".png\" : \"_1920x1080.png\"\r\n break;\r\n default:\r\n url+= UseFullSizeImages || isCropped ? \".png\" : \"_1620x1080.png\"\r\n }\r\n return encodeURI(url).replace(new RegExp('#', 'g'), '%23');\r\n}\r\n\r\nexport function s3FilterImagePath(imageThumbnail) {\r\n return imageThumbnail ? `${S3_FILTERS_Root}filter-images/${imageThumbnail.replace(\".png\", \"\")}.png` : \"\";\r\n}\r\n\r\n// export function s3FeatureImagePath(imageThumbnail, smallThumbnail = false, largeThumbnail = false) {\r\n// const features_root = document.kvConfig.kioskMode ? KIOSK_FEATURES_Root : S3_FEATURES_Root;\r\n// const mobileThumbnailPath = `_100x100`;\r\n// const desktopThumbnailPath = `_175x175`;\r\n// return smallThumbnail\r\n// ? `${features_root}feature-${imageThumbnail + mobileThumbnailPath}.png`\r\n// : `${features_root}feature-${largeThumbnail ? imageThumbnail : imageThumbnail + desktopThumbnailPath}.png`;\r\n// }\r\nexport function s3FeatureImagePath(imageThumbnail, size) {\r\n const features_root = document.kvConfig.kioskMode ? KIOSK_FEATURES_Root : S3_FEATURES_Root;\r\n return size\r\n ? `${features_root}feature-${imageThumbnail + size}.png`\r\n : `${features_root}feature-${imageThumbnail}.png` // full image path\r\n}\r\n\r\nexport function className(instance) {\r\n if(instance && instance.constructor)\r\n return instance.constructor.name;\r\n console.log(\"Instance constructor not found\", instance);\r\n return \"\";\r\n}\r\n\r\nexport function ignoreDefault(e) {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n}\r\n\r\n/**\r\n *\r\n * @param hayStack {string}\r\n * @param needle {string}\r\n * @return {boolean}\r\n */\r\nexport function iStartWith(hayStack, needle) {\r\n return hayStack ? hayStack.toLowerCase().startsWith(needle.toLowerCase()) : false\r\n}\r\n\r\n/**\r\n * Case insensitive string inclusion\r\n * @param hayStack {string}\r\n * @param needle {string}\r\n * @returns {boolean}\r\n */\r\nexport function iIncludes(hayStack, needle) {\r\n return hayStack ? hayStack.toLowerCase().includes(needle.toLowerCase()) : false\r\n}\r\n\r\nexport function getNonce(length = 6) {\r\n let text = \"\";\r\n const possible = \"abcdefghijklmnopqrstuvwxyz0123456789\";\r\n for (let i = 0; i < length; i++) {\r\n text += possible.charAt(Math.floor(Math.random() * possible.length));\r\n }\r\n return text;\r\n}\r\n\r\n/**\r\n * Makes a case-insensitive string compare\r\n * @param s1 {string}\r\n * @param s2 {string}\r\n * @param needToUppercase {boolean}\r\n * @returns {boolean}\r\n */\r\nexport function iCmp(s1, s2, needToUppercase = false) {\r\n if (!s1 && !s2) {\r\n return true;\r\n }\r\n if (!s1 || !s2) {\r\n return false;\r\n }\r\n if (needToUppercase) {\r\n return s1.toUpperCase() === s2.toUpperCase()\r\n }\r\n return s1 === s2;\r\n}\r\n\r\nconst RgFeatureName = /^([\\w\\s\\d]+)\\s*-\\s*([\\w\\d\\s]+)\\s*([\\[\\(][(\\d\\w=;\\s_\\(\\):,]+[\\)\\]]\\s*)*$/i;\r\n\r\n/**\r\n * Split a full feature name into: GroupName, FeatureName\r\n * @param name {string} Full Feature Name GroupName - Name\r\n * @param groupName {string}\r\n * @returns {*}\r\n */\r\nexport function splitFeatureName(name, groupName) {\r\n if (groupName && (groupName !== \"Backsplash\")) {\r\n return {featureName: name, groupName}\r\n }\r\n name = name.replace(/\\\"-/g, \"in \"); // for example Backsplash - 4\"-6\" Backsplash -> Backsplash - 4in 6in Backsplash\r\n name = name.replace(/\\\"/g, \"in\"); // for example Radius - 1\" Radius -> Radius - 1in Radius\r\n const matches = RgFeatureName.exec(name);\r\n if (!matches) {\r\n return {}\r\n }\r\n return {\r\n groupName: matches[1].trim(),\r\n featureName: matches[2].trim(),\r\n }\r\n}\r\n\r\n\r\nexport function styleBkgImage(image) {\r\n return {backgroundImage: `url('${image}')`};\r\n}\r\n\r\nexport function getMetadataByDimensions(dimensions) {\r\n switch (dimensions) {\r\n case \"30X8\":\r\n case \"Full\":\r\n return \"Full\";\r\n case \"15X4\":\r\n case \"Half\":\r\n return \"Half\";\r\n case \"Pony\":\r\n return \"Pony\";\r\n default:\r\n return null;\r\n }\r\n}\r\n\r\n/**\r\n * Checked wheather an object is NULL, if not, calls the callback method with the object itself\r\n */\r\nexport function NN(obj, cb) {\r\n if (obj)\r\n cb(obj);\r\n}\r\n\r\n/**\r\n * returns clicked canvas coordinates as {x:value, y:value}\r\n */\r\nexport function getMousePos(evt, canvas) {\r\n const rect = canvas.getBoundingClientRect();\r\n return {\r\n x: evt.clientX - rect.left,\r\n y: evt.clientY - rect.top\r\n };\r\n}\r\n\r\nexport function getFilterGroupValues(feature, filterGroup) {\r\n return feature.dbFeature.fabFilterValueIDs[filterGroup.id] || feature.dbFeature.filterValueIDs[filterGroup.id]\r\n}\r\nexport const isFeatureHasFilterValue = (feature, filterValue) => {\r\n let testFabFilter = feature.dbFeature.fabFilterValueIDs[filterValue.filterGroup_id] &&\r\n feature.dbFeature.fabFilterValueIDs[filterValue.filterGroup_id].some(filterValueId => filterValueId === filterValue.id)\r\n let testFilter = feature.dbFeature.filterValueIDs[filterValue.filterGroup_id] &&\r\n feature.dbFeature.filterValueIDs[filterValue.filterGroup_id].some(filterValueId => filterValueId === filterValue.id)\r\n\r\n return testFabFilter || testFilter;\r\n}\r\nexport function getFilterGroupValue(featureFilterValueId, filterGroup) {\r\n return filterGroup.values.find(val => val.id === featureFilterValueId);\r\n}\r\nexport function getFilterGroupValueByName(name, filterGroup) {\r\n return filterGroup.values.find(val => val.value === name);\r\n}\r\n\r\nexport const mergeFilterObjects = (filterValueIDs, fabFilterValueIDs) => {\r\n let unitedFilterValueIds = Object.assign({}, filterValueIDs || {}); // 1st create duplicate object\r\n Object.keys(fabFilterValueIDs || {}).forEach((filterKey) => {\r\n if (unitedFilterValueIds[filterKey]) { // group exist\r\n unitedFilterValueIds[filterKey] = [\r\n ...unitedFilterValueIds[filterKey],\r\n ...fabFilterValueIDs[filterKey]\r\n ];\r\n } else {\r\n unitedFilterValueIds[filterKey] = fabFilterValueIDs[filterKey] // set new key\r\n }\r\n });\r\n return unitedFilterValueIds\r\n}\r\n\r\nexport function getAllFeatureFilters(feature) {\r\n return mergeFilterObjects(feature.dbFeature.filterValueIDs, feature.dbFeature.fabFilterValueIDs)\r\n}\r\n\r\n/**\r\n * Filters features according to received filters\r\n * @param feature {featureInterface}\r\n * @param filters {Object} array of objects with filters: [{ 18: 111 }, {5: 12}] etc.\r\n * @returns {Array}\r\n */\r\nexport function featureHasSelectedFilters(feature, filters) {\r\n const featureFilterValueIds = getAllFeatureFilters(feature);\r\n return filters.every(filterObject => {\r\n return featureFilterValueIds[filterObject.filterGroupId]\r\n && featureFilterValueIds[filterObject.filterGroupId].some(filterId => filterObject.filterId === filterId)\r\n })\r\n}\r\n\r\n/**\r\n * Filters features according to received filters\r\n * @param features {Array} Array of features\r\n * @param filters {[navigationFilterValueInterface]} array with filters: {filterId: 9, filterGroupId: 5} // old logic object -> { 18: 111, 5: 12 } etc.\r\n * @returns {Array}\r\n */\r\nexport function filterFeaturesByValues(features, filters) {\r\n return features.filter(feature => {\r\n let unitedFilterValueIds = getAllFeatureFilters(feature);\r\n const newFiltersArray = [];\r\n filters.forEach((filterObject) => {\r\n const existingFilterGroup = newFiltersArray.find(filterGroupObject => {\r\n return filterGroupObject.filterGroupId === filterObject.filterGroupId\r\n });\r\n if (filterObject.filterId) {\r\n if (existingFilterGroup) {\r\n existingFilterGroup.filterValues.push(filterObject.filterId)\r\n } else {\r\n newFiltersArray.push({\r\n filterGroupId: filterObject.filterGroupId,\r\n filterValues: [filterObject.filterId]\r\n })\r\n }\r\n }\r\n });\r\n return newFiltersArray.every(filterObject => {\r\n const existingFeatureFilter = unitedFilterValueIds[filterObject.filterGroupId];\r\n return existingFeatureFilter && existingFeatureFilter.some(filterValue => {\r\n return filterObject.filterValues.some(filVal => filVal === filterValue)\r\n })\r\n })\r\n });\r\n}\r\n\r\nexport function scrollToDivInArea(div, area) {\r\n const divOffset = div.offset();\r\n if (divOffset) {\r\n area.animate({\r\n scrollLeft: divOffset.left - area.offset().left + area.scrollLeft() - area.width()/2 + div.width()/2\r\n }, 600);\r\n }\r\n}\r\n\r\nexport function getTranslateX(myElement) {\r\n const style = window.getComputedStyle(myElement);\r\n const matrix = new window.WebKitCSSMatrix(style.webkitTransform);\r\n return matrix.m41;\r\n}\r\n\r\nexport function reorder(array, indexA, indexB) {\r\n const tmp = array[indexA];\r\n array[indexA] = array[indexB];\r\n array[indexB] = tmp;\r\n return array\r\n}\r\n\r\n/**\r\n * requestAnim shim layer by Paul Irish\r\n */\r\nconst updateRate = 1000 / 60; //ticks per second in miliseconds\r\nexport function requestAnimFrame() {\r\n return window.requestAnimationFrame ||\r\n window.webkitRequestAnimationFrame ||\r\n window.mozRequestAnimationFrame ||\r\n window.oRequestAnimationFrame ||\r\n window.msRequestAnimationFrame ||\r\n function(callback){\r\n window.setTimeout(callback, updateRate);\r\n };\r\n}\r\n\r\n/**\r\n * checks for mobile state\r\n */\r\nexport function isTouchDevice() { // https://stackoverflow.com/questions/4817029/whats-the-best-way-to-detect-a-touch-screen-device-using-javascript\r\n const prefixes = ' -webkit- -moz- -o- -ms- '.split(' ');\r\n const mq = function(query) {\r\n return window.matchMedia(query).matches;\r\n };\r\n\r\n if (('ontouchstart' in window) || window.DocumentTouch && document instanceof window.DocumentTouch) {\r\n return true;\r\n }\r\n\r\n // include the 'heartz' as a way to have a non matching MQ to help terminate the join\r\n // https://git.io/vznFH\r\n const query = ['(', prefixes.join('touch-enabled),('), 'heartz', ')'].join('');\r\n return mq(query);\r\n}\r\n\r\n/**\r\n * creates a layer polygon https://stackoverflow.com/questions/23983461/creating-a-path-from-the-edge-of-an-image\r\n */\r\n\r\nexport function makeLayerPolygon(layer, image, width, height) {\r\n const fakeCanvas = document.createElement('canvas');\r\n fakeCanvas.setAttribute('height', `${height}px`);\r\n fakeCanvas.setAttribute('width', `${width}px`);\r\n const context2D = fakeCanvas.getContext(\"2d\");\r\n\r\n // step 3 - make canvas layer 0.5 transparent\r\n context2D.globalAlpha = 0.5;\r\n\r\n // step 4 - put layer image on fake canvas\r\n context2D.clearRect(0, 0, fakeCanvas.width, fakeCanvas.height);\r\n context2D.drawImage(image, 0, 0);\r\n\r\n const imgData = context2D.getImageData(0,0, width, height);\r\n const layerPolygon = {\r\n layer,\r\n img: image,\r\n polygon: imagePolygon(imgData.data, width, height, layer.image)\r\n };\r\n // console.log('layerPolygon created!', layerPolygon);\r\n return layerPolygon\r\n}\r\n/**\r\n * checks if point is inside the polygon\r\n */\r\nexport function pnpoly(points, test) {\r\n let i, j, c = false;\r\n for (i = 0, j = points.length - 1; i < points.length; j = i++) {\r\n if (((points[i][1] > test.y) !== (points[j][1] > test.y)) &&\r\n (test.x < (points[j][0] - points[i][0]) * (test.y - points[i][1])\r\n / (points[j][1] - points[i][1]) + points[i][0])) {\r\n c = !c;\r\n }\r\n }\r\n return c;\r\n}\r\n\r\nexport function base64ToBlob(base64, mime) {\r\n mime = mime || '';\r\n var sliceSize = 1024;\r\n var byteChars = window.atob(base64);\r\n var byteArrays = [];\r\n for (var offset = 0, len = byteChars.length; offset < len; offset += sliceSize) {\r\n var slice = byteChars.slice(offset, offset + sliceSize);\r\n var byteNumbers = new Array(slice.length);\r\n for (var i = 0; i < slice.length; i++) {\r\n byteNumbers[i] = slice.charCodeAt(i);\r\n }\r\n var byteArray = new window.Uint8Array(byteNumbers);\r\n byteArrays.push(byteArray);\r\n }\r\n return new Blob(byteArrays, {type: mime});\r\n}\r\nexport function downloadCanvasImageById(canvasId) {\r\n const canvas = document.getElementById(canvasId);\r\n // console.log('canvasId', canvasId);\r\n // console.log('canvas', canvas);\r\n const imageUrl = canvas.toDataURL();\r\n var base64ImageContent = imageUrl.replace(/^data:image\\/(png|jpg);base64,/, \"\");\r\n var blob = base64ToBlob(base64ImageContent, 'image/png');\r\n var a = document.createElement(\"a\");\r\n document.body.appendChild(a);\r\n a.style = \"display: none\";\r\n var url = window.URL.createObjectURL(blob);\r\n a.href = url;\r\n a.download = \"bathroom-visualizer.png\";\r\n a.click();\r\n window.URL.revokeObjectURL(url);\r\n}\r\n\r\nexport const toBoolean = (value) => {\r\n if (typeof (value) === 'string') {\r\n value = value.toLowerCase();\r\n }\r\n switch (value) {\r\n case true:\r\n case \"true\":\r\n case 1:\r\n case \"1\":\r\n case \"on\":\r\n case \"yes\":\r\n return true;\r\n default:\r\n return false;\r\n }\r\n};\r\n\r\nexport const capitalizeFirstLetters = (string) => {\r\n return string.replace(/(^\\w|\\s\\w)/g, m => m.toUpperCase()) // ^\\w - first character of the string, | - or, \\s\\w - first character after whitespace, (^\\w|\\s\\w) - Capture the pattern, g - Flag: Match all occurrences\r\n}\r\n\r\nexport const isVisualizerRoute = () => {\r\n return window.location.hash.includes(\"visualizer\") || (document.kvConfig.visualizerOnly && window.location.hash === \"#/\")\r\n}\r\n\r\nexport const convertImgToBase64URL = (url, outputFormat = \"image/jpeg\") => {\r\n return new Promise((resolve) => {\r\n const img = new Image();\r\n img.crossOrigin = 'Anonymous';\r\n img.onerror = (e) => {\r\n console.log(\"couldn't load receipt logo image :(\", e)\r\n resolve(\"\");\r\n };\r\n img.onload = function () {\r\n let canvas = document.createElement('CANVAS');\r\n const ctx = canvas.getContext('2d');\r\n let dataURL = \"\";\r\n canvas.height = img.height;\r\n canvas.width = img.width;\r\n ctx.drawImage(img, 0, 0, img.width, img.height);\r\n if (url && url.includes(\".png\")) {\r\n outputFormat = \"image/png\";\r\n }\r\n dataURL = canvas.toDataURL(outputFormat);\r\n canvas = null;\r\n resolve(dataURL);\r\n };\r\n img.src = url;\r\n });\r\n}\r\n","import takeRight from \"lodash/takeRight\";\r\nimport isEqual from \"lodash/isEqual\";\r\n\r\nimport {getCurrentLayout, getCurrentRoomType} from \"../../appLayout\";\r\nimport {\r\n browserIsSafari,\r\n getCartItemObject,\r\n getFeatureIsLocked,\r\n getRelatedFeaturesFromLayout,\r\n getShareUrl\r\n} from \"../../../misc/helpers\";\r\nimport {checkIfFeatureCanBeAddedToTheCart, getLookList} from \"./lookFunctions\";\r\nimport {shareImage} from \"../../bvComponent/core/assets\";\r\nimport {loaderDisable, loaderEnable} from \"../../ui/loaderView\";\r\nimport {saveQuote} from \"../../../api/server-api\";\r\nimport {setAmazonImageUrl} from \"../../../actions/serverFunctions\";\r\nimport {getShareConfig, SHARE_BUTTONS} from \"./lookSideBar/lookSidebarModals/lookSideBarShareButtons\";\r\nimport store from \"../../../store\";\r\nimport {LOOK_ROOM_TYPES, LOOK_WALLS} from \"../core/constants\";\r\nimport {IS_LOOK_JOURNEY, IS_PRODUCT_JOURNEY} from \"../../../config\";\r\nimport {allowCheckForCollection} from \"../grohe/groheNavigation/groheFunctions\";\r\nimport {CART_ITEM_ADDED_BY} from \"../../shoppingCart/cartItemInterface\";\r\nimport {isFeatureEnabled} from \"../../../misc/displayLogic\";\r\nimport Cabinet from \"../../kvSceneComponent/core/parts/cabinet\";\r\nimport {checkIfLookFeaturesReceived, getAdditionalFeaturesOnScroll} from \"../../../api/look-api\";\r\nimport {getCurrentGroups, getFeatureGroupFromWizardGroup} from \"./lookMain/lookWizard/lookWizardFunctions\";\r\n\r\n/**\r\n * disable Feature common function\r\n * @param feature {featureInterface}\r\n * @param updateLookCartItem {function}\r\n */\r\nexport const disableFeature = async (feature, updateLookCartItem = null) => {\r\n if (!feature) {\r\n return\r\n }\r\n switch (feature.partId) {\r\n case \"hood\": {\r\n const cabinetParent = feature.getParent().getParent().layout.parts[Cabinet.id];\r\n if (cabinetParent && cabinetParent.topCabinet && !cabinetParent.topCabinet.allFeaturesReceived) {\r\n loaderEnable();\r\n await getAdditionalFeaturesOnScroll(cabinetParent.topCabinet)\r\n loaderDisable();\r\n }\r\n break;\r\n }\r\n case \"sink\": {\r\n const cabinetParent = feature.getParent().getParent().layout.parts[Cabinet.id];\r\n if (cabinetParent\r\n && ((cabinetParent.bottomCabinet && !cabinetParent.bottomCabinet.allFeaturesReceived)\r\n || (cabinetParent.bottomHandle && !cabinetParent.bottomHandle.allFeaturesReceived))) {\r\n loaderEnable();\r\n if (cabinetParent.bottomCabinet && !cabinetParent.bottomCabinet.allFeaturesReceived) {\r\n await getAdditionalFeaturesOnScroll(cabinetParent.bottomCabinet)\r\n }\r\n if (cabinetParent.bottomHandle && !cabinetParent.bottomHandle.allFeaturesReceived) {\r\n await getAdditionalFeaturesOnScroll(cabinetParent.bottomHandle)\r\n }\r\n loaderDisable();\r\n }\r\n break;\r\n }\r\n case \"center_island_cabinet\": {\r\n const floorParent = feature.getParent().getParent().layout.parts[\"Floor\"];\r\n if (floorParent && floorParent.floorBody && !floorParent.floorBody.allFeaturesReceived) {\r\n loaderEnable();\r\n await getAdditionalFeaturesOnScroll(floorParent.floorBody)\r\n loaderDisable();\r\n }\r\n break;\r\n }\r\n case \"fridge\": {\r\n const cabinetParent = feature.getParent().getParent().layout.parts[\"Cabinet\"];\r\n if (cabinetParent && cabinetParent.topCabinet && !cabinetParent.topCabinet.allFeaturesReceived) {\r\n loaderEnable();\r\n await checkIfLookFeaturesReceived(cabinetParent.topCabinet)\r\n loaderDisable();\r\n }\r\n break;\r\n }\r\n default:\r\n break;\r\n }\r\n // console.log(\"removeFromCartArray\", removeFromCartArray);\r\n const featureGroup = feature.getParent();\r\n if (!featureGroup || !featureGroup.canBeDisabled) {\r\n return;\r\n }\r\n if (featureGroup.layerPositions) {\r\n Object.keys(featureGroup.layerPositions).forEach(position => {\r\n featureGroup.layerPositions[position] = null;\r\n })\r\n }\r\n featureGroup.disabled = true;\r\n featureGroup.disabledClick();\r\n if (updateLookCartItem && IS_LOOK_JOURNEY) {\r\n updateLookCartItem();\r\n }\r\n const layout = getCurrentLayout();\r\n layout.updateLocalStorage();\r\n}\r\n\r\n/**\r\n * enable Feature common function\r\n * @param feature {object}\r\n * @param addToCart {function}\r\n * @param qtActiveCategory {string}\r\n */\r\nexport const enableRelatedFeature = (feature, addToCart, qtActiveCategory) => {\r\n const featureIsLocked = getFeatureIsLocked(feature);\r\n if (featureIsLocked || feature.notAvailableInVisualizer) {\r\n return false\r\n }\r\n let relatedFeaturesToEnable = [];\r\n const layout = getCurrentLayout();\r\n switch (feature.partId) {\r\n case \"vanity_sink\":\r\n case \"vanity_faucet\": {\r\n const relatedPartId = feature.partId === \"vanity_sink\" ? \"vanity_faucet\" : \"vanity_sink\";\r\n const relatedFeatureGroup = layout.getFeatureGroupByPartId(relatedPartId);\r\n if (relatedFeatureGroup) {\r\n relatedFeatureGroup.disabled = false;\r\n Object.keys(relatedFeatureGroup.layerPositions).forEach(position => {\r\n if ((position !== \"C\" && feature.metaData.layerPosition === \"C\") || (feature.metaData.layerPosition !== \"C\" && position === \"C\")) {\r\n relatedFeatureGroup.layerPositions[position] = null; // erase sibling positions\r\n return\r\n }\r\n const someFeature = relatedFeatureGroup.getMatchingPositionFeature(position);\r\n if (someFeature) {\r\n relatedFeatureGroup.layerPositions[position] = someFeature;\r\n }\r\n })\r\n // } else if (relatedFeatureGroup && !relatedFeatureGroup.layerPositions[feature.metaData.layerPosition]) {\r\n // const someFeature = relatedFeatureGroup.getMatchingPositionFeature(feature.metaData.layerPosition);\r\n // if (someFeature) {\r\n // relatedFeaturesToEnable.push(someFeature);\r\n // relatedFeatureGroup.disabled = false;\r\n // relatedFeatureGroup.layerPositions[feature.metaData.layerPosition] = someFeature;\r\n // }\r\n }\r\n break;\r\n }\r\n case \"toilet\": {\r\n [\"toilet_brush\", \"paper_holder\"].forEach(partId => {\r\n const relatedFeatureGroup = layout.getFeatureGroupByPartId(partId);\r\n if (relatedFeatureGroup && relatedFeatureGroup.disabled && relatedFeatureGroup.activeFeature) {\r\n relatedFeatureGroup.disabled = false;\r\n relatedFeaturesToEnable.push(relatedFeatureGroup.activeFeature);\r\n }\r\n })\r\n break;\r\n }\r\n case \"bathtub_body\":\r\n case \"bathtub_fixture\": {\r\n const relatedPartId = feature.partId === \"bathtub_body\" ? \"bathtub_fixture\" : \"bathtub_body\";\r\n const relatedFeatureGroup = layout.getFeatureGroupByPartId(relatedPartId);\r\n if (relatedFeatureGroup && relatedFeatureGroup.disabled && relatedFeatureGroup.activeFeature) {\r\n relatedFeatureGroup.disabled = false;\r\n relatedFeaturesToEnable.push(relatedFeatureGroup.activeFeature);\r\n }\r\n break;\r\n }\r\n default:\r\n break;\r\n }\r\n if (relatedFeaturesToEnable.length && addToCart) {\r\n relatedFeaturesToEnable.forEach(relatedFeature => {\r\n if (checkIfFeatureCanBeAddedToTheCart(relatedFeature)) {\r\n addToCart([getCartItemObject(relatedFeature, 1, qtActiveCategory)]);\r\n }\r\n })\r\n }\r\n}\r\n\r\n/**\r\n * returns use or not lixil stock available quantity\r\n * @param fabricatorSettings {object}\r\n * @param feature {featureInterface}\r\n * @returns {boolean}\r\n */\r\nexport const shouldUseLixilAvailableQty = (fabricatorSettings, feature) => {\r\n if (!fabricatorSettings || !feature) {\r\n return false;\r\n }\r\n return (fabricatorSettings.enableASInventorySync && feature.dbFeature.isFromAsRoom)\r\n || (fabricatorSettings.enableGInventorySync && !feature.dbFeature.isFromAsRoom)\r\n}\r\n\r\n/**\r\n * returns lixil stock available quantity\r\n * @param feature {featureInterface}\r\n * @returns {boolean}\r\n */\r\nexport const isInStock = (feature) => {\r\n if (document.kvConfig.visualizerType !== \"bvLook\") {\r\n return true\r\n }\r\n const {settings} = store.getState().fabricatorState;\r\n if (shouldUseLixilAvailableQty(settings, feature)) {\r\n const bundledFeatures = getBundledFeatures(feature);\r\n if (bundledFeatures.length > 1) { // fix for ROUGH VALVE BODIES assigned on Shower Fixtures\r\n return bundledFeatures.some(relFeature => relFeature.dbFeature.lixilAvailableQty > 0)\r\n }\r\n return feature.dbFeature.lixilAvailableQty > 0\r\n }\r\n if (settings.useTrumbleApi && feature.quantityOptions && feature.quantityOptions.trumbleQty === \"0\") {\r\n return false\r\n }\r\n return true\r\n}\r\n/**\r\n * returns lixil stock available quantity for cart item\r\n * @param cartItem {cartItemInterface}\r\n * @returns {boolean}\r\n */\r\nexport const cartItemInStock = (cartItem) => {\r\n // return cartItem.relatedProductParent ? isInStock(cartItem.relatedProductParent) : isInStock(cartItem.cartFeature)\r\n return isInStock(cartItem.cartFeature)\r\n}\r\n\r\n/**\r\n * returns lixil sku first part 0328400.222 -> 0328400\r\n * @param sku {string}\r\n * @returns {string}\r\n */\r\nexport const getSkuWithoutDot = (sku) => {\r\n if (!sku) {\r\n return \"\"\r\n }\r\n return sku.split(\".\")[0]\r\n}\r\n\r\n/**\r\n * returns lixil stock available quantity for cart item\r\n * @param sku {string}\r\n * @returns {string}\r\n */\r\nexport const getProductIdFromSku = (sku) => {\r\n if (sku.includes(\".\")) {\r\n return getSkuWithoutDot(sku) // \"7075100.002\" => \"7075100\"\r\n }\r\n if (sku.includes(\"-\")) {\r\n return sku.split(\"-\")[0] // \"A8001L-RHO.020\" => \"A8001L-RHO\"\r\n }\r\n return sku.substr(0, 5) + \"_\" + sku.substr(sku.length - 1); // \"26635GN0\" => \"26635_0\"\r\n}\r\n\r\n/**\r\n * returns a list needed for integration\r\n * @param cartItems {array}\r\n * @param forCart {boolean}\r\n * @returns {array}\r\n */\r\nexport const getPostCartItemsList = (cartItems, forCart = false) => {\r\n return cartItems\r\n .filter(cartItem => {\r\n let match = !(cartItem.cartFeature.dbFeature.sharedFeatureName || \"\").includes(\"undle sku\")\r\n && (!featureIsBundle(cartItem.cartFeature, cartItems) || (forCart && cartItemInStock(cartItem)));\r\n if (match && forCart) {\r\n match = cartItem.quantity > 0 && cartItemInStock(cartItem) && !cartItem.isRemoved;\r\n }\r\n return match\r\n })\r\n .map(cartItem => {\r\n const sku = cartItem.cartFeature.dbFeature.sku || \"\";\r\n const lixilProductId = cartItem.cartFeature.dbFeature.lixilProductId || getProductIdFromSku(sku);\r\n return {\r\n \"VariantId\": sku, // \"26635GN0\"\r\n \"ProductId\": lixilProductId, // \"26635_0\"\r\n \"Quantity\": \"\" + cartItem.quantity // \"1\"\r\n }\r\n })\r\n}\r\n\r\n/**\r\n * @param feature {featureInterface}\r\n * @param cartItems {array}\r\n * @returns {boolean}\r\n */\r\nexport const featureIsBundle = (feature, cartItems) => {\r\n if (!feature) {\r\n return false\r\n }\r\n const relatedFeatures = getBundledFeatures(feature);\r\n return Array.isArray(relatedFeatures) && !!relatedFeatures.length && cartItems.some(cItem => {\r\n return cItem.relatedProductParent && cItem.relatedProductParent.dbFeature.id === feature.dbFeature.id;\r\n })\r\n}\r\n\r\n/**\r\n * returns bundled features\r\n * @param feature {featureInterface}\r\n * @returns {array}\r\n */\r\nexport const getBundledFeatures = (feature) => {\r\n if (Array.isArray(feature.dbFeature.bundledFeatures) && feature.dbFeature.bundledFeatures.length) {\r\n // console.log(\"relatedFeatures\", relatedFeatures);\r\n let {relatedFeaturesFound} = getRelatedFeaturesFromLayout(feature.dbFeature.bundledFeatures, feature);\r\n // console.log(\"relatedFeaturesFound\", relatedFeaturesFound);\r\n return relatedFeaturesFound\r\n }\r\n return []\r\n}\r\n\r\n/**\r\n * returns bundled features\r\n * @param feature {featureInterface}\r\n * @returns {array}\r\n */\r\nexport const getAvailableFeatureContent = (feature) => {\r\n if (!feature) {\r\n return []\r\n }\r\n const availableFeatureContent = []; // [\"description\", \"features\", \"reviews\", \"faq\"]\r\n if (feature.dbFeature.description) {\r\n availableFeatureContent.push(\"description\");\r\n }\r\n if (feature.dbFeature.subDescription) {\r\n availableFeatureContent.push(\"features\");\r\n }\r\n return availableFeatureContent\r\n}\r\n\r\n/**\r\n * returns bundled features\r\n * @param activePreset {number}\r\n * @param bvPresets {array}\r\n * @returns lookId {number}\r\n */\r\nexport const getLookId = (activePreset, bvPresets) => {\r\n const room = bvPresets.find(preset => preset.id === activePreset);\r\n return room ? room.lookId : 0\r\n}\r\n\r\n/**\r\n * returns URL start for look and product journeys\r\n * @param withSlash {boolean}\r\n * @returns string {string}\r\n */\r\nexport const getLookIdUrl = (withSlash = true) => {\r\n const {activePreset, bvPresets} = store.getState().bathroomVisualizerState;\r\n const lookId = getLookId(activePreset, bvPresets);\r\n return withSlash ? `/look-${lookId}/` : `/look-${lookId}`\r\n}\r\n\r\n/**\r\n * returns feature url name\r\n * @param feature {featureInterface}\r\n * @param withCategory {boolean}\r\n * @returns string {string}\r\n */\r\nexport const getFeatureUrl = (feature, withCategory = false) => {\r\n if (!feature || !feature.dbFeature) {\r\n return \"\"\r\n }\r\n\r\n let finalUrl = getLookIdUrl();\r\n const urlName = feature.dbFeature.sku || feature.dbFeature.sharedFeatureName; // check sku first! old support\r\n\r\n if (withCategory) {\r\n const urlPartId = feature.partId.replace(/_/gi, \"-\");\r\n return finalUrl + `${urlPartId}/${urlName}`\r\n } else {\r\n return finalUrl + urlName\r\n }\r\n}\r\n\r\n/**\r\n * returns category url\r\n * @param partId {string}\r\n * @returns string {string}\r\n */\r\nexport const getCategoryOnlyUrl = (partId = \"\") => {\r\n let finalUrl = getLookIdUrl();\r\n return finalUrl + partId.replace(/_/gi, \"-\")\r\n}\r\n\r\n/**\r\n * returns bundled features\r\n * @param updateCanvasCount {function}\r\n */\r\nexport const revertFeatureBeforeChange = (updateCanvasCount) => {\r\n if (IS_PRODUCT_JOURNEY) {\r\n return\r\n }\r\n const featureGroups = getLookList();\r\n if (featureGroups) {\r\n featureGroups.forEach(parentObject => {\r\n if (parentObject.featureGroup && parentObject.featureGroup.featureBeforeChange\r\n && checkIfFeatureCanBeAddedToTheCart(parentObject.featureGroup.featureBeforeChange)) {\r\n if (parentObject.featureGroup.layerPositions) {\r\n Object.keys(parentObject.featureGroup.layerPositions).forEach(position => {\r\n if (parentObject.featureGroup.layerPositions[position]) {\r\n const sameFeature = parentObject.featureGroup.getMatchingPositionFeature(position, parentObject.featureGroup.featureBeforeChange);\r\n if (sameFeature) {\r\n parentObject.featureGroup.layerPositions[position] = sameFeature;\r\n }\r\n }\r\n })\r\n }\r\n if (!parentObject.featureGroup.disabled) {\r\n parentObject.featureGroup.activeFeature = parentObject.featureGroup.featureBeforeChange;\r\n }\r\n parentObject.featureGroup.featureBeforeChange = null;\r\n updateCanvasCount();\r\n }\r\n })\r\n }\r\n}\r\n\r\n/**\r\n * returns filtered features by metadata field\r\n * @param navFeatures {object}\r\n * @param matchFeature {object}\r\n * @param metadataField {string}\r\n */\r\nexport const filterFeaturesByMetadata = (navFeatures, matchFeature, metadataField) => {\r\n return navFeatures.filter((navFeature) => {\r\n return navFeature.part.metaData[metadataField] && navFeature.part.metaData[metadataField].some((mType) => {\r\n return matchFeature.metaData[metadataField] &&\r\n matchFeature.metaData[metadataField].includes(mType)\r\n })\r\n })\r\n}\r\n\r\n/**\r\n * returns default camera preset\r\n * @param bvPresets {array}\r\n * @param lookId {string|number}\r\n * @returns lookId {number}\r\n */\r\nexport const getDefaultPresetByLook = (bvPresets, lookId) => {\r\n const numLookId = +lookId;\r\n const allMatchedPresets = bvPresets.filter((preset) => preset.lookId === numLookId);\r\n if (!allMatchedPresets.length) {\r\n return null\r\n }\r\n switch (numLookId) {\r\n case 5:\r\n return allMatchedPresets.find(preset => preset.scene === \"1\" && (preset.id === 22)) || allMatchedPresets[0];\r\n default:\r\n return allMatchedPresets.find(preset => preset.scene === \"1\")\r\n }\r\n}\r\n\r\n/**\r\n * open share link\r\n * @param buttonKey {string}\r\n * @param afterSaveUrl {string}\r\n * @param amazonImageUrl {string}\r\n */\r\nconst createShareUrl = (buttonKey, afterSaveUrl, amazonImageUrl) => {\r\n const shareUrl = afterSaveUrl; // || propsShareUrl;\r\n const shareImageUrl = amazonImageUrl || shareImage[document.kvConfig.visualizerType];\r\n switch (buttonKey) {\r\n case SHARE_BUTTONS.facebook: {\r\n const metaTag = document.querySelector('meta[property=\"og:image\"]');\r\n if (metaTag) {\r\n metaTag.setAttribute(\"content\", shareImageUrl);\r\n }\r\n var domain = takeRight(window.location.hostname.split('.'), 2);\r\n if(domain[0] == \"americanstandard-us\") {\r\n domain[0] = \"americanstandard.\" + domain[0];\r\n } else if(domain[0] == \"grohe\") {\r\n domain[0] = \"grohe.\" + domain[0];\r\n }\r\n const fbUrl = \"https://facebook.com/sharer/sharer.php?u=\";\r\n const qfUrl = window.location.protocol + \"//\" + domain.join('.') + \"/url?u=\";\r\n const splittedHost = window.location.host.split(\".\") // ['grohe', 'qkandb', 'net']\r\n const topLevelDomain = \".\" + splittedHost[splittedHost.length - 1]; // \".com\" or \".net\"\r\n\r\n const shareUrlSplitted = shareUrl.split(topLevelDomain)\r\n return fbUrl + qfUrl + shareUrlSplitted[0] + topLevelDomain + encodeURIComponent(shareUrlSplitted[1])\r\n }\r\n case SHARE_BUTTONS.pinterest: {\r\n const imageUrl = encodeURIComponent(shareImageUrl);\r\n return `//pinterest.com/pin/create/button/?url=${encodeURIComponent(shareUrl)}&media=${imageUrl}`\r\n }\r\n case SHARE_BUTTONS.twitter: {\r\n return `//twitter.com/share?url=${encodeURIComponent(shareUrl)}&text=Click Here to Design your Dream Bathroom!`\r\n }\r\n default:\r\n return \"\"\r\n }\r\n}\r\n\r\n/**\r\n * open share link\r\n * @param buttonKey {string}\r\n */\r\nconst getShareWindowReference = (buttonKey) => {\r\n switch (buttonKey) {\r\n case SHARE_BUTTONS.facebook: {\r\n // target: facebook-share-dialog\r\n return window.open(\"\", '_blank', getShareConfig({width: 630, height: 420}))\r\n }\r\n case SHARE_BUTTONS.pinterest: {\r\n return window.open(\"\", '_blank', getShareConfig({width: 880, height: 554}))\r\n }\r\n case SHARE_BUTTONS.twitter: {\r\n return window.open(\"\", '_blank', getShareConfig({width: 550, height: 470}))\r\n }\r\n default:\r\n return window.open()\r\n }\r\n}\r\n\r\n/**\r\n * save Quote and open share link\r\n * @param buttonKey {string}\r\n * @param propsShareUrl {string}\r\n * @param saveNeeded {boolean}\r\n * @param imageUrl {string}\r\n */\r\nexport const saveQuoteAndShare = async (buttonKey, propsShareUrl, saveNeeded = true, imageUrl = \"\") => {\r\n if (!propsShareUrl) {\r\n propsShareUrl = store.getState().serverState.shareUrl;\r\n }\r\n let windowReference = null;\r\n const isSafari = browserIsSafari();\r\n if (isSafari) {\r\n windowReference = getShareWindowReference(buttonKey);\r\n }\r\n let responseData = null;\r\n if (saveNeeded) {\r\n loaderEnable();\r\n responseData = await saveQuote({\r\n submit: true,\r\n showReceipt: false\r\n });\r\n if (!responseData) {\r\n return false\r\n }\r\n document.kvConfig.jobId = responseData.jobId;\r\n if (responseData.imageUrl) {\r\n imageUrl = responseData.imageUrl;\r\n store.dispatch(setAmazonImageUrl(responseData.imageUrl));\r\n }\r\n loaderDisable();\r\n }\r\n\r\n if (!isSafari) {\r\n windowReference = getShareWindowReference(buttonKey);\r\n }\r\n\r\n windowReference.location = createShareUrl(buttonKey, getShareUrl(document.kvConfig.jobId) || propsShareUrl, imageUrl);\r\n\r\n}\r\n\r\n/**\r\n * returns cart items array\r\n * @param neededFeature {featureInterface}\r\n * @param quantity {number}\r\n * @param qtActiveCategory {string}\r\n * @param addedBy {string}\r\n * @returns {array}\r\n */\r\nexport const getCartItemsArrayFromFeature = (neededFeature, quantity, qtActiveCategory, addedBy = CART_ITEM_ADDED_BY.user) => {\r\n const firstCartItem = getCartItemObject(neededFeature, quantity, qtActiveCategory);\r\n firstCartItem.addedBy = addedBy;\r\n let itemsToAdd = [firstCartItem];\r\n const relatedFeatures = getBundledFeatures(neededFeature);\r\n if (Array.isArray(relatedFeatures) && relatedFeatures.length) {\r\n relatedFeatures.forEach((relatedFeature) => {\r\n const cartItem = getCartItemObject(relatedFeature, quantity, qtActiveCategory);\r\n cartItem.relatedProductParent = neededFeature;\r\n cartItem.addedBy = addedBy;\r\n itemsToAdd.push(cartItem);\r\n })\r\n }\r\n return itemsToAdd\r\n}\r\n\r\n\r\n/**\r\n * Checks available meta options for feature\r\n * @param lookActiveFeature {featureInterface}\r\n * @param filterGroups {array}\r\n * @param metaName {string}\r\n * @returns {array} array of objects\r\n */\r\nexport const getSameFeatureWithAnotherMeta = (lookActiveFeature, filterGroups, metaName = \"MatchingFeature\") => {\r\n if (!lookActiveFeature) {\r\n return null\r\n }\r\n\r\n const parent = lookActiveFeature.getParent();\r\n const activeFeatureValue = Array.isArray(lookActiveFeature.metaData[metaName]) ? lookActiveFeature.metaData[metaName][0] : null;\r\n\r\n let optionFeatures = activeFeatureValue ? [{\r\n feature: lookActiveFeature,\r\n metaValue: activeFeatureValue\r\n }] : [];\r\n\r\n const layout = getCurrentLayout();\r\n const navItems = layout.designNavigationItems({part: parent}, {}, \"\", lookActiveFeature, true);\r\n const activeFeatureCollectionName = lookActiveFeature.getCollectionName(filterGroups);\r\n const customFullDisplayName = lookActiveFeature.getCustomFullDisplayName();\r\n\r\n for (let i = 0; i < navItems.length; i++) {\r\n const checkFeature = navItems[i].part;\r\n if ((checkFeature.dbFeature.sharedFeatureName === \"MatchingFeature\") && checkFeature.getCustomFullDisplayName() !== customFullDisplayName) {\r\n continue\r\n }\r\n if ((checkFeature.dbFeature.sharedFeatureName !== \"MatchingFeature\") && getSkusDifferences(checkFeature.dbFeature.sharedFeatureName, lookActiveFeature.dbFeature.sharedFeatureName) > 1) {\r\n continue\r\n }\r\n // // console.log(\"checkFeature\", checkFeature);\r\n const metaValue = Array.isArray(checkFeature.metaData[metaName]) ? checkFeature.metaData[metaName][0] : null;\r\n if (!metaValue) {\r\n continue\r\n }\r\n if (allowCheckForCollection(checkFeature) && (checkFeature.getCollectionName(filterGroups) !== activeFeatureCollectionName)) {\r\n continue\r\n }\r\n if ((metaName === \"MatchingFeature\") && lookActiveFeature.metaData[\"MatchingFeature\"] && !isEqual(lookActiveFeature.metaData[\"MatchingFeature\"], checkFeature.metaData[\"MatchingFeature\"])) {\r\n continue\r\n }\r\n if (optionFeatures.every(optFeature => optFeature.metaValue !== metaValue)) {\r\n optionFeatures.push({\r\n feature: checkFeature,\r\n metaValue\r\n })\r\n }\r\n }\r\n\r\n return optionFeatures\r\n\r\n};\r\n\r\nexport const getFeatureSectionIsHidden = (lookActiveFeature) => {\r\n return !lookActiveFeature || (LOOK_WALLS.includes(lookActiveFeature.partId) && !(\r\n lookActiveFeature.partId === \"front_wall\" && (document.kvConfig.visualizerType === \"Fireplace\")\r\n ))\r\n // const layout = getCurrentLayout();\r\n // return lookActiveFeature && (\r\n // (!layout.partIdExistInQtCategory(lookActiveFeature.partId, true) || LOOK_WALLS.includes(lookActiveFeature.partId)));\r\n}\r\n\r\n/**\r\n * returns parent feature group\r\n * @param lookFeature {featureInterface}\r\n * @param lookActiveCategory {string}\r\n * @returns {object} featureGroup\r\n */\r\nexport const getFeatureParent = (lookFeature, lookActiveCategory = \"\") => {\r\n if (lookFeature && lookFeature.getParent) {\r\n return lookFeature.getParent()\r\n }\r\n const layout = getCurrentLayout();\r\n return layout.getFeatureGroupByPartId(lookActiveCategory);\r\n}\r\n\r\n/**\r\n * returns feature property name\r\n * @param lookActiveFeature {featureInterface}\r\n * @returns {string}\r\n */\r\nexport const getPropertyToMatchActiveFeature = (lookActiveFeature) => {\r\n if (lookActiveFeature.dbFeature.sharedFeatureName) {\r\n // keep old logic, some features are missing the sku, so we have to have the code below\r\n return \"sharedFeatureName\"\r\n }\r\n // original check for other tools\r\n return \"sku\"\r\n}\r\n\r\n/**\r\n * Checks if list feature is currently active\r\n * @param lookFeature {featureInterface}\r\n * @param lookActiveFeature {featureInterface}\r\n * @param lookActiveCategory {string}\r\n * @param featureGroup {object}\r\n * @returns {boolean}\r\n */\r\nexport const getFeatureIsActive = (lookFeature, lookActiveFeature, lookActiveCategory = \"\", featureGroup) => {\r\n if (!lookFeature) {\r\n return false\r\n }\r\n let checkFeature = lookActiveFeature;\r\n if (!checkFeature && lookActiveCategory) {\r\n const parentFeatureGroup = featureGroup || getFeatureParent(lookFeature, lookActiveCategory);\r\n if (parentFeatureGroup) {\r\n checkFeature = parentFeatureGroup.activeNotInVisualizerFeature || parentFeatureGroup.activeFeature;\r\n }\r\n }\r\n return checkFeature && ((lookFeature.dbFeature.id === checkFeature.dbFeature.id)\r\n || (lookFeature.getSplittedFeatureName() === checkFeature.getSplittedFeatureName())\r\n )\r\n}\r\n\r\n/**\r\n * Checks if list feature is currently active\r\n * @param parentObject {object}\r\n * @param layoutType {number|string}\r\n * @param scene {number|string}\r\n * @param [position] {string}\r\n * @returns {boolean}\r\n */\r\nexport const removeLookPointFor = (parentObject, layoutType, scene, position) => {\r\n const layout = getCurrentLayout();\r\n if ((layout.type === layoutType) && (layout.scene === scene)) {\r\n if (position) {\r\n return parentObject.layerPosition !== position\r\n }\r\n return false\r\n }\r\n return true\r\n}\r\n\r\n/**\r\n * Checks if two strings are almost the same (to compare SKU\\s, for example 0328400.222 and 0328800.222)\r\n * @param sku1 {string}\r\n * @param sku2 {string}\r\n * @returns {number}\r\n */\r\nexport const getSkusDifferences = (sku1, sku2) => {\r\n if (sku1 === sku2) {\r\n return 0\r\n }\r\n let differences = 0;\r\n sku1.split(\"\").forEach((letter, letterIndex) => {\r\n if (!sku2[letterIndex] || letter !== sku2[letterIndex]) {\r\n differences++;\r\n }\r\n })\r\n return differences\r\n}\r\n\r\n/**\r\n * filters removed cartItems\r\n * @param cartItems {[cartItemInterface]}\r\n * @param withoutNotInStock {boolean}\r\n * @param withoutZeroQuantity {boolean}\r\n * @param parentsOnly {boolean}\r\n * @returns {[cartItemInterface]}\r\n */\r\nexport const filterCartItems = (cartItems, withoutNotInStock = false, withoutZeroQuantity = false, parentsOnly = false) => {\r\n return cartItems.filter(cItem => {\r\n if (withoutZeroQuantity && cItem.quantity < 1) {\r\n return false\r\n }\r\n if (withoutNotInStock) {\r\n // if (cItem.relatedProductParent && !isInStock(cItem.relatedProductParent)) {\r\n // return false\r\n // }\r\n if (!isInStock(cItem.cartFeature) || getBundledFeatures(cItem.cartFeature).length) {\r\n return false\r\n }\r\n }\r\n if (IS_PRODUCT_JOURNEY) {\r\n return cItem.addedBy === CART_ITEM_ADDED_BY.user && !cItem.isRemoved\r\n }\r\n if (parentsOnly) {\r\n return !cItem.relatedProductParent\r\n }\r\n return !cItem.isRemoved\r\n })\r\n}\r\n\r\n/**\r\n * sorts CartItems for List Page\r\n * @param cartItems {[cartItemInterface]}\r\n * @returns {[cartItemInterface]}\r\n */\r\nexport const sortCartItemsForListPage = (cartItems) => {\r\n return cartItems\r\n .filter(cItem => !cItem.relatedProductParent)\r\n .sort((a, b) => featureIsBundle(a.cartFeature, cartItems) - featureIsBundle(b.cartFeature, cartItems))\r\n .sort((a, b) => (b.addedBy === CART_ITEM_ADDED_BY.user) - (a.addedBy === CART_ITEM_ADDED_BY.user) || cartItemInStock(b) - cartItemInStock(a))\r\n}\r\n\r\n/**\r\n * returns array of deliveries\r\n * @param lookOpened {boolean}\r\n * @param lookActiveCategory {string}\r\n * @param lookActiveFeature {featureInterface}\r\n * @param lookCompatabilityAlert {object}\r\n * @returns {boolean}\r\n */\r\nexport const hideFeatureSection = (lookOpened, lookActiveCategory, lookActiveFeature, lookCompatabilityAlert) => {\r\n const layout = getCurrentLayout();\r\n let showFeaturesOnly = !lookCompatabilityAlert.visible && lookOpened && lookActiveCategory && !layout.partIdExistInQtCategory(lookActiveCategory, true);\r\n if (!showFeaturesOnly && lookActiveFeature && !lookCompatabilityAlert.visible) {\r\n showFeaturesOnly = !isFeatureEnabled(lookActiveFeature, \"quotingTool\");\r\n }\r\n return showFeaturesOnly\r\n}\r\n\r\n/**\r\n * returns array of deliveries\r\n * @param partId {string}\r\n * @param layout {object}\r\n * @param fabricatorState {object}\r\n * @returns {boolean}\r\n */\r\nexport const hardCodelyRemovedClicking = (partId, layout = getCurrentLayout(), fabricatorState = null) => {\r\n if (document.kvConfig.visualizerType !== \"bvLook\") {\r\n return false\r\n }\r\n if (getCurrentRoomType(layout) === LOOK_ROOM_TYPES.as) {\r\n if (fabricatorState && fabricatorState.isCoburn && partId === \"shower_door\" && layout.parts.Shower) {\r\n const showerDoorFeatureGroup = layout.parts.Shower.showerDoor;\r\n if (showerDoorFeatureGroup && showerDoorFeatureGroup.activeFeature\r\n && (showerDoorFeatureGroup.activeFeature.dbFeature.sharedFeatureName === \"Hinge Door.002\"\r\n || showerDoorFeatureGroup.activeFeature.dbFeature.sharedFeatureName === \"Barn Door.002\")) {\r\n return true\r\n }\r\n }\r\n return false\r\n }\r\n return partId === \"bathtub_body\" || partId === \"vanity_cabinet\"\r\n}\r\n\r\nexport const getWizardWithFirstStepCurrentPartId = (wizardList, partId) => {\r\n return wizardList.find(wizardItem => {\r\n if (!wizardItem.openWizardOnClick) {\r\n return false\r\n }\r\n const firstStepGroups = getCurrentGroups(wizardItem, 0, {});\r\n if (firstStepGroups && firstStepGroups.length === 1 && firstStepGroups[0].nodeType === \"group\") {\r\n const featureGroup = getFeatureGroupFromWizardGroup(firstStepGroups[0]);\r\n if (featureGroup && featureGroup.partId === partId) {\r\n return true\r\n }\r\n }\r\n return false\r\n });\r\n}\r\n","export const LayoutType = {\r\n Small: 0,\r\n SmallWithPopout: 1,\r\n SmallWithPeninsula: 2,\r\n SmallWithIsland: 3,\r\n SmallWithPopoutWithPeninsula: 4,\r\n SmallWithPopoutWithIsland: 5,\r\n SmallWithPeninsulaWithIsland: 6,\r\n SmallWithPopoutWithPeninsulaWithIsland: 7,\r\n LShape: 8,\r\n LShapeWithPeninsula: 9,\r\n LShapeWithIsland: 10,\r\n LShapeWithPeninsulaWithIsland: 11,\r\n};\r\n\r\nexport const LayoutAbbreviation = {\r\n All: \"ALL\",\r\n Small: \"S\",\r\n SmallWithPopout: \"SP\",\r\n SmallWithPeninsula: \"SN\",\r\n SmallWithIsland: \"SI\",\r\n SmallWithPopoutWithPeninsula: \"SPN\",\r\n SmallWithPopoutWithIsland: \"SPI\",\r\n SmallWithPeninsulaWithIsland: \"SNI\",\r\n SmallWithPopoutWithPeninsulaWithIsland: \"SPNI\",\r\n LShape: \"L\",\r\n LShapeWithPeninsula: \"LN\",\r\n LShapeWithIsland: \"LI\",\r\n LShapeWithPeninsulaWithIsland: \"LNI\",\r\n};\r\n\r\nexport const LayoutAbbreviations = [\"S\",\"SP\",\"SN\",\"SI\",\"SPN\",\"SPI\",\"SNI\",\"SPNI\",\"L\",\"LN\",\"LI\",\"LNI\"];\r\nexport const LayoutAbbreviationsToRemove = [\"LSP\",\"LNI\",\"LI\",\"LN\",\"L\",\"SPNI\",\"SNI\",\"SPI\",\"SPN\",\"SI\",\"SN\",\"SP\",\"S\"];\r\n\r\nexport const PLACEMENTS = {\r\n Island: \"Island\",\r\n Countertop: \"Countertop\"\r\n};\r\n\r\nexport const MODULE_CONTEXT_MENU_TYPES = {\r\n Filters: \"Filters\",\r\n SliceButtons: \"SliceButtons\",\r\n};\r\nexport const MODULE_CONTEXT_MENU_DIRECTIONS = {\r\n Vertical: \"Vertical\",\r\n Horizontal: \"Horizontal\"\r\n};\r\n\r\nexport const CABINET_WIZARD_BUTTONS = [{\r\n text: \"All products\",\r\n buttonId: \"all_products\",\r\n},{\r\n text: \"Door style\",\r\n filtersGroupName: \"DoorStyle\",\r\n buttonId: \"door_style\",\r\n},{\r\n text: \"Wood type\",\r\n filtersGroupName: \"WoodType\",\r\n buttonId: \"wood_type\",\r\n},{\r\n text: \"Stain / color\",\r\n filtersGroupName: \"StainColor\",\r\n buttonId: \"stain_color\",\r\n},{\r\n text: \"Inlay type\",\r\n filtersGroupName: \"Inlay Type\",\r\n buttonId: \"inlay_type\",\r\n}];\r\n\r\nexport const COUNTERTOP_WIZARD_BUTTONS = [{\r\n text: \"Stone\",\r\n pluralText: \"Stones\",\r\n buttonId: \"all_products\",\r\n},{\r\n text: \"Color\",\r\n pluralText: \"Color\",\r\n filtersGroupName: \"Stone Color\",\r\n buttonId: \"color\",\r\n},{\r\n text: \"Material\",\r\n pluralText: \"Materials\",\r\n filtersGroupName: \"Stone Material\",\r\n buttonId: \"materials\",\r\n},{\r\n text: \"Edge\",\r\n pluralText: \"Edges\",\r\n filtersGroupName: \"Edge Profile\",\r\n buttonId: \"edges\",\r\n},{\r\n text: \"Backsplash\",\r\n pluralText: \"Backsplash\",\r\n buttonId: \"backsplash\",\r\n}];\r\n\r\nexport const wizardAllButton = {\r\n id: \"All\",\r\n value: \"All\",\r\n displayText: \"All\",\r\n parent_id: null,\r\n icon: \"\",\r\n lockedInWizard: false,\r\n filterGroup_id: 0,\r\n additionalImages: []\r\n};\r\n\r\nexport const BACKSPLASH_TYPES = [\"4in\", \"6in\", \"18in\"];\r\n\r\nexport const METADATA = {\r\n ALL: \"ALL\"\r\n};\r\n\r\nexport const COUNTERTOP_GROUP = [\"countertop\", \"center_island_countertop\", \"backsplash\"];\r\nexport const CABINET_GROUP = [\"top_cabinet\", \"bottom_cabinet\", \"center_island_cabinet\", \"fridge_enclosure\", \"tall_cabinet\"];\r\nexport const EDGE_GROUP = [\"edge\", \"edge_profile\", \"center_island_edge\"];\r\n","import $ from \"jquery\";\r\nimport 'hammerjs';\r\nimport sqftConfig from \"./sqftConfig\";\r\nimport sqftCursorManager from \"./sqftCursorManager\";\r\n\r\nconst sqftEventManager = {\r\n renderEvents: [],\r\n renderEventsSlab: [],\r\n priorities: {\r\n OVERALL: -100,\r\n SLAB_RIGHT_PART_CONTENT: -40,\r\n SLAB_RIGHT_PART_WORKSPACE: -30,\r\n BOX_POINT: -5,\r\n BOX: -1,\r\n OVERLAY: 0,\r\n IMAGE_LINE: 1,\r\n IMAGE: 3,\r\n POINT: 5,\r\n SEGMENT_MEASUREMENTS: 7,\r\n SEGMENT: 10,\r\n SHAPE_LABEL: 12,\r\n SHAPE_UPPER: 14.5,\r\n SHAPE: 15,\r\n SHAPE_SLAB_PLACEHOLDER: 15.5,\r\n WALL: 18,\r\n SLAB_IMAGE: 20,\r\n SLAB_LEFT_PART: 25,\r\n WORKSPACE: 100,\r\n },\r\n events: {\r\n MOUSE_MOVE: \"mousemove\",\r\n MOUSE_DOWN: \"mousedown\",\r\n MOUSE_UP: \"mouseup\",\r\n MOUSE_WHEEL: \"mousewheel\",\r\n WHEEL: \"wheel\",\r\n ON_MOUSE_WHEEL: \"onmousewheel\",\r\n RESIZE: \"resize\",\r\n TOUCH_START: \"touchstart\",\r\n TOUCH_END: \"touchend\",\r\n TOUCH_MOVE: \"touchmove\",\r\n TOUCH_CANCEL: \"touchcancel\",\r\n MOUSE_LEAVE: \"mouseleave\",\r\n CLICK: \"click\",\r\n DBLCLICK: \"dblclick\",\r\n CONTEXTMENU: \"contextmenu\",\r\n KEYDOWN: \"keydown\",\r\n RENDER: \"render\",\r\n DRAG_OVER: \"dragover\",\r\n DROP: \"drop\"\r\n },\r\n keyCode: {\r\n ENTER: \"Enter\",\r\n NumpadEnter: \"NumpadEnter\"\r\n },\r\n self: this,\r\n activeEvents: [],\r\n canvas: null,\r\n $canvas: null,\r\n canvasOffset: null,\r\n ctx: null,\r\n state: {\r\n processing: false\r\n },\r\n eventQueue: [],\r\n G_events: { //events to tie into the Quoting Tool's Global Events for Idle timeout\r\n userIdleStartTimer: 'userIdleStartTimer',\r\n userIdleWarning: 'userIdleWarning',\r\n userIdleTimeOut: 'userIdleTimeOut',\r\n userIdleStopTimer: 'userIdleStopTimer',\r\n userIdleGoHome: 'userIdleGoHome',\r\n userIdleGoHomeCountdown: 'userIdleGoHomeCountdown'\r\n },\r\n hammerMC: null,\r\n LastKnownMousePos: null,\r\n //currentCursorOwner: null,\r\n //currentCursor: null,\r\n //noCursorStealing: false,\r\n zoomLock: null,\r\n resizeHandler: null,\r\n keydownHandler: null,\r\n\r\n getCtx: function() {\r\n return this.ctx\r\n },\r\n eventSort: function (a, b) {\r\n if (a.priority < b.priority)\r\n return -1;\r\n if (a.priority > b.priority)\r\n return 1;\r\n return 0;\r\n },\r\n getMousePos: function (e) {\r\n if (!e) {\r\n return this.LastKnownMousePos;\r\n }\r\n this.LastKnownMousePos = {\r\n x: e.pageX - this.canvasOffset.left,\r\n y: e.pageY - this.canvasOffset.top\r\n };\r\n return this.LastKnownMousePos;\r\n },\r\n getTouchPos: function (e) {\r\n var touch = e.changedTouches[0];\r\n if (!touch) {\r\n return null;\r\n }\r\n this.LastKnownMousePos = {\r\n x: touch.pageX - this.canvasOffset.left,\r\n y: touch.pageY - this.canvasOffset.top\r\n };\r\n return this.LastKnownMousePos;\r\n },\r\n setCanvas: function(value) {\r\n this.canvas = value;\r\n this.$canvas = $(value);\r\n this.ctx = this.canvas.getContext('2d');\r\n sqftCursorManager.init(this.canvas);\r\n },\r\n onMouseMove: function(mousepos, e) {\r\n let mousemove = this.activeEvents[this.events.MOUSE_MOVE] || [];\r\n e.terminate = false;\r\n for (var i = 0; i < mousemove.length; i++) {\r\n if (mousemove[i].event.call(mousemove[i].sender, mousepos, e)) {\r\n e.terminate = true;\r\n }\r\n }\r\n },\r\n onMouseUp: function(mousepos, e) {\r\n var mouseup = this.activeEvents[this.events.MOUSE_UP] || [];\r\n for (var i = 0; i < mouseup.length; i++) {\r\n if (mouseup[i].event.call(mouseup[i].sender, mousepos, e)) {\r\n break;\r\n }\r\n }\r\n },\r\n onMouseDown: function(mousepos, e, callback) {\r\n var mousedown = this.activeEvents[this.events.MOUSE_DOWN] || [];\r\n for (var i = 0; i < mousedown.length; i++) {\r\n if (mousedown[i].event.call(mousedown[i].sender, mousepos, e)) {\r\n break;\r\n }\r\n }\r\n if (callback) {\r\n callback(mousepos, e);\r\n }\r\n },\r\n onMouseLeave: function(mousepos, e, callback) {\r\n var mouseleave = this.activeEvents[this.events.MOUSE_LEAVE] || [];\r\n for (var i = 0; i < mouseleave.length; i++) {\r\n if (mouseleave[i].event.call(mouseleave[i].sender, mousepos, e)) {\r\n break;\r\n }\r\n }\r\n if (callback) {\r\n callback(mousepos, e);\r\n }\r\n },\r\n onKeyDown: function (code, e, callback) {\r\n let mouseleave = this.activeEvents[this.events.KEYDOWN] || [];\r\n for (let i = 0; i < mouseleave.length; i++) {\r\n if (mouseleave[i].event.call(mouseleave[i].sender, code, e)) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n break;\r\n }\r\n }\r\n if (callback) {\r\n callback(code, e);\r\n }\r\n },\r\n onDblClick: function(mousepos, e, callback) {\r\n let mousedown = this.activeEvents[this.events.DBLCLICK] || [];\r\n for (let i = 0; i < mousedown.length; i++) {\r\n if (mousedown[i].event.call(mousedown[i].sender, mousepos, e)) {\r\n break;\r\n }\r\n }\r\n if (callback) {\r\n callback(mousepos, e);\r\n }\r\n },\r\n onWheel: function(mousePos, e, callback) {\r\n let wheel = this.activeEvents[this.events.WHEEL] || [];\r\n for (let i = 0; i < wheel.length; i++) {\r\n if (wheel[i].event.call(wheel[i].sender, mousePos, e)) {\r\n break;\r\n }\r\n }\r\n if (callback) {\r\n callback(mousePos, e);\r\n }\r\n },\r\n onResize: function(e) {\r\n let resize = this.activeEvents[this.events.RESIZE] || [];\r\n for (let i = 0; i < resize.length; i++) {\r\n if (resize[i].event.call(resize[i].sender, e)) {\r\n break;\r\n }\r\n }\r\n this.updateOffset(e);\r\n },\r\n onContextmenu: function(mousePos, e, callback) {\r\n let contextmenu = this.activeEvents[this.events.CONTEXTMENU] || [];\r\n for (let i = 0; i < contextmenu.length; i++) {\r\n if (contextmenu[i].event.call(contextmenu[i].sender, mousePos, e)) {\r\n break;\r\n }\r\n }\r\n if (callback) {\r\n callback(mousePos, e);\r\n }\r\n },\r\n onDrop: function(mousePos, e, callback) {\r\n let dragEvents = this.activeEvents[this.events.DROP] || [];\r\n for (let i = 0; i < dragEvents.length; i++) {\r\n if (dragEvents[i].event.call(dragEvents[i].sender, mousePos, e)) {\r\n break;\r\n }\r\n }\r\n if (callback) {\r\n callback(mousePos, e);\r\n }\r\n },\r\n onDragOver: function(mousePos, e, callback) {\r\n let dragOverEvents = this.activeEvents[this.events.DRAG_OVER] || [];\r\n for (let i = 0; i < dragOverEvents.length; i++) {\r\n if (dragOverEvents[i].event.call(dragOverEvents[i].sender, mousePos, e)) {\r\n break;\r\n }\r\n }\r\n if (callback) {\r\n callback(mousePos, e);\r\n }\r\n },\r\n onTouchCancel: function() {\r\n onMouseUp(this.LastKnownMousePos, {});\r\n this.LastKnownMousePos = {x: 0, y: 0};\r\n onMouseMove(this.LastKnownMousePos, {});\r\n },\r\n onRender: function() {\r\n var render = this.activeEvents[this.events.RENDER] || [];\r\n var triangles = [];\r\n for (var i = render.length - 1; i >= 0; i-- ) {\r\n if (render[i] === undefined) {\r\n continue\r\n }\r\n var result = render[i].event.call(render[i].sender, this.ctx);\r\n if (render[i] !== undefined && render[i].priority === this.priorities.SHAPE) {\r\n triangles.push(result);\r\n }\r\n }\r\n return triangles;\r\n },\r\n updateOffset: function() {\r\n this.canvasOffset = $(this.canvas).offset();\r\n },\r\n trigger: function(event, e) {\r\n let response = null;\r\n switch(event) {\r\n case this.events.MOUSE_MOVE:\r\n case this.events.TOUCH_MOVE:\r\n response = this.onMouseMove(this.getMousePos(e), e);\r\n break;\r\n case this.events.MOUSE_WHEEL:\r\n case this.events.WHEEL:\r\n case this.events.ON_MOUSE_WHEEL:\r\n console.log(\"WHEEL\");\r\n break;\r\n case this.events.MOUSE_UP:\r\n case this.events.TOUCH_END:\r\n response = this.onMouseUp(this.getMousePos(e), e);\r\n break;\r\n case this.events.MOUSE_DOWN:\r\n case this.events.TOUCH_START:\r\n response = this.onMouseDown(this.getMousePos(e), e);\r\n break;\r\n case this.events.TOUCH_CANCEL:\r\n response = this.onTouchCancel();\r\n break;\r\n case this.events.RESIZE:\r\n response = this.onResize(e);\r\n break;\r\n case this.MOUSE_LEAVE:\r\n response = this.onMouseLeave(e);\r\n break;\r\n case this.CONTEXTMENU:\r\n response = this.onContextmenu(this.getMousePos(e), e);\r\n break;\r\n case this.DBLCLICK:\r\n response = this.onDblClick(this.getMousePos(e), e);\r\n break;\r\n case this.events.RENDER:\r\n response = this.onRender();\r\n break;\r\n }\r\n return response;\r\n },\r\n pinchToZoom: function(event) {\r\n let stepSize = 0.04;\r\n let self = this;\r\n if (!this.zoomLock) {\r\n this.zoomLock = window.setTimeout(function() {\r\n self.zoomLock = null;\r\n }, 10);\r\n let scale = sqftConfig.scale,\r\n mod = 0;\r\n if (event.additionalEvent === \"pinchin\") {\r\n mod = -1;\r\n } else if (event.additionalEvent === \"pinchout\") {\r\n mod = 1;\r\n }\r\n if (mod !== 0) {\r\n scale += (mod * stepSize);\r\n if (scale < 1) {\r\n scale = 1;\r\n } else if (scale > 10) {\r\n scale = 10;\r\n }\r\n sqftConfig.scale = scale;\r\n }\r\n }\r\n },\r\n init: function(canvas) {\r\n if (this.canvas && this.canvas.isWithEventManager) {\r\n return;\r\n }\r\n let self = this;\r\n this.setCanvas(canvas);\r\n if (!this.hammerMC) {\r\n this.hammerMC = new Hammer.Manager(canvas);\r\n this.hammerMC.add(new Hammer.Pinch({enable: true}));\r\n this.hammerMC.on('pinch', this.pinchToZoom);\r\n }\r\n\r\n this.resizeHandler = this.onResize.bind(this);\r\n window.addEventListener(this.events.RESIZE, this.resizeHandler);\r\n\r\n this.keydownHandler = function (e) {\r\n // e.preventDefault();\r\n // e.stopPropagation();\r\n if (event.isComposing || event.keyCode === 229) {\r\n return;\r\n }\r\n\r\n //console.log(\"code\", e.code);\r\n //console.log(\"keyCode\", e.keyCode);\r\n this.eventQueue.push([this.events.KEYDOWN, e.code, e]);\r\n this.processEventQueue();\r\n }.bind(this);\r\n window.addEventListener(this.events.KEYDOWN, this.keydownHandler);\r\n\r\n canvas.addEventListener(this.events.MOUSE_MOVE, function(e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n if (this.eventQueue.length > 2 &&\r\n this.eventQueue[this.eventQueue.length - 1][0] === self.events.MOUSE_MOVE &&\r\n this.eventQueue[this.eventQueue.length - 2][0] === self.events.MOUSE_MOVE\r\n ) {\r\n this.eventQueue[this.eventQueue.length - 1] = [self.events.MOUSE_MOVE, this.getMousePos(e), e];\r\n } else {\r\n this.eventQueue.push([self.events.MOUSE_MOVE, this.getMousePos(e), e]);\r\n }\r\n this.processEventQueue();\r\n }.bind(this));\r\n canvas.addEventListener('dragover', function(e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n this.eventQueue.push([self.events.DRAG_OVER, this.getMousePos(e), e]);\r\n this.processEventQueue();\r\n }.bind(this));\r\n canvas.addEventListener('drop', function(e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n this.eventQueue.push([self.events.DROP, this.getMousePos(e), e]);\r\n this.processEventQueue();\r\n }.bind(this));\r\n canvas.addEventListener(self.events.MOUSE_DOWN, function(e){\r\n e.preventDefault();\r\n e.stopPropagation();\r\n if (!e.handled) {\r\n this.eventQueue.push([self.events.MOUSE_DOWN, this.getMousePos(e), e]);\r\n this.processEventQueue();\r\n }\r\n }.bind(this));\r\n canvas.addEventListener(this.events.MOUSE_UP, function(e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n if (!e.handled) {\r\n this.eventQueue.push([self.events.MOUSE_UP, this.getMousePos(e), e]);\r\n this.processEventQueue();\r\n }\r\n }.bind(this));\r\n canvas.addEventListener(this.events.TOUCH_START, function(e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n e.handled = true;\r\n if (e.touches.length === 1) {\r\n let touchPos = self.getTouchPos(e);\r\n this.eventQueue.push([self.events.MOUSE_MOVE, touchPos, e]);\r\n this.eventQueue.push([self.events.TOUCH_START, touchPos, e]);\r\n this.processEventQueue();\r\n }\r\n }.bind(this), { passive: false });\r\n canvas.addEventListener(this.events.TOUCH_END, function(e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n e.handled = true;\r\n this.eventQueue.push([self.events.TOUCH_END, this.getTouchPos(e), e]);\r\n this.processEventQueue();\r\n }.bind(this), { passive: false });\r\n canvas.addEventListener(this.events.TOUCH_CANCEL, function(e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n this.eventQueue.push([self.events.TOUCH_CANCEL, this.getTouchPos(e), e]);\r\n this.processEventQueue();\r\n }.bind(this), { passive: false });\r\n canvas.addEventListener(this.events.TOUCH_MOVE, function(e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n if (self.zoomLock || e.touches.length > 1) //do not move when multi-touch or zoom locked or if the finger-move jumps too far\r\n return;\r\n let touchPos = self.getTouchPos(e);\r\n if (self.eventQueue.length > 2 &&\r\n self.eventQueue[self.eventQueue.length - 1][0] === self.events.TOUCH_MOVE &&\r\n self.eventQueue[self.eventQueue.length - 2][0] === self.events.TOUCH_MOVE\r\n ) {\r\n self.eventQueue[self.eventQueue.length - 1] = [self.events.TOUCH_MOVE, self.getTouchPos(e), e];\r\n } else {\r\n self.eventQueue.push([self.events.TOUCH_MOVE, touchPos, e]);\r\n }\r\n self.processEventQueue();\r\n }.bind(this), { passive: false });\r\n canvas.addEventListener(this.events.MOUSE_LEAVE, function(e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n this.eventQueue.push([self.events.MOUSE_LEAVE, this.getMousePos(e), e]);\r\n this.processEventQueue();\r\n }.bind(this));\r\n canvas.addEventListener(this.events.DBLCLICK, function(e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n if (!e.handled) {\r\n this.eventQueue.push([self.events.DBLCLICK, this.getMousePos(e), e]);\r\n this.processEventQueue();\r\n }\r\n }.bind(this));\r\n canvas.addEventListener(this.events.WHEEL, function(e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n if (!e.handled) {\r\n this.eventQueue.push([self.events.WHEEL, this.getMousePos(e), e]);\r\n this.processEventQueue();\r\n }\r\n }.bind(this));\r\n canvas.addEventListener(this.events.CONTEXTMENU, function(e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n if (!e.handled) {\r\n this.eventQueue.push([self.events.CONTEXTMENU, this.getMousePos(e), e]);\r\n this.processEventQueue();\r\n }\r\n }.bind(this));\r\n this.updateOffset();\r\n this.resetCursor(null);\r\n this.canvas.isWithEventManager = true;\r\n },\r\n clearAll: function() {\r\n window.removeEventListener(this.events.RESIZE, this.resizeHandler);\r\n window.removeEventListener(this.events.KEYDOWN, this.keydownHandler);\r\n\r\n this.activeEvents = [];\r\n this.eventQueue = [];\r\n this.LastKnownMousePos = {\r\n x: -1,\r\n y: -1\r\n };\r\n },\r\n stealCursor: (override, revertBackAfterMouseUp) => {\r\n return sqftCursorManager.stealCursor(override, revertBackAfterMouseUp);\r\n },\r\n releaseStealLock: (owner) => {\r\n return sqftCursorManager.releaseStealLock(owner);\r\n },\r\n setCursor: (cursor, owner, noStealing) => {\r\n return sqftCursorManager.setCursor(cursor, owner, noStealing);\r\n },\r\n setCursorImage: (cursorImage, owner, noStealing) => {\r\n return sqftCursorManager.setCursorImage(cursorImage, owner, noStealing);\r\n },\r\n resetCursor: (owner) => {\r\n return sqftCursorManager.resetCursor(owner);\r\n },\r\n getCursor: () => {\r\n return sqftCursorManager.getCursor();\r\n },\r\n event: function(callback, sender, priority) {\r\n this.event = callback;\r\n this.sender = sender;\r\n this.priority = priority;\r\n },\r\n addEvent: function(event, callback, sender, priority) {\r\n var e = new this.event(callback, sender, priority);\r\n this.activeEvents[event] = this.activeEvents[event] || [];\r\n this.activeEvents[event].unshift(e);\r\n this.activeEvents[event].sort(this.eventSort);\r\n },\r\n removeEvent: function(sender, event) {\r\n let i;\r\n if (typeof(event) === 'undefined') {\r\n event = null;\r\n } else {\r\n event = event.toLowerCase();\r\n }\r\n if (event === null) {\r\n for (var key in this.activeEvents) {\r\n for (i = this.activeEvents[key].length -1; i >= 0; i--) {\r\n // lodash compare variant\r\n // if (_.isEqual(this.activeEvents[key][i].sender, sender)) {\r\n if (this.activeEvents[key][i].sender === sender) {\r\n this.activeEvents[key].splice(i, 1);\r\n }\r\n }\r\n }\r\n } else if (this.activeEvents[event] !== null) {\r\n for (i = this.activeEvents[event].length - 1; i >= 0; i--) {\r\n if (this.activeEvents[event][i].sender === sender) {\r\n this.activeEvents[event].splice(i, 1);\r\n }\r\n }\r\n }\r\n },\r\n removeStuckCursorEvents: function() {\r\n let mouseupEvents = this.activeEvents[this.events.MOUSE_UP] || [];\r\n for (const mouseupEvent of mouseupEvents) {\r\n const isCursorExist = mouseupEvent.sender.cursorImage || mouseupEvent.sender.cursor;\r\n if (isCursorExist && mouseupEvent.sender && mouseupEvent.sender.destroy) {\r\n mouseupEvent.sender.destroy(true, false);\r\n }\r\n }\r\n },\r\n processEventQueue: function() {\r\n if (!this.state.processing) {\r\n this.state.processing = true;\r\n let e;\r\n while( (e = this.eventQueue.shift()) ) {\r\n if (e[1] == null) {\r\n continue;\r\n }\r\n switch(e[0]) {\r\n case this.events.MOUSE_DOWN:\r\n case this.events.TOUCH_START:\r\n this.onMouseDown(e[1], e[2]);\r\n break;\r\n case this.events.MOUSE_MOVE:\r\n case this.events.TOUCH_MOVE:\r\n this.onMouseMove(e[1], e[2]);\r\n break;\r\n case this.events.MOUSE_UP:\r\n case this.events.TOUCH_END:\r\n this.onMouseUp(e[1], e[2]);\r\n break;\r\n case this.events.DBLCLICK:\r\n this.onDblClick(e[1], e[2]);\r\n break;\r\n case this.events.TOUCH_CANCEL:\r\n this.onTouchCancel();\r\n break;\r\n case this.events.MOUSE_LEAVE:\r\n this.onMouseLeave(e[1], e[2]);\r\n break;\r\n case this.events.RESIZE:\r\n this.onResize(e[1], e[2]);\r\n break;\r\n case this.events.MOUSE_WHEEL:\r\n case this.events.WHEEL:\r\n case this.events.ON_MOUSE_WHEEL:\r\n this.onWheel(e[1], e[2]);\r\n break;\r\n case this.events.KEYDOWN:\r\n this.onKeyDown(e[1], e[2]);\r\n break;\r\n case this.events.CONTEXTMENU:\r\n this.onContextmenu(e[1], e[2]);\r\n break;\r\n case this.events.DRAG_OVER:\r\n this.onDragOver(e[1], e[2]);\r\n break;\r\n case this.events.DROP:\r\n this.onDrop(e[1], e[2]);\r\n break;\r\n }\r\n }\r\n }\r\n this.state.processing = false;\r\n //window.resetIdleTimer(); //todo sqft-react is this needed\r\n }\r\n};\r\n\r\nexport default sqftEventManager\r\n","export const ROUTES = {\r\n home: \"/\",\r\n list: \"/list\",\r\n view: \"/view\",\r\n wizard: \"/wizard\",\r\n login: \"/login\",\r\n register: \"/register\",\r\n rooms: \"/room-ideas\",\r\n // look: \"/look\",\r\n // lookActiveFeature: \"/look/:partId\",\r\n // lookActiveCategory: \"/look/:partId/select\",\r\n // quote: \"/quote\", // wtf? never used that\r\n lookId: \":lookId\",\r\n lookFeatureSku: \":lookId/:skuId\",\r\n // grohe\r\n category: \"/category\",\r\n // product journey\r\n print: \"/print\",\r\n cart: \"/cart\",\r\n cartLogin: \"/cart/login\",\r\n cartRegister: \"/cart/register\",\r\n cartTerms: \"/cart/terms\",\r\n cartBilling: \"/cart/billing\",\r\n cartBillingInfo: \"/cart/billing/info\",\r\n cartShipping: \"/cart/shipping\",\r\n cartPayment: \"/cart/payment\",\r\n cartDelivery: \"/cart/delivery\",\r\n cartTwoFAVerify: \"/cart/twoFA/verify\",\r\n cartTwoFA: \"/cart/twoFA\",\r\n cartConfirm: \"/cart/confirm\",\r\n cartSuccess: \"/cart/success\",\r\n shop: \"/shop\",\r\n shopRoutes: \"/shop/:shopCategoryId/:skuId\",\r\n sqft: \"/sqft\",\r\n sqftCabinetsIntro: \"/sqft-cabinets-intro/:step\",\r\n sqftCabinetsAR: \"/sqft-cabinets-ar/:file\",\r\n sqftCabinetsTutorial: \"/sqft-cabinets-tutorial/:step\",\r\n /// QKB routes\r\n quoting: \"/quoting/:wizardId/:wizardStep\",\r\n quoteDesign: \"/quote-design\",\r\n newscope: \"/newscope\",\r\n shoppingcart: \"/shoppingcart\",\r\n visualizer: \"/visualizer\",\r\n contract: \"/sign\",\r\n};\r\n","import find from 'lodash/find';\r\nimport last from 'lodash/last';\r\n\r\nimport {splitFeatureName, iStartWith} from \"../../../../misc/utils\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport {Part} from \"./part\";\r\nimport store from '../../../../store';\r\nimport {LayoutAbbreviation} from \"../constants\";\r\nimport {getFeatureIsLocked} from \"../../../../misc/helpers\";\r\n\r\nconst RgCabinetSize = /[0-9]+/g;\r\n\r\n/**\r\n * Used for Complex parts such as Vanity, to perform some base functionality for related items\r\n */\r\nexport class IntermediatePart extends Part {\r\n\r\n constructor(isChild) {\r\n super(false, isChild);\r\n this.disabled = false;\r\n this.defaultDisabled = false; // used after reset click\r\n this.canBeDisabled = false;\r\n }\r\n\r\n /**\r\n * This will be called by the underlying vanity feature with a concrete instance of the part\r\n * @param dbFeature\r\n * @param part {Part}\r\n * @param setParent {boolean}\r\n * @param features\r\n */\r\n load_(dbFeature, part, setParent = true, features = 'features') {\r\n\r\n const {displayName, sharedFeatureName} = dbFeature;\r\n let {featureName} = splitFeatureName(displayName);\r\n if (!featureName && dbFeature.groupName && dbFeature.displayName) {\r\n featureName = dbFeature.displayName.replace(dbFeature.groupName + \" - \", \"\")\r\n }\r\n\r\n // console.log('displayName:', displayName);\r\n\r\n if (setParent) {\r\n part.getParent = () => this;\r\n if (dbFeature.galleryImages) {\r\n const featured = dbFeature.galleryImages.find(galImage => galImage.featured);\r\n if (featured) {\r\n this.featuredImage = featured.url\r\n }\r\n dbFeature.galleryImages = dbFeature.galleryImages.sort((a, b) => b.default - a.default)\r\n }\r\n }\r\n\r\n if (iStartWith(displayName, 'Vanity -') || dbFeature.groupName === \"Vanity\") {\r\n if (displayName === \"Vanity - Placeholder D[For=Custom]\") {\r\n part.vanitySize = 72;\r\n } else {\r\n const fromName = sharedFeatureName || displayName || \"\";\r\n const lastDigit = last(fromName.match(RgCabinetSize));\r\n part.vanitySize = lastDigit ? lastDigit.slice(-2) : ''; // take two last digits from the name\r\n }\r\n\r\n }\r\n\r\n part.partName = featureName;\r\n part.metaData = dbFeature.metaData || {};\r\n part.dbFeature = dbFeature || {};\r\n if (!part.dbFeature.filterValueIDs) {\r\n part.dbFeature.filterValueIDs = {}\r\n }\r\n part.notAvailableInVisualizer = !dbFeature.s3Bindings || !dbFeature.s3Bindings.length || !dbFeature.s3Bindings.some(binding => binding.bucketName === \"brv\");\r\n\r\n let arrayOfBindings = [];\r\n if(dbFeature.s3Bindings) {\r\n dbFeature.s3Bindings.forEach((binding) => {\r\n if (!arrayOfBindings.includes(\"Small\")\r\n && (binding.layout === LayoutAbbreviation.All || binding.layout === LayoutAbbreviation.Small)) {\r\n arrayOfBindings.push(\"Small\");\r\n }\r\n if (!arrayOfBindings.includes(\"Large\") &&\r\n (binding.layout === LayoutAbbreviation.All || binding.layout === LayoutAbbreviation.Large)) {\r\n arrayOfBindings.push(\"Large\");\r\n }\r\n });\r\n }\r\n\r\n arrayOfBindings.forEach(layoutName => {\r\n this[features+\"List\"][layoutName].push(part);\r\n });\r\n\r\n if (part.notAvailableInVisualizer || !arrayOfBindings.length) { // features not in visualizer should be shown in the QuotingTool\r\n part.notAvailableInVisualizer = true;\r\n Object.keys(LayoutAbbreviation).forEach(layoutName => {\r\n if (layoutName !== \"All\") {\r\n this[features+\"List\"][layoutName].push(part);\r\n }\r\n })\r\n }\r\n\r\n this.loadFeatureCommon(part);\r\n\r\n return part\r\n }\r\n\r\n navigationSubItemsWithFilter(propName, propValue, featuresToCheck = this.features) {\r\n return featuresToCheck.filter((feature) => {\r\n return feature.matchesMetaForCondition(propName, propValue);\r\n }).map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n navigationSubItemsWithFilterMultipleConditions(arrayOfConditions, featuresToCheck = this.features) {\r\n // console.log('arrayOfConditions', arrayOfConditions);\r\n // console.log('featuresToCheck', featuresToCheck);\r\n return featuresToCheck.filter((feature) => {\r\n return feature.notAvailableInVisualizer || arrayOfConditions.every((conditionObject) => {\r\n const {propName, propValue} = conditionObject;\r\n\r\n let conditionPassed = feature.matchesMetaForCondition(propName, propValue);\r\n if (propName === \"EX L\" && !conditionPassed) {\r\n conditionPassed = feature.matchesMetaForCondition(\"Wall\", propValue);\r\n }\r\n return conditionPassed\r\n\r\n // let {propName, propValue} = conditionObject;\r\n // const excludeProperty = propName.includes('-exclude');\r\n // if (excludeProperty) {\r\n // propName = propName.split('-exclude')[0];\r\n // }\r\n // return excludeProperty\r\n // ? feature.matchesMetaForCondition(propName, propValue)\r\n // : feature.matchesMetaForCondition(propName, propValue)\r\n });\r\n })\r\n }\r\n\r\n // navigationSubItemsWithFilterMultipleConditionsWithInactive(arrayOfConditions, featuresToCheck = this.features) { // shows all items & sets not mathing array\r\n // const refactoredArray = featuresToCheck.map((feature) => {\r\n // feature.matchesMetaFailed = false;\r\n // feature.matchesMetaFailedArray = [];\r\n // arrayOfConditions.forEach((conditionObject) => {\r\n // const {propName, propValue} = conditionObject;\r\n // let conditionPassed = feature.matchesMetaForCondition(propName, propValue);\r\n // if (propName === \"EX L\" && !conditionPassed) {\r\n // conditionPassed = feature.matchesMetaForCondition(\"Wall\", propValue);\r\n // }\r\n // if (!conditionPassed) {\r\n // feature.matchesMetaFailed = true;\r\n // feature.matchesMetaFailedArray.push(propName);\r\n // }\r\n // });\r\n //\r\n // return feature\r\n // });\r\n // return orderBy(refactoredArray, ['matchesMetaFailed'],['asc']).map(_ => new DesignNavigationItem(_.featureName, _));\r\n // }\r\n\r\n setDefault() {\r\n if (!this.tryToSetTheSameFeature(this.features)) {\r\n this.activeFeature = this.features && this.features[0] || null;\r\n this.placeholderFeature = this.features && this.features.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"laceholder\");\r\n });\r\n }\r\n }\r\n\r\n setLayers(layout) {\r\n if (!this.disabled) {\r\n if (!this.activeFeature) {\r\n this.setDefault(layout);\r\n }\r\n if (this.activeFeature && !this.activeFeature.notAvailableInVisualizer) {\r\n this.setFeatureLayer(this.activeFeature, layout);\r\n if (Array.isArray(this.activeFeatureParts) && this.activeFeatureParts.length) {\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n this.setFeatureLayer(activeFeaturePart, layout);\r\n })\r\n }\r\n }\r\n if (this.placeholderFeature) {\r\n this.setFeatureLayer(this.placeholderFeature, layout);\r\n }\r\n if (this.shadowFeature) {\r\n this.setFeatureLayer(this.shadowFeature, layout);\r\n }\r\n } else {\r\n this.hideLayers();\r\n }\r\n }\r\n\r\n setFeatureLayer(currentFeature, layout) {\r\n // console.log('currentFeature', currentFeature);\r\n if (!currentFeature || !currentFeature.dbFeature)\r\n return; //feature no longer exists\r\n const layoutAbr = layout.getCurrentLayoutAbbreviation();\r\n\r\n let s3Binding = find(currentFeature.dbFeature.s3Bindings,\r\n {entityID: this.featureDefinitionId(currentFeature), layout: layoutAbr});\r\n if (!s3Binding) {\r\n s3Binding = find(currentFeature.dbFeature.s3Bindings,\r\n {entityID: this.featureDefinitionId(currentFeature), layout: LayoutAbbreviation.All});\r\n }\r\n // !!! we need to check, either a specific layout or ALL layout only !!!\r\n // if (!s3Binding) {\r\n // s3Binding = find(currentFeature.dbFeature.s3Bindings,\r\n // {entityID: this.featureDefinitionId(currentFeature)});\r\n // }\r\n currentFeature.layer.fromS3Binding(s3Binding);\r\n }\r\n\r\n clickFromAllWalls(ignoreLocked) {\r\n this.handleClick(ignoreLocked, \"all_walls\");\r\n }\r\n\r\n tryToSetTheSameFeature(filteredFeatures, partName, placeholderName, shadowNeeded = false) {\r\n if (this.activeFeature) {\r\n const activeName = this.activeFeature.getSplittedFeatureName();\r\n this.activeFeature = filteredFeatures.find(feature => {\r\n const featureName = feature.getSplittedFeatureName();\r\n return activeName === featureName\r\n }) || null;\r\n // console.log('AF', filteredFeatures, this.activeFeature);\r\n this.placeholderFeature = filteredFeatures.find((feature) => {\r\n return placeholderName\r\n ? feature.dbFeature.displayName && feature.dbFeature.displayName.includesCI(\"placeholder\")\r\n && feature.dbFeature.displayName.includes(placeholderName)\r\n : feature.dbFeature.displayName && feature.dbFeature.displayName.includesCI(\"placeholder\")\r\n });\r\n if (shadowNeeded) {\r\n this.setShadowFeature();\r\n }\r\n if (this.activeFeature) {\r\n return true\r\n }\r\n }\r\n return false\r\n }\r\n\r\n /**\r\n * @param ignoreLocked {boolean} // false by the default, is used by wizard ONLY\r\n */\r\n handleClick(ignoreLocked = false) {\r\n const parent = this.getParent();\r\n const {activeQuoteIndex} = store.getState().quotesState;\r\n parent.firstClick[activeQuoteIndex] = true; // allow to show active item\r\n const featureIsLocked = getFeatureIsLocked(this, ignoreLocked);\r\n if (featureIsLocked) {\r\n parent.activeLockedFeature = this;\r\n } else {\r\n if (parent.activeLockedFeature) {\r\n parent.activeLockedFeature = null;\r\n }\r\n this.featureClick();\r\n }\r\n }\r\n\r\n featureClick() {\r\n const parent = this.getParent();\r\n parent.placeholderChanged = true;\r\n if (this.notAvailableInVisualizer) {\r\n parent.activeNotInVisualizerFeature = this; // do not change the activeFeature (in order to keep the layer)\r\n } else if (parent.activeNotInVisualizerFeature) {\r\n parent.activeNotInVisualizerFeature = null; // remove it from other searches and so on\r\n parent.activeFeature = this;\r\n } else {\r\n parent.activeFeature = this;\r\n }\r\n this.featureClicked();\r\n }\r\n\r\n setShadowFeature() {\r\n const parentGroup = this.getParent();\r\n let filteredAvailableFeatures = [];\r\n if (parentGroup.shadows && parentGroup.shadows.features && parentGroup.shadows.features.length) {\r\n const layoutAbr = this.getParent().layout.getCurrentLayoutAbbreviation();\r\n const filteredFeatures = parentGroup.shadows.features.filter((shadow) => {\r\n return Array.isArray(shadow.dbFeature.s3Bindings) && shadow.dbFeature.s3Bindings.some(binding => {\r\n return binding.layout === LayoutAbbreviation.All || binding.layout === layoutAbr\r\n })\r\n });\r\n const compatibleFeatures = filteredFeatures.filter(shadowFeature => {\r\n return shadowFeature.partName && this.shadowName && shadowFeature.partName === this.shadowName\r\n });\r\n filteredAvailableFeatures = this.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), compatibleFeatures);\r\n }\r\n this.shadowFeature = filteredAvailableFeatures.length ? filteredAvailableFeatures[0] : null;\r\n }\r\n\r\n getFeatureWithMeta(featuresArray, metaName, metaValue) {\r\n return featuresArray.find((feature) => {\r\n return feature.metaData[metaName] && feature.metaData[metaName].includes(metaValue);\r\n });\r\n }\r\n\r\n getFeaturesWithMeta(featuresArray, metaName, metaValue) {\r\n return featuresArray.filter((feature) => {\r\n return feature.metaData[metaName] && feature.metaData[metaName].includes(metaValue);\r\n });\r\n }\r\n\r\n hideLayers() {\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.src = '';\r\n }\r\n if (Array.isArray(this.activeFeatureParts) && this.activeFeatureParts.length) {\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n if (activeFeaturePart && activeFeaturePart.layer) {\r\n activeFeaturePart.layer.src = '';\r\n }\r\n })\r\n }\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.src = '';\r\n }\r\n if (this.shadowFeature) {\r\n this.shadowFeature.layer.src = '';\r\n }\r\n }\r\n\r\n /** shower door, fixture methods **/\r\n static getCurrentShowerBodyId(shower) {\r\n let currentShowerBodyId = \"\";\r\n const showerTubComboIsActive = shower.showerTubComboIsActive();\r\n if (!showerTubComboIsActive && shower.showerBody && shower.showerBody.activeFeature) {\r\n currentShowerBodyId = shower.showerBody.activeFeature.showerBodyId;\r\n } else if (showerTubComboIsActive && shower.layout.parts[\"Shower Tub Combo\"]\r\n && shower.layout.parts[\"Shower Tub Combo\"].wallConfiguration\r\n && shower.layout.parts[\"Shower Tub Combo\"].wallConfiguration.activeFeature) {\r\n currentShowerBodyId = shower.layout.parts[\"Shower Tub Combo\"].wallConfiguration.activeFeature.showerBodyId;\r\n }\r\n return currentShowerBodyId\r\n }\r\n\r\n rememberPreviousSelection(shower, currentActiveFeature) {\r\n const layoutAbbr = shower.layout.getCurrentLayoutAbbreviation();\r\n const currentShowerBodyId = IntermediatePart.getCurrentShowerBodyId(shower);\r\n const wallConfiguration = shower.layout.parts[\"Shower Tub Combo\"] && shower.layout.parts[\"Shower Tub Combo\"].wallConfiguration;\r\n if (this.currentShowerBodyId !== currentShowerBodyId && currentActiveFeature && !currentActiveFeature.partName.includes(\"laceholder\")) {\r\n this.previouslySelectedFeatures[layoutAbbr][this.currentShowerBodyId] = currentActiveFeature; // remember previous active item\r\n if (wallConfiguration\r\n && wallConfiguration.features.some(feature => feature.showerBodyId === this.currentShowerBodyId)) {\r\n wallConfiguration.features.forEach((wallConfigurationFeature) => { // remember previous active item for all wall conf\r\n this.previouslySelectedFeatures[layoutAbbr][wallConfigurationFeature.showerBodyId] = currentActiveFeature;\r\n })\r\n }\r\n }\r\n this.currentShowerBodyId = currentShowerBodyId; // set new shower type\r\n }\r\n\r\n setDefaultAccordingToPreviousSelect(shower, filteredFeatures, hardCodedDefaultName, placeholderDefaultName = \"laceholder\") {\r\n const layoutAbbr = shower.layout.getCurrentLayoutAbbreviation();\r\n const currentShowerBodyId = IntermediatePart.getCurrentShowerBodyId(shower);\r\n // console.log('currentShowerBodyId', currentShowerBodyId);\r\n // console.log('this.previouslySelectedFeatures', this.previouslySelectedFeatures);\r\n\r\n if (this.currentShowerBodyId !== currentShowerBodyId && this.previouslySelectedFeatures[layoutAbbr][currentShowerBodyId]\r\n && filteredFeatures.some(f => f.dbFeature.id === this.previouslySelectedFeatures[layoutAbbr][currentShowerBodyId].dbFeature.id)) {\r\n this.activeFeature = this.previouslySelectedFeatures[layoutAbbr][currentShowerBodyId]; // restore from previous chosen\r\n } else {\r\n const hardCodedDefault = hardCodedDefaultName && filteredFeatures.find((feature) => {\r\n return !feature.notAvailableInVisualizer && feature.dbFeature.displayName && feature.dbFeature.displayName.includes(hardCodedDefaultName);\r\n });\r\n this.activeFeature = hardCodedDefault || filteredFeatures[0];\r\n }\r\n const placeholderDefault = filteredFeatures.find((feature) => {\r\n return !feature.notAvailableInVisualizer && feature.dbFeature.displayName\r\n && feature.dbFeature.displayName.includes(placeholderDefaultName);\r\n });\r\n this.placeholderFeature = placeholderDefault || null;\r\n }\r\n\r\n /**\r\n * Returns matching feature (for example: return Mirrors with the same Color and DoorStyle as current selected Vanity)\r\n * @param feature {object} // current feature\r\n * @param activeFilterValueIDs {object} // current activeFeature filters (that needed to be matched)\r\n * @param filter1 {object} // featureGroup1\r\n * @param filter2 {object} // featureGroup2\r\n */\r\n static featureHasFilters(feature, activeFilterValueIDs, filter1, filter2) {\r\n const filterValueIDs = feature.dbFeature && feature.dbFeature.filterValueIDs;\r\n if (filterValueIDs) {\r\n const hasValues = filterValueIDs[filter1.id]\r\n && filterValueIDs[filter2.id]\r\n && activeFilterValueIDs[filter1.id]\r\n && activeFilterValueIDs[filter2.id]\r\n && filterValueIDs[filter1.id].includes(activeFilterValueIDs[filter1.id][0])\r\n && filterValueIDs[filter2.id].includes(activeFilterValueIDs[filter2.id][0]);\r\n // hasValues ? console.log('match-', feature) : null;\r\n return hasValues || false // false is needed here, because true !> undefined\r\n }\r\n return false\r\n }\r\n\r\n getSplittedFeatureName = () => {\r\n if(this._customDisplayName == null) {\r\n this._customDisplayName = this.getFeatureName()\r\n // .replace(/ 30/g, \"\") // we can't do that since room layout change is broken after that\r\n // .replace(/ 60/g, \"\")\r\n // .replace(/ LG/g, \"\")\r\n // .replace(/ SM/g, \"\");\r\n }\r\n return this._customDisplayName\r\n };\r\n\r\n getCountertopGroupsSplittedFeatureName = () => {\r\n if (this._countertopGroupsCustomDisplayName == null) {\r\n this._countertopGroupsCustomDisplayName = this.dbFeature.sharedFeatureName;\r\n }\r\n return this._countertopGroupsCustomDisplayName\r\n };\r\n\r\n getMatchingFeatureName = () => {\r\n return this.getSplittedFeatureName()\r\n };\r\n\r\n}\r\n","//********* SQFT *********//\r\nimport * as types from \"./actionTypes\";\r\n\r\nexport const setSQFTMenuOpened = (menuOpened = \"\") => ({\r\n type: types.SET_SQFT_MENU_OPENED,\r\n payload: {menuOpened}\r\n});\r\n\r\nexport const setSQFTMenuOpenedLock = (menuOpenedLock = true) => ({\r\n type: types.SET_SQFT_MENU_LOCK,\r\n payload: {menuOpenedLock}\r\n});\r\n\r\nexport const setSQFTActiveButton = (activeButton) => ({\r\n type: types.SET_SQFT_MENU_ACTIVE_BUTTON,\r\n payload: {activeButton}\r\n});\r\n\r\nexport const setSQFTActiveSubMenuButton = (activeSubMenuButton) => ({\r\n type: types.SET_SQFT_ACTIVE_SUB_MENU_BUTTON,\r\n payload: {activeSubMenuButton}\r\n});\r\n\r\nexport const setSQFTActiveLevel3Button = (activeLevel3Button = \"\") => ({\r\n type: types.SET_SQFT_ACTIVE_LEVEL3_BUTTON,\r\n payload: {activeLevel3Button}\r\n});\r\n\r\nexport const setSQFTActiveRoomIndex = (activeRoomIndex) => ({\r\n type: types.SET_SQFT_ACTIVE_ROOM_INDEX,\r\n payload: {activeRoomIndex}\r\n});\r\n\r\nexport const setSQFTActiveRoomType = (activeRoomType) => ({\r\n type: types.SET_SQFT_ACTIVE_ROOM_TYPE,\r\n payload: {activeRoomType}\r\n});\r\n\r\nexport const setSQFTActiveRoomId = (activeRoomId) => ({\r\n type: types.SET_SQFT_ACTIVE_ROOM_ID,\r\n payload: {activeRoomId}\r\n});\r\n\r\nexport const setSQFTActiveRoom = (activeRoom) => ({\r\n type: types.SET_SQFT_ACTIVE_ROOM,\r\n payload: {activeRoom}\r\n});\r\n\r\nexport const setIsRoomSwitcherVisible = (isVisible) => ({\r\n type: types.SET_SQFT_ROOM_SWITCHER_VISIBLE,\r\n payload: {isVisible}\r\n});\r\n\r\nexport const setFreeDrawMode = (isFreeDrawMode) => ({\r\n type: types.SET_FREE_DRAW_MODE,\r\n payload: {isFreeDrawMode}\r\n});\r\n\r\nexport const setWallsUpMode = (isWallsUpMode) => ({\r\n type: types.SET_WALLS_UP_MODE,\r\n payload: {isWallsUpMode}\r\n});\r\n\r\nexport const setWallsLockMode = (isWallsLockMode) => ({\r\n type: types.SET_WALLS_LOCK_MODE,\r\n payload: {isWallsLockMode}\r\n});\r\n\r\nexport const setSQFTRoomLayouts = (roomLayouts) => ({\r\n type: types.SET_SQFT_ROOM_LAYOUTS,\r\n payload: {roomLayouts}\r\n});\r\n\r\nexport const setSQFTContextMenu = (contextMenu) => ({\r\n type: types.SET_SQFT_CONTEXT_MENU,\r\n payload: {contextMenu}\r\n});\r\n\r\nexport const setSQFTContextMenuV2 = (contextMenuV2) => ({\r\n type: types.SET_SQFT_CONTEXT_MENU_V2,\r\n payload: {contextMenuV2}\r\n});\r\n\r\nexport const setSQFTSystemMessage = (systemMessage) => ({\r\n type: types.SET_SQFT_SYSTEM_MESSAGE,\r\n payload: {systemMessage}\r\n});\r\n\r\nexport const setSQFTAr3dPopup = (ar3dPopup) => ({\r\n type: types.SET_SQFT_AR3D_POPUP,\r\n payload: {ar3dPopup}\r\n});\r\n\r\nexport const setSQFTSystemDeleteMessage = (systemDeleteMessage) => ({\r\n type: types.SET_SQFT_SYSTEM_DELETE_MESSAGE,\r\n payload: {systemDeleteMessage}\r\n});\r\n\r\nexport const setSQFTPopup = (sqftPopup) => ({\r\n type: types.SET_SQFT_POPUP,\r\n payload: {sqftPopup}\r\n});\r\n\r\n/**\r\n * Change Value Popups\r\n */\r\nexport const setChangeValuePopups = (changeValuePopups) => ({\r\n type: types.SET_CHANGE_VALUE_POPUPS,\r\n payload: {changeValuePopups}\r\n});\r\n\r\nexport const addChangeValuePopup = (changeValuePopup) => ({\r\n type: types.ADD_CHANGE_VALUE_POPUP,\r\n payload: changeValuePopup\r\n});\r\n\r\nexport const changeValuePopup = (changeValuePopup) => ({\r\n type: types.CHANGE_VALUE_POPUP,\r\n payload: changeValuePopup\r\n});\r\n\r\nexport const deleteChangeValuePopup = (id) => ({\r\n type: types.DELETE_CHANGE_VALUE_POPUP,\r\n payload: {id}\r\n});\r\n\r\n/**\r\n * ValidationPopups\r\n */\r\nexport const setValidationPopups = (validationPopups) => ({\r\n type: types.SET_VALIDATION_POPUPS,\r\n payload: {validationPopups}\r\n});\r\n\r\nexport const addValidationPopup = (validationPopup) => ({\r\n type: types.ADD_VALIDATION_POPUP,\r\n payload: validationPopup\r\n});\r\n\r\nexport const validationPopup = (validationPopup) => ({\r\n type: types.VALIDATION_POPUP,\r\n payload: validationPopup\r\n});\r\n\r\nexport const deleteValidationPopup = (id) => ({\r\n type: types.DELETE_VALIDATION_POPUP,\r\n payload: {id}\r\n});\r\n\r\nexport const setShouldShowChangeShapeFeatureMissingMessage = (isShapeFeatureMissing) => ({\r\n type: types.SET_CHANGE_SHAPE_FEATURE_MISSING_MESSAGE,\r\n payload: {isShapeFeatureMissing}\r\n});\r\n\r\nexport const setShapeIdsWithMissingFeature = (shapeIdsWithMissingFeature) => ({\r\n type: types.SET_SHAPE_IDS_WITH_MISSING_FEATURES,\r\n payload: {shapeIdsWithMissingFeature}\r\n});\r\n\r\nexport const addShapeIdWithMissingFeature = (shapeIdsWithMissingFeature) => ({\r\n type: types.ADD_SHAPE_ID_WITH_MISSING_FEATURES,\r\n payload: shapeIdsWithMissingFeature\r\n});\r\n\r\nexport const setSelectedCountertop = (selectedCountertop) => ({\r\n type: types.SET_SELECTED_COUNTERTOP,\r\n payload: {selectedCountertop}\r\n});\r\n\r\nexport const setAbortController = (abortRequestController) => ({\r\n type: types.SET_ABORT_CONTROLLER,\r\n payload: {abortRequestController}\r\n});\r\n\r\nexport const setIsItextEditing = (isITextEditing) => ({\r\n type: types.SET_IS_ITEXT_EDITING,\r\n payload: {isITextEditing}\r\n});\r\n\r\nexport const setIsSlabPlaceholderOverlapsWithMultipleShapes = (isSlabPlaceholderOverlapsWithMultipleShapes) => ({\r\n type: types.SET_SLAB_PLACEHOLDER_OVERLAPS_WITH_MULTIPLE_SHAPES,\r\n payload: {isSlabPlaceholderOverlapsWithMultipleShapes}\r\n});\r\n\r\nexport const setReCacheMenuCounter = (reCacheMenuCounter) => ({\r\n type: types.SET_RE_CACHE_MENU_COUNTER,\r\n payload: {reCacheMenuCounter}\r\n});\r\n","import React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport { showLoading, hideLoading } from 'react-redux-loading-bar';\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport CircularProgress from '@mui/material/CircularProgress';\r\n\r\nimport LoadingBar from '../../lib/react-redux-loading-bar';\r\nimport store from '../../store';\r\nimport {toggleLoader} from \"../../actions/actionFunctions\";\r\nimport COLOR_THEMES, {COLORS} from \"../../colorThemes\";\r\nimport {IS_LIXIL_UI} from \"../../config\";\r\n\r\nclass LoaderView extends React.Component {\r\n\r\n\r\n render() {\r\n const {iframe, loaderTitle, loaderText, loaderOpened, lookOpened, loaderFullScreen, activeTheme,\r\n visualizersLoaded, lookOverlayOpened} = this.props;\r\n\r\n if (!loaderOpened) {\r\n return null\r\n }\r\n\r\n if (IS_LIXIL_UI) {\r\n const color = visualizersLoaded.length ? COLORS.white : COLOR_THEMES[activeTheme].active\r\n return (\r\n
\r\n \r\n \r\n
\r\n )\r\n }\r\n\r\n // const {fabricatorData} = this.props;\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n

\r\n

\r\n {/*{fabricatorData.received ?

: null}*/}\r\n {/*{fabricatorData.received ?

: null}*/}\r\n
\r\n
\r\n
\r\n );\r\n }\r\n\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {activeTheme, visualizersLoaded} = store.serverState;\r\n const {loaderOpened, loaderTitle, loaderText, loaderFullScreen} = store.loaderState;\r\n const {lookOpened, lookOverlayOpened} = store.lookState;\r\n return {\r\n activeTheme,\r\n visualizersLoaded,\r\n loaderOpened,\r\n loaderTitle,\r\n loaderText,\r\n loaderFullScreen,\r\n lookOpened,\r\n lookOverlayOpened,\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, {})(LoaderView);\r\n\r\nexport function loaderEnable(loaderText = \"loader.defaultText\", loaderTitle = \"loader.defaultTitle\") {\r\n //null value is passed, and not defaulted with the above, so the below 2 lines handle if null or other falsey value is passed\r\n loaderText = loaderText || \"loader.defaultText\";\r\n loaderTitle = loaderTitle || \"loader.defaultTitle\";\r\n store.dispatch(showLoading());\r\n store.dispatch(toggleLoader(true, loaderText, loaderTitle));\r\n}\r\n\r\nexport function loaderDisable() {\r\n store.dispatch(hideLoading());\r\n store.dispatch(toggleLoader(false));\r\n}\r\n","import groupBy from \"lodash/groupBy\";\r\nimport isEqual from \"lodash/isEqual\";\r\n\r\nimport {getFilterGroupValue, getFilterGroupValues, s3FilterImagePath} from \"../../../misc/utils\";\r\nimport {getCurrentLayout, getCurrentRoomType} from \"../../appLayout\";\r\nimport {\r\n ALL_CONTEXT_MENU,\r\n CONTEXT_MENU_BATHTUB_BUTTONS,\r\n CONTEXT_MENU_SHOWER_ALL,\r\n CONTEXT_MENU_SHOWER_OTHER,\r\n CONTEXT_MENU_SPLIT_WALL,\r\n CONTEXT_MENU_VANITY_BUTTONS,\r\n POSSIBLE_ONE_POSITION,\r\n VANITY_TYPES,\r\n LOOK_ROOM_TYPES,\r\n ALL_CONTEXT_MENU_KITCHEN,\r\n CONTEXT_MENU_KITCHEN_CENTER_ISLAND,\r\n CONTEXT_MENU_KITCHEN_COUNTERTOPS,\r\n CONTEXT_MENU_VANITY_ONLY, CONTEXT_MENU_SHOWER_ACCESSORIES, METADATA\r\n} from \"../core/constants\";\r\nimport {getCartItemObject, getFeatureIsLocked} from \"../../../misc/helpers\";\r\nimport {getBundledFeatures, hardCodelyRemovedClicking} from \"./lookFunctions2\";\r\nimport {isVisibleForNavigation} from \"../../../misc/displayLogic\";\r\nimport {allowCheckForCollection} from \"../grohe/groheNavigation/groheFunctions\";\r\nimport {CART_ITEM_ADDED_BY} from \"../../shoppingCart/cartItemInterface\";\r\nimport {getCommonVisualizerType, IS_PRODUCT_JOURNEY, IS_QKB_UI} from \"../../../config\";\r\nimport {GROHE_CONFIG} from \"../grohe/groheConfig\";\r\nimport {addLayoutHistory} from \"../../../actions/actionFunctions\";\r\nimport store from \"../../../store\";\r\nimport {getExistingWizardForGroups} from \"./lookMain/lookWizard/lookWizardFunctions\";\r\nimport {getColorFilterValue} from \"../../../misc/filtersFunctions\";\r\nimport {getFeatureCropCoors} from \"../../../misc/metaDataFunctions\";\r\n\r\n\r\n/**\r\n * Checks available color options for reature\r\n * @param lookActiveFeature {object}\r\n * @param filterGroups {array}\r\n * @param returnAllFeatures {boolean}\r\n * @param fromNavItemOptions {array}\r\n * @returns {array} array of objects\r\n */\r\nexport const getFeatureOptions = (lookActiveFeature, filterGroups, returnAllFeatures = false, fromNavItemOptions = null) => {\r\n if (!lookActiveFeature) {\r\n return null\r\n }\r\n\r\n const colorFilterGroup = filterGroups.find(group => group.name === \"Color\");\r\n\r\n if (!colorFilterGroup) {\r\n return null\r\n }\r\n\r\n const activeFeatureValues = getFilterGroupValues(lookActiveFeature, colorFilterGroup);\r\n\r\n // console.log(\"activeFeatureValues\", activeFeatureValues);\r\n\r\n if (!Array.isArray(activeFeatureValues) || !activeFeatureValues.length) {\r\n return null\r\n }\r\n\r\n const parent = lookActiveFeature.getParent();\r\n const activeFeatureValue = getFilterGroupValue(activeFeatureValues[0], colorFilterGroup);\r\n\r\n let optionFeatures = activeFeatureValue ? [{\r\n feature: lookActiveFeature,\r\n colorValue: activeFeatureValue\r\n }] : [];\r\n\r\n if (fromNavItemOptions) {\r\n // console.log(\"optionFeatures\", optionFeatures);\r\n return activeFeatureValue && fromNavItemOptions.some(option => option.colorValue.id === activeFeatureValue.id)\r\n ? fromNavItemOptions\r\n : [...optionFeatures, ...fromNavItemOptions]\r\n }\r\n\r\n const layout = getCurrentLayout();\r\n let navItems;\r\n if (returnAllFeatures) {\r\n const layout = getCurrentLayout();\r\n const forSpecificLayout = lookActiveFeature.metaData[\"RoomLayout\"] ? lookActiveFeature.metaData[\"RoomLayout\"][0] : null;\r\n if (forSpecificLayout && (+(forSpecificLayout.replace(\"Layout\", \"\")) !== layout.type)) {\r\n navItems = parent.getFeaturesForNavigationFrom({\r\n returnAllFeatures,\r\n forSpecificLayout: lookActiveFeature.metaData[\"RoomLayout\"] ? lookActiveFeature.metaData[\"RoomLayout\"][0] : null,\r\n forSpecificScene: lookActiveFeature.metaData[\"RoomScene\"] ? lookActiveFeature.metaData[\"RoomScene\"][0] : null\r\n })\r\n } else {\r\n navItems = layout.designNavigationItems({part: parent}, {}, \"\", lookActiveFeature, false)\r\n }\r\n } else {\r\n navItems = layout.designNavigationItems({part: parent}, {}, \"\", lookActiveFeature, false)\r\n }\r\n\r\n optionFeatures = getOptionsFromNavItemsForFeature(lookActiveFeature, navItems, filterGroups, optionFeatures);\r\n return optionFeatures\r\n};\r\n\r\nexport const getOptionsFromNavItemsForFeature = (lookActiveFeature, navItems, filterGroups, optionFeatures = []) => {\r\n const activeFeatureCollectionName = lookActiveFeature.getCollectionName(filterGroups);\r\n const matchingOptionsName = lookActiveFeature.getMatchingOptionsName();\r\n const matchingFeatureProperty = lookActiveFeature.useMatchingFeatureReplacement || \"MatchingFeature\";\r\n\r\n for (let i = 0; i < navItems.length; i++) {\r\n const checkFeature = navItems[i].part || navItems[i];\r\n if (checkFeature.dbFeature.id === lookActiveFeature.dbFeature.id) {\r\n continue\r\n }\r\n if (checkFeature.getMatchingOptionsName() !== matchingOptionsName) {\r\n continue\r\n }\r\n // console.log(\"checkFeature\", checkFeature);\r\n const filterValue = getColorFilterValue(checkFeature, filterGroups);\r\n if (!filterValue) {\r\n continue\r\n }\r\n if (lookActiveFeature.metaData[matchingFeatureProperty] && !isEqual(lookActiveFeature.metaData[matchingFeatureProperty], checkFeature.metaData[matchingFeatureProperty])) {\r\n continue\r\n }\r\n if (document.kvConfig.visualizerType === \"bvLook\") {\r\n if (allowCheckForCollection(checkFeature) && (checkFeature.getCollectionName(filterGroups) !== activeFeatureCollectionName)) {\r\n continue\r\n }\r\n if (lookActiveFeature.partId !== \"vanity_sink\" && (lookActiveFeature.dbFeature.lixilProductSubCategory !== checkFeature.dbFeature.lixilProductSubCategory)) {\r\n continue\r\n }\r\n if (lookActiveFeature.partId === \"vanity_cabinet\" && lookActiveFeature.dbFeature.metaData[\"VanitySize\"]\r\n && !isEqual(lookActiveFeature.metaData[\"VanitySize\"], checkFeature.metaData[\"VanitySize\"])) {\r\n continue\r\n }\r\n }\r\n if (optionFeatures.every(optFeature => optFeature.colorValue.id !== filterValue.id)) {\r\n optionFeatures.push({\r\n feature: checkFeature,\r\n colorValue: filterValue\r\n })\r\n } else if (lookActiveFeature.partId === \"vanity_sink\" && (document.kvConfig.visualizerType === \"bvLook\")) {\r\n const alreadyAddedOptionIndex = optionFeatures.findIndex(optFeature => optFeature.colorValue.id === filterValue.id);\r\n if (alreadyAddedOptionIndex > -1\r\n && !isEqual(optionFeatures[alreadyAddedOptionIndex].feature.metaData[\"MountHoles\"], lookActiveFeature.metaData[\"MountHoles\"])\r\n && isEqual(checkFeature.metaData[\"MountHoles\"], lookActiveFeature.metaData[\"MountHoles\"])) {\r\n optionFeatures.splice(alreadyAddedOptionIndex, 1, {\r\n feature: checkFeature,\r\n colorValue: filterValue\r\n })\r\n }\r\n }\r\n }\r\n return optionFeatures\r\n}\r\n\r\n\r\n/**\r\n * returns matching color feature depending on the feature passed\r\n * @param activeFeature {featureInterface}\r\n * @param notMatchingFeature {featureInterface}\r\n * @param filterGroups {array}\r\n * @returns featureFound {featureInterface}\r\n */\r\nexport const getMatchingColorFeature = (activeFeature, notMatchingFeature, filterGroups) => {\r\n if (activeFeature) { //just in case\r\n const colorFilterValue = getColorFilterValue(activeFeature, filterGroups);\r\n const currentCollectionName = notMatchingFeature.getCollectionName(filterGroups);\r\n const currentFeatureName = activeFeature.getSplittedFeatureName();\r\n const parent = notMatchingFeature.getParent();\r\n const navItems = parent.navigationSubItems({}, \"\", notMatchingFeature);\r\n\r\n let featureFound = null;\r\n let featureFoundItems = navItems.filter((navItem) => { // 2) match by color filter\r\n const colorValue = getColorFilterValue(navItem.part, filterGroups);\r\n return !!(colorValue && colorFilterValue && (\r\n (colorValue.id === colorFilterValue.id)\r\n || [colorValue,colorFilterValue].every(filterValue => filterValue.displayText && filterValue.displayText.toLowerCase().includes(\"chrome\"))\r\n ));\r\n });\r\n if (featureFoundItems.length) {\r\n featureFound =\r\n featureFoundItems.find(navItem => navItem.part.getSplittedFeatureName() === currentFeatureName) // 2) match by sku\r\n || featureFoundItems.find(navItem => navItem.part.getCollectionName(filterGroups) === currentCollectionName) // 3) match by collection\r\n || featureFoundItems[0]; // 4) return at least something\r\n } else {\r\n featureFound = navItems.find(navItem => {\r\n return navItem.part.getSplittedFeatureName() === currentFeatureName // 2) match by sku\r\n });\r\n }\r\n return featureFound\r\n }\r\n return null\r\n};\r\n\r\n/**\r\n * returns same color features but different feature groups\r\n * @param lookActiveFeature {featureInterface}\r\n * @param filterGroups {array}\r\n * @param sameColorOnly {boolean}\r\n * @returns sameColorFeatures {array}\r\n */\r\nexport const getSameColorFeatures = (lookActiveFeature, filterGroups, sameColorOnly = true) => {\r\n let sameColorFeatures = [];\r\n let differentColorFeatures = [];\r\n const doNotShowStylePopupFor = [\"bathtub_body\", \"vanity_cabinet\", \"vanity_middle\", \"shower_pan_combo\", \"replacement_tub\"];\r\n const isAsBathroom = getCurrentRoomType() === LOOK_ROOM_TYPES.as;\r\n\r\n if (lookActiveFeature && (doNotShowStylePopupFor.includes(lookActiveFeature.partId)) && isAsBathroom) {\r\n return {sameColorFeatures, differentColorFeatures}\r\n }\r\n\r\n const featureGroups = getLookList(true);\r\n if (featureGroups) {\r\n const activeFilterGroupValue = getColorFilterValue(lookActiveFeature, filterGroups);\r\n featureGroups.forEach(parentObject => {\r\n if (activeFilterGroupValue && parentObject.cartFeature && (parentObject.cartFeature.partId !== lookActiveFeature.partId)) {\r\n const colorValue = getColorFilterValue(parentObject.cartFeature, filterGroups);\r\n if (colorValue && (colorValue.id !== activeFilterGroupValue.id)) {\r\n const sameFeatureAsActive = getMatchingColorFeature(lookActiveFeature, parentObject.cartFeature, filterGroups);\r\n const bathroomShowerPanExclude = isAsBathroom\r\n && (sameFeatureAsActive && sameFeatureAsActive.part.partId === \"shower_pan_combo\")\r\n && sameFeatureAsActive.part.getParent().getParent().layout.parts[\"Shower Tub Combo\"]\r\n && sameFeatureAsActive.part.getParent().getParent().layout.parts[\"Shower Tub Combo\"].showerTubComboIsActive;\r\n if (sameFeatureAsActive && !bathroomShowerPanExclude) {\r\n sameColorFeatures.push(sameFeatureAsActive.part);\r\n differentColorFeatures.push(parentObject.cartFeature);\r\n } else if (IS_PRODUCT_JOURNEY && !sameColorOnly) {\r\n differentColorFeatures.push(parentObject.cartFeature);\r\n }\r\n } else if (IS_PRODUCT_JOURNEY && !sameColorOnly) {\r\n differentColorFeatures.push(parentObject.cartFeature);\r\n }\r\n }\r\n })\r\n }\r\n // console.log(\"sameColorFeatures\", sameColorFeatures);\r\n // console.log(\"differentColorFeatures\", differentColorFeatures);\r\n return {sameColorFeatures, differentColorFeatures}\r\n};\r\n\r\n/**\r\n * returns same color features but different feature groups\r\n * @param lookActiveFeature {featureInterface}\r\n * @param fromArray {array}\r\n * @param filterGroups {array}\r\n * @returns displayFeatures {array}\r\n */\r\nexport const getDisplaySameColorGroups = (lookActiveFeature, fromArray, filterGroups) => {\r\n\r\n if (!lookActiveFeature || !fromArray.length || !filterGroups) {\r\n return []\r\n }\r\n\r\n // const activeFilterGroupValue = getColorFilterValue(lookActiveFeature, filterGroups);\r\n const activeCollectionFilterGroupValue = lookActiveFeature.getCollectionName(filterGroups);\r\n\r\n let displayFeatures = [];\r\n let otherGroup = {\r\n colName: \"other\",\r\n features: []\r\n }\r\n let currentColGroup = {\r\n colName: activeCollectionFilterGroupValue,\r\n features: []\r\n }\r\n if (activeCollectionFilterGroupValue) {\r\n displayFeatures.push(currentColGroup)\r\n }\r\n displayFeatures.push(otherGroup);\r\n\r\n\r\n fromArray.forEach(feature => {\r\n if (displayFeatures.some(sameColorObject => sameColorObject.features.some(addedFeature => addedFeature.partId === feature.partId))) {\r\n return false\r\n }\r\n\r\n const currentCollectionValue = feature.getCollectionName(filterGroups);\r\n\r\n if (currentCollectionValue && activeCollectionFilterGroupValue && (currentCollectionValue === activeCollectionFilterGroupValue)) {\r\n currentColGroup.features.push(feature)\r\n } else {\r\n otherGroup.features.push(feature)\r\n }\r\n });\r\n displayFeatures = displayFeatures\r\n .filter(sameColorObject => sameColorObject.features.length)\r\n .sort((a,b) => (a.colName === \"other\") - (b.colName === \"other\"));\r\n\r\n // console.log(\"displayFeatures\", displayFeatures);\r\n\r\n return displayFeatures\r\n};\r\n\r\n\r\n/**\r\n * returns a list needed for integration\r\n * @param checkFeature {object}\r\n * @param filterGroups {array}\r\n * @returns {array}\r\n */\r\nexport const getSimilarItemsList = (checkFeature, filterGroups) => {\r\n if (!checkFeature) {\r\n return []\r\n }\r\n const featureGroups = getLookList();\r\n if (!featureGroups) {\r\n return []\r\n }\r\n let matchingFeatures = [];\r\n const activeFilterGroupValue = getColorFilterValue(checkFeature, filterGroups);\r\n const collectionName = checkFeature.getCollectionName(filterGroups);\r\n featureGroups.forEach(parentObject => {\r\n if (parentObject.partId === checkFeature.partId) {\r\n return\r\n }\r\n const navItems = parentObject.featureGroup.navigationSubItems({}, \"\", checkFeature)\r\n const sameColorItems = navItems.filter((navItem) => { // 2) match by color filter\r\n const colorValue = getColorFilterValue(navItem.part, filterGroups);\r\n return colorValue && activeFilterGroupValue && (colorValue.id === activeFilterGroupValue.id)\r\n });\r\n if (sameColorItems.length) {\r\n const sameCollectionFeature = sameColorItems.find(navItem => {\r\n return navItem.part.getCollectionName(filterGroups) === collectionName\r\n });\r\n matchingFeatures.push(sameCollectionFeature ? sameCollectionFeature.part : sameColorItems[0].part);\r\n } else if (parentObject.cartFeature) {\r\n // tubs, toilets and shower pans? for now let's push all\r\n matchingFeatures.push(parentObject.cartFeature);\r\n }\r\n })\r\n return matchingFeatures\r\n}\r\n\r\nconst setLayerPosition = (position, featureGroup) => {\r\n const sameFeature = featureGroup.getMatchingPositionFeature(position, featureGroup.activeFeature);\r\n // console.log(\"sameFeature\", sameFeature);\r\n if (sameFeature) {\r\n featureGroup.activeFeature = sameFeature;\r\n }\r\n featureGroup.layerPositions[position] = sameFeature || null; // if no feature found - erase previous\r\n}\r\n\r\nconst updateMirrorAndWallsCrop = (feature) => {\r\n const layout = getCurrentLayout();\r\n const vanityParent = layout.parts[\"Vanity\"];\r\n if (!vanityParent || !vanityParent.mirror || !vanityParent.relatedItems || !vanityParent.relatedItems.some(relItem => relItem.partId === feature.partId)) {\r\n return\r\n }\r\n vanityParent.mirror.setLayers(layout);\r\n const wallsParent = layout.parts[\"Walls\"];\r\n if (wallsParent && wallsParent.relatedItems) {\r\n wallsParent.relatedItems.forEach(wallFeatureGroup => {\r\n if (wallFeatureGroup.hasAdditionalParts) {\r\n wallFeatureGroup.checkIfFeaturePartIsMatching(); // update crops after mirror change\r\n }\r\n })\r\n }\r\n}\r\n\r\n/**\r\n * Updates Vanity related items sides\r\n * @param feature {featureInterface}\r\n * @param oldActiveFeature {featureInterface}\r\n */\r\nexport const updateVanitySides = (feature, oldActiveFeature = null) => {\r\n const layout = getCurrentLayout();\r\n const currentSideMeta = oldActiveFeature ? oldActiveFeature.metaData.layerPosition : null;\r\n const nextSideMeta = feature.metaData.layerPosition;\r\n const vanityParent = layout.parts[\"Vanity\"];\r\n if (!vanityParent || !vanityParent.relatedItems || !vanityParent.relatedItems.some(relItem => relItem.partId === feature.partId)\r\n || feature.partId === \"vanity_mirror\") { // vanity mirror is independent! it has Vanity Size and mirror shape meta\r\n return\r\n }\r\n\r\n if (feature.partId === \"vanity_cabinet\") {\r\n const nextVanityIsDouble = vanityParent.isDoubleVanity(feature);\r\n vanityParent.relatedItems.forEach(featureGroup => {\r\n if (feature.partId === featureGroup.partId || featureGroup.partId === \"vanity_mirror\") {\r\n // feature is already applied, no need to do anything\r\n return\r\n }\r\n if (featureGroup.layerPositions) {\r\n const isCountertopOrBacksplash = featureGroup.partId === \"vanity_countertop\" || featureGroup.partId === \"vanity_backsplash\";\r\n\r\n Object.keys(featureGroup.layerPositions).forEach(position => {\r\n if (isCountertopOrBacksplash) {\r\n if (position === feature.metaData.layerPosition || (position !== \"C\" && feature.metaData.layerPosition !== \"C\")) {\r\n setLayerPosition(position, featureGroup);\r\n } else {\r\n featureGroup.layerPositions[position] = null; // erase sibling positions\r\n }\r\n } else {\r\n if (position === \"C\" && (nextVanityIsDouble && feature.metaData.layerPosition === \"C\"\r\n || (!nextVanityIsDouble && nextSideMeta !== \"C\"))) {\r\n featureGroup.layerPositions[position] = null; // erase sibling positions\r\n } else if (position !== \"C\" && !nextVanityIsDouble && feature.metaData.layerPosition === \"C\") {\r\n featureGroup.layerPositions[position] = null; // erase sibling positions\r\n } else {\r\n setLayerPosition(position, featureGroup);\r\n }\r\n }\r\n })\r\n }\r\n })\r\n return\r\n }\r\n\r\n if (nextSideMeta === currentSideMeta) {\r\n return\r\n }\r\n if (!((currentSideMeta !== \"C\" && nextSideMeta === \"C\") || (nextSideMeta !== \"C\" && currentSideMeta === \"C\"))) {\r\n return // no need to change anything\r\n }\r\n\r\n vanityParent.relatedItems.forEach(featureGroup => {\r\n if (feature.partId === featureGroup.partId) {\r\n // feature is already applied, no need to do anything\r\n return\r\n }\r\n if (featureGroup.layerPositions) {\r\n Object.keys(featureGroup.layerPositions).forEach(position => {\r\n if ((position !== \"C\" && feature.metaData.layerPosition === \"C\") || (feature.metaData.layerPosition !== \"C\" && position === \"C\")) {\r\n if (featureGroup.getParent().vanity_type === \"vanity_cabinet\"\r\n && (featureGroup.partId === \"vanity_cabinet\")\r\n && (feature.metaData.layerPosition !== \"C\" && position === \"C\")\r\n && (featureGroup.layerPositions[\"C\"] && !featureGroup.layerPositions[\"L\"] && !featureGroup.layerPositions[\"R\"])\r\n && featureGroup.layerPositions[\"C\"].metaData[\"MatchingFeature\"]\r\n && featureGroup.layerPositions[\"C\"].metaData[\"MatchingFeature\"].includes(METADATA.NO)\r\n && featureGroup.layerPositions[\"C\"].metaData[\"VanityWidth\"]\r\n && featureGroup.layerPositions[\"C\"].metaData[\"VanityWidth\"] === 64) {\r\n return; // do not erase 64 vanity if we are trying to apply L sink, it can be used with 64 vanity size\r\n }\r\n featureGroup.layerPositions[position] = null; // erase sibling positions\r\n } else {\r\n if (nextSideMeta === position && featureGroup.layerPositions[position]) {\r\n // feature is already applied, no need to search for it\r\n return\r\n }\r\n setLayerPosition(position, featureGroup);\r\n }\r\n })\r\n }\r\n })\r\n}\r\n\r\n/**\r\n * Simple navigation feature click\r\n * @param feature {object}\r\n * @param updateLocalStorage {boolean}\r\n * @param forceClick {boolean}\r\n * @param updateVanityPositions {boolean}\r\n // * @param fromUrl {boolean}\r\n * @returns {boolean}\r\n */\r\nexport const navFeatureCLick = (feature, updateLocalStorage = true, forceClick = false, updateVanityPositions = true) => {\r\n const parent = feature.getParent();\r\n const featureIsLocked = getFeatureIsLocked(feature);\r\n if (featureIsLocked && !forceClick) {\r\n feature.handleClick(forceClick); // update active locked feature or active not in visualizer feature\r\n return false\r\n }\r\n\r\n const currentActiveFeature = parent.activeFeature;\r\n const asBathroom = getCurrentRoomType() === LOOK_ROOM_TYPES.as;\r\n if (asBathroom) {\r\n if (feature.partId === \"vanity_sink\" && (document.kvConfig.visualizerType === \"bvLook\")) {\r\n feature.handleClick(forceClick, true);\r\n } else if (feature.partId === \"vanity_cabinet\" && (document.kvConfig.visualizerType === \"bvLook\") && !updateVanityPositions) {\r\n feature.handleClick(forceClick, false); // do not click again on the sink, we came from the sink click\r\n } else {\r\n feature.handleClick(forceClick); // first set custom types (for vanity)\r\n }\r\n }\r\n if (!feature.notAvailableInVisualizer && parent.layerPositions && feature.metaData.layerPosition) { // prevent clicking on disabled item if same sku is opened for enabled feature\r\n // if (fromUrl && Object.keys(parent.layerPositions).some(layerPosition => !parent.layerPositions[layerPosition])) {\r\n // return false\r\n // }\r\n Object.keys(parent.layerPositions).forEach(position => {\r\n if (position === feature.metaData.layerPosition) {\r\n parent.layerPositions[position] = feature\r\n } else if ((position !== \"C\" && feature.metaData.layerPosition === \"C\") || (feature.metaData.layerPosition !== \"C\" && position === \"C\")) {\r\n parent.layerPositions[position] = null; // erase sibling positions\r\n } else {\r\n const sameFeature = parent.getMatchingPositionFeature(position, feature, null, parent.getActiveFeatureConditions(feature));\r\n // console.log(\"sameFeature\", sameFeature);\r\n parent.layerPositions[position] = sameFeature || null; // if no feature found - erase previous\r\n }\r\n });\r\n }\r\n if (parent.disabled) {\r\n parent.disabled = false;\r\n parent.disabledClick();\r\n }\r\n\r\n if (feature.partId === \"vanity_cabinet\" && (document.kvConfig.visualizerType === \"bvLook\") && !updateVanityPositions) {\r\n feature.handleClick(forceClick, false); // do not click again on the sink, we came from the sink click\r\n } else {\r\n feature.handleClick(forceClick); // update active feature or active not in visualizer feature\r\n }\r\n\r\n if (updateLocalStorage) {\r\n const layout = getCurrentLayout();\r\n store.dispatch(addLayoutHistory(layout.getActiveFeaturesAsObject(false, false, true)))\r\n }\r\n if (parent.layerPositions && feature.metaData.layerPosition && updateVanityPositions && !feature.notAvailableInVisualizer) {\r\n updateVanitySides(feature, currentActiveFeature);\r\n updateMirrorAndWallsCrop(feature);\r\n }\r\n}\r\n\r\n/**\r\n * For delete buttons\r\n * @param feature {object}\r\n * @param featureParent {object}\r\n * @param checkDisabledOnly {boolean}\r\n * @returns {boolean}\r\n */\r\nexport const checkIfFeatureDisabled = (feature, featureParent, checkDisabledOnly = false) => {\r\n if (!featureParent) {\r\n featureParent = feature.getParent();\r\n }\r\n const isDisabled = featureParent.layerPositions\r\n ? Object.keys(featureParent.layerPositions).every(pos => !featureParent.layerPositions[pos])\r\n : featureParent.disabled;\r\n return checkDisabledOnly ? isDisabled : isDisabled && featureParent.canBeDisabled\r\n}\r\n\r\n/**\r\n * Returns active features list for\r\n * @param withLayerPositions {boolean} return all positions features\r\n * @param withDisabled {boolean} return feature positions even disabled\r\n * @param showAllGroups {boolean} returns all layout feature groups\r\n * @param showAllQtCategories {boolean} returns quotingTool featureGroups\r\n * @param displayInMenu {boolean} whether to display in look menu\r\n * @returns {array} array of objects\r\n */\r\nexport const getLookList = (withLayerPositions = false,\r\n withDisabled = false,\r\n showAllGroups = false,\r\n showAllQtCategories = false,\r\n displayInMenu = false) => {\r\n const layout = getCurrentLayout();\r\n\r\n let featureGroups = [];\r\n\r\n if (showAllGroups) {\r\n layout.getFeatures().forEach(parent => {\r\n parent.relatedItems.forEach(featureGroup => {\r\n if (!featureGroup.activeFeature) {\r\n featureGroup.setDefault(layout, true);\r\n }\r\n if (!featureGroup.activeFeature) {\r\n return\r\n }\r\n featureGroups.push({\r\n selectionGroup: parent.partName,\r\n partId: featureGroup.partId,\r\n quantity: 0,\r\n cartFeature: featureGroup.activeFeature,\r\n featureGroup,\r\n })\r\n })\r\n });\r\n return featureGroups\r\n }\r\n\r\n if (((document.kvConfig.toolVersion !== 6 || showAllQtCategories) && layout.qtCategories)) {\r\n layout.qtCategories.forEach((qtCategory) => {\r\n qtCategory.defaultSubParts.forEach(subPart => {\r\n if (document.kvConfig.visualizerType === \"kvScene\") {\r\n if ((subPart.part.partId === \"center_island_edge\" && layout.type === 3)\r\n || (subPart.part.partId === \"crown_molding\" && (layout.type !== 1 && layout.type !== 4))) {\r\n return\r\n }\r\n }\r\n if (!featureGroups.some(parentObject => parentObject.partId === subPart.part.partId)) {\r\n featureGroups.push({\r\n selectionGroup: subPart.part.getParent().partName,\r\n partId: subPart.part.partId,\r\n quantity: 0,\r\n cartFeature: subPart.part.activeFeature, // it can be null here! it's ok since we need to show featureGroups from another layouts (for shop)\r\n featureGroup: subPart.part\r\n })\r\n }\r\n })\r\n })\r\n return featureGroups\r\n }\r\n\r\n let featureGroupsObjects = layout.getActiveFeatures(false, withLayerPositions, withDisabled);\r\n // console.log(\"parentGroups before wizard clean\", featureGroupsObjects);\r\n\r\n if (displayInMenu) {\r\n const {wizardList} = store.getState().wizardState;\r\n if (Array.isArray(wizardList) && wizardList.length) {\r\n wizardList.forEach(wizardItem => {\r\n if (wizardItem.hideItems && Array.isArray(wizardItem.wizardGroups) && wizardItem.wizardGroups.length) {\r\n featureGroupsObjects = featureGroupsObjects.filter(parentObject => {\r\n return wizardItem.wizardGroups.every(wizardGroup => {\r\n return (parentObject.featureGroup.dbName || parentObject.featureGroup.partName) !== wizardGroup.groupName\r\n })\r\n })\r\n }\r\n })\r\n }\r\n }\r\n\r\n const parentGroups = groupBy(featureGroupsObjects, 'selectionGroup');\r\n // console.log(\"parentGroups\", parentGroups);\r\n\r\n if (!Object.keys(parentGroups).length) {\r\n return null\r\n }\r\n\r\n const visType = getCommonVisualizerType();\r\n const sortByParents = visType === \"bathroom\"\r\n ? [\"Vanity\", \"Shower\", \"Shower Tub Combo\", \"Shower Accessories\", \"Bathtub\", \"Toilet\", \"Floor\", \"Walls\", \"Window\"]\r\n : visType === \"kitchen\"\r\n ? [\"Countertop\", \"CenterIsland\", \"Cabinet\", \"Appliances\", \"Walls\", \"Floor\"]\r\n : Object.keys(parentGroups);\r\n\r\n sortByParents.forEach(parentKey => {\r\n featureGroups = [...featureGroups, ...(parentGroups[parentKey] || [])]\r\n });\r\n\r\n if (getCurrentRoomType(layout) === LOOK_ROOM_TYPES.as) {\r\n const vanityParent = layout.parts[\"Vanity\"];\r\n featureGroups = featureGroups.filter(parentObject => {\r\n if (parentObject.partId === \"vanity_ws_towel_bar\" && vanityParent.vanity_type !== VANITY_TYPES.vanity_washstand) {\r\n return false\r\n } else if ((parentObject.partId === \"vanity_middle\" || parentObject.partId === \"vanity_legs\") && vanityParent.vanity_type !== VANITY_TYPES.vanity_cabinet) {\r\n return false\r\n }\r\n return !(vanityParent && Object.keys(VANITY_TYPES).includes(parentObject.partId) && vanityParent.vanity_type !== parentObject.partId);\r\n })\r\n }\r\n // console.log(\"featureGroups\", featureGroups);\r\n\r\n // simple hardcoded sort\r\n return featureGroups.filter(parentObject => parentObject.cartFeature)\r\n}\r\n\r\n/**\r\n * Returns look navigation list height\r\n * @param lmFeatureParent {object}\r\n * @param lookViewType {number}\r\n * @param lookParentKeys {array}\r\n * @returns {number}\r\n */\r\nexport const getLookListHeight = (lmFeatureParent, lookViewType, lookParentKeys) => {\r\n const opened = lookParentKeys.includes(lmFeatureParent.partId);\r\n // const featuresLength = parentGroups[parentKey].length;\r\n let featuresLength = 1;\r\n if (lmFeatureParent.layerPositions) {\r\n if (POSSIBLE_ONE_POSITION.includes(lmFeatureParent.partId)) {\r\n featuresLength = 0;\r\n Object.keys(lmFeatureParent.layerPositions).forEach(position => {\r\n if (lmFeatureParent.getMatchingPositionFeature(position)) {\r\n featuresLength += 1;\r\n }\r\n });\r\n } else {\r\n featuresLength = Object.keys(lmFeatureParent.layerPositions).length\r\n }\r\n }\r\n let listHeight = 0;\r\n const styleNotificationIsVisible = getStyleAlertIsVisibleForGroup(lmFeatureParent);\r\n if (opened) {\r\n switch (lookViewType) {\r\n case 1:\r\n default:\r\n listHeight = 104 * featuresLength; // feature height 88 + feature margin 16\r\n break;\r\n case 2:\r\n listHeight = (172 + 22) * Math.ceil(featuresLength / 2); // feature height 156 + feature margin 16 + featureName 22\r\n break;\r\n case 3:\r\n listHeight = (280 + 22 + 16) * featuresLength; // feature height 280 + feature margin 16 + featureName 22\r\n break;\r\n }\r\n if (styleNotificationIsVisible) {\r\n listHeight += 96 // 80 + 8 + 8 margins\r\n }\r\n }\r\n return listHeight\r\n}\r\n\r\nconst disallowedSkus = [\"athtub\"];\r\n\r\n/**\r\n * @param feature {featureInterface}\r\n * @returns {boolean}\r\n */\r\nexport const checkIfFeatureCanBeAddedToTheCart = (feature) => {\r\n return (document.kvConfig.visualizerOnly || isVisibleForNavigation(feature, true)) && !disallowedSkus.some(sku => feature.dbFeature.sharedFeatureName.includes(sku))\r\n}\r\n\r\n/**\r\n * Creates cart items list depending on quotingTool features\r\n * @param qtActiveCategory {string} current active quote category name\r\n * @param loadByTheDefault {object} loadByTheDefault object from localstorage\r\n * @returns {array} array of cart items\r\n */\r\nexport const createCartList = (qtActiveCategory, loadByTheDefault = null) => {\r\n const featureGroups = getLookList(true);\r\n let cartItems = [];\r\n if (featureGroups && featureGroups.length) {\r\n featureGroups.forEach(featureGroup => {\r\n if ((getCurrentRoomType() === LOOK_ROOM_TYPES.as) && featureGroup.featureGroup.hideLayerCondition && featureGroup.featureGroup.hideLayerCondition()) {\r\n return\r\n }\r\n const existingCartItem = cartItems.find(cItem => {\r\n if (!featureGroup.cartFeature) {\r\n return null\r\n }\r\n return (cItem.partId === featureGroup.cartFeature.partId)\r\n && cItem.cartFeature.dbFeature.sharedFeatureName && featureGroup.cartFeature.dbFeature.sharedFeatureName\r\n && (cItem.cartFeature.dbFeature.sharedFeatureName === featureGroup.cartFeature.dbFeature.sharedFeatureName)\r\n });\r\n let quantity = 1;\r\n let loadByTheDefaultCItem = null;\r\n if (loadByTheDefault && loadByTheDefault.cartState && Array.isArray(loadByTheDefault.cartState.cartItems)){\r\n loadByTheDefaultCItem = loadByTheDefault.cartState.cartItems.find(cItem => {\r\n const foundFeature = featureGroup.featureGroup.getFeatureById(cItem.cartFeature.dbFeatureId, true)\r\n if (foundFeature) {\r\n return foundFeature.dbFeature.sharedFeatureName && featureGroup.cartFeature.dbFeature.sharedFeatureName\r\n && (foundFeature.dbFeature.sharedFeatureName === featureGroup.cartFeature.dbFeature.sharedFeatureName)\r\n }\r\n return cItem.cartFeature.dbFeatureId === featureGroup.cartFeature.dbFeature.id\r\n })\r\n if (loadByTheDefaultCItem) {\r\n quantity = loadByTheDefaultCItem.quantity;\r\n } else {\r\n quantity = 0\r\n }\r\n }\r\n\r\n if (existingCartItem && quantity) {\r\n if (!loadByTheDefaultCItem) {\r\n existingCartItem.quantity += quantity;\r\n }\r\n } else if (featureGroup.cartFeature && checkIfFeatureCanBeAddedToTheCart(featureGroup.cartFeature) && quantity) {\r\n const newCartItem = getCartItemObject(featureGroup.cartFeature, quantity, qtActiveCategory);\r\n newCartItem.addedBy = CART_ITEM_ADDED_BY.auto;\r\n cartItems.push(newCartItem);\r\n const relatedFeatures = getBundledFeatures(featureGroup.cartFeature);\r\n relatedFeatures.forEach((relatedFeature) => {\r\n let relatedItemQuantity = 1;\r\n if (loadByTheDefault && loadByTheDefault.cartState && Array.isArray(loadByTheDefault.cartState.cartItems)) {\r\n const alreadyAddedRelatedFeature = loadByTheDefault.cartState.cartItems.find(cartItem => {\r\n return cartItem.cartFeature.dbFeatureId === relatedFeature.dbFeature.id\r\n });\r\n if (alreadyAddedRelatedFeature) {\r\n relatedItemQuantity = alreadyAddedRelatedFeature.quantity\r\n }\r\n }\r\n const cartItem = getCartItemObject(relatedFeature, relatedItemQuantity, qtActiveCategory);\r\n cartItem.relatedProductParent = featureGroup.cartFeature;\r\n cartItem.addedBy = CART_ITEM_ADDED_BY.auto;\r\n cartItems.push(cartItem);\r\n })\r\n }\r\n })\r\n }\r\n return cartItems\r\n}\r\n\r\n/**\r\n * Returns layer center\r\n * @param coords {object} metadata object // {min_x: 0.2109375, min_y: 1.3685185185185185, max_x: 1.9994791666666667, max_y: 2}\r\n * @param canvasElement {$ElementType} canvas\r\n * @param isMobile {boolean} on mobile we have different menu position\r\n * @returns {object}\r\n */\r\nexport const getLayerCenter = (coords, canvasElement, isMobile = false) => {\r\n if (!coords) {\r\n return null\r\n }\r\n let {clientWidth, clientHeight} = canvasElement;\r\n const COORDS_MAX = 1;\r\n // const openedMenuWidth = 712;\r\n // console.log(\"clientWidth\", clientWidth);\r\n // console.log(\"clientWidth - openedMenuWidth\", openedMenuWidth);\r\n // const threeQuater = clientWidth - (clientWidth / 4);\r\n // const featureViewWidth = (clientWidth - openedMenuWidth) / 2;\r\n let centerXPercentage = ((coords.min_x + ((coords.max_x - coords.min_x) / 2)) * 100) / COORDS_MAX;\r\n const centerYPercentage = ((coords.min_y + ((coords.max_y - coords.min_y) / 2)) * 100) / COORDS_MAX; // 1.5 ⋅ 100 : 2 = 75%\r\n // console.log(\"centerXPercentage\", centerXPercentage);\r\n // let scrollPercentage = 0;\r\n let x = 0;\r\n // if (isMobile) {\r\n //\r\n // const menuWidth = 320;\r\n // const shiftX = clientWidth - (clientWidth * centerXPercentage / 100);\r\n // const containerScrolled = shiftX < menuWidth;\r\n //\r\n // const startZeroPosition = IS_PRODUCT_JOURNEY ? 15 : 13;\r\n //\r\n // scrollPercentage = centerXPercentage < startZeroPosition\r\n // ? 0\r\n // : centerXPercentage > 54\r\n // ? centerXPercentage - ((100 - centerXPercentage) / 3) // 80 + 5 = 85\r\n // // ? centerXPercentage // 80 + 5 = 85\r\n // : centerXPercentage - ((35 - centerXPercentage) - ((centerXPercentage / 100) * (35 - centerXPercentage))) // 1) calculate percent of scroll from 75 2) 61 - 12%;\r\n // if (containerScrolled && (centerXPercentage > 50) && (centerXPercentage < 60)) {\r\n // scrollPercentage = centerXPercentage - ((100 - centerXPercentage) / 5)\r\n // }\r\n // x = (clientWidth * scrollPercentage) / 100;\r\n // } else {\r\n const zoomPercentage = 75;\r\n if (centerXPercentage < zoomPercentage) {\r\n\r\n const openedMenuWidth = IS_PRODUCT_JOURNEY ? 412 : 360;\r\n // const featureViewWidth = IS_PRODUCT_JOURNEY ? clientWidth - openedMenuWidth : (clientWidth - openedMenuWidth - 64); // 64 is sidebar\r\n const featureMinX = (clientWidth * (coords.min_x * 100 / COORDS_MAX)) / 100;\r\n const featureMaxX = (clientWidth * (coords.max_x * 100 / COORDS_MAX)) / 100;\r\n const featureCenter = featureMinX + (featureMaxX - featureMinX) / 2;\r\n // console.log(\"clientWidth\", clientWidth);\r\n // console.log(\"featureViewWidth\", featureViewWidth);\r\n // console.log(\"centerXPercentage\", centerXPercentage);\r\n // console.log(\"centerXPercentage\", centerXPercentage);\r\n // console.log(\"featureMinX\", featureMinX);\r\n // console.log(\"featureMaxX\", featureMaxX);\r\n const gPointPercent = 40; // don't ask me why, just because it is magic number\r\n const shiftX = clientWidth - (clientWidth * centerXPercentage / 100);\r\n if (IS_PRODUCT_JOURNEY && isMobile && (shiftX > GROHE_CONFIG.sidebarWidth.mobile)) {\r\n x = featureCenter - (clientWidth * (gPointPercent - centerXPercentage)) / 100;\r\n } else {\r\n x = featureCenter - (clientWidth * (gPointPercent - centerXPercentage)) / 100 - (openedMenuWidth / 2);\r\n }\r\n } else {\r\n x = clientWidth;\r\n }\r\n // }\r\n // console.log(\"scrollPercentage\", scrollPercentage);\r\n\r\n const y = (clientHeight * centerYPercentage) / 100; // 1920 ⋅ 75 : 100\r\n\r\n // console.log(\"getLayerCenter\", {x, y});\r\n // console.log(\"getLayerCenter\", {x, y, isMobile, featureX: centerXPercentage, clientWidth});\r\n return {x, y, isMobile, featureX: centerXPercentage, clientWidth}\r\n}\r\n\r\n/**\r\n * Returns layer center\r\n * @param coords {object} metadata object // {min_x: 0.2109375, min_y: 1.3685185185185185, max_x: 1.9994791666666667, max_y: 2}\r\n * @param canvasElement {$ElementType} canvas\r\n * @returns {object}\r\n */\r\nexport const getCoordsCenter = (coords, canvasElement) => {\r\n let {clientWidth, clientHeight} = canvasElement;\r\n const COORDS_MAX = 1;\r\n let centerXPercentage = ((coords.min_x + ((coords.max_x - coords.min_x) / 2)) * 100) / COORDS_MAX;\r\n const centerYPercentage = ((coords.min_y + ((coords.max_y - coords.min_y) / 2)) * 100) / COORDS_MAX; // 1.5 ⋅ 100 : 2 = 75%\r\n\r\n const x = (clientWidth * centerXPercentage) / 100;\r\n const y = (clientHeight * centerYPercentage) / 100; // 1920 ⋅ 75 : 100\r\n\r\n // console.log(\"getLayerCenter\", {x, y});\r\n return {x, y}\r\n}\r\n\r\n/**\r\n * Returns layer center\r\n * @returns {object}\r\n */\r\nexport const getCropCoordsCenter = (feature) => {\r\n if (feature.metaData[\"CropCoords\"]) {\r\n const parsedCoords = getFeatureCropCoors(feature);\r\n // const {clientWidth, clientHeight} = canvasElement;\r\n const clientWidth = 1920;\r\n const clientHeight = 1080;\r\n\r\n const changed = {\r\n min_x: parsedCoords[0] / clientWidth,\r\n min_y: parsedCoords[1] / clientHeight,\r\n max_x: parsedCoords[2] / clientWidth,\r\n max_y: parsedCoords[3] / clientHeight,\r\n }\r\n // if (feature.partId) {\r\n // console.log(\"original\", feature.metaData[\"Coords\"]);\r\n // console.log(\"changed\", changed);\r\n // }\r\n return changed\r\n }\r\n return feature.metaData[\"Coords\"]\r\n}\r\n\r\n/**\r\n * Returns bool\r\n * @param lookFeature {object} feature\r\n * @param fromStyleAlertIcon {boolean}\r\n * @returns {array} not matching features\r\n */\r\nexport const getStyleAlertNotMatchingFeatures = (lookFeature, fromStyleAlertIcon = false) => {\r\n let notMatchingFeatures = [];\r\n if (lookFeature) {\r\n const featureGroup = lookFeature.getParent();\r\n\r\n if (fromStyleAlertIcon && !featureGroup.confirmedChange) {\r\n return notMatchingFeatures\r\n }\r\n\r\n const currentFeatureName = lookFeature.getSplittedFeatureName();\r\n // console.log(\"currentFeatureName\", currentFeatureName);\r\n const wallsPartIds = [\"left_wall\", \"front_wall\", \"right_wall\"];\r\n if (wallsPartIds.includes(lookFeature.partId)) {\r\n const layout = getCurrentLayout();\r\n wallsPartIds.forEach(wallPartId => {\r\n const wallGroup = layout.getFeatureGroupByPartId(wallPartId);\r\n if (wallGroup && wallGroup.activeFeature && (wallGroup.activeFeature.getSplittedFeatureName() !== currentFeatureName)) {\r\n // console.log(\"wallGroup.activeFeature.getSplittedFeatureName()\", wallGroup.activeFeature.getSplittedFeatureName());\r\n\r\n notMatchingFeatures.push(wallGroup.activeFeature);\r\n }\r\n })\r\n } else if (featureGroup.layerPositions && lookFeature.metaData.layerPosition) {\r\n Object.keys(featureGroup.layerPositions).forEach(position => {\r\n const feature = featureGroup.layerPositions[position];\r\n if (feature && (feature.dbFeature.id !== lookFeature.dbFeature.id)\r\n && (feature.getSplittedFeatureName() !== currentFeatureName)) {\r\n notMatchingFeatures.push(feature)\r\n }\r\n })\r\n }\r\n }\r\n return notMatchingFeatures\r\n}\r\n\r\n/**\r\n * Returns bool\r\n * @param featureGroup {object} featureGroup\r\n * @returns {boolean}\r\n */\r\nexport const getStyleAlertIsVisibleForGroup = (featureGroup) => {\r\n let alertIsVisible = false;\r\n if (featureGroup.layerPositions) {\r\n let names = [];\r\n Object.keys(featureGroup.layerPositions).forEach(position => {\r\n const feature = featureGroup.layerPositions[position];\r\n if (feature) {\r\n const featureName = feature.getSplittedFeatureName();\r\n names.push(featureName)\r\n }\r\n });\r\n alertIsVisible = Object.keys(featureGroup.layerPositions).some(position => {\r\n const feature = featureGroup.layerPositions[position];\r\n if (feature) {\r\n const featureName = feature.getSplittedFeatureName();\r\n return names.some(name => name !== featureName)\r\n }\r\n return false\r\n })\r\n }\r\n return alertIsVisible\r\n}\r\n\r\n/**\r\n * Returns array of not matched features partIds\r\n * @returns {array}\r\n */\r\nexport const getAllNotMatchingPartIds = () => {\r\n const layout = getCurrentLayout();\r\n const allFeatures = layout.getActiveFeatures(false);\r\n return allFeatures\r\n .filter(feature => getStyleAlertNotMatchingFeatures(feature.cartFeature).length)\r\n .map(feature => feature.partId);\r\n}\r\n\r\n/**\r\n * @param key {string} key\r\n * @param value {any}\r\n */\r\nexport const setLocalStorageItem = (key, value) => {\r\n try {\r\n window.localStorage.setItem(key, value);\r\n } catch (ex) { console.log(\"localStorage exception\", ex); }\r\n}\r\n\r\nexport const getLocalStorageItem = (key) => {\r\n let item = null;\r\n try {\r\n item = JSON.parse(window.localStorage.getItem(key));\r\n } catch (ex) { console.log(\"localStorage exception\", ex); }\r\n return item\r\n}\r\n\r\n/**\r\n * zooms canvas to default position\r\n * @param imageCanvas {object}\r\n * @param setCanvasScale {function}\r\n */\r\nexport const zoomCanvasOut = (imageCanvas, setCanvasScale) => {\r\n if (imageCanvas && imageCanvas.current && imageCanvas.current.pinchZoom) {\r\n imageCanvas.current.pinchZoom.zoomToCenter(null, 1);\r\n // removed as we don't see crown molding on unzoom, decided not to unzoom to floor\r\n // const scrollCheck = document.body.scrollHeight - document.body.clientHeight;\r\n // if (!scrollCheck || (scrollCheck > (document.documentElement.scrollTop + 1))) {\r\n // $(\"html, body\").animate({scrollTop: document.body.scrollHeight}, 1000);\r\n // }\r\n setCanvasScale(1);\r\n }\r\n}\r\n\r\n/**\r\n * creates all available rooms and room scenes\r\n * @param returnAllLayouts {boolean}\r\n * @returns objects {array}\r\n */\r\nexport const getRoomLayouts = (returnAllLayouts = false) => {\r\n const newLooks = [];\r\n const layout = getCurrentLayout();\r\n const layoutNames = Object.keys(layout.layoutNames).filter(key => key !== \"All\");\r\n const parents = layout.getFeatures();\r\n const isAsBathroom = getCurrentRoomType() === LOOK_ROOM_TYPES.as;\r\n parents.forEach(parent => {\r\n parent.relatedItems.forEach(relItem => {\r\n layoutNames.forEach(layoutName => {\r\n const features = relItem.featuresList[layoutName];\r\n for (let i = 0; i < features.length; i++) {\r\n const feature = features[i];\r\n const roomLayout = feature.dbFeature.metaData[\"RoomLayout\"];\r\n const roomScene = feature.dbFeature.metaData[\"RoomScene\"];\r\n if (document.kvConfig.toolVersion === 4) {\r\n if (feature.dbFeature.s3Bindings && Array.isArray(roomLayout) && !newLooks.some(look => look.lookLayout === layoutName)) {\r\n newLooks.push({\r\n lookLayout: layoutName,\r\n lookScene: \"1\",\r\n })\r\n }\r\n } else if (feature.dbFeature.s3Bindings && Array.isArray(roomLayout) && Array.isArray(roomScene) && roomLayout.length && roomScene.length) {\r\n if (!newLooks.some(look => (look.lookLayout === roomLayout[0]) && (look.lookScene === roomScene[0]))\r\n && (!isAsBathroom || (roomScene[0] === \"1\"))) {\r\n newLooks.push({\r\n lookLayout: roomLayout[0],\r\n lookScene: roomScene[0],\r\n })\r\n }\r\n }\r\n }\r\n })\r\n })\r\n });\r\n console.log(\"newLooks\", newLooks);\r\n if (returnAllLayouts || (document.kvConfig.toolVersion === 4) || (\r\n document.kvConfig.userId === 140000\r\n || document.kvConfig.userId === 140001\r\n || window.location.href.includes(\"quote_bathroom_2022\")\r\n || window.location.href.includes(\"qc_main_bathroom_set_2022\"))) {\r\n return newLooks\r\n }\r\n const currentName = layout.getCurrentLayoutName();\r\n // if (getCurrentRoomType() === LOOK_ROOM_TYPES.as) {\r\n // return newLooks\r\n // }\r\n return newLooks.filter(look => look.lookLayout === currentName)\r\n}\r\n\r\n/**\r\n * parses passed URL, and returns look ID, look category and sku\r\n * @param checkURL {string}\r\n * @returns parsedUrl {object}\r\n */\r\nexport const getParsedLookUrl = (checkURL = window.location.href) => {\r\n const regexForRoomPreset = /\\/look(.*?)$/;\r\n let lookIdFromUrl = checkURL.includes(\"/look\") ? checkURL.match(regexForRoomPreset)[1] : null;\r\n\r\n if (!lookIdFromUrl) {\r\n return {}\r\n }\r\n\r\n let featureGroupFromUrl = \"\";\r\n let skuFromUrl = \"\";\r\n\r\n let splittedLookPath = lookIdFromUrl.split(\"/\");\r\n if (lookIdFromUrl && splittedLookPath.length) {\r\n lookIdFromUrl = +splittedLookPath[0].replace(\"-\", \"\");\r\n featureGroupFromUrl = splittedLookPath[2] ? splittedLookPath[1] : null;\r\n skuFromUrl = splittedLookPath[2] || splittedLookPath[1];\r\n }\r\n // console.log(\"{lookIdFromUrl, featureGroupFromUrl, skuFromUrl}\", {lookIdFromUrl, featureGroupFromUrl, skuFromUrl});\r\n\r\n return {lookIdFromUrl, featureGroupFromUrl, skuFromUrl}\r\n}\r\n\r\n/**\r\n * compares currect and common coords - gives max & min values\r\n * @param currentCoords {object}\r\n * @param commonCoords {object}\r\n * @returns {object}\r\n */\r\nexport const compareCoords = (currentCoords, commonCoords) => {\r\n if (currentCoords) {\r\n [\"min_x\",\"min_y\",].forEach(coordProp => {\r\n if (!commonCoords[coordProp] || (commonCoords[coordProp] > currentCoords[coordProp])) {\r\n commonCoords[coordProp] = currentCoords[coordProp];\r\n }\r\n });\r\n [\"max_x\", \"max_y\"].forEach(coordProp => {\r\n if (!commonCoords[coordProp] || (commonCoords[coordProp] < currentCoords[coordProp])) {\r\n commonCoords[coordProp] = currentCoords[coordProp];\r\n }\r\n });\r\n }\r\n return commonCoords\r\n}\r\n\r\n/**\r\n * compares currect and common coords - gives max & min values\r\n * @param feature {featureInterface}\r\n * @param isWizard {boolean}\r\n * @returns {object}\r\n */\r\nexport const getFeatureCoords = (feature, isWizard = false) => {\r\n if (document.kvConfig.visualizerType === \"kvScene\"\r\n && feature.metaData[\"RoomLayout\"] && feature.metaData[\"RoomLayout\"].includes('Layout1')\r\n && feature.metaData[\"RoomScene\"] && feature.metaData[\"RoomScene\"].includes('1')) {\r\n if ((feature.partId === \"top_cabinet\" || feature.partId === \"bottom_cabinet\")) {\r\n return feature.metaData[\"Coords\"]\r\n ? Object.assign({}, feature.metaData[\"Coords\"], {max_x: 0.2}) // do not zoom to right part of it\r\n : {min_x: 0, min_y: 0, max_x: 0.2, max_y: 0.38}\r\n } else if (feature.partId === \"crown_molding\") {\r\n return isWizard\r\n ? {min_x: 0.5, min_y: 0, max_x: 0.7, max_y: 0.1}\r\n : {min_x: 0.4, min_y: 0, max_x: 0.6, max_y: 0.1} // do not zoom to left part of it\r\n }\r\n\r\n }\r\n if (document.kvConfig.visualizerType === \"bvLook\" && feature.metaData[\"Coords\"]) {\r\n\r\n if (feature.partId === \"shower_wall\") {\r\n if (feature.metaData[\"RoomLayout\"] && feature.metaData[\"RoomLayout\"].includes('Layout18')) {\r\n return Object.assign({}, feature.metaData[\"Coords\"], {max_x: feature.metaData[\"Coords\"].max_x / 1.8})\r\n }\r\n }\r\n }\r\n return feature.metaData[\"Coords\"]\r\n}\r\n\r\n/**\r\n * parses passed URL, and returns look ID, look category and sku\r\n * @param featureGroup {object}\r\n * @param clickedFeature {object}\r\n * @param canvasElement {$ElementType} canvas\r\n * @param layerPosition {string}\r\n * @returns parsedUrl {object}\r\n */\r\nexport const getCommonCoords = (featureGroup, clickedFeature = null, canvasElement = null, layerPosition = \"\") => {\r\n\r\n const layout = getCurrentLayout();\r\n let zoomFeatureGroup;\r\n switch (featureGroup.partId) {\r\n case \"edge_profile\":\r\n zoomFeatureGroup = layout.getFeatureGroupByPartId(\"countertop\") || featureGroup;\r\n break;\r\n case \"center_island_edge\":\r\n zoomFeatureGroup = layout.getFeatureGroupByPartId(\"center_island_countertop\") || featureGroup;\r\n break;\r\n default:\r\n zoomFeatureGroup = featureGroup\r\n break;\r\n }\r\n\r\n let commonCoords = clickedFeature ? clickedFeature.metaData.Coords || {} : {};\r\n if (!clickedFeature && layerPosition) {\r\n clickedFeature = zoomFeatureGroup.getMatchingPositionFeature(layerPosition);\r\n }\r\n\r\n const navItems = layout.designNavigationItems({part: zoomFeatureGroup}, {}, \"\", clickedFeature, true);\r\n\r\n for (let i = 0; i < navItems.length; i++) {\r\n const currentFeature = navItems[i].part;\r\n let currentCoords = getCropCoordsCenter(currentFeature, canvasElement);\r\n commonCoords = compareCoords(currentCoords, commonCoords);\r\n }\r\n if ((getCurrentRoomType() === LOOK_ROOM_TYPES.as) && [\"front_wall\", \"right_wall\"].some(partId => zoomFeatureGroup.partId === partId)) {\r\n commonCoords.min_x = 0.8 // because of the reflection in mirror, it sets min_x to 0.1, so the menu is not scrolling on open\r\n }\r\n return commonCoords\r\n}\r\n\r\n/**\r\n * toggles array val\r\n * @param array {array}\r\n * @param value {any}\r\n * @returns array {array}\r\n */\r\nexport const toggleArrayValue = (array, value) => {\r\n let newArray = [...array];\r\n let index = newArray.indexOf(value);\r\n (index >= 0) ? newArray.splice(index, 1) : newArray.push(value);\r\n return newArray;\r\n};\r\n\r\n/**\r\n * Checks if it is needed to show a context menu\r\n * @param partId {string}\r\n * @param layerPosition {string}\r\n * @param fabricatorData {object}\r\n * @returns object\r\n */\r\nexport const checkForContextMenuCommon = (partId, layerPosition, fabricatorData) => {\r\n const returnObject = {\r\n allButtons: [], // {partId: \"\", translateId: \"\", isWizard: true, wizardId: sting|number, hasSubMenu: false}\r\n showButtons: [] // {partId: \"\", translateId: \"\", isWizard: true, wizardId: sting|number, hasSubMenu: false}\r\n }\r\n if (!partId) {\r\n return returnObject\r\n }\r\n const isBathroom = getCommonVisualizerType() === \"bathroom\";\r\n if (isBathroom && (fabricatorData && fabricatorData.isEncore)) {\r\n return returnObject\r\n }\r\n const allContextMenus = isBathroom ? ALL_CONTEXT_MENU : ALL_CONTEXT_MENU_KITCHEN;\r\n if (!allContextMenus.includes(partId)) {\r\n return returnObject\r\n }\r\n // if (imageCanvas.current && imageCanvas.current.setHoveredLayer) {\r\n // imageCanvas.current.renderGreenLayerByZindex(hoveredLayer.zIndex);\r\n\r\n let whereToCheck = isBathroom\r\n ? [CONTEXT_MENU_VANITY_BUTTONS, CONTEXT_MENU_BATHTUB_BUTTONS, CONTEXT_MENU_SPLIT_WALL, CONTEXT_MENU_SHOWER_ALL,\r\n CONTEXT_MENU_SHOWER_OTHER]\r\n : [CONTEXT_MENU_KITCHEN_CENTER_ISLAND, CONTEXT_MENU_KITCHEN_COUNTERTOPS];\r\n\r\n if (isBathroom && IS_QKB_UI) {\r\n whereToCheck.push(CONTEXT_MENU_SHOWER_ACCESSORIES);\r\n }\r\n\r\n let checkArray = whereToCheck.find(contextMenuArray => contextMenuArray.includes(partId)) || [];\r\n\r\n if (!checkArray.length) {\r\n return returnObject\r\n }\r\n\r\n const layout = getCurrentLayout();\r\n checkArray.forEach(checkPartId => {\r\n if (checkPartId === \"vanity_legs\" && layout.parts[\"Vanity\"] && layout.parts[\"Vanity\"].vanity_type !== VANITY_TYPES.vanity_cabinet) {\r\n return\r\n } else if (document.kvConfig.visualizerType === \"kvScene\" && checkPartId === \"center_island_edge\" && layout.type === 3) {\r\n return\r\n }\r\n if (layout.disabledClickablePartIds.includes(checkPartId) || hardCodelyRemovedClicking(checkPartId, layout)) {\r\n return;\r\n }\r\n const featureGroup = layout.getFeatureGroupByPartId(checkPartId);\r\n\r\n if (!isBathroom) {\r\n if (featureGroup && featureGroup.features.length > 0) {\r\n returnObject.allButtons.push({\r\n partId: featureGroup.partId,\r\n translateId: featureGroup.translateId,\r\n });\r\n }\r\n return;\r\n }\r\n\r\n const forFeature = featureGroup && layerPosition && featureGroup.layerPositions && featureGroup.layerPositions[layerPosition]\r\n ? featureGroup.layerPositions[layerPosition]\r\n : null;\r\n const withQuotingToolFeatures = layout.partIdExistInQtCategory(checkPartId);\r\n if (featureGroup && layout.hasNavItemsLength({part: featureGroup}, {}, \"\", forFeature, withQuotingToolFeatures)\r\n && ((featureGroup.partId !== \"vanity_countertop\") || featureGroup.activeFeature)) {\r\n returnObject.allButtons.push({\r\n partId: featureGroup.partId,\r\n translateId: featureGroup.translateId,\r\n });\r\n }\r\n });\r\n\r\n if (!returnObject.allButtons.length) {\r\n return returnObject\r\n }\r\n\r\n // wizard item check\r\n const {wizardState, bathroomVisualizerState, fabricatorState} = store.getState();\r\n const {wizardList, wizardIsActive} = wizardState;\r\n const {activePreset} = bathroomVisualizerState;\r\n\r\n returnObject.showButtons = returnObject.allButtons.sort((a) => partId === a.partId ? -1 : 1);\r\n\r\n const activeVanityType = layout.parts[\"Vanity\"] && layout.parts[\"Vanity\"].vanity_type ? layout.parts[\"Vanity\"].vanity_type : VANITY_TYPES.vanity_cabinet;\r\n const isVanity = isBathroom && CONTEXT_MENU_VANITY_BUTTONS.includes(partId);\r\n const isShower = isBathroom && (CONTEXT_MENU_SHOWER_ALL.includes(partId) || CONTEXT_MENU_SHOWER_OTHER.includes(partId));\r\n const isCenterIsland = !isBathroom && CONTEXT_MENU_KITCHEN_CENTER_ISLAND.includes(partId);\r\n let existingWizardItem = null;\r\n\r\n if (isVanity && (getCurrentRoomType(layout) === LOOK_ROOM_TYPES.as)) {\r\n returnObject.showButtons = returnObject.allButtons.filter(button => {\r\n return !CONTEXT_MENU_VANITY_ONLY.includes(button.partId) || CONTEXT_MENU_VANITY_ONLY.includes(button.partId) && button.partId === partId\r\n });\r\n if (!returnObject.showButtons.some(testBtn => CONTEXT_MENU_VANITY_ONLY.includes(testBtn.partId))) {\r\n returnObject.showButtons.push({\r\n partId: activeVanityType,\r\n translateId: activeVanityType === \"vanity_cabinet\" ? \"visualizer.bathroom.vanity.vanity\" : \"visualizer.bathroom.vanity.\" + activeVanityType,\r\n hasSubMenu: true,\r\n });\r\n }\r\n if (!IS_QKB_UI) {\r\n const sinkIndex = returnObject.showButtons.findIndex(button => button.partId === \"vanity_sink\");\r\n if (sinkIndex > -1) {\r\n const sinkParent = layout.getFeatureGroupByPartId(\"vanity_sink\");\r\n const isPedestal = sinkParent.activeFeature && sinkParent.activeFeature.metaData[\"MountType\"] && sinkParent.activeFeature.metaData[\"MountType\"].includes(\"ST\");\r\n returnObject.showButtons.splice(isPedestal ? sinkIndex : sinkIndex + 1, 0, {\r\n partId: \"vanity_pedestal_sink\",\r\n translateId: \"visualizer.bathroom.vanity.vanity_pedestal_sink\",\r\n });\r\n }\r\n }\r\n const backsplashIndex = returnObject.showButtons.findIndex(button => button.partId === \"vanity_backsplash\");\r\n if (backsplashIndex > -1) {\r\n const backsplashParent = layout.getFeatureGroupByPartId(\"vanity_backsplash\");\r\n // console.log(\"backsplashParent\", backsplashParent);\r\n if (backsplashParent && backsplashParent.hideLayerCondition()) {\r\n returnObject.showButtons.splice(backsplashIndex, 1);\r\n }\r\n }\r\n\r\n if (Array.isArray(wizardList) && wizardList.length && (!IS_QKB_UI || wizardIsActive)) {\r\n existingWizardItem = getExistingWizardForGroups(CONTEXT_MENU_VANITY_ONLY, wizardList, activePreset);\r\n if (existingWizardItem) {\r\n const vanityButtonIndex = returnObject.showButtons.findIndex(button => CONTEXT_MENU_VANITY_ONLY.includes(button.partId));\r\n if (vanityButtonIndex > -1) {\r\n const vanityWizardButton = {\r\n partId: \"vanity_wizard-\" + existingWizardItem.id,\r\n translateId: activeVanityType === \"vanity_cabinet\" ? \"visualizer.bathroom.vanity.vanity\" : \"visualizer.bathroom.vanity.\" + activeVanityType,\r\n isWizard: true,\r\n wizardId: existingWizardItem.id,\r\n };\r\n fabricatorState.isAmericanStandard\r\n ? returnObject.showButtons.splice(vanityButtonIndex, 1, vanityWizardButton)\r\n : returnObject.showButtons.unshift(vanityWizardButton)\r\n }\r\n if (fabricatorState.isAmericanStandard) {\r\n returnObject.showButtons = returnObject.showButtons.filter(button => !button.partId.includes(\"sink\")) //LX-791\r\n }\r\n }\r\n }\r\n\r\n } else if (isShower && Array.isArray(wizardList) && wizardList.length) {\r\n existingWizardItem = getExistingWizardForGroups([...CONTEXT_MENU_SHOWER_ALL, ...CONTEXT_MENU_SHOWER_OTHER], wizardList, activePreset);\r\n if (existingWizardItem) {\r\n const showerWizardButton = {\r\n partId: \"shower_wizard-\" + existingWizardItem.id,\r\n translateId: \"visualizer.bathroom.shower.shower\",\r\n isWizard: true,\r\n wizardId: existingWizardItem.id,\r\n };\r\n if (fabricatorState.isLixil) {\r\n returnObject.showButtons = [showerWizardButton]\r\n } else {\r\n returnObject.showButtons.push(showerWizardButton)\r\n }\r\n }\r\n } else if (isCenterIsland && Array.isArray(wizardList) && wizardList.length) {\r\n existingWizardItem = getExistingWizardForGroups(CONTEXT_MENU_KITCHEN_CENTER_ISLAND, wizardList, activePreset);\r\n if (existingWizardItem) {\r\n const counteropWizardButton = {\r\n partId: \"counterop_wizard-\" + existingWizardItem.id,\r\n translateId: \"wizard.contextMenu.wizardBuild\",\r\n isWizard: true,\r\n wizardId: existingWizardItem.id,\r\n };\r\n returnObject.showButtons.push(counteropWizardButton)\r\n }\r\n }\r\n\r\n if (isBathroom && isShower && IS_QKB_UI && CONTEXT_MENU_SHOWER_ACCESSORIES.some(accPartId => {\r\n const accFg = layout.getFeatureGroupByPartId(accPartId);\r\n return accFg && layout.hasNavItemsLength({part: accFg})\r\n })) {\r\n const accessoriesButton = {\r\n partId: \"accessories\",\r\n translateId: \"visualizer.bathroom.accessories\",\r\n hasSubMenu: true,\r\n };\r\n returnObject.showButtons.push(accessoriesButton);\r\n }\r\n\r\n if (IS_QKB_UI && document.kvConfig.visualizerOnly) {\r\n // remove wizard, as we can't jump to the quotingtool\r\n returnObject.showButtons = returnObject.showButtons.filter(button => !button.isWizard)\r\n } else if (existingWizardItem && existingWizardItem.hideContext) {\r\n returnObject.showButtons = returnObject.showButtons.filter(button => button.isWizard) // wizard only\r\n }\r\n\r\n return returnObject;\r\n};\r\n\r\nexport const getOptionStyles = (filterValue) => { // we have the logic with additionalImages in the FeatureWizardBody component\r\n let styles = {};\r\n let thumbnail = (Array.isArray(filterValue.additionalImages) && filterValue.additionalImages.length)\r\n ? filterValue.additionalImages[0].imageUrl\r\n : s3FilterImagePath(filterValue.icon);\r\n if (thumbnail) {\r\n styles.backgroundImage = \"url(\" + thumbnail + \")\";\r\n }\r\n if (!thumbnail) {\r\n styles.backgroundColor =\r\n filterValue.value && filterValue.value.includes(\"BLACK\")\r\n ? \"black\"\r\n : filterValue.value && filterValue.value.includes(\"BRONZE\")\r\n ? \"#3f270f\"\r\n : filterValue.value && filterValue.value.includes(\"NICKEL\")\r\n ? \"#727472\"\r\n : filterValue.value;\r\n }\r\n return styles\r\n};\r\n","import PropTypes from \"prop-types\";\r\n\r\nexport const dbFeatureInterface = {\r\n id: PropTypes.number, // unique id fro every feature\r\n price: PropTypes.number, // retail price\r\n cost: PropTypes.number, // fabricator price\r\n shippingCost: PropTypes.number, // shippingCost\r\n fabricatorCost: PropTypes.number, // discount price\r\n}\r\n\r\nexport const featureInterface = {\r\n metaData: PropTypes.object,\r\n dbFeature: PropTypes.shape(dbFeatureInterface),\r\n};\r\n\r\nexport const featureCollectionInterface = {\r\n id: PropTypes.number.isRequired,\r\n features: PropTypes.arrayOf(PropTypes.shape(featureInterface)),\r\n};\r\n\r\nexport const featureGroupInterface = {\r\n partName: PropTypes.string.isRequired,\r\n};\r\n\r\nexport const navItemInterface = {\r\n part: PropTypes.shape(featureInterface).isRequired,\r\n}\r\n","import invert from 'lodash/invert';\r\nimport uniqBy from 'lodash/uniqBy';\r\n\r\nimport {getFilterGroupValues, splitFeatureName} from \"../../../misc/utils\";\r\nimport DesignNavigationItem from \"../../visComponents/designNavigationItem\";\r\nimport {Part} from \"./part\";\r\nimport store from '../../../store';\r\nimport {LayoutAbbreviation, LayoutType} from \"./constants\";\r\nimport {getFeatureIsLocked} from \"../../../misc/helpers\";\r\n\r\n/**\r\n * Used for Complex parts such as Vanity, to perform some base functionality for related items\r\n */\r\nexport class IntermediatePart extends Part {\r\n\r\n constructor(isChild) {\r\n super(false, isChild);\r\n this.disabled = false;\r\n this.defaultDisabled = false; // used after reset click\r\n this.canBeDisabled = false;\r\n }\r\n\r\n /**\r\n * This will be called on feature creation\r\n * @param dbFeature\r\n */\r\n load(dbFeature) {\r\n if (dbFeature.metaData[\"Part\"]) {\r\n const partNumber = +dbFeature.metaData[\"Part\"][0];\r\n return this.load_(dbFeature, new this.constructor(false, partNumber), true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n return this.load_(dbFeature, new this.constructor());\r\n }\r\n\r\n /**\r\n * This will be called by the underlying vanity feature with a concrete instance of the part\r\n * @param dbFeature\r\n * @param part {Part}\r\n * @param setParent {boolean}\r\n * @param features\r\n */\r\n load_(dbFeature, part, setParent = true, features = 'features') {\r\n\r\n if (!dbFeature.s3Bindings && features === \"featuresParts\") { // keep not-in-visualizer features in the main list\r\n features = \"features\"\r\n }\r\n\r\n const featureList = features + \"List\";\r\n\r\n const {displayName} = dbFeature;\r\n let {featureName} = splitFeatureName(displayName, dbFeature.groupName);\r\n if (!featureName && dbFeature.groupName && dbFeature.displayName) {\r\n featureName = dbFeature.displayName.replace(dbFeature.groupName + \" - \", \"\")\r\n }\r\n // console.log('displayName:', displayName);\r\n\r\n if (setParent) {\r\n part.getParent = () => this;\r\n if (dbFeature.galleryImages) {\r\n const featured = dbFeature.galleryImages.find(galImage => galImage.featured);\r\n if (featured) {\r\n this.featuredImage = featured.url\r\n }\r\n dbFeature.galleryImages = dbFeature.galleryImages.sort((a, b) => b.default - a.default)\r\n }\r\n }\r\n\r\n if (!dbFeature.sharedFeatureName) {\r\n console.error(\"No sharedFeatureName property:\", dbFeature);\r\n }\r\n\r\n part.partName = featureName;\r\n part.metaData = dbFeature.metaData || {};\r\n\r\n if (dbFeature.s3Bindings && dbFeature.s3Bindings.length) {\r\n // dbFeature.s3Bindings = dbFeature.s3Bindings.filter(binding => binding.visualizer === \"KitchenV5\")\r\n if (!dbFeature.metaData[\"CropCoords\"]) {\r\n dbFeature.s3Bindings = dbFeature.s3Bindings.map(object => {\r\n object.path = object.path.replace(\"-copy\", \"\");\r\n return object\r\n })\r\n }\r\n }\r\n\r\n part.dbFeature = dbFeature || {};\r\n if (!part.dbFeature.filterValueIDs) {\r\n part.dbFeature.filterValueIDs = {}\r\n }\r\n part.notAvailableInVisualizer = !dbFeature.s3Bindings || !dbFeature.s3Bindings.length;\r\n\r\n let someLayoutFound = false;\r\n if (part.metaData.RoomLayout) {\r\n const roomLayout = part.metaData.RoomLayout;\r\n if (roomLayout.includes(LayoutAbbreviation.All)) {\r\n Object.keys(LayoutType).forEach(layoutName => {\r\n this[featureList][layoutName].push(part);\r\n })\r\n } else if (Array.isArray(roomLayout) && roomLayout.length) {\r\n roomLayout.forEach(roomLayoutAbbreviation => {\r\n const layoutName = invert(LayoutAbbreviation)[roomLayoutAbbreviation];\r\n if (layoutName) { // Prevent bad roomLayout Metadata\r\n if (!someLayoutFound) {\r\n someLayoutFound = true;\r\n }\r\n this[featureList][layoutName].push(part);\r\n }\r\n });\r\n } else { // single value\r\n const layoutName = invert(LayoutAbbreviation)[roomLayout];\r\n if (layoutName) {\r\n someLayoutFound = true;\r\n this[featureList][layoutName].push(part);\r\n }\r\n }\r\n }\r\n\r\n if (part.notAvailableInVisualizer || !part.metaData.RoomLayout || !someLayoutFound) {\r\n part.notAvailableInVisualizer = true;\r\n if (!someLayoutFound) {\r\n // remove old version layers so the feature will be as simple not-in-visualizer feature\r\n part.metaData.RoomLayout = null;\r\n part.dbFeature.metaData.RoomLayout = null;\r\n part.dbFeature.s3Bindings = null;\r\n }\r\n Object.keys(LayoutType).forEach(layoutName => {\r\n this[featureList][layoutName].push(part);\r\n })\r\n }\r\n\r\n // Object.keys(LayoutType).forEach(layoutName => {\r\n // this[features+\"List\"][layoutName].push(part);\r\n // });\r\n\r\n this.loadFeatureCommon(part);\r\n\r\n return part\r\n }\r\n\r\n getActiveFeatureConditions() {\r\n return this.getArrayOfConditions()\r\n }\r\n\r\n // navigationSubItems(filters, searchText, forFeature, filterGroups, firstOpenedFeature, firstOpenedConditions) { // to do\r\n navigationSubItems(filters, searchText, forFeature, filterGroups, restOptions = {}) {\r\n // const {firstOpenedFeature, firstOpenedConditions, returnAllFeatures} = restOptions;\r\n const {returnAllFeatures} = restOptions;\r\n const featuresList = this.getFeaturesForNavigationFrom(restOptions);\r\n\r\n // const featuresList = (forFeature && forFeature.metaData.layerPosition === SIDE_POSITIONS[1]) ? this.featuresParts : this.features;\r\n const filteredAvailableFeatures = this.getFeaturesBySearchText(this.getFilteredFeaturesByFilters(filters, featuresList), searchText);\r\n let featuresToDisplay = returnAllFeatures\r\n ? filteredAvailableFeatures\r\n : this.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(true), filteredAvailableFeatures);\r\n // console.log(\"filterGroups\", filterGroups);\r\n if (returnAllFeatures) {\r\n featuresToDisplay = uniqBy(featuresToDisplay, (feature) => feature.dbFeature.sharedFeatureName);\r\n }\r\n return this.navigationItemsWithOptions(filters, forFeature, filterGroups, featuresToDisplay)\r\n }\r\n\r\n navigationSubItemsWithFilter(propName, propValue, featuresToCheck = this.features) {\r\n return featuresToCheck.filter((feature) => {\r\n return feature.matchesMetaForCondition(propName, propValue);\r\n }).map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n navigationSubItemsWithFilterMultipleConditions(arrayOfConditions, featuresToCheck = this.features) {\r\n // console.log('arrayOfConditions', arrayOfConditions);\r\n // console.log('featuresToCheck', featuresToCheck);\r\n return featuresToCheck.filter((feature) => {\r\n return feature.notAvailableInVisualizer || arrayOfConditions.every((conditionObject) => {\r\n const {propName, propValue} = conditionObject;\r\n return feature.matchesMetaForCondition(propName, propValue);\r\n });\r\n })\r\n }\r\n\r\n setDefault(layout, setNotInVisFeature = this.hasNoVisualizerLayers) {\r\n this.setFeatureGroupDefault(layout, setNotInVisFeature)\r\n }\r\n\r\n setLayerPositions = (activeFeature = this.activeFeature) => {\r\n if (!activeFeature) {\r\n return\r\n }\r\n const layout = this.getParent().layout;\r\n const conditions = this.getArrayOfConditions();\r\n if (layout && this.defaultLayerLayoutPositions && this.defaultLayerLayoutPositions[layout.type]) {\r\n Object.keys(this.layerPositions).forEach(key => {\r\n if (this.defaultLayerLayoutPositions[layout.type] === key\r\n && (!this.layerPositions[key] || !this.layerPositions[key].matchesMetaForArrayOfConditions(conditions))) {\r\n this.layerPositions[key] = activeFeature;\r\n } else if (activeFeature.dbFeature.metaData[\"layerPosition\"] !== key) {\r\n this.layerPositions[key] = null;\r\n }\r\n })\r\n } else {\r\n Object.keys(this.layerPositions).forEach(key => {\r\n if (layout.initialized) {\r\n if ((activeFeature.dbFeature.metaData[\"layerPosition\"] === key)\r\n && (this.layerPositions[key] && !this.layerPositions[key].matchesMetaForArrayOfConditions(conditions))) {\r\n this.layerPositions[key] = activeFeature;\r\n // } else if (this.setAllLayerPositions) {\r\n } else if (this.layerPositions[key]) { // here we have to change vanity cabinet to console for example\r\n const matchingPositionFeature = this.getMatchingPositionFeature(key);\r\n if (matchingPositionFeature) {\r\n this.layerPositions[key] = matchingPositionFeature;\r\n }\r\n }\r\n } else { // first time we should set everything by the default! // missing layers issue\r\n if ((activeFeature.dbFeature.metaData[\"layerPosition\"] === key)\r\n && (!this.layerPositions[key] || !this.layerPositions[key].matchesMetaForArrayOfConditions(conditions))) {\r\n this.layerPositions[key] = activeFeature;\r\n // } else if (this.setAllLayerPositions) {\r\n } else {\r\n const matchingPositionFeature = this.getMatchingPositionFeature(key);\r\n if (matchingPositionFeature) {\r\n this.layerPositions[key] = matchingPositionFeature;\r\n }\r\n }\r\n }\r\n })\r\n }\r\n }\r\n\r\n toggleLayerPositions() {\r\n Object.keys(this.layerPositions).forEach(key => {\r\n this.layerPositions[key] = this.disabled ? null : this.getMatchingPositionFeature(key)\r\n })\r\n }\r\n\r\n getMatchingPositionFeature = (position = \"\", fromFeature = this.activeFeature, fromLayout = null) => {\r\n if (fromFeature) { //just in case\r\n const name1 = fromFeature.getSplittedFeatureName();\r\n let arrayOfConditions = this.getArrayOfConditions();\r\n if (fromFeature.metaData[\"SkuName\"]) {\r\n arrayOfConditions.push({\r\n propName: \"SkuName\",\r\n propValue: fromFeature.metaData[\"SkuName\"]\r\n })\r\n }\r\n if (fromLayout) {\r\n let roomLayoutMeta = arrayOfConditions.find(condition => condition.propName === \"RoomLayout\");\r\n let roomSceneMeta = arrayOfConditions.find(condition => condition.propName === \"RoomScene\");\r\n if (roomLayoutMeta) {\r\n roomLayoutMeta.propValue = fromLayout.getCurrentLayoutAbbreviation();\r\n }\r\n if (roomSceneMeta) {\r\n roomSceneMeta.propValue = fromLayout.scene;\r\n }\r\n }\r\n const skuNamesPartIds = [\"shower_door\", \"walk_in_tub\", \"shower_pan_combo\"];\r\n const whereToFind = (!this.layerPositions || (position === Object.keys(this.layerPositions)[0])) ? this.features : this.featuresParts;\r\n return whereToFind.find((feature) => {\r\n return (skuNamesPartIds.includes(this.partId) || name1 === feature.getSplittedFeatureName())\r\n && feature.matchesMetaForArrayOfConditions(arrayOfConditions) && feature.metaData[\"layerPosition\"] === position\r\n });\r\n }\r\n return null\r\n };\r\n\r\n getArrayOfConditions() {\r\n const layout = this.getParent().layout;\r\n return [{\r\n propName: 'RoomLayout',\r\n propValue: layout.getCurrentLayoutAbbreviation()\r\n }, {\r\n propName: 'RoomScene',\r\n propValue: layout.scene\r\n }];\r\n }\r\n\r\n setLayers(layout) {\r\n if (this.hideLayerCondition && this.hideLayerCondition()) {\r\n this.hideLayers();\r\n return;\r\n }\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions()))) {\r\n if (this.hasAdditionalParts) {\r\n this.checkIfFeaturePartIsMatching();\r\n }\r\n return this._setLayers(layout);\r\n }\r\n this.setDefault(layout);\r\n return this._setLayers(layout);\r\n }\r\n\r\n showLayerPositionsModal() {\r\n return false\r\n }\r\n\r\n clickFromAllWalls(ignoreLocked) {\r\n if (this && this.dbFeature && this.dbFeature.sharedFeatureName) {\r\n console.log(`${this.partId}:`, this.dbFeature.sharedFeatureName);\r\n }\r\n this.handleClick(ignoreLocked, \"all_walls\");\r\n }\r\n\r\n /**\r\n * @param ignoreLocked {boolean} // false by the default, is used by wizard ONLY\r\n * @param clickFrom {string} // is used for countertop and cabinet switchers, and walls\r\n */\r\n handleClick(ignoreLocked = false, clickFrom = \"\") {\r\n const parent = this.getParent();\r\n if (clickFrom !== \"all_walls\") {\r\n const {activeQuoteIndex} = store.getState().quotesState;\r\n parent.firstClick[activeQuoteIndex] = true; // allow to show active item\r\n }\r\n const featureIsLocked = getFeatureIsLocked(this, ignoreLocked);\r\n if (featureIsLocked) {\r\n parent.activeLockedFeature = this;\r\n } else {\r\n if (parent.activeLockedFeature) {\r\n parent.activeLockedFeature = null;\r\n }\r\n this.featureClick();\r\n }\r\n }\r\n\r\n featureClick() {\r\n const parent = this.getParent();\r\n parent.placeholderChanged = true;\r\n if (this.notAvailableInVisualizer) {\r\n parent.activeNotInVisualizerFeature = this; // do not change the activeFeature (in order to keep the layer)\r\n } else if (parent.activeNotInVisualizerFeature) {\r\n parent.activeNotInVisualizerFeature = null; // remove it from other searches and so on\r\n parent.activeFeature = this;\r\n } else {\r\n parent.activeFeature = this;\r\n }\r\n this.featureClicked();\r\n }\r\n\r\n hideLayers() {\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.src = '';\r\n }\r\n if (Array.isArray(this.activeFeatureParts) && this.activeFeatureParts.length) {\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n if (activeFeaturePart && activeFeaturePart.layer) {\r\n activeFeaturePart.layer.src = '';\r\n }\r\n })\r\n }\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.src = '';\r\n }\r\n if (this.layerPositions) {\r\n Object.keys(this.layerPositions).forEach(key => {\r\n if (this.layerPositions[key]) {\r\n this.layerPositions[key].layer.src = '';\r\n }\r\n })\r\n }\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n\r\n const getZIndex = (feature, partId = null) => {\r\n return feature.metaData[\"ZSorting\"] ? feature.metaData[\"ZSorting\"] * 1000 : zIndexes[partId || this.partId];\r\n }\r\n\r\n if (this.layerPositions) {\r\n Object.keys(this.layerPositions).forEach((key, keyIndex) => {\r\n const feature = this.layerPositions[key];\r\n if (feature) {\r\n feature.layer.zIndex = getZIndex(feature) + keyIndex*10;\r\n }\r\n })\r\n } else if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = getZIndex(this.activeFeature);\r\n if (this.hasAdditionalParts && this.activeFeatureParts && this.activeFeatureParts.length) {\r\n this.activeFeatureParts.forEach((activeFeaturePart, keyIndex) => {\r\n activeFeaturePart.layer.zIndex = getZIndex(activeFeaturePart, this.additionalPartPartId);\r\n if (this.partId === \"bottom_cabinet\" || this.partId === \"bottom_handle\" || (this.activeFeatureParts.length > 3)) {\r\n activeFeaturePart.layer.zIndex = activeFeaturePart.layer.zIndex + (keyIndex + 1);\r\n return\r\n }\r\n activeFeaturePart.layer.zIndex = activeFeaturePart.layer.zIndex + ((keyIndex + 1) * 10);\r\n });\r\n }\r\n }\r\n }\r\n\r\n removeEdgeFromPartName(partName) {\r\n const filterGroups = store.getState().filterState.filterGroups;\r\n const edgeFilterGroup = filterGroups.find(group => group.name === \"Edge\" || group.name === \"Edge Profile\");\r\n if (edgeFilterGroup && edgeFilterGroup.values && edgeFilterGroup.values.length) {\r\n const edgeFilterGroupValues = edgeFilterGroup.values.sort((a,b) => {\r\n return a.value && b.value && (b.value.length - a.value.length)\r\n }); // 1st should be \"Full Bullnose\", then simple \"Bullnose\"\r\n edgeFilterGroupValues.forEach((filterGroupValue) => { // arrayOf {id: 293, value: \"Eased\", displayText: \"Eased\", parent_id: null, icon: \"\", …}\r\n partName = partName.split(\" \"+filterGroupValue.value).join(\"\");\r\n });\r\n }\r\n return partName\r\n }\r\n\r\n getCountertopGroupsSplittedFeatureName = () => {\r\n if (this._countertopGroupsCustomDisplayName == null) {\r\n this._countertopGroupsCustomDisplayName = this.dbFeature.sharedFeatureName || \"\";\r\n }\r\n return this._countertopGroupsCustomDisplayName\r\n };\r\n\r\n getSplittedFeatureName = () => {\r\n if (this._customDisplayName == null || this.dbFeature.wasUpdatedFromAnotherResponse) {\r\n this._customDisplayName = this.dbFeature.sharedFeatureName || this.partName || \"\";\r\n switch (this.partId) {\r\n case \"center_island_countertop\": {\r\n this._customDisplayName = this._customDisplayName\r\n .replace(/2 0 /g, \"\")\r\n .replace(/Center Island Countertop 1 /g, \"\");\r\n const manufacturerFilter = getFilterGroupValues(this, {id: 35});\r\n if (Array.isArray(manufacturerFilter)) {\r\n this._customDisplayName = this._customDisplayName + manufacturerFilter[0]\r\n }\r\n break;\r\n }\r\n case \"countertop\":\r\n case \"backsplash\": {\r\n const manufacturerFilter = getFilterGroupValues(this, {id: 35});\r\n if (Array.isArray(manufacturerFilter)) {\r\n this._customDisplayName = this._customDisplayName + manufacturerFilter[0]\r\n }\r\n break;\r\n }\r\n case \"sink\":\r\n case \"center_island_sink\": {\r\n this._customDisplayName = this._customDisplayName\r\n .replace(/ D/g, \"\")\r\n .replace(/ Countertop/g, \"\")\r\n .replace(/ Island/g, \"\")\r\n break;\r\n }\r\n case \"hood\": {\r\n // cases when LG LSHD3089SS and LG LSHD3089DS should match\r\n this._customDisplayName = this._customDisplayName.substring(0, this._customDisplayName.length - 2);\r\n break;\r\n }\r\n default:\r\n break;\r\n }\r\n }\r\n if (this.dbFeature.wasUpdatedFromAnotherResponse) {\r\n this.dbFeature.wasUpdatedFromAnotherResponse = false;\r\n }\r\n return this._customDisplayName\r\n };\r\n\r\n getMatchingFeatureName = () => {\r\n return this.getSplittedFeatureName()\r\n };\r\n\r\n getModuleFeatureName = () => {\r\n // return this.partName.split(\" M_\")[0];\r\n return this.partName.split(\" M\")[0];\r\n };\r\n\r\n featureIsMatchingFilters(currentFeature, activeFilters, filters = []) {\r\n return filters.every(filter => {\r\n return activeFilters[filter.id]\r\n && currentFeature.dbFeature.filterValueIDs[filter.id]\r\n && currentFeature.dbFeature.filterValueIDs[filter.id].includes(activeFilters[filter.id][0])\r\n })\r\n }\r\n\r\n getActiveFeaturePartsAccordingToActiveFeature(fromFeature = this.activeFeature, activeFeatureConditions = []) {\r\n let activeFeatureParts = [];\r\n if (fromFeature && Number.isInteger(fromFeature.partNumber)) {\r\n let activeFeaturePart;\r\n const name1 = fromFeature.getSplittedFeatureName();\r\n // console.log(\"name1\", name1);\r\n let arrayOfConditions = activeFeatureConditions.length\r\n ? activeFeatureConditions\r\n : this.getActiveFeatureConditions(fromFeature);\r\n // if (this.partId === \"right_wall\") {\r\n // arrayOfConditions = arrayOfConditions.filter(condition => condition.propName !== \"MirrorSize\");\r\n // }\r\n activeFeatureParts = this.featuresParts.filter((feature) => name1 === feature.getSplittedFeatureName());\r\n // console.log(\"this.featuresParts\", this.featuresParts);\r\n // console.log(\"activeFeatureParts\", activeFeatureParts);\r\n if (activeFeatureParts.length) {\r\n activeFeaturePart = activeFeatureParts.find((feature) => {\r\n return feature.matchesMetaForArrayOfConditions(arrayOfConditions)\r\n });\r\n if (!activeFeaturePart) {\r\n activeFeaturePart = activeFeatureParts[0];\r\n }\r\n }\r\n activeFeatureParts = activeFeaturePart ? [activeFeaturePart] : [];\r\n activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n }\r\n return activeFeatureParts\r\n }\r\n\r\n checkIfFeaturePartIsMatching() {\r\n if (this.activeFeatureParts && this.activeFeatureParts.length) {\r\n const activeFeatureConditions = this.getActiveFeatureConditions();\r\n const name1 = this.activeFeature.getSplittedFeatureName();\r\n const activeFeaturePart = this.activeFeatureParts[0];\r\n if (!(activeFeaturePart.matchesMetaForArrayOfConditions(activeFeatureConditions)\r\n && name1 === activeFeaturePart.getSplittedFeatureName())) {\r\n this.activeFeatureParts = this.setActiveFeatureParts(this.activeFeature, activeFeatureConditions);\r\n }\r\n } else {\r\n this.activeFeatureParts = this.setActiveFeatureParts();\r\n }\r\n }\r\n\r\n setActiveFeatureParts(fromFeature = this.activeFeature, activeFeatureConditions = []) {\r\n return this.getActiveFeaturePartsAccordingToActiveFeature(fromFeature, activeFeatureConditions);\r\n }\r\n\r\n}\r\n","import invert from 'lodash/invert';\r\n\r\nimport {splitFeatureName} from \"../../../misc/utils\";\r\nimport DesignNavigationItem from \"../../visComponents/designNavigationItem\";\r\nimport {Part} from \"./part\";\r\nimport store from '../../../store';\r\nimport {LayoutAbbreviation, LayoutType, LayoutAbbreviationsToRemove, SIDE_POSITIONS, PAN_POSITIONS} from \"./constants\";\r\nimport {getFeatureIsLocked} from \"../../../misc/helpers\";\r\nimport {IS_BATHROOM_OLD_BV_SCENE} from \"../../../config\";\r\n\r\n/**\r\n * Used for Complex parts such as Vanity, to perform some base functionality for related items\r\n */\r\nexport class IntermediatePart extends Part {\r\n\r\n constructor(isChild) {\r\n super(false, isChild);\r\n this.disabled = false;\r\n this.defaultDisabled = false; // used after reset click\r\n this.canBeDisabled = false;\r\n }\r\n\r\n load(dbFeature) {\r\n return this.load_(dbFeature, new this.constructor());\r\n }\r\n\r\n /**\r\n * This will be called by the underlying vanity feature with a concrete instance of the part\r\n * @param dbFeature\r\n * @param part {Part}\r\n * @param setParent {boolean}\r\n * @param features\r\n */\r\n load_(dbFeature, part, setParent = true, features = 'features') {\r\n\r\n const featureList = features + \"List\";\r\n\r\n const {displayName} = dbFeature;\r\n let {featureName} = splitFeatureName(displayName);\r\n if (!featureName && dbFeature.groupName && dbFeature.displayName) {\r\n featureName = dbFeature.displayName.replace(dbFeature.groupName + \" - \", \"\")\r\n }\r\n // console.log('displayName:', displayName);\r\n\r\n if (setParent) {\r\n part.getParent = () => this;\r\n if (dbFeature.galleryImages) {\r\n const featured = dbFeature.galleryImages.find(galImage => galImage.featured);\r\n if (featured) {\r\n this.featuredImage = featured.url\r\n }\r\n dbFeature.galleryImages = dbFeature.galleryImages.sort((a, b) => b.default - a.default)\r\n }\r\n }\r\n\r\n if (!dbFeature.sharedFeatureName) {\r\n console.error(\"No sharedFeatureName property:\", dbFeature);\r\n }\r\n\r\n part.partName = featureName;\r\n part.metaData = dbFeature.metaData || {};\r\n\r\n if (dbFeature.s3Bindings && dbFeature.s3Bindings.length) {\r\n // dbFeature.s3Bindings = dbFeature.s3Bindings.filter(binding => binding.visualizer === \"BathroomV5\")\r\n }\r\n\r\n part.dbFeature = dbFeature || {};\r\n if (!part.dbFeature.filterValueIDs) {\r\n part.dbFeature.filterValueIDs = {}\r\n }\r\n part.notAvailableInVisualizer = !dbFeature.s3Bindings || !dbFeature.s3Bindings.length;\r\n\r\n if (part.metaData.RoomLayout) {\r\n const roomLayout = part.metaData.RoomLayout;\r\n if (roomLayout.includes(LayoutAbbreviation.All)) {\r\n Object.keys(LayoutType).forEach(layoutName => {\r\n this[featureList][layoutName].push(part);\r\n })\r\n } else if (Array.isArray(roomLayout) && roomLayout.length) {\r\n roomLayout.forEach(roomLayoutAbbreviation => {\r\n const layoutName = invert(LayoutAbbreviation)[roomLayoutAbbreviation];\r\n if (layoutName) { // Prevent bad roomLayout Metadata\r\n this[featureList][layoutName].push(part);\r\n }\r\n });\r\n } else { // single value\r\n const layoutName = invert(LayoutAbbreviation)[roomLayout];\r\n if(layoutName) {\r\n this[featureList][layoutName].push(part);\r\n }\r\n }\r\n }\r\n\r\n if (part.notAvailableInVisualizer || !part.metaData.RoomLayout) {\r\n part.notAvailableInVisualizer = true;\r\n Object.keys(LayoutType).forEach(layoutName => {\r\n this[featureList][layoutName].push(part);\r\n })\r\n }\r\n\r\n // Object.keys(LayoutType).forEach(layoutName => {\r\n // this[features+\"List\"][layoutName].push(part);\r\n // });\r\n\r\n this.loadFeatureCommon(part);\r\n\r\n return part\r\n }\r\n\r\n getActiveFeatureConditions() {\r\n return this.getArrayOfConditions()\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = this.getFeaturesBySearchText(this.getFilteredFeaturesByFilters(filters), searchText);\r\n const featuresToDisplay = this.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n return this.returnUniqueNavFeatures(featuresToDisplay)\r\n }\r\n\r\n navigationSubItemsWithSides(filters, searchText) {\r\n const filteredAvailableFeatures = this.getFeaturesBySearchText(this.getFilteredFeaturesByFilters(filters), searchText);\r\n const featuresToDisplay = this.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(true), filteredAvailableFeatures);\r\n\r\n let navFeatures = [];\r\n const activePosition = this.activeFeature && this.activeFeature.dbFeature.metaData[\"layerPosition\"]\r\n ? this.activeFeature.dbFeature.metaData[\"layerPosition\"]\r\n : SIDE_POSITIONS[0];\r\n navFeatures = featuresToDisplay.filter(feature => {\r\n return feature.dbFeature.metaData[\"layerPosition\"] === activePosition\r\n })\r\n featuresToDisplay.forEach(feature => {\r\n const skuName = feature.metaData[\"SkuName\"] ? feature.metaData[\"SkuName\"][0] : null;\r\n if ((IS_BATHROOM_OLD_BV_SCENE && !skuName) || (skuName && navFeatures.every(navFeature => {\r\n const skuName2 = navFeature.metaData[\"SkuName\"] ? navFeature.metaData[\"SkuName\"][0] : null;\r\n return skuName2 && (skuName2 !== skuName)\r\n }))) {\r\n navFeatures.push(feature)\r\n }\r\n })\r\n return this.returnUniqueNavFeatures(navFeatures)\r\n }\r\n\r\n navigationSubItemsWithFilter(propName, propValue, featuresToCheck = this.features) {\r\n return featuresToCheck.filter((feature) => {\r\n return feature.matchesMetaForCondition(propName, propValue);\r\n }).map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n navigationSubItemsWithFilterMultipleConditions(arrayOfConditions, featuresToCheck = this.features) {\r\n // console.log('arrayOfConditions', arrayOfConditions);\r\n // console.log('featuresToCheck', featuresToCheck);\r\n return featuresToCheck.filter((feature) => {\r\n return feature.notAvailableInVisualizer || arrayOfConditions.every((conditionObject) => {\r\n const {propName, propValue} = conditionObject;\r\n return feature.matchesMetaForCondition(propName, propValue);\r\n });\r\n })\r\n }\r\n\r\n setDefault(layout, setNotInVisFeature = false) {\r\n this.setFeatureGroupDefault(layout, setNotInVisFeature)\r\n }\r\n\r\n setLayerPositions = (activeFeature = this.activeFeature) => {\r\n if (!activeFeature) {\r\n return\r\n }\r\n const layout = this.getParent().layout;\r\n const conditions = this.getArrayOfConditions();\r\n if (layout && this.defaultLayerLayoutPositions && this.defaultLayerLayoutPositions[layout.type]) {\r\n Object.keys(this.layerPositions).forEach(key => {\r\n if (this.defaultLayerLayoutPositions[layout.type] === key\r\n && (!this.layerPositions[key] || !this.layerPositions[key].matchesMetaForArrayOfConditions(conditions))) {\r\n this.layerPositions[key] = activeFeature;\r\n } else if (activeFeature.dbFeature.metaData[\"layerPosition\"] !== key) {\r\n this.layerPositions[key] = null;\r\n }\r\n })\r\n } else {\r\n Object.keys(this.layerPositions).forEach(key => {\r\n if ((activeFeature.dbFeature.metaData[\"layerPosition\"] === key)\r\n && (!this.layerPositions[key] || !this.layerPositions[key].matchesMetaForArrayOfConditions(conditions))) {\r\n this.layerPositions[key] = activeFeature;\r\n }\r\n })\r\n }\r\n }\r\n\r\n getMatchingPositionFeature = (position = \"\", fromFeature = this.activeFeature) => {\r\n if (fromFeature) { //just in case\r\n const name1 = fromFeature.getSplittedFeatureName();\r\n let arrayOfConditions = this.getArrayOfConditions();\r\n if (fromFeature.metaData[\"SkuName\"]) {\r\n arrayOfConditions.push({\r\n propName: \"SkuName\",\r\n propValue: fromFeature.metaData[\"SkuName\"]\r\n })\r\n }\r\n const skuNamesPartIds = [\"shower_door\", \"walk_in_tub\", \"shower_pan_combo\", \"replacement_tub\"];\r\n const whereToFind = (!this.layerPositions || (position === Object.keys(this.layerPositions)[0])) ? this.features : this.featuresParts;\r\n return whereToFind.find((feature) => {\r\n return (skuNamesPartIds.includes(this.partId) || name1 === feature.getSplittedFeatureName())\r\n && feature.matchesMetaForArrayOfConditions(arrayOfConditions) && feature.metaData[\"layerPosition\"] === position\r\n });\r\n }\r\n return null\r\n };\r\n\r\n getArrayOfConditions() {\r\n const layout = this.getParent().layout;\r\n const conditions = [{\r\n propName: 'RoomLayout',\r\n propValue: layout.getCurrentLayoutAbbreviation()\r\n }];\r\n if (document.kvConfig.userId === 140045) { // new_bathroom_2021.quotesflooring.com\r\n conditions.push({\r\n propName: 'RoomScene',\r\n propValue: layout.scene\r\n })\r\n }\r\n return conditions;\r\n }\r\n\r\n setLayers(layout) {\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions()))) {\r\n if (this.hasAdditionalParts) {\r\n this.checkIfFeaturePartIsMatching();\r\n }\r\n return this._setLayers(layout);\r\n }\r\n this.setDefault(layout);\r\n return this._setLayers(layout);\r\n }\r\n\r\n\r\n showLayerPositionsModal(forFeature) {\r\n const checkSidesFeatureGroups = [\"shower_door\", \"shower_fixture\", \"grab_bar\", \"large_corner_seat\",\r\n \"replacement_tub\", \"shower_pan_combo\", \"corner_caddie\", \"large_corner_caddie\", \"soap_dish\", \"walk_in_tub\",\r\n \"shower_seats\"];\r\n if (checkSidesFeatureGroups.includes(this.partId)) {\r\n const positionsAvailable = PAN_POSITIONS.filter(position => {\r\n return !!this.getMatchingPositionFeature(position, forFeature);\r\n });\r\n return positionsAvailable.length > 1\r\n }\r\n return false\r\n }\r\n\r\n clickFromAllWalls(ignoreLocked) {\r\n if (this && this.dbFeature && this.dbFeature.sharedFeatureName) {\r\n console.log(`${this.partId}:`, this.dbFeature.sharedFeatureName);\r\n }\r\n this.handleClick(ignoreLocked, \"all_walls\");\r\n }\r\n\r\n /**\r\n * @param ignoreLocked {boolean} // false by the default, is used by wizard ONLY\r\n */\r\n handleClick(ignoreLocked = false) {\r\n const parent = this.getParent();\r\n const {activeQuoteIndex} = store.getState().quotesState;\r\n parent.firstClick[activeQuoteIndex] = true; // allow to show active item\r\n const featureIsLocked = getFeatureIsLocked(this, ignoreLocked);\r\n if (featureIsLocked) {\r\n parent.activeLockedFeature = this;\r\n } else {\r\n if (parent.activeLockedFeature) {\r\n parent.activeLockedFeature = null;\r\n }\r\n this.featureClick();\r\n }\r\n }\r\n\r\n featureClick() {\r\n const parent = this.getParent();\r\n parent.placeholderChanged = true;\r\n if (this.notAvailableInVisualizer) {\r\n parent.activeNotInVisualizerFeature = this; // do not change the activeFeature (in order to keep the layer)\r\n } else if (parent.activeNotInVisualizerFeature) {\r\n parent.activeNotInVisualizerFeature = null; // remove it from other searches and so on\r\n parent.activeFeature = this;\r\n } else {\r\n parent.activeFeature = this;\r\n }\r\n this.featureClicked();\r\n }\r\n\r\n hideLayers() {\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.src = '';\r\n }\r\n if (Array.isArray(this.activeFeatureParts) && this.activeFeatureParts.length) {\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n if (activeFeaturePart && activeFeaturePart.layer) {\r\n activeFeaturePart.layer.src = '';\r\n }\r\n })\r\n }\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.src = '';\r\n }\r\n if (this.layerPositions) {\r\n Object.keys(this.layerPositions).forEach(key => {\r\n if (this.layerPositions[key]) {\r\n this.layerPositions[key].layer.src = '';\r\n }\r\n })\r\n }\r\n }\r\n\r\n removeLayoutFromPartName(partName) {\r\n LayoutAbbreviationsToRemove.forEach(abbr => {\r\n const spaceWithLayoutName = \" \"+abbr;\r\n partName = partName.replace(spaceWithLayoutName + \" \", \" \"); // 1) replace \" Agra S Some edge name\" -> \" Agra Some edge name\"\r\n if (partName.slice(-spaceWithLayoutName.length) === spaceWithLayoutName) {\r\n partName = partName.substring(0, partName.length - spaceWithLayoutName.length); // 2) replace \" Agra Some edge name S\" -> \" Agra Some edge name\"\r\n }\r\n });\r\n partName = partName.replace(\" Backsplash\", \"\");\r\n return partName\r\n }\r\n\r\n removeEdgeFromPartName(partName) {\r\n const filterGroups = store.getState().filterState.filterGroups;\r\n const edgeFilterGroup = filterGroups.find(group => group.name === \"Edge\" || group.name === \"Edge Profile\");\r\n if (edgeFilterGroup && edgeFilterGroup.values && edgeFilterGroup.values.length) {\r\n const edgeFilterGroupValues = edgeFilterGroup.values.sort((a,b) => {\r\n return a.value && b.value && (b.value.length - a.value.length)\r\n }); // 1st should be \"Full Bullnose\", then simple \"Bullnose\"\r\n edgeFilterGroupValues.forEach((filterGroupValue) => { // arrayOf {id: 293, value: \"Eased\", displayText: \"Eased\", parent_id: null, icon: \"\", …}\r\n partName = partName.split(\" \"+filterGroupValue.value).join(\"\");\r\n });\r\n }\r\n return partName\r\n }\r\n\r\n getCountertopGroupsSplittedFeatureName = () => {\r\n if (this._countertopGroupsCustomDisplayName == null) {\r\n this._countertopGroupsCustomDisplayName = this.dbFeature.sharedFeatureName;\r\n }\r\n return this._countertopGroupsCustomDisplayName\r\n };\r\n\r\n getSplittedFeatureName = () => {\r\n if (this._customDisplayName == null) {\r\n this._customDisplayName = this.dbFeature.sharedFeatureName || this.partName;\r\n if (this.partId ===\"vanity_sink\" || this.partId ===\"vanity_faucet\") {\r\n this._customDisplayName = this._customDisplayName.replace(/ D/g, \"\")\r\n } else if (this.partId === \"shower_interior_wall\") {\r\n // White Acrylic 30in 1 Moment Flat -> White Acrylic\r\n // Grey Garden 48in 1 Solid Surface -> Grey Garden\r\n this._customDisplayName = this._customDisplayName.replace(/ 60in/g, \"\").replace(/ 48in/g, \"\").replace(/ 30in/g, \"\").split(\" 1 \")[0]\r\n } else if (this.partId === \"shower_pan_combo\" && Array.isArray(this.metaData[\"SkuName\"]) && this.metaData[\"SkuName\"][0]) {\r\n this._customDisplayName = this.metaData[\"SkuName\"][0]\r\n }\r\n }\r\n return this._customDisplayName\r\n };\r\n\r\n getMatchingFeatureName = () => {\r\n return this.getSplittedFeatureName()\r\n };\r\n\r\n getModuleFeatureName = () => {\r\n // return this.partName.split(\" M_\")[0];\r\n return this.partName.split(\" M\")[0];\r\n };\r\n\r\n featureIsMatchingFilters(currentFeature, activeFilters, filters = []) {\r\n return filters.every(filter => {\r\n return activeFilters[filter.id]\r\n && currentFeature.dbFeature.filterValueIDs[filter.id]\r\n && currentFeature.dbFeature.filterValueIDs[filter.id].includes(activeFilters[filter.id][0])\r\n })\r\n }\r\n\r\n getActiveFeaturePartsAccordingToActiveFeature(fromFeature = this.activeFeature, activeFeatureConditions = []) {\r\n let activeFeatureParts = [];\r\n if (fromFeature && fromFeature.partNumber) {\r\n let activeFeaturePart;\r\n const name1 = fromFeature.getSplittedFeatureName();\r\n // console.log(\"name1\", name1);\r\n let arrayOfConditions = activeFeatureConditions.length\r\n ? activeFeatureConditions\r\n : this.getActiveFeatureConditions(fromFeature);\r\n if (this.partId === \"right_wall\") {\r\n arrayOfConditions = arrayOfConditions.filter(condition => condition.propName !== \"MirrorSize\");\r\n }\r\n activeFeatureParts = this.featuresParts.filter((feature) => name1 === feature.getSplittedFeatureName());\r\n // console.log(\"this.featuresParts\", this.featuresParts);\r\n // console.log(\"activeFeatureParts\", activeFeatureParts);\r\n if (activeFeatureParts.length) {\r\n activeFeaturePart = activeFeatureParts.find((feature) => {\r\n return feature.matchesMetaForArrayOfConditions(arrayOfConditions)\r\n });\r\n if (!activeFeaturePart) {\r\n activeFeaturePart = activeFeatureParts[0];\r\n }\r\n }\r\n activeFeatureParts = activeFeaturePart ? [activeFeaturePart] : [];\r\n activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n }\r\n return activeFeatureParts\r\n }\r\n\r\n checkIfFeaturePartIsMatching() {\r\n if (this.activeFeatureParts && this.activeFeatureParts.length) {\r\n const activeFeatureConditions = this.getActiveFeatureConditions();\r\n const name1 = this.activeFeature.getSplittedFeatureName();\r\n const activeFeaturePart = this.activeFeatureParts[0];\r\n if (!(activeFeaturePart.matchesMetaForArrayOfConditions(activeFeatureConditions)\r\n && name1 === activeFeaturePart.getSplittedFeatureName())) {\r\n this.activeFeatureParts = this.setActiveFeatureParts(this.activeFeature, activeFeatureConditions);\r\n }\r\n } else {\r\n this.activeFeatureParts = this.setActiveFeatureParts();\r\n }\r\n }\r\n\r\n\r\n // OLD SHOWER LOGIC\r\n\r\n rememberPreviousSelection(shower, currentActiveFeature) {\r\n const layoutAbbr = shower.layout.getCurrentLayoutAbbreviation();\r\n const currentShowerBodyId = IntermediatePart.getCurrentShowerBodyId(shower);\r\n const wallConfiguration = shower.layout.parts[\"Shower Tub Combo\"] && shower.layout.parts[\"Shower Tub Combo\"].wallConfiguration;\r\n if (this.currentShowerBodyId !== currentShowerBodyId && currentActiveFeature && !currentActiveFeature.partName.includes(\"laceholder\")) {\r\n if (!this.previouslySelectedFeatures[layoutAbbr]) {\r\n this.previouslySelectedFeatures[layoutAbbr] = {}\r\n }\r\n this.previouslySelectedFeatures[layoutAbbr][this.currentShowerBodyId] = currentActiveFeature; // remember previous active item\r\n if (wallConfiguration\r\n && wallConfiguration.features.some(feature => feature.showerBodyId === this.currentShowerBodyId)) {\r\n wallConfiguration.features.forEach((wallConfigurationFeature) => { // remember previous active item for all wall conf\r\n this.previouslySelectedFeatures[layoutAbbr][wallConfigurationFeature.showerBodyId] = currentActiveFeature;\r\n })\r\n }\r\n }\r\n this.currentShowerBodyId = currentShowerBodyId; // set new shower type\r\n }\r\n\r\n setDefaultAccordingToPreviousSelect(shower, filteredFeatures, hardCodedDefaultName, placeholderDefaultName = \"laceholder\") {\r\n const layoutAbbr = shower.layout.getCurrentLayoutAbbreviation();\r\n const currentShowerBodyId = IntermediatePart.getCurrentShowerBodyId(shower);\r\n // console.log('currentShowerBodyId', currentShowerBodyId);\r\n // console.log('this.previouslySelectedFeatures', this.previouslySelectedFeatures);\r\n\r\n if (this.currentShowerBodyId !== currentShowerBodyId\r\n && this.previouslySelectedFeatures[layoutAbbr]\r\n && this.previouslySelectedFeatures[layoutAbbr][currentShowerBodyId]\r\n && filteredFeatures.some(f => f.dbFeature.id === this.previouslySelectedFeatures[layoutAbbr][currentShowerBodyId].dbFeature.id)) {\r\n this.activeFeature = this.previouslySelectedFeatures[layoutAbbr][currentShowerBodyId]; // restore from previous chosen\r\n } else {\r\n const hardCodedDefault = hardCodedDefaultName && filteredFeatures.find((feature) => {\r\n return !feature.notAvailableInVisualizer && feature.dbFeature.displayName && feature.dbFeature.displayName.includes(hardCodedDefaultName);\r\n });\r\n this.activeFeature = hardCodedDefault || filteredFeatures[0];\r\n }\r\n const placeholderDefault = filteredFeatures.find((feature) => {\r\n return !feature.notAvailableInVisualizer && feature.dbFeature.displayName\r\n && feature.dbFeature.displayName.includes(placeholderDefaultName);\r\n });\r\n this.placeholderFeature = placeholderDefault || null;\r\n }\r\n\r\n /** shower door, fixture methods **/\r\n static getCurrentShowerBodyId(shower) {\r\n let currentShowerBodyId = \"\";\r\n const showerTubComboIsActive = shower.showerTubComboIsActive();\r\n if (!showerTubComboIsActive && shower.showerBody && shower.showerBody.activeFeature) {\r\n currentShowerBodyId = shower.showerBody.activeFeature.showerBodyId;\r\n } else if (showerTubComboIsActive && shower.layout.parts[\"Shower Tub Combo\"]\r\n && shower.layout.parts[\"Shower Tub Combo\"].wallConfiguration\r\n && shower.layout.parts[\"Shower Tub Combo\"].wallConfiguration.activeFeature) {\r\n currentShowerBodyId = shower.layout.parts[\"Shower Tub Combo\"].wallConfiguration.activeFeature.showerBodyId;\r\n }\r\n return currentShowerBodyId\r\n }\r\n\r\n\r\n}\r\n","import {useEffect} from \"react\";\r\n\r\nimport {compareCoords, getCommonCoords, getFeatureCoords} from \"../../lookFunctions\";\r\nimport {getCurrentLayout} from \"../../../../appLayout\";\r\nimport {featureHasSelectedFilters, s3FilterImagePath} from \"../../../../../misc/utils\";\r\nimport {WIZARD_GROUP_TYPES} from \"../../../../../interfaces/wizardItemInterface\";\r\nimport Misc from \"../../../../../misc/misc\";\r\nimport {getCompressedFeature} from \"../../../../../misc/backendFunctions\";\r\nimport {getBvFeatures} from \"../../../../../api/server-api\";\r\nimport store from \"../../../../../store\";\r\nimport {setWizardMissingFeatures} from \"../../../../../actions/wizardFunctions\";\r\nimport {getFeatureGroupFeaturesQuantity} from \"../../lookNavigationFunctions\";\r\nimport {AVAILABLE_VISUALIZER_TYPES, getCommonVisualizerType} from \"../../../../../config\";\r\nimport {isSameVisualizerWizard, selectedWizardGroupIsNotInCurrentStepAnymore} from \"./lookWizardFunctions2\";\r\n\r\nconst regexForWizardId = /\\/wizard\\/(.*?)$/;\r\n\r\n/**\r\n * returns current wizard list for visualizer\r\n * @param wizardList {[wizardItemInterface]}\r\n * @param activePreset {string|number}\r\n * @returns {wizardItemInterface[]}\r\n */\r\nexport const getCurrentWizardList = (wizardList, activePreset) => {\r\n return wizardList.filter(wizardItem => !wizardIsDisabled(wizardItem, activePreset))\r\n}\r\n\r\n/**\r\n * returns current wizard step section items\r\n * @param wizardItem {wizardItemInterface}\r\n * @param activePreset {string|number}\r\n * @returns {boolean}\r\n */\r\nexport const wizardIsDisabled = (wizardItem, activePreset) => {\r\n if (!isSameVisualizerWizard(wizardItem)) {\r\n return true\r\n }\r\n return !wizardItem.disabledScenes || (typeof activePreset !== \"undefined\" && wizardItem.disabledScenes.includes(activePreset))\r\n}\r\n\r\n/**\r\n * checks if we need to show the wizard in the project scope and shoppingcart for the QuotingTool\r\n * @param wizardList {[wizardItemInterface]}\r\n * @param wizardIsActive {boolean}\r\n * @returns {boolean}\r\n */\r\nexport const showWizardInsteadOfQT = (wizardList, wizardIsActive) => {\r\n return wizardIsActive && wizardList.length\r\n}\r\n\r\n/**\r\n * returns current wizard step section items\r\n * @param wizardList {[wizardItemInterface]}\r\n * @param location {object}\r\n * @returns wizardActiveItem {wizardItemInterface}\r\n */\r\nexport const getActiveWizardItem = (wizardList, location) => {\r\n if (!Array.isArray(wizardList) || !location) {\r\n return null\r\n }\r\n const match = location.pathname.match(regexForWizardId);\r\n if (!Array.isArray(match) || !match[1]) {\r\n return null\r\n }\r\n const stringId = +match[1];\r\n return wizardList.find(wizItem => wizItem.id === stringId);\r\n}\r\n\r\n\r\n/**\r\n * returns layout's featureGroup\r\n * @param wizardGroup {wizardGroupInterface}\r\n * @param layout {object}\r\n * @returns featureGroup {featureGroupInterface}\r\n */\r\nexport const getFeatureGroupFromWizardGroup = (wizardGroup, layout = getCurrentLayout()) => {\r\n if (!wizardGroup) {\r\n return null\r\n }\r\n if (layout.visualizerType === AVAILABLE_VISUALIZER_TYPES.Kitchen || layout.visualizerType === AVAILABLE_VISUALIZER_TYPES.kvScene) {\r\n switch (wizardGroup.groupName) {\r\n case \"Edge Profile\":\r\n return layout.getFeatureGroupByPartId(wizardGroup.isCenterIslandGroup ? \"center_island_edge\" : \"edge_profile\")\r\n case \"Sink\":\r\n return layout.getFeatureGroupByPartId(wizardGroup.isCenterIslandGroup ? \"center_island_sink\" : \"sink\")\r\n case \"Faucet\":\r\n return layout.getFeatureGroupByPartId(wizardGroup.isCenterIslandGroup ? \"center_island_faucet\" : \"faucet\")\r\n default:\r\n break;\r\n }\r\n }\r\n return layout.getFeatureGroupByGroupName(wizardGroup.groupName)\r\n}\r\n\r\n/**\r\n * returns current wizard step section items\r\n * @param wizardList {[wizardItemInterface]}\r\n * @param partId {string}\r\n * @param activePreset {number|string} // check\r\n * @param firstOnly {boolean} // determines if we need to check only first step featureGroups or all\r\n * @returns wizardActiveItem {wizardItemInterface}\r\n */\r\nexport const categoryIsInTheWizard = (wizardList, partId = \"\", activePreset, firstOnly = true) => {\r\n if (!Array.isArray(wizardList) || !partId) {\r\n return null\r\n }\r\n return wizardList.find(wizItem => {\r\n if (wizardIsDisabled(wizItem, activePreset)) {\r\n return false\r\n }\r\n let lookWhere = firstOnly ? getCurrentGroupsFromSource(\"0\", wizItem) : wizItem.wizardGroups;\r\n if (firstOnly && Array.isArray(lookWhere) && lookWhere.length && lookWhere.every(wizGroup => wizGroup.nodeType === \"custom\")) {\r\n lookWhere = lookWhere.reduce((total, wizGroup) => {\r\n return [...total, ...getCurrentGroupsFromSource(wizGroup.id, wizItem)]\r\n }, []);\r\n }\r\n return lookWhere.some(wizardGroup => {\r\n if (wizardGroup.nodeType !== \"group\") {\r\n return false;\r\n }\r\n const featureGroup = getFeatureGroupFromWizardGroup(wizardGroup);\r\n if (!featureGroup) {\r\n return false\r\n }\r\n return featureGroup.partId === partId\r\n })\r\n })\r\n}\r\n\r\n/**\r\n * returns current wizard step section items\r\n * @param wizardList {[wizardItemInterface]}\r\n * @param params {object}\r\n * @returns wizardActiveItem {wizardItemInterface}\r\n */\r\nexport const getMaterialsWizardItem = (wizardList, params) => {\r\n if (!Array.isArray(wizardList) || !params) {\r\n return null\r\n }\r\n return wizardList.find(wizItem => {\r\n if (!isSameVisualizerWizard(wizItem)) {\r\n return false\r\n }\r\n return (Misc.getUrlFromString(wizItem.name) === params.partName || wizItem.id === +params.partName)\r\n }) || getDefaultMaterialsWizardItem()\r\n}\r\n\r\n/**\r\n * returns default wizard on switch to page\r\n * @returns wizardActiveItem {wizardItemInterface}\r\n */\r\nexport const getDefaultMaterialsWizardItem = () => {\r\n const {quotesState, wizardState} = store.getState();\r\n const {wizardList, allWizardsValues, wizardActiveItem} = wizardState;\r\n const {activeQuoteIndex} = quotesState;\r\n if (!Array.isArray(wizardList)) {\r\n return null\r\n }\r\n const currentVisType = getCommonVisualizerType();\r\n const lastSelectedWizardInThisQuote = Array.isArray(allWizardsValues) ? allWizardsValues.find(wizItem => {\r\n return wizItem.quoteIndex === activeQuoteIndex && wizItem.isLastActiveWizard\r\n && isSameVisualizerWizard(wizItem, currentVisType)\r\n }) : null;\r\n if (lastSelectedWizardInThisQuote) {\r\n const foundWizItem = wizardList.find(wizItem => wizItem.id === lastSelectedWizardInThisQuote.wizardItemId);\r\n if (foundWizItem) {\r\n return foundWizItem\r\n }\r\n }\r\n if (wizardActiveItem && isSameVisualizerWizard(wizardActiveItem, currentVisType)) {\r\n return wizardActiveItem\r\n }\r\n return wizardList.find(wizItem => isSameVisualizerWizard(wizItem, currentVisType)) || wizardList[0]\r\n}\r\n\r\nlet cachedSiblingFeatures = []; // {wizardId: number, groups: [{}, {}], totalFeatures: [] }\r\n\r\n/**\r\n * returns current wizard step section items\r\n * @param source {string}\r\n * @param wizardActiveItem {wizardItemInterface}\r\n * @returns array {[wizardGroupInterface]}\r\n */\r\nexport const getCurrentGroupsFromSource = (source, wizardActiveItem) => {\r\n if (!wizardActiveItem) {\r\n return []\r\n }\r\n const siblingGroups = wizardActiveItem.wizardGroups.filter(wizGroup => {\r\n return wizardActiveItem.wizardEdges.some(wizEdge => wizEdge.source === source && wizEdge.target === wizGroup.id)\r\n });\r\n // console.log(\"siblingGroups\", siblingGroups);\r\n const areSameSiblingGroups = siblingGroups.length > 1 && siblingGroups.every(siblingGroup => {\r\n return (siblingGroup.nodeType === WIZARD_GROUP_TYPES.group) && (siblingGroup.groupName === siblingGroups[0].groupName)\r\n });\r\n if (areSameSiblingGroups) {\r\n // console.log(\"cachedSiblingFeatures\", cachedSiblingFeatures);\r\n\r\n if (siblingGroups.every(wizardGroup => wizardGroup.useIncluded && wizardGroup.featuresIncluded)) { // new logic\r\n let featuresIncluded = [];\r\n const alreadyCached = cachedSiblingFeatures.find(cacheObject => {\r\n return (cacheObject.wizardId === wizardActiveItem.id) && (cacheObject.groups.every((wGroup, wGroupIndex) => {\r\n return siblingGroups[wGroupIndex] && (wGroup.id === siblingGroups[wGroupIndex].id)\r\n }))\r\n })\r\n // console.log(\"alreadyCached\", alreadyCached);\r\n if (alreadyCached) {\r\n featuresIncluded = alreadyCached.totalFeatures;\r\n } else {\r\n featuresIncluded = siblingGroups.reduce((total, wizardGroup) => {\r\n wizardGroup.featuresIncluded.forEach(included => {\r\n if (!total.some(exclObj => (exclObj.featureDefinitionId === included.featureDefinitionId))) {\r\n total.push(included)\r\n }\r\n })\r\n return total\r\n }, []);\r\n cachedSiblingFeatures.push({\r\n wizardId: wizardActiveItem.id,\r\n groups: siblingGroups,\r\n totalFeatures: featuresIncluded\r\n })\r\n }\r\n const newGroup = Object.assign({}, siblingGroups[0], {\r\n mergedGroups: siblingGroups,\r\n featuresExcluded: [], // not sure if we need it\r\n featuresIncluded\r\n })\r\n return [newGroup]\r\n }\r\n\r\n const allFeaturesExcluded = siblingGroups.reduce((total, wizardGroup) => {\r\n wizardGroup.featuresExcluded.forEach(excluded => {\r\n if (!excluded) {\r\n return\r\n }\r\n if (typeof excluded === \"object\") { // new logic for excluded\r\n if (!total.some(exclObj => (typeof exclObj === \"object\") && (exclObj.featureDefinitionId === excluded.featureDefinitionId))) {\r\n total.push(excluded)\r\n }\r\n } else if (!total.includes(excluded)) {\r\n total.push(excluded)\r\n }\r\n })\r\n return total\r\n }, []);\r\n const featuresExcluded = allFeaturesExcluded.filter(exclFeature => {\r\n return siblingGroups.every(siblingGroup => {\r\n if (typeof exclFeature === \"object\") {\r\n return siblingGroup.featuresExcluded.some(exclObj => {\r\n return (exclObj !== null)\r\n && (typeof exclObj === \"object\")\r\n && (exclObj.featureDefinitionId === exclFeature.featureDefinitionId)\r\n })\r\n }\r\n return siblingGroup.featuresExcluded.includes(exclFeature) // reaally old support\r\n })\r\n })\r\n const newGroup = Object.assign({}, siblingGroups[0], {\r\n mergedGroups: siblingGroups,\r\n featuresExcluded\r\n })\r\n return [newGroup]\r\n }\r\n return siblingGroups\r\n}\r\n\r\nexport const getCorrectedWizardGroupId = (stepGroups, stepSelectedValue) => {\r\n if ((stepGroups.length === 1) && stepGroups[0].mergedGroups && stepSelectedValue && stepSelectedValue.wizardGroup\r\n && (stepSelectedValue.wizardGroup.groupName === stepGroups[0].groupName)\r\n && stepGroups[0].mergedGroups.some(wizG => wizG.id === stepSelectedValue.wizardGroup.id)) {\r\n const correctedWizG = Object.assign({}, stepGroups[0], {\r\n id: stepSelectedValue.wizardGroup.id\r\n });\r\n return [correctedWizG]\r\n }\r\n return stepGroups\r\n}\r\n\r\n/**\r\n * returns fixed wizard group for merged groups\r\n * @param wizardGroup {wizardGroupInterface}\r\n * @param feature {featureInterface}\r\n * @returns {wizardGroupInterface}\r\n */\r\nexport const getCorrectedWizardGroupForFeature = (wizardGroup, feature) => {\r\n if (wizardGroup.mergedGroups && feature) {\r\n const realWizardGroup = wizardGroup.mergedGroups.find(wizG => !navItemIsExcluded({part: feature}, wizG));\r\n if (realWizardGroup && (realWizardGroup.id !== wizardGroup.id)) {\r\n return Object.assign({}, wizardGroup, {\r\n id: realWizardGroup.id\r\n })\r\n }\r\n }\r\n return wizardGroup\r\n}\r\n\r\n/**\r\n * returns current wizard step section items\r\n * @param wizardActiveItem {wizardItemInterface}\r\n * @param wizardActiveStep {number}\r\n * @param wizardSelectedValues {object}\r\n * @param prevStepGroups {[wizardGroupInterface]}\r\n * @param additionalWizardValuesToCheck {object}\r\n * @returns {array}\r\n */\r\nexport const getCurrentGroups = (wizardActiveItem,\r\n wizardActiveStep,\r\n wizardSelectedValues,\r\n prevStepGroups = [],\r\n additionalWizardValuesToCheck= null) => {\r\n if (!wizardActiveItem || wizardActiveStep < 0) {\r\n return []\r\n }\r\n const stepStr = \"\" + wizardActiveStep;\r\n\r\n const toCheckValue = wizardSelectedValues[wizardActiveStep] || (additionalWizardValuesToCheck\r\n ? additionalWizardValuesToCheck[wizardActiveStep] : null);\r\n\r\n if (wizardActiveStep === 0) {\r\n return getCorrectedWizardGroupId(\r\n getCurrentGroupsFromSource(stepStr, wizardActiveItem),\r\n toCheckValue\r\n )\r\n }\r\n\r\n const selectedPrevStep = wizardSelectedValues[wizardActiveStep - 1];\r\n if (!selectedPrevStep || !selectedPrevStep.wizardGroup\r\n || (prevStepGroups.length && selectedWizardGroupIsNotInCurrentStepAnymore(selectedPrevStep, prevStepGroups))) {\r\n if (prevStepGroups.length && prevStepGroups[0].id) {\r\n if (additionalWizardValuesToCheck) { // here we check also previously selected values to make steps similar to prev choices\r\n let foundPreviouslySelectedGroup = null;\r\n if (prevStepGroups.every(wg => wg.nodeType === \"custom\")) {\r\n Object.keys(additionalWizardValuesToCheck).forEach(key => {\r\n if ((key > Object.keys(wizardSelectedValues).length)\r\n && !additionalWizardValuesToCheck[key].partId\r\n && additionalWizardValuesToCheck[key].wizardGroup) {\r\n prevStepGroups.forEach(wg => {\r\n if (wg.id === additionalWizardValuesToCheck[key].wizardGroup.id) {\r\n foundPreviouslySelectedGroup = wg;\r\n }\r\n });\r\n }\r\n });\r\n } else {\r\n // here we can add simple feature group, but no need for now\r\n }\r\n if (foundPreviouslySelectedGroup) {\r\n return getCorrectedWizardGroupId(\r\n getCurrentGroupsFromSource(foundPreviouslySelectedGroup.id, wizardActiveItem),\r\n toCheckValue\r\n )\r\n }\r\n }\r\n const suggestedStepGroups = getCurrentGroupsFromSource(prevStepGroups[0].id, wizardActiveItem);\r\n if ((suggestedStepGroups.length === 1 && (suggestedStepGroups[0].nodeType === \"group\") && suggestedStepGroups[0].mergedGroups && suggestedStepGroups[0].mergedGroups.length)\r\n && additionalWizardValuesToCheck && Object.keys(additionalWizardValuesToCheck).length) {\r\n // here we check if there are selections in the old flow that might actually help to select current product\r\n if (toCheckValue && toCheckValue.wizardGroup\r\n && (toCheckValue.wizardGroup.groupName === suggestedStepGroups[0].groupName)\r\n && toCheckValue.selectedFeature\r\n && suggestedStepGroups[0].mergedGroups.some(wizG => !navItemIsExcluded({part: toCheckValue.selectedFeature}, wizG))) {\r\n return [getCorrectedWizardGroupForFeature(\r\n suggestedStepGroups[0],\r\n toCheckValue.selectedFeature\r\n )]\r\n } else if (!toCheckValue || !toCheckValue.wizardGroup || (toCheckValue.wizardGroup.groupName !== suggestedStepGroups[0].groupName)) {\r\n // here we check if there are selections in the old flow that might actually help to select current product\r\n for (let key = Object.keys(wizardSelectedValues).length + 1; key < Object.keys(additionalWizardValuesToCheck).length; key++) {\r\n if (key && (key > Object.keys(wizardSelectedValues).length)\r\n && additionalWizardValuesToCheck[key]\r\n && additionalWizardValuesToCheck[key].wizardGroup\r\n && additionalWizardValuesToCheck[key].selectedFeature\r\n && (additionalWizardValuesToCheck[key].wizardGroup.groupName === suggestedStepGroups[0].groupName)\r\n && suggestedStepGroups[0].mergedGroups.some(wizG => !navItemIsExcluded({part: additionalWizardValuesToCheck[key].selectedFeature}, wizG))) {\r\n return [getCorrectedWizardGroupForFeature(\r\n suggestedStepGroups[0],\r\n additionalWizardValuesToCheck[key].selectedFeature\r\n )]\r\n }\r\n }\r\n }\r\n }\r\n return getCorrectedWizardGroupId(\r\n suggestedStepGroups,\r\n toCheckValue\r\n )\r\n }\r\n // console.log(\"Previous step is not selected! Check selected values --> \", wizardSelectedValues);\r\n return []\r\n }\r\n\r\n if (selectedPrevStep && selectedPrevStep.wizardGroup && selectedPrevStep.wizardGroup.mergedGroups && selectedPrevStep.selectedFeature) {\r\n const wizardGroupWithSelectedFeature = selectedPrevStep.wizardGroup.mergedGroups.find(wizGroup => {\r\n return !navItemIsExcluded({part: selectedPrevStep.selectedFeature}, wizGroup)\r\n });\r\n if (wizardGroupWithSelectedFeature) {\r\n return getCorrectedWizardGroupId(\r\n getCurrentGroupsFromSource(wizardGroupWithSelectedFeature.id, wizardActiveItem),\r\n toCheckValue\r\n )\r\n }\r\n }\r\n\r\n // const prevStepStr = \"\" + (wizardActiveStep - 1);\r\n // const prevGroups = getCurrentGroupsFromSource(prevStepStr, wizardActiveItem);\r\n // if (prevGroups.length > 1 && wizardActiveStep > 0) {\r\n // return [selectedPrevStep.wizardGroup]\r\n // }\r\n\r\n return getCorrectedWizardGroupId(\r\n getCurrentGroupsFromSource(selectedPrevStep.wizardGroup.id, wizardActiveItem),\r\n toCheckValue\r\n )\r\n}\r\n\r\n/**\r\n * returns current wizard step section items\r\n * @param wizardActiveItem {wizardItemInterface}\r\n * @param wizardSelectedValues {object}\r\n * @param returnAllSteps {boolean}\r\n * @param additionalWizardValuesToCheck {object}\r\n * @returns {array}\r\n */\r\nexport const getAvailableSteps = (wizardActiveItem, wizardSelectedValues, returnAllSteps, additionalWizardValuesToCheck = null) => {\r\n if (!wizardActiveItem || !wizardActiveItem.wizardGroups || !wizardActiveItem.wizardEdges) {\r\n return []\r\n }\r\n\r\n const maxWizardSteps = 50;\r\n\r\n let stepsArray = [{\r\n stepIndex: 0,\r\n stepGroups: getCorrectedWizardGroupId(getCurrentGroupsFromSource(\"0\", wizardActiveItem), wizardSelectedValues[0]),\r\n }];\r\n\r\n for (let i = 1; i <= maxWizardSteps; i++) {\r\n const prevStepGroups = returnAllSteps && stepsArray[i - 1] ? stepsArray[i - 1].stepGroups : [];\r\n const currentGroups = getCurrentGroups(wizardActiveItem, i, wizardSelectedValues, prevStepGroups, additionalWizardValuesToCheck)\r\n if (!currentGroups.length) {\r\n break;\r\n }\r\n stepsArray.push({\r\n stepIndex: i,\r\n stepGroups: currentGroups\r\n })\r\n }\r\n\r\n return stepsArray\r\n}\r\n\r\n/**\r\n * returns current wizard step section items\r\n * @param currentGroups {[wizardGroupInterface]}\r\n * @returns {array}\r\n */\r\nexport const getWizardStepCommonCoords = (currentGroups) => {\r\n if (!currentGroups.length) {\r\n return []\r\n }\r\n let commonCoords = {};\r\n for (let i = 0; i < currentGroups.length; i++) {\r\n const wizardGroup = currentGroups[i];\r\n const featureGroup = getFeatureGroupFromWizardGroup(wizardGroup);\r\n if (!featureGroup) {\r\n continue\r\n }\r\n const currentCoords = featureGroup.activeFeature ? getFeatureCoords(featureGroup.activeFeature) : getCommonCoords(featureGroup);\r\n commonCoords = compareCoords(currentCoords, currentCoords);\r\n }\r\n\r\n return commonCoords\r\n}\r\n\r\n/**\r\n * returns closest wizard group with nodeType === group\r\n * @param wizardGroup {wizardGroupInterface}\r\n * @param wizardActiveItem {wizardItemInterface}\r\n * @returns {array}\r\n */\r\nexport const findParentWizardFeatureGroup = (wizardGroup, wizardActiveItem) => {\r\n if (!wizardGroup || !wizardActiveItem) {\r\n return null\r\n }\r\n let wizardFeatureParentGroup = null;\r\n\r\n let maxStack = 5;\r\n let currentTry = 0;\r\n const recursiveFindParent = (checkWizardGroup) => {\r\n const sourceEdge = wizardActiveItem.wizardEdges.find(wizEdge => wizEdge.target === checkWizardGroup.id);\r\n const nextToCheckWizardGroup = wizardActiveItem.wizardGroups.find(wizGroup => wizGroup.id === sourceEdge.source);\r\n if (nextToCheckWizardGroup && nextToCheckWizardGroup.nodeType === \"group\") {\r\n wizardFeatureParentGroup = nextToCheckWizardGroup;\r\n } else if (nextToCheckWizardGroup && currentTry < maxStack) {\r\n currentTry++;\r\n recursiveFindParent(nextToCheckWizardGroup)\r\n }\r\n }\r\n recursiveFindParent(wizardGroup)\r\n\r\n return wizardFeatureParentGroup\r\n}\r\n/**\r\n * returns closest wizard group with nodeType === group\r\n * @param featureGroup {featureGroupInterface}\r\n * @param selectedFilters {array}\r\n * @returns {featureInterface}\r\n */\r\nexport const findFeatureBySelectedFilters = (featureGroup, selectedFilters) => {\r\n if (!featureGroup || !selectedFilters) {\r\n return null\r\n }\r\n if (featureGroup.activeFeature && featureHasSelectedFilters(featureGroup.activeFeature, selectedFilters)) {\r\n return featureGroup.activeFeature\r\n }\r\n const layout = getCurrentLayout();\r\n const navItems = layout.designNavigationItems({part: featureGroup}, selectedFilters);\r\n if (!navItems.length) {\r\n return null\r\n }\r\n if (navItems.length > 1 && featureGroup.activeFeature && featureGroup.activeFeature.dbFeature.sharedFeatureName.includes(\".\")) {\r\n const skuColor = \".\" + featureGroup.activeFeature.dbFeature.sharedFeatureName.split(\".\")[1];\r\n const sameColor = navItems.find(navItem => navItem.part.dbFeature.sharedFeatureName.includes(skuColor));\r\n if (sameColor) {\r\n return sameColor.part\r\n }\r\n }\r\n return navItems[0].part\r\n}\r\n\r\n/**\r\n * @param currentFilterValue {object} filterValueInterface\r\n * @param filterGroup {object} filterGroupInterface\r\n * @returns {object}\r\n */\r\nexport const getFilterValueThumbnailAndStyles = (currentFilterValue, filterGroup) => {\r\n\r\n const getFilterItemThumbnail = () => {\r\n const additionalImages = currentFilterValue.additionalImages;\r\n if (Array.isArray(additionalImages) && additionalImages.length) {\r\n return additionalImages[0].imageUrl\r\n }\r\n return s3FilterImagePath(currentFilterValue.icon);\r\n }\r\n\r\n let thumbnail = getFilterItemThumbnail();\r\n const isColor = (filterGroup.name || \"\").toLowerCase().includes(\"color\");\r\n\r\n const styles = {\r\n backgroundSize: isColor ? \"cover\" : \"contain\",\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundPosition: \"center\",\r\n };\r\n if (thumbnail) {\r\n styles.backgroundImage = \"url(\" + thumbnail + \")\";\r\n }\r\n if (!thumbnail && currentFilterValue && isColor) {\r\n styles.backgroundColor = currentFilterValue.value;\r\n }\r\n\r\n return {thumbnail, styles}\r\n}\r\n\r\n/**\r\n * @param navItem {navItemInterface}\r\n * @param wizardGroup {wizardGroupInterface}\r\n * @returns {boolean}\r\n */\r\nexport const navItemIsExcluded = (navItem, wizardGroup) => {\r\n const {sku, featureDefinitionID, customDisplayName} = navItem.part.dbFeature;\r\n const {partName} = navItem.part; // it replaces the {groupName + \"-\"} from the name, same logic as we have in the dashboard\r\n // if (customDisplayName === \"Only Front Edge\") {\r\n // console.log(\"checking excluded from wizardGroup\", wizardGroup);\r\n // debugger;//eslint-disable-line\r\n // }\r\n if (wizardGroup.useIncluded && wizardGroup.featuresIncluded) {\r\n return !wizardGroup.featuresIncluded.some(includedFeature => {\r\n return (includedFeature.sharedFeatureName && (includedFeature.sharedFeatureName === navItem.part.getLowerCasedSharedFeatureName()))\r\n || (includedFeature.featureDefinitionId === featureDefinitionID)\r\n || (!includedFeature.sharedFeatureName && (includedFeature.name === customDisplayName))\r\n || (includedFeature.sku && sku && (includedFeature.sku === sku))\r\n })\r\n }\r\n for (let excluded of wizardGroup.featuresExcluded) {\r\n if (excluded && (typeof excluded === \"object\")) {\r\n if (\r\n (excluded.sharedFeatureName && (excluded.sharedFeatureName === navItem.part.getLowerCasedSharedFeatureName()))\r\n || (excluded.featureDefinitionId === featureDefinitionID)\r\n || (excluded.name === customDisplayName)\r\n || (excluded.sku && sku && (excluded.sku === sku))\r\n ) {\r\n return true\r\n }\r\n // if (excluded.name === customDisplayName || excluded.name === sharedFeatureName || (excluded.sku && sku && (excluded.sku === sku))) {\r\n } else if (excluded) {\r\n // if (excluded === sku || excluded === sharedFeatureName || excluded === partName || excluded === featureDefinitionID) {\r\n if (excluded === sku || excluded === partName || excluded === featureDefinitionID) {\r\n return true\r\n }\r\n }\r\n }\r\n return false\r\n}\r\n\r\n/**\r\n * @param navItems {[navItemInterface]}\r\n * @param wizardGroup {wizardGroupInterface}\r\n * @returns {[navItemInterface]}\r\n */\r\nexport const filterWizardNavItems = (navItems, wizardGroup) => {\r\n if (!wizardGroup.useIncluded && (!Array.isArray(wizardGroup.featuresExcluded) || !wizardGroup.featuresExcluded.length)) {\r\n return navItems\r\n }\r\n // console.log(\"navItems to filter\", navItems);\r\n return navItems.filter(navItem => !navItemIsExcluded(navItem, wizardGroup));\r\n}\r\n\r\n/**\r\n * @param wizardSelectedValues {object} // selected wizard steps values\r\n * @param wizardActiveStep {number} wizardActiveStep\r\n * @param wizardActiveItem {wizardItemInterface} wizardItemInterface\r\n * @param wizardGroup {wizardGroupInterface} wizardGroupInterface\r\n * @param featureGroup {featureGroupInterface} featureGroupInterface\r\n * @param filterGroups {[filterGroupInterface]}\r\n * @param searchText {string}\r\n * @param filters {object}\r\n * @param shopPageOpened {boolean}\r\n * @param showPrevStepsColorFirst {boolean}\r\n * @returns {array}\r\n */\r\nexport const getCurrentWizardNavItems = (wizardSelectedValues,\r\n wizardActiveStep,\r\n wizardActiveItem,\r\n wizardGroup,\r\n featureGroup = null,\r\n filterGroups = [],\r\n searchText = \"\",\r\n filters = [],\r\n shopPageOpened = false,\r\n showPrevStepsColorFirst = false) => {\r\n\r\n const layout = getCurrentLayout();\r\n featureGroup = featureGroup || getFeatureGroupFromWizardGroup(wizardGroup);\r\n if (!featureGroup) {\r\n return []\r\n }\r\n\r\n const selectedStepsReversed = Object.keys(wizardSelectedValues).reverse() // is needed to take last selected steps first\r\n\r\n selectedStepsReversed.forEach(selectedStep => {\r\n const {selectedFilter} = wizardSelectedValues[selectedStep];\r\n if (!selectedFilter || +selectedStep >= wizardActiveStep) {\r\n return\r\n }\r\n const parentWizardGroup = findParentWizardFeatureGroup(wizardSelectedValues[selectedStep].wizardGroup, wizardActiveItem);\r\n if (!parentWizardGroup) {\r\n return null\r\n }\r\n const parentFeatureGroup = getFeatureGroupFromWizardGroup(parentWizardGroup);\r\n if (parentFeatureGroup && parentFeatureGroup.partId === featureGroup.partId) {\r\n filters.push({\r\n filterId: selectedFilter.id,\r\n filterGroupId: selectedFilter.filterGroup_id,\r\n })\r\n }\r\n });\r\n\r\n let navItems = layout.designNavigationItems(\r\n {part: featureGroup},\r\n filters,\r\n searchText,\r\n featureGroup.activeFeature,\r\n \"all\",\r\n filterGroups,\r\n {returnAllFeatures: shopPageOpened}\r\n );\r\n\r\n navItems = filterWizardNavItems(navItems, wizardGroup);\r\n\r\n if (featureGroup.partId === \"vanity_sink\") {\r\n const selectedPrevStep = wizardSelectedValues[wizardActiveStep - 1];\r\n if (selectedPrevStep && selectedPrevStep.partId === \"vanity_faucet\" && selectedPrevStep.selectedFeature) {\r\n const faucetParent = selectedPrevStep.selectedFeature.getParent();\r\n if (selectedPrevStep.selectedFeature.matchesMetaForArrayOfConditions(faucetParent.getArrayOfConditions())) {\r\n const selectedFaucetConditions = faucetParent.getActiveFeatureConditions(selectedPrevStep.selectedFeature)\r\n const filteredNavItems = navItems.filter(navItem => {\r\n return selectedFaucetConditions.every(condition => navItem.part.matchesMetaForCondition(condition.propName, condition.propValue))\r\n });\r\n // console.log(\"navItems left\", filteredNavItems);\r\n return filteredNavItems\r\n }\r\n }\r\n }\r\n\r\n if (showPrevStepsColorFirst && !wizardSelectedValues[wizardActiveStep]) {\r\n const allSelectedColors = selectedStepsReversed.reduce((total, selectedStep) => {\r\n if (wizardSelectedValues[selectedStep] && wizardSelectedValues[selectedStep].selectedFeature) {\r\n const colorName = wizardSelectedValues[selectedStep].selectedFeature.getColorName(filterGroups);\r\n if (colorName && !total.includes(colorName)) {\r\n total.push(colorName)\r\n }\r\n }\r\n return total\r\n }, []);\r\n // console.log(\"navItems222\", navItems);\r\n // console.log(\"allSelectedColors\", allSelectedColors);\r\n // console.log(\"wizardGroup\", wizardGroup);\r\n if (allSelectedColors.length) {\r\n navItems = navItems.map(navItem => {\r\n if (navItem.colorOptions && navItem.colorOptions.length) {\r\n const currentColorOption = navItem.part.getColorName(filterGroups);\r\n if (currentColorOption !== allSelectedColors[0]) {\r\n let optionMatchForPrevSelectedColor = null;\r\n allSelectedColors.forEach(selectedColor => {\r\n if (!optionMatchForPrevSelectedColor && (currentColorOption !== selectedColor)) {\r\n optionMatchForPrevSelectedColor = navItem.colorOptions.find(option => {\r\n return option.feature.getColorName(filterGroups) === selectedColor\r\n })\r\n }\r\n })\r\n if (optionMatchForPrevSelectedColor) {\r\n // console.log(\"replaced! from\", navItem);\r\n // console.log(\"replaced! to\", {part: optionMatchForPrevSelectedColor});\r\n return {part: optionMatchForPrevSelectedColor.feature}\r\n }\r\n }\r\n }\r\n return navItem\r\n })\r\n }\r\n }\r\n\r\n\r\n return navItems\r\n}\r\n\r\n/**\r\n * is used for context menu, to detect vanity wizard or shower wizard\r\n * @param partIdGroups {[string]}\r\n * @param wizardList {[wizardItemInterface]}\r\n * @param activePreset {string|number}\r\n * @returns {wizardItemInterface}\r\n */\r\nexport const getExistingWizardForGroups = (partIdGroups, wizardList, activePreset) => {\r\n return wizardList.find(wizardItem => {\r\n if (wizardIsDisabled(wizardItem, activePreset)) {\r\n return false\r\n }\r\n // const currentGroups = getCurrentGroups(wizardItem, 0, {});\r\n // // console.log(\"currentGroups\", currentGroups);\r\n // if (!currentGroups || !currentGroups.length) {\r\n // return false\r\n // }\r\n return wizardItem.wizardGroups.some(wizardGroup => {\r\n const featureGroup = getFeatureGroupFromWizardGroup(wizardGroup)\r\n return featureGroup && partIdGroups.includes(featureGroup.partId)\r\n })\r\n });\r\n}\r\n\r\n/**\r\n * is used for removing the layers from the canvas which are not selected in the wizard\r\n * @param wizardActiveItem {wizardItemInterface}\r\n * @param wizardSelectedValues {object}\r\n * @param layers {[]}\r\n * @returns partIdGroups {[string]}\r\n */\r\nexport const getFilteredLayersForActiveWizard = (wizardActiveItem, wizardSelectedValues, layers) => {\r\n if (!wizardActiveItem || !wizardActiveItem.hideItems) {\r\n return layers\r\n }\r\n wizardActiveItem.wizardGroups.forEach(wizardGroup => {\r\n const featureGroup = getFeatureGroupFromWizardGroup(wizardGroup);\r\n if (featureGroup && !Object.keys(wizardSelectedValues).some(stepIndex => {\r\n return wizardSelectedValues[stepIndex].partId === featureGroup.partId && wizardSelectedValues[stepIndex].selectedFeature\r\n })) {\r\n layers = layers.filter(layer => layer.partId !== featureGroup.partId) // if there is a step and it is not selected - remove it\r\n }\r\n })\r\n return layers\r\n}\r\n\r\n/**\r\n * is used for removing the feature groups to prevent them appear after the wizard is finished\r\n * @param wizardActiveItem {wizardItemInterface}\r\n * @param wizardSelectedValues {object}\r\n */\r\nexport const disableNotSelectedFeatureGroups = (wizardActiveItem, wizardSelectedValues) => {\r\n wizardActiveItem.wizardGroups.forEach(wizardGroup => {\r\n const featureGroup = getFeatureGroupFromWizardGroup(wizardGroup);\r\n if (featureGroup && !Object.keys(wizardSelectedValues).some(stepIndex => {\r\n return wizardSelectedValues[stepIndex].partId === featureGroup.partId && wizardSelectedValues[stepIndex].selectedFeature\r\n })) {\r\n featureGroup.disabled = true;\r\n if (featureGroup.layerPositions) { // we need it here to prevent adding to the cart through restore cart on item change\r\n Object.keys(featureGroup.layerPositions).forEach(position => {\r\n featureGroup.layerPositions[position] = null;\r\n })\r\n }\r\n if (featureGroup.disabledClick) {\r\n featureGroup.disabledClick()\r\n }\r\n }\r\n })\r\n}\r\n\r\n/**\r\n * is used to compress the data that will be passed in the job data back and force\r\n * @param allWizardsValues {array}\r\n * @param allWizardsValues {array}\r\n */\r\nexport const getCompressedAllWizardValues = (allWizardsValues) => {\r\n const allWizardsValuesToSave = allWizardsValues.map(newWizObject => {\r\n let wizValues = {};\r\n Object.keys(newWizObject.wizardSelectedValues).forEach(stepIndex => {\r\n wizValues[stepIndex] = Object.assign({}, newWizObject.wizardSelectedValues[stepIndex])\r\n if (newWizObject.wizardSelectedValues[stepIndex].wizardGroup) {\r\n wizValues[stepIndex].wizardGroup = Object.assign(\r\n {},\r\n newWizObject.wizardSelectedValues[stepIndex].wizardGroup,\r\n {featuresExcluded: [], featuresIncluded: []} // to keep clean in json\r\n )\r\n if (wizValues[stepIndex].wizardGroup.mergedGroups) {\r\n wizValues[stepIndex].wizardGroup.mergedGroups = wizValues[stepIndex].wizardGroup.mergedGroups.map(wizGroup => {\r\n return {id: wizGroup.id, groupName: wizGroup.groupName}\r\n });\r\n }\r\n }\r\n if (newWizObject.wizardSelectedValues[stepIndex].selectedFeature) {\r\n wizValues[stepIndex].selectedFeature = getCompressedFeature(\r\n null,\r\n newWizObject.wizardSelectedValues[stepIndex].selectedFeature,\r\n newWizObject.quoteIndex\r\n ); // to keep clean in json\r\n }\r\n })\r\n return Object.assign({}, newWizObject, {wizardSelectedValues: wizValues})\r\n });\r\n // console.log(\"allWizardsValues to save ->\", allWizardsValuesToSave);\r\n return allWizardsValuesToSave\r\n}\r\n\r\n/**\r\n * checks if the following step is disabled\r\n * @param stepIndex {number}\r\n * @param wizardSelectedValues {object}\r\n * @param wizardSteps {array}\r\n * @returns {boolean}\r\n */\r\nexport const getWizardStepIsDisabled = (stepIndex, wizardSelectedValues, wizardSteps) => {\r\n if (stepIndex === 0) {\r\n return false\r\n }\r\n if (wizardSelectedValues[stepIndex - 1] && wizardSelectedValues[stepIndex - 1].wizardGroup) {\r\n return false // prev step is selected, current is not disabled\r\n }\r\n const prevWizardGroup = wizardSelectedValues[stepIndex - 1]\r\n ? wizardSelectedValues[stepIndex - 1].wizardGroup\r\n : wizardSteps[stepIndex - 1] && wizardSteps[stepIndex - 1].stepGroups\r\n ? wizardSteps[stepIndex - 1].stepGroups[0]\r\n : null;\r\n if (prevWizardGroup && prevWizardGroup.notRequired && (stepIndex === 1 || wizardSelectedValues[stepIndex - 2])) {\r\n // added logic for cases when not required goes after not required so you can't jump in the end of the wizard\r\n // you have to have prev prev step selected to jump\r\n return false // if prev is not required - return false, otherwise true\r\n }\r\n return true\r\n}\r\n\r\nexport const getWizardProductGroupName = (wizardGroup) => {\r\n return wizardGroup.productCartTitle || wizardGroup.title || wizardGroup.groupName || \"\"\r\n}\r\n\r\n/**\r\n * checks if we need to request sharedFeatureNames from backend instead of the regular request\r\n * @param wizardGroup {wizardGroupInterface}\r\n * @param featureGroup {featureGroupInterface}\r\n * @returns {boolean}\r\n */\r\nexport const shouldUseNewWizardFeaturesRequestsLogic = (wizardGroup, featureGroup) => {\r\n if (!wizardGroup || !wizardGroup.useIncluded || !wizardGroup.featuresIncluded || !wizardGroup.featuresIncluded.length\r\n || !featureGroup) {\r\n return false\r\n }\r\n return featureGroup.counts && Object.keys(featureGroup.counts).some(layoutType => {\r\n // if less - we will request features with regular request cause it is faster\r\n // we are checking in all layouts case they might be not uploaded(need to change after feature overhaul)\r\n return featureGroup.counts[layoutType] > 1000\r\n })\r\n}\r\n\r\n\r\n/**\r\n * checks if the following step is disabled\r\n * @param currentNavItems {[navItemInterface]}\r\n * @param wizardGroup {wizardGroupInterface}\r\n * @param featureGroup {featureGroupInterface}\r\n * @returns {boolean}\r\n */\r\nexport const getMissingWizardFeatures = async (currentNavItems,\r\n wizardGroup,\r\n featureGroup) => {\r\n\r\n if (featureGroup.requestInProgress) {\r\n // we will request features with regular request cause it is faster\r\n return false\r\n }\r\n\r\n const {wizardMissingFeatures} = store.getState().wizardState;\r\n\r\n if (wizardMissingFeatures[wizardGroup.groupName] && !wizardMissingFeatures[wizardGroup.groupName].length) {\r\n // already received everything\r\n return false\r\n }\r\n\r\n const missingSkus = (wizardGroup.featuresIncluded || [])\r\n .filter(feature => {\r\n return !currentNavItems.some(navItem => navItem.part.getLowerCasedSharedFeatureName() === feature.sharedFeatureName)\r\n })\r\n .map(feature => feature.sharedFeatureName); // convert to names only array\r\n\r\n console.log(\"current missing skus\", missingSkus);\r\n\r\n if (!missingSkus.length) { // first time we create it with requested features // small chances but let it be\r\n store.dispatch(setWizardMissingFeatures(wizardGroup.groupName, missingSkus));\r\n return\r\n }\r\n\r\n const slicedArray = missingSkus.slice(0, 100); // take first 100 features\r\n const stillMissingArray = missingSkus.slice(100); // from 100 to the end\r\n\r\n // 2) get missing features from the backend;\r\n console.log(\"request more missingSkus\", slicedArray);\r\n console.log(\"stillMissingArray\", stillMissingArray);\r\n // loaderEnable();\r\n featureGroup.requestInProgress = true;\r\n const missingSkusResponse = await getBvFeatures(null, slicedArray, true);\r\n featureGroup.requestInProgress = false;\r\n\r\n store.dispatch(setWizardMissingFeatures(wizardGroup.groupName, stillMissingArray)); // set features that left\r\n\r\n if (missingSkusResponse && missingSkusResponse.data) {\r\n console.log(\"missingSkusResponse\", missingSkusResponse.data);\r\n const layout = getCurrentLayout();\r\n layout.loadNewFeatures(missingSkusResponse.data);\r\n return true\r\n }\r\n\r\n // loaderDisable();\r\n return false\r\n}\r\n\r\n/**\r\n * this hook is disabling feature groups for hide items wizards because they should not be added to the cart\r\n * @param wizardActiveItem {wizardItemInterface}\r\n * @param visualizersLoadedLength {number}\r\n * @param wizardSelectedValues {object}\r\n * @param updateLookCartItem {function}\r\n * @returns {boolean}\r\n */\r\nexport const useHideItemsDisabledfeatureGroups = (wizardActiveItem, visualizersLoadedLength, wizardSelectedValues, updateLookCartItem = null) => {\r\n useEffect(() => {\r\n if (wizardActiveItem && wizardActiveItem.hideItems && visualizersLoadedLength) {\r\n wizardActiveItem.wizardGroups.forEach(wizardGroup => {\r\n if (Object.keys(wizardSelectedValues).some(key => wizardSelectedValues[key].wizardGroup.groupName === wizardGroup.groupName)) {\r\n return // do not disable already selected in wizard groups (restoring logic)\r\n }\r\n const featureGroup = getFeatureGroupFromWizardGroup(wizardGroup);\r\n if (featureGroup) {\r\n featureGroup.disabled = true;\r\n if (featureGroup.layerPositions) {\r\n Object.keys(featureGroup.layerPositions).forEach(position => {\r\n featureGroup.layerPositions[position] = null;\r\n })\r\n }\r\n console.log(\"featureGroup disabled\", featureGroup);\r\n }\r\n })\r\n }\r\n if (updateLookCartItem) {\r\n updateLookCartItem();\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [visualizersLoadedLength]);\r\n}\r\n\r\nexport const getNextWizardStepQuantity = (currentGroups, wizardSelectedValues, wizardActiveStep, fromFeature, wizardSqftCartItems = []) => {\r\n let newQuantity = 1\r\n if (currentGroups.length === 1) {\r\n const featureGroup = getFeatureGroupFromWizardGroup(currentGroups[0]);\r\n if (wizardSelectedValues[wizardActiveStep] && Number.isInteger(wizardSelectedValues[wizardActiveStep].quantity)) {\r\n newQuantity = wizardSelectedValues[wizardActiveStep].quantity;\r\n } else if (wizardSqftCartItems.length && (fromFeature || featureGroup)) {\r\n const groupName = fromFeature ? fromFeature.dbFeature.groupName : (featureGroup.dbName || featureGroup.partName);\r\n const addedCartItems = wizardSqftCartItems.filter(cItem => cItem.cartFeature && cItem.cartFeature.dbFeature.groupName === groupName);\r\n // console.log(\"addedCartItems\", addedCartItems);\r\n if (addedCartItems.length) {\r\n newQuantity = addedCartItems.reduce((total, cItem) => total + cItem.quantity, 0);\r\n } else {\r\n newQuantity = getFeatureGroupFeaturesQuantity(fromFeature, featureGroup);\r\n }\r\n } else {\r\n newQuantity = getFeatureGroupFeaturesQuantity(fromFeature, featureGroup);\r\n }\r\n }\r\n return newQuantity\r\n}\r\n\r\n/**\r\n * this returns on qkb wizard custom groups or feature groups as features\r\n * @param currentGroups {[wizardGroupInterface]}\r\n * @returns {boolean}\r\n */\r\nexport const displayMaterialsWizardGroupAsFeature = (currentGroups) => {\r\n return currentGroups.length > 1 || (currentGroups.length === 1 && currentGroups[0].nodeType === WIZARD_GROUP_TYPES.custom)\r\n}\r\n\r\n/**\r\n * this returns on qkb wizard wizardGroup from current steps\r\n * @param wizardItem {wizardItemInterface}\r\n * @param wizardValues {object}\r\n * @param neededWizardGroupId {string}\r\n * @returns {object}\r\n */\r\nexport const getWizardGroupFromCurrentSteps = (wizardItem, wizardValues, neededWizardGroupId) => {\r\n let neededStep, neededWizardGroup;\r\n if (!wizardItem || !wizardValues || !neededWizardGroupId) {\r\n return {neededStep, neededWizardGroup}\r\n }\r\n getAvailableSteps(wizardItem, wizardValues, true).forEach(step => {\r\n if (neededStep) {\r\n return\r\n }\r\n step.stepGroups.forEach(wizGroup => {\r\n if (wizGroup.id === neededWizardGroupId) {\r\n neededStep = step;\r\n neededWizardGroup = wizGroup;\r\n } else if (wizGroup.mergedGroups) {\r\n wizGroup.mergedGroups.forEach(mergedGroup => {\r\n if (mergedGroup.id === neededWizardGroupId) {\r\n neededStep = step;\r\n neededWizardGroup = mergedGroup;\r\n }\r\n })\r\n }\r\n })\r\n });\r\n return {neededStep, neededWizardGroup}\r\n}\r\n","export const LayoutType = {\r\n Layout1: 1,\r\n Layout4: 4,\r\n};\r\n\r\nexport const LayoutAbbreviation = {\r\n All: \"ALL\",\r\n Layout1: \"Layout1\",\r\n Layout4: \"Layout4\",\r\n};\r\n\r\nexport const LayoutAbbreviations = [\r\n \"Layout1\",\r\n \"Layout4\",\r\n];\r\nexport const LayoutAbbreviationsToRemove = [\r\n \"Layout4\",\r\n \"Layout1\",\r\n];\r\n\r\nexport const METADATA = {\r\n ALL: \"ALL\",\r\n LeftSide: \"L\", // used as side for shower grab bars\r\n RightSide: \"R\", // used as side for shower grab bars\r\n Inner: \"Inner\", // used for sinks & faucets\r\n Outer: \"Outer\", // used for sinks & faucets\r\n};\r\n\r\nexport const ShowerComboTubType = {\r\n bathtub_liner: \"bathtub_liner\",\r\n replacement_tub: \"replacement_tub\",\r\n walk_in_tub: \"walk_in_tub\",\r\n jetted_tub: \"jetted_tub\",\r\n};\r\n\r\nexport const CountsType = {\r\n allLayoutFeaturesCount: \"All\", // not used\r\n largeLayoutFeaturesCount: \"Large\",\r\n smallLayoutFeaturesCount: \"Small\",\r\n totalFeaturesCount: \"Total\" // not used\r\n};\r\n\r\nexport const BathTubType = {\r\n Custom60in: 'Custom60in',\r\n FreeStanding: 'BathTubFreeStanding'\r\n};\r\n\r\nexport const VanityTypes = {\r\n Complete: 'Complete',\r\n Custom: 'Custom'\r\n};\r\n\r\nexport const ShowerBodyType = {\r\n Glass: 0,\r\n Door: 1\r\n};\r\n\r\nexport const PartMenuType = {\r\n Simple: 0, // i.e. Toilet - doesn't have any sub-items\r\n Complex: 1, // i.e. Vanity - has sub-menu items, Sink, Faucet Mirror\r\n};\r\n\r\nexport function bathTubTypeToString(bathTypeType) {\r\n switch (bathTypeType) {\r\n case BathTubType.Custom60in:\r\n return 'Custom';\r\n case BathTubType.FreeStanding:\r\n return 'Complete';\r\n }\r\n}\r\nexport function bathTubStringToType(bathtubString) {\r\n switch (bathtubString) {\r\n case 'custom':\r\n return BathTubType.Custom60in;\r\n case 'complete':\r\n return BathTubType.FreeStanding;\r\n }\r\n}\r\n\r\nexport const vanityWizardFilters = [\"Size\", \"DoorStyle\", \"Material\", \"Color\"];\r\n\r\nexport const showerWizardFilters = [\"Material\", \"DuraBathColor\", \"SlabColor\", \"TileColor\", \"TilePattern\", \"AcrylicPattern\", \"AcrylicColor\"];\r\n\r\nexport const NotQCVanityDoorStylesFilters = [\"Centennial\", \"Hudson\", \"Northbrook\", \"Osage\", \"Quebec\", \"Riverside\", \"Villager\", \"Zurich\"];\r\n\r\nexport const COUNTERTOP_GROUP_BATHROOM = [\"vanity_countertop\", \"vanity_backsplash\"];\r\n\r\nexport const CABINET_GROUP_BATHROOM = [\"vanity_cabinet\", \"vanity_mirror\"];\r\n\r\nexport const HANDLES_GROUP_BATHROOM = [\"door_handle\", \"drawer_handle\"];\r\n\r\nexport const SHOWER_FLOOR_GROUP_BATHROOM = [\"shower_floor\", \"shower_curb\"];\r\n\r\nexport const CORNER_SHELVES_POSITIONS = [\"L1\",\"L2\",\"L3\",\"R1\",\"R2\",\"R3\"];\r\n\r\nexport const SIDE_POSITIONS = [\"L\",\"R\"];\r\n\r\nexport const PAN_POSITIONS = [\"L\",\"C\",\"R\"];\r\n","import invert from 'lodash/invert';\r\n\r\nimport {splitFeatureName} from \"../../../misc/utils\";\r\nimport DesignNavigationItem from \"../../visComponents/designNavigationItem\";\r\nimport {Part} from \"./part\";\r\nimport store from '../../../store';\r\nimport {LayoutAbbreviation, LayoutType, LayoutAbbreviationsToRemove, COUNTERTOP_GROUP} from \"./constants\";\r\nimport {getFeatureIsLocked} from \"../../../misc/helpers\";\r\n\r\n/**\r\n * Used for Complex parts such as Vanity, to perform some base functionality for related items\r\n */\r\nexport class IntermediatePart extends Part {\r\n\r\n constructor(isChild) {\r\n super(false, isChild);\r\n this.disabled = false;\r\n this.defaultDisabled = false; // used after reset click\r\n this.canBeDisabled = false;\r\n }\r\n\r\n /**\r\n * This will be called by the underlying vanity feature with a concrete instance of the part\r\n * @param dbFeature\r\n * @param part {Part}\r\n * @param setParent {boolean}\r\n * @param features\r\n */\r\n load_(dbFeature, part, setParent = true, features = 'features') {\r\n\r\n const featureList = features + \"List\";\r\n\r\n const {displayName} = dbFeature;\r\n let {featureName} = splitFeatureName(displayName);\r\n if (!featureName && dbFeature.groupName && dbFeature.displayName) {\r\n featureName = dbFeature.displayName.replace(dbFeature.groupName + \" - \", \"\")\r\n }\r\n // console.log('displayName:', displayName);\r\n\r\n if (setParent) {\r\n part.getParent = () => this;\r\n if (dbFeature.galleryImages) {\r\n const featured = dbFeature.galleryImages.find(galImage => galImage.featured);\r\n if (featured) {\r\n this.featuredImage = featured.url\r\n }\r\n dbFeature.galleryImages = dbFeature.galleryImages.sort((a, b) => b.default - a.default)\r\n }\r\n }\r\n\r\n if (!dbFeature.sharedFeatureName) {\r\n console.error(\"No sharedFeatureName property:\", dbFeature);\r\n if (!featureName) {\r\n return false\r\n }\r\n }\r\n\r\n part.partName = featureName;\r\n part.metaData = dbFeature.metaData || {};\r\n\r\n if (dbFeature.s3Bindings && dbFeature.s3Bindings.length) {\r\n dbFeature.s3Bindings = dbFeature.s3Bindings.filter(binding => binding.visualizer === \"Kitchen\")\r\n }\r\n\r\n part.dbFeature = dbFeature || {};\r\n if (!part.dbFeature.filterValueIDs) {\r\n part.dbFeature.filterValueIDs = {}\r\n }\r\n part.notAvailableInVisualizer = !dbFeature.s3Bindings || !dbFeature.s3Bindings.length;\r\n\r\n if (part.metaData.RoomLayout) {\r\n const roomLayout = part.metaData.RoomLayout;\r\n if (roomLayout.includes(LayoutAbbreviation.All)) {\r\n Object.keys(LayoutType).forEach(layoutName => {\r\n this[featureList][layoutName].push(part);\r\n })\r\n } else if (Array.isArray(roomLayout) && roomLayout.length) {\r\n roomLayout.forEach(roomLayoutAbbreviation => {\r\n const layoutName = invert(LayoutAbbreviation)[roomLayoutAbbreviation];\r\n if (layoutName) { // Prevent bad roomLayout Metadata\r\n this[featureList][layoutName].push(part);\r\n }\r\n });\r\n } else { // single value\r\n const layoutName = invert(LayoutAbbreviation)[roomLayout];\r\n if(layoutName) {\r\n this[featureList][layoutName].push(part);\r\n }\r\n }\r\n } if (part.notAvailableInVisualizer || !part.metaData.RoomLayout) {\r\n part.notAvailableInVisualizer = true;\r\n Object.keys(LayoutType).forEach(layoutName => {\r\n if(!this[featureList][layoutName].some(t => t.dbFeature.sharedFeatureName == part.dbFeature.sharedFeatureName)) {\r\n this[featureList][layoutName].push(part);\r\n }\r\n })\r\n }\r\n\r\n // Object.keys(LayoutType).forEach(layoutName => {\r\n // this[features+\"List\"][layoutName].push(part);\r\n // });\r\n\r\n this.loadFeatureCommon(part);\r\n\r\n return part\r\n }\r\n\r\n navigationSubItemsWithFilter(propName, propValue, featuresToCheck = this.features) {\r\n return featuresToCheck.filter((feature) => {\r\n return feature.matchesMetaForCondition(propName, propValue);\r\n }).map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n navigationSubItemsWithFilterMultipleConditions(arrayOfConditions, featuresToCheck = this.features) {\r\n // console.log('arrayOfConditions', arrayOfConditions);\r\n // console.log('featuresToCheck', featuresToCheck);\r\n return featuresToCheck.filter((feature) => {\r\n return feature.notAvailableInVisualizer || arrayOfConditions.every((conditionObject) => {\r\n const {propName, propValue} = conditionObject;\r\n return feature.matchesMetaForCondition(propName, propValue);\r\n });\r\n })\r\n }\r\n\r\n setDefault(layout, setNotInVisFeature = false) {\r\n this.setFeatureGroupDefault(layout, setNotInVisFeature)\r\n }\r\n\r\n setLayers(layout) {\r\n if (!this.disabled) {\r\n if (!this.activeFeature) {\r\n this.setDefault(layout);\r\n }\r\n if (this.activeFeature && !this.activeFeature.notAvailableInVisualizer) {\r\n this.setFeatureLayer(this.activeFeature, layout);\r\n if (Array.isArray(this.activeFeatureParts) && this.activeFeatureParts.length) {\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n this.setFeatureLayer(activeFeaturePart, layout);\r\n })\r\n }\r\n }\r\n if (this.placeholderFeature) {\r\n this.setFeatureLayer(this.placeholderFeature, layout);\r\n }\r\n if (this.shadowFeature) {\r\n this.setFeatureLayer(this.shadowFeature, layout);\r\n }\r\n } else {\r\n this.hideLayers();\r\n }\r\n }\r\n\r\n clickFromAllWalls(ignoreLocked) {\r\n if (this && this.dbFeature && this.dbFeature.sharedFeatureName) {\r\n console.log(`${this.partId}:`, this.dbFeature.sharedFeatureName);\r\n }\r\n this.handleClick(ignoreLocked, \"all_walls\");\r\n }\r\n\r\n /**\r\n * @param ignoreLocked {boolean} // false by the default, is used by wizard ONLY\r\n * @param clickFrom {string} // is used for countertop and cabinet switchers, and walls\r\n */\r\n handleClick(ignoreLocked = false, clickFrom = \"\") {\r\n const parent = this.getParent();\r\n if (clickFrom !== \"all_walls\") {\r\n const {activeQuoteIndex} = store.getState().quotesState;\r\n parent.firstClick[activeQuoteIndex] = true; // allow to show active item\r\n }\r\n const featureIsLocked = getFeatureIsLocked(this, ignoreLocked);\r\n if (featureIsLocked) {\r\n parent.activeLockedFeature = this;\r\n } else {\r\n if (parent.activeLockedFeature) {\r\n parent.activeLockedFeature = null;\r\n }\r\n this.featureClick();\r\n }\r\n }\r\n\r\n featureClick() {\r\n const parent = this.getParent();\r\n parent.placeholderChanged = true;\r\n if (this.notAvailableInVisualizer) {\r\n parent.activeNotInVisualizerFeature = this; // do not change the activeFeature (in order to keep the layer)\r\n } else if (parent.activeNotInVisualizerFeature) {\r\n parent.activeNotInVisualizerFeature = null; // remove it from other searches and so on\r\n parent.activeFeature = this;\r\n } else {\r\n parent.activeFeature = this;\r\n }\r\n this.featureClicked();\r\n }\r\n\r\n hideLayers() {\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.src = '';\r\n }\r\n if (Array.isArray(this.activeFeatureParts) && this.activeFeatureParts.length) {\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n if (activeFeaturePart && activeFeaturePart.layer) {\r\n activeFeaturePart.layer.src = '';\r\n }\r\n })\r\n }\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.src = '';\r\n }\r\n if (this.shadowFeature) {\r\n this.shadowFeature.layer.src = '';\r\n }\r\n }\r\n\r\n removeLayoutFromPartName(partName) {\r\n LayoutAbbreviationsToRemove.forEach(abbr => {\r\n const spaceWithLayoutName = \" \"+abbr;\r\n partName = partName.replace(spaceWithLayoutName + \" \", \" \"); // 1) replace \" Agra S Some edge name\" -> \" Agra Some edge name\"\r\n if (partName.slice(-spaceWithLayoutName.length) === spaceWithLayoutName) {\r\n partName = partName.substring(0, partName.length - spaceWithLayoutName.length); // 2) replace \" Agra Some edge name S\" -> \" Agra Some edge name\"\r\n }\r\n });\r\n partName = partName.replace(\" Backsplash\", \"\");\r\n return partName\r\n }\r\n\r\n removeCountertopFromPartName(partName) {\r\n partName = partName.replace(\"Countertop - \", \"\");\r\n return partName\r\n }\r\n\r\n removeBacksplashFromPartName(partName) {\r\n partName = partName.replace(\"Backsplash - \", \"\");\r\n return partName\r\n }\r\n\r\n removeCabinetLayoutFromPartName(partName) {\r\n const possibleLayouts = [\" Layout 1\",\" Layout 2\",\" Layout 3\",\" Layout 4\",\" Layout 5\",\" Layout 6\",\" Layout 7\",\" Layout 8\",\" 1\",\" 2\",\" 3\",\" 4\",\" 5\",\" 6\",\" 7\",\" 8\"];\r\n possibleLayouts.forEach(cabinetLayout => {\r\n partName = partName.replace(cabinetLayout,\"\")\r\n });\r\n return partName\r\n }\r\n\r\n removeEdgeFromPartName(partName) {\r\n const filterGroups = store.getState().filterState.filterGroups;\r\n const edgeFilterGroup = filterGroups.find(group => group.name === \"Edge\" || group.name === \"Edge Profile\");\r\n if (edgeFilterGroup && edgeFilterGroup.values && edgeFilterGroup.values.length) {\r\n const edgeFilterGroupValues = edgeFilterGroup.values.sort((a,b) => {\r\n return a.value && b.value && (b.value.length - a.value.length)\r\n }); // 1st should be \"Full Bullnose\", then simple \"Bullnose\"\r\n edgeFilterGroupValues.forEach((filterGroupValue) => { // arrayOf {id: 293, value: \"Eased\", displayText: \"Eased\", parent_id: null, icon: \"\", …}\r\n partName = partName.split(\" \"+filterGroupValue.value).join(\"\");\r\n });\r\n }\r\n return partName\r\n }\r\n\r\n getCountertopGroupsSplittedFeatureName = () => {\r\n if (this._countertopGroupsCustomDisplayName == null) {\r\n this._countertopGroupsCustomDisplayName = this.dbFeature.sharedFeatureName;\r\n if (!this._countertopGroupsCustomDisplayName) {\r\n this._countertopGroupsCustomDisplayName = this.partName || \"\";\r\n this._countertopGroupsCustomDisplayName = this.removeCabinetLayoutFromPartName(this._countertopGroupsCustomDisplayName); // remove 1 2\r\n this._countertopGroupsCustomDisplayName = this.removeLayoutFromPartName(this._countertopGroupsCustomDisplayName); // remove SP SPNI\r\n this._countertopGroupsCustomDisplayName = this.removeEdgeFromPartName(this._countertopGroupsCustomDisplayName); // remove Bullnose\r\n } else {\r\n this._countertopGroupsCustomDisplayName = this.removeLayoutFromPartName(this._countertopGroupsCustomDisplayName); // remove SP SPNI\r\n this._countertopGroupsCustomDisplayName = this._countertopGroupsCustomDisplayName.replace(\" PartN\", \"\");\r\n this._countertopGroupsCustomDisplayName = this.removeEdgeFromPartName(this._countertopGroupsCustomDisplayName); // remove Bullnose\r\n }\r\n if (this.partId === \"backsplash\" && this.removeBacksplashTypeFromPartName) {\r\n this._countertopGroupsCustomDisplayName = this.removeBacksplashTypeFromPartName(this._countertopGroupsCustomDisplayName);\r\n // this._countertopGroupsCustomDisplayName = this.removeCabinetLayoutFromPartName(this._countertopGroupsCustomDisplayName); // remove 1 2\r\n }\r\n }\r\n return this._countertopGroupsCustomDisplayName\r\n };\r\n\r\n getSplittedFeatureName = () => {\r\n const cabinetsGroup = [\"top_cabinet\", \"bottom_cabinet\", \"center_island_cabinet\"];\r\n if(this._customDisplayName == null) {\r\n this._customDisplayName = this.dbFeature.sharedFeatureName || this.partName;\r\n if (cabinetsGroup.includes(this.partId)) {\r\n this._customDisplayName = this.removeCabinetLayoutFromPartName(this._customDisplayName)\r\n .replace(/ Microwave/g, \"\")\r\n .replace(/ Hood/g, \"\")\r\n .replace(/ Layout/g, \"\")\r\n .replace(/ Part2/g, \"\")\r\n }\r\n this._customDisplayName = this.removeLayoutFromPartName(this._customDisplayName);\r\n this._customDisplayName = this.removeEdgeFromPartName(this._customDisplayName);\r\n this._customDisplayName = this.removeCountertopFromPartName(this._customDisplayName);\r\n this._customDisplayName = this.removeBacksplashFromPartName(this._customDisplayName);\r\n }\r\n return this._customDisplayName\r\n };\r\n\r\n getMatchingFeatureName = () => {\r\n return COUNTERTOP_GROUP.includes(this.partId)\r\n ? this.getCountertopGroupsSplittedFeatureName()\r\n : this.getSplittedFeatureName()\r\n };\r\n\r\n getModuleFeatureName = () => {\r\n // return this.partName.split(\" M_\")[0];\r\n return this.partName.split(\" M\")[0];\r\n };\r\n\r\n featureIsMatchingFilters(currentFeature, activeFilters, filters = []) {\r\n return filters.every(filter => {\r\n return activeFilters[filter.id]\r\n && currentFeature.dbFeature.filterValueIDs[filter.id]\r\n && currentFeature.dbFeature.filterValueIDs[filter.id].includes(activeFilters[filter.id][0])\r\n })\r\n }\r\n\r\n getActiveFeaturePartsAccordingToActiveFeature(fromFeature = this.activeFeature, activeFeatureConditions = []) {\r\n let activeFeatureParts = [];\r\n if (fromFeature && fromFeature.partNumber) {\r\n let activeFeaturePart;\r\n const name1 = fromFeature.getSplittedFeatureName();\r\n const arrayOfConditions = activeFeatureConditions.length\r\n ? activeFeatureConditions\r\n : this.getActiveFeatureConditions(fromFeature);\r\n activeFeatureParts = this.featuresParts.filter((feature) => name1 === feature.getSplittedFeatureName());\r\n if (activeFeatureParts.length) {\r\n activeFeaturePart = activeFeatureParts.find((feature) => {\r\n return feature.matchesMetaForArrayOfConditions(arrayOfConditions)\r\n });\r\n if (!activeFeaturePart) {\r\n activeFeaturePart = activeFeatureParts[0];\r\n }\r\n }\r\n activeFeatureParts = activeFeaturePart ? [activeFeaturePart] : [];\r\n activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n }\r\n return activeFeatureParts\r\n }\r\n\r\n checkIfFeaturePartIsMatching() {\r\n if (this.activeFeatureParts && this.activeFeatureParts.length) {\r\n const activeFeatureConditions = this.getActiveFeatureConditions();\r\n const name1 = this.activeFeature.getSplittedFeatureName();\r\n const activeFeaturePart = this.activeFeatureParts[0];\r\n if (!(activeFeaturePart.matchesMetaForArrayOfConditions(activeFeatureConditions)\r\n && name1 === activeFeaturePart.getSplittedFeatureName())) {\r\n this.activeFeatureParts = this.setActiveFeatureParts(this.activeFeature, activeFeatureConditions);\r\n }\r\n } else {\r\n this.activeFeatureParts = this.setActiveFeatureParts();\r\n }\r\n }\r\n\r\n}\r\n","//********* SQFT *********//\r\nimport * as types from \"./actionTypes\";\r\n\r\nexport const enableSquareFootage = (isSquareFootageEnabled) => ({\r\n type: types.ENABLE_SQUARE_FOOTAGE,\r\n payload: {isSquareFootageEnabled}\r\n});\r\n\r\nexport const setSquareFootageGroup = (SQFTGroup) => ({\r\n type: types.SET_SQUARE_FOOTAGE_GROUP,\r\n payload: {SQFTGroup}\r\n});\r\n\r\nexport const setSQFTGroup = (SQFTGroup) => ({\r\n type: types.SET_SQUARE_FOOTAGE_GROUP,\r\n payload: {SQFTGroup}\r\n});\r\n\r\nexport const setSQFTViewMode = (SQFTViewMode) => ({\r\n type: types.SET_SQFT_VIEW_MODE,\r\n payload: {SQFTViewMode}\r\n});\r\n\r\nexport const loadSQFT = () => ({\r\n type: types.LOAD_SQFT,\r\n payload: {sqftLoaded: true}\r\n});\r\n\r\nexport const updateSQFT = (sqftUpdateType) => ({\r\n type: types.UPDATE_SQFT,\r\n payload: {sqftUpdateType}\r\n});\r\n\r\nexport const updateSQFTCalculations = (updateCalculations) => ({\r\n type: types.UPDATE_SQFT_CALCULATIONS,\r\n payload: {updateCalculations}\r\n});\r\n\r\nexport const setSquareFeet = (squareFeet) => ({\r\n type: types.SET_SQFT_SQUARE_FEET,\r\n payload: {squareFeet}\r\n});\r\n\r\nexport const toggleChangeLayoutPopup = (changeLayoutPopupOpened = false, layoutToApply = \"\", applyLayoutOnSqft = false) => ({\r\n type: types.TOGGLE_CHANGE_LAYOUT_POPUP,\r\n payload: {changeLayoutPopupOpened, layoutToApply, applyLayoutOnSqft}\r\n});\r\n\r\nexport const sendLayoutChangeOnSqft = (setNewLayoutOnSqft) => ({\r\n type: types.SET_NEW_LAYOUT_ON_SQFT,\r\n payload: {setNewLayoutOnSqft}\r\n});\r\n\r\nexport const setSqftMeasureUnit = (measureUnit) => ({\r\n type: types.SET_SQFT_MEASURE_UNIT,\r\n payload: {measureUnit}\r\n});\r\n\r\nexport const changeSqftFeaturesPopup = (sqftFeaturesPopup) => ({\r\n type: types.CHANGE_SQFT_FEATURES_POPUP,\r\n payload: {sqftFeaturesPopup}\r\n});\r\n\r\nexport const setSqftFromFeature = (sqftFromFeature) => ({\r\n type: types.SQT_SQFT_FROM_FEATURE,\r\n payload: {sqftFromFeature}\r\n});\r\n\r\nexport const setSqftCabinetsGlb = (cabinetsGlb) => ({\r\n type: types.SET_CABINETS_GLB,\r\n payload: {cabinetsGlb}\r\n});\r\n\r\nexport const setCabinetsARBlobUrl = (cabinetsARBlobUrl) => ({\r\n type: types.SET_CABINETS_AR_BLOB_URL,\r\n payload: {cabinetsARBlobUrl}\r\n});\r\n\r\nexport const setAPIErrorMessage = (apiErrorMessage) => ({\r\n type: types.SET_API_ERROR_MESSAGE,\r\n payload: {apiErrorMessage}\r\n});\r\n","import {baseNewImagesPath, baseDashboardImagesPath} from \"../../assets\";\r\n\r\nexport const bathTubThumbnail = `${baseNewImagesPath}images/bv_icons_new/Icons_Bathtub.svg`;\r\nexport const ceilingThumbnail = `${baseNewImagesPath}images/bv_icons_new/Icons_Ceiling.svg`;\r\nexport const floorThumbnail = `${baseNewImagesPath}images/bv_icons_new/Icons_Floor.svg`;\r\nexport const showerThumbnail = `${baseNewImagesPath}images/bv_icons_new/shower_icon_new.svg`;\r\nexport const showerAccessoriesThumbnail = `${baseNewImagesPath}images/bv_icons_new/accesories.svg`;\r\nexport const showerOLDThumbnail = `${baseNewImagesPath}images/bv_icons_new/Icons_Shower.svg`;\r\nexport const showerTubComboThumbnail = `${baseNewImagesPath}images/bv_icons_new/shower-tub_icon.svg`;\r\nexport const custom60in30X8Shower = `${baseNewImagesPath}images/bv_icons_new/custom-a-60in-30x8.svg`;\r\nexport const custom30in30X8Shower = `${baseNewImagesPath}images/bv_icons_new/custom-a-30in-30x8.svg`;\r\nexport const custom60in15X4Shower = `${baseNewImagesPath}images/bv_icons_new/custom-b-60in-15x4.svg`;\r\nexport const custom30in15X4Shower = `${baseNewImagesPath}images/bv_icons_new/custom-b-30in-15x4.svg`;\r\nexport const custom60inPonyShower = `${baseNewImagesPath}images/bv_icons_new/custom-c-60in-pony.svg`;\r\nexport const custom30inPonyShower = `${baseNewImagesPath}images/bv_icons_new/custom-c-30in-pony.svg`;\r\nexport const toiletThumbnail = `${baseNewImagesPath}images/bv_icons_new/toilet_backend.svg`;\r\nexport const vanityThumbnail = `${baseNewImagesPath}images/bv_icons_new/Icons_Vanity-05.svg`;\r\nexport const wallsThumbnail = `${baseNewImagesPath}images/bv_icons_new/Icons_Wall.svg`;\r\nexport const windowThumbnail = `${baseNewImagesPath}images/bathroom-icons/Window_Coverings.svg`;\r\nexport const largeLayout = `${baseNewImagesPath}images/bv-assets/thumbnail-config01.png`;\r\nexport const smallLayout = `${baseNewImagesPath}images/bv-assets/thumbnail-config02.png`;\r\nexport const largeLayoutShadow = `${baseNewImagesPath}images/bv-assets/Lg-Global-Shadow.png`;\r\nexport const smallLayoutShadow = `${baseNewImagesPath}images/bv-assets/Sm-Global-Shadow.png`;\r\nexport const shower30inWallShadow = `${baseNewImagesPath}images/bv-assets/Lg-Ex R-Shadow Overlay 30X45[For=LG-Ex-R].png`;\r\nexport const floorPlaceholder = `${baseNewImagesPath}images/bv-assets/placeholders/All-Floor-Placeholder.png`;\r\nexport const ceilingPlaceholder = `${baseNewImagesPath}images/bv-assets/placeholders/All-Ceiling-Placeholder.png`;\r\n\r\nexport const showerWallSmallRoomPlaceholder = `${baseNewImagesPath}images/bv-assets/placeholders/SM-Shower Wall-Placeholder[For=Shower=(Custom_Kit1_Kit3_Steam)=ShowerSize=30in].png`;\r\nexport const showerWallSmallRoomPlaceholder60in = `${baseNewImagesPath}images/bv-assets/placeholders/SM-Shower Wall-Placeholder[For=Shower=(Custom_Kit1_Kit3_Steam)=ShowerSize=60in].png`;\r\nexport const showerFloorSmallRoomPlaceholder = `${baseNewImagesPath}images/bv-assets/placeholders/SM-ShowerFloor-Placeholder[For=Shower=(Custom)=ShowerSize=30in].png`;\r\nexport const showerFloorSmallRoomPlaceholder60in = `${baseNewImagesPath}images/bv-assets/placeholders/SM-ShowerFloor-Placeholder[For=Shower=(Custom)=ShowerSize=60in].png`;\r\nexport const showerPanSmallRoomPlaceholder = `${baseNewImagesPath}images/bv-assets/placeholders/SM-ShowerPan-Placeholder[For=Shower=(Custom)=ShowerSize=30in].png`;\r\nexport const showerPanSmallRoomPlaceholder60in = `${baseNewImagesPath}images/bv-assets/placeholders/SM-ShowerPan-Placeholder[For=Shower=(Custom)=ShowerSize=60in].png`;\r\n\r\nexport const LayoutThumbnails = {\r\n Large: largeLayout,\r\n Small: smallLayout,\r\n};\r\n\r\nexport const homePage = {\r\n vanity_cabinet: `${baseNewImagesPath}images/home/section-images/vanity-bases.jpg`,\r\n vanity: `${baseNewImagesPath}images/home/section-images/vanity-bases.jpg`,\r\n vanity_countertop: `${baseNewImagesPath}images/home/section-images/countertops.jpg`,\r\n vanity_sink: `${baseNewImagesPath}images/home/section-images/sinks.jpg`,\r\n vanity_faucet: `${baseNewImagesPath}images/home/section-images/faucets.jpg`,\r\n vanity_mirror: `${baseNewImagesPath}images/home/section-images/mirrors.jpg`,\r\n vanity_backsplash: `${baseNewImagesPath}images/home/section-images/backsplash.png`,\r\n vanity_handle: `${baseNewImagesPath}images/home/section-images/handle.png`,\r\n shower_body: `${baseNewImagesPath}images/home/section-images/shower-glass.jpg`,\r\n shower_fixture: `${baseNewImagesPath}images/home/section-images/shower-fixtures.jpg`,\r\n shower_interior_wall: `${baseNewImagesPath}images/home/section-images/shower-wall.jpg`,\r\n shower_interior_wall_accent: `${baseNewImagesPath}images/home/section-images/shower-accent.png`,\r\n shower_floor: `${baseNewImagesPath}images/home/section-images/shower-flooring.jpg`,\r\n shower_door: `${baseNewImagesPath}images/home/section-images/shower-door.png`,\r\n shower_pan: `${baseNewImagesPath}images/home/section-images/shower-pan.png`,\r\n shower_pan_combo: `${baseNewImagesPath}images/home/section-images/shower-pan.png`,\r\n shower_door_handle: `${baseNewImagesPath}images/home/section-images/shower-handles.jpg`,\r\n threshold: `${baseNewImagesPath}images/home/section-images/threshold.png`,\r\n bathtub: `${baseNewImagesPath}images/home/section-images/bathtubs.jpg`,\r\n bathtub_fixture: `${baseNewImagesPath}images/home/section-images/bathtub-fixtures.jpg`,\r\n toilet: `${baseNewImagesPath}images/home/section-images/toilets.jpg`,\r\n floor: `${baseNewImagesPath}images/home/section-images/flooring.jpg`,\r\n ceiling: `${baseNewImagesPath}images/home/section-images/ceilings.jpg`,\r\n window: `${baseNewImagesPath}images/home/section-images/window-coverings.jpg`,\r\n lighting: `${baseNewImagesPath}images/home/section-images/lighting-fixtures.jpg`,\r\n towel: `${baseNewImagesPath}images/home/section-images/towel-racks.jpg`,\r\n wall_a: `${baseNewImagesPath}images/home/section-images/walls.jpg`,\r\n wall_b: `${baseNewImagesPath}images/home/section-images/walls.jpg`,\r\n wall_c: `${baseNewImagesPath}images/home/section-images/walls.jpg`,\r\n left_shower_wall: `${baseNewImagesPath}images/home/section-images/walls.jpg`,\r\n right_shower_wall: `${baseNewImagesPath}images/home/section-images/walls.jpg`,\r\n accent_wall: `${baseNewImagesPath}images/home/section-images/walls.jpg`,\r\n pony_wall: `${baseNewImagesPath}images/home/section-images/walls.jpg`,\r\n walls: `${baseNewImagesPath}images/home/section-images/walls.jpg`,\r\n wall: `${baseNewImagesPath}images/home/section-images/walls.jpg`,\r\n jetted_tub: `${baseNewImagesPath}images/home/section-images/jetted-tub.png`,\r\n replacement_tub: `${baseNewImagesPath}images/home/section-images/replacement-tub.png`,\r\n bathtub_liner: `${baseNewImagesPath}images/home/section-images/tub-liner.png`,\r\n walk_in_tub: `${baseNewImagesPath}images/home/section-images/walk-in-tub.png`,\r\n //kitchen\r\n dishwasher: `${baseNewImagesPath}images/home/section-images/dishwasher.png`,\r\n hood: `${baseNewImagesPath}images/home/section-images/hood.png`,\r\n fridge: `${baseNewImagesPath}images/home/section-images/fridge.png`,\r\n range: `${baseNewImagesPath}images/home/section-images/range.png`,\r\n microwave: `${baseNewImagesPath}images/home/section-images/microwave.png`,\r\n crown_molding: `${baseNewImagesPath}images/home/section-images/crown-molding.png`,\r\n left_wall: `${baseNewImagesPath}images/home/section-images/walls.jpg`,\r\n right_wall: `${baseNewImagesPath}images/home/section-images/walls.jpg`,\r\n popout_wall: `${baseNewImagesPath}images/home/section-images/walls.jpg`,\r\n backsplash: `${baseNewImagesPath}images/home/section-images/backsplash.png`,\r\n sink: `${baseNewImagesPath}images/home/section-images/sinks.jpg`,\r\n faucet: `${baseNewImagesPath}images/home/section-images/faucets.jpg`,\r\n countertop: `${baseNewImagesPath}images/home/section-images/countertops.jpg`,\r\n center_island_countertop: `${baseNewImagesPath}images/home/section-images/countertops.jpg`,\r\n center_island_sink: `${baseNewImagesPath}images/home/section-images/sinks.jpg`,\r\n center_island_faucet: `${baseNewImagesPath}images/home/section-images/faucets.jpg`,\r\n center_island_cabinet: `${baseNewImagesPath}images/home/section-images/vanity-bases.jpg`,\r\n center_island_handle: `${baseNewImagesPath}images/home/section-images/handle-kitchen.png`,\r\n center_island_chairs: `${baseNewImagesPath}images/home/section-images/chairs.png`,\r\n top_handle: `${baseNewImagesPath}images/home/section-images/handle-kitchen.png`,\r\n bottom_handle: `${baseNewImagesPath}images/home/section-images/handle-kitchen.png`,\r\n top_cabinet: `${baseNewImagesPath}images/home/section-images/icon-cabinet-upper.png`,\r\n bottom_cabinet: `${baseNewImagesPath}images/home/section-images/icon-cabinet-lower.png`,\r\n cutout: `${baseNewImagesPath}images/home/section-images/cutout.png`,\r\n cutouts: `${baseNewImagesPath}images/home/section-images/cutout.png`,\r\n edge_profile: `${baseNewImagesPath}images/home/section-images/edge.png`,\r\n edge_profiles: `${baseNewImagesPath}images/home/section-images/edge.png`,\r\n edge: `${baseNewImagesPath}images/home/section-images/edge.png`,\r\n center_island_edge: `${baseNewImagesPath}images/home/section-images/edge.png`,\r\n room: `${baseNewImagesPath}images/home/section-images/room.png`,\r\n kitchen_floor: `${baseNewImagesPath}images/home/section-images/flooring.jpg`,\r\n walls_ceiling: `${baseNewImagesPath}images/home/section-images/ceilings.jpg`,\r\n};\r\n\r\nexport const shareImage = {\r\n Bathroom: \"https://qc-cdn.s3.amazonaws.com/social-networks/BathRoomVisualizer_Facebook_QC.jpeg\",\r\n bvLook: \"https://qc-cdn.s3.amazonaws.com/social-networks/BathRoomVisualizer_Facebook_Lixil.jpg\",\r\n Kitchen: \"https://s3.amazonaws.com/qc-cdn/fabricator-presets-screenshots/cd49f0acc72e40f1a912830cf0385b83.png\"\r\n};\r\nexport const shareImageRebath = \"https://qc-cdn.s3.amazonaws.com/social-networks/BathRoomVisualizer_Facebook_ReBath.jpeg\";\r\n\r\nconst normalizeIconFileName = (featureGroupName) => {\r\n return ((featureGroupName || ''))\r\n .toLowerCase()\r\n .replace(/\\s/g, '-')\r\n .replace(\".svg\", \"\") + '.svg';\r\n};\r\n\r\nconst featureGroupNameToIcon = {\r\n '10 year sealer': 'sealer.svg',\r\n 'cabinet': 'cabinets.svg',\r\n 'top mount sink cutout': 'topmount-sink-cutout.svg',\r\n 'under mount sink cutout': 'undermount-sink-cutout.svg',\r\n 'counter top removal': 'countertop-removal.svg',\r\n 'cooktop cutout': 'range-top-cutout.svg',\r\n 'cutout': 'cutouts.svg',\r\n 'faucet': 'faucets.svg',\r\n 'floor': 'flooring.svg',\r\n 'shower-walls': 'shower-wall.svg',\r\n 'shower walls': 'shower-wall.svg',\r\n 'fixture': 'shower-fixture.svg',\r\n 'range-hood-x': 'range-hood.svg',\r\n 'range-hood-z': 'range-hood.svg',\r\n 'refridgerator': 'refrigerator.svg',\r\n 'removal': 'countertop-removal.svg',\r\n 'room(s) installed': 'room.svg',\r\n 'sink': 'sinks.svg',\r\n 'backsplash-thickness': 'slabs.svg',\r\n 'backsplash thickness': 'slabs.svg',\r\n 'edge': 'edge-profile.svg',\r\n 'island countertop': 'center-island-countertop.svg',\r\n 'hook bag': 'garage-hook.svg',\r\n 'slatwall': 'slat_wall.svg',\r\n 'overhead rack': 'overhead_rack.svg',\r\n 'cabinet leg': 'cabinet_leg.svg',\r\n};\r\n\r\nexport function getFeatureGroupIconURL(featureGroupName) {\r\n const name = ((featureGroupName || '')).toLowerCase();\r\n return (name in featureGroupNameToIcon)\r\n ? baseDashboardImagesPath + featureGroupNameToIcon[name]\r\n : baseDashboardImagesPath + normalizeIconFileName(name);\r\n}\r\n\r\nexport function getFeatureGroupIconStyles(featureGroup, activeTheme) {\r\n let\r\n backgroundImage = \"\",\r\n backgroundSize = \"150%\",\r\n backgroundPosition = \"\";\r\n\r\n if (!featureGroup.customImageUrl) {\r\n backgroundImage = getFeatureGroupIconURL(featureGroup.partName, activeTheme);\r\n } else {\r\n backgroundImage = featureGroup.customImageUrl;\r\n if (featureGroup.customImageUrl.includes(\"backsplash-new\")) {\r\n backgroundSize = \"80%\";\r\n backgroundPosition = \"left 25% center\";\r\n } else if (featureGroup.customImageUrl.includes(\"enabled/countertop.svg\")) {\r\n backgroundSize = \"\" // auto\r\n }\r\n }\r\n if (activeTheme === \"caes\" || activeTheme === \"moderno\" || activeTheme === \"as\"|| activeTheme === \"nhance\") {\r\n backgroundImage = getDashboardThemeIcon(backgroundImage, activeTheme);\r\n }\r\n if (backgroundImage.includes(\"enabled/top-cabinet.svg\")) {\r\n backgroundSize = \"60%\"\r\n } else if (backgroundImage.includes(\"enabled/bottom-cabinet.svg\")) {\r\n backgroundSize = \"80%\"\r\n } else if (backgroundImage.includes(\"enabled/slabs.svg\")) {\r\n backgroundSize = \"90%\"\r\n } else if (backgroundImage.includes(\"enabled/center-island-countertop.svg\")) {\r\n backgroundSize = \"95%\"\r\n } else if (backgroundImage.includes(\"enabled/garage-hook.svg\")) {\r\n backgroundSize = \"65%\"\r\n }\r\n switch (featureGroup.partId) {\r\n case \"cabinet_leg\":\r\n case \"hook_bag\":\r\n case \"overhead_rack\":\r\n case \"slat_wall\":\r\n backgroundSize = null; // we set it in scss\r\n break;\r\n default:\r\n break;\r\n }\r\n return {\r\n backgroundImage: `url(${backgroundImage})`,\r\n backgroundSize,\r\n backgroundPosition,\r\n }\r\n}\r\n\r\nexport function getDashboardThemeIcon(backgroundImage, activeTheme) {\r\n const imageSplitted = backgroundImage.split(\"enabled/\");\r\n if (imageSplitted[1]) {\r\n backgroundImage = `${baseNewImagesPath}images-${activeTheme}/dashboard-icons/${imageSplitted[1]}`\r\n }\r\n return backgroundImage\r\n}\r\n\r\n\r\n","import flatMap from \"lodash/flatMap\";\r\nimport lastIndexOf from \"lodash/lastIndexOf\";\r\nimport trim from \"lodash/trim\";\r\n\r\nimport JsonApi from \"./jsonApi\";\r\nimport store from \"../store\";\r\nimport {\r\n capitalizeFirstLetters,\r\n getQuotePriceWithTaxes,\r\n getTotalPrice,\r\n} from \"../misc/helpers\";\r\nimport {\r\n setJobId,\r\n setDefaultInstallations,\r\n setFabricatorData,\r\n loadFilters,\r\n setStonePricing,\r\n setBathroomVisualizerPresets,\r\n setProjectDocumentsIds,\r\n loadMobileNav,\r\n setFabricatorTaxes, setLoadedPresets, toggleUseFabricatorCostPrices\r\n} from \"../actions/actionFunctions\";\r\n\r\nimport {renderErrorPopup} from \"./api-popups\";\r\nimport {loaderDisable} from \"../bvcomponents/ui/loaderView\";\r\nimport {QuoteRequestType} from \"../bvcomponents/visComponents/constants\";\r\nimport * as actionTypes from '../actions/actionTypes';\r\nimport Config, {getCommonVisualizerType, IS_OFFLINE_MODE, IS_QKB_UI} from \"../config\";\r\nimport {setFabricatorSubscriptions} from \"../actions/initialFlowFunctions\";\r\nimport {setDiscountSections} from \"../actions/priceWorksheetActions\";\r\nimport {getCurrentReceipt, setReceiptUrl} from \"../actions/printFunctions\";\r\nimport {getEmployees} from \"./user-api\";\r\n// import {getParsedLookUrl} from \"../bvcomponents/look/lookNavigation/lookFunctions\";\r\nimport {setWizardList} from \"../actions/wizardFunctions\";\r\nimport {setAllFeaturesLoaded} from \"../actions/serverFunctions\";\r\nimport {updatePresetsArray} from \"../misc/presetsFunctions\";\r\nimport {getCompressedCartItem} from \"../misc/backendFunctions\";\r\nimport {updateCurrentQuote} from \"../misc/quotesFunctions\";\r\nimport {getParsedWizardList} from \"../bvcomponents/look/lookNavigation/lookMain/lookWizard/lookWizardFunctions2\";\r\nimport {setMarkUpLogic} from \"../actions/shoppingCartFunctions\";\r\nimport {parseMarkUp} from \"../misc/priceFunctions\";\r\nimport {getMarkUpForFeatures} from \"./features-api\";\r\nimport {setResponseFeaturesMarkUp} from \"../misc/markUpFunctions\";\r\nimport {shouldUseContractSigning} from \"../bvcomponents/popups/contractSign/contractsFunctions\";\r\nimport {\r\n getCustomDepositAmount,\r\n getPriceWorkSheetSaveValues,\r\n isSaveOnlyDiscount\r\n} from \"../bvcomponents/priceWorksheet/discountFunctions\";\r\n\r\n\r\nexport const getSaveQuoteFastData = async (forTempSave = false) => {\r\n const state = store.getState();\r\n const {userState, quotesState, instState, serverState, priceWorksheetState, cartState, printState,\r\n contractSigningState, fabricatorState} = state;\r\n let needToRevertBackCostPrices = fabricatorState.settings.useFabricatorCostPrices;\r\n if (needToRevertBackCostPrices) {\r\n store.dispatch(toggleUseFabricatorCostPrices(false)); // always use retail prices\r\n }\r\n const updatedQuotes = await updateCurrentQuote();\r\n const totalPrice = getTotalPrice();\r\n const grandTotal = getQuotePriceWithTaxes(totalPrice);\r\n const records = updatedQuotes.map((quoteObject, quoteIndex) => {\r\n let record = Object.assign({}, quoteObject);\r\n record.bvImage = record.staticCanvasImage || record.bvImage;\r\n let recordData = Object.assign({}, quoteObject.data, {\r\n activeQuoteIndex: quotesState.activeQuoteIndex,\r\n contractSigningValues: contractSigningState.pagesCustomFieldsValue,\r\n contractsValues: contractSigningState.contractsValues,\r\n savedInvoiceNumberOfPages: contractSigningState.savedInvoiceNumberOfPages,\r\n needToUpdateContract: contractSigningState.needToUpdateContract,\r\n receiptSignature: printState.receiptSignature,\r\n priceWorkSheetLogic: getPriceWorkSheetSaveValues(priceWorksheetState),\r\n })\r\n record.data = forTempSave ? recordData : JSON.stringify(recordData);\r\n record.sqFtCalcImage = quoteObject.sqFtCalcData ? quoteObject.sqFtCalcData.canvasImage : null;\r\n record.sFtCalcDataJson = quoteObject.sqFtCalcData ? JSON.stringify(\r\n Object.assign({}, quoteObject.sqFtCalcData, {\r\n canvasImage: undefined // remove canvasImage as we don't need to pass it twice\r\n })\r\n ) : null;\r\n delete record.sqFtCalcData;\r\n delete record.quoteId;\r\n const recordCartItems = [...cartState.cartItems.filter(ci => ci.cartFeature && ci.cartFeature.dbFeature && (ci.currentQuote === quoteIndex))]\r\n // record.cartItems = recordCartItems; // why do we need it here ??? that doesnt make any sense\r\n record.features = recordCartItems.map(ci => getCompressedCartItem(ci));\r\n if (forTempSave) {\r\n delete record.bvImage\r\n }\r\n return record\r\n });\r\n const discountSections = [...priceWorksheetState.discountSections.map(discountSection => Object.assign({}, discountSection))]\r\n .filter(discountSection => {\r\n discountSection.discounts = [...discountSection.discounts]\r\n .filter(discount => discount.selected)\r\n .map(discount => Object.assign({}, discount, { oldDeleted: undefined }));\r\n return discountSection.discounts.some(discount => discount.selected);\r\n });\r\n const total = {\r\n materialCost: totalPrice.materialPrice,\r\n installationCost: totalPrice.installationPrice,\r\n installationTaxes: totalPrice.installationTaxes, // installation tax amount\r\n materialTaxes: totalPrice.materialTaxes, // material tax amount\r\n priceTaxes: totalPrice.priceTaxes, // all tax amount\r\n totalWithTaxes: getQuotePriceWithTaxes(totalPrice),\r\n customDeposit: getCustomDepositAmount(priceWorksheetState.discountSections, grandTotal),\r\n }\r\n if (needToRevertBackCostPrices) {\r\n store.dispatch(toggleUseFabricatorCostPrices(true)); // revert back\r\n }\r\n return {\r\n jobId: document.kvConfig.jobId || serverState.jobId,\r\n fromBV: true,\r\n fabricatorId: document.kvConfig.userId,\r\n notes: [],\r\n documents: [],\r\n employeeId: +userState.userInfo.employeeId,\r\n shareUrl: serverState.shareUrl,\r\n discountSections,\r\n installations: flatMap(instState.instList, i => i.services.filter(service => service.selected)),\r\n subId: document.subId && document.subId.toString ? document.subId.toString() : null,\r\n total,\r\n records\r\n };\r\n};\r\n\r\nexport const saveQuoteFast = async () => {\r\n if (document.kvConfig.canSaveQuote === false || document.kvConfig.devMode || window.postMessageIsExecuting) {\r\n return null;\r\n }\r\n const savedFastData = await getSaveQuoteFastData();\r\n //console.log(\"save quote fast request\", savedFastData);\r\n return JsonApi.saveQuoteFast(savedFastData)\r\n};\r\n\r\n/**\r\n * Saves the quote\r\n * @param submit {boolean}\r\n * @param yesNoConsultationRequest {boolean}\r\n * @param quoteRequestType {string}\r\n * @param fromCheckOutPage {boolean}\r\n * @param assignQuotePopupCustomer {object}\r\n * @param assignQuotePopupEmployee {object}\r\n * @param showContractSignOnError {boolean}\r\n * @param showReceipt {boolean}\r\n * @return {*}\r\n */\r\nexport const saveQuote = async ({\r\n submit,\r\n yesNoConsultationRequest = false,\r\n quoteRequestType = QuoteRequestType.RegularDesign,\r\n fromCheckOutPage = false,\r\n assignQuotePopupCustomer = null,\r\n assignQuotePopupEmployee = null,\r\n showContractSignOnError = false,\r\n showReceipt = true,\r\n }) => {\r\n if (document.kvConfig.canSaveQuote === false) {\r\n return null;\r\n }\r\n const formData = new FormData();\r\n const state = store.getState();\r\n const {userState, serverState, fabricatorState, cartState, contractSigningState, unlockCalculationsState} = state;\r\n const {fabricatorTaxes} = fabricatorState;\r\n const fabricatorSettings = fabricatorState.settings;\r\n let needToRevertBackCostPrices = fabricatorSettings.useFabricatorCostPrices;\r\n if (needToRevertBackCostPrices) {\r\n store.dispatch(toggleUseFabricatorCostPrices(false)); // always use retail prices\r\n }\r\n const savedFastData = await getSaveQuoteFastData();\r\n if (assignQuotePopupEmployee) {\r\n savedFastData.employeeId = assignQuotePopupEmployee.id;\r\n }\r\n const sendConsumerEmail = serverState.agreeEmailCheckbox && (!fabricatorSettings.sureTax || userState.isPhoneNumberValidated);\r\n const data = {\r\n ...savedFastData,\r\n yesNoConsultationRequest,\r\n submit,\r\n fromCheckOutPage,\r\n sendConsumerEmail,\r\n customerEmail: (assignQuotePopupCustomer ? assignQuotePopupCustomer.email : null) || userState.email || userState.userInfo.email,\r\n salesPerson: assignQuotePopupEmployee ? assignQuotePopupEmployee.fullName : userState.userInfo.salesPersonFullName,\r\n salesPersonEmail: userState.userInfo.salesPersonEmail,\r\n leadOriginatorId: (window.salesPerson ? window.salesPerson.rawVal / ( Math.floor(Math.PI * 1000)) : 0),\r\n postalCode: userState.userInfo.postal,\r\n isNewUser: !(document.kvConfig.jobId || serverState.jobId),\r\n state: cartState.state,\r\n fromTool: getCommonVisualizerType() === \"kitchen\"\r\n ? document.kvConfig.toolVersion === 5 || document.kvConfig.toolVersion === 6 ? \"KV5\" : \"KV4\"\r\n : document.kvConfig.toolVersion === 5 || document.kvConfig.toolVersion === 6 ? \"BV5\" :\"BV\",\r\n toolVersion: document.kvConfig.toolVersion,\r\n visualizerType: capitalizeFirstLetters(getCommonVisualizerType()),\r\n navigationType: document.kvConfig.navigationType,\r\n quoteRequestType,\r\n currency: fabricatorSettings.currency,\r\n installationTaxesRate: (fabricatorTaxes && fabricatorTaxes.laborRate) || 0,\r\n materialTaxesRate: (fabricatorTaxes && fabricatorTaxes.materialRate) || 0,\r\n notes: [],\r\n fromDashboard: document.kvConfig.isBackend,\r\n callFabricator: document.kvConfig.callFabricatorOnSave || false,\r\n language: serverState.language,\r\n documents: serverState.documents.filter(doc => !doc.uploaded).map((d) => {\r\n return {\r\n documentId: d.documentId || 0, // database ID\r\n name: d.name,\r\n text: d.text,\r\n created: d.created,\r\n uid: d.uid,\r\n fileContent: Config.kioskStandAlone ? d.file.dataUri : null\r\n };\r\n }),\r\n markUpLogic: JSON.stringify(cartState.markUpLogic),\r\n };\r\n document.kvConfig.callFabricatorOnSave = false;\r\n\r\n if (Config.isDevMode()) {\r\n console.log(\"saveQuote request data:\", data);\r\n }\r\n\r\n serverState.documents.forEach(doc => {\r\n formData.append(\"files\", doc.file, doc.name);\r\n });\r\n\r\n formData.append('json', JSON.stringify(data));\r\n\r\n let employeeSelected = null;\r\n if (data.employeeId) {\r\n const employeesList = userState.employeesListReceived\r\n ? userState.employeesList\r\n : await getEmployees(false) || []; // just in case, we should never reach here, because requests are in both user popups\r\n employeeSelected = employeesList.find(emp => +emp.id === data.employeeId);\r\n }\r\n let receipt = null, receiptCost = null;\r\n if (!document.kvConfig.visualizerOnly) {\r\n const pdfReceipt = await getCurrentReceipt(assignQuotePopupCustomer, employeeSelected);\r\n receipt = await pdfReceipt.toBlob();\r\n formData.append(\"receipt\", receipt);\r\n }\r\n if (needToRevertBackCostPrices) {\r\n store.dispatch(toggleUseFabricatorCostPrices(true)); // revert back\r\n const pdfReceipt2 = await getCurrentReceipt(assignQuotePopupCustomer, employeeSelected);\r\n receiptCost = await pdfReceipt2.toBlob();\r\n formData.append(\"receiptCost\", receiptCost);\r\n }\r\n\r\n return JsonApi.saveQuote(document.kvConfig.kioskMode ? data : formData)\r\n .then(async (response) => {\r\n const responseData = typeof response.data === 'object' ? response.data : JSON.parse(response.data);\r\n store.dispatch(setJobId(responseData.jobId));\r\n if (responseData.documents && responseData.documents.length) {\r\n store.dispatch(setProjectDocumentsIds(responseData.documents));\r\n }\r\n\r\n const showContractSignPopup = shouldUseContractSigning(fabricatorSettings, contractSigningState.contractsList);\r\n\r\n const showLeadCaptureShoppingCart = fabricatorSettings.leadCaptureShoppingCart && !unlockCalculationsState.unlockCalculationsTutorialIsFinished;\r\n const showDepositPopup = fabricatorSettings.enableDeposit && (!fabricatorSettings.leadCaptureShoppingCart || unlockCalculationsState.unlockCalculationsTutorialIsFinished)\r\n\r\n let receiptUrl = \"\";\r\n if (receipt) {\r\n const pdfReceipt = await getCurrentReceipt(assignQuotePopupCustomer, employeeSelected);\r\n receipt = await pdfReceipt.toBlob();\r\n receiptUrl = URL.createObjectURL(receipt);\r\n }\r\n\r\n if (receipt && showReceipt && !showDepositPopup && !showLeadCaptureShoppingCart\r\n && (!showContractSignPopup || contractSigningState.signedDocumentUrl) && !fabricatorSettings.hasPaymentGateway) {\r\n window.open(receiptUrl, \"_blank\");\r\n responseData.receiptPrinted = true;\r\n }\r\n store.dispatch(setReceiptUrl(receiptUrl)); // always remember the URL (in case it is needed)\r\n\r\n responseData.total = data.total;\r\n\r\n return responseData;\r\n })\r\n .catch(error => {\r\n const retryFunction = saveQuote.bind(this, {\r\n submit,\r\n yesNoConsultationRequest,\r\n quoteRequestType,\r\n fromCheckOutPage,\r\n assignQuotePopupCustomer,\r\n assignQuotePopupEmployee,\r\n });\r\n renderErrorPopup(\"Server \"+new Error(error), \"\", retryFunction, showContractSignOnError);\r\n loaderDisable();\r\n throw new Error(error);\r\n })\r\n};\r\n\r\nexport const loadFiltersOnly = async () => {\r\n const response = await JsonApi.getFilterGroups();\r\n if (response && Array.isArray(response.data)) {\r\n store.dispatch(loadFilters(response.data));\r\n }\r\n return Promise.resolve()\r\n}\r\n\r\nexport const getBathroomVisualizerData = (featuresCount = 30, loadVisualizerOnly = false, forVisualizer) => {\r\n const featuresToReceive = IS_OFFLINE_MODE ? 100000 : featuresCount;\r\n return JsonApi.getBathroomVisualizerData(featuresToReceive, forVisualizer)\r\n .then(responseData => {\r\n // console.log('responseData', responseData.data);\r\n if (!responseData.data || responseData.data.error) {\r\n const errorMessage = !responseData.data ? \"No response data received\" : responseData.data.error;\r\n renderErrorPopup(\"Server error: \"+errorMessage);\r\n loaderDisable();\r\n throw new Error(errorMessage);\r\n } else {\r\n if (!loadVisualizerOnly) {\r\n store.dispatch(loadFilters(responseData.data.filterGroups || []));\r\n // store.dispatch(setFabricatorData(responseData.data.fabricatorData)); // we set it in the subscriptions response\r\n store.dispatch(setDefaultInstallations(responseData.data.installations));\r\n }\r\n store.dispatch(setStonePricing(responseData.data.stonePricing));\r\n if (responseData.data.defaults) {\r\n responseData.data.defaults = updatePresetsArray(responseData.data.defaults, forVisualizer);\r\n // const {lookIdFromUrl} = getParsedLookUrl(); // why do we need that?? set the same lookId on each preset? really?\r\n // if (lookIdFromUrl) {\r\n // presets = presets.map(preset => {\r\n // preset.lookId = lookIdFromUrl;\r\n // return preset\r\n // })\r\n // }\r\n store.dispatch(setBathroomVisualizerPresets(responseData.data.defaults, forVisualizer));\r\n }\r\n if (responseData.data.wizardData || responseData.data.wizardDataV2) {\r\n const wizardList = getParsedWizardList(responseData.data, false, forVisualizer);\r\n store.dispatch(setWizardList(wizardList));\r\n }\r\n //store.dispatch(setBathroomVisualizerFeatures(responseData.data.features));\r\n // this causes bathroomVisualizer to be super slow.... how to store huge arrays in redux store? No answer for now\r\n // for now, features are kept in layout dataObject.... sad, but at least it works much faster\r\n\r\n if (featuresCount === 100000) {\r\n store.dispatch(setAllFeaturesLoaded(document.kvConfig.visualizerType));\r\n store.dispatch(setLoadedPresets(responseData.data.defaults.map(preset => preset.id)));\r\n }\r\n\r\n return responseData.data\r\n }\r\n })\r\n .catch((error) => {\r\n loaderDisable();\r\n console.log('getBathroomVisualizerData', error);\r\n });\r\n};\r\n\r\nexport const getBvPresets = () => {\r\n return JsonApi.getDisplayRoom()\r\n .then(responseData => {\r\n // console.log('getBvPresets:', responseData);\r\n if (!responseData.data || responseData.data.error) {\r\n store.dispatch(setBathroomVisualizerPresets([]));\r\n console.error(\"get bvPresets error: No response data received\");\r\n return [];\r\n } else {\r\n const bvPresets = JSON.parse(responseData.data);\r\n store.dispatch(setBathroomVisualizerPresets(bvPresets));\r\n return bvPresets\r\n }\r\n })\r\n .catch((error) => {\r\n loaderDisable();\r\n console.log('getDisplayRoom', error);\r\n });\r\n};\r\n\r\nexport const getJobIdPreset = (jobId, editToken) => {\r\n return JsonApi.getBVJobData(jobId, editToken);\r\n};\r\n\r\nconst skipRequestsFor = [\"Attachment\", \"Decor\", \"Decore\"];\r\n\r\nconst updateFeaturesWithMarkUp = async (featuresResponse) => {\r\n const {fabricatorState} = store.getState();\r\n if (fabricatorState.settings.useMarkUpFeaturesRequests && featuresResponse\r\n && Array.isArray(featuresResponse) && featuresResponse.length) {\r\n if (skipRequestsFor.some(groupName => {\r\n return featuresResponse.every(dbFeature => dbFeature.groupName === groupName)\r\n })) {\r\n return featuresResponse\r\n }\r\n const markUpResponse = await getMarkUpForFeatures(featuresResponse);\r\n setResponseFeaturesMarkUp(featuresResponse, markUpResponse);\r\n }\r\n return featuresResponse\r\n}\r\n\r\nexport const getBvFeatures = async (arrayOfIds, arrayOfSkus = null, requestSharedFeatureNames = false, forVisualizer) => {\r\n const featuresResponse = await JsonApi.getBathroomVisualizerFeatures(arrayOfIds, arrayOfSkus, requestSharedFeatureNames, forVisualizer);\r\n await updateFeaturesWithMarkUp(featuresResponse ? featuresResponse.data : [])\r\n return featuresResponse\r\n};\r\n\r\nexport const getBvGroups = (visualizerType) => {\r\n return JsonApi.getBathroomVisualizerGroups(visualizerType)\r\n};\r\n\r\n/**\r\n * Main request to get features for feature group\r\n * @param groupName {string}\r\n * @param page {number}\r\n * @param pageSize {number}\r\n * @param filterValues {array}\r\n * @param searchText {string}\r\n * @param layoutAbbreviation {string}\r\n * @param axiosController {object}\r\n * @param requestOldFeatures {boolean}\r\n * @param visualizerType {string}\r\n * @returns {Promise<{data: []}>}\r\n */\r\nexport const getBvGroupFeatures = async (groupName, page, pageSize, filterValues, searchText = \"\", layoutAbbreviation, axiosController, requestOldFeatures, visualizerType) => {\r\n const featuresResponse = await JsonApi.getBathroomVisualizerGroupFeatures(groupName, page, pageSize, filterValues, searchText, layoutAbbreviation, axiosController, requestOldFeatures, visualizerType)\r\n await updateFeaturesWithMarkUp(featuresResponse);\r\n return featuresResponse\r\n};\r\nexport const getBvGroupFilterValues = async (groupName, filterId, withStoneFilters) => {\r\n const filterResponse = await JsonApi.getBathroomVisualizerGroupFilterValues(groupName, filterId, withStoneFilters);\r\n console.log(\"filterResponse\", filterResponse);\r\n if (filterResponse.data.error) {\r\n const {error} = filterResponse.data;\r\n renderErrorPopup(error);\r\n return {data: []}\r\n }\r\n return filterResponse\r\n};\r\n\r\nexport const submitPayment = (paymentInfo, useNewHoc = false) => { // submit is used in the WithPaymentSubmit HOC, all info is there\r\n const state = store.getState();\r\n const {serverState} = state;\r\n return JsonApi.submitPayment(useNewHoc ? paymentInfo : {\r\n ...paymentInfo,\r\n country: paymentInfo.country.name,\r\n fabricatorId: document.kvConfig.userId,\r\n jobId: document.kvConfig.jobId || serverState.jobId\r\n })\r\n .then(response => {\r\n store.dispatch({\r\n type: actionTypes.SUBMIT_PAYMENT_RESPONSE, // why do we need it? not used at all\r\n payload: response.data\r\n });\r\n if (useNewHoc) {\r\n const res = response.data;\r\n if (res.transactionResponse && res.transactionResponse.responseCode === '1') {\r\n // showQuoteSavedNotification();\r\n window.checkoutSuccess = true;\r\n const receiptUrl = store.getState().printState.receiptUrl;\r\n if (receiptUrl) {\r\n window.open(receiptUrl, \"_blank\");\r\n }\r\n } else {\r\n let msg = '';\r\n if (res && (res.transactionResponse && res.transactionResponse.errors && res.transactionResponse.errors.length > 0) || res.error) {\r\n msg = res.transactionResponse.errors[0].errorText || res.error;\r\n } else if (res && res.message && res.message.messageDetails.length > 0) {\r\n msg = res.message.messageDetails[0].text;\r\n }\r\n\r\n let sepIdx = lastIndexOf(msg, '-');\r\n if (sepIdx >= 0) {\r\n msg = trim(msg.substr(sepIdx + 1));\r\n }\r\n\r\n renderErrorPopup(msg, \"Card Error\");\r\n }\r\n }\r\n return response.data;\r\n })\r\n .catch(error => {\r\n renderErrorPopup(\"Server \"+new Error(error));\r\n loaderDisable();\r\n throw new Error(error);\r\n })\r\n};\r\n\r\nexport const getQtCategories = (layoutName, visualizerType) => {\r\n return JsonApi.getQtCategories(layoutName, visualizerType)\r\n .then(response => {\r\n if (!response.data || response.data.error || !Array.isArray(response.data)) {\r\n // store.dispatch(setQtCategories([]));\r\n console.error(\"get bvPresets error: No response data received\");\r\n return [];\r\n } else {\r\n const qtCategories = response.data.filter(qtCategory => {\r\n if (qtCategory.useWizard && IS_QKB_UI) {\r\n return true\r\n }\r\n return (qtCategory.name !== \"All\") && Array.isArray(qtCategory.featureGroups) && qtCategory.featureGroups.length\r\n });\r\n if (Config.isDevMode()) {\r\n console.log('qtCategories-->', qtCategories);\r\n }\r\n // store.dispatch(setQtCategories(qtCategories)); // with features inside featureGroups it becomes HUUUGE\r\n return qtCategories\r\n }\r\n })\r\n .catch(error => {\r\n renderErrorPopup(\"Server \"+new Error(error));\r\n loaderDisable();\r\n throw new Error(error);\r\n })\r\n};\r\n\r\nexport const getFabricatorSubscriptions = (fabricatorId = document.kvConfig.userId) => {\r\n return JsonApi.getFabricatorSubscriptions(fabricatorId)\r\n .then(response => {\r\n if (!response || !response.data || response.data.error) {\r\n console.error(\"getFabricatorSubscriptions error: No response data received\");\r\n } else {\r\n // console.log(\"response getFabricatorSubscriptions\", response);\r\n if (Array.isArray(response.data.subscriptions)) {\r\n store.dispatch(setFabricatorSubscriptions(response.data.subscriptions));\r\n }\r\n if (response.data.fabricatorTaxes) {\r\n store.dispatch(setFabricatorTaxes(response.data.fabricatorTaxes));\r\n }\r\n if (document.kvConfig.isCaesarStone && response.data.fabricatorData\r\n && response.data.fabricatorData.fabricatorName === \"QC Master Account CAN\") {\r\n response.data.fabricatorData.wasCreatedFromFabricator = \"QC Master Account CAN\";\r\n }\r\n const globalMarkUp = response.data.fabricatorData && response.data.fabricatorData.globalMarkUp\r\n ? parseMarkUp(response.data.fabricatorData.globalMarkUp)\r\n : \"\";\r\n if (globalMarkUp) {\r\n store.dispatch(setMarkUpLogic(globalMarkUp)) // also it can be restored with the cartState on job open\r\n }\r\n store.dispatch(setFabricatorData(response.data.fabricatorData));\r\n }\r\n })\r\n .catch(error => {\r\n // console.error(+new Error(error));\r\n renderErrorPopup(\"Server Error. Check Subscription Status\", \"\", getFabricatorSubscriptions.bind(this, fabricatorId));\r\n loaderDisable();\r\n throw new Error(error);\r\n })\r\n};\r\n\r\nexport const getDiscounts = (fabricatorId = document.kvConfig.userId) => {\r\n return JsonApi.getFabricatorDiscounts(fabricatorId)\r\n .then(response => {\r\n if (!response || !response.data || response.data.error) {\r\n console.error(\"getFabricatorDiscounts error: No response data received\");\r\n } else {\r\n console.log(\"response getFabricatorDiscounts\", response);\r\n if (Array.isArray(response.data)) {\r\n const discountSections = response.data\r\n .map(discountSection => {\r\n discountSection.discounts = Array.isArray(discountSection.discounts)\r\n ? discountSection.discounts.filter(dis => dis.enabled)\r\n : [];\r\n discountSection.discounts = discountSection.discounts.map(discount => {\r\n if (isSaveOnlyDiscount(discount)) {\r\n discount.selected = true;\r\n }\r\n return discount\r\n })\r\n return discountSection\r\n })\r\n .filter(discountSection => discountSection.discounts.length)\r\n store.dispatch(setDiscountSections(discountSections));\r\n }\r\n }\r\n });\r\n};\r\n\r\nexport const getNavigationButtons = (testConnection = false) => {\r\n let forTool = \"\";\r\n switch(document.kvConfig.visualizerType) {\r\n case \"Bathroom\":\r\n case \"BV\":\r\n case \"bvScene\":\r\n case \"bvLook\":\r\n forTool = \"bv\";\r\n break;\r\n case \"Kitchen\":\r\n case \"kvScene\":\r\n forTool = \"kv\";\r\n break;\r\n default:\r\n forTool = document.kvConfig.visualizerType;\r\n break;\r\n }\r\n return JsonApi.getMenuNavigation(forTool, testConnection)\r\n .then(menuData => {\r\n if (document.kvConfig.kioskMode || testConnection) {\r\n return false\r\n }\r\n store.dispatch(loadMobileNav(menuData.data));\r\n return menuData\r\n })\r\n .catch(error => {\r\n if (testConnection) {\r\n renderErrorPopup(error, \"\", getNavigationButtons.bind(this, true));\r\n }\r\n return error\r\n });\r\n};\r\n\r\nexport const copySqftImagesToAnotherJob = (fabricatorId = document.kvConfig.userId, postData) => {\r\n return JsonApi.copySqftImages(fabricatorId, postData)\r\n .then(response => response.data)\r\n .catch(error => {\r\n renderErrorPopup(\"Server \"+new Error(error));\r\n loaderDisable();\r\n throw new Error(error);\r\n })\r\n};\r\n","export const COLORS = {\r\n red: \"#d0021b\",\r\n // red: \"#FF0012\",\r\n gray: \"#9b9b9b\",\r\n gray2: \"#979797\",\r\n gray3: \"#b8b8b8\",\r\n gray4: \"#5e5e5e\",\r\n light: \"#e1e1e1\",\r\n white: \"#ffffff\",\r\n grohe: \"#292929\",\r\n};\r\n\r\nconst COLOR_THEMES = {\r\n \"qc\": {\r\n primary: \"#4A90E2\",\r\n primary_hover: \"#3483de\", //darken(#4A90E2, 5%),\r\n active: \"#9FC522\",\r\n active_hover: \"#8daf1e\", //darken(#9FC522, 5%),\r\n assetsPath: \"../images\",\r\n },\r\n \"caes\": {\r\n primary: \"#58595b\",\r\n primary_hover: \"#4b4c4e\", //darken(#58595b, 5%),\r\n active: \"#f46c42\",\r\n active_hover: \"#f3592a\", //darken(#f46c42, 5%),\r\n assetsPath: \"../images-caes\",\r\n },\r\n // \"as\": {\r\n // primary: \"#36919B\",\r\n // primary_hover: \"#4CABB5\", //darken(#58595b, 5%),\r\n // active: \"#004D58\",\r\n // active_hover: \"#4CABB5\", //darken(#f46c42, 5%),\r\n // assetsPath: \"../images-caes\",\r\n // },\r\n \"moderno\": {\r\n primary: \"#343434\",\r\n primary_hover: \"#1b1b1b\", //darken(#58595b, 5%),\r\n active: \"#d0021b\",\r\n active_hover: \"#9d0214\", //darken(#f46c42, 5%),\r\n assetsPath: \"../images-moderno\",\r\n },\r\n \"look\": {\r\n primary: \"#000000\",\r\n primary_hover: \"#0b1f37\", //darken(#58595b, 5%),\r\n active: \"#3984BE\",\r\n active_hover: \"#3376aa\", //darken(#f46c42, 5%),\r\n assetsPath: \"../images\",\r\n },\r\n \"grohe\": {\r\n primary: \"#000000\", // \"#0F2B4C\",\r\n primary_hover: \"#0b1f37\", //darken(#58595b, 5%),\r\n active: \"#3984BE\",\r\n active_hover: \"#3376aa\", //darken(#f46c42, 5%),\r\n assetsPath: \"../images\",\r\n },\r\n \"as\": {\r\n primary: \"#000000\", // \"#0F2B4C\",\r\n primary_hover: \"#0b1f37\", //darken(#58595b, 5%),\r\n active: \"#E70026\",\r\n active_hover: \"#ce0022\", //darken(#f46c42, 5%),\r\n assetsPath: \"../images-as\",\r\n },\r\n \"nhance\": {\r\n primary: \"#000000\", // \"#0F2B4C\",\r\n primary_hover: \"#0b1f37\", //darken(#58595b, 5%),\r\n active: \"#ef7038\",\r\n active_hover: \"#ed5f20\", //darken(#f46c42, 5%),\r\n assetsPath: \"../images-nhance\",\r\n },\r\n}\r\n\r\nexport const GROHE_FILTER_COLORS = {\r\n \"GROHE CHROME\": \"#f4f4f3\", // R:244 G:244 B:243\r\n \"GROHE POLISHED NICKEL\": \"#e4e0cb\", // R:228 B:224 G:203\r\n \"GROHE HARD GRAPHITE\": \"#605754\", // R:96 G:87 B:84\r\n \"GROHE BRUSHED NICKEL\": \"#c8beb1\", // R:200 G:190 B:177\r\n \"GROHE BRUSHED COOL SUNRISE\": \"#bb9759\" // R:187 G:151 B:89\r\n};\r\n\r\nexport default COLOR_THEMES\r\n","export const LayoutType = {\r\n Small: 0,\r\n Large: 1\r\n};\r\n\r\nexport const LayoutAbbreviation = {\r\n All: \"ALL\",\r\n Small: \"SM\",\r\n Large: \"LG\"\r\n};\r\n\r\nexport const CountsType = {\r\n allLayoutFeaturesCount: \"All\", // not used\r\n largeLayoutFeaturesCount: \"Large\",\r\n smallLayoutFeaturesCount: \"Small\",\r\n totalFeaturesCount: \"Total\" // not used\r\n};\r\n\r\nexport const BathTubType = {\r\n Custom60in: 'Custom60in',\r\n FreeStanding: 'BathTubFreeStanding'\r\n};\r\n\r\nexport const VanityTypes = {\r\n Complete: 'Complete',\r\n Custom: 'Custom'\r\n};\r\n\r\nexport const ShowerType = {\r\n Custom: 0,\r\n Complete: 1\r\n};\r\n\r\nexport const ShowerBodyType = {\r\n Glass: 0,\r\n Door: 1\r\n};\r\n\r\nexport const ShowerTypes = {\r\n Custom: 'Custom',\r\n Complete: 'Complete',\r\n All: 'All'\r\n};\r\n\r\nexport const PartMenuType = {\r\n Simple: 0, // i.e. Toilet - doesn't have any sub-items\r\n Complex: 1, // i.e. Vanity - has sub-menu items, Sink, Faucet Mirror\r\n};\r\n\r\nexport function bathTubTypeToString(bathTypeType) {\r\n switch (bathTypeType) {\r\n case BathTubType.Custom60in:\r\n return 'Custom';\r\n case BathTubType.FreeStanding:\r\n return 'Complete';\r\n }\r\n}\r\nexport function bathTubStringToType(bathtubString) {\r\n switch (bathtubString) {\r\n case 'custom':\r\n return BathTubType.Custom60in;\r\n case 'complete':\r\n return BathTubType.FreeStanding;\r\n }\r\n}\r\n\r\nexport const ShowerComboTubType = {\r\n bathtub_liner: \"bathtub_liner\",\r\n replacement_tub: \"replacement_tub\",\r\n walk_in_tub: \"walk_in_tub\",\r\n jetted_tub: \"jetted_tub\",\r\n};\r\n\r\nexport const vanityWizardFilters = [\"Size\", \"DoorStyle\", \"Material\", \"Color\"];\r\n\r\nexport const showerWizardFilters = [\"Material\", \"DuraBathColor\", \"SlabColor\", \"TileColor\", \"TilePattern\", \"AcrylicPattern\", \"AcrylicColor\"];\r\n\r\nexport const NotQCVanityDoorStylesFilters = [\"Centennial\", \"Hudson\", \"Northbrook\", \"Osage\", \"Quebec\", \"Riverside\", \"Villager\", \"Zurich\"];\r\n","const ActionTypes = {\r\n GET_CANVAS_SCALE: \"GET_CANVAS_SCALE\",\r\n CANVAS_SCALE_CHANGED: \"CANVAS_SCALE_CHANGED\",\r\n RESET_CANVAS: \"RESET_CANVAS\",\r\n ENABLE_PINCH_ZOOM: \"ENABLE_PINCH_ZOOM\",\r\n DISABLE_PINCH_ZOOM: \"DISABLE_PINCH_ZOOM\",\r\n CHANGE_LAYOUT: \"CHANGE_LAYOUT\",\r\n UPDATE_ALL_ITEMS: \"UPDATE_ALL_ITEMS\",\r\n USER_IS_LOGGED_IN: \"USER_IS_LOGGED_IN\",\r\n USER_POPUP_CLOSED: \"USER_POPUP_CLOSED\",\r\n REMOVE_GREEN_ZONE_ON_CANVAS: \"REMOVE_GREEN_ZONE_ON_CANVAS\",\r\n FEATURE_IS_CLICKED: \"FEATURE_IS_CLICKED\",\r\n OPEN_MOBILE_NAVIGATION: \"OPEN_MOBILE_NAVIGATION\",\r\n CHANGE_MOBILE_MENU_CONTENT_TYPE: \"CHANGE_MOBILE_MENU_CONTENT_TYPE\",\r\n UPDATE_QUOTING_TOOL: \"UPDATE_QUOTING_TOOL\",\r\n /*** OLD QT ACTIONS***/\r\n SHOW_NUMERIC_KBD: \"SHOW_NUMERIC_KBD\",\r\n OVERLAY_CLICK: \"OVERLAY_CLICK\",\r\n SHOW_SUMMARY: null,\r\n SHOW_DOCUSIGN: 'SHOW_DOCUSIGN'\r\n}\r\nexport default ActionTypes;\r\n","import {getCurrentLayout} from \"../../appLayout\";\r\nimport {\r\n getDistanceFromPointToInfiniteLine,\r\n getDistanceFromPointToLine,\r\n getIntersectCords,\r\n getMidPoint,\r\n getPointDistance,\r\n getPointField, isPointInsideShape,\r\n orientation\r\n} from \"./sqftHelper\";\r\nimport workspace from \"../components/canvas/core/workspace\";\r\nimport sqftShape from \"../components/canvas/core/shapes/sqftShape\";\r\nimport sqftConfig from \"../components/canvas/store/sqftConfig\";\r\nimport store from \"../../../store\";\r\nimport {SHAPE_PART_ID} from \"../constants\";\r\nimport {getRoomName} from \"../../../misc/helpers\";\r\nimport NumberText from \"../components/canvas/core/workspace/text/numberText\";\r\nimport SqftStore from \"../components/canvas/store/sqftStore\";\r\nimport workspaceControllers from \"../components/canvas/store/workspaceControllers\";\r\nimport Wall from \"../components/canvas/core/shapes/wall\";\r\nimport sqftImageManager from \"../components/canvas/store/sqftImageManager\";\r\nimport {getNavItemsFromTheWizard} from \"./sqftHelperUi\";\r\nimport {getIntersectionCordsV2} from \"./coordinatesHelper\";\r\nimport sqftEventManager from \"../components/canvas/store/sqftEventManager\";\r\nimport {getFontSizeFromContext} from \"../components/canvas/store/canvasHelper\";\r\nimport EventManager from \"../components/canvas/store/sqftEventManager\";\r\n\r\nexport const DIRECTIONS = {\r\n EAST: \"east\",\r\n WEST: \"west\",\r\n NORTH: \"north\",\r\n SOUTH: \"south\",\r\n NORTHEAST: \"northeast\",\r\n NORTHWEST: \"northwest\",\r\n SOUTHEAST: \"southeast\",\r\n SOUTHWEST: \"southwest\",\r\n UNDEFINED: \"undefined\"\r\n};\r\n\r\nexport default class ShapeHelper {\r\n\r\n /**\r\n * @param {sqftShape} activeShape\r\n * @return {object} {sqftShape.id: [intersectionPoints]}\r\n */\r\n static getIntersectionsWithOtherShapes(activeShape) {\r\n let activeShapeLines = activeShape.getLines();\r\n let shapes = workspace.getShapes();\r\n let intersectionPoints = {};\r\n activeShapeLines.forEach((activeShapeLine) => {\r\n shapes.forEach(function(shape) {\r\n if (shape instanceof sqftShape && !shape.isHidden && shape.id !== activeShape.id) {\r\n let testShapeLines = shape.getLines();\r\n testShapeLines.forEach((testShapeLine) => {\r\n let pointFieldActiveShapeLineFrom = getPointField(activeShapeLine.from.x, activeShapeLine.from.y, activeShapeLine);\r\n let pointFieldActiveShapeLineTo = getPointField(activeShapeLine.to.x, activeShapeLine.to.y, activeShapeLine);\r\n let pointFieldTestShapeLineFrom = getPointField(testShapeLine.from.x, testShapeLine.from.y, testShapeLine);\r\n let pointFieldTestShapeLineTo = getPointField(testShapeLine.to.x, testShapeLine.to.y, testShapeLine);\r\n\r\n let intersectionCords = getIntersectCords(\r\n pointFieldActiveShapeLineFrom.x, pointFieldActiveShapeLineFrom.y,\r\n pointFieldActiveShapeLineTo.x, pointFieldActiveShapeLineTo.y,\r\n pointFieldTestShapeLineFrom.x, pointFieldTestShapeLineFrom.y,\r\n pointFieldTestShapeLineTo.x, pointFieldTestShapeLineTo.y,\r\n false\r\n );\r\n\r\n if (intersectionCords) {\r\n // ctx.beginPath();\r\n // ctx.arc(intersectionCords.x, intersectionCords.y, 10, 0, 2 * Math.PI);\r\n // ctx.stroke();\r\n //debugger // eslint-disable-line no-debugger\r\n (intersectionPoints[shape.id] = intersectionPoints[shape.id] || []).push(intersectionCords);\r\n }\r\n });\r\n }\r\n });\r\n });\r\n\r\n return intersectionPoints;\r\n }\r\n\r\n /**\r\n * @param {sqftShape} shape1\r\n * @param {sqftShape} shape2\r\n * @return {object} {sqftShape.id: [intersectionPoints]}\r\n */\r\n static getTwoShapesIntersections(shape1, shape2 ) {\r\n let activeShapeLines = shape1.getLines();\r\n let intersectionPoints = {};\r\n let testShapeLines = shape2.getLines();\r\n activeShapeLines.forEach((activeShapeLine) => {\r\n testShapeLines.forEach((testShapeLine) => {\r\n let pointFieldActiveShapeLineFrom = getPointField(activeShapeLine.from.x, activeShapeLine.from.y, activeShapeLine);\r\n let pointFieldActiveShapeLineTo = getPointField(activeShapeLine.to.x, activeShapeLine.to.y, activeShapeLine);\r\n let pointFieldTestShapeLineFrom = getPointField(testShapeLine.from.x, testShapeLine.from.y, testShapeLine);\r\n let pointFieldTestShapeLineTo = getPointField(testShapeLine.to.x, testShapeLine.to.y, testShapeLine);\r\n\r\n let intersectionCords = getIntersectionCordsV2(\r\n pointFieldActiveShapeLineFrom.x, pointFieldActiveShapeLineFrom.y,\r\n pointFieldActiveShapeLineTo.x, pointFieldActiveShapeLineTo.y,\r\n pointFieldTestShapeLineFrom.x, pointFieldTestShapeLineFrom.y,\r\n pointFieldTestShapeLineTo.x, pointFieldTestShapeLineTo.y,\r\n false\r\n );\r\n\r\n if (intersectionCords) {\r\n // const ctx = sqftEventManager.getCtx();\r\n // ctx.beginPath();\r\n // ctx.arc(intersectionCords.x, intersectionCords.y, 10, 0, 2 * Math.PI);\r\n // ctx.stroke();\r\n //debugger // eslint-disable-line no-debugger\r\n (intersectionPoints[shape2.id] = intersectionPoints[shape2.id] || []).push(intersectionCords);\r\n }\r\n });\r\n });\r\n\r\n return intersectionPoints;\r\n }\r\n\r\n static checkIfShapeContainsAnother(shape1, shape2) {\r\n let shape1Pos = shape1.getCenter();\r\n let shape1PosField = getPointField(shape1Pos.x, shape1Pos.y, shape1);\r\n // here will will check only shape center point\r\n for (let vertex of [shape1PosField]) {\r\n if (isPointInsideShape(vertex, shape2)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * @param {sqftShape} activeShape\r\n * @return {object} {sqftShape.id: {lineDirection: [{point: point, distance: int}]}}\r\n */\r\n static getDistancesToShapes(activeShape) {\r\n let activeShapeLines = activeShape.getLines();\r\n let shapes = workspace.getShapes();\r\n let distances = {};\r\n activeShapeLines.forEach((activeShapeLine) => {\r\n let pointFieldActiveShapeLineFrom = getPointField(activeShapeLine.from.x, activeShapeLine.from.y, activeShapeLine);\r\n\r\n shapes.forEach(function(shape) {\r\n if (shape instanceof sqftShape && !shape.isHidden && shape.id !== activeShape.id) {\r\n let testShapeLines = shape.getLines();\r\n testShapeLines.forEach((testShapeLine) => {\r\n let pointFieldTestShapeLineFrom = getPointField(testShapeLine.from.x, testShapeLine.from.y, testShapeLine);\r\n let pointFieldTestShapeLineTo = getPointField(testShapeLine.to.x, testShapeLine.to.y, testShapeLine);\r\n\r\n let distance = getDistanceFromPointToLine(\r\n pointFieldActiveShapeLineFrom.x, pointFieldActiveShapeLineFrom.y,\r\n pointFieldTestShapeLineFrom.x, pointFieldTestShapeLineFrom.y,\r\n pointFieldTestShapeLineTo.x, pointFieldTestShapeLineTo.y\r\n );\r\n\r\n if (distance || distance === 0) {\r\n let lineDirection = shape.getAngleDirection(testShapeLine);\r\n let diff = Math.abs(distance);\r\n\r\n if (diff < sqftConfig.SNAP_OFFSET) {\r\n let lineMidPoint = getMidPoint(pointFieldTestShapeLineFrom, pointFieldTestShapeLineTo);\r\n let result = {\r\n shape: shape,\r\n line: activeShapeLine,\r\n point: pointFieldActiveShapeLineFrom,\r\n distance,\r\n diff,\r\n diffX: pointFieldActiveShapeLineFrom.x - lineMidPoint.x,\r\n diffY: pointFieldActiveShapeLineFrom.y - lineMidPoint.y,\r\n }\r\n distances[shape.id] = distances[shape.id] || {};\r\n (distances[shape.id][lineDirection.orientation] = distances[shape.id][lineDirection.orientation] || []).push(result);\r\n }\r\n }\r\n });\r\n }\r\n });\r\n });\r\n\r\n return distances;\r\n }\r\n\r\n /**\r\n * @param {sqftShape} activeShape\r\n * @return {object} {sqftShape.id: {lineDirection: [{point: point, distance: int}]}}\r\n */\r\n static getDistancesToWalls(activeShape) {\r\n let activeShapeLines = activeShape.getLines();\r\n let walls = workspaceControllers.walls.getResources();\r\n let distances = {};\r\n activeShapeLines.forEach((activeShapeLine) => {\r\n let pointFieldActiveShapeLineFrom = getPointField(activeShapeLine.from.x, activeShapeLine.from.y, activeShapeLine);\r\n\r\n walls.forEach(function(wall) {\r\n if (wall instanceof Wall) {\r\n //todo\r\n let testShapeLines = wall.getBordersOfWallLines();\r\n //let testShapeLines = wall.getLines();\r\n //console.log(\"testShapeLines\", testShapeLines);\r\n activeShape.testShapeLines = testShapeLines;\r\n\r\n testShapeLines.forEach((testShapeLine) => {\r\n let pointFieldTestShapeLineFrom = testShapeLine.from.getPointField();\r\n let pointFieldTestShapeLineTo = testShapeLine.to.getPointField();\r\n\r\n let distance = getDistanceFromPointToLine(\r\n pointFieldActiveShapeLineFrom.x, pointFieldActiveShapeLineFrom.y,\r\n pointFieldTestShapeLineFrom.x, pointFieldTestShapeLineFrom.y,\r\n pointFieldTestShapeLineTo.x, pointFieldTestShapeLineTo.y\r\n );\r\n\r\n if (distance) {\r\n const lineOrientation = ShapeHelper.getLineOrientation(testShapeLine.from, testShapeLine.to, true);\r\n //console.log(\"lineOrientation\",lineOrientation);\r\n let diff = Math.abs(distance);\r\n\r\n if (diff < sqftConfig.SNAP_OFFSET) {\r\n let lineMidPoint = getMidPoint(pointFieldTestShapeLineFrom, pointFieldTestShapeLineTo);\r\n let result = {\r\n shape: wall,\r\n line: activeShapeLine,\r\n point: pointFieldActiveShapeLineFrom,\r\n distance,\r\n diff,\r\n diffX: pointFieldActiveShapeLineFrom.x - lineMidPoint.x,\r\n diffY: pointFieldActiveShapeLineFrom.y - lineMidPoint.y,\r\n }\r\n distances[wall.id] = distances[wall.id] || {};\r\n (distances[wall.id][lineOrientation] = distances[wall.id][lineOrientation] || []).push(result);\r\n //console.log(\"diff\", diff);\r\n }\r\n }\r\n });\r\n }\r\n });\r\n });\r\n\r\n return distances;\r\n }\r\n\r\n /**\r\n * @param {object} pointFieldActivePoint {x, y}\r\n * @return {object} {sqftShape.id: {lineDirection: [{point: point, distance: int}]}}\r\n */\r\n static getDistancesToPoint(pointFieldActivePoint) {\r\n let shapes = workspace.getShapes();\r\n let distances = {};\r\n //let pointFieldActivePoint = getPointField(activePoint.x, activePoint.y);\r\n shapes.forEach(function(shape) {\r\n if (shape instanceof sqftShape && !shape.isHidden) {\r\n let testShapeLines = shape.getLines();\r\n testShapeLines.forEach((testShapeLine) => {\r\n let pointFieldTestShapeLineFrom = getPointField(testShapeLine.from.x, testShapeLine.from.y, testShapeLine);\r\n let pointFieldTestShapeLineTo = getPointField(testShapeLine.to.x, testShapeLine.to.y, testShapeLine);\r\n\r\n let distance = getDistanceFromPointToInfiniteLine(\r\n pointFieldActivePoint.x, pointFieldActivePoint.y,\r\n pointFieldTestShapeLineFrom.x, pointFieldTestShapeLineFrom.y,\r\n pointFieldTestShapeLineTo.x, pointFieldTestShapeLineTo.y\r\n );\r\n\r\n if (distance) {\r\n let lineDirection = shape.getAngleDirection(testShapeLine);\r\n let diff = distance;\r\n switch (lineDirection.orientation) {\r\n case 'vertical':\r\n diff = pointFieldActivePoint.x > pointFieldTestShapeLineFrom.x ? distance : -distance\r\n break;\r\n case 'horizontal':\r\n diff = pointFieldActivePoint.y > pointFieldTestShapeLineFrom.y ? distance : -distance\r\n break;\r\n //todo rotated - set diff distance from tested point to line(beam)\r\n default:\r\n break;\r\n }\r\n\r\n if (distance < sqftConfig.SNAP_OFFSET) {\r\n let result = {\r\n shape: shape,\r\n line: testShapeLine,\r\n point: pointFieldActivePoint,\r\n distance,\r\n diff,\r\n }\r\n distances[shape.id] = distances[shape.id] || {};\r\n (distances[shape.id][lineDirection.orientation] = distances[shape.id][lineDirection.orientation] || []).push(result);\r\n }\r\n }\r\n });\r\n }\r\n });\r\n\r\n return distances;\r\n }\r\n\r\n /**\r\n * @param {sqftShape} activeShape\r\n * @return {object} {sqftShape.id: {lineDirection: [{point: point, distance: int}]}}\r\n */\r\n static getDistancesToSlabImages(activeShape) {\r\n let activeShapeLines = activeShape.getLines();\r\n let croppedSlabImages = store.getState().sqftSlabState.croppedSlabImages;\r\n let distances = {};\r\n activeShapeLines.forEach((activeShapeLine) => {\r\n let pointFieldActiveShapeLineFrom = getPointField(activeShapeLine.from.x, activeShapeLine.from.y, activeShapeLine);\r\n\r\n croppedSlabImages.forEach(function(movableImage) {\r\n if (!movableImage.isHidden) {\r\n let testImagePoints = movableImage.getLinePointsPointField();\r\n for (let i = 0; i <= testImagePoints.length - 1; i++) {\r\n let from = testImagePoints[i];\r\n let to = testImagePoints[i === testImagePoints.length - 1 ? 0 : i + 1] ;\r\n let distance = getDistanceFromPointToLine(\r\n pointFieldActiveShapeLineFrom.x, pointFieldActiveShapeLineFrom.y,\r\n from.x, from.y,\r\n to.x, to.y,\r\n );\r\n const lineOrientation = ShapeHelper.getLineOrientation(from, to);\r\n let diff = Math.abs(distance);\r\n\r\n if (diff < sqftConfig.SNAP_OFFSET) {\r\n let lineMidPoint = getMidPoint(from, to);\r\n let result = {\r\n shape: movableImage,\r\n line: activeShapeLine,\r\n point: pointFieldActiveShapeLineFrom,\r\n distance,\r\n diff,\r\n diffX: pointFieldActiveShapeLineFrom.x - lineMidPoint.x,\r\n diffY: pointFieldActiveShapeLineFrom.y - lineMidPoint.y,\r\n }\r\n distances[movableImage.id] = distances[movableImage.id] || {};\r\n (distances[movableImage.id][lineOrientation] = distances[movableImage.id][lineOrientation] || []).push(result);\r\n }\r\n }\r\n }\r\n });\r\n });\r\n\r\n return distances;\r\n }\r\n\r\n /**\r\n * @param {sqftShape} activeShape\r\n * @return {object} {sqftShape.id: {lineDirection: [{point: point, distance: int}]}}\r\n */\r\n static getDistancesToImages(activeShape) {\r\n let activeShapeLines = activeShape.getLines();\r\n let appliances = sqftImageManager.getAppliances();\r\n let slabImages = sqftImageManager.getSlabImages();\r\n const images = slabImages.concat(appliances);\r\n let distances = {};\r\n activeShapeLines.forEach((activeShapeLine) => {\r\n let pointFieldActiveShapeLineFrom = getPointField(activeShapeLine.from.x, activeShapeLine.from.y, activeShapeLine);\r\n\r\n images.forEach(function(movableImage) {\r\n if (!movableImage.isHidden && movableImage.id !== activeShape.id) {\r\n let testImagePoints = movableImage.getLinePointsPointField();\r\n for (let i = 0; i <= testImagePoints.length - 1; i++) {\r\n let from = testImagePoints[i];\r\n let to = testImagePoints[i === testImagePoints.length - 1 ? 0 : i + 1] ;\r\n let distance = getDistanceFromPointToLine(\r\n pointFieldActiveShapeLineFrom.x, pointFieldActiveShapeLineFrom.y,\r\n from.x, from.y,\r\n to.x, to.y,\r\n );\r\n const lineOrientation = ShapeHelper.getLineOrientation(from, to);\r\n let diff = Math.abs(distance);\r\n\r\n if (diff < sqftConfig.SNAP_OFFSET) {\r\n let lineMidPoint = getMidPoint(from, to);\r\n let result = {\r\n shape: movableImage,\r\n line: activeShapeLine,\r\n point: pointFieldActiveShapeLineFrom,\r\n distance,\r\n diff,\r\n diffX: pointFieldActiveShapeLineFrom.x - lineMidPoint.x,\r\n diffY: pointFieldActiveShapeLineFrom.y - lineMidPoint.y,\r\n }\r\n distances[movableImage.id] = distances[movableImage.id] || {};\r\n (distances[movableImage.id][lineOrientation] = distances[movableImage.id][lineOrientation] || []).push(result);\r\n }\r\n }\r\n }\r\n });\r\n });\r\n\r\n return distances;\r\n }\r\n\r\n static getLineOrientation(point1, point2, usePointsV2 = false) {\r\n const x1 = usePointsV2 ? point1.modelCorePoint.getPosX() : point1.x\r\n const x2 = usePointsV2 ? point2.modelCorePoint.getPosX() : point2.x\r\n const y1 = usePointsV2 ? point1.modelCorePoint.getPosY() : point1.y\r\n const y2 = usePointsV2 ? point2.modelCorePoint.getPosY() : point2.y\r\n let slope = (y1 - y2) / (x1 - x2);\r\n let xDiff = Math.round(Math.abs(x2 - x1));\r\n let yDiff = Math.round(Math.abs(y2 - y1));\r\n if (xDiff === 0) {\r\n return \"vertical\";\r\n } else if (yDiff === 0) {\r\n return \"horizontal\";\r\n } else {\r\n if (slope >= 0) { //southeast and northwest\r\n if (x2 > x1) {\r\n return \"SOUTHEAST\";\r\n } else {\r\n return \"NORTHWEST\";\r\n }\r\n } else {\r\n if (x2 > x1) {\r\n return \"NORTHEAST\";\r\n } else {\r\n return \"SOUTHWEST\";\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * find all snapping possibilities\r\n * @param {object} itemBounds\r\n * @return {object} {sqftShape.id: [intersectionPoints]}\r\n */\r\n static getSnappingPossibilities(itemBounds) {\r\n if (Object.keys(itemBounds).length === 0) {\r\n return []\r\n }\r\n let resultV = [], resultH = [];\r\n for (let i in itemBounds) {\r\n if (itemBounds[i].vertical) {\r\n itemBounds[i].vertical.forEach((itemBound) => {\r\n resultV.push({\r\n shape: itemBound.shape,\r\n line: itemBound.line,\r\n point: itemBound.point,\r\n offset: itemBound.distance,\r\n diff: itemBound.diffX,\r\n orientation: \"vertical\",\r\n });\r\n });\r\n }\r\n if (itemBounds[i].horizontal) {\r\n itemBounds[i].horizontal.forEach((itemBound) => {\r\n resultH.push({\r\n shape: itemBound.shape,\r\n line: itemBound.line,\r\n point: itemBound.point,\r\n offset: itemBound.distance,\r\n diff: itemBound.diffY,\r\n orientation: \"horizontal\",\r\n });\r\n });\r\n }\r\n }\r\n\r\n let guides = [];\r\n\r\n // find closest snap\r\n let minV = resultV.sort((a, b) => a.diff - b.diff)[0];\r\n let minH = resultH.sort((a, b) => a.diff - b.diff)[0];\r\n if (minV) {\r\n guides.push(minV);\r\n }\r\n if (minH) {\r\n guides.push(minH);\r\n }\r\n if (guides.length > 0) {\r\n //debugger // eslint-disable-line no-debugger\r\n }\r\n return guides;\r\n }\r\n\r\n /**\r\n * Find all snapping possibilities for the same part ID\r\n * @param {object} itemBounds\r\n * @param partId\r\n * @return {object} {sqftShape.id: [intersectionPoints]}\r\n */\r\n static getItemBoundsForTheSamePartIdIfExist(itemBounds, partId) {\r\n if (Object.keys(itemBounds).length === 0) {\r\n return {};\r\n }\r\n\r\n const newItemBounds = {};\r\n\r\n for (let key in itemBounds) {\r\n if (itemBounds.hasOwnProperty(key)) {\r\n let verticalElements = [];\r\n let horizontalElements = [];\r\n\r\n if (itemBounds[key].vertical) {\r\n verticalElements = itemBounds[key].vertical.filter(verticalElement => verticalElement.shape.partId === partId);\r\n }\r\n\r\n if (itemBounds[key].horizontal) {\r\n horizontalElements = itemBounds[key].horizontal.filter(horizontalElement => horizontalElement.shape.partId === partId);\r\n }\r\n\r\n if (verticalElements.length > 0 || horizontalElements.length > 0) {\r\n newItemBounds[key] = {\r\n vertical: verticalElements.length > 0 ? verticalElements : undefined,\r\n horizontal: horizontalElements.length > 0 ? horizontalElements : undefined\r\n };\r\n }\r\n }\r\n }\r\n\r\n return newItemBounds;\r\n }\r\n\r\n /**\r\n * find all snapping possibilities\r\n * @param {object} itemBounds\r\n * @return {object} {sqftShape.id: [intersectionPoints]}\r\n */\r\n static getSnappingPossibilitiesToLines(itemBounds) {\r\n if (Object.keys(itemBounds).length === 0) {\r\n return []\r\n }\r\n let resultV = [], resultH = [];\r\n for (let i in itemBounds) {\r\n if (itemBounds[i].vertical) {\r\n itemBounds[i].vertical.forEach((itemBound) => {\r\n resultV.push({\r\n line: itemBound.line,\r\n point: itemBound.point,\r\n distance: itemBound.distance,\r\n diff: itemBound.diff,\r\n orientation: \"vertical\",\r\n });\r\n });\r\n }\r\n if (itemBounds[i].horizontal) {\r\n itemBounds[i].horizontal.forEach((itemBound) => {\r\n resultH.push({\r\n line: itemBound.line,\r\n point: itemBound.point,\r\n diff: itemBound.diff,\r\n orientation: \"horizontal\",\r\n });\r\n });\r\n }\r\n }\r\n\r\n let guides = [];\r\n\r\n // find closest snap\r\n let minV = resultV.sort((a, b) => a.distance - b.distance)[0];\r\n let minH = resultH.sort((a, b) => a.distance - b.distance)[0];\r\n if (minV) {\r\n guides.push(minV);\r\n }\r\n if (minH) {\r\n guides.push(minH);\r\n }\r\n\r\n if (guides.length > 0) {\r\n //debugger // eslint-disable-line no-debugger\r\n }\r\n return guides;\r\n }\r\n\r\n static getMinLengthToPoints(shape, points) {\r\n let shapeLines = shape.getLines();\r\n let minLength = null;\r\n let pointDistances = [];\r\n points.forEach(function(point) {\r\n shapeLines.forEach(function(line) {\r\n let pointField = getPointField(line.from.x, line.from.y, line)\r\n let pointDistance = getPointDistance(pointField, point);\r\n\r\n pointDistances.push(pointDistance);\r\n if (minLength === null || pointDistance < minLength) {\r\n minLength = pointDistance\r\n }\r\n })\r\n })\r\n pointDistances.sort((a, b) => a - b);\r\n //console.log(\"pointDistances\", pointDistances);\r\n\r\n return pointDistances ? pointDistances : null\r\n }\r\n\r\n static getInnerCornerPoints(shape) {\r\n let lines = shape.getLines(),\r\n points = [];\r\n\r\n for (let i = 0; i < lines.length; i++) {\r\n if (lines[i].to.angle > 0 || lines[i].to.arcLength > 0) {\r\n let dir = shape.getAngleDirection(lines[i]);\r\n if (this.isAngleInner(dir)) {\r\n points.push(lines[i].to);\r\n }\r\n }\r\n }\r\n\r\n return points\r\n }\r\n\r\n static isAngleInner(dir) {\r\n let isInner = false;\r\n switch(dir.facing) {\r\n case \"nw\":\r\n if (dir.orientation === \"horizontal\") {\r\n isInner = true\r\n }\r\n break;\r\n case \"ne\":\r\n if (dir.orientation === \"vertical\") {\r\n isInner = true\r\n }\r\n break;\r\n case \"se\":\r\n if (dir.orientation === \"horizontal\") {\r\n isInner = true\r\n }\r\n break;\r\n case \"sw\":\r\n if (dir.orientation === \"vertical\") {\r\n isInner = true\r\n }\r\n\r\n break;\r\n }\r\n\r\n return isInner;\r\n }\r\n\r\n //deprecated (old rotation function) use getCenterPoint\r\n static getShapeCenter(lines, isSlabMode) {\r\n let max_x = 0, min_x = 0, max_y = 0, min_y = 0;\r\n for(let i = 0; i < lines.length; i++) {\r\n let rotatePointX = isSlabMode ? lines[i].from.posSlab.x : lines[i].from.x;\r\n let rotatePointY = isSlabMode ? lines[i].from.posSlab.y : lines[i].from.y;\r\n if (max_x < rotatePointX)\r\n max_x = rotatePointX;\r\n if (min_x > rotatePointX)\r\n min_x = rotatePointX;\r\n if (max_y < rotatePointY)\r\n max_y = rotatePointY;\r\n if (min_y > rotatePointY)\r\n min_y = rotatePointY;\r\n }\r\n\r\n return {x: ((max_x - min_x) / 2) + min_x, y: ((max_y - min_y) / 2) + min_y};\r\n }\r\n\r\n static getCenterPoint(points) {\r\n let xCords = points.map (point => point.x);\r\n let yCords = points.map (point => point.y);\r\n let cx = (Math.min (...xCords) + Math.max (...xCords)) / 2;\r\n let cy = (Math.min (...yCords) + Math.max (...yCords)) / 2;\r\n\r\n return {x: cx, y: cy};\r\n }\r\n\r\n static getAbsolutePosFromSnapPossibilities = (snapPossibilities, pos) => {\r\n if (snapPossibilities.length > 0) {\r\n let scale = sqftConfig.scale;\r\n let absolutePos = {...pos};\r\n let snapWithShape = null;\r\n snapPossibilities.forEach((snap) => {\r\n switch (snap.orientation) {\r\n case \"horizontal\":\r\n absolutePos.y -= snap.diff / scale\r\n break;\r\n case \"vertical\":\r\n absolutePos.x -= snap.diff / scale\r\n break;\r\n }\r\n snapWithShape = snap.shape;\r\n })\r\n return [absolutePos, snapWithShape]\r\n }\r\n return [null, null]\r\n }\r\n}\r\n\r\n/**\r\n * get line length number text from 2 point\r\n */\r\nexport const getLineLengthNumberText = (pointFrom, pointTo, parent, changeValueCallback) => {\r\n const midPoint = getMidPoint(pointFrom.getPosition(), pointTo.getPosition()),\r\n lineOrientation = getLineOrientation(pointFrom, pointTo),\r\n //todo line direction\r\n lineDirection = {newDirection: \"west\"},//getPointDirection(pointFrom, pointTo, nextPoint, prevPoint),\r\n distance = getPointDistance(pointFrom, pointTo);\r\n\r\n let yOffset = 0,\r\n xOffset = 0;\r\n\r\n switch (lineOrientation) {\r\n case orientation.HORIZONTAL: {\r\n yOffset = lineDirection.newDirection === \"west\" ? 36 + 10 : -36;\r\n break;\r\n }\r\n case orientation.VERTICAL: {\r\n xOffset = (lineDirection.newDirection === \"south\" ? 36 + 10 : -36 - 10);\r\n break;\r\n }\r\n //TODO rotation\r\n case orientation.NORTHWEST: { break; }\r\n case orientation.NORTHEAST: { break; }\r\n case orientation.SOUTHWEST: { break; }\r\n case orientation.SOUTHEAST: { break; }\r\n default: break;\r\n }\r\n\r\n let pos = {\r\n x: midPoint.x,\r\n y: midPoint.y,\r\n xOffset: xOffset,\r\n yOffset: yOffset,\r\n orientation: lineOrientation,\r\n betweenPoints: {\r\n pointFrom: pointFrom,\r\n pointTo: pointTo,\r\n }\r\n };\r\n\r\n let design = {\r\n shouldRenderFrameBorder: true,\r\n isLength: true\r\n };\r\n\r\n return new NumberText(distance, pos, design, parent, changeValueCallback);\r\n}\r\n\r\nexport const getPointDirection = (aP, bP, cP, lineBeforeFrom) => { // line1.from , line1.to, line2.to, lineBefore.from\r\n var\r\n mAC = getMidPoint(aP, cP),\r\n vDir,\r\n hDir,\r\n orientation = ShapeHelper.getLineOrientation(aP,bP),\r\n newDirection = '',\r\n cornerMargins = {\r\n fromTop : 0,\r\n fromLeft : 0,\r\n fromRight : 0,\r\n fromBottom : 0,\r\n },\r\n dirX = 'forward',\r\n dirY = 'forward';\r\n\r\n if (aP.x > bP.x) {\r\n dirX = 'backward';\r\n }\r\n if (aP.y < bP.y) {\r\n dirY = 'backward';\r\n }\r\n if (bP.y >= mAC.y) {\r\n vDir = \"n\";\r\n } else {\r\n vDir = \"s\";\r\n }\r\n if (bP.x >= mAC.x) { // 155 - 118\r\n hDir = \"w\";\r\n } else {\r\n hDir = \"e\";\r\n }\r\n\r\n var point1X = aP.x - (aP.x % 1),\r\n point1Y = aP.y - (aP.y % 1),\r\n point2X = bP.x - (bP.x % 1),\r\n point2Y = bP.y - (bP.y % 1),\r\n point3X = cP.x - (cP.x % 1),\r\n point3Y = cP.y - (cP.y % 1),\r\n pointBeforeX = lineBeforeFrom.x - (lineBeforeFrom.x % 1),\r\n pointBeforeY = lineBeforeFrom.y - (lineBeforeFrom.y % 1); // remove all after dot for proper compare\r\n\r\n if (orientation === \"horizontal\") {\r\n newDirection = (point1X > point2X) ? \"west\" : \"east\"\r\n }\r\n\r\n if (orientation === \"vertical\") {\r\n newDirection = (point1Y > point2Y) ? \"north\" : \"south\"\r\n }\r\n\r\n if ((point1X === point2X) && (point2Y === point3Y) && (point1X < pointBeforeX) && (newDirection === \"south\")\r\n || (point1X === point2X) && (point2Y === point3Y) && (point2X > cP.x) && (newDirection === \"north\")) {\r\n cornerMargins.fromTop = true\r\n }\r\n if ((point1Y === point2Y) && (point2X === point3X) && (point3Y > point2Y) && (point1X > point2X)\r\n ||(point1Y === point2Y) && (pointBeforeX === point1X) && (pointBeforeY < point1Y) && (point2X > point1X)) {\r\n cornerMargins.fromLeft = true\r\n }\r\n if ((point1Y === point2Y) && (point1X === pointBeforeX) && (pointBeforeY > point1Y) && (point1X > point2X)\r\n ||(point1Y === point2Y) && (point2X === point3X) && (point2Y > point3Y) && (point2X > point1X)) {\r\n cornerMargins.fromRight = true\r\n }\r\n if ((point1X === point2X) && (point2Y === point3Y) && (point1Y < point2Y) && (point3X > point2X)\r\n ||(point1X === point2X) && (point1Y === pointBeforeY) && (point1X > pointBeforeX) && (point1Y > point2Y)) {\r\n cornerMargins.fromBottom = true\r\n }\r\n\r\n return {\r\n facing: vDir + hDir,\r\n direction: {x: dirX, y: dirY},\r\n cornerMargins : cornerMargins,\r\n orientation : orientation,\r\n newDirection : newDirection\r\n }\r\n\r\n}\r\n\r\n/**\r\n * get line length number text from 2 point\r\n */\r\nexport const getLineLengthNumberTextV2 = (pointFrom, pointTo, parent, changeValueCallback) => {\r\n const midPoint = getMidPoint(pointFrom.getPosition(), pointTo.getPosition()),\r\n lineOrientation = getLineOrientation(pointFrom, pointTo),\r\n lineDirection = getLineDirection(pointFrom, pointTo),\r\n distance = getPointDistance(pointFrom, pointTo);\r\n\r\n let yOffset = 0,\r\n xOffset = 0;\r\n\r\n switch (lineOrientation) {\r\n case orientation.HORIZONTAL: {\r\n const ctx = sqftEventManager.getCtx();\r\n const fontSize = getFontSizeFromContext(ctx);\r\n yOffset = lineDirection === DIRECTIONS.WEST ? fontSize : -fontSize;\r\n\r\n break;\r\n }\r\n case orientation.VERTICAL: {\r\n xOffset = (lineDirection === DIRECTIONS.SOUTH ? + 10 : - 10);\r\n break;\r\n }\r\n //TODO rotation\r\n case orientation.NORTHWEST: { break; }\r\n case orientation.NORTHEAST: { break; }\r\n case orientation.SOUTHWEST: { break; }\r\n case orientation.SOUTHEAST: { break; }\r\n default: break;\r\n }\r\n\r\n let pos = {\r\n x: midPoint.x,\r\n y: midPoint.y,\r\n xOffset: xOffset,\r\n yOffset: yOffset,\r\n orientation: lineOrientation,\r\n betweenPoints: {\r\n pointFrom: pointFrom,\r\n pointTo: pointTo,\r\n }\r\n };\r\n\r\n let design = {\r\n shouldRenderFrameBorder: false,\r\n isLength: true,\r\n priority: EventManager.priorities.SEGMENT\r\n };\r\n\r\n return new NumberText(distance, pos, design, parent, changeValueCallback);\r\n}\r\n\r\n/**\r\n * get line length number text from 2 point\r\n */\r\nexport const getLineLengthNumberTextV2ForTheImage = (pointFrom, pointTo, parent, changeValueCallback) => {\r\n const midPoint = getMidPoint(pointFrom.getPosition(), pointTo.getPosition()),\r\n lineOrientation = getLineOrientation(pointFrom, pointTo),\r\n lineDirection = getLineDirection(pointFrom, pointTo),\r\n distance = getPointDistance(pointFrom, pointTo);\r\n\r\n let yOffset = 0,\r\n xOffset = 0;\r\n const ctx = sqftEventManager.getCtx();\r\n const fontSize = getFontSizeFromContext(ctx);\r\n\r\n switch (lineOrientation) {\r\n case orientation.HORIZONTAL: {\r\n yOffset = lineDirection === DIRECTIONS.WEST ? fontSize : fontSize;\r\n\r\n break;\r\n }\r\n case orientation.VERTICAL: {\r\n xOffset = (lineDirection === DIRECTIONS.SOUTH ? - 0 : 0);\r\n yOffset = lineDirection === DIRECTIONS.WEST ? fontSize : fontSize;\r\n\r\n break;\r\n }\r\n //TODO rotation\r\n case orientation.NORTHWEST: { break; }\r\n case orientation.NORTHEAST: { break; }\r\n case orientation.SOUTHWEST: { break; }\r\n case orientation.SOUTHEAST: { break; }\r\n default: break;\r\n }\r\n\r\n let pos = {\r\n x: midPoint.x,\r\n y: midPoint.y,\r\n xOffset: xOffset,\r\n yOffset: yOffset,\r\n orientation: lineOrientation,\r\n betweenPoints: {\r\n pointFrom: pointFrom,\r\n pointTo: pointTo,\r\n }\r\n };\r\n\r\n let design = {\r\n shouldRenderFrameBorder: false,\r\n isLength: true,\r\n eventsPriority: EventManager.priorities.IMAGE_LINE\r\n };\r\n\r\n return new NumberText(distance, pos, design, parent, changeValueCallback);\r\n}\r\n\r\nexport const getLineDirection = (pointA, pointB, shouldRound = false) => {\r\n let deltaX, deltaY;\r\n if (shouldRound) {\r\n deltaX = Math.round10(pointB.x, -1) - Math.round10(pointA.x, -1);\r\n deltaY = Math.round10(pointB.y, -1) - Math.round10(pointA.y, -1);\r\n } else {\r\n deltaX = pointB.x - pointA.x;\r\n deltaY = pointB.y - pointA.y;\r\n }\r\n\r\n if (deltaX > 0 && deltaY === 0) {\r\n return DIRECTIONS.EAST;\r\n } else if (deltaX < 0 && deltaY === 0) {\r\n return DIRECTIONS.WEST;\r\n } else if (deltaY > 0 && deltaX === 0) {\r\n return DIRECTIONS.SOUTH;\r\n } else if (deltaY < 0 && deltaX === 0) {\r\n return DIRECTIONS.NORTH;\r\n } else if (deltaX > 0 && deltaY < 0) {\r\n return DIRECTIONS.NORTHEAST;\r\n } else if (deltaX < 0 && deltaY < 0) {\r\n return DIRECTIONS.NORTHWEST;\r\n } else if (deltaX > 0 && deltaY > 0) {\r\n return DIRECTIONS.SOUTHEAST;\r\n } else if (deltaX < 0 && deltaY > 0) {\r\n return DIRECTIONS.SOUTHWEST;\r\n } else {\r\n return DIRECTIONS.UNDEFINED;\r\n }\r\n}\r\n\r\n/**\r\n * @Deprecated. Use getLineDirection instead\r\n */\r\nexport const getLineOrientation = (pointFrom, pointTo) => {\r\n let slope = getSlope(pointFrom, pointTo),\r\n xDiff = Math.round(Math.abs(pointTo.x - pointFrom.x)),\r\n yDiff = Math.round(Math.abs(pointTo.y - pointFrom.y));\r\n\r\n if (xDiff === 0) {\r\n return orientation.VERTICAL;\r\n } else if (yDiff === 0) {\r\n return orientation.HORIZONTAL;\r\n } else {\r\n if (slope >= 0) { //southeast and northwest\r\n if (pointTo.x > pointFrom.x) {\r\n return orientation.SOUTHEAST;\r\n } else {\r\n return orientation.NORTHWEST;\r\n }\r\n } else {\r\n if (pointTo.x > pointFrom.x) {\r\n return orientation.NORTHEAST;\r\n } else {\r\n return orientation.SOUTHWEST;\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport const getSlope = (pointFrom, pointTo) => {\r\n let x1 = pointFrom.x,\r\n x2 = pointTo.x,\r\n y1 = pointFrom.y,\r\n y2 = pointTo.y;\r\n\r\n return (y1 - y2) / (x1 - x2);\r\n}\r\n\r\nexport const getSlopeV2 = (pointFrom, pointTo) => {\r\n if (pointTo.x - pointFrom.x !== 0) {\r\n return (pointTo.y - pointFrom.y) / (pointTo.x - pointFrom.x);\r\n }\r\n return Number.MAX_VALUE;\r\n}\r\n\r\n/**\r\n * @param {{from: {x:number, y: number}, to: {x:number, y: number}}} line1\r\n * @param {{from: {x:number, y: number}, to: {x:number, y: number}}} line2\r\n * get angle between two lines https://www.geeksforgeeks.org/angle-between-a-pair-of-lines/\r\n */\r\nexport const getAngleBetweenTwoLines = (line1, line2) => {\r\n const slopeLine1 = getSlopeV2(line1.from, line1.to);\r\n const slopeLine2 = getSlopeV2(line2.from, line2.to);\r\n\r\n return getAngleBetweenTwoSlopes(slopeLine1, slopeLine2);\r\n}\r\n\r\nexport const getAngleBetweenTwoSlopes = (M1, M2) => {\r\n // Store the tan value of the angle\r\n let angle = Math.abs((M2 - M1) / (1 + M1 * M2));\r\n\r\n // Calculate tan inverse of the angle\r\n let ret = Math.atan(angle);\r\n\r\n // Convert the angle from\r\n // radian to degree\r\n\r\n return (ret * 180) / Math.PI;\r\n}\r\n\r\n/**\r\n * @param {{x:number, y: number}} point1\r\n * @param {{x:number, y: number}} point2\r\n */\r\nexport const getVectorByPoints = (point1, point2) => {\r\n return {x: point2.x - point1.x, y: point2.y - point1.y}\r\n}\r\n\r\n/**\r\n * @param {{from: {x:number, y: number}, to: {x:number, y: number}}} line1\r\n * @param {{from: {x:number, y: number}, to: {x:number, y: number}}} line2\r\n */\r\nexport const getAngleBetweenTwoLinesV2 = (line1, line2) => {\r\n const vector1 = getVectorByPoints(line1.to, line1.from);\r\n const vector2 = getVectorByPoints(line2.from, line2.to);\r\n //const pointDistance = Math.sqrt(Math.pow(vectorLine2.x - vectorLine1.x, 2) + Math.pow(vectorLine2.y - vectorLine1.y, 2));\r\n const cosAngle = (vector1.x + vector2.x + vector1.y + vector2.y)\r\n / Math.sqrt(Math.pow(vector1.x, 2) + Math.pow(vector1.y, 2))\r\n * Math.sqrt(Math.pow(vector2.x, 2) + Math.pow(vector2.y, 2));\r\n\r\n //todo\r\n //console.log(\"cosAngle\", cosAngle);\r\n return Math.acos (cosAngle)\r\n}\r\n\r\n/**\r\n * Calculates the angle ABC ()\r\n *\r\n * A first point, ex: {x: 0, y: 0}\r\n * C second point\r\n * B center point\r\n **/\r\nexport const getAngleBetween3Points = (A, B, C) => {\r\n let AB = Math.sqrt(Math.pow(B.x - A.x,2)+ Math.pow(B.y - A.y,2));\r\n let BC = Math.sqrt(Math.pow(B.x - C.x,2)+ Math.pow(B.y - C.y,2));\r\n let AC = Math.sqrt(Math.pow(C.x - A.x,2)+ Math.pow(C.y - A.y,2));\r\n const angleInRadians = Math.acos((BC*BC+AB*AB-AC*AC)/(2*BC*AB));\r\n\r\n return (angleInRadians * 180) / Math.PI\r\n}\r\n\r\nexport const getEdgeFeatureGroup = () => {\r\n if (!SqftStore.edgeFeatureGroups) {\r\n SqftStore.edgeFeatureGroups = {};\r\n }\r\n\r\n const visualizerType = document.kvConfig.visualizerType;\r\n\r\n // Check if the edgeFeatureGroup for the current visualizerType is already cached\r\n if (!SqftStore.edgeFeatureGroups[visualizerType]) {\r\n const mainNeeded = \"edge_profile\";\r\n const oppositeNeeded = \"center_island_edge\";\r\n const layout = getCurrentLayout(visualizerType);\r\n\r\n let featureGroup = layout.getSubPartFromQtCategories(mainNeeded);\r\n if (!featureGroup) {\r\n featureGroup = layout.getSubPartFromQtCategories(oppositeNeeded);\r\n }\r\n if (!featureGroup) {\r\n featureGroup = layout.parts[\"Countertop\"] && layout.parts[\"Countertop\"].edge\r\n ? { part: layout.parts[\"Countertop\"].edge }\r\n : null;\r\n }\r\n if (!featureGroup) {\r\n let fg = layout.getFeatureGroupByPartId(\"edge_profile\");\r\n if (fg) {\r\n featureGroup = {part: fg};\r\n }\r\n }\r\n\r\n // Cache the result for the current visualizerType\r\n SqftStore.edgeFeatureGroups[visualizerType] = featureGroup;\r\n }\r\n\r\n return SqftStore.edgeFeatureGroups[visualizerType];\r\n};\r\n\r\nexport const getEdgeFeatures = (edgeFeatureGroup) => {\r\n if (!edgeFeatureGroup) {\r\n edgeFeatureGroup = getEdgeFeatureGroup();\r\n }\r\n if (!edgeFeatureGroup) {\r\n return []\r\n }\r\n const state = store.getState();\r\n const {wizardIsActive} = state.wizardState;\r\n\r\n if (SqftStore.edgeFeatures.length === 0) {\r\n let navItems\r\n\r\n if (wizardIsActive) {\r\n navItems = getNavItemsFromTheWizard(edgeFeatureGroup);\r\n } else {\r\n const layout = getCurrentLayout();\r\n navItems = layout.designNavigationItems(edgeFeatureGroup,\r\n {},\r\n \"\",\r\n false,\r\n \"all\",\r\n [],\r\n { firstFeature: null, firstConditions: null },\r\n )\r\n }\r\n\r\n SqftStore.edgeFeatures = edgeFeatureGroup\r\n ? navItems\r\n : [];\r\n }\r\n\r\n return SqftStore.edgeFeatures\r\n};\r\n\r\n\r\n/**\r\n * countertopPartName will be center_island_countertop if it not exists in the room or at all in qtCategories the same\r\n * for center_island_countertop, it will return countertop if center_island_countertop not exists\r\n * @returns {[string, string]} countertopPartName, centerIslandPartName\r\n */\r\nexport const getCountertopPartNames = (intl = null) => {\r\n const state = store.getState();\r\n const {quotes, activeQuoteIndex} = state.quotesState;\r\n const fabricatorData = state.fabricatorState;\r\n const activeRoomId = state.sqftMenuState.activeRoomId;\r\n const cartItems = state.cartState.cartItems;\r\n intl = intl ? intl : workspace.intl;\r\n const roomName = getRoomName(activeQuoteIndex, cartItems, quotes, intl.messages, intl.locale, fabricatorData);\r\n void roomName; //todo remove\r\n const room = activeRoomId ? activeRoomId : document.kvConfig.visualizerType\r\n const layout = getCurrentLayout();\r\n\r\n let countertopNavItem = layout.getSubPartFromQtCategories(SHAPE_PART_ID.countertop, room);\r\n let centerIslandNavItem = layout.getSubPartFromQtCategories(SHAPE_PART_ID.center_island_countertop, room);\r\n\r\n if (!countertopNavItem && !centerIslandNavItem) {\r\n countertopNavItem = layout.getSubPartFromQtCategories(SHAPE_PART_ID.countertop);\r\n centerIslandNavItem = layout.getSubPartFromQtCategories(SHAPE_PART_ID.center_island_countertop);\r\n }\r\n\r\n //try to assign vanity countertop if countertop or center_island_countertop not exist\r\n if (!countertopNavItem && !centerIslandNavItem) {\r\n countertopNavItem = centerIslandNavItem = layout.getSubPartFromQtCategories(SHAPE_PART_ID.vanity_countertop);\r\n }\r\n\r\n const countertopPartName = countertopNavItem ? countertopNavItem.part.partId : SHAPE_PART_ID.center_island_countertop;\r\n const centerIslandPartName = centerIslandNavItem ? centerIslandNavItem.part.partId : SHAPE_PART_ID.countertop;\r\n\r\n return [countertopPartName, centerIslandPartName];\r\n}\r\n\r\n/**\r\n * Test if shape part ids are equal, parentPartId is added for the spacers\r\n * @param shape\r\n * @param testShape\r\n * @return {boolean}\r\n */\r\nexport const canShapeBeAutoShifted = (shape, testShape) => {\r\n const isTestShapePlacedOnTheFloor = getIsShapePlacedOnTheFloor(testShape);\r\n const isTestShapePlacedOnTheWall = getIsShapePlacedOnTheWall(testShape);\r\n\r\n return (shape.id !== testShape.id &&\r\n ((shape.partId === SHAPE_PART_ID.upper_cabinet_boxes && isTestShapePlacedOnTheWall)\r\n || (shape.parentPartId === SHAPE_PART_ID.upper_cabinet_boxes && isTestShapePlacedOnTheWall)\r\n || (shape.partId === SHAPE_PART_ID.lower_cabinet_boxes && isTestShapePlacedOnTheFloor)\r\n || (shape.parentPartId === SHAPE_PART_ID.lower_cabinet_boxes && isTestShapePlacedOnTheFloor)\r\n || (shape.partId === SHAPE_PART_ID.tall_cabinet_boxes && isTestShapePlacedOnTheFloor)\r\n || (shape.parentPartId === SHAPE_PART_ID.tall_cabinet_boxes && isTestShapePlacedOnTheFloor)))\r\n}\r\n\r\nexport const getIsShapePlacedOnTheFloor = (shape) => {\r\n return (shape.partId === SHAPE_PART_ID.tall_cabinet_boxes\r\n || shape.parentPartId === SHAPE_PART_ID.tall_cabinet_boxes\r\n || shape.partId === SHAPE_PART_ID.lower_cabinet_boxes\r\n || shape.parentPartId === SHAPE_PART_ID.lower_cabinet_boxes\r\n)}\r\n\r\nexport const getIsShapePlacedOnTheWall = (shape) => {\r\n return (shape.partId === SHAPE_PART_ID.upper_cabinet_boxes\r\n || shape.parentPartId === SHAPE_PART_ID.upper_cabinet_boxes\r\n)}\r\n","import * as types from \"./actionTypes\";\r\nimport {getCurrentLayout} from \"../bvcomponents/appLayout\";\r\nimport {getBvFeatures} from \"../api/server-api\";\r\nimport {IS_QKB_UI} from \"../config\";\r\nimport {\r\n changeWizardValuesToUseNewGroups,\r\n getConflictingWizardSteps, getNextWizardSteps,\r\n getWizardVisualizerType, isSameVisualizerWizard, switchCartItemsToNewWizardGroups\r\n} from \"../bvcomponents/look/lookNavigation/lookMain/lookWizard/lookWizardFunctions2\";\r\nimport {getUpdatedAllWizardValues} from \"../reducers/wizardReducer\";\r\nimport {changeAllCartItems} from \"./shoppingCartFunctions\";\r\nimport {navItemIsExcluded} from \"../bvcomponents/look/lookNavigation/lookMain/lookWizard/lookWizardFunctions\";\r\n\r\nexport const setWizardIsActive = (wizardIsActive, visualizerType) => ({\r\n type: types.SET_WIZARD_IS_ACTIVE,\r\n payload: {wizardIsActive, visualizerType}\r\n});\r\n\r\nexport const setWizardConfig = (wizardConfig) => ({\r\n type: types.SET_WIZARD_CONFIG,\r\n payload: {wizardConfig}\r\n});\r\n\r\nexport const setWizardList = (wizardList) => ({\r\n type: types.SET_WIZARD_LIST,\r\n payload: {wizardList}\r\n});\r\n\r\nexport const setWizardActiveItem = (wizardActiveItem, quoteIndex = null) => {\r\n return (dispatch, getState) => {\r\n const {quotesState} = getState();\r\n\r\n dispatch({\r\n type: types.SET_WIZARD_ACTIVE_ITEM,\r\n payload: {\r\n wizardActiveItem,\r\n quoteIndex: Number.isInteger(quoteIndex) ? quoteIndex : quotesState.activeQuoteIndex,\r\n }\r\n })\r\n }\r\n};\r\n\r\nexport const setWizardShowFeatureSection = (wizardShowFeatureSection) => ({\r\n type: types.SET_WIZARD_SHOW_FEATURE_SECTION,\r\n payload: {wizardShowFeatureSection}\r\n});\r\n\r\nexport const setWizardActiveStep = (wizardActiveStep, currentWizardItem = null, currentQuoteIndex = null) => {\r\n return (dispatch, getState) => {\r\n const {quotesState, wizardState} = getState();\r\n\r\n const quoteIndex = Number.isInteger(currentQuoteIndex) ? currentQuoteIndex : quotesState.activeQuoteIndex;\r\n const wizardItem = currentWizardItem || wizardState.wizardActiveItem;\r\n\r\n let wizardConflictingSteps = wizardState.wizardConflictingSteps;\r\n let newWizValues = Object.assign({}, wizardState.wizardSelectedValues);\r\n if (!IS_QKB_UI) {\r\n Object.keys(wizardState.wizardSelectedValues).reverse().forEach(selectedKeyNumber => { // erase conflicting selected steps!\r\n if (selectedKeyNumber > wizardActiveStep) {\r\n delete newWizValues[selectedKeyNumber]\r\n }\r\n });\r\n }\r\n if (wizardState.wizardConflictingSteps.length) {\r\n wizardConflictingSteps = [];\r\n }\r\n let allWizardsValues = wizardState.allWizardsValues;\r\n if (wizardItem) {\r\n allWizardsValues = wizardState.allWizardsValues.map(wizObject => {\r\n if (wizObject.wizardItemId === wizardItem.id && wizObject.quoteIndex === quoteIndex\r\n && isSameVisualizerWizard(wizObject)) {\r\n wizObject.lastVisitedStep = wizardActiveStep // keep it up to date to be able to restore\r\n if (wizardState.wizardConflictingSteps.length) {\r\n wizObject.wizardSelectedValues = Object.assign({}, newWizValues)\r\n }\r\n }\r\n return wizObject\r\n })\r\n }\r\n\r\n dispatch({\r\n type: types.SET_WIZARD_ACTIVE_STEP,\r\n payload: {\r\n wizardActiveStep,\r\n wizardSelectedValues: newWizValues,\r\n wizardConflictingSteps,\r\n allWizardsValues,\r\n quoteIndex,\r\n }\r\n })\r\n }\r\n}\r\n\r\nexport const clearWizardSelectedValue = (neededStep, currentWizardItem = null, currentQuoteIndex = null) => {\r\n return (dispatch, getState) => {\r\n const {quotesState, wizardState} = getState();\r\n\r\n const quoteIndex = Number.isInteger(currentQuoteIndex) ? currentQuoteIndex : quotesState.activeQuoteIndex;\r\n const wizardItem = currentWizardItem || wizardState.wizardActiveItem;\r\n\r\n let newWizValues = Object.assign({}, wizardState.wizardSelectedValues);\r\n Object.keys(wizardState.wizardSelectedValues).forEach(selectedKeyNumber => { // erase conflicting selected steps!\r\n if (+selectedKeyNumber === +neededStep) {\r\n delete newWizValues[selectedKeyNumber]\r\n }\r\n });\r\n let allWizardsValues = wizardState.allWizardsValues;\r\n if (wizardItem) {\r\n allWizardsValues = wizardState.allWizardsValues.map(wizObject => {\r\n if (wizObject.wizardItemId === wizardItem.id && wizObject.quoteIndex === quoteIndex\r\n && isSameVisualizerWizard(wizObject)) {\r\n if (wizardState.wizardConflictingSteps.length) {\r\n wizObject.wizardSelectedValues = Object.assign({}, newWizValues)\r\n }\r\n }\r\n return wizObject\r\n })\r\n }\r\n\r\n dispatch({\r\n type: types.SET_WIZARD_SELECTED_VALUES,\r\n payload: {\r\n wizardSelectedValues: newWizValues,\r\n allWizardsValues,\r\n quoteIndex,\r\n wizardConflictingSteps: wizardState.wizardConflictingSteps\r\n }\r\n })\r\n }\r\n}\r\n\r\nexport const setWizardSelectedValues = (wizardSelectedValues, direct = false, wizardItem = null, currentQuoteIndex = null) => {\r\n return (dispatch, getState) => {\r\n const {quotesState, wizardState, cartState, fabricatorState} = getState();\r\n const {cartItems} = cartState;\r\n const wizardActiveItem = wizardItem || wizardState.wizardActiveItem;\r\n const quoteIndex = Number.isInteger(currentQuoteIndex) ? currentQuoteIndex : quotesState.activeQuoteIndex;\r\n\r\n let wizardConflictingSteps = wizardState.wizardConflictingSteps;\r\n\r\n if (!direct && Object.keys(wizardSelectedValues).length === 1) {\r\n const currentStep = Object.keys(wizardSelectedValues)[0];\r\n if (currentStep) {\r\n const wizardGroup = wizardSelectedValues[currentStep].wizardGroup;\r\n const selectedFeature = wizardSelectedValues[currentStep].selectedFeature;\r\n if (wizardGroup && wizardGroup.mergedGroups && selectedFeature) {\r\n const realWizardGroup = wizardGroup.mergedGroups.find(wizG => !navItemIsExcluded({part: selectedFeature}, wizG));\r\n if (realWizardGroup) {\r\n if ((realWizardGroup.id !== wizardSelectedValues[currentStep].wizardGroup.id)) {\r\n wizardSelectedValues[currentStep].wizardGroup = Object.assign({}, wizardGroup, {\r\n id: realWizardGroup.id\r\n });\r\n // console.log(\"accurateWizardGroup!\", wizardSelectedValues[currentStep].wizardGroup);\r\n }\r\n } else {\r\n console.log(\"how is that possible? wizardGroup.mergedGroups\", wizardGroup.mergedGroups, selectedFeature);\r\n }\r\n }\r\n }\r\n }\r\n\r\n let newWizValues = direct\r\n ? Object.assign({}, wizardSelectedValues)\r\n : Object.assign({}, wizardState.wizardSelectedValues, wizardSelectedValues);\r\n\r\n // console.log(\"newWizValues\", newWizValues);\r\n\r\n if (IS_QKB_UI && fabricatorState.settings.checkout && cartItems.length && !direct\r\n && wizardSelectedValues && Object.keys(wizardSelectedValues).length === 1) {\r\n\r\n const currentStep = +Object.keys(wizardSelectedValues)[0];\r\n const commonObject = {wizardActiveItem, quoteIndex, wizardSelectedValues};\r\n let newWizardSteps = getNextWizardSteps(wizardActiveItem, currentStep, newWizValues);\r\n\r\n // console.log(\"newWizardSteps\", newWizardSteps);\r\n // here we replace cartItems to match new selections! to prevent conflicting\r\n let {updatedWizardValues, shouldReassignValues} = changeWizardValuesToUseNewGroups(newWizValues, newWizardSteps);\r\n if (shouldReassignValues) {\r\n newWizValues = updatedWizardValues;\r\n // create new steps according to new values\r\n newWizardSteps = getNextWizardSteps(wizardActiveItem, currentStep, newWizValues);\r\n // console.log(\"newWizardSteps2!\", newWizardSteps);\r\n }\r\n // here we replace cartItems to match new selections! to prevent conflicting\r\n let {newCartItems, shouldReassign} = switchCartItemsToNewWizardGroups(\r\n newWizardSteps,\r\n commonObject,\r\n cartItems,\r\n );\r\n if (shouldReassign) {\r\n dispatch(changeAllCartItems([...newCartItems]))\r\n }\r\n\r\n wizardConflictingSteps = getConflictingWizardSteps(\r\n newWizValues,\r\n commonObject,\r\n newCartItems,\r\n newWizardSteps,\r\n );\r\n }\r\n\r\n if (wizardActiveItem) {\r\n // console.log(\"wizardConflictingSteps\", action.payload.wizardConflictingSteps);\r\n // this works for QKB UI only for now, we are not using it on lixil\r\n const allWizardsValues = wizardConflictingSteps.length // do not change them to be able to restore when wizard is closed\r\n ? wizardState.allWizardsValues\r\n : getUpdatedAllWizardValues(wizardState, quoteIndex, wizardActiveItem.id, newWizValues);\r\n\r\n dispatch({\r\n type: types.SET_WIZARD_SELECTED_VALUES,\r\n payload: {\r\n quoteIndex,\r\n wizardSelectedValues: newWizValues,\r\n allWizardsValues,\r\n wizardConflictingSteps\r\n }\r\n });\r\n\r\n return;\r\n }\r\n\r\n dispatch({\r\n type: types.SET_WIZARD_SELECTED_VALUES,\r\n payload: {\r\n wizardSelectedValues: newWizValues,\r\n wizardConflictingSteps,\r\n // direct,\r\n quoteIndex,\r\n // wizardActiveItem: wizardItem || wizardState.wizardActiveItem,\r\n // fabricatorState,\r\n // cartItems: cartState.cartItems\r\n }\r\n })\r\n }\r\n}\r\n\r\nexport const setAllWizardSelectedValues = (wizardSelectedValues, quoteIndex, wizardItemId) => ({\r\n type: types.SET_ALL_WIZARD_SELECTED_VALUES,\r\n payload: {wizardSelectedValues, quoteIndex, wizardItemId}\r\n});\r\n\r\nconst getMissingWizardValuesFeatures = async (compressedAllWizardsValues) => {\r\n\r\n const missingFeatures = {};\r\n\r\n // 1) find missing features;\r\n compressedAllWizardsValues.forEach(wizardObject => {\r\n\r\n const visualizerType = getWizardVisualizerType(wizardObject, true);\r\n const layout = getCurrentLayout(visualizerType);\r\n\r\n if (!missingFeatures[visualizerType]) {\r\n missingFeatures[visualizerType] = [];\r\n }\r\n\r\n Object.keys(wizardObject.wizardSelectedValues).forEach(stepIndex => {\r\n const compressedFeature = wizardObject.wizardSelectedValues[stepIndex].selectedFeature;\r\n if (compressedFeature) {\r\n const featureGroup = layout.getFeatureGroupByPartId(compressedFeature.partId);\r\n if (!featureGroup && !missingFeatures[visualizerType].includes(compressedFeature.dbFeatureId)) {\r\n missingFeatures[visualizerType].push(compressedFeature.dbFeatureId);\r\n return\r\n }\r\n const loadedFeature = layout.getLoadedFeatureById(compressedFeature.dbFeatureId, featureGroup);\r\n if (!loadedFeature && !missingFeatures[visualizerType].includes(compressedFeature.dbFeatureId)) {\r\n missingFeatures[visualizerType].push(compressedFeature.dbFeatureId);\r\n }\r\n }\r\n });\r\n })\r\n\r\n // 2) get missing features from the backend;\r\n for (let visualizerType of Object.keys(missingFeatures)) {\r\n if (missingFeatures[visualizerType].length) {\r\n // loaderEnable();\r\n const featuresFromJob = await getBvFeatures(missingFeatures[visualizerType]);\r\n if (featuresFromJob && featuresFromJob.data) {\r\n // console.log(\"featuresFromJob\", featuresFromJob.data);\r\n const layout = getCurrentLayout(visualizerType);\r\n layout.loadNewFeatures(featuresFromJob.data);\r\n }\r\n // loaderDisable();\r\n }\r\n }\r\n return Promise.resolve()\r\n}\r\nconst getRestoredWizardValues = (compressedAllWizardsValues, wizardList) => {\r\n\r\n // 3) now we can set the values\r\n let allWizardsValues = [];\r\n compressedAllWizardsValues.forEach(wizardObject => {\r\n let wizardValues = {};\r\n const wizardItem = wizardList.find(wizItem => wizItem.id === wizardObject.wizardItemId);\r\n if (!wizardItem) {\r\n console.log(\"hmmm, it looks like the wizard was deleted, but it was active in the job\", wizardObject);\r\n return\r\n }\r\n\r\n const visualizerType = getWizardVisualizerType(wizardObject, true);\r\n const layout = getCurrentLayout(visualizerType);\r\n\r\n Object.keys(wizardObject.wizardSelectedValues).forEach(stepIndex => {\r\n\r\n const selectedWizardObject = Object.assign({}, wizardObject.wizardSelectedValues[stepIndex]);\r\n\r\n //3.1) copy all other values\r\n wizardValues[stepIndex] = selectedWizardObject.wizardGroup ? Object.assign({}, selectedWizardObject, {\r\n wizardGroup: Object.assign({}, selectedWizardObject.wizardGroup, {\r\n mergedGroups: selectedWizardObject.wizardGroup.mergedGroups ? [] : null\r\n })\r\n }) : Object.assign({}, selectedWizardObject)\r\n\r\n //3.2) update wizardGroup with all excluded features\r\n if (selectedWizardObject.wizardGroup) {\r\n const realWizardGroup = wizardItem.wizardGroups.find(wizGroup => wizGroup.id === selectedWizardObject.wizardGroup.id);\r\n if (realWizardGroup) {\r\n wizardValues[stepIndex].wizardGroup = realWizardGroup;\r\n } else {\r\n console.log(\"wizard was changed, wizard group not found\", selectedWizardObject.wizardGroup);\r\n wizardValues[stepIndex] = {};\r\n }\r\n if (selectedWizardObject.wizardGroup.mergedGroups && realWizardGroup) {\r\n selectedWizardObject.wizardGroup.mergedGroups.forEach(compressedWG => {\r\n const foundWg = wizardItem.wizardGroups.find(wizGroup => {\r\n return wizGroup.id === compressedWG.id && wizGroup.groupName === compressedWG.groupName\r\n });\r\n if (foundWg) {\r\n if (!wizardValues[stepIndex].wizardGroup.mergedGroups) {\r\n wizardValues[stepIndex].wizardGroup.mergedGroups = [];\r\n }\r\n wizardValues[stepIndex].wizardGroup.mergedGroups.push(Object.assign({}, foundWg, {mergedGroups: null})); // to prevent circular\r\n } else {\r\n console.log(\"WIZARD WAS CHANGED, merged wizard group can't be found!\", );\r\n }\r\n })\r\n }\r\n }\r\n\r\n //3.3) update selectedFeature\r\n if (selectedWizardObject.selectedFeature) {\r\n const featureGroup = layout.getFeatureGroupByPartId(selectedWizardObject.selectedFeature.partId);\r\n wizardValues[stepIndex].selectedFeature = featureGroup\r\n ? layout.getLoadedFeatureById(selectedWizardObject.selectedFeature.dbFeatureId, featureGroup)\r\n : null;\r\n }\r\n });\r\n allWizardsValues.push(Object.assign({}, wizardObject, {wizardSelectedValues: wizardValues}));\r\n })\r\n console.log(\"restoring allWizardsValues:\", allWizardsValues);\r\n return allWizardsValues\r\n}\r\n\r\nexport const updateAllWizardValues = (allWizardsValues) => ({\r\n type: types.RESTORE_ALL_WIZARD_SELECTED_VALUES,\r\n payload: {allWizardsValues}\r\n})\r\n\r\nexport const restoreAllWizardSelectedValues = (compressedAllWizardsValues) => {\r\n return async (dispatch, getState) => {\r\n const {wizardState} = getState();\r\n await getMissingWizardValuesFeatures(compressedAllWizardsValues);\r\n const valuesToRestore = getRestoredWizardValues(compressedAllWizardsValues, wizardState.wizardList);\r\n dispatch(updateAllWizardValues(valuesToRestore));\r\n }\r\n}\r\n\r\nexport const setWizardMissingFeatures = (groupName = \"\", wizardMissingFeatures = []) => ({\r\n type: types.SET_WIZARD_MISSING_FEATURES,\r\n payload: {\r\n groupName,\r\n wizardMissingFeatures\r\n }\r\n});\r\n\r\nexport const setWizardConflictPopupOpened = (wizardConflictPopupOpened) => ({\r\n type: types.SET_WIZARD_CONFLICT_POPUP_OPENED,\r\n payload: {wizardConflictPopupOpened}\r\n});\r\n\r\nexport const setWizardConflictSteps = (wizardConflictingSteps) => ({\r\n type: types.SET_WIZARD_CONFLICT_STEPS,\r\n payload: {wizardConflictingSteps}\r\n});\r\n\r\nexport const setWizardSqftCartItems = (wizardSqftCartItems) => ({\r\n type: types.SET_WIZARD_SQFT_CART_ITEMS,\r\n payload: {wizardSqftCartItems}\r\n});\r\n\r\nexport const setWizardAllowSkipDoneSteps = (wizardAllowSkipDoneSteps) => ({\r\n type: types.SET_WIZARD_ALLOW_SKIP_DONE_STEPS,\r\n payload: {wizardAllowSkipDoneSteps}\r\n});\r\n","import React from \"react\";\r\n\r\nexport const SaveIcon = () => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )\r\n};\r\n\r\nexport const ProductsIconAnimated = () => (\r\n \r\n icon-forklift\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n);\r\n\r\nexport const TimingIconAnimated = () => (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n);\r\n\r\nexport const EditIcon = (props) => (\r\n \r\n \r\n \r\n);\r\n\r\nexport const EyeBallIcon = (props) => (\r\n \r\n icons/EyeEnabledOn\r\n Created with Sketch.\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n);\r\n\r\nexport const ScreenshotIcon = (props) => (\r\n \r\n icon-screenshot@2x\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n);\r\n\r\nexport const PlusIcon = (props) => (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n);\r\n\r\nexport const LookLayoutIcon = (props) => (\r\n \r\n \r\n \r\n);\r\n\r\n\r\nexport const LookExitIcon = (props) => (\r\n \r\n \r\n \r\n);\r\n\r\nexport const LookCoBrowseIcon = (props) => (\r\n \r\n \r\n \r\n \r\n \r\n);\r\n\r\nexport const LookShareIcons = {\r\n facebook: ,\r\n pinterest: (\r\n \r\n \r\n \r\n \r\n \r\n ),\r\n // twitter: ,\r\n};\r\n\r\nexport const LookExpandIcon = () => (\r\n \r\n);\r\n\r\nexport const LookMinimizeIcon = () => (\r\n \r\n);\r\n\r\nexport const LookCartIcon = () => (\r\n \r\n);\r\n\r\nexport const LookRoomIdeasIcon = () => (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n);\r\n\r\nexport const Look3DIcon = () => (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n);\r\n\r\nexport const LookAugmentRealityIcon = () => (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n);\r\n\r\nexport const LookIconHover = () => (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n);\r\n\r\nexport const LookIconNavigate = () => (\r\n \r\n \r\n \r\n \r\n);\r\n\r\nexport const LookIntroIcon = () => (\r\n \r\n \r\n \r\n \r\n)\r\n\r\nexport const groheIcon = (\r\n \r\n {/**/}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n)\r\n\r\nexport const AmericanStandardIcon = (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n)\r\n\r\nexport const GroheListIcon = () => (\r\n \r\n)\r\n\r\nexport const GroheFilterIcon = () => (\r\n \r\n \r\n \r\n)\r\n\r\nexport const GroheGridIcon = () => (\r\n \r\n)\r\n\r\nexport const GroheArchitectureIcon = () => (\r\n \r\n \r\n \r\n)\r\n\r\nexport const GroheLockIcon = () => (\r\n // \r\n \r\n // />\r\n // \r\n)\r\n\r\nexport const GroheLockIconSmall = () => (\r\n // \r\n \r\n // \r\n)\r\nexport const GroheNoteAddIcon = () => (\r\n \r\n \r\n \r\n)\r\n\r\nexport const GroheBoxIcon = () => (\r\n \r\n \r\n \r\n \r\n \r\n)\r\n\r\nexport const GroheVehicleIcon = () => (\r\n \r\n)\r\n\r\nexport const GroheDownloadIcon = () => (\r\n \r\n \r\n \r\n \r\n \r\n \r\n)\r\n\r\nexport const GroheSQFTIcon = () => (\r\n \r\n \r\n \r\n)\r\nexport const GroheInkPenIcon = () => (\r\n \r\n \r\n \r\n)\r\n","import isEqual from \"lodash/isEqual\";\r\n\r\nimport {getFeatureIsActive, getFeatureParent, getSkuWithoutDot, isInStock} from \"./lookFunctions2\";\r\nimport {LOOK_NAVIGATION_LIST_TYPES, LOOK_WALLS_ONLY, METADATA} from \"../core/constants\";\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\nimport {getFeatureCost, getFeatureIsLocked, isIframe} from \"../../../misc/helpers\";\r\nimport store from \"../../../store\";\r\nimport {getFilterGroupValue, getFilterGroupValues} from \"../../../misc/utils\";\r\nimport {getFeatureOptions} from \"./lookFunctions\";\r\nimport {Vanity} from \"../core/parts/vanity\";\r\nimport {setLookWallsApplyTo} from \"../../../actions/lookFunctions\";\r\nimport {CABINET_GROUP, COUNTERTOP_GROUP, EDGE_GROUP} from \"../../kvComponent/core/constants\";\r\nimport {\r\n setCabinetsApplyTo, setCabinetsApplyToBathroom,\r\n setCountertopsApplyTo,\r\n setCountertopsApplyToBathroom, setEdgesApplyTo, setApplyToCommon\r\n} from \"../../../actions/navigationFunctions\";\r\nimport CountertopSwitchers from \"../../kvComponent/navigation/countertopSwitchers\";\r\nimport CabinetSwitchers from \"../../kvComponent/navigation/cabinetSwitchers\";\r\nimport Config, {getCommonVisualizerType} from \"../../../config\";\r\nimport {\r\n CABINET_GROUP_BATHROOM,\r\n COUNTERTOP_GROUP_BATHROOM,\r\n HANDLES_GROUP_BATHROOM, SHOWER_FLOOR_GROUP_BATHROOM\r\n} from \"../../bvSceneComponent/core/constants\";\r\nimport {loaderDisable, loaderEnable} from \"../../ui/loaderView\";\r\nimport {updateCanvasCount} from \"../../../actions/actionFunctions\";\r\nimport {getBvGroupFeatures} from \"../../../api/server-api\";\r\nimport {getAdditionalFeaturesOnScroll} from \"../../../api/look-api\";\r\n\r\nconst getFeaturePropertyToSort = (navItem, property) => {\r\n if (property === \"name\") {\r\n return navItem.part.getFeatureName()\r\n }\r\n if (property === \"SortPositionNum\") {\r\n return navItem.part.metaData[property] || 99999;\r\n }\r\n return navItem.part[property];\r\n}\r\n\r\nconst getNavItemsSortedByProperty = (navItems, property, property2) => {\r\n const order = \"asc\";\r\n // console.log(\"navItems - navItems\", navItems);\r\n navItems = navItems.sort((a,b) => {\r\n let prop1 = getFeaturePropertyToSort(a, property);\r\n let prop2 = getFeaturePropertyToSort(b, property);\r\n let prop3 = getFeaturePropertyToSort(a, property2);\r\n let prop4 = getFeaturePropertyToSort(b, property2);\r\n return order === \"asc\"\r\n ? (prop1 > prop2) ? 1 : (prop1 < prop2) ? -1 : (prop3 > prop4) ? 1 : (prop3 < prop4) ? -1 : 0\r\n : (prop1 < prop2) ? 1 : (prop1 > prop2) ? -1 : (prop3 < prop4) ? 1 : (prop3 > prop4) ? -1 : 0\r\n })\r\n // console.log(\"navItems\", navItems);\r\n return navItems\r\n};\r\n\r\n/**\r\n * sorts navItems\r\n * @param navItems {[object]}\r\n * @param isQuotingTool {boolean}\r\n * @returns {[object]}\r\n */\r\nexport const getSortedNavItems = (navItems, isQuotingTool = false) => {\r\n const {fabricatorState, userState} = store.getState();\r\n const {isPhoneNumberValidated} = userState;\r\n const fabricatorSettings = fabricatorState.settings;\r\n\r\n if ((fabricatorSettings.leadCapture && !(document.kvConfig.isBackend && document.kvConfig.jobId && document.kvConfig.canSaveQuote)) && !isPhoneNumberValidated) {\r\n const unLockedFeatures = navItems\r\n .filter(navItem => !getFeatureIsLocked(navItem.part))\r\n .map(navItem => {\r\n navItem.part.featurePrice = getFeatureCost(navItem.part, 1);\r\n return navItem\r\n })\r\n const lockedFeatures = navItems\r\n .filter(navItem => getFeatureIsLocked(navItem.part))\r\n .map(navItem => {\r\n navItem.part.featurePrice = getFeatureCost(navItem.part, 1);\r\n return navItem\r\n })\r\n navItems = fabricatorSettings.showPricing ? [\r\n ...getNavItemsSortedByProperty(unLockedFeatures, \"featurePrice\", \"name\"),\r\n ...getNavItemsSortedByProperty(lockedFeatures, \"featurePrice\", \"name\")\r\n ] : [...unLockedFeatures, ...lockedFeatures];\r\n } else if (navItems[0] && navItems[0].part.partId === \"crown_molding\" && navItems[0].part.getParent().sortNavigationItems) {\r\n navItems = navItems[0].part.getParent().sortNavigationItems(navItems);\r\n } else if (fabricatorSettings.showPricing && !fabricatorState.hideCheckoutBreakdownCost && !fabricatorState.hidePricesFromUser) {\r\n navItems = navItems.map(navItem => {\r\n navItem.part.featurePrice = getFeatureCost(navItem.part, 1);\r\n return navItem\r\n })\r\n navItems = getNavItemsSortedByProperty(navItems, \"featurePrice\", \"name\")\r\n } else {\r\n const propertyToSort = navItems.some(navItem => navItem.part.metaData[\"SortPositionNum\"]) ? \"SortPositionNum\" : \"name\";\r\n navItems = getNavItemsSortedByProperty(navItems, propertyToSort, \"\");\r\n navItems = navItems.sort((a, b) => isInStock(b.part) - isInStock(a.part));\r\n if (!isQuotingTool && navItems.some(navItem => navItem.part.useMatchesFailedNavigation)) {\r\n navItems = getNavItemsSortedByProperty(navItems, \"matchesMetaFailed\");\r\n }\r\n }\r\n if (isQuotingTool) {\r\n // navItems = getNavItemsSortedByProperty(navItems, \"notAvailableInVisualizer\", \"_customDisplayName\")\r\n const inVisFeatures = navItems.filter(navFeature => !navFeature.part.notAvailableInVisualizer);\r\n const notInVisFeatures = navItems.filter(navFeature => navFeature.part.notAvailableInVisualizer);\r\n navItems = [\r\n ...inVisFeatures,\r\n // ...getNavItemsSortedByProperty(notInVisFeatures, \"featurePrice\", \"name\")\r\n ...notInVisFeatures\r\n ];\r\n }\r\n return navItems\r\n};\r\n\r\n/**\r\n * reorder features, places selected and similar walls on the beginning\r\n * @param navItems {[object]}\r\n * @param lookActiveFeature {featureInterface}\r\n * @param lookActiveCategory {string}\r\n * @param featureGroup {featureGroupInterface}\r\n * @param isQuotingTool {boolean}\r\n * @param needToReplaceActiveFeature {boolean}\r\n * @returns {[object]}\r\n */\r\nexport const getReorderedItems = (\r\n navItems,\r\n lookActiveFeature,\r\n lookActiveCategory,\r\n featureGroup,\r\n isQuotingTool,\r\n needToReplaceActiveFeature = true\r\n) => {\r\n\r\n navItems = navItems.filter(feature => feature)//todo not sure why, but we in some cases have [undefined, item, item, item, undefined, undefined] etc... //need to fix this\r\n\r\n // let activeNavItem, activeNavItemIndex;\r\n const parentFeatureGroup = featureGroup || getFeatureParent(lookActiveFeature, lookActiveCategory);\r\n if (!parentFeatureGroup) {\r\n return navItems\r\n }\r\n const navItemsToChange = [];\r\n if (needToReplaceActiveFeature) {\r\n const activeNavItem = navItems.find(navItem => {\r\n if (!navItem) {\r\n return false\r\n }\r\n return getFeatureIsActive(navItem.part, lookActiveFeature, lookActiveCategory, featureGroup)\r\n })\r\n if (activeNavItem) {\r\n navItemsToChange.push(activeNavItem);\r\n }\r\n }\r\n const isWalls = LOOK_WALLS_ONLY.includes(parentFeatureGroup.partId);\r\n if (isWalls) {\r\n const layout = getCurrentLayout();\r\n const stoneFeatures = layout.getStonesActiveFeatures();\r\n // console.log(\"stoneFeatures\", stoneFeatures);\r\n\r\n stoneFeatures.forEach(cartItem => { // yes, the getStonesActiveFeatures method returns cat item objects for some reason :facepalm:\r\n if (cartItem && cartItem.cartFeature) {\r\n const stoneName = cartItem.cartFeature.getSplittedFeatureName();\r\n if (!navItemsToChange.some(navItem => navItem.part.getSplittedFeatureName() === stoneName)) {\r\n const existingInNavItems = navItems.find(navItem => navItem.part.getSplittedFeatureName() === stoneName);\r\n if (existingInNavItems) {\r\n navItemsToChange.unshift(existingInNavItems) // push to beginning\r\n }\r\n }\r\n }\r\n })\r\n }\r\n // console.log(\"navItemsToChange\", navItemsToChange);\r\n const sorted = getSortedNavItems(navItems, isQuotingTool);\r\n navItemsToChange.forEach((nItemToChange) => {\r\n const currentIndex = sorted.findIndex(navItem => navItem.part.dbFeature.id === nItemToChange.part.dbFeature.id)\r\n if (currentIndex > -1) {\r\n sorted.splice(currentIndex, 1);\r\n sorted.splice(0, 0, nItemToChange);\r\n }\r\n });\r\n // console.log(\"sorted\", sorted);\r\n return sorted\r\n\r\n};\r\n\r\n/**\r\n * Checks if list feature is currently active\r\n * @param navItems {[navItemInterface]}\r\n // * @param filterGroups {[filterGroupInterface]}\r\n * @returns {[navItemInterface]}\r\n */\r\nexport const getReplacedNavItemsWithUnlockedFeatures = (navItems) => {\r\n const {pricingLocked} = pricingIsLocked();\r\n if (!pricingLocked) {\r\n return navItems\r\n }\r\n\r\n return navItems.map(navItem => {\r\n if (!getFeatureIsLocked(navItem.part)) {\r\n return navItem\r\n }\r\n // const colorOptions = getFeatureOptions(navItem.part, filterGroups); // removed to optimize running getNavItems function multiple times\r\n // if needed - we can pass navItems to this function\r\n if (!navItem.colorOptions) {\r\n return navItem\r\n }\r\n const unlockedOption = navItem.colorOptions.find(option => {\r\n if (!option.feature) {\r\n return false\r\n }\r\n if (option.feature.dbFeature.id === navItem.part.dbFeature.id) {\r\n return false\r\n }\r\n return !getFeatureIsLocked(option.feature)\r\n })\r\n if (unlockedOption && !navItems.some(nItem => nItem.part.dbFeature.id === navItem.part.dbFeature.id)) {\r\n return {part: unlockedOption.feature}\r\n }\r\n return navItem\r\n })\r\n}\r\n\r\n/**\r\n * Checks if list feature is currently active\r\n * @param navItems {[navItemInterface]}\r\n * @returns {array}\r\n */\r\nexport const getDesignRecommendedNavItems = (navItems) => {\r\n\r\n const {filterState, bathroomVisualizerState} = store.getState();\r\n const {filterGroups} = filterState;\r\n const {activePreset} = bathroomVisualizerState;\r\n\r\n const desRecFilterGroup = filterGroups.find(group => group.name === \"Designer Recommended\");\r\n\r\n if (!desRecFilterGroup) {\r\n return []\r\n }\r\n\r\n return navItems.filter(navItem => {\r\n // if (navItem.part.dbFeature.sharedFeatureName === \"23486BEA\") {\r\n // debugger;//eslint-disable-line\r\n // }\r\n const desRecFeature = getFilterGroupValues(navItem.part, desRecFilterGroup);\r\n const desRecColorFeatures = getFeatureOptions(navItem.part, filterGroups, false, navItem.colorOptions || []);\r\n const desRecValues = [\r\n ...(desRecFeature || []),\r\n ...(desRecColorFeatures || []).map(colorOption => {\r\n return getFilterGroupValues(colorOption.feature, desRecFilterGroup)\r\n })\r\n ];\r\n return desRecValues && desRecValues.some(desRecValue => {\r\n if (Array.isArray(desRecValue)) {\r\n return desRecValue.some(filterId => {\r\n const filterValueObject = getFilterGroupValue(filterId, desRecFilterGroup);\r\n return filterValueObject && (+filterValueObject.value === activePreset)\r\n })\r\n }\r\n const filterValueObject = getFilterGroupValue(desRecValue, desRecFilterGroup);\r\n return filterValueObject && (+filterValueObject.value === activePreset)\r\n })\r\n });\r\n}\r\n\r\n/**\r\n * reorder features, places selected and similar walls on the beginning\r\n * @param navItems {[navItemInterface]}\r\n * @param lookActiveFeature {featureInterface}\r\n * @returns {[navItemsListInterface]}\r\n */\r\nexport const getNavigationItemsLists = (navItems, lookActiveFeature) => {\r\n\r\n if (!navItems.length) {\r\n return [{\r\n type: LOOK_NAVIGATION_LIST_TYPES.regular,\r\n navItems: [],\r\n }]\r\n }\r\n\r\n let navItemsList = [];\r\n\r\n const designRecommended = getDesignRecommendedNavItems(navItems);\r\n if (designRecommended.length) {\r\n navItemsList.push({\r\n type: LOOK_NAVIGATION_LIST_TYPES.designRec,\r\n navItems: getSortedNavItems(designRecommended),\r\n })\r\n }\r\n\r\n const others = designRecommended.length ? navItems.filter(navItem => {\r\n return designRecommended.every(designNavItem => designNavItem.part.dbFeature.id !== navItem.part.dbFeature.id)\r\n }) : navItems;\r\n\r\n if (!navItems[0]) { // some unexpected case\r\n return navItemsList\r\n }\r\n\r\n const featureGroup = navItems[0].part.getParent();\r\n\r\n switch (featureGroup.partId) {\r\n case \"vanity_faucet\": {\r\n const regularFeatures = {\r\n type: LOOK_NAVIGATION_LIST_TYPES.regular,\r\n navItems: [],\r\n };\r\n const vanityParent = featureGroup.getParent();\r\n const sinkParent = vanityParent.sink;\r\n\r\n others.forEach(navItem => {\r\n if (!sinkParent || !sinkParent.activeFeature || !navItem.part.metaData.MountHoles\r\n || (lookActiveFeature && isEqual(navItem.part.metaData.MountHoles, lookActiveFeature.metaData.MountHoles))) {\r\n if (!regularFeatures.navTranslate && navItem.part.metaData.MountHoles) {\r\n regularFeatures.navTranslate = \"look.features.other.faucet.\" + navItem.part.metaData.MountHoles[0]\r\n }\r\n regularFeatures.navItems.push(navItem);\r\n } else if (navItem.part.metaData.MountHoles) {\r\n const existingNonMatchingList = navItemsList.find(navItemsObject => {\r\n return navItemsObject.type === LOOK_NAVIGATION_LIST_TYPES.notMatchingMeta && navItemsObject.notMatchingMetaName === navItem.part.metaData.MountHoles[0];\r\n });\r\n if (existingNonMatchingList) {\r\n existingNonMatchingList.navItems.push(navItem)\r\n } else {\r\n navItemsList.push({\r\n type: LOOK_NAVIGATION_LIST_TYPES.notMatchingMeta,\r\n notMatchingMetaName: navItem.part.metaData.MountHoles[0],\r\n navItems: [navItem],\r\n navTranslate: \"look.features.other.faucet.\" + navItem.part.metaData.MountHoles[0]\r\n });\r\n }\r\n }\r\n })\r\n navItemsList.push(regularFeatures);\r\n break;\r\n }\r\n default: {\r\n navItemsList.push({\r\n type: LOOK_NAVIGATION_LIST_TYPES.regular,\r\n navItems: others,\r\n });\r\n break;\r\n }\r\n }\r\n\r\n return navItemsList\r\n};\r\n\r\nconst getSinksWidth = (nextSink) => {\r\n let maxWidth = 0;\r\n let maxTotalWidth = 0;\r\n if (nextSink.metaData[\"MatchingFeature\"].includes(METADATA.NO)) {\r\n const parent = nextSink.getParent();\r\n Object.keys(parent.layerPositions).forEach(position => {\r\n const positionFeature = parent.layerPositions[position];\r\n if (positionFeature && positionFeature.metaData[\"SinkWidth\"]) {\r\n maxTotalWidth += positionFeature.metaData[\"SinkWidth\"];\r\n }\r\n });\r\n if (nextSink.metaData[\"SinkWidth\"]) {\r\n maxWidth = nextSink.metaData[\"SinkWidth\"]\r\n }\r\n }\r\n // console.log(\"maxWidth\", maxWidth, maxTotalWidth);\r\n return {maxWidth, maxTotalWidth}\r\n}\r\n\r\nexport const findNextVanityTypeFeature = (nextSink, nextFeatureGroup) => {\r\n if (!nextSink.metaData[\"MatchingFeature\"] || nextSink.notAvailableInVisualizer) {\r\n return null\r\n }\r\n const nextSinkSku = getSkuWithoutDot(nextSink.dbFeature.sharedFeatureName);\r\n if (nextFeatureGroup && nextFeatureGroup.activeFeature\r\n && nextSink.metaData[\"MatchingFeature\"].includes(getSkuWithoutDot(nextFeatureGroup.activeFeature.dbFeature.sharedFeatureName))) { // it is already matching! return it\r\n // cases when vanity MatchingFeature - ['0328001', '0328004', '0328008'] and sink - '0329008'\r\n if (!nextFeatureGroup.activeFeature.metaData[\"MatchingFeature\"]\r\n || (nextFeatureGroup.activeFeature.metaData[\"MatchingFeature\"]\r\n && nextFeatureGroup.activeFeature.metaData[\"MatchingFeature\"].includes(nextSinkSku))) {\r\n return nextFeatureGroup.activeFeature\r\n }\r\n }\r\n\r\n const isQCSink = nextSink.metaData[\"MatchingFeature\"].includes(METADATA.NO);\r\n const {maxWidth, maxTotalWidth} = getSinksWidth(nextSink);\r\n\r\n const allVanities = [...nextFeatureGroup.features, ...nextFeatureGroup.featuresParts];\r\n let matchingVanities = allVanities.filter(testFeature => {\r\n if (!testFeature.metaData[\"MatchingFeature\"]) {\r\n return false\r\n }\r\n if (isQCSink) {\r\n if (!testFeature.metaData[\"MatchingFeature\"].includes(METADATA.NO)) {\r\n return false\r\n }\r\n if (!testFeature.metaData[\"VanityWidth\"]) {\r\n return true // just in case\r\n }\r\n if (nextSink.metaData.layerPosition !== \"C\") { // L or R should be only on double vanity or two separate\r\n return testFeature.metaData[\"VanityWidth\"] === 64\r\n || (testFeature.metaData[\"VanityWidth\"] === 24 && testFeature.metaData[\"VanityWidth\"] > maxWidth\r\n && (testFeature.metaData[\"layerPosition\"] !== \"C\"))\r\n }\r\n if (!maxWidth) {\r\n return true\r\n }\r\n return testFeature.metaData[\"VanityWidth\"] > maxWidth\r\n }\r\n return nextSink.metaData[\"MatchingFeature\"].includes(getSkuWithoutDot(testFeature.dbFeature.sharedFeatureName))\r\n && testFeature.metaData[\"MatchingFeature\"].includes(nextSinkSku)\r\n });\r\n // console.log(\"matchingVanities\", matchingVanities);\r\n if (matchingVanities.length > 1 && nextFeatureGroup.activeFeature) {\r\n // console.log(\"matchingVanities\", matchingVanities);\r\n const currentActiveFeature = matchingVanities.find(feature => feature.dbFeature.id === nextFeatureGroup.activeFeature.dbFeature.id);\r\n if (currentActiveFeature) {\r\n return currentActiveFeature\r\n }\r\n const currentSkuFeature = matchingVanities.find(feature => feature.dbFeature.sharedFeatureName === nextFeatureGroup.activeFeature.dbFeature.sharedFeatureName);\r\n if (currentSkuFeature) {\r\n return currentSkuFeature // to test\r\n }\r\n let currentSideFeatures = matchingVanities.filter(feature => isEqual(feature.metaData[\"Side\"], nextSink.metaData[\"Side\"]));\r\n if (!currentSideFeatures.length) {\r\n currentSideFeatures = matchingVanities.filter(feature => isEqual(feature.metaData[\"Side\"], nextFeatureGroup.activeFeature.metaData[\"Side\"]));\r\n }\r\n if (isQCSink && !currentSideFeatures.length && nextSink.metaData[\"Side\"]) {\r\n if (nextSink.metaData[\"Side\"][0] === \"C\") {\r\n console.log(\"NO VANITY FEATURES WITH C METADATA FOUND\", );\r\n } else if (maxTotalWidth) {\r\n currentSideFeatures = matchingVanities.filter(feature => {\r\n return feature.metaData[\"VanityWidth\"] && feature.metaData[\"VanityWidth\"] > maxTotalWidth\r\n });\r\n console.log(\"currentSideFeatures\", currentSideFeatures);\r\n }\r\n }\r\n const sameColors = currentSideFeatures.filter(feature => feature.getColorName() === nextFeatureGroup.activeFeature.getColorName());\r\n return sameColors[0] || currentSideFeatures[0] || matchingVanities[0]\r\n }\r\n return matchingVanities[0];\r\n}\r\n\r\nconst updateNonCompatibleListWithVanity = (nextSink, nonCompatibleList = []) => {\r\n const layout = getCurrentLayout();\r\n const vanityParent = layout.parts[Vanity.id];\r\n const currentVanityTypeFeatureGroup = vanityParent.relatedItems.find(relItem => relItem.partId === vanityParent.vanity_type);\r\n\r\n if (nextSink.metaData[\"CustomVanityType\"] && nextSink.metaData[\"CustomVanityType\"].includes(vanityParent.vanity_type)) {\r\n // for example currently we have Studio S vanity Cabinet, but it will be changed to Townsend\r\n if (currentVanityTypeFeatureGroup && currentVanityTypeFeatureGroup.activeFeature && nextSink.metaData[\"MatchingFeature\"]\r\n && !nextSink.metaData[\"MatchingFeature\"].includes(getSkuWithoutDot(currentVanityTypeFeatureGroup.activeFeature.dbFeature.sharedFeatureName))) {\r\n const nextVanity = findNextVanityTypeFeature(nextSink, currentVanityTypeFeatureGroup)\r\n // console.log(\"nextVanity\", nextVanity);\r\n if (nextVanity && currentVanityTypeFeatureGroup.activeFeature.dbFeature.id !== nextVanity.dbFeature.id) {\r\n nonCompatibleList.push({\r\n from: currentVanityTypeFeatureGroup.activeFeature,\r\n to: nextVanity,\r\n })\r\n }\r\n }\r\n } else {\r\n // console.log(\"next sink is not compatible, pls check\");\r\n if (nextSink.metaData[\"MountType\"].includes(\"ST\")) {\r\n if (!nonCompatibleList.some(fromToObject => fromToObject.to && fromToObject.to.dbFeature.id === nextSink.dbFeature.id)) {\r\n nonCompatibleList.push({\r\n from: currentVanityTypeFeatureGroup ? currentVanityTypeFeatureGroup.activeFeature : nextSink.getParent().activeFeature,\r\n to: nextSink,\r\n })\r\n }\r\n } else if (nextSink.metaData[\"CustomVanityType\"]) {\r\n const nextFeatureGroup = vanityParent.relatedItems.find(relItem => relItem.partId === nextSink.metaData[\"CustomVanityType\"][0]);\r\n if (nextFeatureGroup) {\r\n const nextVanity = findNextVanityTypeFeature(nextSink, nextFeatureGroup)\r\n // console.log(\"nextVanity\", nextVanity);\r\n const fromFeature = currentVanityTypeFeatureGroup\r\n ? currentVanityTypeFeatureGroup.activeFeature\r\n : nextSink.getParent().activeFeature; // if no vanity_type - it means that standalone sink is selected\r\n if (nextVanity) {\r\n nonCompatibleList.push({\r\n from: fromFeature,\r\n to: nextVanity,\r\n })\r\n }\r\n }\r\n }\r\n }\r\n return nonCompatibleList\r\n}\r\n\r\n/**\r\n * * when clicked on feature - search for same MountHoles sink (to keep selected faucet)\r\n * @param feature {featureInterface}\r\n * @returns {featureInterface}\r\n */\r\nexport const getNextSinkOnWashstandOrConsoleChange = (feature) => {\r\n const layout = getCurrentLayout();\r\n const vanityParent = layout.parts[Vanity.id];\r\n const sinkParent = vanityParent.sink;\r\n const isQcSink = sinkParent && sinkParent.activeFeature && sinkParent.activeFeature.metaData[\"MatchingFeature\"].includes(METADATA.NO)\r\n const forSinkConditions = [{\r\n propName: \"MatchingFeature\",\r\n propValue: isQcSink ? METADATA.NO : getSkuWithoutDot(feature.dbFeature.sharedFeatureName)\r\n }, {\r\n propName: \"FeatureSku\",\r\n propValue: isQcSink ? METADATA.NO : feature.metaData[\"MatchingFeature\"]\r\n }];\r\n if (isQcSink && feature.metaData[\"VanityWidth\"]) {\r\n // QC sink, we should check width\r\n forSinkConditions.push({\r\n propName: \"SinkWidth\",\r\n propValue: feature.metaData[\"VanityWidth\"],\r\n // propData: {\r\n // layerPosition: feature.metaData.layerPosition\r\n // }\r\n })\r\n }\r\n if (sinkParent && sinkParent.activeFeature && !sinkParent.activeFeature.matchesMetaForArrayOfConditions(forSinkConditions)) {\r\n const layout = getCurrentLayout();\r\n const navItems = layout.designNavigationItems({part: sinkParent}, [], \"\", sinkParent.activeFeature);\r\n const nextAvailableSinks = navItems.filter(navItem => navItem.part.matchesMetaForArrayOfConditions(forSinkConditions));\r\n const conditionsToMatch = [{\r\n propName: \"MountHoles\",\r\n propValue: sinkParent.activeFeature.metaData[\"MountHoles\"]\r\n }];\r\n return nextAvailableSinks.length\r\n ? nextAvailableSinks.find(navItem => navItem.part.matchesMetaForArrayOfConditions(conditionsToMatch)) || nextAvailableSinks[0]\r\n : null;\r\n }\r\n return null\r\n}\r\n\r\n/**\r\n * when clicked on washstand or console - search for the same MountHoles sink (to keep selected faucet)\r\n * @param feature {featureInterface}\r\n */\r\nexport const updateSinkWithNewFeature = (feature) => {\r\n const layout = getCurrentLayout();\r\n const vanityParent = layout.parts[Vanity.id];\r\n const sinkParent = vanityParent.sink;\r\n\r\n if (sinkParent && sinkParent.activeFeature) {\r\n const nextSink = getNextSinkOnWashstandOrConsoleChange(feature);\r\n if (nextSink) {\r\n const sinkFeature = nextSink.part;\r\n if (sinkParent.layerPositions && nextSink.part.metaData.layerPosition) {\r\n Object.keys(sinkParent.layerPositions).forEach(position => {\r\n if (position === sinkFeature.metaData.layerPosition) {\r\n sinkParent.layerPositions[position] = sinkFeature\r\n } else if (sinkParent.layerPositions[position]) { // only replace existing\r\n const sameFeature = sinkParent.getMatchingPositionFeature(position, sinkFeature);\r\n sinkParent.layerPositions[position] = sameFeature || null; // if no feature found - erase previous\r\n }\r\n })\r\n }\r\n sinkParent.activeFeature = sinkFeature;\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * checks if feature needs a compatability alert\r\n * @param feature {featureInterface}\r\n * @returns {array}\r\n */\r\nexport const checkForCompatabilityAlert = (feature) => {\r\n if (feature.notAvailableInVisualizer) {\r\n return []\r\n }\r\n if (document.kvConfig.visualizerType !== \"bvLook\") {\r\n if (getCommonVisualizerType() === \"kitchen\") {\r\n switch (feature.partId) {\r\n case \"edge_profile\":\r\n case \"center_island_edge\": {\r\n const matchCounterTopObject = feature.getParent().getMatchingCounterTop(feature);\r\n if (matchCounterTopObject.matchingFeature && !matchCounterTopObject.hasSameName) {\r\n const countertopParent = feature.getParent().getParent().countertop;\r\n return [{\r\n from: countertopParent.activeFeature,\r\n to: matchCounterTopObject.matchingFeature,\r\n }]\r\n }\r\n return []\r\n }\r\n default:\r\n return []\r\n }\r\n }\r\n return []\r\n }\r\n const layout = getCurrentLayout();\r\n const vanityParent = layout.parts[Vanity.id];\r\n const faucetParent = vanityParent.faucet;\r\n const sinkParent = vanityParent.sink;\r\n let nonCompatibleList = [];\r\n\r\n switch (feature.partId) {\r\n case \"vanity_faucet\": {\r\n if (!sinkParent.activeFeature || !sinkParent.activeFeature.matchesMetaForArrayOfConditions(faucetParent.getActiveFeatureConditions(feature))) {\r\n const nextSink = feature.getSinkToClickFromMatchingSinks(sinkParent.activeFeature);\r\n if (nextSink) {\r\n // console.log(\"sink nextSink\", nextSink);\r\n nonCompatibleList.push({\r\n from: sinkParent.activeFeature,\r\n to: nextSink,\r\n });\r\n nonCompatibleList = updateNonCompatibleListWithVanity(nextSink, nonCompatibleList);\r\n return nonCompatibleList\r\n }\r\n }\r\n return []\r\n }\r\n case \"vanity_sink\": {\r\n const clickedSinkConditions = sinkParent.getActiveFeatureConditions(feature);\r\n if (!faucetParent.activeFeature || !faucetParent.activeFeature.matchesMetaForArrayOfConditions(clickedSinkConditions)) {\r\n const navItems = layout.designNavigationItems({part: faucetParent}, [], \"\", faucetParent.activeFeature);\r\n const nextFaucet = navItems.find(navItem => {\r\n return navItem.part.matchesMetaForArrayOfConditions(clickedSinkConditions);\r\n });\r\n console.log(\"nextFaucet\", nextFaucet);\r\n if (nextFaucet) {\r\n nonCompatibleList.push({\r\n from: faucetParent.activeFeature,\r\n to: nextFaucet.part,\r\n });\r\n }\r\n }\r\n nonCompatibleList = updateNonCompatibleListWithVanity(feature, nonCompatibleList);\r\n return nonCompatibleList\r\n }\r\n case \"vanity_cabinet\":\r\n case \"vanity_console\":\r\n case \"vanity_washstand\": {\r\n const nextSink = getNextSinkOnWashstandOrConsoleChange(feature);\r\n if (!sinkParent.activeFeature || (nextSink && nextSink.part.dbFeature.id !== sinkParent.activeFeature.dbFeature.id)) {\r\n if (nextSink) {\r\n // console.log(\"sink nextSink\", nextSink);\r\n nonCompatibleList.push({\r\n from: sinkParent.activeFeature,\r\n to: nextSink.part,\r\n });\r\n const clickedSinkConditions = sinkParent.getActiveFeatureConditions(nextSink.part);\r\n if (!faucetParent.activeFeature || !faucetParent.activeFeature.matchesMetaForArrayOfConditions(clickedSinkConditions)) {\r\n const navItems = layout.designNavigationItems({part: faucetParent}, [], \"\", faucetParent.activeFeature);\r\n const nextFaucet = navItems.find(navItem => {\r\n return navItem.part.matchesMetaForArrayOfConditions(clickedSinkConditions);\r\n });\r\n console.log(\"nextFaucet\", nextFaucet);\r\n if (nextFaucet) {\r\n nonCompatibleList.push({\r\n from: faucetParent.activeFeature,\r\n to: nextFaucet.part,\r\n });\r\n }\r\n }\r\n }\r\n }\r\n return nonCompatibleList\r\n }\r\n case \"shower_arm\": {\r\n const showerArmFeatureGroup = feature.getParent();\r\n const showerParent = showerArmFeatureGroup.getParent();\r\n const showerHeadParent = showerParent.showerHead;\r\n if (!showerHeadParent || !feature.metaData[\"MountPosition\"]) {\r\n return nonCompatibleList\r\n }\r\n const clickedArmConditions = showerArmFeatureGroup.getArrayOfConditions().map(condition => {\r\n if (condition.propName === \"MountPosition\") {\r\n return {\r\n propName: \"MountPosition\",\r\n propValue: feature.metaData[\"MountPosition\"],\r\n }\r\n }\r\n return condition\r\n })\r\n if (!showerHeadParent.activeFeature || !showerHeadParent.activeFeature.matchesMetaForArrayOfConditions(clickedArmConditions)) {\r\n const navItems = layout.designNavigationItems({part: showerHeadParent}, [], \"\", showerHeadParent.activeFeature);\r\n const nextFaucet = navItems.find(navItem => {\r\n return navItem.part.matchesMetaForArrayOfConditions(clickedArmConditions);\r\n });\r\n console.log(\"next shower head\", nextFaucet);\r\n if (nextFaucet) {\r\n nonCompatibleList.push({\r\n from: showerHeadParent.activeFeature,\r\n to: nextFaucet.part,\r\n });\r\n }\r\n }\r\n return nonCompatibleList\r\n }\r\n default:\r\n return nonCompatibleList\r\n }\r\n};\r\n\r\n/**\r\n * returns fabricator settings price logic\r\n * @returns {object}\r\n */\r\nexport const pricingIsLocked = () => {\r\n const {isBackend, jobId, canSaveQuote} = document.kvConfig;\r\n const {fabricatorState, userState} = store.getState();\r\n const {isPhoneNumberValidated} = userState;\r\n const fabricatorSettings = fabricatorState.settings;\r\n\r\n return {\r\n showPrice: fabricatorSettings.showPricing && !fabricatorState.hideCheckoutBreakdownCost && !fabricatorState.hidePricesFromUser,\r\n pricingLocked: fabricatorSettings.leadCapture && !(isBackend && jobId && canSaveQuote) && !isPhoneNumberValidated,\r\n clickLeadCapture: fabricatorSettings.clickLeadCapture,\r\n isLixil: isIframe() && fabricatorState.isLixil\r\n }\r\n}\r\n\r\n\r\n\r\n/**\r\n * checks features and downloads by name if they are missing\r\n * @param missingFeatures {array}\r\n * @param updateCanvas {boolean}\r\n * @param originalPartId {string}\r\n */\r\nexport const getMissingFeaturesAndClickThem = async (missingFeatures = [], updateCanvas = false, originalPartId = \"\") => {\r\n if (!missingFeatures.length) {\r\n return Promise.resolve()\r\n }\r\n window.requestInProcess = true;\r\n loaderEnable();\r\n const layout = getCurrentLayout();\r\n const wallParent = layout.parts[\"Walls\"];\r\n\r\n const pageSize = 9999;\r\n for (let missingFeatureObject of missingFeatures) {\r\n const {relatedItem, navigationItemName, requestFromBackendName} = missingFeatureObject;\r\n const dbName = relatedItem.dbName || relatedItem.partName;\r\n if (relatedItem.additionalPartPartId && wallParent && wallParent.relatedItems.some(relItem => relItem.partId === relatedItem.partId)) {\r\n const cropResponse = await getBvGroupFeatures(dbName + \" Crop\", 0, pageSize, [], requestFromBackendName || navigationItemName);\r\n if (Array.isArray(cropResponse)) {\r\n relatedItem.setGroupFeatures(cropResponse, pageSize, false, \"\", null, true, false);\r\n }\r\n }\r\n if (relatedItem.partId !== originalPartId) { // we need to check crop for current wall! but no need to request the wall itself\r\n const response = await getBvGroupFeatures(dbName, 0, pageSize, [], requestFromBackendName || navigationItemName);\r\n relatedItem.setGroupFeatures(response, pageSize, false, \"\", null, true, false);\r\n }\r\n }\r\n for (let missingFeatureObject of missingFeatures) {\r\n const {relatedItem, navigationItemName, setCurrentFeature, requestFromBackendName} = missingFeatureObject;\r\n const featureFound = layout.designNavigationItems({part: relatedItem}).find(navItem => {\r\n return navItem.part.getSplittedFeatureName() === navigationItemName\r\n });\r\n if (featureFound) {\r\n if (setCurrentFeature) {\r\n relatedItem.activeFeatureBeforeAllWalls = relatedItem.activeFeature;\r\n }\r\n featureFound.part.clickFromAllWalls(true)\r\n }\r\n if (relatedItem.partId !== originalPartId) {\r\n if (!relatedItem.alreadyRequestedFeatureNames) {\r\n relatedItem.alreadyRequestedFeatureNames = [];\r\n }\r\n relatedItem.alreadyRequestedFeatureNames.push(requestFromBackendName || navigationItemName);\r\n }\r\n }\r\n\r\n window.requestInProcess = false;\r\n loaderDisable();\r\n if (updateCanvas) {\r\n store.dispatch(updateCanvasCount());\r\n }\r\n return Promise.resolve()\r\n}\r\n\r\nexport const getShowMatchRadio = (lookFeature) => {\r\n if (LOOK_WALLS_ONLY.includes(lookFeature.partId)) {\r\n return true\r\n }\r\n switch (getCommonVisualizerType()) {\r\n case \"kitchen\":\r\n case \"laundryroom\": {\r\n if (EDGE_GROUP.includes(lookFeature.partId)) {\r\n if (lookFeature.partId === \"edge_profile\") { // back countertop\r\n const layout = getCurrentLayout();\r\n return layout.parts[\"CenterIsland\"] && layout.parts[\"CenterIsland\"].countertop\r\n && !layout.parts[\"CenterIsland\"].countertop.disabled\r\n }\r\n return true\r\n }\r\n if (COUNTERTOP_GROUP.includes(lookFeature.partId) && !CountertopSwitchers.checkForTileBacksplash(lookFeature)) {\r\n return true\r\n }\r\n return CABINET_GROUP.includes(lookFeature.partId)\r\n }\r\n case \"bathroom\":\r\n return CABINET_GROUP_BATHROOM.includes(lookFeature.partId)\r\n || COUNTERTOP_GROUP_BATHROOM.includes(lookFeature.partId)\r\n || HANDLES_GROUP_BATHROOM.includes(lookFeature.partId)\r\n || SHOWER_FLOOR_GROUP_BATHROOM.includes(lookFeature.partId)\r\n default:\r\n return false\r\n }\r\n}\r\n\r\n/**\r\n * returns fabricator settings price logic\r\n * @param lookFeature {featureInterface}\r\n * @returns {allWallsLogicInterface} object\r\n */\r\nexport const getApplyToLogic = (lookFeature) => {\r\n if (!lookFeature || lookFeature.notAvailableInVisualizer) {\r\n return null\r\n }\r\n if (LOOK_WALLS_ONLY.includes(lookFeature.partId)) {\r\n const {lookState} = store.getState();\r\n return {\r\n type: \"walls\",\r\n translateId: \"look.allWalls\",\r\n setApplyToFunction: setLookWallsApplyTo,\r\n applyToArrayAll: LOOK_WALLS_ONLY,\r\n currentApplyToArray: lookState.lookWallsApplyTo,\r\n }\r\n }\r\n switch (getCommonVisualizerType()) {\r\n case \"kitchen\":\r\n case \"laundryroom\": {\r\n if (CABINET_GROUP.includes(lookFeature.partId)) {\r\n const {navigationState} = store.getState();\r\n return {\r\n type: \"cabinets\",\r\n translateId: \"look.allCabinets\",\r\n setApplyToFunction: setCabinetsApplyTo,\r\n applyToArrayAll: CABINET_GROUP,\r\n currentApplyToArray: navigationState.cabinetsApplyTo,\r\n }\r\n } else if (COUNTERTOP_GROUP.includes(lookFeature.partId)) {\r\n const {navigationState} = store.getState();\r\n return {\r\n type: \"countertops\",\r\n translateId: \"look.allCountertops\",\r\n setApplyToFunction: setCountertopsApplyTo,\r\n applyToArrayAll: COUNTERTOP_GROUP,\r\n currentApplyToArray: navigationState.countertopsApplyToArray,\r\n }\r\n } else if (EDGE_GROUP.includes(lookFeature.partId)) {\r\n const {navigationState} = store.getState();\r\n return {\r\n type: \"edges\",\r\n translateId: \"look.allCountertops\",\r\n setApplyToFunction: setEdgesApplyTo,\r\n applyToArrayAll: EDGE_GROUP,\r\n currentApplyToArray: navigationState.edgesApplyTo,\r\n }\r\n }\r\n break;\r\n }\r\n case \"bathroom\": {\r\n if (CABINET_GROUP_BATHROOM.includes(lookFeature.partId) && (document.kvConfig.visualizerType !== \"bvLook\")) {\r\n const {navigationState} = store.getState();\r\n return {\r\n type: \"cabinets\",\r\n translateId: \"look.allCabinets\",\r\n setApplyToFunction: setCabinetsApplyToBathroom,\r\n applyToArrayAll: CABINET_GROUP,\r\n currentApplyToArray: navigationState.cabinetsApplyToBathroom,\r\n }\r\n } else if (COUNTERTOP_GROUP_BATHROOM.includes(lookFeature.partId)) {\r\n const {navigationState} = store.getState();\r\n return {\r\n type: \"countertops\",\r\n translateId: \"look.allCountertops\",\r\n setApplyToFunction: setCountertopsApplyToBathroom,\r\n applyToArrayAll: COUNTERTOP_GROUP_BATHROOM,\r\n currentApplyToArray: navigationState.countertopsApplyToArrayBathroom,\r\n }\r\n } else if (HANDLES_GROUP_BATHROOM.includes(lookFeature.partId)) {\r\n const {navigationState} = store.getState();\r\n return {\r\n type: \"handles\",\r\n translateId: \"look.allCountertops\",\r\n setApplyToFunction: setApplyToCommon,\r\n applyToArrayAll: HANDLES_GROUP_BATHROOM,\r\n currentApplyToArray: navigationState.handlesApplyToBathroom,\r\n }\r\n } else if (SHOWER_FLOOR_GROUP_BATHROOM.includes(lookFeature.partId)) {\r\n const {navigationState} = store.getState();\r\n return {\r\n type: \"showerFloor\",\r\n translateId: \"look.allCountertops\",\r\n setApplyToFunction: setApplyToCommon,\r\n applyToArrayAll: SHOWER_FLOOR_GROUP_BATHROOM,\r\n currentApplyToArray: navigationState.showerFloorApplyToBathroom,\r\n }\r\n }\r\n break;\r\n }\r\n }\r\n\r\n return null\r\n}\r\n\r\n/**\r\n * returns fabricator settings price logic\r\n * @param wallFeature {featureInterface}\r\n * @param applyToLogic {allWallsLogicInterface}\r\n * @param setCurrentFeature {boolean}\r\n */\r\nexport const clickOnSimilarFeatures = async (wallFeature, applyToLogic, setCurrentFeature = false) => {\r\n const layout = getCurrentLayout();\r\n let {type, applyToArrayAll} = applyToLogic;\r\n\r\n const {navigationState, fabricatorState} = store.getState();\r\n if ((type === \"countertops\" && !navigationState.useFeaturesLightRequest.countertops)\r\n || (type === \"cabinets\" && !navigationState.useFeaturesLightRequest.cabinets)) {\r\n if (setCurrentFeature && !fabricatorState.isSolidSurface) {\r\n store.dispatch(applyToLogic.setApplyToFunction([], true, type));\r\n return Promise.resolve()\r\n }\r\n }\r\n\r\n if (type === \"countertops\") {\r\n const featureIsLocked = getFeatureIsLocked(wallFeature);\r\n return CountertopSwitchers.applyAllCountertops(wallFeature, !featureIsLocked, applyToArrayAll, setCurrentFeature);\r\n } else if (type === \"cabinets\") {\r\n const featureIsLocked = getFeatureIsLocked(wallFeature);\r\n return CabinetSwitchers.applyClickTo(wallFeature, !featureIsLocked, applyToArrayAll, setCurrentFeature)\r\n } else {\r\n const navigationItemName = wallFeature.getSplittedFeatureName();\r\n const requestFromBackendName = layout.isNewLayout ? wallFeature.getCountertopGroupsSplittedFeatureName() : wallFeature.getSplittedFeatureName();\r\n // we are looking and matching splitted feature name, because it includes filters, but we request original sharedFeatureName\r\n let missingFeatures = [];\r\n applyToArrayAll.forEach(wallPartId => {\r\n const subPart = layout.getSubPartByPartId(wallPartId);\r\n if (!subPart || (subPart.part.partId === wallFeature.partId)) {\r\n return null\r\n }\r\n const featureFound = layout.designNavigationItems(subPart).find(navItem => {\r\n return navItem.part.getSplittedFeatureName() === navigationItemName\r\n });\r\n if (featureFound) {\r\n if (setCurrentFeature) {\r\n subPart.part.activeFeatureBeforeAllWalls = subPart.part.activeFeature;\r\n }\r\n featureFound.part.clickFromAllWalls(true)\r\n } else if (!subPart.part.alreadyRequestedFeatureNames || !subPart.part.alreadyRequestedFeatureNames.includes(requestFromBackendName)) {\r\n // @param missingFeaturesArray {featureGroupInterface}\r\n // @param navigationItemName {string}\r\n // @param setCurrentFeature {boolean}\r\n missingFeatures.push({relatedItem: subPart.part, navigationItemName, setCurrentFeature, requestFromBackendName})\r\n }\r\n });\r\n if (missingFeatures.length) {\r\n missingFeatures.push({relatedItem: wallFeature.getParent(), navigationItemName, setCurrentFeature, requestFromBackendName})\r\n // we need to check crop for current wall! but no need to request the wall itself\r\n await getMissingFeaturesAndClickThem(missingFeatures, false, wallFeature.partId)\r\n }\r\n return Promise.resolve()\r\n }\r\n}\r\n\r\n/**\r\n * returns fabricator settings price logic\r\n * @param applyToArray {array}\r\n * @param onlyForOneFeatureGroup {object}\r\n */\r\nexport const setActiveFeaturesBeforeAllWalls = (applyToArray = [], onlyForOneFeatureGroup = null) => {\r\n if (onlyForOneFeatureGroup && onlyForOneFeatureGroup.activeFeature) {\r\n onlyForOneFeatureGroup.activeFeatureBeforeAllWalls = onlyForOneFeatureGroup.activeFeature;\r\n return\r\n }\r\n const layout = getCurrentLayout();\r\n applyToArray.forEach(partId => {\r\n const featureGroup = layout.getFeatureGroupByPartId(partId);\r\n if (featureGroup && featureGroup.activeFeature) {\r\n featureGroup.activeFeatureBeforeAllWalls = featureGroup.activeFeature;\r\n }\r\n })\r\n}\r\n\r\nexport const requestAfterRoomChange = async (layout) => {\r\n let promises = [];\r\n const layoutName = layout.getCurrentLayoutAbbreviation();\r\n layout.getFeatures().forEach(parent => {\r\n if (!Array.isArray(parent.relatedItems) || !parent.relatedItems.length) {\r\n return\r\n }\r\n parent.relatedItems.forEach(featureGroup => {\r\n if (featureGroup.allFeaturesReceived\r\n && featureGroup.nextFeaturesPageToLoadArray\r\n && featureGroup.nextFeaturesPageToLoadArray[layoutName]\r\n && !featureGroup.nextFeaturesPageToLoadArray[layoutName].page) {\r\n promises.push(getAdditionalFeaturesOnScroll(featureGroup))\r\n }\r\n })\r\n });\r\n return Promise.all(promises)\r\n}\r\n\r\n\r\n/**\r\n * returns fabricator settings price logic\r\n * @param roomPreset {object}\r\n * @param loadedPresets {array}\r\n */\r\nexport const applyNewPreset = async (roomPreset, loadedPresets) => {\r\n const layout = getCurrentLayout();\r\n if (loadedPresets.includes(roomPreset.id)) {\r\n layout.setActiveFeaturesFromObject(roomPreset, false, false, true, false);\r\n await requestAfterRoomChange(layout);\r\n } else {\r\n await layout.setItemsFromBvState(roomPreset); // requestAfterRoomChange inside\r\n }\r\n return Promise.resolve()\r\n}\r\n\r\nexport const isRoomLayoutsVisible = () => {\r\n return Config.isVisualizerManagement() || Config.isDevMode()\r\n}\r\n\r\n/**\r\n * returns feature group current items quantity depending on layer positions\r\n * @param lookActiveFeature {featureInterface}\r\n * @param featureGroup {featureGroupInterface}\r\n * @return number {number}\r\n */\r\nexport const getFeatureGroupFeaturesQuantity = (lookActiveFeature, featureGroup = null) => {\r\n let featureQuantity = 1;\r\n if (!featureGroup && lookActiveFeature && lookActiveFeature.getParent) {\r\n featureGroup = lookActiveFeature.getParent()\r\n }\r\n if (featureGroup) {\r\n const currentActiveFeature = lookActiveFeature || featureGroup.activeFeature || featureGroup.activeNotInVisualizerFeature\r\n if (currentActiveFeature && currentActiveFeature.dbFeature.defaultQuantity && currentActiveFeature.dbFeature.defaultQuantity !== 1) {\r\n featureQuantity = currentActiveFeature.dbFeature.defaultQuantity;\r\n } else if (featureGroup.layerPositions && (!currentActiveFeature || !currentActiveFeature.notAvailableInVisualizer)) {\r\n // if feature is not available in visualizer > set at least 1 instead of 0 (missing sink in the cart in solid surface wizard issue)\r\n featureQuantity = Object.keys(featureGroup.layerPositions)\r\n .filter(position => !!featureGroup.layerPositions[position]).length\r\n }\r\n }\r\n return featureQuantity\r\n}\r\n","import {Part} from \"./part\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport {LayoutType, ShowerComboTubType} from \"../constants\";\r\nimport { showerTubComboThumbnail, custom60inPonyShower, custom60in30X8Shower } from '../assets';\r\n\r\nimport BathTubLiner from \"../subparts/showerTubCombo/bathtubLiner\";\r\nimport ReplacementTub from \"../subparts/showerTubCombo/replacementTub\";\r\nimport WalkInTub from \"../subparts/showerTubCombo/walkInTub\";\r\nimport JettedTub from \"../subparts/showerTubCombo/jettedTub\";\r\nimport WallConfiguration from \"../subparts/showerTubCombo/wallConfiguration\";\r\nimport {fixDbFeatureProperties} from \"../../../../misc/helpers\";\r\n\r\nexport class ShowerTubCombo extends Part {\r\n static id = 'Shower Tub Combo';\r\n\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.showerTubComboIsActive = false; // param needed to check if shower is still active or not\r\n this.menuType = PartMenuType.Complex;\r\n this.partThumbnail = showerTubComboThumbnail;\r\n this.partName = 'Shower Tub Combo';\r\n this.translateId = \"visualizer.bathroom.shower_tub_combo\";\r\n this.relatedItems = [];\r\n this.wallConfiguration = null;\r\n this.bathTubLiner = null;\r\n this.replacementTub = null;\r\n this.walkInTub = null;\r\n this.jettedTub = null;\r\n\r\n // Kohler hardcode, they don't have bathtub_liner\r\n this.bottomTub = (document.kvConfig && (document.kvConfig.userId === 133439))\r\n ? ShowerComboTubType.replacement_tub\r\n : ShowerComboTubType.bathtub_liner;\r\n this.leftShowerWallType = 'Pony';\r\n this.showerComboSize = '60in';\r\n\r\n }\r\n\r\n load(dbFeature) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Bathtub Liner\":\r\n relatedItemName = \"bathTubLiner\";\r\n RelatedItemClass = BathTubLiner;\r\n break;\r\n case \"Replacement Tub\":\r\n relatedItemName = \"replacementTub\";\r\n RelatedItemClass = ReplacementTub;\r\n break;\r\n case \"Walk In Tub\":\r\n relatedItemName = \"walkInTub\";\r\n RelatedItemClass = WalkInTub;\r\n break;\r\n case \"Jetted Tub\":\r\n relatedItemName = \"jettedTub\";\r\n RelatedItemClass = JettedTub;\r\n break;\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n setSpecificRules() {\r\n if (!this.wallConfiguration) {\r\n this.wallConfiguration = new WallConfiguration(true);\r\n this.wallConfiguration.counts = {\r\n allLayoutFeaturesCount: 0,\r\n largeLayoutFeaturesCount: 0,\r\n smallLayoutFeaturesCount: 0\r\n };\r\n this.relatedItems.unshift(this.wallConfiguration);\r\n this.wallConfiguration.getParent = () => this;\r\n }\r\n const wallConfigurations = [\r\n ShowerTubCombo.createCustomWallConfiguration(\r\n custom60inPonyShower,\r\n \"Pony Wall 60in\",\r\n \"Pony\",\r\n \"60in\",\r\n {\r\n \"ShowerSize\": ['60in'],\r\n \"CountertopSize\": [\"20in\", \"24in\", \"30in\", \"36in\", \"48in\", \"60in\", \"72in\"],\r\n },\r\n this,\r\n 100000\r\n ),\r\n ShowerTubCombo.createCustomWallConfiguration(\r\n custom60in30X8Shower,\r\n \"Full Wall 60in\",\r\n \"30X8\",\r\n \"60in\",\r\n {\r\n \"ShowerSize\": ['60in'],\r\n \"CountertopSize\": [\"20in\", \"24in\", \"30in\", \"36in\", \"48in\", \"60in\", \"72in\"],\r\n },\r\n this,\r\n 100001\r\n ),\r\n ];\r\n Object.keys(LayoutType).forEach(layoutType => {\r\n this.wallConfiguration.featuresList[layoutType] = wallConfigurations;\r\n this.wallConfiguration.counts[layoutType.toLowerCase() + \"LayoutFeaturesCount\"]++;\r\n });\r\n }\r\n\r\n static createCustomWallConfiguration(customThumbnail, name, leftShowerWallType, showerComboSize, metaData, parent, id) {\r\n const conf = new WallConfiguration();\r\n conf.partName = name;\r\n conf.showerBodyId = name.toLowerCase().replace(/ /gi, \"-\");\r\n conf.dbFeature = {};\r\n conf.featureName = name;\r\n conf.groupName = \"Wall Configuration\";\r\n conf.showerComboSize = showerComboSize;\r\n // conf.parent = parent;\r\n conf.getParent = () => parent.wallConfiguration;\r\n conf.metaData = metaData;\r\n conf.leftShowerWallType = leftShowerWallType;\r\n conf.customThumbnail = customThumbnail;\r\n conf.dbFeature = fixDbFeatureProperties({\r\n metaData,\r\n id,\r\n unlocked: true\r\n });\r\n return conf;\r\n }\r\n\r\n setLayers(layout, placeholdersNeeded) {\r\n\r\n if (!this.showerTubComboIsActive) {\r\n return null\r\n }\r\n\r\n let res = [];\r\n this.getRelatedItems().forEach(relatedItem => {\r\n relatedItem.setLayers(layout);\r\n (placeholdersNeeded && !relatedItem.placeholderChanged && relatedItem.placeholderFeature)\r\n ? relatedItem.placeholderFeature.layer.addTo(res)\r\n : relatedItem.activeFeature ? relatedItem.activeFeature.layer.addTo(res) : null;\r\n });\r\n\r\n return res.length ? res : null;\r\n }\r\n\r\n navigationItem() {\r\n return new DesignNavigationItem('Shower Tub Combo', this)\r\n }\r\n\r\n subParts() {\r\n\r\n let subParts = [\r\n ...this.getRelatedItems().filter(item => item.visible).map(_ => new DesignNavigationItem(_.partName, _)),\r\n ...this.layout.parts.Shower.subParts().filter(subPart => {\r\n return (subPart.text === \"Fixture\")\r\n || (subPart.text === \"Shower Head\")\r\n || (subPart.text === \"Shower Walls\")\r\n || (subPart.text === \"Shower Walls Accent\")\r\n || (subPart.text === \"Shower Door\")\r\n || (subPart.text === \"Handle\")\r\n || (subPart.text === \"Pony Wall\")\r\n || (subPart.text === \"Pony Wall Cap\")\r\n || (subPart.text === \"Pony Wall Glass\")\r\n })\r\n ];\r\n\r\n if (this.bottomTub === ShowerComboTubType.walk_in_tub) {\r\n subParts = subParts.filter(subPart => {\r\n return subPart.part.partId !== \"shower_door\" && subPart.part.partId !== \"shower_door_handle\" && subPart.part.partId !== \"shower_fixture\"\r\n })\r\n }\r\n\r\n return subParts\r\n }\r\n\r\n getShowerRelatedItems() {\r\n return this.layout.parts.Shower.getRelatedItems().filter(relItem => {\r\n return (relItem.partId === \"shower_fixture\")\r\n || (relItem.partId === \"shower_head\")\r\n || (relItem.partId === \"shower_interior_wall\")\r\n || (relItem.partId === \"shower_interior_wall_accent\")\r\n || (relItem.partId === \"shower_door\")\r\n || (relItem.partId === \"shower_door_handle\")\r\n || (relItem.partId === \"pony_wall\")\r\n || (relItem.partId === \"pony_wall_cap\")\r\n || (relItem.partId === \"pony_wall_glass\")\r\n })\r\n }\r\n\r\n setShowerTubCombo() {\r\n this.showerTubComboIsActive = true;\r\n if (this.layout.type === LayoutType.Small) {\r\n const showerParent = this.layout.parts.Shower;\r\n if (showerParent.showerBody && showerParent.showerBody.disabled) { // switch on all Shower features\r\n showerParent.showerBody.disabled = false;\r\n showerParent.showerBody.disabledClick();\r\n this.showerTubComboIsActive = true;\r\n }\r\n }\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false\r\n }\r\n\r\n handleSubPartClick() {}\r\n\r\n setZIndex(zIndexes) {\r\n if (!this.showerTubComboIsActive) {\r\n return null\r\n }\r\n\r\n if(zIndexes)\r\n this.relatedItems.forEach(_ => _.setZIndex(zIndexes));\r\n }\r\n\r\n setActiveTub(bottomTub) {\r\n this.bottomTub = bottomTub;\r\n }\r\n\r\n showerSize() {\r\n return this.showerComboSize\r\n }\r\n\r\n showerDimensions() {\r\n return this.leftShowerWallType\r\n }\r\n\r\n setShowerSize(leftShowerWallType, showerComboSize) {\r\n this.leftShowerWallType = leftShowerWallType;\r\n this.showerComboSize = showerComboSize;\r\n }\r\n\r\n setDefault() {\r\n // this.relatedItems.forEach(relatedItem => relatedItem.setDefault(layout));\r\n }\r\n\r\n}\r\n","// import $ from \"jquery\";\r\n// import sqftShape from \"./../core/shapes/sqftShape\";\r\nimport sqftConfig from \"./../store/sqftConfig\";\r\nimport sqftStore from \"./sqftStore\";\r\nimport workspace from \"../core/workspace\";\r\nimport {\r\n BACKSPLASH_LABELS,\r\n COUNTERTOP_LABELS,\r\n isDisabledInPopupShouldBeHidden,\r\n MOVABLE_IMAGE_TYPES,\r\n RESOURCE_ATTACHED_TO_TYPE,\r\n SHAPE_PART_ID,\r\n SIDEBAR_NAVIGATION_BUTTONS,\r\n SQFT_CHILD_FEATURE_GROUP_PART_IDS,\r\n SQFT_SHAPES_THAT_ADD_OVERHANG\r\n} from \"../../../constants\";\r\nimport sqftShape from \"../core/shapes/sqftShape\";\r\nimport MovableImage from \"../core/shapes/movableImage\";\r\nimport slabWorkspace from \"../core/slab/slabWorkspace\";\r\nimport {getPointField} from \"../../../helpers/sqftHelper\";\r\nimport ShapeRotatable from \"../core/shapes/shapeParts/shapeRotatable\";\r\nimport ChangeValuePopup from \"../../popup/parts/ChangeValuePopup\";\r\nimport {\r\n addChangeValuePopup,\r\n changeValuePopup,\r\n deleteChangeValuePopup,\r\n //setSQFTActiveButton,\r\n //setSQFTMenuOpened\r\n} from \"../../../../../actions/sqftMenuFunctions\";\r\nimport store from \"../../../../../store\";\r\nimport SqftStore from \"./sqftStore\";\r\nimport {updateSQFTCalculations} from \"../../../../../actions/sqftFunctions\";\r\nimport {isSFTCabinetsGroup} from \"../../../helpers/sqftNavigationHelper\";\r\nimport Rectangle from \"../core/shapes/layouts/rectangle\";\r\nimport {initTitle} from \"../core/controls/labels/labelsHelper\";\r\nimport {SLAB_IMAGE_TYPES} from \"../../../../../reducers/sqftSlabReducer\";\r\nimport sqftShapeIntersectionsManager from \"./sqftShapeIntersectionsManager\";\r\nimport {getCurrentLayout} from \"../../../../appLayout\";\r\nimport {SHAPE_PART_IDS_VISIBLE_ONLY_IN_THE_SLAB_MODE} from \"../../../constantsFeature\";\r\nimport {\r\n areCollinearAndOverlap,\r\n convexHull, removeConsecutiveDuplicates,\r\n roundShapePoints,\r\n unifyShapePoints\r\n} from \"../../../helpers/coordinatesHelper\";\r\n\r\nconst sqftShapeManager = {\r\n shapes: [],\r\n objIds: 0,\r\n addShape: function(segments, shapeType, historyPosition, partId, fromLayout = null, shapeParams = {}) {\r\n const shapeId = workspace.addShape(segments, shapeType, historyPosition, partId, fromLayout, shapeParams);\r\n\r\n const state = store.getState();\r\n const updateCalculations = state.sqftState.updateCalculations;\r\n store.dispatch(updateSQFTCalculations(updateCalculations + 1));\r\n\r\n return shapeId\r\n },\r\n addPlaceholderShape: function(width, height) {\r\n const state = store.getState();\r\n const shouldUseSlabPricing = state.sqftSlabState.isSlabPricingEnabled;\r\n const shapeSegments = new Rectangle(width, height);\r\n const shapeId = sqftShapeManager.addShape(shapeSegments, 'square', null, SHAPE_PART_ID.slabPlaceHolder);\r\n const shape = sqftShapeManager.getShapeById(shapeId);\r\n sqftShapeIntersectionsManager.updateShapesIntersections();\r\n sqftShapeIntersectionsManager.updateSlabPlaceholderFeatureId();\r\n shape.deregisterLineEvents();\r\n shape.setSlabPricing(shouldUseSlabPricing);\r\n initTitle('PLACEHOLDER', SLAB_IMAGE_TYPES.placeholder, shape);\r\n },\r\n getShapeById: function(shapeId) {\r\n return workspace.getShapeById(shapeId);\r\n },\r\n getShapeByIds: function(ids) {\r\n return workspace.getShapes().filter(shape => ids.includes(shape.id));\r\n },\r\n hasSameFeatureId(shapes) {\r\n if (shapes.length === 0) return true;\r\n\r\n const firstFeatureId = shapes[0].featureId;\r\n for (let obj of shapes) {\r\n if (obj.featureId !== firstFeatureId) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n },\r\n hasSameSharedFeatureName(shapes) {\r\n if (shapes.length === 0) return true;\r\n\r\n const firstFeatureId = shapes[0].featureId;\r\n const layout = getCurrentLayout();\r\n const currentShapeFeature = layout.getFeatureById(firstFeatureId, true);\r\n if (currentShapeFeature) {\r\n const currentShapeFeatureSharedName = currentShapeFeature.dbFeature.sharedFeatureName;\r\n for (let testShape of shapes) {\r\n const testShapeFeature = layout.getFeatureById(testShape.featureId, true);\r\n if (testShapeFeature && testShapeFeature.dbFeature.sharedFeatureName !== currentShapeFeatureSharedName) {\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n return true;\r\n },\r\n removeShapeById: function(shapeId) {\r\n return workspace.removeShapeById(shapeId);\r\n },\r\n setShapeFeature: function (shapeId, visualizerFeature) {\r\n if (visualizerFeature && visualizerFeature.dbFeature) {\r\n let shape = workspace.getShapeById(shapeId);\r\n\r\n if (shape instanceof sqftShape || shape instanceof MovableImage) {\r\n shape.setFeatureId(visualizerFeature.dbFeature.id);\r\n } else if (shape && shape.type === RESOURCE_ATTACHED_TO_TYPE.backsplash) {\r\n const sqftShape = workspace.getShapeById(shape.attachedToParentId);\r\n const line = sqftShape.getLineById(shape.attachedToId);\r\n if (line) {\r\n line.setBacksplashFeatureId(visualizerFeature.dbFeature.id);\r\n }\r\n }\r\n }\r\n },\r\n setShapeFeatureId: function (shapeId, featureId) {\r\n let shape = workspace.getShapeById(shapeId);\r\n\r\n if (shape instanceof sqftShape || shape instanceof MovableImage) {\r\n shape.setFeatureId(featureId);\r\n }\r\n },\r\n setShapeRelatedParentFeatureId: function (shapeId, featureId) {\r\n let shape = workspace.getShapeById(shapeId);\r\n\r\n if (shape instanceof sqftShape || shape instanceof MovableImage) {\r\n shape.relatedParentFeatureId = featureId;\r\n }\r\n },\r\n getCounterTopShapes() {\r\n const shapes = workspace.getShapes();\r\n\r\n return shapes.filter(function(shape) {\r\n const counterTopLabel = Object.keys(COUNTERTOP_LABELS).find(cLabel => cLabel === shape.type);\r\n if (counterTopLabel) {\r\n return true\r\n }\r\n return !shape.type\r\n && !SHAPE_PART_IDS_VISIBLE_ONLY_IN_THE_SLAB_MODE.includes(shape.partId)\r\n });\r\n },\r\n getBacksplashLabeledShapes() {\r\n const shapes = workspace.getShapes();\r\n\r\n return shapes.filter(shp => Object.keys(BACKSPLASH_LABELS).includes(shp.partId));\r\n },\r\n hideSeamShapes: function() {\r\n let shapes = workspace.getShapes();\r\n shapes.forEach(shape => {\r\n if (\r\n shape.isWithShapePieces !== undefined\r\n && shape.isWithShapePieces()\r\n && (isDisabledInPopupShouldBeHidden() ? !shape.isDisabledInPopup : true)\r\n ) {\r\n shape.hideShapePieces()\r\n }\r\n })\r\n },\r\n restoreSeamShapes: function() {\r\n let shapes = workspace.getShapes();\r\n shapes.forEach(shape => {\r\n if (shape.isWithShapePieces !== undefined\r\n && !shape.isWithShapePieces()\r\n && shape.isHidden\r\n && (isDisabledInPopupShouldBeHidden() ? !shape.isDisabledInPopup : true)\r\n ) {\r\n shape.reInitEvents()\r\n }\r\n })\r\n },\r\n hideSlabShapes: function() {\r\n let shapes = workspace.getShapes();\r\n shapes.forEach(shape => {\r\n if (shape.partId === SHAPE_PART_ID.slabPlaceHolder) {\r\n shape.deregisterEvents();\r\n }\r\n })\r\n },\r\n restoreSlabShapes: function() {\r\n let shapes = workspace.getShapes();\r\n shapes.forEach(shape => {\r\n if (shape.partId === SHAPE_PART_ID.slabPlaceHolder) {\r\n shape.reInitEvents();\r\n shape.deregisterLineEvents();\r\n shape.reInitLineTitleEvents();\r\n }\r\n })\r\n },\r\n hideMiteredSections: function() {\r\n const lines = workspace.getLines();\r\n for (const line of lines) {\r\n if (line.isWithMitered()) {\r\n line.miteredOverlay.deregisterEvents();\r\n }\r\n }\r\n },\r\n restoreMiteredSections: function() {\r\n const lines = workspace.getLines();\r\n for (const line of lines) {\r\n if (line.isWithMitered()) {\r\n line.miteredOverlay.reInitEvents();\r\n }\r\n }\r\n },\r\n resetShapeChangesInTheSlabMode: function (shape) {\r\n shape.updateSlabPoints();\r\n shape.removeShapePieces();\r\n shape.setShapePieces([]);\r\n shape.shapeSlab.setRotationDegreesSlab(0);\r\n slabWorkspace.slabAdditionalShapes.removeAllActiveBacksplashesAttachedToShape(shape);\r\n },\r\n checkForUpdateSlabPoints: function() {\r\n let shapes = workspace.getShapes();\r\n shapes.forEach(shape => {\r\n if (shape instanceof sqftShape\r\n && ![SHAPE_PART_ID.seamPiece, SHAPE_PART_ID.slabPlaceHolder].includes(shape.partId)\r\n ) {\r\n if (shape.isPointsChanged) {\r\n shape.isPointsChanged = false;\r\n sqftShapeManager.resetShapeChangesInTheSlabMode(shape);\r\n }\r\n }\r\n })\r\n },\r\n checkForUpdateSlabPosition: function() {\r\n let shapes = workspace.getShapes();\r\n shapes.forEach(shape => {\r\n if (shape instanceof sqftShape\r\n && ![SHAPE_PART_ID.seamPiece, SHAPE_PART_ID.slabPlaceHolder].includes(shape.partId)\r\n ) {\r\n if (shape.isPositionChanged) {\r\n shape.updateSlabPosition();\r\n shape.isPositionChanged = false;\r\n slabWorkspace.slabAdditionalShapes.removeAllActiveBacksplashesAttachedToShape(shape);\r\n }\r\n }\r\n })\r\n },\r\n hideCorePieceShapes: function() {\r\n let shapes = workspace.getShapes();\r\n shapes.forEach(shape => {\r\n if (shape.isWithShapePieces !== undefined\r\n && shape.isWithShapePieces()\r\n && !shape.isHidden\r\n && ![SHAPE_PART_ID.seamPiece, SHAPE_PART_ID.slabPlaceHolder].includes(shape.partId)\r\n && (isDisabledInPopupShouldBeHidden() ? !shape.isDisabledInPopup : true)\r\n ) {\r\n shape.deregisterEvents()\r\n }\r\n })\r\n },\r\n restoreCorePieceShapes: function() {\r\n let shapes = workspace.getShapes();\r\n shapes.forEach(shape => {\r\n if (shape.isWithShapePieces !== undefined\r\n && shape.isWithShapePieces()\r\n && shape.isHidden\r\n && ![SHAPE_PART_ID.seamPiece, SHAPE_PART_ID.slabPlaceHolder].includes(shape.partId)\r\n && (isDisabledInPopupShouldBeHidden() ? !shape.isDisabledInPopup : true)\r\n ) {\r\n shape.reInitEvents()\r\n }\r\n })\r\n },\r\n hideShapeParts: function(shouldSkipSlabPlaceHolders = true) {\r\n let shapes = workspace.getShapes();\r\n shapes.forEach(shape => {\r\n if (shape instanceof sqftShape\r\n && (isDisabledInPopupShouldBeHidden() ? !shape.isDisabledInPopup : true)\r\n && (shouldSkipSlabPlaceHolders && shape.partId !== SHAPE_PART_ID.slabPlaceHolder)\r\n ) {\r\n shape.deregisterPartEvents()\r\n }\r\n })\r\n },\r\n restoreShapeParts: function() {\r\n let shapes = workspace.getShapes();\r\n shapes.forEach(shape => {\r\n if (shape instanceof sqftShape\r\n && ![SHAPE_PART_ID.seamPiece, SHAPE_PART_ID.slabPlaceHolder].includes(shape.partId)\r\n && (isDisabledInPopupShouldBeHidden() ? !shape.isDisabledInPopup : true)\r\n ) {\r\n shape.reInitPartEvents()\r\n }\r\n })\r\n },\r\n // reInitMeasurementsInTheSlabMode: function() {\r\n // const state = store.getState();\r\n // const isMeasurementVisibleInSlabMode = state.sqftSlabState.isMeasurementVisibleInSlabMode;\r\n // if (isMeasurementVisibleInSlabMode) {\r\n // initAllLineLength()\r\n // }\r\n // },\r\n undoSeam: function() {\r\n let seamHistory = sqftStore.getSeamHistory();\r\n if (seamHistory.length <= 0) {\r\n return\r\n }\r\n let latestShape = seamHistory.pop();\r\n for (let i = latestShape.shapePieces.length - 1; i >= 0; i--) {\r\n let shp = workspace.getShapeById(latestShape.shapePieces[i]);\r\n workspace.removeShape(shp);\r\n }\r\n latestShape.setShapePieces([]);\r\n latestShape.reInitEvents();\r\n },\r\n resetAllSeams: function() {\r\n this.restoreCorePieceShapes();\r\n this.hideShapeParts();\r\n let shapes = workspace.getShapes();\r\n for (let i = shapes.length - 1; i >= 0; i--) {\r\n if (shapes[i] instanceof sqftShape) {\r\n if (shapes[i].partId === SHAPE_PART_ID.seamPiece) {\r\n workspace.removeShape(shapes[i]);\r\n } else if (shapes[i].isWithShapePieces()) {\r\n shapes[i].setShapePieces([])\r\n }\r\n }\r\n }\r\n sqftStore.setSeamHistory([])\r\n },\r\n getVisibleCenter: function () {\r\n // console.log('sqftStore.ctxCenter', sqftStore.ctxCenter);\r\n // console.log('sqftStore.canvas', sqftStore.canvas);\r\n // console.log('sqftStore.scale', sqftConfig.scale);\r\n return {\r\n x: (sqftStore.ctxCenter.x + (sqftStore.canvas.width / 2)) / sqftConfig.scale,\r\n y: (sqftStore.ctxCenter.y + (sqftStore.canvas.height / 2)) / sqftConfig.scale\r\n }\r\n },\r\n getMinMax: (segments) => {\r\n let minX = null, maxX = 0;\r\n let minY = null, maxY = 0;\r\n for (let i = 0; i < segments.length; i++) {\r\n let s = segments[i];\r\n if (minX === null || s.from.x < minX)\r\n minX = s.from.x;\r\n if (s.from.x > maxX)\r\n maxX = s.from.x;\r\n if (minY === null || s.from.y < minY)\r\n minY = s.from.y;\r\n if (s.from.y > maxY)\r\n maxY = s.from.y\r\n }\r\n return {\r\n width: maxX - minX,\r\n height: maxY - minY,\r\n x: {\r\n min: minX,\r\n max: maxX\r\n },\r\n y: {\r\n min: minY,\r\n max: maxY\r\n }\r\n };\r\n },\r\n getMinMaxWorkspacePoints: (workspace, isIncludeBumpout = true) => {\r\n let from;\r\n let to;\r\n let minX = null;\r\n let maxX = null;\r\n let minY = null;\r\n let maxY = null;\r\n let offset = workspace.getOffset();\r\n let shapes = workspace.getShapes();\r\n for (let i = 0; i < shapes.length; i++) {\r\n let shape = shapes[i];\r\n if (shape.getLines) {\r\n let lines = shape.getLines();\r\n for (let n = 0; n < lines.length; n++) {\r\n from = lines[n].from.getPointField();\r\n to = lines[n].to.getPointField();\r\n\r\n if (minX === null) {\r\n minX = from.x < to.x ? from.x : to.x;\r\n maxX = from.x > to.x ? from.x : to.x;\r\n minY = from.y < to.y ? from.y : to.y;\r\n maxY = from.y > to.y ? from.y : to.y;\r\n }\r\n\r\n if (isIncludeBumpout && lines[n].isWithBumpout && lines[n].isWithBumpout()) {\r\n [minX, maxX, minY, maxY] = sqftShapeManager.getMinMaxBumpoutPoints(lines[n], minX, maxX, minY, maxY);\r\n }\r\n\r\n minX = from.x < minX ? from.x : minX;\r\n maxX = from.x > maxX ? from.x : maxX;\r\n minX = to.x < minX ? to.x : minX;\r\n maxX = to.x > maxX ? to.x : maxX;\r\n\r\n minY = from.y < minY ? from.y : minY;\r\n maxY = from.y > maxY ? from.y : maxY;\r\n minY = to.y < minY ? to.y : minY;\r\n maxY = to.y > maxY ? to.y : maxY;\r\n }\r\n }\r\n }\r\n\r\n return {\r\n minX : minX - offset.x,\r\n maxX : maxX - offset.x,\r\n minY : minY - offset.y,\r\n maxY : maxY - offset.y\r\n }\r\n },\r\n disableRotatableStateForAllShapes: () => {\r\n const shapes = workspace.getShapes();\r\n for (const shape of shapes) {\r\n if (shape instanceof sqftShape && shape.shapeRotatable) {\r\n sqftShapeManager.disableRotatableState(shape);\r\n }\r\n }\r\n },\r\n canShapeBeRotated: (shape) => {\r\n const isShapeCanBeRotated = shape instanceof sqftShape\r\n && shape.shapePieces.length === 0\r\n && !shape.isDisabledInPopup\r\n && !(shape.isWithBumpout() || shape.isWithMitered())\r\n ;\r\n const isMovableImageCanBeRotated = shape instanceof MovableImage && shape.type !== MOVABLE_IMAGE_TYPES.slabImage;\r\n return isShapeCanBeRotated || isMovableImageCanBeRotated\r\n },\r\n closeRotatablePopups: () => {\r\n const shapes = workspace.getShapes();\r\n shapes.forEach(shape => {\r\n if (shape.getIsRotatable && shape.getIsRotatable()) {\r\n sqftShapeManager.disableRotatableState(shape);\r\n }\r\n })\r\n },\r\n disableRotatableState: (shape) => {\r\n shape.setIsRotatable(false);\r\n shape.shapeRotatable.reInitShapePoints();\r\n shape.shapeRotatable.destroy();\r\n shape.shapeRotatable = null;\r\n store.dispatch(deleteChangeValuePopup('shape' + shape.id));\r\n },\r\n setShapeAsRotatable: (shape) => {\r\n const isSlabMode = SqftStore.isSlabMode();\r\n // todo fix rotation of slab images in slab mode\r\n if (shape instanceof MovableImage && shape.type === MOVABLE_IMAGE_TYPES.slabImage && isSlabMode) {\r\n return\r\n }\r\n shape.shapeRotatable = new ShapeRotatable(shape);\r\n shape.setIsRotatable(true);\r\n const shapeOffset = shape.getOffset();\r\n const isCabinet = isSFTCabinetsGroup();\r\n let changeValuePopupPosition;\r\n if (isCabinet) {\r\n const shapeHeight = shape instanceof MovableImage ? shape.getHeight(): shape.shapeCabinet.getShapeHeight();\r\n const shapeWidth = shape instanceof MovableImage ? shape.getWidth() : shape.shapeCabinet.getShapeWidth();\r\n changeValuePopupPosition = {left: shapeOffset.x, top: shapeOffset.y - (shapeHeight + shapeWidth) * sqftConfig.scale / 2}\r\n } else {\r\n changeValuePopupPosition = {left: shapeOffset.x, top: shapeOffset.y}\r\n }\r\n\r\n const changeRotatedDegreeValuePopup = new ChangeValuePopup(\r\n 'shape' + shape.id,\r\n 0,\r\n 360,\r\n () => {\r\n sqftConfig.workspace.menuItemActive = SIDEBAR_NAVIGATION_BUTTONS.move\r\n sqftShapeManager.disableRotatableState(shape);\r\n //store.dispatch(setSQFTMenuOpened(''));\r\n //store.dispatch(setSQFTActiveButton(SIDEBAR_NAVIGATION_BUTTONS.rotate));\r\n },\r\n () => {\r\n const state = store.getState();\r\n const valuePopup = state.sqftMenuState.changeValuePopups.find(valuePopup => valuePopup.id === 'shape' + shape.id);\r\n shape.rotate(1, shape.Direction.LEFT, isSlabMode);\r\n const newValuePopup = {...valuePopup, value: isSlabMode ? shape.rotatedDegreesSlab : shape.rotatedDegrees};\r\n store.dispatch(changeValuePopup(newValuePopup));\r\n },\r\n () => {\r\n const state = store.getState();\r\n const valuePopup = state.sqftMenuState.changeValuePopups.find(valuePopup => valuePopup.id === 'shape' + shape.id);\r\n const value = (isSlabMode ? shape.rotatedDegreesSlab : shape.rotatedDegrees) - 1 < 0 ? 359 : -1 ;\r\n shape.rotate(value, shape.Direction.LEFT, isSlabMode);\r\n store.dispatch(changeValuePopup({...valuePopup, value: isSlabMode ? shape.rotatedDegreesSlab : shape.rotatedDegrees}));\r\n },\r\n (e) => {\r\n const state = store.getState();\r\n const valuePopup = state.sqftMenuState.changeValuePopups.find(valuePopup => valuePopup.id === 'shape' + shape.id);\r\n const value = parseInt(e.target.value);\r\n if (Number.isInteger(value) && 359 > value > 0) {\r\n shape.rotate(value - (isSlabMode ? shape.rotatedDegreesSlab : shape.rotatedDegrees), shape.Direction.LEFT, isSlabMode);\r\n isSlabMode ? shape.rotatedDegreesSlab = value : shape.rotatedDegrees = value;\r\n store.dispatch(changeValuePopup({...valuePopup, value: value}));\r\n }\r\n },\r\n isSlabMode ? shape.rotatedDegreesSlab : shape.rotatedDegrees,\r\n changeValuePopupPosition\r\n );\r\n store.dispatch(addChangeValuePopup(changeRotatedDegreeValuePopup));\r\n },\r\n\r\n rotateShapeTo90Deg: (shape) => {\r\n // Check if the slab mode is active\r\n const isSlabMode = SqftStore.isSlabMode();\r\n const state = store.getState();\r\n\r\n // Find the corresponding popup for changing shape values\r\n const valuePopup = state.sqftMenuState.changeValuePopups.find(valuePopup => valuePopup.id === 'shape' + shape.id);\r\n\r\n // Determine the current rotation angle\r\n const currentRotation = isSlabMode ? shape.rotatedDegreesSlab : shape.rotatedDegrees;\r\n\r\n\r\n if ([0, 90, 180, 270, 360].includes(currentRotation)) {\r\n // Calculate the new rotation angle, adding 90 degrees and ensuring it wraps around after 360\r\n const newRotation = (currentRotation + 90) % 360;\r\n\r\n // Rotate the shape by the difference between the new and current rotation angles\r\n shape.rotate(newRotation - currentRotation, shape.Direction.LEFT, isSlabMode);\r\n\r\n // Update the shape's rotation angle based on whether slab mode is active\r\n if (isSlabMode) {\r\n shape.rotatedDegreesSlab = newRotation;\r\n } else {\r\n shape.rotatedDegrees = newRotation;\r\n }\r\n\r\n store.dispatch(changeValuePopup({...valuePopup, value: newRotation}));\r\n }\r\n },\r\n\r\n getShapeCornerPoints: () => {\r\n //todo\r\n },\r\n getMinMaxBumpoutPoints: (line, minX, maxX, minY, maxY, isPointOnField) => {\r\n let bumpoutPoints = line.bumpoutOverlay.getBumpoutPoints();\r\n let pointField;\r\n if (isPointOnField) {\r\n pointField = getPointField(bumpoutPoints.dragPoint.x, bumpoutPoints.dragPoint.y, line.getParent())\r\n } else {\r\n pointField = bumpoutPoints.dragPoint\r\n }\r\n minX = pointField.x < minX ? pointField.x : minX;\r\n maxX = pointField.x > maxX ? pointField.x : maxX;\r\n minY = pointField.y < minY ? pointField.y : minY;\r\n maxY = pointField.y > maxY ? pointField.y : maxY;\r\n\r\n return [minX, maxX, minY, maxY]\r\n },\r\n getMinMaxShapesPointsOnWorkspace: (shapes, shouldGetRegularPosition = false) => {\r\n if (shapes.length > 0) {\r\n let shapesPoints = [];\r\n shapes.forEach(shp => {\r\n if (shp.getPointsPosOnWorkspace) {\r\n shapesPoints.push(...shp.getPointsPosOnWorkspace(shouldGetRegularPosition));\r\n }\r\n });\r\n let pointsMinMax = sqftShapeManager.getMinMaxPoints(shapesPoints, false);\r\n\r\n //console.log(\"shapesMinMax\", pointsMinMax);\r\n\r\n return [\r\n {x: pointsMinMax.minX, y: pointsMinMax.minY},\r\n {x: pointsMinMax.maxX, y: pointsMinMax.minY},\r\n {x: pointsMinMax.maxX, y: pointsMinMax.maxY},\r\n {x: pointsMinMax.minX, y: pointsMinMax.maxY}\r\n ];\r\n }\r\n return []\r\n },\r\n getShapesConvexHullPointsOnWorkspace: (shapes) => {\r\n if (shapes.length > 0) {\r\n let shapesPoints = [];\r\n shapes.forEach(shp => {\r\n shapesPoints.push(...shp.getPointsPosOnWorkspace());\r\n });\r\n return convexHull(shapesPoints);\r\n }\r\n return []\r\n },\r\n getShapesConvexHullPointsPointField: (shapes) => {\r\n if (shapes.length > 0) {\r\n let shapesPoints = [];\r\n shapes.forEach(shp => {\r\n shapesPoints.push(...shp.getPointsPointField());\r\n });\r\n return convexHull(shapesPoints);\r\n }\r\n return []\r\n },\r\n getShapesContourPointsOnWorkspace: (shapes, shoudRemoveRepeatingPoints = true) => {\r\n if (shapes.length > 0) {\r\n const shapesPointsOnWorkspace = shapes.map(shp => {\r\n return shp.getPointsPosOnWorkspace();\r\n });\r\n const unifiedPoints = unifyShapePoints(shapesPointsOnWorkspace);\r\n if (shoudRemoveRepeatingPoints) {\r\n removeConsecutiveDuplicates(unifiedPoints);\r\n }\r\n return unifiedPoints\r\n }\r\n return []\r\n },\r\n getShapesOverhangOnWorkspace: (contourPoints, snappedShapes, minOverlap = 2) => {\r\n const shapes = workspace.getShapes();\r\n const overhangShapes = shapes.filter(shp => {\r\n const canShapeCreateOverhang = SQFT_SHAPES_THAT_ADD_OVERHANG.includes(shp.subType) || SQFT_SHAPES_THAT_ADD_OVERHANG.includes(shp.partId);\r\n const isShapeInsideSnappedShapes = snappedShapes.includes(shp);\r\n return canShapeCreateOverhang && !isShapeInsideSnappedShapes\r\n }\r\n );\r\n let results = new Array(contourPoints.length ? contourPoints.length - 1 : 0).fill(true);\r\n\r\n if (overhangShapes.length > 0) {\r\n for (const overhangShape of overhangShapes) {\r\n const pointsPosOnWorkspace = overhangShape.getPointsPosOnWorkspace();\r\n const roundedPoints = roundShapePoints(pointsPosOnWorkspace);\r\n roundedPoints.push(roundedPoints[0]); //close polygon\r\n\r\n for (let i = 0; i < contourPoints.length - 1; i++) {\r\n const cp1 = contourPoints[i];\r\n const cp2 = contourPoints[i + 1];\r\n for (let j = 0; j < roundedPoints.length - 1; j++) {\r\n const rp1 = roundedPoints[j];\r\n const rp2 = roundedPoints[j + 1];\r\n if (areCollinearAndOverlap(cp1, cp2, rp1, rp2, minOverlap)) {\r\n results[i] = false;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n //debugger // eslint-disable-line no-debugger\r\n return results\r\n },\r\n getShapesContourPointsPointField: (shapes) => {\r\n if (shapes.length > 0) {\r\n const shapesPointField = shapes.map(shp => {\r\n return shp.getPointsPointField();\r\n });\r\n return unifyShapePoints(shapesPointField);\r\n }\r\n return []\r\n },\r\n getMinMaxShapePoints: (shape, isIncludeBumpout = true, isPointOnField = true) => {\r\n let from;\r\n let to;\r\n let minX = null;\r\n let maxX = null;\r\n let minY = null;\r\n let maxY = null;\r\n let lines = shape.getLines();\r\n //let offset = workspace.getOffset();\r\n\r\n for (let n = 0; n < lines.length; n++) {\r\n if (isPointOnField) {\r\n from = getPointField(lines[n].from.x, lines[n].from.y, shape);\r\n to = getPointField(lines[n].to.x, lines[n].to.y, shape);\r\n } else {\r\n from = lines[n].from;\r\n to = lines[n].to;\r\n }\r\n\r\n if (minX === null) {\r\n minX = from.x < to.x ? from.x : to.x;\r\n maxX = from.x > to.x ? from.x : to.x;\r\n minY = from.y < to.y ? from.y : to.y;\r\n maxY = from.y > to.y ? from.y : to.y;\r\n }\r\n\r\n if (isIncludeBumpout && lines[n].isWithBumpout()) {\r\n [minX, maxX, minY, maxY] = sqftShapeManager.getMinMaxBumpoutPoints(lines[n], minX, maxX, minY, maxY , isPointOnField);\r\n }\r\n\r\n minX = from.x < minX ? from.x : minX;\r\n maxX = from.x > maxX ? from.x : maxX;\r\n minX = to.x < minX ? to.x : minX;\r\n maxX = to.x > maxX ? to.x : maxX;\r\n\r\n minY = from.y < minY ? from.y : minY;\r\n maxY = from.y > maxY ? from.y : maxY;\r\n minY = to.y < minY ? to.y : minY;\r\n maxY = to.y > maxY ? to.y : maxY;\r\n }\r\n\r\n return {\r\n minX : minX,\r\n maxX : maxX,\r\n minY : minY,\r\n maxY : maxY\r\n }\r\n },\r\n getMinMaxPoints: (points, isPointOnField = true) => {\r\n let point;\r\n let minX = null;\r\n let maxX = null;\r\n let minY = null;\r\n let maxY = null;\r\n\r\n for (let n = 0; n < points.length; n++) {\r\n if (isPointOnField) {\r\n point = getPointField(points[n].x, points[n].y, points[n].getGrandParent ? points[n].getGrandParent(): workspace);\r\n } else {\r\n point = points[n];\r\n }\r\n\r\n if (minX === null) {\r\n minX = point.x;\r\n maxX = point.x;\r\n minY = point.y;\r\n maxY = point.y;\r\n }\r\n\r\n minX = point.x < minX ? point.x : minX;\r\n maxX = point.x > maxX ? point.x : maxX;\r\n minY = point.y < minY ? point.y : minY;\r\n maxY = point.y > maxY ? point.y : maxY;\r\n }\r\n\r\n return {\r\n minX : minX,\r\n maxX : maxX,\r\n minY : minY,\r\n maxY : maxY\r\n }\r\n },\r\n setIsDisabledShapeInPopup: (id, isDisabledInPopup) => {\r\n let shape = sqftShapeManager.getShapeById(id);\r\n if (shape) {\r\n shape.isDisabledInPopup = isDisabledInPopup;\r\n if (isDisabledInPopupShouldBeHidden()) {\r\n if (isDisabledInPopup && shape.deregisterEvents) {\r\n shape.deregisterEvents()\r\n shape.shapeSlab.resetShapeSeams();\r\n } else if (shape.reInitEvents) {\r\n shape.reInitEvents();\r\n }\r\n }\r\n }\r\n },\r\n getSnappedShapes: (snappedShapeGroup) => {\r\n const shapes = workspace.getShapes();\r\n return shapes.filter(shp => {\r\n return !!(shp.shapeAbsolute && (shp.shapeAbsolute.getSnappedShapeGroup() === snappedShapeGroup))\r\n })\r\n },\r\n\r\n changeShapesFeatureIDIfColorWasChanged: (feature) => {\r\n if (feature && feature.partId) {\r\n const shapes = workspace.getShapes();\r\n const partId = Object.keys(SQFT_CHILD_FEATURE_GROUP_PART_IDS).includes(feature.partId)\r\n ? SQFT_CHILD_FEATURE_GROUP_PART_IDS[feature.partId]\r\n : feature.partId;\r\n\r\n //also include spacers\r\n const filteredShapes = shapes.filter(shape => shape.partId === partId || shape.parentPartId === partId );\r\n filteredShapes.forEach((shape) => {\r\n if (shape instanceof sqftShape) {\r\n shape.changeFeatureIdIfColorWasChanged(feature);\r\n }\r\n })\r\n }\r\n },\r\n updateShapeColorSet: (shapeId) => {\r\n const shape = workspace.getShapeById(shapeId);\r\n if (shape instanceof sqftShape) {\r\n shape.updateColorSet();\r\n }\r\n },\r\n updateMinMaxMiteredPoints: (shape) => {\r\n const lines = shape.getLines();\r\n for (const line of lines) {\r\n if (line.isWithMitered()) {\r\n line.miteredOverlay.updateMinMaxPoints();\r\n }\r\n }\r\n }\r\n};\r\n\r\nexport default sqftShapeManager\r\n","import {getFeatureCost, isIE} from \"./helpers\";\r\nimport Config, {IS_LIXIL_SERVERS} from \"../config\";\r\nimport graniteTransformationUkSubDomains from \"./graniteTransformationUkSubDomains\";\r\n\r\nexport const LOWES_DISCLAIMER_EN = \"This cost includes your selection of material, edge profile, faucet cut-outs, templating, installation plus any other options you have selected. All quotes are subject to changes. No quote shall be final until the time of template. Quotes only reflect the selections, information and the amount of materials you have entered in the estimator tool. After your purchase a certified Contractor will go on site to verify all dimensions and details of your order. Price adjustments will be possible thereafter. All expenses not covered in this quote, like possible extra trip charges, 2nd story fees, oversize piece/difficult access charges,high rise installation charge which are out of program installation costs, permit fees or any other expense not captured in this quote will be added at time of template. Projects under 27 SF incur a surcharge. All quotes are valid for 30 days. ALL 3D DESIGN IMAGES ARE FOR INSPIRATIONAL PURPOSES ONLY. See a kitchen associate or Call 1-844-454-1454 to finalize your purchase.\"\r\n\r\nexport const getFabricatorLogo = (fabricatorData) => {\r\n const hardCodedLogo = `https://qc-cdn.s3.amazonaws.com/Logos/Quote-Kitchen-and-Bath.jpg`;\r\n const hardCodedLowesLogo = `https://qc-cdn.s3.amazonaws.com/Logos/lowes.png`;\r\n const hardCodedRenoDepotLogo = `https://qc-cdn.s3.amazonaws.com/Logos/reno-depot.png`;\r\n const hardCodedRonaLogo = `https://qc-cdn.s3.amazonaws.com/Logos/rona.png`;\r\n\r\n if (isIE()) {\r\n if (fabricatorData.isRenoDepot) {\r\n return hardCodedRenoDepotLogo\r\n } else if (fabricatorData.isRona) {\r\n return hardCodedRonaLogo\r\n } else if (fabricatorData.isLowes) {\r\n return hardCodedLowesLogo\r\n }\r\n return hardCodedLogo\r\n }\r\n\r\n if (Config.isDevMode() && fabricatorData.logoUrl && !fabricatorData.logoUrl.includes(\"http\") && document.kvConfig.domain) {\r\n return document.kvConfig.domain + fabricatorData.logoUrl\r\n }\r\n\r\n return fabricatorData.logoUrl || hardCodedLogo\r\n}\r\n\r\nexport const hardCodeIsLowes = () => {\r\n const subDomains = [\"mdp_surfaces\", \"lowes_\", \"/rona.\", \"rona_\", \"rnodpt\", \"reno_depot\"];\r\n if (Config.isDevMode() && (document.kvConfig.userId === 139043)) {\r\n return true;\r\n }\r\n return subDomains.some(subDomain => window.location.href.includes(subDomain))\r\n};\r\n\r\nexport const hardCodeIsAmericanImport = () => {\r\n const subDomains = ['americanimport', 'americanstandard2020'];\r\n if (Config.isDevMode() && (document.kvConfig.userId === 140460 || document.kvConfig.userId === 155479)) { //American Import //American Standard 2020\r\n return true;\r\n }\r\n return subDomains.some(subDomain => window.location.href.includes(subDomain));\r\n};\r\n\r\nexport const hardCodeIsAmericanStandard = () => {\r\n const subDomains = ['americanstandard'];\r\n if (Config.isDevMode() && (document.kvConfig.userId === 139882 || document.kvConfig.userId === 251108)) { //American Standard 2020 // Cory\r\n return true;\r\n }\r\n return subDomains.some(subDomain => window.location.href.includes(subDomain));\r\n};\r\n\r\nexport const hardCodeIsRona = () => {\r\n const subDomains = [\"/rona.\", \"rona_\"];\r\n return subDomains.some(subDomain => window.location.href.includes(subDomain))\r\n};\r\n\r\nexport const hardCodeIsRenoDepot = () => {\r\n const subDomains = [\"rnodpt\", \"reno_depot\"];\r\n return subDomains.some(subDomain => window.location.href.includes(subDomain))\r\n};\r\n\r\nexport const hardCodeIsCaesarStone = () => {\r\n const domains = [\"quotetops.com\", \"quotekitchencountertops.com\"];\r\n return document.kvConfig.isCaesarStone || domains.some(domain => window.location.href.includes(domain))\r\n};\r\n\r\nexport const hardCodeIsModerno = () => {\r\n const subDomains = [\"moderno\"];\r\n return subDomains.some(subDomain => window.location.href.toLowerCase().includes(subDomain))\r\n};\r\n\r\nexport const hardCodeIsPorcelanosa = () => {\r\n const subDomains = [\"porcelanosa\"];\r\n return subDomains.some(subDomain => window.location.href.toLowerCase().includes(subDomain))\r\n};\r\n\r\nexport const hardCodeIsMcDermott = () => {\r\n const subDomains = [\"mcdermott_\", \"mts_\"];\r\n return subDomains.some(subDomain => window.location.href.includes(subDomain))\r\n};\r\n\r\nexport const hardCodeIsFlexFinish = () => {\r\n const subDomains = [\"flexfinish\", \"flexfinish2\", \"flex_finish\"];\r\n return subDomains.some(subDomain => window.location.href.includes(subDomain))\r\n};\r\n\r\nexport const hardCodeIsGraniteTransformation = () => {\r\n const subDomains = [\"granite_transformations\", \"trend_transformations\"];\r\n return subDomains.some(subDomain => window.location.href.includes(subDomain))\r\n};\r\n\r\nexport const hardCodeIsGraniteTransformationUK = () => {\r\n return graniteTransformationUkSubDomains.some(subDomain => window.location.href.includes(subDomain))\r\n};\r\n\r\nexport const hardCodeIsLixil = () => {\r\n return [139247, 139616, 139882].some(userId => document.kvConfig.userId === userId) || [\"grohe\", \"grohe2\", \"americanstandard\"].some(subDomain => {\r\n return window.location.host && window.location.host.split && (window.location.host.split('.')[0] === subDomain)\r\n })\r\n}\r\n\r\nexport const hardCodeIsAgent = () => {\r\n return document.kvConfig.userId === 140203 || (\r\n window.location.host && window.location.host.split && (window.location.host.split('.')[0] === \"agent\")\r\n )\r\n}\r\n\r\nexport const hardCodeIsTorrco = () => {\r\n return document.kvConfig.userId === 140298 || document.kvConfig.userId === 140299 || (\r\n window.location.host && window.location.host.includes && window.location.host.includes(\"torrco\")\r\n )\r\n}\r\n\r\nexport const hardCodeIsCoburn = () => {\r\n return document.kvConfig.userId === 140590 || document.kvConfig.userId === 140558 || (\r\n window.location.host && window.location.host.includes && window.location.host.includes(\"coburns_\")\r\n )\r\n}\r\n\r\nexport const hardCodeIsSolidSurface = () => {\r\n return document.kvConfig.userId === 245802 || (\r\n window.location.host && window.location.host.includes && window.location.host.includes(\"solidsurface\")\r\n )\r\n}\r\n\r\nexport const hardCodeIsLakesideSurfaces = () => {\r\n return document.kvConfig.userId === 252014 || (\r\n window.location.host && window.location.host.includes && window.location.host.includes(\"lakeside_surfaces\")\r\n )\r\n}\r\n\r\nexport const hardCodeIsDeStefano = () => {\r\n return document.kvConfig.userId === 260280 || (\r\n window.location.host && window.location.host.includes && window.location.host.includes(\"de_stefano\")\r\n ) || window.location.href.includes(\"fab_subdomain=de_stefano\")\r\n}\r\n\r\nexport const hardCodeIsNhance = () => {\r\n return document.kvConfig.userId === 268895 || (\r\n window.location.host && window.location.host.includes && window.location.host.includes(\"nhance\")\r\n ) || window.location.href.includes(\"fab_subdomain=nhance\")\r\n}\r\n\r\nexport const hardCodeIsEncore = () => {\r\n return document.kvConfig.userId === 267710 || (\r\n window.location.host && window.location.host.includes && window.location.host.includes(\"encore\")\r\n ) || window.location.href.includes(\"fab_subdomain=encore\")\r\n}\r\n\r\nexport const isEncore = hardCodeIsEncore();\r\n\r\nexport const hardCodeIsFloform = () => {\r\n const subDomains = [\"floform\"];\r\n return subDomains.some(subDomain => window.location.href.toLowerCase().includes(subDomain))\r\n}\r\n\r\nexport const hardCodeIsDeluxegarage = () => {\r\n const subDomains = [\"deluxegarage\"];\r\n return subDomains.some(subDomain => window.location.href.includes(subDomain))\r\n}\r\n\r\nexport const hardCodeIsRenuit = () => {\r\n const subDomains = [\"renuit\"];\r\n return subDomains.some(subDomain => window.location.href.includes(subDomain))\r\n}\r\n\r\nexport const isCabinetsFabricator = () => {\r\n return [256713, 246203, 256713].some(userId => document.kvConfig.userId === userId)\r\n}\r\n\r\nexport const isProd = () => {\r\n const subDomains = [\"quotekitchenandbath\", \"quotekitchencountertops\"];\r\n return subDomains.some(subDomain => window.location.href.includes(subDomain))\r\n}\r\n\r\nexport const getHardCodedFloFormShopCartCost = (cartItems) => {\r\n let materialTotalCost = 0;\r\n cartItems\r\n .filter(cartItem => {\r\n return cartItem.partId === \"center_island_countertop\"\r\n || cartItem.partId === \"countertop\"\r\n || (cartItem.partId === \"backsplash\" && (\r\n (cartItem.fromWizardGroupId === \"18\")\r\n || (cartItem.fromWizardGroupId === \"12\")\r\n || (cartItem.fromWizardGroupId === \"11\")\r\n || (cartItem.fromWizardGroupId === \"187\")\r\n || (cartItem.fromWizardGroupId === \"196\")\r\n || (cartItem.fromWizardGroupId === \"206\")\r\n ))\r\n })\r\n .forEach(cartItem => {\r\n materialTotalCost += getFeatureCost(cartItem.cartFeature, cartItem.quantity, cartItem.fromQtCategory);\r\n });\r\n // console.log(\"materialTotalCost\", materialTotalCost);\r\n return materialTotalCost * 0.1;\r\n}\r\n\r\nexport const isCafeCountetops = document.kvConfig.userId === 264613 || (\r\n window.location.host && window.location.host.includes && window.location.host.includes(\"cafecounterops\")\r\n);\r\n\r\nexport const hardCodeIsFabricator = (subDomain = \"\", fabId = null) => {\r\n if (!subDomain && !fabId) {\r\n return false\r\n }\r\n return (fabId && (document.kvConfig.userId === fabId)) || (\r\n window.location.host && window.location.host.includes && window.location.host.includes(subDomain)\r\n ) || window.location.href.includes(\"fab_subdomain=\" + subDomain)\r\n}\r\n\r\n\r\nexport const fabricatorsHardcodeObject = {\r\n // isRebath: document.kvConfig.userId === 71520 // removed as we don't use rebath at all\r\n // || window.location.href.includes(\"rebath\")\r\n // || window.location.href.includes(\"re-bath\"),\r\n // isRebath: window.location.href.includes(\"rebath\")\r\n // || window.location.href.includes(\"re-bath\")\r\n // || (action.payload.companyName && (action.payload.companyName.toLowerCase().includes(\"rebath\")\r\n // || action.payload.companyName.toLowerCase().includes(\"re-bath\")))\r\n // || (action.payload.name && (action.payload.name.toLowerCase().includes(\"rebath\")\r\n // || action.payload.name.toLowerCase().includes(\"re-bath\"))),\r\n isLowes: hardCodeIsLowes(),\r\n isRona: hardCodeIsRona(),\r\n isRenoDepot: hardCodeIsRenoDepot(),\r\n isAmericanImport: hardCodeIsAmericanImport(),\r\n isAmericanStandard: hardCodeIsAmericanStandard(),\r\n isCaesarStone: hardCodeIsCaesarStone(),\r\n isGraniteTransformation: hardCodeIsGraniteTransformation(),\r\n isGraniteTransformationUK: hardCodeIsGraniteTransformationUK(),\r\n isModerno: hardCodeIsModerno(),\r\n isMcDermott: hardCodeIsMcDermott(),\r\n isFlexFinish: hardCodeIsFlexFinish(),\r\n isLixil: hardCodeIsLixil(),\r\n isTorrco: hardCodeIsTorrco(),\r\n isCoburn: hardCodeIsCoburn(),\r\n isSolidSurface: hardCodeIsSolidSurface(),\r\n isLakesideSurfaces: hardCodeIsLakesideSurfaces(),\r\n isDeStefano: hardCodeIsDeStefano(),\r\n isNhance: hardCodeIsNhance(),\r\n isEncore: hardCodeIsEncore(),\r\n isGrohe: IS_LIXIL_SERVERS && hardCodeIsFabricator(\"grohe\", 139247),\r\n}\r\n","//********* NAVIGATION *********//\r\nimport * as types from \"./actionTypes\";\r\n\r\nexport const toggleDesktopNavigation = (desktopNavigationOpened = false) => ({\r\n type: types.TOGGLE_DESKTOP_NAVIGATION,\r\n payload: {desktopNavigationOpened}\r\n});\r\n\r\nexport const setNavigationViewType = (navigationViewType = 3) => ({\r\n type: types.SET_NAVIGATION_VIEW_TYPE,\r\n payload: {navigationViewType}\r\n});\r\n\r\nexport const setActiveNavigationNames = (activeNavigationParentName, activeNavigationChildName) => ({\r\n type: types.SET_ACTIVE_NAVIGATION_NAMES,\r\n payload: {activeNavigationParentName, activeNavigationChildName}\r\n});\r\n\r\nexport const setNavigationLoading = (navigationLoadingActive) => ({\r\n type: types.SET_NAVIGATION_LOADING,\r\n payload: {navigationLoadingActive}\r\n});\r\n\r\n// MODULE\r\nexport const setModuleContextMenuType = (moduleContextMenuType) => ({\r\n type: types.SET_MODULE_CONTEXT_MENU_TYPE,\r\n payload: {moduleContextMenuType}\r\n});\r\nexport const setModuleContextMenuDirection = (moduleContextMenuDirection) => ({\r\n type: types.SET_MODULE_CONTEXT_MENU_DIRECTION,\r\n payload: {moduleContextMenuDirection}\r\n});\r\nexport const setModuleContextMenuModule = (moduleContextMenuModule) => ({\r\n type: types.SET_MODULE_CONTEXT_MENU_MODULE,\r\n payload: {moduleContextMenuModule}\r\n});\r\nexport const setModuleContextMenuModulePart = (moduleContextMenuModulePart) => ({\r\n type: types.SET_MODULE_CONTEXT_MENU_MODULE_PART,\r\n payload: {moduleContextMenuModulePart}\r\n});\r\n\r\n// CABINET MODULE FILTERS\r\nexport const setActiveNavigationFilter = (activeNavigationFilter) => ({\r\n type: types.SET_ACTIVE_NAVIGATION_FILTER,\r\n payload: {activeNavigationFilter}\r\n});\r\nexport const setActiveNavigationFilterStepIndex = (activeNavigationFilterStepIndex) => ({\r\n type: types.SET_ACTIVE_NAVIGATION_FILTER_STEP_INDEX,\r\n payload: {activeNavigationFilterStepIndex}\r\n});\r\nexport const setCabinetNavigationFilterCompleted = (cabinetNavigationFilterCompleted) => ({\r\n type: types.SET_CABINET_NAVIGATION_FILTER_COMPLETED,\r\n payload: {cabinetNavigationFilterCompleted}\r\n});\r\n\r\n//COUNTERTOP WIZARD\r\nexport const setCountertopNavigationFilterCompleted = (countertopNavigationFilterCompleted) => ({\r\n type: types.SET_COUNTERTOP_NAVIGATION_FILTER_COMPLETED,\r\n payload: {countertopNavigationFilterCompleted}\r\n});\r\nexport const setCountertopWizard = (countertopWizard) => ({\r\n type: types.SET_COUNTERTOP_WIZARD,\r\n payload: {countertopWizard}\r\n});\r\nexport const setCabinetsApplyTo = (cabinetsApplyTo) => ({\r\n type: types.SET_CABINETS_APPLY_TO,\r\n payload: {cabinetsApplyTo}\r\n});\r\nexport const setCabinetsApplyToBathroom = (cabinetsApplyToBathroom) => ({\r\n type: types.SET_CABINETS_APPLY_TO_BATHROOM,\r\n payload: {cabinetsApplyToBathroom}\r\n});\r\nexport const setCountertopsApplyTo = (countertopsApplyTo, newArrayLogic = false) => ({\r\n type: types.SET_COUNTERTOPS_APPLY_TO,\r\n payload: {countertopsApplyTo, newArrayLogic}\r\n});\r\nexport const setCountertopsApplyToBathroom = (countertopsApplyToBathroom, newArrayLogic = false) => ({\r\n type: types.SET_COUNTERTOPS_APPLY_TO_BATHROOM,\r\n payload: {countertopsApplyToBathroom, newArrayLogic}\r\n});\r\nexport const setApplyToCommon = (arrayToChange, isNewNotUsed, type) => {\r\n let arrayPropertyToChange = \"test\";\r\n switch (type) {\r\n case \"handles\":\r\n arrayPropertyToChange = \"handlesApplyToBathroom\";\r\n break;\r\n case \"showerFloor\":\r\n arrayPropertyToChange = \"showerFloorApplyToBathroom\";\r\n break;\r\n default:\r\n console.error(\"setApplyTo function no type passed\", type);\r\n break;\r\n }\r\n return {\r\n type: types.SET_APPLY_TO_COMMON,\r\n payload: {\r\n [arrayPropertyToChange]: arrayToChange,\r\n }\r\n }\r\n};\r\nexport const setEdgesApplyTo = (edgesApplyTo) => ({\r\n type: types.SET_EDGES_APPLY_TO,\r\n payload: {edgesApplyTo}\r\n});\r\n\r\n// TOGGLE DISABLED RADIO\r\nexport const toggleUpdateDisableFeatureGroupRadio = (updateDisableFeatureGroupRadio) => ({\r\n type: types.UPDATE_DISABLE_FEATURE_GROUP_RADIO,\r\n payload: {updateDisableFeatureGroupRadio}\r\n});\r\n\r\n// TOGGLE DISABLED RADIO\r\nexport const toggleNavItemPositionModal = (navItemPositionModal) => ({\r\n type: types.TOGGLE_NAV_ITEM_POSITION_MODAL,\r\n payload: {navItemPositionModal}\r\n});\r\n\r\nexport const setUseFeaturesLightRequest = (useFeaturesLightRequest) => ({\r\n type: types.SET_USE_FEATURES_LIGHT_REQUEST,\r\n payload: {useFeaturesLightRequest}\r\n});\r\n","import {useCallback, useEffect, useMemo, useRef, useState} from \"react\";\r\nimport sqftEventManager from \"../bvcomponents/sqft/components/canvas/store/sqftEventManager\";\r\nimport {checkIfLookFeaturesReceived} from \"../api/look-api\";\r\nimport store from \"../store\";\r\nimport {updateNavigationCount} from \"../actions/lookFunctions\";\r\nimport Config from \"../config\";\r\nimport {getRoomLayouts} from \"../bvcomponents/look/lookNavigation/lookFunctions\";\r\nimport {isProd} from \"./fabricatorHardcode\";\r\n\r\nexport const usePrevious = (value) => {\r\n const ref = useRef();\r\n useEffect(() => {\r\n ref.current = value;\r\n });\r\n return ref.current;\r\n}\r\n\r\nexport const useIsMounted = () => {\r\n const isMountedRef = useRef(true);\r\n const isMounted = useCallback(() => isMountedRef.current, []);\r\n\r\n useEffect(() => {\r\n return () => void (isMountedRef.current = false);\r\n }, []);\r\n\r\n return isMounted;\r\n}\r\n\r\nexport const IsMountedComponent = (props) => {\r\n const {children} = props;\r\n const isMountedComponent = useIsMounted();\r\n return typeof children === 'function' ? children(isMountedComponent) : children;\r\n}\r\n\r\nexport const useOutsideClick = (ref, callback, useSQFTCanvas = false) => {\r\n const handleClick = e => {\r\n if (ref.current && !ref.current.contains(e.target)) {\r\n callback(e);\r\n }\r\n };\r\n\r\n const handleClickThroughCanvasEvents = (mousePos, e) => {\r\n if (ref.current && !ref.current.contains(e.target)) {\r\n callback(e);\r\n }\r\n return false;\r\n };\r\n\r\n useEffect(() => {\r\n if (useSQFTCanvas) {\r\n const objectName = { name: 'helperOutsideClickHook' };\r\n\r\n document.addEventListener(sqftEventManager.events.CLICK, handleClick);\r\n //document.addEventListener(sqftEventManager.events.TOUCH_START, handleClick);\r\n sqftEventManager.addEvent(\r\n sqftEventManager.events.MOUSE_DOWN,\r\n handleClickThroughCanvasEvents,\r\n objectName,\r\n sqftEventManager.priorities.OVERALL\r\n );\r\n\r\n return () => {\r\n document.removeEventListener(sqftEventManager.events.CLICK, handleClick);\r\n //document.removeEventListener(sqftEventManager.events.TOUCH_START, handleClick);\r\n sqftEventManager.removeEvent(objectName);\r\n };\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [ref, callback, useSQFTCanvas]);\r\n};\r\n\r\nexport const useOutsideClickSimple = (ref, callback, excludedClassNames = null) => {\r\n const handleClick = event => {\r\n if (ref.current && !ref.current.contains(event.target)) {\r\n if (excludedClassNames && excludedClassNames.some(className => {\r\n return event.target.classList.contains(className) || event.target.closest(\".\"+className)\r\n })) {\r\n return\r\n }\r\n callback(event);\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n document.addEventListener(\"click\", handleClick);\r\n\r\n return () => {\r\n document.removeEventListener(\"click\", handleClick);\r\n };\r\n });\r\n};\r\n\r\nexport const useProgressiveImage = (imageUrl) => {\r\n\r\n const [thumbnailLoaded, setThumbnailLoaded] = useState(false)\r\n const isMounted = useIsMounted();\r\n\r\n useEffect(() => {\r\n const image = new Image();\r\n image.onload = () => {\r\n if (isMounted()) {\r\n setThumbnailLoaded(true)\r\n }\r\n };\r\n image.onerror = () => {\r\n if (isMounted()) {\r\n setThumbnailLoaded(true)\r\n }\r\n };\r\n try {\r\n image.src = imageUrl;\r\n if (image.complete) {\r\n if (isMounted()) {\r\n setThumbnailLoaded(true)\r\n }\r\n }\r\n } catch (e) {\r\n if (isMounted()) {\r\n setThumbnailLoaded(true)\r\n }\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [imageUrl])\r\n\r\n return thumbnailLoaded\r\n}\r\n\r\nlet requestInProgressTimeoutId = null;\r\n\r\nexport const useFeaturesChecker = (featureGroup, visualizersLoadedLength) => {\r\n\r\n const [featuresLoaded, setFeaturesLoaded] = useState(featureGroup ? featureGroup.allFeaturesReceived : false)\r\n const isMounted = useIsMounted();\r\n\r\n const checkFeatures = () => {\r\n if (!featureGroup.allFeaturesReceived) {\r\n if (featureGroup.requestInProgress) {\r\n const callRecursiveFeaturesCheck = () => {\r\n console.log(\"callRecursiveFeaturesCheck\", featureGroup);\r\n if (featureGroup.allFeaturesReceived) {\r\n clearTimeout(requestInProgressTimeoutId);\r\n store.dispatch(updateNavigationCount());\r\n if (isMounted()) {\r\n setFeaturesLoaded(true)\r\n }\r\n return\r\n }\r\n requestInProgressTimeoutId = setTimeout(callRecursiveFeaturesCheck, 1000); // check every second for response\r\n };\r\n setTimeout(callRecursiveFeaturesCheck, 1000); // first time\r\n } else {\r\n checkIfLookFeaturesReceived(featureGroup).then(() => {\r\n // store.dispatch(updateFeatureGroupCount());\r\n store.dispatch(updateNavigationCount());\r\n if (isMounted()) {\r\n setFeaturesLoaded(true)\r\n }\r\n })\r\n }\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n if (!featureGroup || !visualizersLoadedLength) {\r\n return false\r\n }\r\n if (!featureGroup.allFeaturesReceived) {\r\n checkFeatures()\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [featureGroup, visualizersLoadedLength])\r\n\r\n return featuresLoaded\r\n}\r\n\r\nexport const useShowRoomLayoutsButton = (activePreset, isMobile, visualizersLoadedLength) => {\r\n return useMemo(() => {\r\n if (!visualizersLoadedLength) {\r\n return false\r\n }\r\n if (isMobile) {\r\n return false\r\n }\r\n if (Config.isVisualizerManagement()) {\r\n return true\r\n }\r\n if (isProd()) { // hided room scenes for production URLs\r\n return false\r\n }\r\n return getRoomLayouts().length > 1\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [activePreset, visualizersLoadedLength, isMobile])\r\n};\r\n","import invert from 'lodash/invert';\r\n\r\nimport {splitFeatureName} from \"../../../misc/utils\";\r\nimport DesignNavigationItem from \"../../visComponents/designNavigationItem\";\r\nimport {Part} from \"./part\";\r\nimport store from '../../../store';\r\nimport {LayoutAbbreviation, LayoutType} from \"./constants\";\r\nimport {getFeatureIsLocked} from \"../../../misc/helpers\";\r\nimport {SIDE_POSITIONS} from \"../../look/core/constants\";\r\n\r\n/**\r\n * Used for Complex parts such as Vanity, to perform some base functionality for related items\r\n */\r\nexport class IntermediatePart extends Part {\r\n\r\n constructor(isChild) {\r\n super(false, isChild);\r\n this.disabled = false;\r\n this.defaultDisabled = false; // used after reset click\r\n this.canBeDisabled = false;\r\n }\r\n\r\n /**\r\n * This will be called on feature creation\r\n * @param dbFeature\r\n */\r\n load(dbFeature) {\r\n if (this.layerPositions) {\r\n dbFeature.metaData[\"layerPosition\"] = dbFeature.metaData[\"Side\"] && dbFeature.metaData[\"Side\"][0] !== \"0\"\r\n ? dbFeature.metaData[\"Side\"][0]\r\n : SIDE_POSITIONS[0];\r\n const partNumber = dbFeature.metaData[\"layerPosition\"] === SIDE_POSITIONS[0] ? 1 : 2;\r\n const instance = new this.constructor(false, partNumber);\r\n return this.load_(dbFeature, instance, true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n return this.load_(dbFeature, new this.constructor());\r\n }\r\n\r\n /**\r\n * This will be called by the underlying vanity feature with a concrete instance of the part\r\n * @param dbFeature\r\n * @param part {Part}\r\n * @param setParent {boolean}\r\n * @param features\r\n */\r\n load_(dbFeature, part, setParent = true, features = 'features') {\r\n\r\n const featureList = features + \"List\";\r\n\r\n const {displayName} = dbFeature;\r\n let {featureName} = splitFeatureName(displayName);\r\n if (!featureName && dbFeature.groupName && dbFeature.displayName) {\r\n featureName = dbFeature.displayName.replace(dbFeature.groupName + \" - \", \"\")\r\n }\r\n // console.log('displayName:', displayName);\r\n\r\n if (setParent) {\r\n part.getParent = () => this;\r\n if (dbFeature.galleryImages) {\r\n const featured = dbFeature.galleryImages.find(galImage => galImage.featured);\r\n if (featured) {\r\n this.featuredImage = featured.url\r\n }\r\n dbFeature.galleryImages = dbFeature.galleryImages.sort((a, b) => b.default - a.default)\r\n }\r\n }\r\n\r\n if (!dbFeature.sharedFeatureName) {\r\n console.error(\"No sharedFeatureName property:\", dbFeature);\r\n }\r\n\r\n part.partName = featureName;\r\n part.metaData = dbFeature.metaData || {};\r\n\r\n if (dbFeature.s3Bindings && dbFeature.s3Bindings.length) {\r\n // dbFeature.s3Bindings = dbFeature.s3Bindings.filter(binding => binding.visualizer === \"Fireplace\")\r\n }\r\n\r\n part.dbFeature = dbFeature || {};\r\n if (!part.dbFeature.filterValueIDs) {\r\n part.dbFeature.filterValueIDs = {}\r\n }\r\n part.notAvailableInVisualizer = !dbFeature.s3Bindings || !dbFeature.s3Bindings.length;\r\n\r\n if (part.metaData.RoomLayout) {\r\n const roomLayout = part.metaData.RoomLayout;\r\n if (roomLayout.includes(LayoutAbbreviation.All)) {\r\n Object.keys(LayoutType).forEach(layoutName => {\r\n this[featureList][layoutName].push(part);\r\n })\r\n } else if (Array.isArray(roomLayout) && roomLayout.length) {\r\n roomLayout.forEach(roomLayoutAbbreviation => {\r\n const layoutName = invert(LayoutAbbreviation)[roomLayoutAbbreviation];\r\n if (layoutName) { // Prevent bad roomLayout Metadata\r\n this[featureList][layoutName].push(part);\r\n }\r\n });\r\n } else { // single value\r\n const layoutName = invert(LayoutAbbreviation)[roomLayout];\r\n if(layoutName) {\r\n this[featureList][layoutName].push(part);\r\n }\r\n }\r\n }\r\n\r\n if (part.notAvailableInVisualizer || !part.metaData.RoomLayout) {\r\n part.notAvailableInVisualizer = true;\r\n Object.keys(LayoutType).forEach(layoutName => {\r\n this[featureList][layoutName].push(part);\r\n })\r\n }\r\n\r\n // Object.keys(LayoutType).forEach(layoutName => {\r\n // this[features+\"List\"][layoutName].push(part);\r\n // });\r\n\r\n this.loadFeatureCommon(part);\r\n\r\n return part\r\n }\r\n\r\n getActiveFeatureConditions() {\r\n return this.getArrayOfConditions()\r\n }\r\n\r\n // navigationSubItems(filters, searchText, forFeature, filterGroups, firstOpenedFeature, firstOpenedConditions) { // to do\r\n navigationSubItems(filters, searchText) {\r\n // const featuresList = (forFeature && forFeature.metaData.layerPosition === SIDE_POSITIONS[1]) ? this.featuresParts : this.features;\r\n const filteredAvailableFeatures = this.getFeaturesBySearchText(this.getFilteredFeaturesByFilters(filters, this.features), searchText);\r\n let featuresToDisplay = this.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(true), filteredAvailableFeatures);\r\n // console.log(\"filterGroups\", filterGroups);\r\n return this.returnUniqueNavFeatures(featuresToDisplay)\r\n }\r\n\r\n navigationSubItemsWithFilter(propName, propValue, featuresToCheck = this.features) {\r\n return featuresToCheck.filter((feature) => {\r\n return feature.matchesMetaForCondition(propName, propValue);\r\n }).map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n navigationSubItemsWithFilterMultipleConditions(arrayOfConditions, featuresToCheck = this.features) {\r\n // console.log('arrayOfConditions', arrayOfConditions);\r\n // console.log('featuresToCheck', featuresToCheck);\r\n return featuresToCheck.filter((feature) => {\r\n return feature.notAvailableInVisualizer || arrayOfConditions.every((conditionObject) => {\r\n const {propName, propValue} = conditionObject;\r\n return feature.matchesMetaForCondition(propName, propValue);\r\n });\r\n })\r\n }\r\n\r\n setDefault(layout, setNotInVisFeature = false) {\r\n this.setFeatureGroupDefault(layout, setNotInVisFeature)\r\n }\r\n\r\n setLayerPositions = (activeFeature = this.activeFeature) => {\r\n if (!activeFeature) {\r\n return\r\n }\r\n const layout = this.getParent().layout;\r\n const conditions = this.getArrayOfConditions();\r\n if (layout && this.defaultLayerLayoutPositions && this.defaultLayerLayoutPositions[layout.type]) {\r\n Object.keys(this.layerPositions).forEach(key => {\r\n if (this.defaultLayerLayoutPositions[layout.type] === key\r\n && (!this.layerPositions[key] || !this.layerPositions[key].matchesMetaForArrayOfConditions(conditions))) {\r\n this.layerPositions[key] = activeFeature;\r\n } else if (activeFeature.dbFeature.metaData[\"layerPosition\"] !== key) {\r\n this.layerPositions[key] = null;\r\n }\r\n })\r\n } else {\r\n Object.keys(this.layerPositions).forEach(key => {\r\n if (layout.initialized) {\r\n if ((activeFeature.dbFeature.metaData[\"layerPosition\"] === key)\r\n && (this.layerPositions[key] && !this.layerPositions[key].matchesMetaForArrayOfConditions(conditions))) {\r\n this.layerPositions[key] = activeFeature;\r\n // } else if (this.setAllLayerPositions) {\r\n } else if (this.layerPositions[key]) { // here we have to change vanity cabinet to console for example\r\n const matchingPositionFeature = this.getMatchingPositionFeature(key);\r\n if (matchingPositionFeature) {\r\n this.layerPositions[key] = matchingPositionFeature;\r\n }\r\n }\r\n } else { // first time we should set everything by the default! // missing layers issue\r\n if ((activeFeature.dbFeature.metaData[\"layerPosition\"] === key)\r\n && (!this.layerPositions[key] || !this.layerPositions[key].matchesMetaForArrayOfConditions(conditions))) {\r\n this.layerPositions[key] = activeFeature;\r\n // } else if (this.setAllLayerPositions) {\r\n } else {\r\n const matchingPositionFeature = this.getMatchingPositionFeature(key);\r\n if (matchingPositionFeature) {\r\n this.layerPositions[key] = matchingPositionFeature;\r\n }\r\n }\r\n }\r\n })\r\n }\r\n }\r\n\r\n toggleLayerPositions() {\r\n Object.keys(this.layerPositions).forEach(key => {\r\n this.layerPositions[key] = this.disabled ? null : this.getMatchingPositionFeature(key)\r\n })\r\n }\r\n\r\n getMatchingPositionFeature = (position = \"\", fromFeature = this.activeFeature, fromLayout = null) => {\r\n if (fromFeature) { //just in case\r\n const name1 = fromFeature.getSplittedFeatureName();\r\n let arrayOfConditions = this.getArrayOfConditions();\r\n if (fromFeature.metaData[\"SkuName\"]) {\r\n arrayOfConditions.push({\r\n propName: \"SkuName\",\r\n propValue: fromFeature.metaData[\"SkuName\"]\r\n })\r\n }\r\n if (fromLayout) {\r\n let roomLayoutMeta = arrayOfConditions.find(condition => condition.propName === \"RoomLayout\");\r\n let roomSceneMeta = arrayOfConditions.find(condition => condition.propName === \"RoomScene\");\r\n if (roomLayoutMeta) {\r\n roomLayoutMeta.propValue = fromLayout.getCurrentLayoutAbbreviation();\r\n }\r\n if (roomSceneMeta) {\r\n roomSceneMeta.propValue = fromLayout.scene;\r\n }\r\n }\r\n const skuNamesPartIds = [\"shower_door\", \"walk_in_tub\", \"shower_pan_combo\"];\r\n const whereToFind = (!this.layerPositions || (position === Object.keys(this.layerPositions)[0])) ? this.features : this.featuresParts;\r\n return whereToFind.find((feature) => {\r\n return (skuNamesPartIds.includes(this.partId) || name1 === feature.getSplittedFeatureName())\r\n && feature.matchesMetaForArrayOfConditions(arrayOfConditions) && feature.metaData[\"layerPosition\"] === position\r\n });\r\n }\r\n return null\r\n };\r\n\r\n getArrayOfConditions() {\r\n const layout = this.getParent().layout;\r\n return [{\r\n propName: 'RoomLayout',\r\n propValue: layout.getCurrentLayoutAbbreviation()\r\n }, {\r\n propName: 'RoomScene',\r\n propValue: layout.scene\r\n }];\r\n }\r\n\r\n setLayers(layout) {\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions()))) {\r\n if (this.hasAdditionalParts) {\r\n this.checkIfFeaturePartIsMatching();\r\n }\r\n return this._setLayers(layout);\r\n }\r\n this.setDefault(layout);\r\n return this._setLayers(layout);\r\n }\r\n showLayerPositionsModal() {\r\n return false\r\n }\r\n\r\n clickFromAllWalls(ignoreLocked) {\r\n if (this && this.dbFeature && this.dbFeature.sharedFeatureName) {\r\n console.log(`${this.partId}:`, this.dbFeature.sharedFeatureName);\r\n }\r\n this.handleClick(ignoreLocked, \"all_walls\");\r\n }\r\n\r\n tryToSetTheSameFeature(filteredFeatures = [], partName = \"\") {\r\n if (this.activeFeature && this.activeFeature.partName) {\r\n let splittedFromTheLayoutName = partName\r\n ? this.removeLayoutFromPartName(partName)\r\n : this.activeFeature.getMatchingFeatureName();\r\n this.activeFeature = filteredFeatures.find(feature => {\r\n return feature.getMatchingFeatureName() === splittedFromTheLayoutName\r\n });\r\n if (this.activeFeature) {\r\n return true\r\n }\r\n }\r\n return false\r\n }\r\n\r\n /**\r\n * @param ignoreLocked {boolean} // false by the default, is used by wizard ONLY\r\n */\r\n handleClick(ignoreLocked = false) {\r\n const parent = this.getParent();\r\n const {activeQuoteIndex} = store.getState().quotesState;\r\n parent.firstClick[activeQuoteIndex] = true; // allow to show active item\r\n const featureIsLocked = getFeatureIsLocked(this, ignoreLocked);\r\n if (featureIsLocked) {\r\n parent.activeLockedFeature = this;\r\n } else {\r\n if (parent.activeLockedFeature) {\r\n parent.activeLockedFeature = null;\r\n }\r\n this.featureClick();\r\n }\r\n }\r\n\r\n featureClick() {\r\n const parent = this.getParent();\r\n parent.placeholderChanged = true;\r\n if (this.notAvailableInVisualizer) {\r\n parent.activeNotInVisualizerFeature = this; // do not change the activeFeature (in order to keep the layer)\r\n } else if (parent.activeNotInVisualizerFeature) {\r\n parent.activeNotInVisualizerFeature = null; // remove it from other searches and so on\r\n parent.activeFeature = this;\r\n } else {\r\n parent.activeFeature = this;\r\n }\r\n this.featureClicked();\r\n }\r\n\r\n hideLayers() {\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.src = '';\r\n }\r\n if (Array.isArray(this.activeFeatureParts) && this.activeFeatureParts.length) {\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n if (activeFeaturePart && activeFeaturePart.layer) {\r\n activeFeaturePart.layer.src = '';\r\n }\r\n })\r\n }\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.src = '';\r\n }\r\n if (this.layerPositions) {\r\n Object.keys(this.layerPositions).forEach(key => {\r\n if (this.layerPositions[key]) {\r\n this.layerPositions[key].layer.src = '';\r\n }\r\n })\r\n }\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n\r\n const getZIndex = (feature, partId = null) => {\r\n return feature.metaData[\"ZSorting\"] ? feature.metaData[\"ZSorting\"] * 1000 : zIndexes[partId || this.partId];\r\n }\r\n\r\n if (this.layerPositions) {\r\n Object.keys(this.layerPositions).forEach((key, keyIndex) => {\r\n const feature = this.layerPositions[key];\r\n if (feature) {\r\n feature.layer.zIndex = getZIndex(feature) + keyIndex*10;\r\n }\r\n })\r\n } else if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = getZIndex(this.activeFeature);\r\n if (this.hasAdditionalParts && this.activeFeatureParts && this.activeFeatureParts.length) {\r\n this.activeFeatureParts.forEach((activeFeaturePart, keyIndex) => {\r\n activeFeaturePart.layer.zIndex = getZIndex(activeFeaturePart, this.additionalPartPartId) + (keyIndex + 1) * 10;\r\n });\r\n }\r\n }\r\n }\r\n\r\n removeEdgeFromPartName(partName) {\r\n const filterGroups = store.getState().filterState.filterGroups;\r\n const edgeFilterGroup = filterGroups.find(group => group.name === \"Edge\" || group.name === \"Edge Profile\");\r\n if (edgeFilterGroup && edgeFilterGroup.values && edgeFilterGroup.values.length) {\r\n const edgeFilterGroupValues = edgeFilterGroup.values.sort((a,b) => {\r\n return a.value && b.value && (b.value.length - a.value.length)\r\n }); // 1st should be \"Full Bullnose\", then simple \"Bullnose\"\r\n edgeFilterGroupValues.forEach((filterGroupValue) => { // arrayOf {id: 293, value: \"Eased\", displayText: \"Eased\", parent_id: null, icon: \"\", …}\r\n partName = partName.split(\" \"+filterGroupValue.value).join(\"\");\r\n });\r\n }\r\n return partName\r\n }\r\n\r\n getCountertopGroupsSplittedFeatureName = () => {\r\n if (this._countertopGroupsCustomDisplayName == null) {\r\n this._countertopGroupsCustomDisplayName = this.dbFeature.sharedFeatureName;\r\n }\r\n return this._countertopGroupsCustomDisplayName\r\n };\r\n\r\n getSplittedFeatureName = () => {\r\n if (this._customDisplayName == null) {\r\n this._customDisplayName = this.dbFeature.sharedFeatureName || this.partName || \"\";\r\n }\r\n return this._customDisplayName\r\n };\r\n\r\n getMatchingFeatureName = () => {\r\n return this.getSplittedFeatureName()\r\n };\r\n\r\n getModuleFeatureName = () => {\r\n // return this.partName.split(\" M_\")[0];\r\n return this.partName.split(\" M\")[0];\r\n };\r\n\r\n featureIsMatchingFilters(currentFeature, activeFilters, filters = []) {\r\n return filters.every(filter => {\r\n return activeFilters[filter.id]\r\n && currentFeature.dbFeature.filterValueIDs[filter.id]\r\n && currentFeature.dbFeature.filterValueIDs[filter.id].includes(activeFilters[filter.id][0])\r\n })\r\n }\r\n\r\n getActiveFeaturePartsAccordingToActiveFeature(fromFeature = this.activeFeature, activeFeatureConditions = []) {\r\n let activeFeatureParts = [];\r\n if (fromFeature && fromFeature.partNumber) {\r\n let activeFeaturePart;\r\n const name1 = fromFeature.getSplittedFeatureName();\r\n // console.log(\"name1\", name1);\r\n let arrayOfConditions = activeFeatureConditions.length\r\n ? activeFeatureConditions\r\n : this.getActiveFeatureConditions(fromFeature);\r\n // if (this.partId === \"right_wall\") {\r\n // arrayOfConditions = arrayOfConditions.filter(condition => condition.propName !== \"MirrorSize\");\r\n // }\r\n if (this.getAdditionalPartsConditions) {\r\n arrayOfConditions = this.getAdditionalPartsConditions(arrayOfConditions); // modify or extend parts conditions\r\n }\r\n activeFeatureParts = this.featuresParts.filter((feature) => name1 === feature.getSplittedFeatureName());\r\n // console.log(\"this.featuresParts\", this.featuresParts);\r\n // console.log(\"activeFeatureParts\", activeFeatureParts);\r\n if (activeFeatureParts.length) {\r\n activeFeaturePart = activeFeatureParts.find((feature) => {\r\n return feature.matchesMetaForArrayOfConditions(arrayOfConditions)\r\n });\r\n if (!activeFeaturePart) {\r\n activeFeaturePart = activeFeatureParts[0];\r\n }\r\n }\r\n activeFeatureParts = activeFeaturePart ? [activeFeaturePart] : [];\r\n activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n }\r\n return activeFeatureParts\r\n }\r\n\r\n checkIfFeaturePartIsMatching() {\r\n if (this.activeFeatureParts && this.activeFeatureParts.length) {\r\n const activeFeatureConditions = this.getActiveFeatureConditions();\r\n const name1 = this.activeFeature.getSplittedFeatureName();\r\n const activeFeaturePart = this.activeFeatureParts[0];\r\n if (!(activeFeaturePart.matchesMetaForArrayOfConditions(activeFeatureConditions)\r\n && name1 === activeFeaturePart.getSplittedFeatureName())) {\r\n this.activeFeatureParts = this.setActiveFeatureParts(this.activeFeature, activeFeatureConditions);\r\n }\r\n } else {\r\n this.activeFeatureParts = this.setActiveFeatureParts();\r\n }\r\n }\r\n\r\n setActiveFeatureParts(fromFeature = this.activeFeature, activeFeatureConditions = []) {\r\n return this.getActiveFeaturePartsAccordingToActiveFeature(fromFeature, activeFeatureConditions);\r\n }\r\n\r\n}\r\n","import React from 'react';\r\nimport {connect} from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport CircularProgress from \"@mui/material/CircularProgress\";\r\n\r\nimport COLOR_THEMES from \"../../colorThemes\";\r\nimport LoadingBar from '../../lib/react-redux-loading-bar';\r\n\r\nconst MaterialSpinner = (props) => {\r\n const {activeTheme, color, size, withCounter} = props;\r\n\r\n const style = {'color': color || COLOR_THEMES[activeTheme].active}\r\n\r\n if (size) { // in order not to break others with size auto\r\n return (\r\n
\r\n \r\n
\r\n )\r\n }\r\n\r\n return (\r\n
\r\n {withCounter ? : null}\r\n \r\n
\r\n )\r\n};\r\n\r\nMaterialSpinner.propTypes = {\r\n color: PropTypes.string,\r\n size: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\r\n withCounter: PropTypes.bool,\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n activeTheme: store.serverState.activeTheme,\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps)(MaterialSpinner)\r\n","import * as PropTypes from \"prop-types\";\r\nimport {filterValueInterface} from \"./filterInterface\";\r\nimport {featureInterface} from \"./featureInterface\";\r\n\r\n// ITEM -> GROUP\r\n// ITEM -> GROUP -> SECTION -> STEP // not used\r\n\r\nexport const WIZARD_GROUP_TYPES = {\r\n group: \"group\",\r\n filter: \"filter\",\r\n custom: \"custom\",\r\n}\r\n\r\nexport const wizardGroupInterface = {\r\n id: PropTypes.string.isRequired,\r\n nodeType: PropTypes.oneOf(Object.keys(WIZARD_GROUP_TYPES)).isRequired,\r\n groupName: PropTypes.string.isRequired,\r\n filterGroupId: PropTypes.number,\r\n scopeImageUrl: PropTypes.string,\r\n customDisplayName: PropTypes.string,\r\n enabled: PropTypes.bool.isRequired,\r\n title: PropTypes.string,\r\n description: PropTypes.string,\r\n featuresExcluded: PropTypes.array,\r\n featuresIncluded: PropTypes.array,\r\n useIncluded: PropTypes.bool,\r\n filtersExcluded: PropTypes.array,\r\n productCartTitle: PropTypes.string,\r\n productCartDescription: PropTypes.string,\r\n uploadedImageUrl: PropTypes.string,\r\n noAvailableFilters: PropTypes.bool,\r\n notRequired: PropTypes.bool,\r\n mergedGroups: PropTypes.array, // same parent logic\r\n wizardGroupIcon: PropTypes.string,\r\n hideInCartAndReceipt: PropTypes.bool,\r\n multipleAddToCart: PropTypes.bool,\r\n inputFields: PropTypes.array, // {id: \"\", checked: bool, oneLine: bool}\r\n headerTitle: PropTypes.string, // {id: \"\", checked: bool}\r\n headerSubTitle: PropTypes.string, // {id: \"\", checked: bool}\r\n visibleInVisualizers: PropTypes.array, //[\"kitchen\", \"laundryroom\", etc]\r\n hideForCustomers: PropTypes.bool, // eyeball\r\n skipProductInfo: PropTypes.bool,\r\n hidePriceNoCart: PropTypes.bool,\r\n skipLockDontApply: PropTypes.bool,\r\n};\r\n\r\nexport const wizardNodeInterface = {\r\n id: PropTypes.string.isRequired,\r\n type: PropTypes.string.isRequired,\r\n position: PropTypes.object.isRequired,\r\n style: PropTypes.object,\r\n data: PropTypes.shape({\r\n wizardGroup: PropTypes.shape(wizardGroupInterface)\r\n }),\r\n};\r\n\r\nexport const wizardEdgeInterface = {\r\n id: PropTypes.string.isRequired,\r\n source: PropTypes.string.isRequired,\r\n target: PropTypes.string.isRequired,\r\n disabled: PropTypes.bool,\r\n};\r\n\r\nexport const wizardItemInterface = {\r\n id: PropTypes.number,\r\n visualizer: PropTypes.string,\r\n name: PropTypes.string,\r\n description: PropTypes.string,\r\n customImageUrl: PropTypes.string,\r\n uploadedImageUrl: PropTypes.string,\r\n enabled: PropTypes.bool,\r\n hideItems: PropTypes.bool,\r\n selected: PropTypes.bool,\r\n // wizardSteps: PropTypes.arrayOf(PropTypes.shape(wizardStepInterface)),\r\n // wizardSections: PropTypes.arrayOf(PropTypes.shape(wizardSectionInterface)),\r\n wizardGroups: PropTypes.arrayOf(PropTypes.shape(wizardGroupInterface)),\r\n wizardNodes: PropTypes.arrayOf(PropTypes.shape(wizardNodeInterface)),\r\n wizardEdges: PropTypes.arrayOf(PropTypes.shape(wizardEdgeInterface)),\r\n disabledScenes: PropTypes.arrayOf(PropTypes.number),\r\n startTitle: PropTypes.string,\r\n startDescription: PropTypes.string,\r\n};\r\n\r\nexport const wizardSelectedValueInterface = {\r\n partId: PropTypes.string,\r\n wizardGroup: PropTypes.shape(wizardGroupInterface),\r\n selectedFilter: PropTypes.shape(filterValueInterface),\r\n selectedFeature: PropTypes.shape(featureInterface),\r\n quantity: PropTypes.number,\r\n singleFeature: PropTypes.bool,\r\n};\r\n\r\nexport const wizardAllObjectInterface = {\r\n quoteIndex: PropTypes.number.isRequired,\r\n lastVisitedStep: PropTypes.number,\r\n isLastActiveWizard: PropTypes.bool,\r\n wizardItemId: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,\r\n visualizer: PropTypes.string, // common name, same as in the wizard item\r\n wizardSelectedValues: PropTypes.object, // {0: wizardSelectedValueInterface, 1: wizardSelectedValueInterface}\r\n};\r\n\r\nexport const wizardConflictingObjectInterface = {\r\n stepIndex: PropTypes.number.isRequired,\r\n wizardGroupId: PropTypes.string.isRequired,\r\n cartItemId: PropTypes.string.isRequired\r\n}\r\n","import {Part} from \"../part\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport {vanityThumbnail} from \"../../../bvComponent/core/assets\";\r\nimport {METADATA, VANITY_TYPES, LOOK_ROOM_TYPES} from \"../constants\";\r\n\r\nimport VanityHandle from \"../subparts/vanity/vanityHandle\";\r\nimport VanityCabinet from \"../subparts/vanity/vanityCabinet\";\r\nimport VanityCountertop from \"../subparts/vanity/vanityCountertop\";\r\nimport VanityBacksplash from \"../subparts/vanity/vanityBacksplash\";\r\nimport Mirror from \"../subparts/vanity/mirror\";\r\nimport Sink from \"../subparts/vanity/sink\";\r\nimport VanityFaucet from \"../subparts/vanity/faucet\";\r\nimport Ptrap from \"../subparts/vanity/pTrap\";\r\nimport VanityWashstand from \"../subparts/vanity/vanityWashstand\";\r\nimport VanityMiddle from \"../subparts/vanity/vanityMiddle\";\r\nimport DrawerPull from \"../subparts/vanity/drawerPull\";\r\nimport WSTowelBar from \"../subparts/vanity/wsTowelBar\";\r\nimport VanityLegs from \"../subparts/vanity/vanityLegs\";\r\nimport VanityConsole from \"../subparts/vanity/vanityConsole\";\r\nimport {getSkuWithoutDot} from \"../../lookNavigation/lookFunctions2\";\r\nimport {getCurrentRoomType} from \"../../../appLayout\";\r\nimport DoorHandle from \"../subparts/vanity/doorHandle\";\r\nimport DrawerHandle from \"../subparts/vanity/drawerHandle\";\r\n\r\nexport class Vanity extends Part {\r\n static id = 'Vanity';\r\n\r\n static Types = {\r\n Complete: 'Complete',\r\n Custom: 'Custom'\r\n };\r\n\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Vanity';\r\n this.translateId = \"visualizer.bathroom.vanity\";\r\n this.partThumbnail = vanityThumbnail;\r\n this.activeSubType_ = Vanity.Types.Custom;\r\n this.relatedItems = [];\r\n this.placeholdersNeeded = false; // only Vanity property\r\n\r\n // vanity parts\r\n this.vanityCabinet = null;\r\n this.completeVanity = null;\r\n this.countertop = null;\r\n this.sink = null;\r\n this.faucet = null;\r\n this.vanityBacksplash = null;\r\n this.vanityHandle = null;\r\n this.mirror = null;\r\n this.vanityPTrap = null;\r\n this.vanityWashstand = null;\r\n this.vanityMiddle = null;\r\n this.drawerPull = null;\r\n this.wsTowelBar = null;\r\n this.vanityLegs = null;\r\n this.vanityLegs = null;\r\n this.vanityConsole = null;\r\n this.doorHandle = null;\r\n this.drawerHandle = null;\r\n\r\n this.vanity_type = VANITY_TYPES.vanity_cabinet;\r\n this.relatedGroupNames = [\"Sink\", \"Mirror\", \"Countertop\", \"Faucet\", \"VanityBacksplash\", \"Vanity Handle\", \"Vanity\",\r\n \"Ptrap\", \"Washstand\", \"Vanity Middle\", \"Drawer Pull\", \"WS Towel Bar\", \"Vanity Legs\", \"Console\", \"Door Handle\",\r\n \"Drawer Handle\"];\r\n }\r\n\r\n load(dbFeature, loadFeature = true) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Sink\":\r\n relatedItemName = \"sink\";\r\n RelatedItemClass = Sink;\r\n break;\r\n case \"Mirror\":\r\n relatedItemName = \"mirror\";\r\n RelatedItemClass = Mirror;\r\n break;\r\n case \"Countertop\":\r\n case \"Vanitie Countertop\":\r\n relatedItemName = \"countertop\";\r\n RelatedItemClass = VanityCountertop;\r\n break;\r\n case \"Faucet\":\r\n relatedItemName = \"faucet\";\r\n RelatedItemClass = VanityFaucet;\r\n break;\r\n case \"VanityBacksplash\":\r\n case \"BackSplash\":\r\n case \"Backsplash\":\r\n relatedItemName = \"vanityBacksplash\";\r\n RelatedItemClass = VanityBacksplash;\r\n break;\r\n case \"Vanity Handle\":\r\n relatedItemName = \"vanityHandle\";\r\n RelatedItemClass = VanityHandle;\r\n break;\r\n case \"Door Handle\":\r\n relatedItemName = \"doorHandle\";\r\n RelatedItemClass = DoorHandle;\r\n break;\r\n case \"Drawer Handle\":\r\n relatedItemName = \"drawerHandle\";\r\n RelatedItemClass = DrawerHandle;\r\n break;\r\n case \"Vanity\":\r\n case \"Vanitie\": {\r\n relatedItemName = \"vanityCabinet\";\r\n RelatedItemClass = VanityCabinet;\r\n break;\r\n }\r\n case \"Ptrap\": {\r\n relatedItemName = \"vanityPTrap\";\r\n RelatedItemClass = Ptrap;\r\n break;\r\n }\r\n case \"Washstand\": {\r\n relatedItemName = \"vanityWashstand\";\r\n RelatedItemClass = VanityWashstand;\r\n break;\r\n }\r\n case \"Vanity Middle\": {\r\n relatedItemName = \"vanityMiddle\";\r\n RelatedItemClass = VanityMiddle;\r\n break;\r\n }\r\n case \"Drawer Pull\": {\r\n relatedItemName = \"drawerPull\";\r\n RelatedItemClass = DrawerPull;\r\n break;\r\n }\r\n case \"WS Towel Bar\": {\r\n relatedItemName = \"wsTowelBar\";\r\n RelatedItemClass = WSTowelBar;\r\n break;\r\n }\r\n case \"Vanity Legs\": {\r\n relatedItemName = \"vanityLegs\";\r\n RelatedItemClass = VanityLegs;\r\n break;\r\n }\r\n case \"Console\": {\r\n relatedItemName = \"vanityConsole\";\r\n RelatedItemClass = VanityConsole;\r\n break;\r\n }\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n if (relatedItemName === \"sink\") {\r\n const faucetIndex = this.relatedItems.findIndex(relItem => relItem.partName === 'Faucet');\r\n faucetIndex ? this.relatedItems.splice(faucetIndex, 0, this.sink) : this.relatedItems.push(this.sink);\r\n } else if (relatedItemName === \"completeVanity\") {\r\n this.relatedItems.unshift(this.completeVanity); // cabinet needs to be first in the list.\r\n } else if (relatedItemName === \"vanityCabinet\") {\r\n this.relatedItems.unshift(this.vanityCabinet); // cabinet needs to be first in the list.\r\n } else {\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n if (loadFeature) {\r\n this[relatedItemName].load(dbFeature);\r\n }\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n getRelatedItems() {\r\n return this.relatedItems.filter(item => item.visible.includes(this.activeSubType_));\r\n }\r\n\r\n subTypes() {\r\n return this.vanityCabinet && this.completeVanity ? [Vanity.Types.Custom, Vanity.Types.Complete] : [];\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return this.activeSubType_ === Vanity.Types.Complete;\r\n }\r\n\r\n activeSubType() {\r\n return this.activeSubType_;\r\n }\r\n\r\n subParts() {\r\n const relatedItems = this.getRelatedItems();\r\n const excluded = [];\r\n const vanityPart = relatedItems.find(navItem => navItem.partId === \"vanity_cabinet\");\r\n if (vanityPart && vanityPart.activeFeature\r\n && vanityPart.activeFeature.metaData[\"VanityHandle\"]\r\n && vanityPart.activeFeature.metaData[\"VanityHandle\"].includes(\"None\")) {\r\n excluded.push(\"vanity_handle\")\r\n }\r\n return relatedItems\r\n .filter(item => !excluded.includes(item.partId))\r\n .map(_ => new DesignNavigationItem(_.partName, _));\r\n }\r\n\r\n // subPartsWithAccentWall() {\r\n // const vanityAccent = this.layout.parts.Walls.vanityAccent;\r\n // return [new DesignNavigationItem(vanityAccent.partName, vanityAccent),\r\n // ...this.getRelatedItems().map(_ => new DesignNavigationItem(_.partName, _))];\r\n // }\r\n\r\n handleSubTypeClick(subType) {\r\n this.activeSubType_ = subType;\r\n this.getRelatedItems().forEach((relatedItem) => {\r\n if (!relatedItem.activeFeature) {\r\n relatedItem.setDefault()\r\n }\r\n });\r\n }\r\n\r\n setDefaultPartAfterSubTypeClick() {\r\n return this.subParts()[0]\r\n }\r\n\r\n setDefault(layout) {\r\n this.getRelatedItems().forEach(_ => _.setDefault(layout));\r\n }\r\n\r\n counterTopSize(forFeatureGroup) {\r\n let vanitySize = this.getCounterTopSize() || \"24\"; // we have left and right mirror for \"L\" & \"R\" or single for \"C\"\r\n if ((vanitySize === \"72\" || (Array.isArray(vanitySize) && vanitySize[0] === (\"72\")))\r\n && forFeatureGroup && !(forFeatureGroup.partId === \"vanity_backsplash\" || forFeatureGroup.partId === \"vanity_countertop\")) {\r\n return [\"64\"]; // use 64 for everything except counterop and backsplash\r\n }\r\n return vanitySize\r\n }\r\n\r\n getCounterTopSize() {\r\n const currentVanityTypeFeatureGroup = this.relatedItems.find(relItem => relItem.partId === this.vanity_type);\r\n if (currentVanityTypeFeatureGroup && !currentVanityTypeFeatureGroup.activeFeature) {\r\n this.vanityCabinet.setDefault()\r\n }\r\n return (currentVanityTypeFeatureGroup && currentVanityTypeFeatureGroup.activeFeature)\r\n ? currentVanityTypeFeatureGroup.activeFeature.dbFeature.metaData[\"VanitySize\"]\r\n : null;\r\n }\r\n\r\n isDoubleVanity(feature = null) {\r\n if (this.vanity_type !== VANITY_TYPES.vanity_cabinet || !this.vanityCabinet) {\r\n return false\r\n }\r\n const checkFeature = feature || this.vanityCabinet.activeFeature;\r\n return checkFeature && checkFeature.metaData[\"VanityWidth\"] && (checkFeature.metaData[\"VanityWidth\"] === 64)\r\n }\r\n\r\n toggleVanityParts(disabled) {\r\n this.getRelatedItems().forEach(relItem => {\r\n if (relItem.partId === \"vanity_sink\" || relItem.partId === \"vanity_faucet\"\r\n || relItem.partId === \"vanity_countertop\" || relItem.partId === \"vanity_cabinet\"\r\n || relItem.partId === \"vanity_handle\" || relItem.partId === \"vanity_backsplash\") {\r\n relItem.disabled = disabled;\r\n }\r\n });\r\n }\r\n\r\n getActiveSkuFromRelatedItem(partId) {\r\n const relatedItem = this.relatedItems.find(relItem => relItem.partId === partId);\r\n return relatedItem && relatedItem.activeFeature && relatedItem.activeFeature.dbFeature.sharedFeatureName\r\n ? getSkuWithoutDot(relatedItem.activeFeature.dbFeature.sharedFeatureName)\r\n : null\r\n }\r\n\r\n getActiveMatchingMetaFromRelatedItem(partId, metaName = \"MatchingFeature\") {\r\n const relatedItem = this.relatedItems.find(relItem => relItem.partId === partId);\r\n return relatedItem && relatedItem.activeFeature\r\n ? relatedItem.activeFeature.metaData[metaName]\r\n : null\r\n }\r\n\r\n setCustomVanitySinkMetaData = (feature) => {\r\n switch (feature.dbFeature.lixilProductSubCategory) {\r\n case \"Pedestal Bathroom Sinks\":\r\n return \"Pedestal\"\r\n case \"Above Counter Sinks with Vessel\":\r\n case \"Countertop Bathroom Sinks\":\r\n return \"Top Mount\"\r\n case \"Undermount Bathroom Sinks\":\r\n case \"Undermount Sinks\":\r\n return \"Undermount\"\r\n default:\r\n return \"\"\r\n }\r\n }\r\n\r\n setSpecificRules(isAsBathroomState = false) {\r\n console.log(\"setSpecificRules\", isAsBathroomState);\r\n if (getCurrentRoomType(this.layout) === LOOK_ROOM_TYPES.as || isAsBathroomState) {\r\n const sinkFeatureGroup = this.relatedItems.find(relItem => relItem.partId === \"vanity_sink\");\r\n this.relatedItems.forEach(relItem => {\r\n Object.keys(relItem.featuresList).forEach(layoutName => {\r\n [...relItem.featuresList[layoutName], ...relItem.featuresPartsList[layoutName]].map(feature => {\r\n feature.dbFeature.metaData[\"FeatureSku\"] = [getSkuWithoutDot(feature.dbFeature.sharedFeatureName)];\r\n if (relItem.partId === \"vanity_sink\" && Array.isArray(feature.dbFeature.metaData[\"MatchingFeature\"])) {\r\n feature.dbFeature.metaData[\"CustomSinkSubCategory\"] = this.setCustomVanitySinkMetaData(feature);\r\n feature.metaData[\"CustomSinkSubCategory\"] = this.setCustomVanitySinkMetaData(feature);\r\n let sinkTypes = [];\r\n feature.dbFeature.metaData[\"MatchingFeature\"].forEach(currentSku => {\r\n Object.keys(VANITY_TYPES).forEach(partId => {\r\n const featureGroup = this.relatedItems.find(relItem => relItem.partId === partId);\r\n if (featureGroup) {\r\n const feature = [...featureGroup.featuresList[layoutName], ...featureGroup.featuresPartsList[layoutName]].find(testFeature => {\r\n return getSkuWithoutDot(testFeature.dbFeature.sharedFeatureName) === currentSku\r\n });\r\n if (feature) {\r\n sinkTypes.push(feature.partId)\r\n }\r\n } else {\r\n console.log(\"no feature group found to apply sink metadata\", partId);\r\n }\r\n })\r\n });\r\n if (feature.dbFeature.metaData[\"MatchingFeature\"] && feature.dbFeature.metaData[\"MatchingFeature\"].includes(METADATA.NO)) {\r\n sinkTypes.push(VANITY_TYPES.vanity_cabinet);\r\n feature.dbFeature.metaData[\"FeatureSku\"] = [METADATA.ALL];\r\n feature.metaData[\"FeatureSku\"] = [METADATA.ALL];\r\n }\r\n // if (!sinkTypes.length && feature.dbFeature.metaData[\"MountType\"] && feature.dbFeature.metaData[\"MountType\"].includes('ST')) {\r\n // sinkTypes.push(METADATA.ALL)\r\n // }\r\n feature.dbFeature.metaData[\"CustomVanityType\"] = sinkTypes; // create custom metadata\r\n feature.metaData[\"CustomVanityType\"] = sinkTypes; // create custom metadata\r\n }\r\n if (relItem.partId === \"vanity_cabinet\" && Array.isArray(feature.dbFeature.metaData[\"MatchingFeature\"]) && sinkFeatureGroup) {\r\n let sinkTypes = [];\r\n feature.dbFeature.metaData[\"MatchingFeature\"].forEach(currentSku => {\r\n const sinkFeature = [...sinkFeatureGroup.featuresList[layoutName], ...sinkFeatureGroup.featuresPartsList[layoutName]].find(testFeature => {\r\n return getSkuWithoutDot(testFeature.dbFeature.sharedFeatureName) === currentSku\r\n });\r\n if (sinkFeature) {\r\n const type = this.setCustomVanitySinkMetaData(sinkFeature);\r\n if (!sinkTypes.includes(type)) {\r\n sinkTypes.push(this.setCustomVanitySinkMetaData(sinkFeature))\r\n }\r\n }\r\n });\r\n feature.dbFeature.metaData[\"CustomSinkSubCategory\"] = sinkTypes; // create custom metadata\r\n feature.metaData[\"CustomSinkSubCategory\"] = sinkTypes; // create custom metadata\r\n }\r\n // console.log(\"feature.metaData[\\\"CustomVanityType\\\"]\", feature.metaData[\"CustomVanityType\"]);\r\n // console.log(\"feature\", feature);\r\n return feature\r\n })\r\n })\r\n })\r\n }\r\n this.needToUpdateCustomMetadata = false;\r\n }\r\n\r\n updateVanityParts() {\r\n if (getCurrentRoomType(this.layout) === LOOK_ROOM_TYPES.as) {\r\n this.relatedItems.forEach(relatedItem => {\r\n if (relatedItem.hideLayerCondition) {\r\n relatedItem.disabled = relatedItem.hideLayerCondition();\r\n }\r\n });\r\n }\r\n }\r\n\r\n}\r\n\r\n","export const LayoutType = {\r\n Layout1: 1,\r\n Layout2: 2,\r\n Layout3: 3,\r\n Layout4: 4,\r\n Layout5: 5,\r\n Layout6: 6,\r\n};\r\n\r\nexport const LayoutAbbreviation = {\r\n All: \"ALL\",\r\n Layout1: \"Layout1\",\r\n Layout2: \"Layout2\",\r\n Layout3: \"Layout3\",\r\n Layout4: \"Layout4\",\r\n Layout5: \"Layout5\",\r\n Layout6: \"Layout6\",\r\n};\r\n\r\nexport const LayoutAbbreviations = [\r\n \"Layout1\",\r\n \"Layout2\",\r\n \"Layout3\",\r\n \"Layout4\",\r\n \"Layout5\",\r\n \"Layout6\",\r\n];\r\nexport const LayoutAbbreviationsToRemove = [\r\n \"Layout6\",\r\n \"Layout5\",\r\n \"Layout4\",\r\n \"Layout3\",\r\n \"Layout2\",\r\n \"Layout1\",\r\n];\r\n\r\nexport const METADATA = {\r\n ALL: \"ALL\",\r\n sinkUTypes: [\"U\", \"ST\", \"FM\", \"SM\"],\r\n FloorWithIsland: \"default\",\r\n NO: \"NO\",\r\n};\r\n\r\nexport const PLACEMENTS = {\r\n Island: \"Island\",\r\n Countertop: \"Countertop\"\r\n};\r\n\r\nexport const KVSCENE_BACKSPLASH_TYPES = [\"4 inch\", \"6 inch\", \"8 inch\", \"Full\"];\r\n\r\nexport const DECORS_MAX = 25;\r\n\r\nconst oldKitchenCabinetsLogicProfiles = [\r\n \"americasdream\",\r\n \"stonely_inc\",\r\n \"215mercury\",\r\n \"sci_surfaces\",\r\n \"lakeside_surfaces_\",\r\n \"true_blue_surfaces_\",\r\n \"bellezza_surfaces\",\r\n \"premier_cabinet_paintin_llc\",\r\n \"premier_cabinet_paintin_llc_v5\",\r\n \"american_kitchen_and_stone\",\r\n \"arizona_granite\",\r\n \"a_granito_world\",\r\n \"stonecraft\",\r\n \"wallstone_cabinetry_countertops\",\r\n \"jg_countertops_llc\",\r\n \"the_granite_guys\",\r\n \"blue_line_construction\",\r\n \"blue_line_construction_2023\",\r\n \"williams_kitchen_bath\",\r\n \"xpresbathshower\",\r\n \"eastern_surfaces\",\r\n \"wallstone_cabinetry_countertops_rebuild\",\r\n \"the_granite_guys_rebuild\",\r\n \"south_florida_remodelers\",\r\n \"artemisa\",\r\n \"kitchen_doctors_kbf\",\r\n \"home_essentials\",\r\n \"amc_building_supply_v5\",\r\n \"amc_countertops_v5\",\r\n \"cafe_countertops\",\r\n \"gmd_surfaces\",\r\n \"colonial_bath\",\r\n \"carpetmart\",\r\n];\r\n\r\nexport const hasOldCabinetLogic = () => {\r\n if (!window.location.host || (typeof window.location.host !== \"string\")) {\r\n return false\r\n }\r\n const subDomain = window.location.host.split('.')[0];\r\n if (window.location.host.includes(\"quotekandb.com\")) {\r\n return subDomain === \"moderno_demo_3011\" || subDomain === \"erpizo\" || subDomain === \"multitool\"\r\n }\r\n return subDomain.includes(\"porcelanosa_\") || window.location.href.includes(\"fab_subdomain=porcelanosa_\")\r\n || oldKitchenCabinetsLogicProfiles.some(profile => {\r\n return (profile === subDomain) || window.location.href.includes(\"fab_subdomain=\" + profile)\r\n })\r\n}\r\n\r\nexport const useOldCabinetLogic = hasOldCabinetLogic();\r\n","import orderBy from \"lodash/orderBy\";\r\n\r\nimport {Part} from \"./part\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport {ShowerType, ShowerBodyType} from \"../constants\";\r\nimport {showerThumbnail} from '../assets';\r\n\r\n// import store from \"../../../../store\";\r\n\r\nimport {ShowerTubCombo} from \"./showerTubCombo\";\r\nimport Shadow from \"../subparts/shadow\";\r\n\r\nimport ShowerFixture from \"../subparts/shower/showerFixture\";\r\nimport ShowerGlass from \"../subparts/shower/showerGlass\";\r\n// import ShowerOverlay from \"../subparts/shower/showerOverlay\";\r\nimport ShowerBody from \"../subparts/shower/showerBody\";\r\nimport ShowerInteriorWall from \"../subparts/shower/showerInteriorWall\";\r\nimport ShowerInteriorWallAccent from \"../subparts/shower/showerInteriorWallAccent\";\r\nimport ShowerDoor from \"../subparts/shower/showerDoor\";\r\nimport ShowerPanCombo from \"../subparts/shower/showerPanCombo\";\r\nimport ShowerDoorHandle from \"../subparts/shower/showerDoorHandle\";\r\nimport PonyWallCap from \"../subparts/shower/ponyWallCap\";\r\nimport PonyWallGlass from \"../subparts/shower/ponyWallGlass\";\r\nimport ShowerFloor from \"../subparts/shower/showerFloor\";\r\nimport Threshold from \"../subparts/shower/threshold\";\r\nimport ShowerDrain from \"../subparts/shower/showerDrain\";\r\nimport ShowerHead from \"../subparts/shower/showerHead\";\r\n\r\nexport class Shower extends Part {\r\n static id = 'Shower';\r\n\r\n static Type = {\r\n Custom: 'Custom',\r\n Complete: 'Complete',\r\n Combo: 'Combo',\r\n All: 'All'\r\n };\r\n\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partThumbnail = showerThumbnail;\r\n this.partName = 'Shower';\r\n this.translateId = \"visualizer.bathroom.shower\";\r\n this.relatedItems = [];\r\n this.activeSubType_ = Shower.Type.Custom;\r\n\r\n this.customBodyType = ShowerBodyType.Glass;\r\n\r\n this.showerBody = null;\r\n this.showerGlass = null;\r\n this.showerInteriorWall = null;\r\n this.showerInteriorWallAccent = null;\r\n\r\n // old\r\n this.showerFloor = null;\r\n this.showerOverlay = null;\r\n // old\r\n\r\n this.showerPanCombo = null;\r\n this.threshold = null;\r\n this.showerFixture = null;\r\n this.showerBodySelectedByUser = false;\r\n this.showerDoor = null;\r\n this.showerDoorHandle = null;\r\n\r\n this.ponyWallCap = null;\r\n this.ponyWallGlass = null;\r\n\r\n this.shadows = null;\r\n\r\n this.showerBody = new ShowerBody(true);\r\n this.showerBody.getParent = () => this;\r\n this.showerBody.type = Shower.Type.All;\r\n this.showerBody.counts = {\r\n allLayoutFeaturesCount: 0,\r\n largeLayoutFeaturesCount: 0,\r\n smallLayoutFeaturesCount: 0\r\n };\r\n this.relatedItems.push(this.showerBody);\r\n\r\n this.showerFloorIsActive = false;\r\n\r\n }\r\n\r\n load(dbFeature) {\r\n let relatedItemName = \"\",\r\n relatedItemType = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Shower Pan\":\r\n if (!dbFeature.displayName.includes('Neo Angle')) {\r\n relatedItemName = \"showerPanCombo\";\r\n RelatedItemClass = ShowerPanCombo;\r\n relatedItemType = Shower.Type.Custom;\r\n }\r\n break;\r\n case \"Shower Wall\":\r\n case \"ShowerInteriorWall\": // OLD\r\n relatedItemName = \"showerInteriorWall\";\r\n RelatedItemClass = ShowerInteriorWall;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"Shower Wall Accent\":\r\n relatedItemName = \"showerInteriorWallAccent\";\r\n RelatedItemClass = ShowerInteriorWallAccent;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"Shower Door\":\r\n case \"Shower_Door\":\r\n if (!dbFeature.displayName.includes(\"Neo Angle\")) {\r\n relatedItemName = \"showerDoor\";\r\n RelatedItemClass = ShowerDoor;\r\n relatedItemType = Shower.Type.Custom;\r\n }\r\n break;\r\n case \"Shower Door Handle\":\r\n relatedItemName = \"showerDoorHandle\";\r\n RelatedItemClass = ShowerDoorHandle;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"ShowerPan\":\r\n relatedItemName = \"threshold\";\r\n RelatedItemClass = Threshold;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"ShowerFloor\":\r\n relatedItemName = \"showerFloor\";\r\n RelatedItemClass = ShowerFloor;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"Shower Fixture\":\r\n relatedItemName = \"showerFixture\";\r\n RelatedItemClass = ShowerFixture;\r\n relatedItemType = Shower.Type.All;\r\n break;\r\n case \"Shower Drain\":\r\n relatedItemName = \"showerDrain\";\r\n RelatedItemClass = ShowerDrain;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"Shower Head\":\r\n relatedItemName = \"showerHead\";\r\n RelatedItemClass = ShowerHead;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"Shower Shadow\":\r\n if (\r\n dbFeature.displayName.includes(\"Shower Shadow - Interior Wall\")\r\n || dbFeature.displayName.includes(\"Shower Shadow - Floor\")\r\n || dbFeature.displayName.includes(\"Shower Shadow - Pan\")\r\n || dbFeature.displayName.includes(\"Shower Shadow - Pony Wall Cap\")\r\n ) {\r\n relatedItemName = \"shadows\";\r\n RelatedItemClass = Shadow;\r\n relatedItemType = Shower.Type.All;\r\n }\r\n break;\r\n case \"Pony Wall Cap\":\r\n relatedItemName = \"ponyWallCap\";\r\n RelatedItemClass = PonyWallCap;\r\n relatedItemType = Shower.Type.All;\r\n break;\r\n case \"Pony Wall Glass\":\r\n relatedItemName = \"ponyWallGlass\";\r\n RelatedItemClass = PonyWallGlass;\r\n relatedItemType = Shower.Type.All;\r\n break;\r\n case \"Shower Glass\":\r\n if (!this.showerBody) {\r\n this.showerBody = new ShowerBody(true);\r\n this.relatedItems.push(this.showerBody);\r\n }\r\n relatedItemName = \"showerGlass\";\r\n RelatedItemClass = ShowerGlass;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n // case \"Shower Overlay\":\r\n // relatedItemName = \"showerOverlay\";\r\n // RelatedItemClass = ShowerOverlay;\r\n // relatedItemType = Shower.Type.Custom;\r\n // break;\r\n case \"Shower Body\":\r\n relatedItemName = \"showerBody\";\r\n RelatedItemClass = ShowerBody;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n if (relatedItemName !== \"shadows\") {\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].type = relatedItemType;\r\n this[relatedItemName].load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n setSpecificRules() {}\r\n\r\n setLayers(layout, placeholdersNeeded) {\r\n let res = [];\r\n const relatedItems = this.getRelatedItems();\r\n // console.log('relatedItems', relatedItems);\r\n relatedItems.forEach(relatedItem => {\r\n relatedItem.setLayers(layout);\r\n });\r\n if (this.showerDoor && !this.showerDoor.activeFeature) { // we need it cause shower door is relying on shPanCombo\r\n this.showerDoor.setLayers(layout);\r\n }\r\n if (this.showerDoorHandle && !this.showerDoorHandle.activeFeature) {\r\n this.showerDoorHandle.setLayers(layout);\r\n }\r\n relatedItems.forEach(relatedItem => {\r\n\r\n (placeholdersNeeded && !relatedItem.placeholderChanged && relatedItem.placeholderFeature)\r\n ? relatedItem.placeholderFeature.layer.addTo(res)\r\n : relatedItem.activeFeature && relatedItem.activeFeature.layer ? relatedItem.activeFeature.layer.addTo(res) : null\r\n\r\n // NN(relatedItem.activeFeature, (activeFeature) => activeFeature.layer.addTo(res));\r\n\r\n if ((relatedItem instanceof ShowerBody || relatedItem instanceof ShowerInteriorWallAccent)\r\n && relatedItem.activeFeatureParts && relatedItem.activeFeatureParts.length) {\r\n relatedItem.activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart && !activeFeaturePart.disabled && activeFeaturePart.layer && activeFeaturePart.layer.addTo(res);\r\n })\r\n }\r\n if (relatedItem instanceof ShowerInteriorWall && relatedItem.activeFeatureParts && relatedItem.placeholderChanged && relatedItem.activeFeatureParts.length) {\r\n relatedItem.activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart && !activeFeaturePart.disabled && activeFeaturePart.layer && activeFeaturePart.layer.addTo(res);\r\n })\r\n }\r\n\r\n if (relatedItem.shadowFeature && relatedItem.shadowFeature.layer) {\r\n relatedItem.shadowFeature.layer.addTo(res)\r\n }\r\n\r\n });\r\n\r\n return res.length ? res : null;\r\n }\r\n\r\n navigationItem() {\r\n return new DesignNavigationItem('Shower', this)\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n return filteredAvailableFeatures.filter(f => this.activeSubType_ === Shower.Type.Complete ? f.type === ShowerType.Complete : f.type !== ShowerType.Complete)\r\n .map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n subTypes() {\r\n return this.showerBody && (this.showerBody.features.some(showerBodyFeature => showerBodyFeature.type === 0)\r\n && this.showerBody.features.some(showerBodyFeature => showerBodyFeature.type === 1)) ? [\r\n Shower.Type.Custom,\r\n Shower.Type.Complete,\r\n ] : []\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return true;\r\n }\r\n\r\n activeSubType() {\r\n return this.activeSubType_;\r\n }\r\n\r\n handleSubTypeClick(subType, handleNavigationItemClick) {\r\n this.activeSubType_ = subType;\r\n this.showerBody.setDefault(); // set default custom shower\r\n if (handleNavigationItemClick) {\r\n handleNavigationItemClick(this.showerBody.navigationSubItems()[0]) // set default custom shower\r\n }\r\n }\r\n\r\n getRelatedItems() {\r\n const relatedItems = orderBy(this.relatedItems, 'layerPriority');\r\n if (this.showerTubComboIsActive()) {\r\n return relatedItems\r\n }\r\n return relatedItems.filter((relatedItem) => {\r\n return relatedItem.type === this.activeSubType_ || relatedItem.type === Shower.Type.All\r\n })\r\n }\r\n\r\n subParts() {\r\n const activeShowerGroup = this.getActiveShowerGroup();\r\n const ponyWallIsActive = activeShowerGroup.showerDimensions() === \"Pony\";\r\n return this.getRelatedItems()\r\n .filter(item => {\r\n if (item.isPonyWallPart) {\r\n item.visible = ponyWallIsActive\r\n }\r\n return item.visible\r\n })\r\n .map(_ => new DesignNavigationItem(_.partName, _));\r\n // return filter(this.relatedItems, {visible: true}).map(_ => new DesignNavigationItem(_.partName, _));\r\n }\r\n\r\n //\r\n // toggleShowerParts(disabled, keepLeftWall) {\r\n // this.getRelatedItems().forEach((relItem) => {\r\n // console.log('relItem', relItem);\r\n // if (\r\n // relItem.partId !== \"shower_interior_wall\"\r\n // && relItem.partId !== \"shower_interior_wall_accent\"\r\n // && relItem.partId !== \"shower_fixture\"\r\n // && relItem.partId !== \"shower_door\"\r\n // && relItem.partId !== \"shower_door_handle\"\r\n // && relItem.partId !== \"pony_wall\"\r\n // && relItem.partId !== \"pony_wall_cap\"\r\n // && relItem.partId !== \"pony_wall_glass\"\r\n // ) {\r\n // relItem.disabled = disabled;\r\n // }\r\n // });\r\n // if (!keepLeftWall) {\r\n // this.layout.parts.Walls.wallExL.disabled = disabled;\r\n // }\r\n // }\r\n\r\n setDefault(layout) {\r\n const relatedItems = orderBy(this.relatedItems, 'layerPriority');\r\n relatedItems.forEach(_ => _.setDefault(layout));\r\n }\r\n\r\n setDefaultPartAfterSubTypeClick() {\r\n return this.subParts()[0]\r\n }\r\n\r\n handleSubPartClick() {\r\n\r\n }\r\n\r\n /**\r\n * Gets the current shower size from metaValues.\r\n */\r\n showerSize() {\r\n if (!this.showerBody || !this.showerBody.activeFeature) {\r\n return null;\r\n }\r\n let showerSizeValues = this.showerBody.activeFeature.metaData[\"ShowerSize\"];\r\n if (!showerSizeValues || !showerSizeValues.length) {\r\n if (this.showerBody.activeFeature.partName.includes(\"Complete\")) {\r\n showerSizeValues = ['30in'];\r\n } else {\r\n console.warn('No Shower size.');\r\n }\r\n } else if (showerSizeValues[0] === \"-\") {\r\n showerSizeValues[0] = this.showerBody.activeFeature.partName.includes(\"60in\") ? \"60in\" : \"30in\"\r\n }\r\n\r\n return showerSizeValues[0];\r\n }\r\n\r\n /**\r\n * Gets the current shower dimensions from showerBody\r\n */\r\n showerDimensions() {\r\n if (!this.showerBody)\r\n return \"Full\";\r\n return this.showerBody.activeFeature ? this.showerBody.activeFeature.showerDimensions : null;\r\n // \"Full\" : \"Half\";\r\n }\r\n\r\n isComplete() {\r\n if (!this.showerBody) {\r\n return true;\r\n } else if (this.showerTubComboIsActive()) {\r\n return false;\r\n } else {\r\n return this.showerBody.activeFeature && this.showerBody.activeFeature.showerBodyType !== Shower.Type.Custom;\r\n }\r\n }\r\n\r\n showerTubComboIsActive() {\r\n const comboPart = this.layout.parts[ShowerTubCombo.id];\r\n return comboPart && comboPart.showerTubComboIsActive\r\n }\r\n\r\n getActiveShowerGroup() { // user for taking sizes, etc...\r\n return this.showerTubComboIsActive() ? this.layout.parts[ShowerTubCombo.id] : this;\r\n }\r\n}\r\n\r\n","import {connect} from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\nimport {injectIntl} from \"react-intl\";\r\n\r\nimport {getStringFeatureName} from \"../../misc/helpers\";\r\nimport {truncate} from \"../sqft/helpers/sqftHelper\";\r\n\r\nconst FeatureName = (props) => {\r\n const {feature, intl, fabricatorData, maxLength, filterGroups, useCollectionName} = props;\r\n let stringFeatureName = getStringFeatureName(feature, intl.messages, intl.locale, fabricatorData, filterGroups, useCollectionName);\r\n return parseInt(maxLength) === maxLength ? truncate(stringFeatureName, maxLength) : stringFeatureName;\r\n};\r\n\r\nFeatureName.propTypes = {\r\n maxLength: PropTypes.number,\r\n feature: PropTypes.object.isRequired,\r\n useCollectionName: PropTypes.bool,\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {filterGroups} = store.filterState;\r\n return {\r\n fabricatorData: store.fabricatorState,\r\n filterGroups,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(FeatureName)\r\n)\r\n\r\n","import PropTypes from \"prop-types\";\r\nimport {featureInterface} from \"../../interfaces/featureInterface\";\r\n\r\nexport const CART_ITEM_ADDED_BY = {\r\n user: \"user\",\r\n auto: \"auto\",\r\n}\r\n\r\nexport const cartItemInterface = {\r\n id: PropTypes.string, // unique id used on frontend\r\n isEmpty: PropTypes.bool,\r\n isMinimumCharge: PropTypes.bool, // is used for lowes, added when countertops sqft is lower than 23\r\n isMinimumChargeItems: PropTypes.bool, // is used for lowes, between 23 and 27 countertops sqft\r\n selectionGroup: PropTypes.string,\r\n partId: PropTypes.string.isRequired,\r\n currentQuote: PropTypes.number,\r\n cartFeature: PropTypes.shape(featureInterface),\r\n quantity: PropTypes.oneOfType([PropTypes.number, PropTypes.string]), // empty input case\r\n displayFakeQuantity: PropTypes.oneOfType([PropTypes.number, PropTypes.string]), // for slab (countertop group)\r\n sqftId: PropTypes.oneOfType([PropTypes.number, PropTypes.string]), // if feature was added from SQFT\r\n unit: PropTypes.string, // was added for SQFT,\r\n qtCatName: PropTypes.string, // was added for SQFT,\r\n relatedProductParent: PropTypes.shape(featureInterface), //\r\n addedBy: PropTypes.oneOf([CART_ITEM_ADDED_BY.auto, CART_ITEM_ADDED_BY.user]), // can be user or auto (if cart list were created by the default(see createCartList function in lookVisualizer.js))\r\n isRemoved: PropTypes.bool,\r\n keepOnLookUpdate: PropTypes.bool, // in case it was added from wizard List - we don't need to remove it on look update cart items logic\r\n shippingName: PropTypes.string,\r\n shippingTime: PropTypes.string,\r\n shippingCost: PropTypes.number,\r\n fromWizardId: PropTypes.number, // wizard item id\r\n fromWizardStep: PropTypes.number, // wizard step (index)\r\n fromWizardGroupId: PropTypes.string, // wizard group\r\n isAddedFromDisplayLogic: PropTypes.bool, // if cart item was added automatically\r\n fromVisualizerType: PropTypes.string,\r\n fromQtCategory: PropTypes.string, // category name (to proper switch)\r\n bundleParentId: PropTypes.string, // parent cart item id (hash)\r\n};\r\n","import {SpacersController} from \"./controllers/SpacersController\";\r\nimport {HandlesController} from \"./controllers/HandlesController\";\r\nimport {WallsController} from \"./controllers/WallsController\";\r\nimport {ShapeColorsController} from \"./controllers/ShapeColorsController\";\r\nimport {WaterfallController} from \"./controllers/line/WaterfallController\";\r\nimport {RemovedFeaturesController} from \"./controllers/RemovedFeaturesController\";\r\nimport {SnappedShapeGroupsController} from \"./controllers/SnappedShapeGroupsController\";\r\nimport {SelectedShapesController} from \"./controllers/SelectedShapesController\";\r\nimport {Images3dController} from \"./controllers/Images3dController\";\r\n\r\nexport const controllersConfig = {\r\n exportableControllers: [\r\n 'snappedShapeGroups',\r\n 'handles'\r\n ],\r\n};\r\n\r\nconst workspaceControllers = {\r\n walls: new WallsController(),\r\n spacer: new SpacersController(),\r\n handles: new HandlesController(),\r\n shapeColors: new ShapeColorsController(),\r\n waterfall: new WaterfallController(),\r\n removedFeatures: new RemovedFeaturesController(),\r\n snappedShapeGroups: new SnappedShapeGroupsController(),\r\n selectedShapes: new SelectedShapesController(),\r\n images3d: new Images3dController(),\r\n};\r\n\r\nexport const getControllersExportData = () => {\r\n const exportData = {};\r\n controllersConfig.exportableControllers.forEach(controllerName => {\r\n const controller = workspaceControllers[controllerName];\r\n if (controller && typeof controller.exportData === 'function') {\r\n exportData[controllerName] = controller.exportData();\r\n }\r\n });\r\n\r\n return exportData;\r\n};\r\n\r\nexport const importControllersData = (data) => {\r\n if (data) {\r\n Object.keys(data).forEach(controllerName => {\r\n const controller = workspaceControllers[controllerName];\r\n if (controller && typeof controller.importData === 'function') {\r\n controller.importData(data[controllerName]);\r\n }\r\n });\r\n }\r\n};\r\n\r\nexport default workspaceControllers\r\n","import JsonApi from \"./jsonApi\";\r\nimport {getBvFeatures, getBvGroupFeatures, getSaveQuoteFastData} from \"./server-api\";\r\nimport {getCurrentLayout, getCurrentRoomType} from \"../bvcomponents/appLayout\";\r\nimport {COUNTERTOP_GROUP, CABINET_GROUP, EDGE_GROUP} from \"../bvcomponents/kvComponent/core/constants\";\r\nimport store from \"../store\";\r\nimport {updateNavigationCount} from \"../actions/lookFunctions\";\r\nimport {COUNTERTOP_GROUP_BATHROOM, LOOK_ROOM_TYPES} from \"../bvcomponents/look/core/constants\";\r\nimport {getCommonVisualizerType, IS_LIXIL_SERVERS} from \"../config\";\r\nimport {getFeatureCost} from \"../misc/helpers\";\r\nimport {showWizardInsteadOfQT} from \"../bvcomponents/look/lookNavigation/lookMain/lookWizard/lookWizardFunctions\";\r\n\r\nexport const LIXIL_USER_QUERY_PARAMS = [\"userid\", \"email\", \"fname\", \"lname\", \"brand\", \"region\"];\r\n\r\nexport const getPassedUserInfo = (searchParams) => {\r\n // {\r\n // userid: {userId from querystring},\r\n // email: {email from querystring},\r\n // fname: {fname from querystring},\r\n // lname: {lname from querystring},\r\n // fabricatorId: {QC Id for Fabricator (same value passed for fabricatorId for the LoginClient API call}\r\n // }\r\n const userData = {\r\n fabricatorId: +document.kvConfig.userId\r\n };\r\n LIXIL_USER_QUERY_PARAMS.forEach(property => {\r\n userData[property] = searchParams.get(property)\r\n ? property === \"userid\" || property === \"lname\"\r\n ? searchParams.get(property).split(\"?userid=\")[0].replace(/ /g, \"+\")\r\n : searchParams.get(property).replace(/ /g, \"+\")\r\n : \"\"\r\n });\r\n console.log(\"request userData\", userData);\r\n return JsonApi.getPassedUserInfo(userData)\r\n .then(response => response.data)\r\n .catch(error => {\r\n console.log(\"Server error getPassedUserInfo \"+new Error(error));\r\n })\r\n};\r\n\r\nexport const postSaveVisualizerImage = (base64Image) => {\r\n // console.log(\"request postSaveVisualizerImage\", base64Image);\r\n return JsonApi.postSaveVisualizerImage(+document.kvConfig.userId, base64Image)\r\n .then(response => response.data)\r\n .catch(error => {\r\n console.log(\"Server error postSaveVisualizerImage \"+new Error(error));\r\n })\r\n};\r\n\r\nexport const postSaveTempData = (tempData, id = \"\", expiresIn = \"\", ) => {\r\n return JsonApi.postSaveTempData(tempData, id, expiresIn)\r\n .then(response => response.data)\r\n .catch(error => {\r\n console.log(\"Server error postSaveTempData \"+new Error(error));\r\n })\r\n};\r\n\r\nexport const getSaveTempData = (id = \"\") => {\r\n return JsonApi.getSaveTempData(id)\r\n .then(response => response.data)\r\n .catch(error => {\r\n debugger;//eslint-disable-line\r\n console.log(\"Server error getSaveTempData \"+new Error(error));\r\n })\r\n};\r\n\r\nexport const getTempIdForPostMessage = async (returnAction = \"\", existingTempId = \"\") => {\r\n const savedFastData = await getSaveQuoteFastData(true);\r\n\r\n savedFastData.records[0].data[\"returnAction\"] = returnAction;\r\n console.log(\"request post temp data before stringify ->\", existingTempId, savedFastData);\r\n const stringifiedSaveData = JSON.stringify(savedFastData);\r\n let receivedTempId = await postSaveTempData(stringifiedSaveData, existingTempId);\r\n if (!receivedTempId) {\r\n receivedTempId = await postSaveTempData(stringifiedSaveData, existingTempId);\r\n }\r\n return receivedTempId\r\n};\r\n\r\nexport const postSureTax = (postData) => {\r\n return JsonApi.postSureTax(postData)\r\n .then(response => response.data)\r\n .catch(error => console.log(\"Server error postSureTax \"+new Error(error)))\r\n};\r\n\r\nexport const postVerifyAddress = (addressObject) => {\r\n return JsonApi.postVerifyAddress( {\r\n \"Address1\": \"\",\r\n \"Address2\": (addressObject.address1 || \"\").split(\",\")[0],\r\n \"City\" : addressObject.city,\r\n \"State\" : addressObject.stateShort || addressObject.state.slice(0, 2),\r\n \"Zip5\" : (addressObject.postal || \"\").split(\"-\")[0] || null,\r\n \"Zip4\" : (addressObject.postal || \"\").split(\"-\")[1] || null\r\n })\r\n .then(response => {\r\n if (response.data.error) {\r\n return {\r\n errorDescription: response.data.error\r\n }\r\n }\r\n return response.data\r\n })\r\n .catch(error => {\r\n if (error && error.response && error.response.data && error.response.data.error) {\r\n return {\r\n errorDescription: error.response.data.error\r\n }\r\n }\r\n return {\r\n errorDescription: error && error.message ? error.message : \"Server error verifyAddress \"+new Error(error)\r\n }\r\n })\r\n};\r\n\r\nexport const getTrumbleShippingOptions = (skuList, zipCode) => {\r\n return JsonApi.getTrumbleShippingOptions(skuList, zipCode)\r\n .then(response => response.data)\r\n .catch(error => console.log(\"Server error postSureTax \"+new Error(error)))\r\n};\r\nexport const postTrumbleShippingOptions = (postData, zipCode) => {\r\n return JsonApi.postTrumbleShippingOptions(postData, zipCode)\r\n .then(response => response.data)\r\n .catch(error => console.log(\"Server error postSureTax \"+new Error(error)))\r\n};\r\nexport const postTrumbleInventory = (skusArray = []) => {\r\n // https://qc-cdn.s3.amazonaws.com/lixil/image+(8).png\r\n return JsonApi.postTrumbleInventory(skusArray)\r\n .then(response => response.data)\r\n .catch(error => console.log(\"Server error postTrumbleInventory \"+new Error(error)))\r\n};\r\n\r\nexport const postShipperHQOptions = async (shippingAddress, cartItems = []) => {\r\n const {stateShort, state, city, postal} = shippingAddress;\r\n const postData = {\r\n destination: {\r\n \"country\": \"US\", // hardcode for now\r\n \"region\": stateShort || state.slice(0, 2),\r\n \"city\": city,\r\n \"zipcode\": postal,\r\n },\r\n items: cartItems.map(cartItem => ({\r\n \"itemId\": cartItem.cartFeature.dbFeature.id,\r\n \"sku\": cartItem.cartFeature.dbFeature.sku,\r\n \"storePrice\": getFeatureCost(cartItem.cartFeature, 1, cartItem.fromQtCategory),\r\n \"quantity\": cartItem.quantity\r\n }))\r\n }\r\n // https://qc-cdn.s3.amazonaws.com/lixil/image+(10).png\r\n return JsonApi.postShipperHqShipping(postData)\r\n .then(response => {\r\n console.log(\"response postShipperHqShipping\", response && response.data ? response.data : response);\r\n let availableOptions = [];\r\n if (!response.data || !Array.isArray(Object.keys(response.data))) {\r\n return availableOptions\r\n }\r\n availableOptions = Object.keys(response.data).map(dbFeatureId => {\r\n if (!Array.isArray(response.data[dbFeatureId]) || !response.data[dbFeatureId].length) {\r\n return {dbFeatureId: +dbFeatureId, options: []}\r\n }\r\n const options = response.data[dbFeatureId].flatMap(carrier => { // can be several\r\n return carrier.shippingRates.map(shippingRate => {\r\n return {\r\n cost: shippingRate.totalCharges,\r\n title: shippingRate.title,\r\n delivery: shippingRate.delivery || \"-\",\r\n code: shippingRate.code\r\n }\r\n })\r\n })\r\n return {dbFeatureId: +dbFeatureId, options}\r\n })\r\n return availableOptions\r\n })\r\n .catch(error => console.log(\"Server error postShipperHQOptions \"+new Error(error)))\r\n};\r\n\r\n/**\r\n * sets feature quantity properties\r\n * @param featuresArray {featureInterface}\r\n * @returns {promise}\r\n */\r\nexport const setTrumbleInventoryForFeatures = (featuresArray = []) => {\r\n const skusArray = featuresArray.map(feature => feature.dbFeature.sku);\r\n return postTrumbleInventory(skusArray)\r\n .then(responseData => {\r\n // console.log(\"postTrumbleInventory responseData\", responseData);\r\n if (responseData && responseData.success && responseData.inventory) {\r\n Object.keys(responseData.inventory).forEach(sku => {\r\n const featureToUpdate = featuresArray.find(feature => feature.dbFeature.sku === sku);\r\n if (featureToUpdate) {\r\n if (!featureToUpdate.quantityOptions) {\r\n featureToUpdate.quantityOptions = {};\r\n }\r\n featureToUpdate.quantityOptions.trumbleQty = responseData.inventory[sku].inventory;\r\n }\r\n })\r\n }\r\n })\r\n};\r\n\r\nconst requestMoreThanUsualPartIds = [\"vanity_faucet\", \"vanity_sink\", \"shower_head\", \"valve_trim\", \"towel\",\r\n \"towel_towel_bar\", \"towel_towel_hook\", \"towel_towel_ring\", \"shower_fixture\", \"shower_door\"];\r\n\r\n/**\r\n * common function to request features\r\n * @param featureGroup {featureGroupInterface}\r\n * @returns {number}\r\n */\r\nconst request6kFeatures = [...CABINET_GROUP, \"top_handle\", \"bottom_handle\", \"sink\", \"center_island_sink\", \"crown_molding\"];\r\nexport const getFeaturesPageSize = (featureGroup) => {\r\n let pageSize = 1000;\r\n if (document.kvConfig.visualizerType === \"kvScene\" && request6kFeatures.includes(featureGroup.partId)) {\r\n pageSize = 6000 // always for new kitchen (we need all parts)\r\n } else if (COUNTERTOP_GROUP.includes(featureGroup.partId)) {\r\n const {navigationState} = store.getState();\r\n if (document.kvConfig.visualizerType !== \"kvScene\" || navigationState.useFeaturesLightRequest.countertops) {\r\n pageSize = 6000 // always for old Kitchen\r\n }\r\n } else if (\r\n (document.kvConfig.visualizerType === \"bvLook\" && requestMoreThanUsualPartIds.includes(featureGroup.partId))\r\n || (document.kvConfig.visualizerType === \"bvScene\" && (featureGroup.partId === \"shower_wall\" || featureGroup.partId === \"shower_interior_wall\"))\r\n ) {\r\n pageSize = 6000\r\n }\r\n if (featureGroup.allFeaturesReceived && pageSize === 6000) {\r\n pageSize = 2000 // next always 2k, it works correctly on scroll\r\n }\r\n return pageSize\r\n}\r\n\r\nexport const getAdditionalFeaturesOnScroll = async (featureGroup, isCommonRequest = false) => {\r\n if (featureGroup.createdManually || featureGroup.requestInProgress) {\r\n if (featureGroup.createdManually) {\r\n featureGroup.allFeaturesReceived = true;\r\n }\r\n return false\r\n }\r\n\r\n featureGroup.requestInProgress = true;\r\n // console.log(\"propsPageSize\", propsPageSize);\r\n const pageSize = getFeaturesPageSize(featureGroup);\r\n const layout = featureGroup.getParent\r\n ? featureGroup.getParent().layout || getCurrentLayout()\r\n : getCurrentLayout();\r\n const layoutAbbr = layout.getCurrentLayoutAbbreviation();\r\n const nextFeaturesPage = featureGroup.getNextPageToLoad(layoutAbbr);\r\n\r\n if (featureGroup.additionalPartPartId) {\r\n const wallParent = layout.parts[\"Walls\"];\r\n const isWallChild = wallParent && wallParent.relatedItems.some(relItem => relItem.partId === featureGroup.partId);\r\n if (isWallChild) {\r\n const cropResponse = await getBvGroupFeatures((featureGroup.dbName || featureGroup.partName) + \" Crop\", nextFeaturesPage, pageSize * 3);\r\n if (Array.isArray(cropResponse)) {\r\n featureGroup.setGroupFeatures(cropResponse, pageSize * 2, false, layoutAbbr, nextFeaturesPage, false, !isCommonRequest);\r\n }\r\n }\r\n }\r\n\r\n const response = await getBvGroupFeatures(featureGroup.dbName || featureGroup.partName, nextFeaturesPage, pageSize);\r\n\r\n let responseArray = Array.isArray(response) ? response : [];\r\n let oldFeatures = [];\r\n if (layout.isNewLayout && featureGroup.nextFeaturesPageToLoadArray && !featureGroup.allFeaturesReceived && !IS_LIXIL_SERVERS\r\n && (CABINET_GROUP.includes(featureGroup.partId) || COUNTERTOP_GROUP.includes(featureGroup.partId)\r\n || COUNTERTOP_GROUP_BATHROOM.includes(featureGroup.partId))) { // we don't need requests for walls\r\n const {wizardList, wizardIsActive} = store.getState().wizardState;\r\n if (!showWizardInsteadOfQT(wizardList, wizardIsActive)) {\r\n const responseWithOldFeatures = await getBvGroupFeatures(featureGroup.dbName || featureGroup.partName, nextFeaturesPage, 6000, [], \"\", \"\", null, true);\r\n if (Array.isArray(responseWithOldFeatures)) {\r\n oldFeatures = responseWithOldFeatures;\r\n }\r\n }\r\n }\r\n\r\n featureGroup.setGroupFeatures(responseArray, pageSize, true, layoutAbbr, nextFeaturesPage, false, !isCommonRequest);\r\n\r\n if (oldFeatures.length) {\r\n featureGroup.setGroupFeatures(oldFeatures, pageSize, false, layoutAbbr, nextFeaturesPage, true, false);\r\n }\r\n featureGroup.requestInProgress = false;\r\n // if (applyCustomConfigurations) { //no need for it right now since we have less than 1000 sinks anf faucets\r\n // const vanityParent = layout.parts[\"Vanity\"];\r\n // const isVanityChild = vanityParent && vanityParent.relatedItems.some(relItem => relItem.partId === featureGroup.partId);\r\n // if (vanityParent) {\r\n // layout.createCustomConfigurations();\r\n // }\r\n // }\r\n return responseArray\r\n};\r\n\r\nconst allRelatedItemsCheck = (parentGroup, neededParts) => {\r\n parentGroup.relatedItems.forEach(relItem => {\r\n if (!relItem.allFeaturesReceived && !neededParts.some(featureGroup => featureGroup.partId === relItem.partId)) {\r\n neededParts.push(relItem)\r\n }\r\n })\r\n return neededParts\r\n}\r\n\r\n/**\r\n * gets all features depending on the featureGroup\r\n * @param featureGroup {featureGroupInterface}\r\n * @param shouldUpdateNavigation {boolean}\r\n */\r\nexport const checkIfLookFeaturesReceived = async (featureGroup, shouldUpdateNavigation = true) => {\r\n const layout = featureGroup.getParent\r\n ? featureGroup.getParent().layout || getCurrentLayout()\r\n : getCurrentLayout();\r\n const layoutAbbr = layout.getCurrentLayoutAbbreviation();\r\n let neededParts = [];\r\n let neededFeatureGroup = null;\r\n if (!featureGroup.allFeaturesReceived\r\n || (featureGroup.nextFeaturesPageToLoadArray && !featureGroup.nextFeaturesPageToLoadArray[layoutAbbr].page)) {\r\n neededParts.push(featureGroup);\r\n }\r\n // const wallParent = layout.parts[\"Walls\"];\r\n const vanityParent = layout.parts[\"Vanity\"];\r\n const cabinetParent = layout.parts[\"Cabinet\"];\r\n\r\n // const isWallChild = wallParent && wallParent.relatedItems.some(relItem => relItem.partId === featureGroup.partId);\r\n const isVanityChild = vanityParent && vanityParent.relatedItems.some(relItem => relItem.partId === featureGroup.partId);\r\n const isCabinetChild = cabinetParent\r\n && (cabinetParent.relatedItems.some(relItem => relItem.partId === featureGroup.partId)\r\n || featureGroup.partId === \"fridge\"\r\n || featureGroup.partId === \"dishwasher\"\r\n || featureGroup.partId === \"center_island_cabinet\"\r\n || featureGroup.partId === \"stovetop\"\r\n || featureGroup.partId === \"range\"\r\n || featureGroup.partId === \"hood\");\r\n const isCountertop = COUNTERTOP_GROUP.some(partId => partId === featureGroup.partId);\r\n const isEdge = EDGE_GROUP.some(partId => partId === featureGroup.partId);\r\n const visType = getCommonVisualizerType();\r\n const isFaucetOrSink = visType === \"kitchen\" && (featureGroup.partId.includes(\"faucet\") || featureGroup.partId.includes(\"sink\"));\r\n const isShowerHeadOrArm = visType === \"bathroom\" && (featureGroup.partId.includes(\"shower_arm\") || featureGroup.partId.includes(\"shower_head\"));\r\n const isDoorOrShowerPan = visType === \"bathroom\" && (featureGroup.partId.includes(\"shower_door\") || featureGroup.partId.includes(\"shower_pan_combo\"));\r\n // if (isWallChild) {\r\n // neededParts = allRelatedItemsCheck(wallParent, neededParts);\r\n // } else if (isVanityChild) {\r\n if (isVanityChild) {\r\n neededParts = allRelatedItemsCheck(vanityParent, neededParts);\r\n if (getCurrentRoomType() === LOOK_ROOM_TYPES.as) {\r\n const wallParent = layout.parts[\"Walls\"];\r\n const appliancesParent = layout.parts[\"Appliances\"];\r\n if (wallParent) {\r\n [\"frontWall\", \"rightWall\", \"leftWall\"].forEach(wallId => {\r\n if (wallParent[wallId] && !wallParent[wallId].allFeaturesReceived) {\r\n neededParts.push(wallParent[wallId]);\r\n }\r\n })\r\n }\r\n if (appliancesParent && appliancesParent.fridgeEnclosure && !appliancesParent.fridgeEnclosure.allFeaturesReceived) {\r\n neededParts.push(appliancesParent.fridgeEnclosure);\r\n }\r\n }\r\n } else if (isCabinetChild) {\r\n neededParts = allRelatedItemsCheck(cabinetParent, neededParts);\r\n if (featureGroup.partId !== \"center_island_cabinet\") {\r\n const centerIslandCabinet = layout.getFeatureGroupByPartId(\"center_island_cabinet\");\r\n if (centerIslandCabinet) {\r\n neededParts.push(centerIslandCabinet);\r\n }\r\n }\r\n } else if (isCountertop) {\r\n const countertop = layout.parts[\"Countertop\"] ? layout.parts[\"Countertop\"].countertop : null;\r\n const backsplash = layout.parts[\"Walls\"] ? layout.parts[\"Walls\"].backsplash : null;\r\n const centerCountertop = layout.parts[\"CenterIsland\"] ? layout.parts[\"CenterIsland\"].countertop : null;\r\n const edgeProfile = layout.parts[\"Countertop\"] ? layout.parts[\"Countertop\"].edgeProfile || layout.parts[\"Countertop\"].edge : null;\r\n [countertop, backsplash, centerCountertop, edgeProfile].forEach(relItem => {\r\n if (relItem && (relItem.partId !== featureGroup.partId) && !relItem.allFeaturesReceived) {\r\n neededParts.push(relItem)\r\n }\r\n });\r\n if (featureGroup.partId === \"center_island_countertop\" && layout.parts[\"CenterIsland\"] && layout.parts[\"CenterIsland\"].sink) {\r\n neededParts.push(layout.parts[\"CenterIsland\"].sink)\r\n }\r\n } else if (isFaucetOrSink) {\r\n const parent = featureGroup.getParent();\r\n switch (featureGroup.partId) {\r\n case \"center_island_faucet\":\r\n case \"faucet\":\r\n neededFeatureGroup = parent.sink;\r\n break;\r\n case \"center_island_sink\":\r\n case \"sink\":\r\n neededFeatureGroup = parent.faucet;\r\n break;\r\n default:\r\n break;\r\n }\r\n if ((featureGroup.partId === \"center_island_sink\") && parent.countertop) {\r\n neededParts.push(parent.countertop)\r\n }\r\n } else if (isDoorOrShowerPan) {\r\n neededFeatureGroup = featureGroup.partId.includes(\"shower_door\")\r\n ? featureGroup.getParent().showerPanCombo\r\n : featureGroup.getParent().showerDoor;\r\n } else if (isShowerHeadOrArm) {\r\n neededFeatureGroup = featureGroup.partId.includes(\"shower_arm\")\r\n ? featureGroup.getParent().showerHead\r\n : featureGroup.getParent().showerArm;\r\n } else if (isEdge) {\r\n neededFeatureGroup = featureGroup.getParent().countertop;\r\n } else if (featureGroup.partId === \"stove\" || featureGroup.partId === \"range\") {\r\n if (featureGroup.getParent().hood) {\r\n neededParts.push(featureGroup.getParent().hood);\r\n }\r\n if (featureGroup.getParent().oven) {\r\n neededParts.push(featureGroup.getParent().oven);\r\n }\r\n if (cabinetParent && cabinetParent.bottomCabinet) {\r\n neededParts.push(cabinetParent.bottomCabinet);\r\n }\r\n if (cabinetParent && cabinetParent.bottomHandle) {\r\n neededParts.push(cabinetParent.bottomHandle);\r\n }\r\n }\r\n if (neededFeatureGroup && !neededFeatureGroup.allFeaturesReceived) {\r\n neededParts.push(neededFeatureGroup)\r\n }\r\n const responses = await Promise.all([\r\n ...neededParts.map(async relatedItem => await getAdditionalFeaturesOnScroll(relatedItem, true)),\r\n ]);\r\n\r\n if (isVanityChild) {\r\n layout.createCustomConfigurations();\r\n }\r\n\r\n if (shouldUpdateNavigation) {\r\n // store.dispatch(updateFeatureGroupCount())\r\n store.dispatch(updateNavigationCount())\r\n }\r\n\r\n return responses\r\n};\r\n\r\nexport const getFeatureFromTheBackendBySku = async (skuFromUrl, featureGroupFromUrl) => {\r\n let featureFound;\r\n const requestFirstSharedFeaturenames = document.kvConfig.visualizerType !== \"bvLook\"; // for bv look skus are first\r\n const response = await getBvFeatures(null, [skuFromUrl], requestFirstSharedFeaturenames);\r\n if (response) {\r\n let featuresLoaded = response.data || [];\r\n const layout = getCurrentLayout();\r\n layout.loadNewFeatures(featuresLoaded);\r\n const featureGroupPartId = featureGroupFromUrl ? featureGroupFromUrl.replace(/-/gi, \"_\") : \"\";\r\n featureFound = layout.getFeatureBySku(skuFromUrl, featureGroupPartId, false, requestFirstSharedFeaturenames);\r\n if (!featuresLoaded.length || !featureFound) {\r\n const response2 = await getBvFeatures(null, [skuFromUrl], !requestFirstSharedFeaturenames);\r\n if (response2 && Array.isArray(response2.data) && response2.data.length) {\r\n layout.loadNewFeatures( response2.data);\r\n featureFound = layout.getFeatureBySku(skuFromUrl, featureGroupPartId, false, !requestFirstSharedFeaturenames);\r\n }\r\n }\r\n }\r\n return featureFound\r\n}\r\n","import * as types from \"./actionTypes\";\r\n\r\nexport const setRelatedGroups = (relatedGroups) => ({\r\n type: types.SET_RELATED_GROUPS,\r\n payload: { relatedGroups }\r\n});\r\n\r\nexport const setRelatedGroupsSearch = (relatedGroupsSearch) => ({\r\n type: types.SET_RELATED_GROUPS_SEARCH,\r\n payload: { relatedGroupsSearch }\r\n});\r\n\r\nexport const toggleGalleryVisible = (galleryVisible, galleryShowActiveFeature = null) => ({\r\n type: types.TOGGLE_GALLERY_VISIBLE,\r\n payload: { galleryVisible, galleryShowActiveFeature }\r\n});\r\n\r\nexport const setGalleryActiveImageIndex = (galleryActiveImageIndex) => ({\r\n type: types.SET_GALLERY_ACTIVE_IMAGE_INDEX,\r\n payload: { galleryActiveImageIndex }\r\n});\r\n\r\nexport const setMaterialsPageSubSteps = (subSteps) => ({\r\n type: types.SET_MATERIALS_PAGE_SUB_STEPS,\r\n payload: { subSteps }\r\n});\r\n\r\nexport const setMaterialsPageActiveSubStep = (activeSubStep) => ({\r\n type: types.SET_MATERIALS_PAGE_ACTIVE_SUB_STEP,\r\n payload: { activeSubStep }\r\n});\r\n\r\nexport const toggleNotCompatibleView = (showNotCompatibleView) => ({\r\n type: types.TOGGLE_NOT_COMPATIBLE_VIEW,\r\n payload: { showNotCompatibleView }\r\n});\r\n\r\nexport const toggleProductNoteEditorVisible = (productNoteEditorVisible) => ({\r\n type: types.TOGGLE_PRODUCT_NOTE_EDITOR_VISIBLE,\r\n payload: { productNoteEditorVisible }\r\n});\r\n\r\nexport const setRowItems = (rowItems) => ({\r\n type: types.SET_ROW_ITEMS,\r\n payload: { rowItems }\r\n});\r\nexport const setMaterialsCanvasClass = (materialsCanvasClass) => ({\r\n type: types.SET_MATERIALS_PAGE_CANVAS_CLASS,\r\n payload: { materialsCanvasClass }\r\n});\r\n","import {Part} from \"./part\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport {vanityThumbnail} from \"../assets\";\r\n\r\nimport CompleteVanity from \"../subparts/vanity/completeVanity\";\r\nimport VanityHandle from \"../subparts/vanity/vanityHandle\";\r\nimport VanityPedestal from \"../subparts/vanity/vanityPedestal\";\r\nimport VanityCountertop from \"../subparts/vanity/vanityCountertop\";\r\nimport LightingFixture from \"../subparts/vanity/lightingFixture\";\r\nimport VanityBacksplash from \"../subparts/vanity/vanityBacksplash\";\r\nimport Mirror from \"../subparts/vanity/mirror\";\r\nimport Sink from \"../subparts/vanity/sink\";\r\nimport VanityFaucet from \"../subparts/vanity/faucet\";\r\n\r\nexport class Vanity extends Part {\r\n static id = 'Vanity';\r\n\r\n static Types = {\r\n Complete: 'Complete',\r\n Custom: 'Custom'\r\n };\r\n\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Vanity';\r\n this.translateId = \"visualizer.bathroom.vanity\";\r\n this.partThumbnail = vanityThumbnail;\r\n this.activeSubType_ = Vanity.Types.Custom;\r\n this.relatedItems = [];\r\n this.placeholdersNeeded = false; // only Vanity property\r\n\r\n // vanity parts\r\n this.pedestalSink = null;\r\n this.completeVanity = null;\r\n this.countertop = null;\r\n this.sink = null;\r\n this.faucet = null;\r\n this.vanityBacksplash = null;\r\n this.vanityHandle = null;\r\n this.mirror = null;\r\n this.lightingFixture = null;\r\n }\r\n\r\n load(dbFeature) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Sink\":\r\n relatedItemName = \"sink\";\r\n RelatedItemClass = Sink;\r\n break;\r\n case \"Mirror\":\r\n relatedItemName = \"mirror\";\r\n RelatedItemClass = Mirror;\r\n break;\r\n case \"Lighting Fixture\":\r\n relatedItemName = \"lightingFixture\";\r\n RelatedItemClass = LightingFixture;\r\n break;\r\n case \"Countertop\":\r\n relatedItemName = \"countertop\";\r\n RelatedItemClass = VanityCountertop;\r\n break;\r\n case \"Faucet\":\r\n relatedItemName = \"faucet\";\r\n RelatedItemClass = VanityFaucet;\r\n break;\r\n case \"VanityBacksplash\":\r\n case \"BackSplash\":\r\n case \"Backsplash\":\r\n relatedItemName = \"vanityBacksplash\";\r\n RelatedItemClass = VanityBacksplash;\r\n break;\r\n case \"Vanity Handle\":\r\n relatedItemName = \"vanityHandle\";\r\n RelatedItemClass = VanityHandle;\r\n break;\r\n case \"Vanity\": {\r\n const completeVanity = dbFeature.metaData && dbFeature.metaData[\"Vanity\"]\r\n && dbFeature.metaData[\"Vanity\"].includes(\"Complete\");\r\n\r\n relatedItemName = completeVanity ? \"completeVanity\" : \"pedestalSink\";\r\n RelatedItemClass = completeVanity ? CompleteVanity : VanityPedestal;\r\n break;\r\n }\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n if (relatedItemName === \"sink\") {\r\n const faucetIndex = this.relatedItems.findIndex(relItem => relItem.partName === 'Faucet');\r\n faucetIndex ? this.relatedItems.splice(faucetIndex, 0, this.sink) : this.relatedItems.push(this.sink);\r\n } else if (relatedItemName === \"completeVanity\") {\r\n this.relatedItems.unshift(this.completeVanity); // cabinet needs to be first in the list.\r\n } else if (relatedItemName === \"pedestalSink\") {\r\n this.relatedItems.unshift(this.pedestalSink); // cabinet needs to be first in the list.\r\n } else {\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n setLayers(layout, placeholdersNeeded) {\r\n let res = [];\r\n this.placeholdersNeeded = true;\r\n this.getRelatedItems().forEach(relatedItem => {\r\n relatedItem.setLayers(layout);\r\n (placeholdersNeeded && !relatedItem.placeholderChanged && relatedItem.placeholderFeature)\r\n ? relatedItem.placeholderFeature.layer.addTo(res)\r\n : relatedItem.activeFeature && relatedItem.activeFeature.layer && relatedItem.activeFeature.layer.src\r\n ? relatedItem.activeFeature.layer.addTo(res)\r\n : relatedItem.placeholderFeature && relatedItem.placeholderFeature.layer && relatedItem.placeholderFeature.layer.src\r\n ? relatedItem.placeholderFeature.layer.addTo(res)\r\n : null;\r\n });\r\n return res.length ? res : null;\r\n }\r\n\r\n getRelatedItems() {\r\n return this.relatedItems.filter(item => item.visible.includes(this.activeSubType_));\r\n }\r\n\r\n navigationItem() {\r\n return new DesignNavigationItem('Vanity', this);\r\n }\r\n\r\n subTypes() {\r\n return this.pedestalSink && this.completeVanity ? [Vanity.Types.Custom, Vanity.Types.Complete] : [];\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return this.activeSubType_ === Vanity.Types.Complete;\r\n }\r\n\r\n activeSubType() {\r\n return this.activeSubType_;\r\n }\r\n\r\n subParts() {\r\n const relatedItems = this.getRelatedItems();\r\n const excluded = [];\r\n const vanityPart = relatedItems.find(navItem => navItem.partId === \"vanity_cabinet\");\r\n if (vanityPart && vanityPart.activeFeature\r\n && vanityPart.activeFeature.metaData[\"VanityHandle\"]\r\n && vanityPart.activeFeature.metaData[\"VanityHandle\"].includes(\"None\")) {\r\n excluded.push(\"vanity_handle\")\r\n }\r\n return relatedItems\r\n .filter(item => !excluded.includes(item.partId))\r\n .map(_ => new DesignNavigationItem(_.partName, _));\r\n }\r\n\r\n // subPartsWithAccentWall() {\r\n // const vanityAccent = this.layout.parts.Walls.vanityAccent;\r\n // return [new DesignNavigationItem(vanityAccent.partName, vanityAccent),\r\n // ...this.getRelatedItems().map(_ => new DesignNavigationItem(_.partName, _))];\r\n // }\r\n\r\n handleSubTypeClick(subType) {\r\n this.activeSubType_ = subType;\r\n this.getRelatedItems().forEach((relatedItem) => {\r\n if (!relatedItem.activeFeature) {\r\n relatedItem.setDefault()\r\n }\r\n });\r\n }\r\n\r\n setDefaultPartAfterSubTypeClick() {\r\n return this.subParts()[0]\r\n }\r\n\r\n setDefault(layout) {\r\n this.getRelatedItems().forEach(_ => _.setDefault(layout));\r\n }\r\n\r\n counterTopSize() {\r\n return this.getCounterTopSize() || '24in'; // temporary hardcode until we would have meta data finished\r\n }\r\n\r\n getCounterTopSize() {\r\n\r\n if (this.activeSubType_ === Vanity.Types.Custom && this.pedestalSink && !this.pedestalSink.placeholderChanged\r\n && this.pedestalSink.placeholderFeature && +this.pedestalSink.placeholderFeature.vanitySize === 72) {\r\n return '72in' // placeholder hardcode\r\n }\r\n\r\n if (this.activeSubType_ === Vanity.Types.Complete) {\r\n if (!this.completeVanity.activeFeature) {\r\n this.completeVanity.setDefault()\r\n }\r\n return this.completeVanity.activeFeature.vanitySize + \"in\"\r\n } else {\r\n if (this.pedestalSink && !this.pedestalSink.activeFeature) {\r\n this.pedestalSink.setDefault()\r\n }\r\n return (this.pedestalSink && this.pedestalSink.activeFeature)\r\n ? this.pedestalSink.activeFeature.vanitySize + \"in\"\r\n : null;\r\n }\r\n }\r\n\r\n toggleVanityParts(disabled) {\r\n this.getRelatedItems().forEach(relItem => {\r\n if (relItem.partId === \"vanity_sink\" || relItem.partId === \"vanity_faucet\"\r\n || relItem.partId === \"vanity_countertop\" || relItem.partId === \"vanity_cabinet\"\r\n || relItem.partId === \"vanity_handle\") {\r\n relItem.disabled = disabled;\r\n }\r\n });\r\n }\r\n}\r\n\r\n","import orderBy from \"lodash/orderBy\";\r\n\r\nimport {Part} from \"../part\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport {showerThumbnail} from '../../../bvComponent/core/assets';\r\n\r\n// import store from \"../../../../store\";\r\n\r\nimport {ShowerTubCombo} from \"./showerTubCombo\";\r\n\r\nimport ShowerFixture from \"../subparts/shower/showerFixture\";\r\nimport ShowerGlass from \"../subparts/shower/showerGlass\";\r\n// import ShowerOverlay from \"../subparts/shower/showerOverlay\";\r\nimport ShowerBody from \"../subparts/shower/showerBody\";\r\nimport ShowerWall from \"../subparts/shower/showerWall\";\r\nimport ShowerWallAccent from \"../subparts/shower/showerWallAccent\";\r\nimport ShowerDoor from \"../subparts/shower/showerDoor\";\r\nimport ShowerPanCombo from \"../subparts/shower/showerPanCombo\";\r\nimport ShowerDoorHandle from \"../subparts/shower/showerDoorHandle\";\r\nimport PonyWallCap from \"../subparts/shower/ponyWallCap\";\r\nimport PonyWallGlass from \"../subparts/shower/ponyWallGlass\";\r\nimport ShowerFloor from \"../subparts/shower/showerFloor\";\r\nimport Threshold from \"../subparts/shower/threshold\";\r\nimport ShowerDrain from \"../subparts/shower/showerDrain\";\r\nimport ShowerHead from \"../subparts/shower/showerHead\";\r\n\r\nexport class Shower extends Part {\r\n static id = 'Shower';\r\n\r\n static Type = {\r\n Custom: 'Custom',\r\n Complete: 'Complete',\r\n Combo: 'Combo',\r\n All: 'All'\r\n };\r\n\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partThumbnail = showerThumbnail;\r\n this.partName = 'Shower';\r\n this.translateId = \"visualizer.bathroom.shower\";\r\n this.relatedItems = [];\r\n this.activeSubType_ = Shower.Type.Custom;\r\n\r\n this.customBodyType = 1; // Door\r\n\r\n this.showerBody = null;\r\n this.showerGlass = null;\r\n this.showerWall = null;\r\n this.showerWallAccent = null;\r\n\r\n // old\r\n this.showerFloor = null;\r\n this.showerOverlay = null;\r\n // old\r\n\r\n this.showerPanCombo = null;\r\n this.threshold = null;\r\n this.showerFixture = null;\r\n this.showerBodySelectedByUser = false;\r\n this.showerDoor = null;\r\n this.showerDoorHandle = null;\r\n\r\n this.ponyWallCap = null;\r\n this.ponyWallGlass = null;\r\n\r\n this.showerBody = new ShowerBody(true);\r\n this.showerBody.getParent = () => this;\r\n this.showerBody.type = Shower.Type.All;\r\n this.showerBody.counts = {\r\n allLayoutFeaturesCount: 0,\r\n largeLayoutFeaturesCount: 0,\r\n smallLayoutFeaturesCount: 0\r\n };\r\n this.relatedItems.push(this.showerBody);\r\n\r\n this.showerFloorIsActive = false;\r\n\r\n }\r\n\r\n load(dbFeature) {\r\n let relatedItemName = \"\",\r\n relatedItemType = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Shower Pan\":\r\n case \"Shower Pans\":\r\n relatedItemName = \"showerPanCombo\";\r\n RelatedItemClass = ShowerPanCombo;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"Shower Wall\":\r\n case \"Shower Walls\":\r\n case \"ShowerInteriorWall\": // OLD\r\n relatedItemName = \"showerInteriorWall\";\r\n RelatedItemClass = ShowerWall;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"Shower Wall Accent\":\r\n relatedItemName = \"showerWallAccent\";\r\n RelatedItemClass = ShowerWallAccent;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"Shower Door\":\r\n case \"Shower_Door\":\r\n if (!dbFeature.displayName.includes(\"Neo Angle\")) {\r\n relatedItemName = \"showerDoor\";\r\n RelatedItemClass = ShowerDoor;\r\n relatedItemType = Shower.Type.Custom;\r\n }\r\n break;\r\n case \"Shower Door Handle\":\r\n relatedItemName = \"showerDoorHandle\";\r\n RelatedItemClass = ShowerDoorHandle;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"ShowerPan\":\r\n relatedItemName = \"threshold\";\r\n RelatedItemClass = Threshold;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"ShowerFloor\":\r\n relatedItemName = \"showerFloor\";\r\n RelatedItemClass = ShowerFloor;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"Shower Fixture\":\r\n relatedItemName = \"showerFixture\";\r\n RelatedItemClass = ShowerFixture;\r\n relatedItemType = Shower.Type.All;\r\n break;\r\n case \"Shower Drain\":\r\n relatedItemName = \"showerDrain\";\r\n RelatedItemClass = ShowerDrain;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"Shower Head\":\r\n relatedItemName = \"showerHead\";\r\n RelatedItemClass = ShowerHead;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"Pony Wall Cap\":\r\n relatedItemName = \"ponyWallCap\";\r\n RelatedItemClass = PonyWallCap;\r\n relatedItemType = Shower.Type.All;\r\n break;\r\n case \"Pony Wall Glass\":\r\n relatedItemName = \"ponyWallGlass\";\r\n RelatedItemClass = PonyWallGlass;\r\n relatedItemType = Shower.Type.All;\r\n break;\r\n case \"Shower Glass\":\r\n if (!this.showerBody) {\r\n this.showerBody = new ShowerBody(true);\r\n this.relatedItems.push(this.showerBody);\r\n }\r\n relatedItemName = \"showerGlass\";\r\n RelatedItemClass = ShowerGlass;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n // case \"Shower Overlay\":\r\n // relatedItemName = \"showerOverlay\";\r\n // RelatedItemClass = ShowerOverlay;\r\n // relatedItemType = Shower.Type.Custom;\r\n // break;\r\n case \"Shower Body\":\r\n relatedItemName = \"showerBody\";\r\n RelatedItemClass = ShowerBody;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n if (relatedItemName !== \"shadows\") {\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].type = relatedItemType;\r\n this[relatedItemName].load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n setSpecificRules() {}\r\n\r\n // setLayers(layout, placeholdersNeeded) {\r\n // let res = [];\r\n // const relatedItems = this.getRelatedItems();\r\n // // console.log('relatedItems', relatedItems);\r\n // relatedItems.forEach(relatedItem => {\r\n // relatedItem.setLayers(layout);\r\n // });\r\n // if (this.showerDoor && !this.showerDoor.activeFeature) { // we need it cause shower door is relying on shPanCombo\r\n // this.showerDoor.setLayers(layout);\r\n // }\r\n // if (this.showerDoorHandle && !this.showerDoorHandle.activeFeature) {\r\n // this.showerDoorHandle.setLayers(layout);\r\n // }\r\n // relatedItems.forEach(relatedItem => {\r\n //\r\n // (placeholdersNeeded && !relatedItem.placeholderChanged && relatedItem.placeholderFeature)\r\n // ? relatedItem.placeholderFeature.layer.addTo(res)\r\n // : relatedItem.activeFeature && relatedItem.activeFeature.layer ? relatedItem.activeFeature.layer.addTo(res) : null\r\n //\r\n // // NN(relatedItem.activeFeature, (activeFeature) => activeFeature.layer.addTo(res));\r\n //\r\n // if ((relatedItem instanceof ShowerBody || relatedItem instanceof ShowerInteriorWallAccent)\r\n // && relatedItem.activeFeatureParts && relatedItem.activeFeatureParts.length) {\r\n // relatedItem.activeFeatureParts.forEach((activeFeaturePart) => {\r\n // activeFeaturePart && !activeFeaturePart.disabled && activeFeaturePart.layer && activeFeaturePart.layer.addTo(res);\r\n // })\r\n // }\r\n // if (relatedItem instanceof ShowerWall && relatedItem.activeFeatureParts && relatedItem.placeholderChanged && relatedItem.activeFeatureParts.length) {\r\n // relatedItem.activeFeatureParts.forEach((activeFeaturePart) => {\r\n // activeFeaturePart && !activeFeaturePart.disabled && activeFeaturePart.layer && activeFeaturePart.layer.addTo(res);\r\n // })\r\n // }\r\n //\r\n // });\r\n //\r\n // return res.length ? res : null;\r\n // }\r\n\r\n subTypes() {\r\n return this.showerBody && (this.showerBody.features.some(showerBodyFeature => showerBodyFeature.type === 0)\r\n && this.showerBody.features.some(showerBodyFeature => showerBodyFeature.type === 1)) ? [\r\n Shower.Type.Custom,\r\n Shower.Type.Complete,\r\n ] : []\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return true;\r\n }\r\n\r\n activeSubType() {\r\n return this.activeSubType_;\r\n }\r\n\r\n handleSubTypeClick(subType, handleNavigationItemClick) {\r\n this.activeSubType_ = subType;\r\n this.showerBody.setDefault(); // set default custom shower\r\n if (handleNavigationItemClick) {\r\n handleNavigationItemClick(this.showerBody.navigationSubItems()[0]) // set default custom shower\r\n }\r\n }\r\n\r\n getRelatedItems() {\r\n const relatedItems = orderBy(this.relatedItems, 'layerPriority');\r\n if (this.showerTubComboIsActive()) {\r\n return relatedItems\r\n }\r\n return relatedItems.filter((relatedItem) => {\r\n return relatedItem.type === this.activeSubType_ || relatedItem.type === Shower.Type.All\r\n })\r\n }\r\n\r\n subParts() {\r\n const activeShowerGroup = this.getActiveShowerGroup();\r\n const ponyWallIsActive = activeShowerGroup.showerDimensions() === \"Pony\";\r\n return this.getRelatedItems()\r\n .filter(item => {\r\n if (item.isPonyWallPart) {\r\n item.visible = ponyWallIsActive\r\n }\r\n return item.visible\r\n })\r\n .map(_ => new DesignNavigationItem(_.partName, _));\r\n // return filter(this.relatedItems, {visible: true}).map(_ => new DesignNavigationItem(_.partName, _));\r\n }\r\n\r\n //\r\n // toggleShowerParts(disabled, keepLeftWall) {\r\n // this.getRelatedItems().forEach((relItem) => {\r\n // console.log('relItem', relItem);\r\n // if (\r\n // relItem.partId !== \"shower_interior_wall\"\r\n // && relItem.partId !== \"shower_wall_accent\"\r\n // && relItem.partId !== \"shower_fixture\"\r\n // && relItem.partId !== \"shower_door\"\r\n // && relItem.partId !== \"shower_door_handle\"\r\n // && relItem.partId !== \"pony_wall\"\r\n // && relItem.partId !== \"pony_wall_cap\"\r\n // && relItem.partId !== \"pony_wall_glass\"\r\n // ) {\r\n // relItem.disabled = disabled;\r\n // }\r\n // });\r\n // if (!keepLeftWall) {\r\n // this.layout.parts.Walls.wallExL.disabled = disabled;\r\n // }\r\n // }\r\n\r\n setDefault(layout) {\r\n const relatedItems = orderBy(this.relatedItems, 'layerPriority');\r\n relatedItems.forEach(_ => _.setDefault(layout));\r\n }\r\n\r\n setDefaultPartAfterSubTypeClick() {\r\n return this.subParts()[0]\r\n }\r\n\r\n handleSubPartClick() {\r\n\r\n }\r\n\r\n /**\r\n * Gets the current shower size from metaValues.\r\n */\r\n showerSize() {\r\n if (this.showerTubComboIsActive()) {\r\n const showerTubCombo = this.getActiveShowerGroup();\r\n if (showerTubCombo) {\r\n const activeRelItem = showerTubCombo.relatedItems.find(featureGroup => featureGroup.partId === showerTubCombo.bottomTub)\r\n || showerTubCombo.replacementTub;\r\n if (activeRelItem && activeRelItem.activeFeature && activeRelItem.activeFeature.metaData[\"ShowerSize\"]) {\r\n return activeRelItem.activeFeature.metaData[\"ShowerSize\"][0]\r\n }\r\n }\r\n return null\r\n }\r\n if (!this.showerBody || !this.showerBody.activeFeature) {\r\n return null;\r\n }\r\n let showerSizeValues = this.showerBody.activeFeature.metaData[\"ShowerSize\"];\r\n if (!showerSizeValues || !showerSizeValues.length) {\r\n if (this.showerBody.activeFeature.partName.includes(\"Complete\")) {\r\n showerSizeValues = ['30'];\r\n } else {\r\n console.warn('No Shower size.');\r\n }\r\n } else if (showerSizeValues[0] === \"-\") {\r\n showerSizeValues[0] = this.showerBody.activeFeature.partName.includes(\"60in\") ? \"60\" : \"30\"\r\n }\r\n\r\n return showerSizeValues[0];\r\n }\r\n\r\n /**\r\n * Gets the current shower dimensions from showerBody\r\n */\r\n showerDimensions() {\r\n if (!this.showerBody)\r\n return \"Full\";\r\n return this.showerBody.activeFeature ? this.showerBody.activeFeature.showerDimensions : null;\r\n // \"Full\" : \"Half\";\r\n }\r\n\r\n isComplete() {\r\n if (!this.showerBody) {\r\n return true;\r\n } else if (this.showerTubComboIsActive()) {\r\n return false;\r\n } else {\r\n return this.showerBody.activeFeature\r\n }\r\n }\r\n\r\n showerTubComboIsActive() {\r\n const comboPart = this.layout.parts[ShowerTubCombo.id];\r\n return comboPart && comboPart.showerTubComboIsActive\r\n }\r\n\r\n getActiveShowerGroup() { // user for taking sizes, etc...\r\n return this.showerTubComboIsActive() ? this.layout.parts[ShowerTubCombo.id] : this;\r\n }\r\n}\r\n\r\n","const COLOR_THEMES = {\r\n \"qc\": {\r\n primary: \"#4A90E2\",\r\n primary_hover: \"#3483de\", // darken(primary, 5%),\r\n primary_transparent8: \"rgba(74,144,226,0.8)\",\r\n primary_transparent: \"rgba(74,144,226,0.5)\", // fade_out(primary, 0.5),\r\n active: \"#9FC522\",\r\n active_hover: \"#8daf1e\", //darken(#9FC522, 5%),\r\n active_disabled: \"rgba(141,175,30,0.5)\", //#dfecb5\",\r\n active_transparent: \"rgba(159,197,34,0.5)\", // fade_out(#9FC522, 0.5),\r\n assetsPath: \"../images\",\r\n },\r\n \"caes\": {\r\n primary: \"#58595b\",\r\n primary_hover: \"#4b4c4e\", //darken(#58595b, 5%),\r\n primary_transparent8: \"rgba(74,144,226,0.8)\",\r\n primary_transparent: \"rgba(88,89,91,0.5)\", // fade_out(primary, 0.5),\r\n active: \"#f46c42\",\r\n active_hover: \"#f3592a\", //darken(#f46c42, 5%),\r\n active_disabled: \"rgba(243,89,42, 0.5)\",\r\n active_transparent: \"rgba(244,108,66,0.5)\", //fade_out(#9FC522, 0.5),\r\n assetsPath: \"../images-caes\",\r\n }\r\n};\r\n\r\nexport const COLOR = {\r\n black: '#000000',\r\n blackLight: '#4a4a4a',\r\n white: '#ffffff',\r\n blue: '#ffffff',\r\n red: '#f11515',\r\n red_transparent: \"rgba(241, 21, 21 , 0.5)\",\r\n}\r\n\r\nexport default COLOR_THEMES\r\n","import store from \"../../../../../store\";\r\nimport {updateSQFTCalculations} from \"../../../../../actions/sqftFunctions\";\r\nconst SqftStore = {\r\n viewGL: null,\r\n ctxCenter: {\r\n x: 0,\r\n y: 0,\r\n },\r\n canvas: {\r\n width: 0,\r\n height: 0\r\n },\r\n radius: {\r\n arcLength: 0,\r\n angle: 0,\r\n clickedEdgeButton: null,\r\n featureId: null,\r\n },\r\n edgeFeatureGroup: null,\r\n edgeFeatures: [],\r\n isSlabMode: () => {\r\n const reduxState = store.getState();\r\n return reduxState.sqftSlabState.isShowSlabTool;\r\n },\r\n isRegularMode: () => {\r\n const reduxState = store.getState();\r\n return !reduxState.sqftSlabState.isShowSlabTool;\r\n },\r\n updateCalculations: () => {\r\n const state = store.getState();\r\n const updateCalculations = state.sqftState.updateCalculations;\r\n store.dispatch(updateSQFTCalculations(updateCalculations + 1));\r\n },\r\n getShapeType: () => {\r\n //todo\r\n },\r\n seamHistory: [],\r\n setSeamHistory: function(seamHistory) {\r\n this.seamHistory = seamHistory\r\n },\r\n addSeamHistory: function(shapeId) {\r\n this.seamHistory.push(shapeId)\r\n },\r\n getSeamHistory: function() {\r\n return this.seamHistory;\r\n }\r\n};\r\n\r\nexport default SqftStore\r\n","//********* TUTORIALS *********//\r\nimport * as types from \"./actionTypes\";\r\n\r\nexport const showMaterialsTutorial = (materialsTutorialIsOpened) => ({\r\n type: types.SHOW_MATERIALS_TUTORIAL,\r\n payload: {materialsTutorialIsOpened}\r\n});\r\n\r\nexport const setMaterialsTutorialStep = (materialsTutorialStep) => ({\r\n type: types.SET_MATERIALS_TUTORIAL_STEP,\r\n payload: {materialsTutorialStep}\r\n});\r\n\r\nexport const setMaterialsTutorialFinished = (materialsTutorialFinished) => ({\r\n type: types.SET_MATERIALS_TUTORIAL_FINISHED,\r\n payload: {materialsTutorialFinished}\r\n});\r\n\r\nexport const showMaterialsAgentTutorial = (materialsAgentTutorialIsOpened) => ({\r\n type: types.SHOW_MATERIALS_AGENT_TUTORIAL,\r\n payload: {materialsAgentTutorialIsOpened}\r\n});\r\n\r\nexport const setMaterialsAgentTutorialFinished = (materialsAgentTutorialFinished) => ({\r\n type: types.SET_MATERIALS_AGENT_TUTORIAL_FINISHED,\r\n payload: {materialsAgentTutorialFinished}\r\n});\r\n\r\nexport const showVisualizerTutorial = (visualizerTutorialIsOpened) => ({\r\n type: types.SHOW_VISUALIZER_TUTORIAL,\r\n payload: {visualizerTutorialIsOpened}\r\n});\r\n\r\nexport const setVisualizerTutorialStep = (visualizerTutorialStep) => ({\r\n type: types.SET_VISUALIZER_TUTORIAL_STEP,\r\n payload: {visualizerTutorialStep}\r\n});\r\n\r\nexport const setVisualizerTutorialFinished = (visualizerTutorialFinished) => ({\r\n type: types.SET_VISUALIZER_TUTORIAL_FINISHED,\r\n payload: {visualizerTutorialFinished}\r\n});\r\n","//todo move out of this folder\r\nimport COLOR_THEMES from \"../../../../../colorThemes\";\r\nimport {getParallelPoints, getPointOnTheLine} from \"../../../helpers/sqftHelper\";\r\nimport sqftConfig from \"../store/sqftConfig\";\r\nimport sqftEventManager from \"../store/sqftEventManager\";\r\nimport {getMidPoint, getPointBetweenPoints, getPointDistance} from \"../../../helpers/sqftHelper\";\r\nimport workspace from \"../core/workspace\";\r\n\r\nexport default class RenderFigures {\r\n\r\n /**\r\n * Draws a rounded rectangle using the current state of the canvas.\r\n * If you omit the last three params, it will draw a rectangle\r\n * outline with a 5 pixel border radius\r\n * @param {CanvasRenderingContext2D} ctx\r\n * @param {Number} x The top left x coordinate\r\n * @param {Number} y The top left y coordinate\r\n * @param {Number} width The width of the rectangle\r\n * @param {Number} height The height of the rectangle\r\n * @param {Number} [radius = 5] The corner radius; It can also be an object\r\n * to specify different radii for corners\r\n * @param {Number} [radius.tl = 0] Top left\r\n * @param {Number} [radius.tr = 0] Top right\r\n * @param {Number} [radius.br = 0] Bottom right\r\n * @param {Number} [radius.bl = 0] Bottom left\r\n * @param {Boolean} [isFilled = false] Whether to fill the rectangle.\r\n * @param {Boolean} [stroke = true] Whether to stroke the rectangle.\r\n */\r\n static roundedRect(ctx, x, y, width, height, radius, isFilled, stroke) {\r\n if (typeof stroke === 'undefined') {\r\n stroke = true;\r\n }\r\n if (typeof radius === 'undefined') {\r\n radius = 5;\r\n }\r\n if (typeof radius === 'number') {\r\n radius = {tl: radius, tr: radius, br: radius, bl: radius};\r\n } else {\r\n let defaultRadius = {tl: 0, tr: 0, br: 0, bl: 0};\r\n for (let side in defaultRadius) {\r\n radius[side] = radius[side] || defaultRadius[side];\r\n }\r\n }\r\n ctx.beginPath();\r\n ctx.moveTo(x + radius.tl, y);\r\n ctx.lineTo(x + width - radius.tr, y);\r\n ctx.quadraticCurveTo(x + width, y, x + width, y + radius.tr);\r\n ctx.lineTo(x + width, y + height - radius.br);\r\n ctx.quadraticCurveTo(x + width, y + height, x + width - radius.br, y + height);\r\n ctx.lineTo(x + radius.bl, y + height);\r\n ctx.quadraticCurveTo(x, y + height, x, y + height - radius.bl);\r\n ctx.lineTo(x, y + radius.tl);\r\n ctx.quadraticCurveTo(x, y, x + radius.tl, y);\r\n ctx.closePath();\r\n if (isFilled) {\r\n ctx.fill();\r\n }\r\n if (stroke) {\r\n ctx.stroke();\r\n }\r\n }\r\n\r\n static renderOval(ctx, w, h, x, y = 0, fullOval = false) {\r\n let lx = x - w * .5;\r\n let rx = x + w * .5;\r\n let ty = y - h * .5;\r\n let by = y + h * .5;\r\n\r\n let magic = 0.551915024494;\r\n let xMagic = magic * w * 0.5;\r\n let yMagic = h * magic * 0.5;\r\n\r\n ctx.moveTo(x, ty);\r\n ctx.bezierCurveTo(x + xMagic, ty, rx, y - yMagic, rx, y);\r\n ctx.bezierCurveTo(rx, y + yMagic, x + xMagic, by, x, by);\r\n if (fullOval) {\r\n ctx.bezierCurveTo(y - xMagic, by, lx, y + yMagic, lx, y);\r\n ctx.bezierCurveTo(lx, x - yMagic, x - xMagic, ty, x, ty);\r\n }\r\n }\r\n\r\n static drawArrow = (context, fromX, fromY, toX, toY) => {\r\n let headLen = 10, // length of head in pixels\r\n dx = toX - fromX,\r\n dy = toY - fromY,\r\n angle = Math.atan2(dy, dx);\r\n\r\n context.moveTo(fromX, fromY);\r\n context.lineTo(toX, toY);\r\n context.lineTo(toX - headLen * Math.cos(angle - Math.PI / 6), toY - headLen * Math.sin(angle - Math.PI / 6));\r\n context.moveTo(toX, toY);\r\n context.lineTo(toX - headLen * Math.cos(angle + Math.PI / 6), toY - headLen * Math.sin(angle + Math.PI / 6));\r\n\r\n context.moveTo(fromX, fromY);\r\n context.lineTo(fromX + headLen * Math.cos(angle - Math.PI / 6), fromY + headLen * Math.sin(angle - Math.PI / 6));\r\n context.moveTo(fromX, fromY);\r\n context.lineTo(fromX + headLen * Math.cos(angle + Math.PI / 6), fromY + headLen * Math.sin(angle + Math.PI / 6));\r\n };\r\n\r\n static drawRotatedArrow = (context, fromX, fromY, toX, toY, cornerPointX, cornerPointY, rotateAngle) => {\r\n const midpoint = getMidPoint({x: fromX, y: fromY}, {x: toX, y: toY});\r\n const rotateDirectionPoint = getPointBetweenPoints(midpoint, {x: cornerPointX, y: cornerPointY}, rotateAngle);\r\n let headLen = 7, // length of head in pixels\r\n dx = toX - rotateDirectionPoint.x,\r\n dy = toY - rotateDirectionPoint.y,\r\n angle = Math.atan2(dy, dx);\r\n const radius = getPointDistance({x: fromX, y: fromY}, {x: cornerPointX, y: cornerPointY});\r\n context.moveTo(fromX, fromY);\r\n context.arcTo(\r\n cornerPointX,\r\n cornerPointY,\r\n toX,\r\n toY,\r\n radius\r\n );\r\n\r\n //First arrow\r\n context.moveTo(toX, toY);\r\n context.lineTo(toX - headLen * Math.cos(angle - Math.PI / 6), toY - headLen * Math.sin(angle - Math.PI / 6));\r\n context.moveTo(toX, toY);\r\n context.lineTo(toX - headLen * Math.cos(angle + Math.PI / 6), toY - headLen * Math.sin(angle + Math.PI / 6));\r\n\r\n //Second arrow\r\n dx = rotateDirectionPoint.x - fromX;\r\n dy = rotateDirectionPoint.y - fromY;\r\n angle = Math.atan2(dy, dx);\r\n context.moveTo(fromX, fromY);\r\n context.lineTo(fromX + headLen * Math.cos(angle - Math.PI / 6), fromY + headLen * Math.sin(angle - Math.PI / 6));\r\n context.moveTo(fromX, fromY);\r\n context.lineTo(fromX + headLen * Math.cos(angle + Math.PI / 6), fromY + headLen * Math.sin(angle + Math.PI / 6));\r\n };\r\n\r\n static renderDoubleCircle(ctx, pointField, radius, lineWidth) {\r\n //outside circle\r\n ctx.arc(\r\n pointField.x,\r\n pointField.y,\r\n radius,\r\n 0,\r\n Math.PI * 2,\r\n false\r\n );\r\n ctx.strokeStyle = COLOR_THEMES[sqftConfig.activeTheme].primary;\r\n ctx.fillStyle = '#ffffff';\r\n ctx.lineWidth = lineWidth;\r\n ctx.stroke();\r\n ctx.fill();\r\n\r\n //inside circle\r\n ctx.beginPath();\r\n ctx.arc(\r\n pointField.x,\r\n pointField.y,\r\n radius - 3,\r\n 0,\r\n Math.PI * 2,\r\n false\r\n );\r\n\r\n ctx.fillStyle = COLOR_THEMES[sqftConfig.activeTheme].primary;\r\n ctx.lineWidth = lineWidth;\r\n ctx.fill();\r\n }\r\n\r\n static renderCircle(pointField,\r\n radius = 1,\r\n lineWidth = 1,\r\n strokeStyle = '#000000',\r\n fillStyle = null,\r\n ctx = sqftEventManager.getCtx()\r\n ) {\r\n ctx.save();\r\n ctx.beginPath();\r\n ctx.arc(\r\n pointField.x,\r\n pointField.y,\r\n radius,\r\n 0,\r\n Math.PI * 2,\r\n false\r\n );\r\n ctx.strokeStyle = strokeStyle;\r\n ctx.lineWidth = lineWidth;\r\n ctx.stroke();\r\n if (fillStyle) {\r\n ctx.fillStyle = fillStyle;//'#ffffff';\r\n ctx.fill();\r\n }\r\n ctx.closePath();\r\n ctx.restore();\r\n }\r\n\r\n static renderPolygon = (points,\r\n lineWidth = 2,\r\n strokeStyle = 'rgba(0, 0, 0, 0.5)',\r\n ctx = sqftEventManager.getCtx()\r\n ) => {\r\n const firstPoint = points[0];\r\n ctx.beginPath();\r\n ctx.moveTo(firstPoint.x, firstPoint.y);\r\n for (const point of points) {\r\n ctx.lineTo(point.x, point.y);\r\n }\r\n ctx.lineWidth = lineWidth;\r\n ctx.strokeStyle = strokeStyle;\r\n ctx.stroke();\r\n ctx.closePath();\r\n }\r\n\r\n static renderPolygonArray = (points,\r\n lineWidth = 2,\r\n strokeStyle = 'rgba(0, 0, 0, 0.5)',\r\n ctx = sqftEventManager.getCtx()\r\n ) => {\r\n const firstPoint = points[0];\r\n ctx.beginPath();\r\n ctx.moveTo(firstPoint[0], firstPoint[1]);\r\n for (const point of points) {\r\n ctx.lineTo(point[0], point[1]);\r\n }\r\n ctx.lineTo(firstPoint[0], firstPoint[1]);\r\n ctx.lineWidth = lineWidth;\r\n ctx.strokeStyle = strokeStyle;\r\n ctx.stroke();\r\n ctx.closePath();\r\n }\r\n\r\n static drawArrowsAround4points = (ctx, points, offset = 10) => {\r\n points.forEach((point, index) => {\r\n const prevPoint = points[index === 0 ? points.length - 1 : index - 1];\r\n const nextPoint = points[\r\n index === points.length - 1 ? 0 : index + 1\r\n ];\r\n const afterNextPoint = points[\r\n index === points.length - 1\r\n ? 1\r\n : index === points.length - 2\r\n ? 0\r\n : index + 2\r\n ];\r\n const offsetPoint1 = getPointOnTheLine(point, prevPoint, offset);\r\n const offsetPoint2 = getPointOnTheLine(nextPoint, afterNextPoint, offset);\r\n const [midPoint, midPoint2] = getParallelPoints(point, nextPoint, - offset);\r\n\r\n ctx.beginPath();\r\n RenderFigures.drawArrow( ctx,\r\n offsetPoint1.x,\r\n offsetPoint1.y,\r\n offsetPoint2.x,\r\n offsetPoint2.y,\r\n );\r\n RenderFigures.drawArrow( ctx,\r\n midPoint.x,\r\n midPoint.y,\r\n midPoint2.x,\r\n midPoint2.y,\r\n );\r\n ctx.lineWidth = 1;\r\n ctx.stroke();\r\n ctx.closePath();\r\n });\r\n };\r\n\r\n static drawArrowsAroundPoints = (ctx, points, offset = 10, minArrowLength = 2) => {\r\n points.forEach((point, index) => {\r\n const nextPoint = points[\r\n index === points.length - 1 ? 0 : index + 1\r\n ];\r\n const pointDistance = getPointDistance(point, nextPoint);\r\n const scale = workspace.getScale();\r\n\r\n if (pointDistance / scale > minArrowLength) {\r\n const [midPoint, midPoint2] = getParallelPoints(point, nextPoint, - offset);\r\n ctx.beginPath();\r\n RenderFigures.drawArrow( ctx,\r\n midPoint.x,\r\n midPoint.y,\r\n midPoint2.x,\r\n midPoint2.y,\r\n );\r\n ctx.lineWidth = 1;\r\n ctx.stroke();\r\n ctx.closePath();\r\n }\r\n });\r\n };\r\n\r\n static renderHandle = (ctx, midPoint) => {\r\n ctx.save();\r\n ctx.beginPath();\r\n ctx.fillStyle = 'white';\r\n ctx.lineWidth = 2;\r\n ctx.strokeStyle = COLOR_THEMES[sqftConfig.activeTheme].primary;\r\n ctx.arc(midPoint.x, midPoint.y, 10, 0, 2 * Math.PI, false);\r\n ctx.fill();\r\n ctx.stroke();\r\n ctx.closePath();\r\n\r\n ctx.beginPath();\r\n ctx.moveTo(midPoint.x, midPoint.y);\r\n ctx.lineTo(midPoint.x + 5 , midPoint.y);\r\n ctx.lineTo(midPoint.x + 5 , midPoint.y + 3);\r\n\r\n ctx.moveTo(midPoint.x, midPoint.y);\r\n ctx.lineTo(midPoint.x - 5 , midPoint.y);\r\n ctx.lineTo(midPoint.x - 5 , midPoint.y + 3);\r\n ctx.stroke();\r\n\r\n ctx.restore();\r\n }\r\n\r\n /**\r\n * Draws a sink\r\n * @param {CanvasRenderingContext2D} ctx\r\n * @param {Number} x The top left x coordinate\r\n * @param {Number} y The top left y coordinate\r\n * @param {Number} width The width of the rectangle\r\n * @param {Number} height The height of the rectangle\r\n * to specify different radii for corners\r\n */\r\n static sink(ctx, x, y, width, height) {\r\n // Proportions of the original SVG\r\n const originalWidth = 340;\r\n const originalHeight = 463;\r\n const innerRectWidth = 284;\r\n const innerRectHeight = 410;\r\n const innerRectX = 29;\r\n const innerRectY = 29;\r\n const circleRadiusBig = 29;\r\n const circleRadiusSmall = 20.7142857;\r\n const circleCenterX = 142 + circleRadiusBig;\r\n const circleCenterY = 203 + circleRadiusBig;\r\n\r\n // Scaling proportions\r\n const scaleX = width / originalWidth;\r\n const scaleY = height / originalHeight;\r\n\r\n const lineWidth = 1;\r\n const lineColor = COLOR_THEMES[sqftConfig.activeTheme].primary; //\"#4A90E2\";\r\n ctx.lineWidth = lineWidth * scaleX;\r\n ctx.strokeStyle = lineColor;\r\n\r\n // Fill the background with white\r\n ctx.fillStyle = \"#FFFFFF\";\r\n ctx.fillRect(x, y, width, height);\r\n\r\n // Drawing the outer rectangle\r\n ctx.beginPath();\r\n ctx.rect(x, y, width, height);\r\n ctx.stroke();\r\n\r\n // Drawing the inner rectangle\r\n const innerX = x + innerRectX * scaleX;\r\n const innerY = y + innerRectY * scaleY;\r\n const innerW = innerRectWidth * scaleX;\r\n const innerH = innerRectHeight * scaleY;\r\n ctx.beginPath();\r\n ctx.rect(innerX, innerY, innerW, innerH);\r\n ctx.stroke();\r\n\r\n // Drawing the circles\r\n const centerX = x + circleCenterX * scaleX;\r\n const centerY = y + circleCenterY * scaleY;\r\n const radiusBig = circleRadiusBig * scaleX;\r\n const radiusSmall = circleRadiusSmall * scaleX;\r\n\r\n ctx.beginPath();\r\n ctx.arc(centerX, centerY, radiusBig, 0, 2 * Math.PI);\r\n ctx.stroke();\r\n\r\n ctx.beginPath();\r\n ctx.arc(centerX, centerY, radiusSmall, 0, 2 * Math.PI);\r\n ctx.stroke();\r\n }\r\n\r\n /**\r\n * Draws a doubleSink\r\n * @param {CanvasRenderingContext2D} ctx\r\n * @param {Number} x The top left x coordinate\r\n * @param {Number} y The top left y coordinate\r\n * @param {Number} width The width of the rectangle\r\n * @param {Number} height The height of the rectangle\r\n * to specify different radii for corners\r\n */\r\n static doubleSink(ctx, x, y, width, height) {\r\n // Proportions of the original doubleSink SVG\r\n const originalWidth = 341;\r\n const originalHeight = 511;\r\n const innerRectWidthTop = 282;\r\n const innerRectHeightTop = 153;\r\n const innerRectWidthBottom = 283;\r\n const innerRectHeightBottom = 285;\r\n const innerRectX = 29;\r\n const innerRectYTop = 26;\r\n const innerRectYBottom = 192;\r\n const circleRadiusBig = 29;\r\n const circleRadiusSmall = 20.7142857;\r\n const circleCenterX = 149; // Adjusted for double sink\r\n const circleCenterYTop = 103; // Top circle center\r\n const circleCenterYBottom = 335; // Bottom circle center\r\n\r\n // Scaling proportions based on provided width and height\r\n const scaleX = width / originalWidth;\r\n const scaleY = height / originalHeight;\r\n\r\n // Line thickness and color for doubleSink\r\n const lineWidth = 1.54 * scaleX; // Adjusted line width\r\n const lineColor = \"#4A90E2\";\r\n\r\n // Fill the background with white\r\n ctx.fillStyle = \"#FFFFFF\";\r\n ctx.fillRect(x, y, width, height);\r\n\r\n // Draw the outer rectangle\r\n ctx.lineWidth = lineWidth;\r\n ctx.strokeStyle = lineColor;\r\n ctx.beginPath();\r\n ctx.rect(x, y, width, height);\r\n ctx.stroke();\r\n\r\n // Draw the top inner rectangle\r\n const innerX = x + innerRectX * scaleX;\r\n const innerYTop = y + innerRectYTop * scaleY;\r\n const innerWTop = innerRectWidthTop * scaleX;\r\n const innerHTop = innerRectHeightTop * scaleY;\r\n ctx.beginPath();\r\n ctx.rect(innerX, innerYTop, innerWTop, innerHTop);\r\n ctx.stroke();\r\n\r\n // Draw the bottom inner rectangle\r\n const innerYBottom = y + innerRectYBottom * scaleY;\r\n const innerWBottom = innerRectWidthBottom * scaleX;\r\n const innerHBottom = innerRectHeightBottom * scaleY;\r\n ctx.beginPath();\r\n ctx.rect(innerX, innerYBottom, innerWBottom, innerHBottom);\r\n ctx.stroke();\r\n\r\n // Draw top circles\r\n const centerXTop = x + circleCenterX * scaleX;\r\n const centerYTop = y + circleCenterYTop * scaleY;\r\n const radiusBig = circleRadiusBig * scaleX;\r\n const radiusSmall = circleRadiusSmall * scaleX;\r\n\r\n ctx.beginPath();\r\n ctx.arc(centerXTop, centerYTop, radiusBig, 0, 2 * Math.PI);\r\n ctx.stroke();\r\n\r\n ctx.beginPath();\r\n ctx.arc(centerXTop, centerYTop, radiusSmall, 0, 2 * Math.PI);\r\n ctx.stroke();\r\n\r\n // Draw bottom circles\r\n const centerYBottom = y + circleCenterYBottom * scaleY;\r\n\r\n ctx.beginPath();\r\n ctx.arc(centerXTop, centerYBottom, radiusBig, 0, 2 * Math.PI);\r\n ctx.stroke();\r\n\r\n ctx.beginPath();\r\n ctx.arc(centerXTop, centerYBottom, radiusSmall, 0, 2 * Math.PI);\r\n ctx.stroke();\r\n }\r\n\r\n // Function to draw the background pattern\r\n static drawBackgroundWhite(ctx, startPoint, width, height) {\r\n ctx.fillStyle = \"white\";\r\n ctx.fillRect(startPoint.x, startPoint.y, width, height);\r\n }\r\n\r\n // Function to draw the border pattern\r\n static drawBorder(ctx, startPoint, width, height) {\r\n ctx.lineWidth = 1;\r\n ctx.strokeStyle = \"#4A90E2\";\r\n ctx.strokeRect(startPoint.x, startPoint.y, width, height);\r\n }\r\n}\r\n","import orderBy from \"lodash/orderBy\";\r\n\r\nimport {Part} from \"../part\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport {showerThumbnail} from '../../../bvComponent/core/assets';\r\n\r\n// import store from \"../../../../store\";\r\n\r\nimport {ShowerTubCombo} from \"./showerTubCombo\";\r\n\r\nimport ShowerFixture from \"../subparts/shower/showerFixture\";\r\nimport ShowerScreen from \"../subparts/shower/showerScreen\";\r\nimport ShowerGlass from \"../subparts/shower/showerGlass\";\r\n// import ShowerOverlay from \"../subparts/shower/showerOverlay\";\r\nimport ShowerBody from \"../subparts/shower/showerBody\";\r\nimport ShowerWall from \"../subparts/shower/showerWall\";\r\nimport ShowerWallAccent from \"../subparts/shower/showerWallAccent\";\r\nimport ShowerDoor from \"../subparts/shower/showerDoor\";\r\nimport ShowerPanCombo from \"../subparts/shower/showerPanCombo\";\r\nimport ShowerDoorHandle from \"../subparts/shower/showerDoorHandle\";\r\nimport PonyWallCap from \"../subparts/shower/ponyWallCap\";\r\nimport PonyWallGlass from \"../subparts/shower/ponyWallGlass\";\r\nimport ShowerFloor from \"../subparts/shower/showerFloor\";\r\nimport Threshold from \"../subparts/shower/threshold\";\r\nimport ShowerDrain from \"../subparts/shower/showerDrain\";\r\nimport ShowerHead from \"../subparts/shower/showerHead\";\r\nimport ShowerArm from \"../subparts/shower/showerArm\";\r\nimport ShowerHeadBundle from \"../subparts/shower/showerHeadBundle\";\r\nimport TubSpout from \"../subparts/shower/tubSpout\";\r\nimport HandShowerKit from \"../subparts/shower/handShowerKit\";\r\n\r\nimport {ShowerHeadTypes, ShowerHandTypes} from \"../constants\";\r\nimport ShowerCurb from \"../subparts/shower/showerCurb\";\r\nimport BodySpray from \"../subparts/showerNew/bodySpray\";\r\nimport DiverterTrim from \"../subparts/showerNew/diverterTrim\";\r\nimport HandShowerHolder from \"../subparts/showerNew/handShowerHolder\";\r\nimport HandShowerOnly from \"../subparts/showerNew/handShowerOnly\";\r\nimport ShowerHose from \"../subparts/showerNew/showerHose\";\r\nimport ShowerSystem from \"../subparts/showerNew/showerSystem\";\r\nimport ShowerTrimKit from \"../subparts/showerNew/showerTrimKit\";\r\nimport ValveTrim from \"../subparts/showerNew/valveTrim\";\r\nimport WallUnion from \"../subparts/showerNew/wallUnion\";\r\n\r\nexport class Shower extends Part {\r\n static id = 'Shower';\r\n\r\n static Type = {\r\n Custom: 'Custom',\r\n Complete: 'Complete',\r\n Combo: 'Combo',\r\n All: 'All'\r\n };\r\n\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partThumbnail = showerThumbnail;\r\n this.partName = 'Shower';\r\n this.translateId = \"visualizer.bathroom.shower\";\r\n this.relatedItems = [];\r\n this.activeSubType_ = Shower.Type.Custom;\r\n\r\n this.customBodyType = 1; // Door\r\n\r\n this.showerBody = null;\r\n this.showerScreen = null;\r\n this.showerGlass = null;\r\n this.showerWall = null;\r\n this.showerWallAccent = null;\r\n\r\n // old\r\n this.showerFloor = null;\r\n this.showerOverlay = null;\r\n // old\r\n\r\n this.showerPanCombo = null;\r\n this.threshold = null;\r\n this.showerFixture = null;\r\n this.showerBodySelectedByUser = false;\r\n this.showerDoor = null;\r\n this.showerDoorHandle = null;\r\n\r\n this.ponyWallCap = null;\r\n this.ponyWallGlass = null;\r\n this.showerHead = null;\r\n this.showerArm = null;\r\n this.showerHeadBundle = null;\r\n this.handShowerKit = null;\r\n this.tubSpout = null;\r\n this.bodySpray = null;\r\n this.diverterTrim = null;\r\n this.handShowerHolder = null;\r\n this.handShowerOnly = null;\r\n this.showerHose = null;\r\n this.showerSystem = null;\r\n this.showerTrimKit = null;\r\n this.valveTrim = null;\r\n this.wallUnion = null;\r\n\r\n this.showerBody = new ShowerBody(true);\r\n this.showerBody.getParent = () => this;\r\n this.showerBody.type = Shower.Type.All;\r\n this.showerBody.counts = {\r\n allLayoutFeaturesCount: 0,\r\n largeLayoutFeaturesCount: 0,\r\n smallLayoutFeaturesCount: 0\r\n };\r\n this.relatedItems.push(this.showerBody);\r\n\r\n this.showerFloorIsActive = false;\r\n this.shower_head_type = ShowerHeadTypes.shower_fixture;\r\n this.shower_hand_type = ShowerHandTypes.hand_shower_holder;\r\n this.relatedGroupNames = [\"Shower Pan\", \"Shower Wall\", \"Shower Wall Accent\", \"Shower Door\", \"Shower Door Handle\",\r\n \"ShowerPan\", \"ShowerFloor\", \"Shower Fixture\", \"Shower Drain\", \"Shower Head\", \"Shower Arm\", \"Shower Head Bundle\",\r\n \"Pony Wall Cap\", \"Pony Wall Glass\", \"Shower Screen\", \"Shower Glass\", \"Shower Body\", \"Tub Spout\", \"Hand Shower Kit\",\r\n \"Shower Curb\", \"Body Spray\", \"Diverter Trim\", \"Hand Shower Holder\", \"Hand Shower Only\", \"Shower Hose\",\r\n \"Shower System\", \"Shower Trim Kit\", \"Valve Trim\", \"Wall Union\"];\r\n }\r\n\r\n load(dbFeature, loadFeature = true) {\r\n let relatedItemName = \"\",\r\n relatedItemType = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Shower Pan\":\r\n relatedItemName = \"showerPanCombo\";\r\n RelatedItemClass = ShowerPanCombo;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"Shower Pans\":\r\n relatedItemName = \"showerPanCombo\";\r\n RelatedItemClass = ShowerPanCombo;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"Shower Wall\":\r\n case \"Shower Walls\":\r\n case \"ShowerInteriorWall\": // OLD\r\n relatedItemName = \"showerWall\";\r\n RelatedItemClass = ShowerWall;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"Shower Wall Accent\":\r\n relatedItemName = \"showerWallAccent\";\r\n RelatedItemClass = ShowerWallAccent;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"Shower Door\":\r\n case \"Shower_Door\":\r\n relatedItemName = \"showerDoor\";\r\n RelatedItemClass = ShowerDoor;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"Shower Door Handle\":\r\n relatedItemName = \"showerDoorHandle\";\r\n RelatedItemClass = ShowerDoorHandle;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"ShowerPan\":\r\n relatedItemName = \"threshold\";\r\n RelatedItemClass = Threshold;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"ShowerFloor\":\r\n case \"Shower Floor\":\r\n relatedItemName = \"showerFloor\";\r\n RelatedItemClass = ShowerFloor;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"Shower Fixture\":\r\n relatedItemName = \"showerFixture\";\r\n RelatedItemClass = ShowerFixture;\r\n relatedItemType = Shower.Type.All;\r\n break;\r\n case \"Shower Drain\":\r\n relatedItemName = \"showerDrain\";\r\n RelatedItemClass = ShowerDrain;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"Shower Head\":\r\n relatedItemName = \"showerHead\";\r\n RelatedItemClass = ShowerHead;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"Shower Arm\":\r\n relatedItemName = \"showerArm\";\r\n RelatedItemClass = ShowerArm;\r\n relatedItemType = Shower.Type.All;\r\n break;\r\n case \"Shower Head Bundle\":\r\n relatedItemName = \"showerHeadBundle\";\r\n RelatedItemClass = ShowerHeadBundle;\r\n relatedItemType = Shower.Type.All;\r\n break;\r\n case \"Pony Wall Cap\":\r\n relatedItemName = \"ponyWallCap\";\r\n RelatedItemClass = PonyWallCap;\r\n relatedItemType = Shower.Type.All;\r\n break;\r\n case \"Pony Wall Glass\":\r\n relatedItemName = \"ponyWallGlass\";\r\n RelatedItemClass = PonyWallGlass;\r\n relatedItemType = Shower.Type.All;\r\n break;\r\n case \"Shower Screen\":\r\n relatedItemName = \"showerScreen\";\r\n RelatedItemClass = ShowerScreen;\r\n relatedItemType = Shower.Type.All;\r\n break;\r\n case \"Shower Glass\":\r\n if (!this.showerBody) {\r\n this.showerBody = new ShowerBody(true);\r\n this.relatedItems.push(this.showerBody);\r\n }\r\n relatedItemName = \"showerGlass\";\r\n RelatedItemClass = ShowerGlass;\r\n relatedItemType = Shower.Type.All;\r\n break;\r\n // case \"Shower Overlay\":\r\n // relatedItemName = \"showerOverlay\";\r\n // RelatedItemClass = ShowerOverlay;\r\n // relatedItemType = Shower.Type.Custom;\r\n // break;\r\n case \"Shower Body\":\r\n relatedItemName = \"showerBody\";\r\n RelatedItemClass = ShowerBody;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"Tub Spout\":\r\n relatedItemName = \"tubSpout\";\r\n RelatedItemClass = TubSpout;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"Hand Shower Kit\":\r\n relatedItemName = \"handShowerKit\";\r\n RelatedItemClass = HandShowerKit;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"Shower Curb\":\r\n relatedItemName = \"showerCurb\";\r\n RelatedItemClass = ShowerCurb;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"Body Spray\":\r\n relatedItemName = \"bodySpray\";\r\n RelatedItemClass = BodySpray;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"Diverter Trim\":\r\n case \"Diverter Only Trim\":\r\n relatedItemName = \"diverterTrim\";\r\n RelatedItemClass = DiverterTrim;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"Hand Shower Holder\":\r\n relatedItemName = \"handShowerHolder\";\r\n RelatedItemClass = HandShowerHolder;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"Hand Shower Only\":\r\n relatedItemName = \"handShowerOnly\";\r\n RelatedItemClass = HandShowerOnly;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"Shower Hose\":\r\n relatedItemName = \"showerHose\";\r\n RelatedItemClass = ShowerHose;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"Shower System\":\r\n relatedItemName = \"showerSystem\";\r\n RelatedItemClass = ShowerSystem;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"Shower Trim Kit\":\r\n relatedItemName = \"showerTrimKit\";\r\n RelatedItemClass = ShowerTrimKit;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"Valve Trim\":\r\n relatedItemName = \"valveTrim\";\r\n RelatedItemClass = ValveTrim;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"Wall Union\":\r\n relatedItemName = \"wallUnion\";\r\n RelatedItemClass = WallUnion;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n if (relatedItemName !== \"shadows\") {\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].type = relatedItemType;\r\n if (loadFeature) {\r\n this[relatedItemName].load(dbFeature);\r\n }\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n setSpecificRules() {}\r\n\r\n // setLayers(layout, placeholdersNeeded) {\r\n // let res = [];\r\n // const relatedItems = this.getRelatedItems();\r\n // // console.log('relatedItems', relatedItems);\r\n // relatedItems.forEach(relatedItem => {\r\n // relatedItem.setLayers(layout);\r\n // });\r\n // if (this.showerDoor && !this.showerDoor.activeFeature) { // we need it cause shower door is relying on shPanCombo\r\n // this.showerDoor.setLayers(layout);\r\n // }\r\n // if (this.showerDoorHandle && !this.showerDoorHandle.activeFeature) {\r\n // this.showerDoorHandle.setLayers(layout);\r\n // }\r\n // relatedItems.forEach(relatedItem => {\r\n //\r\n // (placeholdersNeeded && !relatedItem.placeholderChanged && relatedItem.placeholderFeature)\r\n // ? relatedItem.placeholderFeature.layer.addTo(res)\r\n // : relatedItem.activeFeature && relatedItem.activeFeature.layer ? relatedItem.activeFeature.layer.addTo(res) : null\r\n //\r\n // // NN(relatedItem.activeFeature, (activeFeature) => activeFeature.layer.addTo(res));\r\n //\r\n // if ((relatedItem instanceof ShowerBody || relatedItem instanceof ShowerInteriorWallAccent)\r\n // && relatedItem.activeFeatureParts && relatedItem.activeFeatureParts.length) {\r\n // relatedItem.activeFeatureParts.forEach((activeFeaturePart) => {\r\n // activeFeaturePart && !activeFeaturePart.disabled && activeFeaturePart.layer && activeFeaturePart.layer.addTo(res);\r\n // })\r\n // }\r\n // if (relatedItem instanceof ShowerWall && relatedItem.activeFeatureParts && relatedItem.placeholderChanged && relatedItem.activeFeatureParts.length) {\r\n // relatedItem.activeFeatureParts.forEach((activeFeaturePart) => {\r\n // activeFeaturePart && !activeFeaturePart.disabled && activeFeaturePart.layer && activeFeaturePart.layer.addTo(res);\r\n // })\r\n // }\r\n //\r\n // });\r\n //\r\n // return res.length ? res : null;\r\n // }\r\n\r\n subTypes() {\r\n return this.showerBody && (this.showerBody.features.some(showerBodyFeature => showerBodyFeature.type === 0)\r\n && this.showerBody.features.some(showerBodyFeature => showerBodyFeature.type === 1)) ? [\r\n Shower.Type.Custom,\r\n Shower.Type.Complete,\r\n ] : []\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return true;\r\n }\r\n\r\n activeSubType() {\r\n return this.activeSubType_;\r\n }\r\n\r\n handleSubTypeClick(subType, handleNavigationItemClick) {\r\n this.activeSubType_ = subType;\r\n this.showerBody.setDefault(); // set default custom shower\r\n if (handleNavigationItemClick) {\r\n handleNavigationItemClick(this.showerBody.navigationSubItems()[0]) // set default custom shower\r\n }\r\n }\r\n\r\n getRelatedItems() {\r\n const relatedItems = orderBy(this.relatedItems, 'layerPriority');\r\n if (this.showerTubComboIsActive()) {\r\n return relatedItems\r\n }\r\n return relatedItems.filter((relatedItem) => {\r\n return relatedItem.type === this.activeSubType_ || relatedItem.type === Shower.Type.All\r\n })\r\n }\r\n\r\n subParts() {\r\n // const activeShowerGroup = this.getActiveShowerGroup();\r\n // const ponyWallIsActive = activeShowerGroup.showerDimensions() === \"Pony\";\r\n return this.getRelatedItems()\r\n .filter(item => {\r\n // if (item.isPonyWallPart) {\r\n // item.visible = ponyWallIsActive\r\n // }\r\n return item.visible\r\n })\r\n .map(_ => new DesignNavigationItem(_.partName, _));\r\n // return filter(this.relatedItems, {visible: true}).map(_ => new DesignNavigationItem(_.partName, _));\r\n }\r\n\r\n //\r\n // toggleShowerParts(disabled, keepLeftWall) {\r\n // this.getRelatedItems().forEach((relItem) => {\r\n // console.log('relItem', relItem);\r\n // if (\r\n // relItem.partId !== \"shower_wall\"\r\n // && relItem.partId !== \"shower_wall_accent\"\r\n // && relItem.partId !== \"shower_fixture\"\r\n // && relItem.partId !== \"shower_door\"\r\n // && relItem.partId !== \"shower_door_handle\"\r\n // && relItem.partId !== \"pony_wall\"\r\n // && relItem.partId !== \"pony_wall_cap\"\r\n // && relItem.partId !== \"pony_wall_glass\"\r\n // ) {\r\n // relItem.disabled = disabled;\r\n // }\r\n // });\r\n // if (!keepLeftWall) {\r\n // this.layout.parts.Walls.wallExL.disabled = disabled;\r\n // }\r\n // }\r\n\r\n setDefault(layout) {\r\n const relatedItems = orderBy(this.relatedItems, 'layerPriority');\r\n relatedItems.forEach(_ => _.setDefault(layout));\r\n }\r\n\r\n setDefaultPartAfterSubTypeClick() {\r\n return this.subParts()[0]\r\n }\r\n\r\n handleSubPartClick() {\r\n\r\n }\r\n\r\n /**\r\n * Gets the current shower size from metaValues.\r\n */\r\n showerSize() {\r\n if (this.showerTubComboIsActive()) {\r\n const showerTubCombo = this.getActiveShowerGroup();\r\n if (showerTubCombo) {\r\n const activeRelItem = showerTubCombo.relatedItems.find(featureGroup => featureGroup.partId === showerTubCombo.bottomTub)\r\n || showerTubCombo.replacementTub;\r\n if (activeRelItem && activeRelItem.activeFeature && activeRelItem.activeFeature.metaData[\"ShowerSize\"]) {\r\n return activeRelItem.activeFeature.metaData[\"ShowerSize\"][0]\r\n }\r\n }\r\n return null\r\n }\r\n if (this.showerPanCombo && this.showerPanCombo.activeFeature && this.showerPanCombo.activeFeature.metaData[\"ShowerSize\"]\r\n && this.showerPanCombo.activeFeature.matchesMetaForArrayOfConditions(this.showerPanCombo.getArrayOfConditions())) {\r\n return this.showerPanCombo.activeFeature.metaData[\"ShowerSize\"][0]\r\n }\r\n return null\r\n }\r\n\r\n /**\r\n * Gets the current shower dimensions from showerBody\r\n */\r\n showerDimensions() {\r\n if (!this.showerBody)\r\n return \"Full\";\r\n return this.showerBody.activeFeature ? this.showerBody.activeFeature.showerDimensions : null;\r\n // \"Full\" : \"Half\";\r\n }\r\n\r\n isComplete() {\r\n if (!this.showerBody) {\r\n return true;\r\n } else if (this.showerTubComboIsActive()) {\r\n return false;\r\n } else {\r\n return this.showerBody.activeFeature\r\n }\r\n }\r\n\r\n showerTubComboIsActive() {\r\n const comboPart = this.layout.parts[ShowerTubCombo.id];\r\n return comboPart && comboPart.showerTubComboIsActive\r\n }\r\n\r\n getActiveShowerGroup() { // user for taking sizes, etc...\r\n return this.showerTubComboIsActive() ? this.layout.parts[ShowerTubCombo.id] : this;\r\n }\r\n\r\n setShowerHeadType(showerHeadType, fromPartId = \"\") {\r\n this.shower_head_type = showerHeadType;\r\n\r\n let arrayToDisable = [];\r\n let arrayToEnable = [];\r\n switch (showerHeadType) {\r\n case ShowerHeadTypes.shower_head_bundle:\r\n arrayToDisable = [this.showerArm, this.showerHead, this.showerFixture, this.showerTrimKit, this.showerSystem];\r\n arrayToEnable = [this.showerHeadBundle];\r\n break;\r\n case ShowerHeadTypes.shower_arm:\r\n switch (fromPartId) {\r\n case \"shower_arm\":\r\n case \"shower_head\":\r\n arrayToEnable = [this.showerArm, this.showerHead, this.valveTrim];\r\n break;\r\n case \"shower_hose\":\r\n case \"wall_union\":\r\n case \"hand_shower_only\":\r\n case \"hand_shower_holder\":\r\n arrayToEnable = [this.handShowerHolder, this.handShowerOnly, this.wallUnion, this.showerHose];\r\n break;\r\n default:\r\n arrayToEnable = [this.showerArm, this.showerHead, this.wallUnion];\r\n break;\r\n }\r\n arrayToDisable = [this.showerHeadBundle, this.showerFixture, this.showerTrimKit, this.showerSystem];\r\n break;\r\n case ShowerHeadTypes.shower_trim_kit:\r\n arrayToDisable = [this.showerArm, this.showerHead, this.showerFixture, this.showerHeadBundle, this.showerSystem, this.wallUnion];\r\n arrayToEnable = [this.valveTrim, this.showerTrimKit];\r\n break;\r\n case ShowerHeadTypes.shower_system:\r\n arrayToDisable = [this.showerArm, this.showerHead, this.showerFixture, this.showerHeadBundle, this.showerTrimKit, this.wallUnion];\r\n arrayToEnable = [this.showerSystem];\r\n break;\r\n case ShowerHeadTypes.shower_fixture:\r\n arrayToDisable = [this.showerArm, this.showerHead, this.showerHeadBundle, this.showerTrimKit, this.wallUnion, this.showerHose, this.handShowerOnly, this.handShowerHolder];\r\n arrayToEnable = [this.showerFixture];\r\n break;\r\n default:\r\n break;\r\n }\r\n arrayToDisable.forEach(featureGroup => {\r\n if (featureGroup && !featureGroup.disabled) {\r\n featureGroup.disabled = true;\r\n }\r\n });\r\n arrayToEnable.forEach(featureGroup => {\r\n if (featureGroup && featureGroup.disabled && featureGroup.canBeEnabled()) {\r\n featureGroup.disabled = false;\r\n }\r\n });\r\n\r\n }\r\n\r\n setShowerHandType(showerType) {\r\n this.shower_hand_type = showerType;\r\n\r\n let arrayToDisable = [];\r\n let arrayToEnable = [];\r\n switch (showerType) {\r\n case ShowerHandTypes.hand_shower_kit:\r\n arrayToDisable = [this.handShowerHolder, this.handShowerOnly, this.showerHose];\r\n arrayToEnable = [this.handShowerKit];\r\n break;\r\n case ShowerHandTypes.hand_shower_holder:\r\n arrayToDisable = [this.handShowerKit];\r\n arrayToEnable = [this.handShowerHolder, this.handShowerOnly, this.showerHose];\r\n break;\r\n default:\r\n break;\r\n }\r\n arrayToDisable.forEach(featureGroup => {\r\n if (featureGroup && !featureGroup.disabled) {\r\n featureGroup.disabled = true;\r\n }\r\n });\r\n arrayToEnable.forEach(featureGroup => {\r\n if (featureGroup && featureGroup.disabled && featureGroup.canBeEnabled()) {\r\n featureGroup.disabled = false;\r\n }\r\n });\r\n\r\n }\r\n}\r\n\r\n","import * as types from \"./actionTypes\";\r\n\r\nexport const setGroheFiltersOpened = (filtersOpened = false) => ({\r\n type: types.SET_GROHE_FILTERS_OPENED,\r\n payload: {filtersOpened}\r\n});\r\n\r\nexport const setGroheSimilarFeature = (similarFeature = false) => ({\r\n type: types.SET_GROHE_SIMILAR_FEATURE,\r\n payload: {similarFeature}\r\n});\r\n\r\nexport const setGroheSimilarProductsOpened = (similarProductsOpened = false) => ({\r\n type: types.SET_GROHE_SIMILAR_PRODUCTS_OPENED,\r\n payload: {similarProductsOpened}\r\n});\r\n\r\nexport const setGroheRequiredButNotIncludedFeature = (requiredButNotIncludedFeature= false) => ({\r\n type: types.SET_GROHE_REQUIRED_BUT_NOT_INCLUDED_FEATURE,\r\n payload: {requiredButNotIncludedFeature}\r\n});\r\n\r\nexport const setGroheFiltersSearchText = (groheFiltersSearchText = \"\") => ({\r\n type: types.SET_GROHE_FILTERS_SEARCH_TEXT,\r\n payload: {groheFiltersSearchText}\r\n});\r\n\r\nexport const setLastOpenedCategory = (lastOpenedCategory = \"\") => ({\r\n type: types.SET_GROHE_LAST_OPENED_CATEGORY,\r\n payload: {lastOpenedCategory}\r\n});\r\n\r\nexport const setGroheSubCategoryOpened = (subCategoryOpened = \"\") => ({\r\n type: types.SET_GROHE_SUB_CATEGORY_OPENED,\r\n payload: {subCategoryOpened}\r\n});\r\n\r\nexport const setShowAddedToTheCartSuccess = (showAddedToTheCartSuccess = \"\") => ({\r\n type: types.SET_GROHE_SHOW_ADDED_TO_THE_CART_SUCCESS,\r\n payload: {showAddedToTheCartSuccess}\r\n});\r\n\r\nexport const setGroheActiveFeatureQuantity = (groheActiveFeatureQuantity = \"\") => ({\r\n type: types.SET_GROHE_ACTIVE_FEATURE_QUANTITY,\r\n payload: {groheActiveFeatureQuantity}\r\n});\r\n\r\nexport const setGroheShareButtonsOpened = (groheShareButtonsOpened = \"\") => ({\r\n type: types.SET_GROHE_SHARE_BUTTONS_OPENED,\r\n payload: {groheShareButtonsOpened}\r\n});\r\n\r\nexport const setGroheSameColorActiveFeature = (groheSameColorActiveFeature = \"\") => ({\r\n type: types.SET_GROHE_SAME_COLOR_ACTIVE_FEATURE,\r\n payload: {groheSameColorActiveFeature}\r\n});\r\n\r\nexport const setGroheSameColorSectionOpened = (groheSameColorSectionOpened = \"\") => ({\r\n type: types.SET_GROHE_SAME_COLOR_SECTION_OPENED,\r\n payload: {groheSameColorSectionOpened}\r\n});\r\n\r\nexport const setGroheSameColorCheckboxApplied = (groheSameColorCheckboxApplied = \"\") => ({\r\n type: types.SET_GROHE_SAME_COLOR_CHECKBOX_APPLIED,\r\n payload: {groheSameColorCheckboxApplied}\r\n});\r\n\r\nexport const setExisingTempId = (exisingTempId = \"\") => ({\r\n type: types.SET_GROHE_EXISTING_TEMP_ID,\r\n payload: {exisingTempId}\r\n});\r\n","import polygonClipping from \"polygon-clipping\";\r\nimport sqftEventManager from \"../../store/sqftEventManager\";\r\n// import triangle from \"./layouts/triangle\";\r\nimport Line from \"./line\";\r\nimport pnpoly, {pnpolyArray} from \"../../../../lib/pnpoly\";\r\n//import earcut from \"../../../../lib/earcut\";\r\nimport workspace from \"../workspace\";\r\n//import sqftStore from \"../../store/sqftStore\";\r\nimport sqftStore from \"../workspace\";\r\nimport sqftConfig from \"../../store/sqftConfig\";\r\nimport {\r\n getAreaByShoelaceFormula,\r\n getEdgeArea, getIntersectCordsBetweenLines, getPointDistance, getPointField,\r\n getSnappedPos,\r\n inchesToLNFT,\r\n mm2ToM2,\r\n orientation,\r\n rotatePoint,\r\n sqInchesToMM2,\r\n sqInchesToSqFoot\r\n} from \"../../../../helpers/sqftHelper\";\r\nimport {getAngle, getRotationCentrePoint} from \"./rotation\";\r\nimport ShapeHelper, {\r\n getAngleBetween3Points,\r\n getPointDirection\r\n} from \"../../../../helpers/shapeHelper\";\r\nimport $ from \"jquery\";\r\nimport clone from \"lodash/clone\";\r\nimport store from \"../../../../../../store\";\r\nimport {\r\n FEATURE_QUANTITY_UNITS,\r\n SHAPE_PART_ID, SHAPE_PART_IDS_USING_SAME_COLOR,\r\n SIDEBAR_SLAB_SEAM_BUTTONS, WORKSPACE_RESOURCES,\r\n} from \"../../../../constants\";\r\nimport ShapeSlab from \"./shapeParts/shapeSlab\";\r\nimport config from \"../../store/sqftConfig\";\r\nimport SlabWorkspace from \"../slab/slabWorkspace\";\r\nimport ShapeEditable from \"./shapeParts/shapeEditable\";\r\nimport {updateSQFTCalculations} from \"../../../../../../actions/sqftFunctions\";\r\nimport sqftShapeManager from \"../../store/sqftShapeManager\";\r\nimport SqftStore from \"../../store/sqftStore\";\r\nimport ShapeCabinet from \"./shapeParts/shapeCabinet\";\r\nimport ShapeAbsolute from \"./shapeParts/shapeAbsolute\";\r\nimport ShapeSpacer from \"./shapeParts/shapeSpacer\";\r\nimport {isSFTCabinetsGroup} from \"../../../../helpers/sqftNavigationHelper\";\r\nimport {getCurrentLayout} from \"../../../../../appLayout\";\r\nimport {\r\n getFeatureNameById,\r\n shouldChangeCabinetShapePartId\r\n} from \"../../../../helpers/featureHelper\";\r\nimport {\r\n addShapeIdWithMissingFeature,\r\n setShouldShowChangeShapeFeatureMissingMessage,\r\n} from \"../../../../../../actions/sqftMenuFunctions\";\r\nimport workspaceControllers from \"../../store/workspaceControllers\";\r\nimport sqftSlabManager from \"../../store/sqftSlabManager\";\r\nimport ShapeIntersections from \"./shapeParts/shapeIntersections\";\r\nimport ShapeMemory from \"./shapeParts/shapeMemory\";\r\nimport ShapeRender from \"./shapeParts/shapeRender\";\r\nimport {SHAPE_PART_IDS_VISIBLE_ONLY_IN_THE_SLAB_MODE} from \"../../../../constantsFeature\";\r\nimport CabinetSwitchers from \"../../../../../kvComponent/navigation/cabinetSwitchers\";\r\nimport ShapeAutoShuffle from \"./shapeParts/shapeAutoShuffle\";\r\nimport {getLinesWithoutAnglePoints} from \"../../helpers/lineHelper\";\r\nimport {SHAPE_DIAMOND_LAYOUTS} from \"../cabinet/cabinetShapes\";\r\nimport {getCabinetSimilarFeatureFromAnotherColor} from \"../../../../helpers/sqft3dArHelper\";\r\nimport {calculatePolygonClippingPolygonArea} from \"../../../../helpers/coordinatesHelper\";\r\n\r\nexport default function(id, totalShapeCount, shapeType, partId, fromLayout, shapeParams = {}) {\r\n //private variables\r\n let self = this,\r\n shape = null,\r\n // debugLineColor = \"rgba(0,255,0,0.3)\",\r\n // debugPointColor = \"rgba(0,0,255,0.3)\",\r\n // fillColor = \"rgba(255,255,255,0)\",\r\n minAngle = -90,\r\n maxAngle = 90,\r\n marginFromShape = SqftStore.isSlabMode() || isSFTCabinetsGroup() ? 0 : 30,\r\n state = {\r\n mouseDown: false,\r\n mouseDownPosition: null,\r\n hovering: false,\r\n handlerHold: null,\r\n isPointsMovable: false,\r\n isRotatable: false,//true //todo enable on menu click\r\n };\r\n this.design = {\r\n hoverShapeColor: \"rgba(159,197,34,0.47)\",\r\n redHoverShapeColor: \"rgba(208,1,27,0.5)\",\r\n fillColor: \"rgba(74,144,226,0.17)\",\r\n }\r\n this.layout270 = [\"SN\", \"SPN\", \"SNI\", \"SPNI\"];\r\n this.shapeParams = shapeParams; //{shapeCabinet: boolean, canSnap: boolean, isSpacer: boolean}\r\n //public properties\r\n this.pos = {\r\n x: 0,\r\n y: 0\r\n };\r\n this.slabPos = {\r\n x: 0,\r\n y: 0\r\n };\r\n this.staticCenterPoint = null;\r\n this.testShapeLines = null;\r\n this.linesWithoutAngle = null;\r\n this.shapeSlab = new ShapeSlab(this);\r\n this.shapeCabinet = shapeParams.shapeCabinet ? new ShapeCabinet(this) : null;\r\n //this.shapeAbsolute = shapeParams.canSnap ? new ShapeAbsolute(this) : null;\r\n this.shapeAbsolute = new ShapeAbsolute(this);\r\n this.shapeSpacer = shapeParams.isSpacer ? new ShapeSpacer(this) : null;\r\n this.shapeEditable = new ShapeEditable(this);\r\n this.shapeIntersections = new ShapeIntersections(this);\r\n this.shapeAutoShuffle = new ShapeAutoShuffle(this);\r\n this.shapeMemory = new ShapeMemory(this);\r\n this.shapeRender = new ShapeRender(this);\r\n this.shapeRotatable = null; //new ShapeRotatable(this, fillColor);\r\n this.colorSet = null; //new ColorSet\r\n this.shapePieces = []; // seam parts shape ids (see seam tool)\r\n this.seamCutPoints = [];\r\n this.shapeParent = null;\r\n this.slabModeCoreParentId = null; // shape id (additional backsplash shape parent shape id in the slab mode. See SlabAdditionalShapes)\r\n this.id = id;\r\n this.featureId = null;\r\n this.featureName = null;\r\n this.relatedParentFeatureId = null;\r\n this.shapeType = shapeType;\r\n this.isContextMenuActive = false;\r\n this.labelsMenu = null;\r\n this.partId = partId;\r\n this.parentPartId = null; // this is shape part id that shape was created from. Used for spacer shapes\r\n this.slabParentPartId = null; // this is the shape partId that is hovered the slab. Used for slabs. Or shape part id that shape was created from in the slab mode.\r\n this.qtCatName = null;\r\n this.fromLayout = fromLayout; // layout abbreviation (S, LNI, etc.) is needed to know if to show popup\r\n this.rotatedDegrees = 0;\r\n this.rotatedDegreesSlab = 0;\r\n this.isHidden = false;\r\n this.isPointsMoved = false; // true if any shape points was moved\r\n this.isPointsChanged = true; // used to trigger update points position for the slabMode\r\n this.isPositionChanged = true; // used to trigger update slabPosition for the slabMode\r\n this.isResetSlabModePopupWasDisplayed = false; //used to display reset popup window if shape has pieces\r\n this.Direction = {\r\n RIGHT: 0,\r\n LEFT: 1\r\n };\r\n this.FlipDirection = {\r\n HORIZONTAL: 0,\r\n VERTICAL: 1\r\n };\r\n this.rotateAngleParts = getAngleRotatedParts(shapeType);\r\n this.isDisabledInPopup = false;\r\n this.slabModeWaterfallSegmentId = null;\r\n this.shouldUseSlabPricing = false;\r\n this.originalPointsCoords = false;\r\n\r\n this.getState = () => { return state };\r\n this.getFillColor = () => { return this.design.fillColor };\r\n this.getDesign = () => { return this.design };\r\n this.getColorset = () => { return this.colorSet };\r\n this.getIsPointsMovable = () => { return state.isPointsMovable };\r\n this.setType = (type) => { self.type = type };\r\n this.setProperty = (name, value) => { self[name] = value };\r\n this.setId = (id) => { this.id = id };\r\n this.setPartId = (partId) => {self.partId = partId};\r\n this.getFeatureName = () => { return this.featureName};\r\n this.setFeatureId = (featureId) => {\r\n //console.log(\"cur featureId\", this.featureId);\r\n //console.log(\"new featureId\", featureId);\r\n this.featureId = featureId\r\n this.featureName = getFeatureNameById(featureId);\r\n const isShapeUseTheSameFeatureColor = Object.values(SHAPE_PART_IDS_USING_SAME_COLOR).includes(this.partId);\r\n const isSeamPiece = this.partId === SHAPE_PART_ID.seamPiece;\r\n if (isShapeUseTheSameFeatureColor || isSeamPiece) {\r\n this.updateColorSet();\r\n this.updateRelatedShapes();\r\n this.updateSeamShapes();\r\n }\r\n };\r\n this.setSlabParentPartId = (partId) => { this.slabParentPartId = partId }; // here we will assign shape part id that is hovered the slab\r\n this.setSlabModeCoreParentPartId = (partId) => { this.slabParentPartId = partId }; // here we will assign core shape part id\r\n this.setSlabModeCoreParentId = (id) => { this.slabModeCoreParentId = id };\r\n this.setSlabModeWaterfallSegmentId = (id) => {this.slabModeWaterfallSegmentId = id};\r\n this.setColorSet = (colorSet) => {this.colorSet = colorSet};\r\n this.getColorSet = () => { return this.colorSet};\r\n this.updateColorSet = () => {\r\n this.colorSet = workspaceControllers[WORKSPACE_RESOURCES.shapeColors]\r\n .getOrGenerateNewShapeColorByFeatureId(this.featureId);\r\n };\r\n this.updateRelatedShapes = () => {\r\n const relatedShapes = workspace.getShapesBySlabModeCoreParentId([this.id]);\r\n for (const relatedShape of relatedShapes) {\r\n relatedShape.setFeatureId(this.featureId);\r\n relatedShape.setColorSet(this.colorSet);\r\n }\r\n };\r\n this.updateSeamShapes = () => {\r\n this.shapePieces.forEach(shapePieceId => {\r\n let shapePiece = workspace.getShapeById(shapePieceId);\r\n shapePiece.setFeatureId(this.featureId);\r\n shapePiece.setColorSet(this.colorSet);\r\n });\r\n };\r\n this.updateSeamedShapesPosition = () => {\r\n this.shapePieces.forEach(shapePieceId => {\r\n let shapePiece = workspace.getShapeById(shapePieceId);\r\n shapePiece.setPositionWithoutChange(this.pos);\r\n });\r\n };\r\n this.setQtCatName = (qtCatName) => {this.qtCatName = qtCatName};\r\n this.setIsPointsChanged = (isPointsChanged) => {this.isPointsChanged = isPointsChanged};\r\n this.addCrownMolding = () => {\r\n this.shapeCabinet ? this.shapeCabinet.addCrownMolding() : null;\r\n }\r\n this.setQtCatName = (qtCatName) => { this.qtCatName = qtCatName };\r\n this.getIsRotatable = () => { return state.isRotatable };\r\n this.setIsRotatable = (isRotatable) => { state.isRotatable = isRotatable };\r\n this.setIsPointsMovable = (isPointsMovable) => { state.isPointsMovable = isPointsMovable };\r\n this.setSlabPricing = (value) => { this.shouldUseSlabPricing = value };\r\n\r\n /**\r\n * this will return size for square and rectangles in INCHES\r\n * todo maybe we need to change this and return values in mmm and inches\r\n * @return {{width: *, height: *}}\r\n */\r\n this.getSize = () => {\r\n return {\r\n width: getPointDistance(shape[0].from, shape[0].to),\r\n height: getPointDistance(shape[1].from, shape[1].to),\r\n }\r\n }\r\n this.resetMouseDown = () => {\r\n state.mouseDown = false;\r\n state.mouseDownPosition = null;\r\n }\r\n // this.getWidth = () => {\r\n // return this.getSize().width\r\n // }\r\n /**\r\n * @param isFromParams this is static initial value\r\n * @return {*}\r\n */\r\n this.getWidth = (isFromParams = false) => {\r\n if (isFromParams) {\r\n return this.shapeParams.width\r\n }\r\n const thisShapeMeasurementPoints = sqftShapeManager.getMinMaxShapesPointsOnWorkspace([this]);\r\n return getPointDistance(thisShapeMeasurementPoints[0], thisShapeMeasurementPoints[1]);\r\n }\r\n this.getHeight = (isFromParams = false) => {\r\n if (isFromParams) {\r\n return this.shapeParams.height\r\n }\r\n const thisShapeMeasurementPoints = sqftShapeManager.getMinMaxShapesPointsOnWorkspace([this]);\r\n return getPointDistance(thisShapeMeasurementPoints[1], thisShapeMeasurementPoints[2]);\r\n }\r\n this.getDepth = (isFromParams = false) => {\r\n if (isFromParams) {\r\n return this.shapeParams.depth\r\n }\r\n }\r\n\r\n //public events\r\n this.onHover = null;\r\n\r\n //private setters\r\n function getAngleRotatedParts(shapeType) {\r\n switch (shapeType) {\r\n case \"horseshoe\":\r\n return [{ // this is the right part: |‾| <- this one\r\n rotatedAngleValue: 0, // angle input value\r\n line1: 1, // right external side\r\n line2: 3, // right internal side\r\n baseConfiguration: null, // is used for keeping all the configuration after rotateAngle is over\r\n isHovered: false, // user has mouse over this part\r\n isActive: false, // user has clicked on this part\r\n isPulsing: true, // user has select angle tool\r\n shapeType, // is needed for onChange, different parts have different point changes\r\n angleDirection: \"right\" // rotate direction (is used for lines, line text, etc.)\r\n }, { // this is the left part: this one -> |‾|\r\n rotatedAngleValue: 0, // angle input value\r\n line1: 7, // left external side\r\n line2: 5, // left internal side\r\n baseConfiguration: 0, // difference between basePointX and secondaryPointX\r\n isHovered: false, // user has mouse over this part\r\n isActive: false, // user has clicked on this part\r\n isPulsing: true, // user has select angle tool\r\n shapeType, // is needed for onChange, different parts have different point changes\r\n angleDirection: \"left\" // rotate direction (is used for lines, line text, etc.)\r\n }];\r\n case \"wideangle\":\r\n return [{ // this is the top part: |‾ <- this one\r\n rotatedAngleValue: 0, // angle input value\r\n line1: 0, // top external side\r\n line2: 2, // top internal side\r\n baseConfiguration: null, // is used for keeping all the configuration after rotateAngle is over\r\n isHovered: false, // user has mouse over this part\r\n isActive: false, // user has clicked on this part\r\n shapeType, // is needed for onChange, different parts have different point changes\r\n angleDirection: \"right\" // rotate direction (is used for lines, line text, etc.)\r\n }, { // this is the left part: this one -> |‾\r\n rotatedAngleValue: 0, // angle input value\r\n line1: 5, // left external side\r\n line2: 3, // left internal side\r\n baseConfiguration: 0, // difference between basePointX and secondaryPointX\r\n isHovered: false, // user has mouse over this part\r\n isActive: false, // user has clicked on this part\r\n shapeType, // is needed for onChange, different parts have different point changes\r\n angleDirection: \"left\" // rotate direction (is used for lines, line text, etc.)\r\n }];\r\n default:\r\n return []\r\n }\r\n }\r\n\r\n const setFillColor = (red, green, blue, alpha) => {\r\n this.design.fillColor =\r\n \"rgba(\" + red + \", \" + green + \", \" + blue + \", \" + alpha + \")\";\r\n }\r\n\r\n this.setPosition = (value) => {\r\n this.pos = value;\r\n this.isPositionChanged = true;\r\n this.updateSeamedShapesPosition();\r\n }\r\n this.setPositionWithoutChange = (value) => {\r\n this.pos = value;\r\n this.updateSeamedShapesPosition();\r\n // if (this.partId !== SHAPE_PART_ID.backsplashPiece && this.partId !== SHAPE_PART_ID.seamPiece) {\r\n // this.isPositionChanged = true;\r\n // }\r\n }\r\n this.setSlabPosition = (value) => {\r\n this.slabPos = clone(value);\r\n }\r\n function setShape(segments) {\r\n shape = segments; // [line, line, line, line]\r\n for (var i = 0; i < shape.length; i++) {\r\n shape[i].init(self);\r\n }\r\n }\r\n function setHovering(value) { state.hovering = value; return value; }\r\n function setHoveringOnlyShape(value) { state.hoveringOnlyShape = value; return value; }\r\n //public getters\r\n this.getPosition = () => {\r\n const reduxState = store.getState();\r\n const isShowSlabTool = reduxState.sqftSlabState.isShowSlabTool;\r\n let pos;\r\n\r\n if (isShowSlabTool) {\r\n let slabAbsolutePos = this.getSlabAbsolutePosition()\r\n pos = slabAbsolutePos ? slabAbsolutePos : this.slabPos;\r\n } else if (this.shapeParams !== undefined && this.shapeParams.canSnap) {\r\n let absolutePos = this.shapeAbsolute.getAbsolutePosition();\r\n pos = absolutePos !== null ? absolutePos : this.pos;\r\n } else {\r\n pos = this.pos\r\n }\r\n\r\n return pos;\r\n };\r\n this.getOffset = () => {\r\n const scale = config.scale;\r\n const workspacePos = workspace.getOffset();\r\n let _pos = this.getPosition();\r\n if (config.workspace.snapToGrid) {\r\n _pos = this.getSnappedPosition();\r\n }\r\n return {\r\n x: workspacePos.x + (_pos.x * scale),\r\n y: workspacePos.y + (_pos.y * scale)\r\n }\r\n };\r\n this.getRegularPosition = () => { return this.pos; };\r\n this.getSlabPosition = () => { return this.slabPos; };\r\n this.getSlabAbsolutePosition = () => { return this.shapeSlab.getAbsolutePosition(); };\r\n this.getSnappedPosition = () => { return getSnappedPos(this.getPosition()) };\r\n //todo\r\n this.isHovering = function() {\r\n const isSlabMode = SqftStore.isSlabMode();\r\n if (!isSlabMode) {\r\n for (const line of this.getLines()) {\r\n if (line.isHovering(isSlabMode)) {\r\n return true\r\n }\r\n }\r\n }\r\n return state.hovering === true;\r\n };\r\n this.isHoveringOnlyShape = function() { return state.hoveringOnlyShape === true; };\r\n this.isWithShapePieces = () => {\r\n return this.shapePieces.length > 0;\r\n };\r\n this.setResetSlabModePopupWasDisplayed = (value) => {\r\n return this.isResetSlabModePopupWasDisplayed = value;\r\n };\r\n this.getResetSlabModePopupWasDisplayed = () => {\r\n return this.isResetSlabModePopupWasDisplayed;\r\n };\r\n this.setShapePieces = (shapePieces) => {\r\n this.shapePieces = shapePieces;\r\n };\r\n this.addShapePieceId = (shapeId) => {\r\n this.shapePieces.push(shapeId);\r\n };\r\n this.hideShapePieces = () => {\r\n this.shapePieces.forEach(shapePieceId => {\r\n let shapePiece = workspace.getShapeById(shapePieceId);\r\n if (shapePiece) {\r\n shapePiece.deregisterEvents()\r\n } else {\r\n console.error(\"shapePiece with Id not found\", shapePieceId);\r\n }\r\n });\r\n };\r\n this.restoreShapePieces = () => {\r\n this.shapePieces.forEach(shapePieceId => {\r\n let shapePiece = workspace.getShapeById(shapePieceId);\r\n shapePiece.reInitEvents();\r\n });\r\n };\r\n this.removeShapePieces = () => {\r\n this.shapePieces.forEach(shapePieceId => {\r\n workspace.removeShapeById(shapePieceId);\r\n });\r\n };\r\n\r\n this.export = () => {\r\n let lines = [];\r\n let totalArea = this.getTotalArea();\r\n let squareFeet = sqftConfig.measureUnit === \"Imperial\" ? Math.ceil10(sqInchesToSqFoot(totalArea), -2) : mm2ToM2(self.getTotalArea(totalArea));\r\n for (let i = 0; i < shape.length; i++) {\r\n lines.push(shape[i].export());\r\n }\r\n let isHidden = [SHAPE_PART_ID.seamPiece, SHAPE_PART_ID.slabPlaceHolder].includes(this.partId);\r\n let isQuantityUnits = FEATURE_QUANTITY_UNITS.includes(this.partId);\r\n\r\n return {\r\n pos: this.pos,\r\n slabPos: this.slabPos,\r\n id: this.id,\r\n featureId: this.featureId,\r\n colorSet: this.colorSet,\r\n type: this.type,\r\n isHidden: isHidden,\r\n shapePieces: this.shapePieces,\r\n seamCutPoints: this.seamCutPoints,\r\n shapeParent: this.shapeParent,\r\n lines: lines,\r\n shapeType: this.shapeType,\r\n rotatedDegrees: this.rotatedDegrees,\r\n rotatedDegreesSlab: this.rotatedDegreesSlab,\r\n partId: this.partId,\r\n qtCatName: this.qtCatName,\r\n fromLayout: this.fromLayout,\r\n squareFeet: isQuantityUnits ? 1 : squareFeet,\r\n isDisabledInPopup: this.isDisabledInPopup,\r\n rotateAngleParts: this.rotateAngleParts,\r\n isPointsChanged: this.isPointsChanged,\r\n isPositionChanged: this.isPositionChanged,\r\n isResetSlabModePopupWasDisplayed: this.isResetSlabModePopupWasDisplayed,\r\n shapeSlab: this.shapeSlab.export(),\r\n shapeCabinet: this.shapeCabinet ? this.shapeCabinet.export() : null,\r\n shapeAbsolute: this.shapeAbsolute ? this.shapeAbsolute.export() : null,\r\n shapeParams: this.shapeParams,\r\n relatedParentFeatureId: this.relatedParentFeatureId,\r\n fromWizardGroupId: this.fromWizardGroupId,\r\n slabModeCoreParentId: this.slabModeCoreParentId,\r\n parentPartId: this.parentPartId,\r\n slabParentPartId: this.slabParentPartId,\r\n shouldUseSlabPricing: this.shouldUseSlabPricing,\r\n originalPointsCoords: this.originalPointsCoords,\r\n };\r\n };\r\n this.import = (value) => {\r\n [\"fromLayout\", \"id\", \"partId\", \"shapeType\", \"rotatedDegrees\", \"rotatedDegreesSlab\", \"rotateAngleParts\", \"fromLayout\",\r\n \"type\", \"isHidden\", \"shapePieces\", \"pos\", \"slabPos\", \"featureId\", \"isDisabledInPopup\", \"isPointsChanged\",\r\n \"isPositionChanged\", \"qtCatName\", \"isResetSlabModePopupWasDisplayed\", \"shapeParams\", \"shapeCabinet\", \"shapeAbsolute\",\r\n \"relatedParentFeatureId\", \"colorSet\", \"fromWizardGroupId\", \"slabModeCoreParentId\", \"seamCutPoints\", \"parentPartId\",\r\n \"slabParentPartId\", \"shouldUseSlabPricing\", \"originalPointsCoords\"]\r\n .forEach(key => {\r\n self[key] = value[key]\r\n });\r\n let lines = [];\r\n for (let i = 0; i < value.lines.length; i++) {\r\n let line = new Line();\r\n line.import(value.lines[i], lines);\r\n lines.push(line);\r\n }\r\n shape = lines;\r\n for (let i = 0; i < shape.length; i++) {\r\n shape[i].init(self);\r\n }\r\n this.init();\r\n this.shapeSlab.import(value.shapeSlab);\r\n if (value.shapeCabinet) {\r\n this.shapeCabinet = new ShapeCabinet(this);\r\n this.shapeCabinet.import(value.shapeCabinet);\r\n }\r\n if (value.shapeAbsolute) {\r\n this.shapeAbsolute = new ShapeAbsolute(this);\r\n this.shapeAbsolute.import(value.shapeAbsolute);\r\n }\r\n if ([SHAPE_PART_ID.slabPlaceHolder, SHAPE_PART_ID.seamPiece].includes(value.partId)) {\r\n this.deregisterEvents();\r\n }\r\n if (isSFTCabinetsGroup) {\r\n const reduxState = store.getState();\r\n const {sqftFromFeature} = reduxState.sqftState;\r\n if (sqftFromFeature && sqftFromFeature.cartFeature) {\r\n //this.changeFeatureIdIfColorWasChanged(sqftFromFeature.cartFeature);\r\n }\r\n }\r\n if (this.shapeParams.isSpacer) {\r\n this.shapeSpacer = new ShapeSpacer(this);\r\n }\r\n };\r\n this.changeFeatureIdIfColorWasChanged = (newFeature= null) => {\r\n const layout = getCurrentLayout();\r\n const relatedParentFeature = layout.getFeatureById(this.relatedParentFeatureId, true);\r\n const currentShapeFeature = layout.getFeatureById(this.featureId, true);\r\n const shouldChangeShapePartId = shouldChangeCabinetShapePartId(relatedParentFeature, newFeature);\r\n if (shouldChangeShapePartId && newFeature.dbFeature && currentShapeFeature) {\r\n const newParent = CabinetSwitchers.getNeededFeatureFromNavItems(newFeature.dbFeature.sharedFeatureName, relatedParentFeature.getParent())\r\n\r\n if (newParent && newParent.dbFeature) {\r\n const featureRelatedFeatures = newParent.getFeatureRelatedFeatures();\r\n const newShapeDbFeature = getCabinetSimilarFeatureFromAnotherColor(featureRelatedFeatures, currentShapeFeature.dbFeature);\r\n\r\n if (newShapeDbFeature) {\r\n //if (newShapeDbFeature && newShapeDbFeature.sharedFeatureName !== 'SW-WBC3630') { // this line is only for debugging\r\n this.relatedParentFeatureId = newParent.dbFeature.id\r\n this.setFeatureId(newShapeDbFeature.id)\r\n } else {\r\n store.dispatch(addShapeIdWithMissingFeature(this.id));\r\n store.dispatch(setShouldShowChangeShapeFeatureMissingMessage(true));\r\n }\r\n }\r\n }\r\n\r\n return this;\r\n }\r\n this.getHoverSegment = function() {\r\n for (let i = 0; i < shape.length; i++) {\r\n if (shape[i].isHovering()) {\r\n return shape[i];\r\n }\r\n }\r\n };\r\n this.getHoverSegmentV2 = () => {\r\n for (let i = 0; i < shape.length; i++) {\r\n shape[i].updateLineHovering(sqftEventManager.getMousePos())\r\n if (shape[i].isHovering()) {\r\n return shape[i];\r\n }\r\n }\r\n };\r\n this.getHoverSegmentOutlineCorner = function() {\r\n for (let i = 0; i < shape.length; i++) {\r\n if (shape[i].isAngleHovering()) {\r\n return shape[i].lineCorner;\r\n }\r\n }\r\n };\r\n this.getHoverSegmentCorner = function() {\r\n for (let i = 0; i < shape.length; i++) {\r\n if (shape[i].isCornerLineHovering()) {\r\n return shape[i].lineCorner;\r\n }\r\n }\r\n };\r\n this.getHoverPoint = function() {\r\n for (var i = 0; i < shape.length; i++) {\r\n if (shape[i].to.isHovering()) {\r\n return shape[i].to;\r\n }\r\n }\r\n };\r\n this.getHoverMiteredPoint = function() {\r\n for (let i = 0; i < shape.length; i++) {\r\n if (shape[i].isWithMitered()) {\r\n for (let point of shape[i].miteredOverlay.getPoints()) {\r\n if (point.isHovering()) {\r\n return point;\r\n }\r\n }\r\n }\r\n }\r\n };\r\n this.getHoverLabel = () => {\r\n for (let i = 0; i < shape.length; i++) {\r\n if (shape[i].labelOverlay && shape[i].labelOverlay.isHovered()) {\r\n return shape[i].labelOverlay\r\n }\r\n }\r\n };\r\n this.getHoverPointOnClick = function() {\r\n for (var i = 0; i < shape.length; i++) {\r\n if (shape[i].to.isOverPointField()) {\r\n return shape[i].to;\r\n }\r\n }\r\n };\r\n this.getCenter = () => {\r\n if (!this.staticCenterPoint) {\r\n let points = this.getPoints();\r\n\r\n this.staticCenterPoint = ShapeHelper.getCenterPoint(points);\r\n }\r\n return this.staticCenterPoint;\r\n }\r\n /**\r\n * Note changing this value can break display in slabMode\r\n * @param value\r\n */\r\n this.setCenter = (value) => {\r\n this.staticCenterPoint = value;\r\n }\r\n this.getLines = (shouldIncludeBumpoutLines = false) => {\r\n if (shouldIncludeBumpoutLines) {\r\n const linesWithBumpouts = [];\r\n shape.forEach(line => {\r\n if (line.isWithBumpout()) {\r\n linesWithBumpouts.push(...line.bumpoutOverlay.getBumpoutLines())\r\n } else {\r\n linesWithBumpouts.push(line);\r\n }\r\n });\r\n return linesWithBumpouts\r\n }\r\n\r\n return shape;\r\n };\r\n this.createLinesWithoutAngle = () => {\r\n this.linesWithoutAngle = getLinesWithoutAnglePoints(this.getLines());\r\n return this.linesWithoutAngle\r\n }\r\n this.getLinesWithoutAngle = () => {\r\n return this.linesWithoutAngle\r\n }\r\n this.getLineCorners = function() {\r\n const lineCorners = [];\r\n shape.forEach(line => {\r\n if (line.lineCorner !== undefined)\r\n lineCorners.push(line.lineCorner)\r\n });\r\n return lineCorners\r\n };\r\n this.getPoints = () => {\r\n return this.getLines().map(line => line.from);\r\n };\r\n this.getPointsCoords = () => {\r\n return this.getLines().map(line => { return {\r\n x: Math.round10(line.from.x, -4),\r\n y: Math.round10(line.from.y, -4),\r\n id: line.from.id\r\n }});\r\n };\r\n this.setOriginalPointsCoords = (value) => {\r\n this.originalPointsCoords = value;\r\n };\r\n this.getOriginalPointsCoords = () => {\r\n return this.originalPointsCoords;\r\n };\r\n this.getPointsPosOnWorkspace = (shouldGetRegularPosition = false) => {\r\n return this.getLines().map(line => { return {...line.from.getPointPosOnWorkspace(shouldGetRegularPosition), id: line.from.id}});\r\n };\r\n this.getPointsPointField = () => {\r\n return this.getLines().map(line => { return {...getPointField(line.from.x, line.from.y, this), id: line.from.id}});\r\n };\r\n this.getOriginPointOnWorkspace = () => {\r\n // if (shape.shapeParams && shape.shapeParams.shapeLayout !== SHAPE_LAYOUTS.rectangle) {\r\n // let realShapeDepth = shapeDepth;\r\n // if (shape.shapeParams && SHAPE_SQUARE_LAYOUTS.includes(shape.shapeParams.shapeLayout)) {\r\n // realShapeDepth = shapeWidth;\r\n // }\r\n // zeroPointPosOnWorkspace = CabinetsSet.getShapeCorrectedPos(shape.rotatedDegrees, shapePosition, shapeWidth, realShapeDepth);\r\n // }\r\n\r\n // Here we will return intersection between first and last lines\r\n if (this.shapeParams && SHAPE_DIAMOND_LAYOUTS.includes(this.shapeParams.shapeLayout)) {\r\n const pointsOnWorkspace = this.getPointsPosOnWorkspace();\r\n return getIntersectCordsBetweenLines(pointsOnWorkspace[1], pointsOnWorkspace[0], pointsOnWorkspace[pointsOnWorkspace.length - 2], pointsOnWorkspace[pointsOnWorkspace.length - 1], true ,true);\r\n }\r\n\r\n return this.getPoints()[0].getPointPosOnWorkspace();\r\n }\r\n this.getLineById = function(id) {\r\n return this.getLines().find((line) => line.id === id);\r\n };\r\n this.getTotalArea = () => {\r\n let totalArea,\r\n anglesTotalArea;\r\n\r\n //shape area\r\n totalArea = sqftConfig.measureUnit === \"Imperial\" ? this.getTotalInches() : this.getTotalMillimeters();\r\n //shape corners area\r\n totalArea += sqftConfig.measureUnit === \"Imperial\" ? this.getCornersArea() : sqInchesToMM2(this.getCornersArea());\r\n\r\n //console.log(\"countertop\", totalArea);\r\n //additional bumpout area\r\n totalArea += this.getBumpoutTotalArea();\r\n\r\n //additional angles area\r\n anglesTotalArea = this.getAnglesTotalArea();\r\n totalArea += sqftConfig.measureUnit === \"Imperial\" ? anglesTotalArea : sqInchesToMM2(anglesTotalArea);\r\n\r\n //additional edges waterfall area\r\n totalArea += this.getEdgesAdditionalArea();\r\n //console.log(\"edges\", this.getEdgesAdditionalArea());\r\n //additional edges waterfall area\r\n totalArea += this.getWaterfallToolAdditionalArea();\r\n\r\n //additional mitered area\r\n totalArea += this.getMiteredTotalArea();\r\n\r\n //console.log(\"mitered\", this.getMiteredTotalArea());\r\n //console.log(\"total\", totalArea);\r\n\r\n return totalArea;\r\n };\r\n\r\n this.getCornersArea = () => {\r\n const points = this.getPoints();\r\n let cornersAdditionalArea = 0;\r\n\r\n function getRectangle(basePoint1, basePoint2, width) {\r\n const direction = {\r\n x: basePoint2.x - basePoint1.x,\r\n y: basePoint2.y - basePoint1.y,\r\n };\r\n\r\n const length = Math.sqrt(direction.x ** 2 + direction.y ** 2);\r\n const norm = {\r\n x: -direction.y / length,\r\n y: direction.x / length,\r\n };\r\n\r\n const rect = [\r\n [basePoint1.x + norm.x * width / 2, basePoint1.y + norm.y * width / 2],\r\n [basePoint1.x - norm.x * width / 2, basePoint1.y - norm.y * width / 2],\r\n [basePoint2.x - norm.x * width / 2, basePoint2.y - norm.y * width / 2],\r\n [basePoint2.x + norm.x * width / 2, basePoint2.y + norm.y * width / 2],\r\n [basePoint1.x + norm.x * width / 2, basePoint1.y + norm.y * width / 2],\r\n ];\r\n\r\n return [rect];\r\n }\r\n\r\n for (let i = 0; i < points.length; i++) {\r\n const prev = points[(i - 1 + points.length) % points.length];\r\n const current = points[i];\r\n const next = points[(i + 1) % points.length];\r\n\r\n const angle = getAngleBetween3Points(prev, current, next); // Угол между точками\r\n //const distancePrev = getPointDistance(prev, current); // Длина стороны (base)\r\n //const distanceNext = getPointDistance(current, next); // Длина другой стороны\r\n\r\n if (Math.round(angle) !== 0 && (Math.round(angle) > 92 || Math.round(angle) < 88)) {\r\n const RECT_WIDTH = 52; //todo get shape width\r\n //console.log(\"distancePrev\", distancePrev);\r\n //console.log(\"distanceNext\", distanceNext);\r\n const rect1 = getRectangle(prev, current, RECT_WIDTH);\r\n const rect2 = getRectangle(current, next, RECT_WIDTH);\r\n\r\n const intersection = polygonClipping.intersection([rect1], [rect2]);\r\n\r\n if (intersection && intersection.length > 0) {\r\n let totalArea = 0;\r\n intersection.forEach((polygon) => {\r\n totalArea += calculatePolygonClippingPolygonArea(polygon);\r\n });\r\n\r\n cornersAdditionalArea += totalArea;\r\n console.log(\"Area of intersection:\", totalArea);\r\n } else {\r\n console.log(\"No intersection found\");\r\n }\r\n }\r\n }\r\n\r\n return cornersAdditionalArea;\r\n };\r\n\r\n this.getTotalLnft = function() {\r\n return Math.ceil(inchesToLNFT(this.getTotalArea())) ;\r\n };\r\n\r\n this.getAttachedEdges = function() {\r\n const reduxState = store.getState();\r\n return reduxState.sqftResourceState.attachedToLine.filter(attachedToLine => {\r\n return shape.some(line => attachedToLine.attachedToId === line.id)\r\n });\r\n };\r\n\r\n this.getWaterfallToolAdditionalArea = () => {\r\n let totalArea = 0;\r\n const lines = this.getLines();\r\n lines.forEach(line => {\r\n if (line.isWithWaterfallToolEdge && (line.isWithWaterfallToolEdge() || line.isWithPeninsulaUnderwrapEdge())) {\r\n const waterfallOverlay = workspaceControllers.waterfall.getResourceByLineId(line.id);\r\n if (waterfallOverlay) {\r\n totalArea += waterfallOverlay.getArea();\r\n }\r\n }\r\n });\r\n\r\n return totalArea\r\n }\r\n\r\n this.getEdgesAdditionalArea = () => {\r\n let totalArea = 0;\r\n //let edges = sqftStore.getShapeType('edge');\r\n const edges = this.getAttachedEdges();\r\n edges.forEach(edge => {\r\n const line = workspace.getLineById(edge.attachedToId);\r\n const lineLength = config.measureUnit === \"Imperial\" ? line.getLineLength() : line.getLineLengthMm();\r\n totalArea += getEdgeArea(line, lineLength, edge.featureId);\r\n });\r\n\r\n return totalArea;\r\n };\r\n\r\n this.getAnglesTotalArea = () => {\r\n let totalArea = 0;\r\n let innerPoints = ShapeHelper.getInnerCornerPoints(this);\r\n innerPoints.forEach(point => {\r\n if (point.angle) {\r\n totalArea += (point.angle * point.angle / 2) * 2\r\n } else if (point.arcLength) {\r\n totalArea += (point.arcLength * point.arcLength / 2) * 2\r\n }\r\n });\r\n\r\n return totalArea\r\n };\r\n\r\n this.getBumpoutTotalArea = () => {\r\n let area = 0;\r\n shape.forEach((line) => {\r\n if (line.isWithBumpout() && line.bumpoutOverlay) {\r\n area += config.measureUnit === \"Imperial\"\r\n ? line.bumpoutOverlay.getBumpoutTotalArea().inches\r\n : line.bumpoutOverlay.getBumpoutTotalArea().millimeters;\r\n }\r\n });\r\n\r\n return area\r\n };\r\n\r\n this.getMiteredTotalArea = () => {\r\n let totalArea = 0;\r\n shape.forEach(line => {\r\n if (line.isWithMitered() && line.miteredOverlay) {\r\n totalArea += line.miteredOverlay.getMiteredTotalArea();\r\n }\r\n });\r\n\r\n return totalArea\r\n };\r\n\r\n this.getTotalInches = function() {\r\n var inchesCount = 0;\r\n // square1 = 0,\r\n // square2 = 0,\r\n // square3 = 0;\r\n // console.log('self.shapeType', self.shapeType);\r\n // console.log('shape', shape);\r\n // todo remove ifs\r\n if (self.shapeType === 'square') {\r\n // inchesCount = ((this.rotatedDegrees === 90) || (this.rotatedDegrees === 270))\r\n // ? shape[1].getLineLength() * shape[2].getLineLength()\r\n // : shape[0].getLineLength() * shape[1].getLineLength();\r\n\r\n inchesCount = this.getAreaByShoelaceFormula();\r\n } else if (self.shapeType === 'wideangle') {\r\n // square1 = (shape[0].getLineLength() - shape[4].getLineLength()) * shape[1].getLineLength();\r\n // square2 = shape[4].getLineLength() * shape[5].getLineLength();\r\n // inchesCount = square1 + square2\r\n\r\n inchesCount = this.getAreaByShoelaceFormula();\r\n } else if (self.shapeType === 'horseshoe') {\r\n // square1 = shape[4].getLineLength() * (shape[7].getLineLength() - shape[5].getLineLength());\r\n // square2 = shape[2].getLineLength() * shape[1].getLineLength();\r\n // square3 = shape[6].getLineLength() * shape[7].getLineLength();\r\n // inchesCount = square1 + square2 + square3\r\n inchesCount = this.getAreaByShoelaceFormula();\r\n } else {\r\n inchesCount = this.getAreaByShoelaceFormula();\r\n }\r\n\r\n return inchesCount;\r\n };\r\n\r\n this.getAreaByShoelaceFormula = function () {\r\n return getAreaByShoelaceFormula(shape);\r\n };\r\n\r\n this.isWithBumpout = function () {\r\n return shape.some((line) => {\r\n return line.isWithBumpout();\r\n });\r\n };\r\n\r\n this.isWithMitered = function () {\r\n return shape.some((line) => {\r\n return line.isWithMitered();\r\n });\r\n };\r\n\r\n this.getTotalMillimeters = function() {\r\n return sqInchesToMM2(this.getAreaByShoelaceFormula());\r\n };\r\n\r\n function getRotateAngleRectangle(rotateAnglePart) {\r\n //line 1\r\n const line1 = shape[rotateAnglePart.line1];\r\n let renderFrom = line1.calculateRenderPosition(line1.from);\r\n let renderTo = line1.calculateRenderPosition(line1.to);\r\n //line2\r\n const line2 = shape[rotateAnglePart.line2];\r\n let renderFrom2 = line2.calculateRenderPosition(line2.from);\r\n let renderTo2 = line2.calculateRenderPosition(line2.to);\r\n return [\r\n [renderFrom.x, renderFrom.y],\r\n [renderTo.x, renderTo.y],\r\n [renderFrom2.x, renderFrom2.y],\r\n [renderTo2.x, renderTo2.y],\r\n ]\r\n }\r\n\r\n var handleArrowInputIncrease = (isNegative, input, rotateAnglePart, basePoint, secondaryPoint, rotated90_1, rotated90_2, bottomLine) => {\r\n if (isNegative) {\r\n input.value = +input.value + 1;\r\n } else {\r\n input.value = +input.value - 1;\r\n }\r\n\r\n self.rotateAngleInputChange(input, rotateAnglePart, basePoint, secondaryPoint, rotated90_1, rotated90_2, bottomLine);\r\n };\r\n\r\n const moveShape = (mousePos) => {\r\n let scale = sqftStore.getScale();\r\n let xDiff = (state.mouseDownPosition.x - mousePos.x) / scale;\r\n let yDiff = (state.mouseDownPosition.y - mousePos.y) / scale;\r\n\r\n let isShowSlabTool = store.getState().sqftSlabState.isShowSlabTool;\r\n if (this.shapeParams.canSnap || isShowSlabTool) {\r\n const shapeAbsolute = isShowSlabTool ? this.shapeSlab.shapeAbsolute : this.shapeAbsolute;\r\n workspaceControllers.snappedShapeGroups.resetShapeSnappedGroup(shapeAbsolute);\r\n workspaceControllers.snappedShapeGroups.updateShapeSnappedGroup(this, true);\r\n }\r\n\r\n if (isShowSlabTool) {\r\n // this.shapeSlab.setAbsolutePos(null);//reset minLength for correct calculations without stacking\r\n // let distancesToShapes = ShapeHelper.getDistancesToShapes(this);\r\n // let distancesToImages = ShapeHelper.getDistancesToSlabImages(this);\r\n // //console.log(\"distancesToImages\", distancesToImages);\r\n //\r\n // snapPossibilitiesToShapes = ShapeHelper.getSnappingPossibilities(distancesToShapes);\r\n // snapPossibilitiesToImages = ShapeHelper.getSnappingPossibilities(distancesToImages);\r\n //\r\n // this.setAbsolutePosFromSnapPossibilities(snapPossibilitiesToShapes);\r\n // this.setAbsolutePosFromSnapPossibilities(snapPossibilitiesToImages);\r\n\r\n this.slabPos.x -= xDiff;\r\n this.slabPos.y -= yDiff;\r\n } else {\r\n // this.pos.x -= xDiff;\r\n // this.pos.y -= yDiff;\r\n this.setPosition({\r\n x: this.pos.x - xDiff,\r\n y: this.pos.y - yDiff,\r\n })\r\n }\r\n\r\n state.mouseDownPosition.x = mousePos.x;\r\n state.mouseDownPosition.y = mousePos.y;\r\n // console.log('self.pos', self.pos);\r\n };\r\n\r\n this.setAbsolutePosFromSnapPossibilities = (snapPossibilities) => {\r\n if (snapPossibilities.length > 0) {\r\n let scale = sqftStore.getScale();\r\n let absolutePos = {...this.slabPos};\r\n snapPossibilities.forEach((snap) => {\r\n switch (snap.orientation) {\r\n case \"horizontal\":\r\n absolutePos.y -= snap.diff / scale\r\n break;\r\n case \"vertical\":\r\n absolutePos.x -= snap.diff / scale\r\n break;\r\n }\r\n this.shapeSlab.setAbsolutePos(absolutePos)\r\n })\r\n }\r\n }\r\n\r\n const isMouseOverShape = (mousePos) => {\r\n const scale = sqftStore.getScale(),\r\n wp = sqftStore.getOffset(),\r\n pos = self.getPosition(),\r\n offset = {\r\n x: mousePos.x - (pos.x * scale) - wp.x,\r\n y: mousePos.y - (pos.y * scale) - wp.y\r\n },\r\n vertx = [],\r\n verty = [],\r\n vert2x = [],\r\n vert2y = [];\r\n\r\n for (var i = 0; i < shape.length; i++) {\r\n const isSlabMode = SqftStore.isSlabMode();\r\n if (shape[i].isHovering(isSlabMode) && !isSlabMode //exclude hovering lines in the slab mode\r\n || shape[i].isAngleHovering()\r\n || shape[i].isCornerLineHovering()\r\n ) {\r\n setHoveringOnlyShape(false);\r\n\r\n return setHovering(true);\r\n }\r\n var pointDirection = shape[i].from.getPointDirection();\r\n let pointFromX = shape[i].from.x\r\n let pointFromY = shape[i].from.y\r\n\r\n switch (pointDirection) {\r\n case \"lefttop\":\r\n vertx.push(pointFromX * scale - marginFromShape);\r\n verty.push(pointFromY * scale - marginFromShape);\r\n break;\r\n case \"righttop\":\r\n vertx.push(pointFromX * scale + marginFromShape);\r\n verty.push(pointFromY * scale - marginFromShape);\r\n break;\r\n case \"rightbottom\":\r\n vertx.push(pointFromX * scale + marginFromShape);\r\n verty.push(pointFromY * scale + marginFromShape);\r\n break;\r\n case \"leftbottom\":\r\n vertx.push(pointFromX * scale - marginFromShape);\r\n verty.push(pointFromY * scale + marginFromShape);\r\n break;\r\n default:\r\n vertx.push(pointFromX * scale);\r\n verty.push(pointFromY * scale);\r\n break;\r\n }\r\n vert2x.push(pointFromX * scale);\r\n vert2y.push(pointFromY * scale);\r\n }\r\n var prevState = self.isHovering();\r\n\r\n let isHovering = pnpoly(shape.length, vertx, verty, offset.x, offset.y);\r\n setHovering(isHovering);\r\n setHoveringOnlyShape(pnpoly(shape.length, vert2x, vert2y, offset.x, offset.y));\r\n self.rotateAngleParts.forEach((rotateAnglePart) => {\r\n if ((self.shapeType === \"wideangle\")\r\n && !rotateAnglePart.rotatedAngleValue\r\n && self.rotateAngleParts.some(rotPart => rotPart.rotatedAngleValue > 0)) {\r\n rotateAnglePart.isHovered = false; // L shape may have only 1 part rotated\r\n } else {\r\n rotateAnglePart.isHovered = pnpolyArray(getRotateAngleRectangle(rotateAnglePart), mousePos);\r\n }\r\n });\r\n if (prevState && !self.isHovering()) {\r\n sqftEventManager.resetCursor(self);\r\n }\r\n return this.isHovering();\r\n };\r\n\r\n //private event handlers\r\n const onMouseMove = (mousePos, e) => {\r\n if (e.terminate && !state.mouseDown) {\r\n setHoveringOnlyShape(false);\r\n return setHovering(false);\r\n }\r\n if (isMouseOverShape(mousePos)) {\r\n //console.log(\"shape id\", this.id);\r\n if (self.onHover) {\r\n self.onHover(self);\r\n }\r\n // todo fix bumpout rotation and remove this\r\n if (sqftConfig.workspace.menuItemActive === \"rotate-left\") {\r\n //sqftEventManager.setCursor(\"rotate-left\", self);\r\n if (self.isWithBumpout() || self.isWithMitered()) {\r\n sqftEventManager.stealCursor(true);\r\n sqftEventManager.setCursor(\"deny\", self);\r\n }\r\n } else if (state.mouseDown && !sqftStore.getAllowEdges()) {\r\n sqftEventManager.setCursor('move', self, true);\r\n //todo\r\n //console.log(\"state.mouseDown\", state.mouseDown);\r\n moveShape(mousePos);\r\n hideShapeOffsetInTheSlabMode();\r\n } else if (!sqftStore.getAllowEdges()) {\r\n sqftEventManager.setCursor('move', self)\r\n }\r\n return state.mouseDown;\r\n }\r\n //smooth scrolling\r\n if (state.mouseDown && !sqftStore.getAllowEdges()) {\r\n sqftEventManager.setCursor('move', self, true);\r\n moveShape(mousePos);\r\n }\r\n // //smooth scrolling\r\n // if (state.mouseDown && !sqftStore.getAllowEdges()) {\r\n // sqftEventManager.setCursor('move', self, true);\r\n // moveShape(mousePos);\r\n // console.log(\"333\",);\r\n // }\r\n // //smooth scrolling\r\n // if (state.mouseDown && !sqftStore.getAllowEdges()) {\r\n // sqftEventManager.setCursor('move', self, true);\r\n // moveShape(mousePos);\r\n // }\r\n sqftEventManager.resetCursor(self);\r\n return false;\r\n }\r\n const onDblClick = (mousePos, e) => {\r\n void mousePos; void e;\r\n // if (state.hovering) {\r\n // this.setIsPointsMovable(!state.isPointsMovable);\r\n // }\r\n }\r\n const onMouseUp = (mousePos, e) => {\r\n void mousePos;\r\n void e;\r\n //debugger // eslint-disable-line no-debugger\r\n sqftEventManager.releaseStealLock(this);\r\n this.setIsPointsMovable(false);\r\n this.preventNegativeArea();\r\n if (this.isHovering()) {\r\n restoreShapeOffsetInTheSlabMode();\r\n this.shapeIntersections.handleSlabPlaceholderIntersections();\r\n if (state.mouseDown) {\r\n this.shapeAutoShuffle.handlePlaceShapeOnTheLine();\r\n }\r\n }\r\n state.mouseDown = false;\r\n state.mouseDownPosition = null;\r\n }\r\n\r\n const onMouseDown = (mousePos, e) => {\r\n void e;\r\n //if not then handle event with this object\r\n if (this.isHovering()) {\r\n // remove or add shape to selection\r\n if (e.shiftKey) {\r\n if (workspaceControllers.selectedShapes.isShapeSelected(this)) {\r\n workspaceControllers.selectedShapes.removeShapeFromSelection(this);\r\n } else {\r\n workspaceControllers.selectedShapes.addShapeToSelection(this);\r\n }\r\n }\r\n this.shapeMemory.rememberShapePosition();\r\n setShapeToShapeOffset();\r\n if (sqftEventManager.getCursor().indexOf(\"move\") >= 0) {\r\n state.mouseDown = true;\r\n state.mouseDownPosition = mousePos;\r\n }\r\n if (sqftConfig.highlight.rotateAngle) {\r\n // todo fix bumpout rotation and remove this\r\n if (self.isWithBumpout() || self.isWithMitered() || this.isPointsMoved || this.rotatedDegrees !== 0) {\r\n return\r\n }\r\n /////////////////////////////////////////\r\n\r\n self.rotateAngleParts.forEach((rotateAnglePart) => {\r\n if (rotateAnglePart.isHovered) {\r\n //todo\r\n self.setRotateAnglePartActive(rotateAnglePart);\r\n } else {\r\n rotateAnglePart.isActive = false;\r\n }\r\n });\r\n if (!self.rotateAngleParts.some(rotateAnglePart => rotateAnglePart.isActive)) {\r\n self.deActivateRotateAngle();\r\n }\r\n }\r\n\r\n if (this.partId !== SHAPE_PART_ID.slabPlaceHolder) { // seam not allowed to be added on slab placeholders\r\n const reduxState = store.getState();\r\n const activeButton = reduxState.sqftMenuState.activeButton;\r\n if (activeButton === SIDEBAR_SLAB_SEAM_BUTTONS.addSeamVertical) {\r\n this.shapeSlab.addSeamPieceVertical(mousePos);\r\n this.setIsPointsChanged(false); //prevent creating new backSplash shape if it was seamed\r\n } else if (activeButton === SIDEBAR_SLAB_SEAM_BUTTONS.addSeamHorizontal) {\r\n this.shapeSlab.addSeamPieceHorizontal(mousePos);\r\n this.setIsPointsChanged(false); //prevent creating new backSplash shape if it was seamed\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n const hideShapeOffsetInTheSlabMode = () => {\r\n if (SqftStore.isSlabMode()) {\r\n const slabShapeOffset = SlabWorkspace.getShapeOffset();\r\n if (slabShapeOffset) {\r\n slabShapeOffset.hide();\r\n }\r\n }\r\n }\r\n\r\n const restoreShapeOffsetInTheSlabMode = () => {\r\n if (SqftStore.isSlabMode()) {\r\n const slabShapeOffset = SlabWorkspace.getShapeOffset();\r\n if (slabShapeOffset) {\r\n slabShapeOffset.restore();\r\n }\r\n }\r\n }\r\n\r\n const setShapeToShapeOffset = () => {\r\n const isSlabMode = SqftStore.isSlabMode();\r\n\r\n if (isSlabMode && this.partId !== SHAPE_PART_ID.slabPlaceHolder) {\r\n sqftSlabManager.initShapeOffset(this);\r\n }\r\n }\r\n\r\n function hideAngleTooltip() {\r\n const angleTooltip = document.getElementById(\"angle-tooltip\");\r\n const inputArrows = [].slice.call(document.querySelectorAll(\"#angle-tooltip [data-action]\"));\r\n // const inputSubmit = document.querySelectorAll('[data-action=\"angle-input-submit\"]');\r\n\r\n if (angleTooltip) {\r\n angleTooltip.style.display = \"none\";\r\n //remove event handlers\r\n inputArrows.forEach(function (elem) {\r\n elem.parentNode.replaceChild(elem.cloneNode(true), elem);\r\n });\r\n // inputSubmit[0].removeEventListener('click', self.deActivateRotateAngle);\r\n }\r\n }\r\n\r\n function hideAngleTooltipArrows (value) {\r\n const angleTooltip = document.getElementById(\"angle-tooltip\");\r\n const inputArrowUp = [].slice.call(angleTooltip.querySelectorAll('[data-action=\"angle-input-up\"]'));\r\n const inputArrowDown = [].slice.call(angleTooltip.querySelectorAll('[data-action=\"angle-input-down\"]'));\r\n\r\n inputArrowUp.forEach((button) => {\r\n if (value === minAngle) {\r\n button.style.display = \"none\";\r\n clearInterval(state.handlerHold);\r\n } else {\r\n button.style.display = \"block\";\r\n }\r\n });\r\n inputArrowDown.forEach((button) => {\r\n if (value === maxAngle) {\r\n button.style.display = \"none\";\r\n clearInterval(state.handlerHold);\r\n } else {\r\n button.style.display = \"block\";\r\n }\r\n });\r\n }\r\n //public functions\r\n\r\n /**\r\n * return array of getPointField for each point\r\n */\r\n this.getPointFieldArray = () => {\r\n let pointsArray = []\r\n for (const line of shape) {\r\n pointsArray.push(getPointField(line.from.x, line.from.y, line));\r\n }\r\n return pointsArray\r\n }\r\n this.preventNegativeArea = () => {\r\n if (this.getTotalArea() < 0) {\r\n this.reversePoints();\r\n const state = store.getState();\r\n const updateCalculations = state.sqftState.updateCalculations;\r\n\r\n store.dispatch(updateSQFTCalculations(updateCalculations + 1));\r\n }\r\n }\r\n this.reversePoints = () => {\r\n const reversedPoints = this.getPointCordsArray().reverse();\r\n shape.forEach((line, lineIndex) => {\r\n line.from.setPos({\r\n x: reversedPoints[lineIndex].x,\r\n y: reversedPoints[lineIndex].y\r\n });\r\n line.from.setPosSlab({\r\n x: reversedPoints[lineIndex].x,\r\n y: reversedPoints[lineIndex].y\r\n });\r\n });\r\n }\r\n this.getPointCordsArray = () => {\r\n let pointsArray = []\r\n for (const line of shape) {\r\n pointsArray.push({x: line.from.x, y: line.from.y});\r\n }\r\n return pointsArray\r\n }\r\n this.activateRotateAngle = function () {\r\n shape.forEach((line, lineIndex) => {\r\n for (const rotateAnglePart of self.rotateAngleParts) {\r\n if (this.isAngleRotatedPartsWithCorner(rotateAnglePart)) {\r\n continue;\r\n }\r\n if (lineIndex === rotateAnglePart.line1) {\r\n const parentPoint = (rotateAnglePart && rotateAnglePart.angleDirection === \"right\") ? line.from : line.to;\r\n parentPoint.renderAngleCircle = 18\r\n } else if (lineIndex === rotateAnglePart.line2) {\r\n const secondaryPoint = (rotateAnglePart && rotateAnglePart.angleDirection === \"right\") ? line.to : line.from;\r\n secondaryPoint.renderAngleCircle = 12;\r\n }\r\n // if (lineIndex === 1) { // this is rendering green arc\r\n // line.from.renderAngleArc = line.calculateRenderPosition(line.to).y - line.calculateRenderPosition(line.from).y;\r\n // }\r\n }\r\n })\r\n };\r\n this.deActivateRotateAngle = function() {\r\n self.rotateAngleParts.forEach((rotateAnglePart) => {\r\n rotateAnglePart.isActive = false;\r\n rotateAnglePart.isHovered = false;\r\n });\r\n\r\n hideAngleTooltip();\r\n };\r\n this.setRotateAnglePartActive = function (rotateAnglePart) {\r\n hideAngleTooltip(); // 1) deactivate previous anglePart\r\n rotateAnglePart.isActive = true; // 1) always highlight\r\n const angleTooltip = document.getElementById(\"angle-tooltip\");\r\n const input = document.getElementById(\"angle_input\");\r\n const inputArrowUp = [].slice.call(angleTooltip.querySelectorAll('[data-action=\"angle-input-up\"]'));\r\n const inputArrowDown = [].slice.call(angleTooltip.querySelectorAll('[data-action=\"angle-input-down\"]'));\r\n const inputArrows = inputArrowUp.concat(inputArrowDown);\r\n const inputSubmit = [].slice.call(angleTooltip.querySelectorAll(\"[data-action=\\\"angle-input-submit\\\"]\"));\r\n\r\n if (this.isAngleRotatedPartsWithCorner(rotateAnglePart)) {\r\n return;\r\n }\r\n input.setAttribute(\"min\", minAngle.toString());\r\n input.setAttribute(\"max\", maxAngle.toString());\r\n angleTooltip.style.display = \"flex\"; // 2) show input in sidebar\r\n\r\n // 3) set input value to current angle\r\n input.value = 90 - rotateAnglePart.rotatedAngleValue; // 90 - is made for displaying 90-0-90 rotation deg for input\r\n\r\n // input.value = getAngleValue(rotateAnglePart.rotatedAngleValue); // 3) set input value to current angle\r\n input.max = (rotateAnglePart && rotateAnglePart.shapeType === \"wideangle\" && rotateAnglePart && rotateAnglePart.angleDirection === \"right\") ? 90 : maxAngle; // 3.5 set input max\r\n input.min = (rotateAnglePart && rotateAnglePart.shapeType === \"wideangle\" && rotateAnglePart && rotateAnglePart.angleDirection === \"right\") ? 1 : minAngle; // 3.5 set input max\r\n hideAngleTooltipArrows(+input.value);\r\n\r\n setTimeout(() => {\r\n const expandedSidebar = document.querySelector(\".side.expanded\");\r\n if (expandedSidebar) {\r\n $(expandedSidebar).animate({scrollTop: $(expandedSidebar).height()}, 600); // 4) scroll to added input\r\n }\r\n }, 600);\r\n\r\n // 4) declare base points and bottom(moving) line\r\n const basePoint = (rotateAnglePart && rotateAnglePart.angleDirection === \"right\") ? shape[rotateAnglePart.line1].from : shape[rotateAnglePart.line1].to;\r\n const secondaryPoint = (rotateAnglePart && rotateAnglePart.angleDirection === \"right\") ? shape[rotateAnglePart.line2].to : shape[rotateAnglePart.line2].from;\r\n const bottomLine = (rotateAnglePart && rotateAnglePart.angleDirection === \"right\") ? shape[rotateAnglePart.line1 + 1] : shape[rotateAnglePart.line1 - 1];\r\n const secondaryLineLength = shape[rotateAnglePart.line2].getLineLength();\r\n //const nextLine = self.getNextLine(basePoint.getParent());\r\n var rotated90_1, rotated90_2;\r\n\r\n switch (rotateAnglePart.shapeType) {\r\n default:\r\n case \"wideangle\":\r\n case \"horseshoe\": {\r\n if (rotateAnglePart && rotateAnglePart.angleDirection === \"right\") {\r\n //console.log('RIGHT 90 Orient', bottomLine.getOrientation());\r\n //console.log('RIGHT newDirection', bottomLine.getLineDirection().newDirection);\r\n\r\n if (bottomLine.getLineDirection().newDirection === 'east') {\r\n rotated90_1 = {x: secondaryPoint.x - secondaryLineLength, y: basePoint.y};\r\n rotated90_2 = {x: secondaryPoint.x - secondaryLineLength, y: secondaryPoint.y};\r\n } else if (bottomLine.getLineDirection().newDirection === 'west') {\r\n rotated90_1 = {x: secondaryPoint.x + secondaryLineLength, y: basePoint.y};\r\n rotated90_2 = {x: secondaryPoint.x + secondaryLineLength, y: secondaryPoint.y};\r\n } else if (bottomLine.getLineDirection().newDirection === 'south') {\r\n rotated90_1 = {x: basePoint.x, y: secondaryPoint.y - secondaryLineLength};\r\n rotated90_2 = {x: secondaryPoint.x, y: secondaryPoint.y - secondaryLineLength};\r\n } else if (bottomLine.getLineDirection().newDirection === 'north') {\r\n rotated90_1 = {x: basePoint.x, y: secondaryPoint.y + secondaryLineLength};\r\n rotated90_2 = {x: secondaryPoint.x, y: secondaryPoint.y + secondaryLineLength};\r\n }\r\n\r\n } else {\r\n //console.log('LEFT 90 Orient', bottomLine.getOrientation());\r\n //console.log('LEFT newDirection', bottomLine.getLineDirection().newDirection);\r\n\r\n if (bottomLine.getLineDirection().newDirection === 'east') {\r\n rotated90_1 = {x: secondaryPoint.x + secondaryLineLength, y: secondaryPoint.y};\r\n rotated90_2 = {x: secondaryPoint.x + secondaryLineLength, y: basePoint.y};\r\n } else if (bottomLine.getLineDirection().newDirection === 'west') {\r\n rotated90_1 = {x: secondaryPoint.x - secondaryLineLength, y: secondaryPoint.y};\r\n rotated90_2 = {x: secondaryPoint.x - secondaryLineLength, y: basePoint.y};\r\n } else if (bottomLine.getLineDirection().newDirection === 'south') {\r\n rotated90_1 = {x: secondaryPoint.x, y: secondaryPoint.y + secondaryLineLength};\r\n rotated90_2 = {x: basePoint.x, y: secondaryPoint.y + secondaryLineLength};\r\n } else if (bottomLine.getLineDirection().newDirection === 'north') {\r\n rotated90_1 = {x: secondaryPoint.x, y: secondaryPoint.y - secondaryLineLength};\r\n rotated90_2 = {x: basePoint.x, y: secondaryPoint.y - secondaryLineLength};\r\n }\r\n }\r\n break;\r\n }\r\n }\r\n\r\n angleTooltip.style.left = basePoint.getPointField().x + \"px\";\r\n angleTooltip.style.top = basePoint.getPointField().y + \"px\";\r\n const ENTER_KEY = 13;\r\n // 5) set input handlers and focus it\r\n input.oninput = () => self.rotateAngleInputChange(input, rotateAnglePart, basePoint, secondaryPoint, rotated90_1, rotated90_2, bottomLine);\r\n input.focus();\r\n input.onkeydown = function(e) {\r\n if (e.keyCode === ENTER_KEY) {\r\n e.target.blur();\r\n }\r\n };\r\n function blur(e) {\r\n if (!$(e.target).closest('.ui-input')) {\r\n input.blur();\r\n }\r\n }\r\n input.onblur = function () {\r\n // window.lineInputFocused = false;\r\n // input.parentNode.removeChild(input);\r\n // document.removeEventListener(\"click\", blur);\r\n };\r\n\r\n // 6) set input up down and submit handlers\r\n let holdStarter;// This timeout, started on mousedown, triggers the beginning of a hold\r\n let holdDelay = 300; // This is how many milliseconds to wait before recognizing a hold\r\n let holdActive = false; // This flag indicates the user is currently holding the mouse down\r\n inputArrows.forEach(function (arrow) {\r\n let arrowMousedown = (e) => {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n const isNegative = e.currentTarget.dataset.action === 'angle-input-down';\r\n\r\n holdStarter = setTimeout(function () {\r\n holdStarter = null;\r\n holdActive = true;\r\n\r\n state.handlerHold = setInterval(function () {\r\n if (holdActive) {\r\n handleArrowInputIncrease(isNegative, input, rotateAnglePart, basePoint, secondaryPoint, rotated90_1, rotated90_2, bottomLine);\r\n }\r\n }, 50);\r\n //console.log('Holding...')\r\n }, holdDelay);\r\n }\r\n let arrowMouseup = (e) => {\r\n if (holdStarter) {\r\n clearTimeout(holdStarter);\r\n\r\n const isNegative = e.currentTarget.dataset.action === 'angle-input-down';\r\n handleArrowInputIncrease(isNegative, input, rotateAnglePart, basePoint, secondaryPoint, rotated90_1, rotated90_2, bottomLine);\r\n //console.log('Clicked')\r\n }\r\n // Otherwise, if the mouse was being held, end the hold\r\n else if (holdActive) {\r\n holdActive = false;\r\n clearInterval(state.handlerHold);\r\n }\r\n };\r\n arrow.addEventListener('mousedown', arrowMousedown);\r\n arrow.addEventListener('mouseup', arrowMouseup);\r\n });\r\n inputSubmit[0].addEventListener('click', self.deActivateRotateAngle);\r\n\r\n setTimeout(() => {\r\n document.addEventListener(\"click\", blur);\r\n }, 500);\r\n };\r\n this.removeBumpouts = function () {\r\n for (var i = 0; i < shape.length; i++) {\r\n if (shape[i].bumpoutOverlay) {\r\n shape[i].deleteBumpout();\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * remember base configuration before rotation (we will need it in onchange method, and after blur)\r\n **/\r\n this.setRotateAnglePartBaseConfiguration = (rotateAnglePart, basePoint, secondaryPoint, rotated90_1, rotated90_2, bottomLine) => {\r\n rotateAnglePart.baseConfiguration = {\r\n basePointX: basePoint.x,\r\n basePointX2: secondaryPoint.x,\r\n basePointY: basePoint.y,\r\n basePointY2: secondaryPoint.y,\r\n rotated90_1: rotated90_1,\r\n rotated90_2: rotated90_2,\r\n baseOldX: bottomLine.from.x,\r\n baseOldY: bottomLine.from.y,\r\n baseOldX1: bottomLine.to.x,\r\n baseOldY1: bottomLine.to.y,\r\n widthDiff: Math.abs(basePoint.y - secondaryPoint.y), // difference between basePointX and secondaryPointX, we need it to make bottom line straight\r\n };\r\n }\r\n\r\n /**\r\n * bottomLine - far line, rotating around centerPoint\r\n * basePoint - first point where rotation starts\r\n * secondaryPoint - second point where rotation starts\r\n **/\r\n this.rotateAngleInputChange = (input, rotateAnglePart, basePoint, secondaryPoint, rotated90_1Calc, rotated90_2Calc, bottomLine) => {\r\n if (!rotateAnglePart.baseConfiguration || rotateAnglePart.rotatedAngleValue === 0) {\r\n this.setRotateAnglePartBaseConfiguration(rotateAnglePart, basePoint, secondaryPoint, rotated90_1Calc, rotated90_2Calc, bottomLine)\r\n }\r\n\r\n let {\r\n basePointX, basePointX2, basePointY, basePointY2, baseOldX, baseOldY, baseOldX1, baseOldY1, widthDiff, rotated90_1, rotated90_2\r\n } = rotateAnglePart.baseConfiguration;\r\n if (input.value > +input.max) {\r\n input.value = +input.max;\r\n }\r\n if (input.value < +input.min) {\r\n input.value = +input.min;\r\n }\r\n\r\n // 90 - is set for 90-0-90\r\n let value = 90 - +input.value;\r\n\r\n hideAngleTooltipArrows(+input.value);\r\n\r\n self.rotateAngleParts.forEach((rotateAnglePart) => {\r\n if (rotateAnglePart.isActive) {\r\n rotateAnglePart.rotatedAngleValue = value\r\n }\r\n });\r\n const anglePercentage = Math.round(value * 100 / 90 * 100) / 100; // for example, 20deg = 22.2%\r\n const diffToMinus = Math.round(widthDiff * anglePercentage / 100 * 100) / 100; // for example, 26 * 45 / 100 = 11.7\r\n\r\n const pointToRotate1 = (value < 90) ? {x:baseOldX, y: baseOldY} : rotated90_1;\r\n const pointToRotate2 = (value < 90) ? {x:baseOldX1, y: baseOldY1} : rotated90_2;\r\n const angle = getAngle(rotateAnglePart, value);\r\n\r\n let rotationCenterPoint = getRotationCentrePoint(rotateAnglePart, value, bottomLine, basePoint, secondaryPoint);\r\n\r\n //console.log(angle);\r\n //console.log(rotationCenterPoint);\r\n //console.log(pointToRotate1);\r\n let rotated = rotatePoint(pointToRotate1, rotationCenterPoint, angle);\r\n let rotated2 = rotatePoint(pointToRotate2, rotationCenterPoint, angle);\r\n\r\n bottomLine.from.x = rotated.x;\r\n bottomLine.from.y = rotated.y;\r\n bottomLine.to.x = rotated2.x;\r\n bottomLine.to.y = rotated2.y;\r\n\r\n // change base points positions\r\n // var tempPoint = new point(rotationCenterPoint.x, rotationCenterPoint.y);\r\n // tempPoint.init(bottomLine);\r\n // tempPoint.layout = 'white-circle';\r\n\r\n switch (rotateAnglePart.shapeType) {\r\n case \"wideangle\":\r\n case \"horseshoe\":\r\n default: {\r\n //console.log('diffToMinus', diffToMinus)\r\n if (diffToMinus < widthDiff) {\r\n if (rotateAnglePart && rotateAnglePart.angleDirection === \"right\") {\r\n //console.log('RIGHT bottom Orient',bottomLine.getOrientation())\r\n switch (bottomLine.getOrientation()) {\r\n case orientation.HORIZONTAL: {\r\n basePoint.x = basePointX; secondaryPoint.x = basePointX2;\r\n break;\r\n }\r\n case orientation.VERTICAL: {\r\n basePoint.y = basePointY; secondaryPoint.y = basePointY2;\r\n break;\r\n }\r\n case orientation.SOUTHEAST: { basePoint.y = basePointY + diffToMinus; secondaryPoint.y = basePointY2;\r\n break;\r\n }\r\n case orientation.NORTHWEST: { basePoint.y = basePointY - diffToMinus; secondaryPoint.y = basePointY2;\r\n break;\r\n }\r\n case orientation.NORTHEAST: { basePoint.x = basePointX + diffToMinus; secondaryPoint.x = basePointX2;\r\n break;\r\n }\r\n case orientation.SOUTHWEST: { basePoint.x = basePointX - diffToMinus; secondaryPoint.x = basePointX2;\r\n break;\r\n }\r\n default:\r\n break;\r\n }\r\n } else {\r\n //console.log('LEFT bottom Orient',bottomLine.getOrientation())\r\n switch (bottomLine.getOrientation()) {\r\n case orientation.HORIZONTAL: { basePoint.x = basePointX; secondaryPoint.x = basePointX2;\r\n break;\r\n }\r\n case orientation.VERTICAL: { basePoint.y = basePointY; secondaryPoint.y = basePointY2;\r\n break;\r\n }\r\n case orientation.SOUTHEAST: { basePoint.x = basePointX - diffToMinus; secondaryPoint.x = basePointX2;\r\n break;\r\n }\r\n case orientation.NORTHWEST: { basePoint.x = basePointX + diffToMinus; secondaryPoint.x = basePointX2;\r\n break;\r\n }\r\n case orientation.NORTHEAST: { basePoint.y = basePointY + diffToMinus; secondaryPoint.y = basePointY2;\r\n break;\r\n }\r\n case orientation.SOUTHWEST: { basePoint.y = basePointY - diffToMinus; secondaryPoint.y = basePointY2;\r\n break;\r\n }\r\n default:\r\n break;\r\n }\r\n }\r\n //console.log('basePoint', basePoint);\r\n //console.log('secondaryPoint', secondaryPoint);\r\n } else {\r\n if (rotateAnglePart && rotateAnglePart.angleDirection === \"right\") {\r\n //console.log('RIGHT 90 Orient', bottomLine.getOrientation());\r\n switch (bottomLine.getOrientation()) {\r\n case orientation.HORIZONTAL:\r\n if (self.getNextLine(basePoint.getParent()).getLineDirection().orientation === \"vertical\"){\r\n basePoint.x = basePointX - widthDiff;\r\n secondaryPoint.x = basePointX2 - widthDiff;\r\n } else {\r\n if (bottomLine.getLineDirection().newDirection === \"east\"){\r\n if (self.getPrevLine(basePoint.getParent()).getLineDirection().orientation === \"vertical\"){\r\n basePoint.x = basePointX;\r\n secondaryPoint.x = basePointX2;\r\n } else {\r\n basePoint.x = basePointX - widthDiff;\r\n secondaryPoint.x = basePointX2 + widthDiff;\r\n }\r\n } else {\r\n if (self.getPrevLine(basePoint.getParent()).getLineDirection().orientation === \"vertical\"){\r\n basePoint.x = basePointX;\r\n secondaryPoint.x = basePointX2;\r\n } else {\r\n basePoint.x = basePointX + widthDiff;\r\n secondaryPoint.x = basePointX2 - widthDiff;\r\n }\r\n }\r\n }\r\n break;\r\n case orientation.VERTICAL:\r\n if (self.getNextLine(basePoint.getParent()).getLineDirection().orientation === \"vertical\") {\r\n if (bottomLine.getLineDirection().newDirection === \"north\") {\r\n if (self.getPrevLine(basePoint.getParent()).getLineDirection().orientation === \"horizontal\") {\r\n basePoint.y = basePointY;\r\n secondaryPoint.y = basePointY2;\r\n } else {\r\n basePoint.y = basePointY + widthDiff;\r\n secondaryPoint.y = basePointY2 - widthDiff;\r\n }\r\n } else {\r\n if (self.getPrevLine(basePoint.getParent()).getLineDirection().orientation === \"horizontal\") {\r\n basePoint.y = basePointY ;\r\n secondaryPoint.y = basePointY2 ;\r\n } else {\r\n basePoint.y = basePointY - widthDiff;\r\n secondaryPoint.y = basePointY2 + widthDiff;\r\n }\r\n }\r\n }\r\n break;\r\n case orientation.SOUTHEAST: {\r\n secondaryPoint.x = basePointX2 - widthDiff + diffToMinus;\r\n basePoint.x = basePointX - widthDiff;\r\n break;\r\n }\r\n case orientation.NORTHEAST: {\r\n secondaryPoint.y = basePointY2 + widthDiff - diffToMinus;\r\n basePoint.y = basePointY + widthDiff;\r\n break;\r\n }\r\n case orientation.SOUTHWEST: {\r\n secondaryPoint.x = basePointX2;\r\n basePoint.x = basePointX;\r\n basePoint.y = basePointY - widthDiff;\r\n secondaryPoint.y = basePointY2 - widthDiff + diffToMinus;\r\n break;\r\n }\r\n case orientation.NORTHWEST: {\r\n secondaryPoint.x = basePointX2 + widthDiff - diffToMinus;\r\n basePoint.x = basePointX + widthDiff;\r\n break;\r\n }\r\n default:\r\n break;\r\n }\r\n } else {\r\n //console.log('LEFT 90 Orient', bottomLine.getOrientation());\r\n switch (bottomLine.getOrientation()) {\r\n case orientation.HORIZONTAL:\r\n if (self.getNextLine(basePoint.getParent()).getLineDirection().orientation === \"vertical\"){\r\n if (bottomLine.getLineDirection().newDirection === \"west\"){\r\n basePoint.x = basePointX - widthDiff;\r\n secondaryPoint.x = basePointX2 + widthDiff;\r\n } else {\r\n basePoint.x = basePointX + widthDiff;\r\n secondaryPoint.x = basePointX2 - widthDiff;\r\n }\r\n } else {\r\n basePoint.x = basePointX;\r\n secondaryPoint.x = basePointX2;\r\n }\r\n break;\r\n case orientation.VERTICAL:\r\n if (self.getNextLine(basePoint.getParent()).getLineDirection().orientation === \"horizontal\"){\r\n if (bottomLine.getLineDirection().newDirection === \"south\") {\r\n basePoint.y = basePointY + widthDiff;\r\n secondaryPoint.y = basePointY2 - widthDiff;\r\n } else {\r\n basePoint.y = basePointY - widthDiff;\r\n secondaryPoint.y = basePointY2 + widthDiff;\r\n }\r\n }\r\n break;\r\n case orientation.SOUTHEAST: {\r\n basePoint.y = basePointY + widthDiff;\r\n secondaryPoint.y = basePointY2 + widthDiff - diffToMinus;\r\n break;\r\n }\r\n case orientation.NORTHEAST: {\r\n secondaryPoint.x = basePointX2 + widthDiff - diffToMinus;\r\n basePoint.x = basePointX + widthDiff;\r\n break;\r\n }\r\n case orientation.SOUTHWEST: {\r\n basePoint.x = basePointX - widthDiff ;\r\n secondaryPoint.x = basePointX2 - widthDiff + diffToMinus;\r\n break;\r\n }\r\n case orientation.NORTHWEST: {\r\n basePoint.y = basePointY - widthDiff;\r\n secondaryPoint.y = basePointY2 - widthDiff+ diffToMinus;\r\n break;\r\n }\r\n default:\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n // const pointDiff = Math.round(15 * anglePercentage) / 100; // points margin\r\n [basePoint, secondaryPoint].forEach(point => {\r\n if (point.arcLength || point.angle) {\r\n point.arcLength = 0;\r\n point.angle = 0;\r\n }\r\n // disallow points radiuses\r\n point.angleIsChanged = !!value; // keep if false when angle is 0\r\n point.rotateAnglePart = rotateAnglePart; // each point has a link on the whole rotated part\r\n });\r\n bottomLine.from.rotateAnglePart = rotateAnglePart;\r\n bottomLine.to.rotateAnglePart = rotateAnglePart;\r\n // bottomLine.from.pointDiff = pointDiff;\r\n // bottomLine.to.pointDiff = pointDiff;\r\n };\r\n this.getNextLine = (line, index, shouldSearchAmongLinesWithoutAngles) => {\r\n const lines = shouldSearchAmongLinesWithoutAngles ? this.getLinesWithoutAngle() : shape;\r\n index = index || lines.indexOf(line);\r\n let next = index + 1;\r\n if (index === lines.length - 1) {\r\n next = 0;\r\n }\r\n return lines[next];\r\n };\r\n this.getPrevLine = function(line, index) {\r\n index = index || shape.indexOf(line);\r\n var prev = index - 1;\r\n if (index === 0) {\r\n prev = shape.length - 1;\r\n }\r\n return shape[prev];\r\n };\r\n this.getAngleDirection = function(line) {\r\n var index = shape.indexOf(line);\r\n var lines = {\r\n line1: shape[index],\r\n line2: this.getNextLine(line, index),\r\n lineBefore: this.getPrevLine(line, index)\r\n };\r\n return getPointDirection(lines.line1.from, lines.line1.to, lines.line2.to, lines.lineBefore.from);\r\n };\r\n this.flip = function(flipDirection) {\r\n let i;\r\n switch(flipDirection) {\r\n case self.FlipDirection.HORIZONTAL:\r\n var max_y = 0;\r\n for (i = 0; i < shape.length; i++) {\r\n if (max_y < shape[i].from.y) {\r\n max_y = shape[i].from.y;\r\n }\r\n }\r\n for (i = 0; i < shape.length; i++) {\r\n shape[i].from.y = max_y - shape[i].from.y;\r\n }\r\n break;\r\n case self.FlipDirection.VERTICAL:\r\n var max_x = 0;\r\n for (i = 0; i < shape.length; i++) {\r\n if (max_x < shape[i].from.x) {\r\n max_x = shape[i].from.x;\r\n }\r\n }\r\n for (i = 0; i < shape.length; i++) {\r\n shape[i].from.x = max_x - shape[i].from.x;\r\n }\r\n break;\r\n }\r\n };\r\n this.rotate = function(degrees, direction, isSlabMode = false, aroundPoint = null) {\r\n // todo fix bumpout rotation and remove this\r\n // if (self.isWithBumpout() || self.isWithMitered()) {\r\n // return\r\n // }\r\n /////////////////////////////////////////\r\n isSlabMode ? this.rotatedDegreesSlab += degrees : this.rotatedDegrees += degrees;\r\n (this.rotatedDegrees === 360) && (this.rotatedDegrees = 0);\r\n (this.rotatedDegreesSlab === 360) && (this.rotatedDegreesSlab = 0);\r\n\r\n direction = direction || self.Direction.Right;\r\n let angle = (degrees * Math.PI / 180);\r\n if (direction === self.Direction.LEFT)\r\n angle *= -1;\r\n\r\n if (!aroundPoint) {\r\n aroundPoint = this.getCenter();\r\n }\r\n //console.log('degrees', degrees);\r\n //console.log('aroundPoint', aroundPoint);\r\n for (let i = 0; i < shape.length; i++) {\r\n shape[i].from.rotate(aroundPoint, angle, isSlabMode);\r\n }\r\n for (let i = 0; i < shape.length; i++) {\r\n let line1 = this.getAngleDirection(shape[i]),\r\n count = ((i - 1) < 0) ? shape.length - 1 : i - 1,\r\n line2 = this.getAngleDirection(shape[count]);\r\n\r\n shape[i].from.changeCornerDirection(line1, line2);\r\n }\r\n this.rotateShapeBumpoutPoints(aroundPoint, angle, isSlabMode); //todo\r\n if (this.shapeRotatable) {\r\n this.shapeRotatable.rotateShapeRotatablePoints(aroundPoint, angle, isSlabMode);\r\n }\r\n if (!isSlabMode) {\r\n this.setIsPointsChanged(true);\r\n }\r\n };\r\n this.rotateShapeBumpoutPoints = (aroundPoint, angle, isSlabMode) => {\r\n if (this.isWithBumpout()) {\r\n for (const line of this.getLines()) {\r\n if (line.isWithBumpout()) {\r\n const bumpoutPoints = line.bumpoutOverlay.getBumpoutPoints();\r\n for (const bumpoutPointsKey in bumpoutPoints) {\r\n if (bumpoutPoints.hasOwnProperty(bumpoutPointsKey)) {\r\n bumpoutPoints[bumpoutPointsKey].rotate(aroundPoint, angle, isSlabMode);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n this.setRotationDegrees = (rotationDegrees) => {\r\n this.rotatedDegrees = rotationDegrees\r\n }\r\n this.updateSlabPoints = () => {\r\n for (let i = 0; i < shape.length; i++) {\r\n shape[i].from.posSlab.x = JSON.parse(JSON.stringify(shape[i].from.pos.x));\r\n shape[i].from.posSlab.y = JSON.parse(JSON.stringify(shape[i].from.pos.y));\r\n if (shape[i].isWithBumpout()) {\r\n //this is used to reset additional bumpout shape\r\n SlabWorkspace.slabAdditionalShapes.removeActiveBacksplashByLine(shape[i]);\r\n\r\n //this is used to reset bumpoutPoints if they displayed with the line\r\n const bumpoutPoints = shape[i].bumpoutOverlay.getBumpoutPoints();\r\n for (let point in bumpoutPoints) {\r\n bumpoutPoints[point].posSlab = clone(bumpoutPoints[point].pos);\r\n }\r\n }\r\n }\r\n }\r\n this.updateSlabPosition = () => {\r\n this.setSlabPosition(this.pos);\r\n }\r\n this.init = (position, segments) => {\r\n if (position) {\r\n this.setPositionWithoutChange(position);\r\n this.setSlabPosition(position);\r\n }\r\n if (SHAPE_PART_IDS_VISIBLE_ONLY_IN_THE_SLAB_MODE.includes(this.partId)) {\r\n this.isPositionChanged = false;\r\n }\r\n\r\n if (segments)\r\n setShape(segments);\r\n\r\n // that hook is for resizing, perhaps we should rewrite resizing and remove this\r\n if (self.layout270.indexOf(this.fromLayout) !== -1) {\r\n self.rotatedDegrees = 270;\r\n }\r\n\r\n function getRandomInt(min, max) {\r\n return Math.floor(Math.random() * (max - min)) + min;\r\n }\r\n totalShapeCount && setFillColor(getRandomInt(0, 255), getRandomInt(0, 255), getRandomInt(0, 255), 0.3);\r\n this.initEvents(sqftEventManager);\r\n };\r\n this.getPriority = (eventManager) => {\r\n switch (this.partId) {\r\n case SHAPE_PART_ID.upper_cabinet_boxes: return eventManager.priorities.SHAPE_UPPER\r\n case SHAPE_PART_ID.slabPlaceHolder: return eventManager.priorities.SHAPE_SLAB_PLACEHOLDER\r\n default: return eventManager.priorities.SHAPE\r\n }\r\n }\r\n this.initEvents = (eventManager = sqftEventManager) => {\r\n eventManager.addEvent(\r\n eventManager.events.MOUSE_MOVE,\r\n onMouseMove,\r\n this,\r\n this.getPriority(eventManager)\r\n );\r\n eventManager.addEvent(\r\n eventManager.events.MOUSE_DOWN,\r\n onMouseDown,\r\n this,\r\n this.getPriority(eventManager)\r\n );\r\n eventManager.addEvent(\r\n eventManager.events.MOUSE_UP,\r\n onMouseUp,\r\n this,\r\n this.getPriority(eventManager)\r\n );\r\n eventManager.addEvent(\r\n eventManager.events.RENDER,\r\n this.render,\r\n this,\r\n this.getPriority(eventManager)\r\n );\r\n eventManager.addEvent(\r\n eventManager.events.DBLCLICK,\r\n onDblClick,\r\n this,\r\n this.getPriority(eventManager)\r\n );\r\n };\r\n this.resetState = () => {\r\n state.mouseDown = false;\r\n state.mouseDownPosition = null;\r\n state.hovering = false;\r\n state.handlerHold = null;\r\n };\r\n this.deregisterEvents = () => {\r\n sqftEventManager.removeEvent(this);\r\n this.resetState();\r\n this.isHidden = true;\r\n this.deregisterLineEvents();\r\n };\r\n this.deregisterLineEvents = () => {\r\n for (let i = 0; i < shape.length; i++) {\r\n shape[i].deregisterEvents();\r\n }\r\n };\r\n this.reInitLineTitleEvents = () => {\r\n for (let i = 0; i < shape.length; i++) {\r\n shape[i].reInitTitleEvents();\r\n }\r\n };\r\n this.reInitEvents = () => {\r\n if (this.isHidden) {\r\n this.initEvents(sqftEventManager);\r\n this.restoreState();\r\n this.isHidden = false;\r\n for (let i = 0; i < shape.length; i++) {\r\n shape[i].reInitEvents();\r\n }\r\n }\r\n };\r\n this.deregisterPartEvents = () => {\r\n for (let i = 0; i < shape.length; i++) {\r\n shape[i].deregisterPartEvents();\r\n }\r\n };\r\n this.reInitPartEvents = () => {\r\n for (let i = 0; i < shape.length; i++) {\r\n shape[i].reInitPartEvents();\r\n }\r\n };\r\n this.restoreState = () => {\r\n state = {\r\n mouseDown: false,\r\n mouseDownPosition: null,\r\n hovering: false,\r\n handlerHold: null\r\n };\r\n };\r\n this.destroy = (protect) => {\r\n if (!protect) {\r\n for (var i = 0; i < shape.length; i++) {\r\n shape[i].destroy();\r\n }\r\n if (this.shapeRotatable) {\r\n sqftShapeManager.disableRotatableState(this);\r\n }\r\n sqftEventManager.removeEvent(self);\r\n }\r\n };\r\n this.stealCursor = function(who) {\r\n for (var i = 0; i < shape.length; i++) {\r\n if (shape[i] === who) {\r\n sqftEventManager.resetCursor(self);\r\n }\r\n }\r\n };\r\n this.resetCursor = function() {\r\n sqftEventManager.resetCursor(self);\r\n };\r\n this.isShapeHasIntersections = () => {\r\n return shape.some(line => {\r\n return line.hasIntersections();\r\n })\r\n }\r\n this.renderAnglePartActive = function(rotateAnglePart, ctx) {\r\n ctx.save();\r\n ctx.beginPath();\r\n const rotateShape1 = getRotateAngleRectangle(rotateAnglePart);\r\n ctx.moveTo(rotateShape1[0][0], rotateShape1[0][1]);\r\n ctx.lineTo(rotateShape1[1][0], rotateShape1[1][1]);\r\n ctx.lineTo(rotateShape1[2][0], rotateShape1[2][1]);\r\n ctx.lineTo(rotateShape1[3][0], rotateShape1[3][1]);\r\n ctx.closePath();\r\n ctx.fillStyle = \"rgba(159, 198, 33, 0.5)\";\r\n ctx.fill();\r\n ctx.restore();\r\n };\r\n\r\n this.isAngleRotatedPartsWithCorner = (rotateAnglePart) => {\r\n let line1 = self.getPrevLine(shape[rotateAnglePart.line1]);\r\n let line2 = shape[rotateAnglePart.line2];\r\n\r\n if ((self.shapeType === \"horseshoe\" || self.shapeType === \"wideangle\")\r\n && rotateAnglePart.line1 > rotateAnglePart.line2\r\n ) {\r\n line1 = shape[rotateAnglePart.line1];\r\n line2 = self.getPrevLine(shape[rotateAnglePart.line2]);\r\n }\r\n\r\n return [line1, line2].some((line) => {\r\n return line.to.angle > 0 || line.to.arcLength > 0\r\n });\r\n }\r\n\r\n this.render = (ctx) => {\r\n this.shapeRender.render(ctx)\r\n }\r\n\r\n}\r\n","import $ from 'jquery';\r\nimport Config from '../config';\r\nimport {PhoneNumberUtil} from 'google-libphonenumber';\r\n\r\nexport default {\r\n bgImageUrl: function (imageUrl) {\r\n return 'url(\"' + imageUrl + '\")';\r\n },\r\n splitFilter: function (filter) {\r\n const res = {};\r\n filter.split('&').forEach(function (pair) {\r\n const ar = pair.split('=');\r\n res[ar[0]] = ar[1];\r\n });\r\n return res;\r\n },\r\n keysAndProps: function (obj) {\r\n const res = Object.keys(obj);\r\n console.log(res);\r\n for (let key in res) {\r\n const prop = obj[key];\r\n if (Array.isArray(prop)) {\r\n res.push(prop);\r\n }\r\n }\r\n\r\n return res;\r\n },\r\n isObject: function (val) {\r\n if (val === null) {\r\n return false;\r\n }\r\n return ( (typeof val === 'function') || (typeof val === 'object') );\r\n },\r\n\r\n imagePathCache: {},\r\n imagePath: function (image) {\r\n let path = this.imagePathCache[image];\r\n if (!path) {\r\n path =(Config.kioskStandAlone || document.kvConfig.dev ? './' : '/content/Views/kv/') + image;\r\n this.imagePathCache[image] = path;\r\n }\r\n\r\n return path;\r\n },\r\n /**\r\n * return the path without last part which is supposelly the file name\r\n * @param {string} path\r\n * @param {int} [count=1]\r\n */\r\n pathPrefix: function (path, count) {\r\n count = count || 1;\r\n while (count-- > 0) {\r\n const index = path.lastIndexOf(\"/\");\r\n if (index === -1) {\r\n return path;\r\n }\r\n\r\n path = path.substr(0, index);\r\n }\r\n\r\n return path;\r\n },\r\n\r\n /**\r\n * Converts a string to a boolean value\r\n * @param value\r\n */\r\n toBoolean: function (value) {\r\n if (typeof (value) === 'string') {\r\n value = value.toLowerCase();\r\n }\r\n switch (value) {\r\n case true:\r\n case \"true\":\r\n case 1:\r\n case \"1\":\r\n case \"on\":\r\n case \"yes\":\r\n return true;\r\n default:\r\n return false;\r\n }\r\n },\r\n\r\n convertKeysToCamelCase: function (obj) {\r\n if (!obj || typeof obj !== \"object\") {\r\n return null;\r\n }\r\n\r\n if (obj instanceof Array) {\r\n return $.map(obj, function (value) {\r\n return this.convertKeysToCamelCase(value);\r\n });\r\n }\r\n\r\n const newObj = {};\r\n $.each(obj, function (key, value) {\r\n key = key.charAt(0).toLowerCase() + key.slice(1);\r\n newObj[key] = value;\r\n });\r\n\r\n return newObj;\r\n },\r\n toCamel: function (o) {\r\n let build, key, destKey, value;\r\n\r\n if (o instanceof Array) {\r\n build = [];\r\n for (key in o) {\r\n value = o[key];\r\n\r\n if (typeof value === \"object\") {\r\n value = this.toCamel(value);\r\n }\r\n build.push(value);\r\n }\r\n } else {\r\n build = {};\r\n for (key in o) {\r\n if (o.hasOwnProperty(key)) {\r\n destKey = (key.charAt(0).toLowerCase() + key.slice(1) || key).toString();\r\n value = o[key];\r\n if (value !== null && typeof value === \"object\") {\r\n value = this.toCamel(value);\r\n }\r\n\r\n build[destKey] = value;\r\n }\r\n }\r\n }\r\n return build;\r\n },\r\n ignoreDefault: function (e) {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n //e.nativeEvent.stopImmediatePropagation();\r\n },\r\n\r\n ignore: function (e, cb) {\r\n this.ignoreDefault(e);\r\n cb();\r\n },\r\n\r\n\r\n playVideo: function (id) {\r\n ///TODO: When Girl videos are updated remove \"|| true\"\r\n if (!document.kvConfig.kioskMode || Config.isQTEmbedded() || true) {\r\n return;\r\n }\r\n const $guide = $(id);\r\n if (!$guide.length) {\r\n return;\r\n }\r\n const guide = $guide[0];\r\n $guide.off('canplaythrough').on('canplaythrough', function () {\r\n $guide.show();\r\n guide.play();\r\n });\r\n guide.load();\r\n },\r\n hideVideo: function (id) {\r\n const $guide = $(id);\r\n if (!$guide.length) {\r\n return;\r\n }\r\n const guide = $guide[0];\r\n $guide.hide();\r\n guide.pause();\r\n },\r\n getIntroVideo: function (view) {\r\n const path = Config.kioskStandAlone ? \"./videos/video_guide/\" : 'https://s3.amazonaws.com/intro-videos/';\r\n switch (view) {\r\n case 'review':\r\n return path + 'Visualizer-Tools-Totals-25M.webm';\r\n case 'intro':\r\n return path + 'Kitchen-Visualizer-25M.webm';\r\n default:\r\n return '';\r\n }\r\n },\r\n exportCanvasAsPNG: function (canvasElement, fileName) {\r\n const MIME_TYPE = \"image/png\";\r\n let imgURL = canvasElement.toDataURL(MIME_TYPE);\r\n\r\n /* Change MIME type to trick the browser to download the file instead of displaying it */\r\n imgURL = imgURL.replace(/^data:image\\/[^;]*/, 'data:application/octet-stream');\r\n /* In addition to 's \"download\" attribute, you can define HTTP-style headers */\r\n //imgURL = imgURL.replace(/^data:application\\/octet-stream/, 'data:application/octet-stream;headers=Content-Disposition%3A%20attachment%3B%20filename=' + fileName);\r\n\r\n const dlLink = document.createElement('a');\r\n dlLink.download = fileName;\r\n dlLink.href = imgURL;\r\n dlLink.dataset.downloadurl = [MIME_TYPE, dlLink.download, dlLink.href].join(':');\r\n\r\n document.body.appendChild(dlLink);\r\n dlLink.click();\r\n document.body.removeChild(dlLink);\r\n },\r\n monads: {\r\n ifNotNull: function (o, notNullCallback) {\r\n if (o) {\r\n return notNullCallback(o);\r\n }\r\n\r\n return null;\r\n }\r\n },\r\n pnpoly: function( points, test ) {\r\n var i, j, c = false;\r\n for( i = 0, j = points.length-1; i < points.length; j = i++ ) {\r\n if( ( ( points[i].y > test.y ) != ( points[j].y > test.y ) ) &&\r\n ( test.x < ( points[j].x - points[i].x ) * ( test.y - points[i].y ) / ( points[j].y - points[i].y ) + points[i].x ) ) {\r\n c = !c;\r\n }\r\n }\r\n return c;\r\n },\r\n isEmail: function (email) {\r\n if (!email || email.indexOf('@') === -1) {\r\n return false;\r\n }\r\n\r\n // eslint-disable-next-line no-useless-escape\r\n const re = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/i;\r\n return re.test(email);\r\n },\r\n isZip: function (zip) {\r\n const regex = /[a-zA-Z0-9][a-zA-Z0-9\\- ]{0,10}[a-zA-Z0-9]/;\r\n // const regex = /(^\\d{5}(?:[\\s]?[-\\s][\\s]?\\d{4})?$)/; // this on can not support H3H 2H2, which is real Quebec code\r\n return regex.test(zip);\r\n },\r\n // isPhoneNumber: function (phone) {\r\n // if (!phone) {\r\n // return false;\r\n // }\r\n // const count = phone.replace(/[^0-9]/g, \"\").length;\r\n // return count === 10 || count === 11;\r\n // },\r\n isPhoneNumber: function (phone, region) {\r\n region = region || \"US\";\r\n const phoneUtil = PhoneNumberUtil.getInstance();\r\n try {\r\n if (phone) {\r\n const parsedPhone = phoneUtil.parse(phone, region);\r\n return phoneUtil.isPossibleNumber(parsedPhone) && phoneUtil.isValidNumberForRegion(parsedPhone, region); // /^\\+?\\d{10,16}$/.test(phone);\r\n }\r\n return false;\r\n } catch(ex) {\r\n return false;\r\n }\r\n },\r\n getPhoneFormatted: (phone, region) => {\r\n region = region || \"US\";\r\n const phoneUtil = PhoneNumberUtil.getInstance();\r\n try {\r\n if (phone) {\r\n const parsedPhone = phoneUtil.parse(phone, region);\r\n return phoneUtil.formatInOriginalFormat(parsedPhone, region);\r\n }\r\n } catch(ex) {\r\n console.log(ex);\r\n }\r\n return phone;\r\n },\r\n getUserPhoneSplitted: (phone, oldCountry = \"\") => {\r\n const googlePhouneUtilInstance = PhoneNumberUtil.getInstance();\r\n if (Config.isDevMode()) {\r\n console.log(\"googlePhouneUtilInstance\", googlePhouneUtilInstance);\r\n }\r\n const allRegions = googlePhouneUtilInstance.getSupportedRegions();\r\n // console.log(\"allRegions\", allRegions);\r\n try {\r\n const parsedPhone = googlePhouneUtilInstance.parse(phone);\r\n // if (Config.isDevMode()) {\r\n // console.log(\"parsedPhone\", parsedPhone);\r\n // }\r\n const phoneCountry = oldCountry && allRegions.includes(oldCountry)\r\n && googlePhouneUtilInstance.isValidNumberForRegion(parsedPhone, oldCountry)\r\n ? oldCountry\r\n : allRegions.find(regionCode => googlePhouneUtilInstance.isValidNumberForRegion(parsedPhone, regionCode)) || \"\"\r\n // console.log(\"phoneCountry\", phoneCountry);\r\n return {\r\n country: {\r\n dialCode: \"\" + parsedPhone.getCountryCode(),\r\n iso2: phoneCountry.toLowerCase()\r\n },\r\n phoneNumber: \"\" + parsedPhone.getNationalNumber() // we keep it as as string\r\n }\r\n } catch (ex) {\r\n if (Config.isDevMode()) {\r\n console.log(\"couldn't parse the phone\", phone);\r\n }\r\n }\r\n const phoneSplitted = phone ? phone.match(/(\\+(\\d.*?)\\s)?(.*)/) : [];\r\n return {\r\n phoneNumber: phoneSplitted[3] || phone || \"\"\r\n }\r\n },\r\n parseUserResponse: function(responseData, oldCountry = \"\") {\r\n const {phoneNumber, country} = this.getUserPhoneSplitted(responseData.values.phone, oldCountry || responseData.values.country || \"\");\r\n const newUserInfo = {\r\n email: responseData.email,\r\n firstName: responseData.values.firstName,\r\n lastName: responseData.values.lastName,\r\n phoneNumber,\r\n postal: responseData.values.postal,\r\n isNew: false,\r\n password: \"\"\r\n };\r\n if (country) {\r\n newUserInfo.country = country;\r\n }\r\n [\"address1\", \"address2\", \"firstName\", \"lastName\", \"postal\", \"city\", \"provence\"].forEach(key => {\r\n if (responseData.values && responseData.values[key]) {\r\n const realKey = (key === \"provence\") ? \"state\" : key;\r\n newUserInfo[realKey] = responseData.values[key] === \"N/A\" ? \"\" : responseData.values[key]\r\n }\r\n })\r\n return newUserInfo\r\n },\r\n parseShippingAndBillingResponse: function(responseData) {\r\n const {billingAddress, shippingAddress, billingSameAsShipping} = responseData;\r\n return {\r\n shippingAddress: {\r\n fullName: shippingAddress ? shippingAddress.name : \"\",\r\n address1: shippingAddress ? shippingAddress.address1 : \"\",\r\n address2: shippingAddress ? shippingAddress.address2 : \"\",\r\n city: shippingAddress ? shippingAddress.city : \"\",\r\n state: shippingAddress ? shippingAddress.state : \"\",\r\n postal: shippingAddress ? shippingAddress.zip : \"\"\r\n },\r\n billingAddress: {\r\n fullName: billingAddress ? billingAddress.name : \"\",\r\n address1: billingAddress ? billingAddress.address1 : \"\",\r\n address2: billingAddress ? billingAddress.address2 : \"\",\r\n city: billingAddress ? billingAddress.city : \"\",\r\n state: billingAddress ? billingAddress.state : \"\",\r\n postal: billingAddress ? billingAddress.zip : \"\"\r\n },\r\n billingSameAsShipping: !!billingSameAsShipping, // in case it comes undefined\r\n }\r\n },\r\n isMobile: () => {\r\n return (/(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|ipad|iris|kindle|Android|Silk|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(navigator.userAgent)\r\n // eslint-disable-next-line no-useless-escape\r\n || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(navigator.userAgent.substr(0, 4)))\r\n },\r\n getRandomInt(min, max) {\r\n return Math.floor(Math.random() * (max - min)) + min;\r\n },\r\n /**\r\n * Checks input value on errors, returns all errors array\r\n * @param currentValue {string|number}\r\n * @param property {string}\r\n * @param fabricatorData {object}\r\n * @returns {array}\r\n */\r\n getValidationErrors(currentValue, property, fabricatorData) {\r\n const errors = [];\r\n\r\n if (fabricatorData.isCaesarStone) {\r\n switch (property) {\r\n case \"lastName\": {\r\n if (!currentValue) {\r\n errors.push(\"assignPopup.errors.fieldRequired\");\r\n return errors\r\n }\r\n if (currentValue.length === 1) {\r\n errors.push(\"assignPopup.errors.shortName\");\r\n } else if (currentValue.length > 50) {\r\n errors.push(\"assignPopup.errors.longName\");\r\n }\r\n if (!/^[A-Z\\s\\'\\-\\&\\.a-z]+$/.test(currentValue)) {\r\n errors.push(\"assignPopup.errors.nameIsIncorrect\");\r\n }\r\n break;\r\n }\r\n case \"city\":\r\n case \"state\": {\r\n if (!currentValue) {\r\n errors.push(\"assignPopup.errors.fieldRequired\");\r\n return errors\r\n }\r\n break;\r\n }\r\n }\r\n return errors\r\n }\r\n\r\n switch (property) {\r\n case \"firstName\": {\r\n if (!currentValue) {\r\n errors.push(\"assignPopup.errors.fieldRequired\");\r\n return errors\r\n }\r\n if (currentValue.length === 1) {\r\n errors.push(\"assignPopup.errors.shortName\");\r\n } else if (currentValue.length > 50) {\r\n errors.push(\"assignPopup.errors.longName\");\r\n }\r\n if (!/^[A-Z\\s\\'\\-\\&\\.a-z]+$/.test(currentValue)) {\r\n errors.push(\"assignPopup.errors.nameIsIncorrect\");\r\n }\r\n break;\r\n }\r\n case \"email\": {\r\n if (!currentValue) {\r\n errors.push(\"assignPopup.errors.fieldRequired\");\r\n return errors\r\n }\r\n if (!/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}$/i.test(currentValue)) {\r\n errors.push(\"assignPopup.errors.invalidEmail\");\r\n }\r\n break;\r\n }\r\n case \"phoneNumber\": {\r\n if (!currentValue) {\r\n errors.push(\"assignPopup.errors.fieldRequired\");\r\n return errors\r\n }\r\n // we have another check, isPhoneNumber\r\n // if (!/^[\\+]?[(]?[0-9]{3}[)]?[-\\s\\.]?[0-9]{3}[-\\s\\.]?[0-9]{4,6}$/.test(currentValue)) {\r\n // errors.push(\"assignPopup.errors.invalidEmail\");\r\n // }\r\n break;\r\n }\r\n case \"postal\": {\r\n if (!currentValue) {\r\n errors.push(\"assignPopup.errors.fieldRequired\");\r\n return errors\r\n }\r\n if (!this.isZip(currentValue)) {\r\n errors.push(\"assignPopup.errors.incorrectPostal\");\r\n return errors\r\n }\r\n break;\r\n }\r\n case \"phone2\": {\r\n if (currentValue.length > 20) {\r\n errors.push(\"assignPopup.errors.phoneNumberIsTooLong\");\r\n }\r\n break;\r\n }\r\n }\r\n return errors\r\n },\r\n hasErrors: (errorsObject) => {\r\n return !!(Object.keys(errorsObject).length && Object.keys(errorsObject).some(key => errorsObject[key] && errorsObject[key].length))\r\n },\r\n textSubStringEllipsis: (text, length) => {\r\n if (!text || !length || (text.length < length)) {\r\n return text || \"\"\r\n }\r\n return text.substring(0, length) + \"...\"\r\n },\r\n getUrlFromString: (text) => {\r\n if (!text) {\r\n return \"\"\r\n }\r\n return text.toLowerCase().replace(/ /g, \"-\")\r\n }\r\n};\r\n\r\n","import {hashHistory} from \"react-router\";\r\n\r\nimport store from \"../store\";\r\nimport * as types from \"../actions/actionTypes\";\r\nimport {\r\n hideUserPopup,\r\n changeMessageBoxState,\r\n} from \"../actions/actionFunctions\";\r\nimport {\r\n setAfterContractSignCallback\r\n} from \"../actions/contractsActions\";\r\nimport {loaderDisable, loaderEnable} from \"../bvcomponents/ui/loaderView\";\r\nimport JsonApi from \"./jsonApi\";\r\nimport {IS_OFFLINE_MODE} from \"../config\";\r\nimport {shouldUseContractSigning} from \"../bvcomponents/popups/contractSign/contractsFunctions\";\r\nimport {ROUTES} from \"../routes\";\r\n\r\nconst _checkNetworkErrorMessage = (message) => {\r\n // includes, because it can be \"Network Error\" or \"Server Error: Error: Network Error\"\r\n return message && (message === \"Network Error\" || (message.includes && message.includes(\"Network Error\"))\r\n || (message.message && message.message.includes(\"Network Error\"))) && IS_OFFLINE_MODE\r\n}\r\n\r\n/**\r\n * renderErrorPopup can display retry connection and sign contract buttons\r\n * @param message {string}\r\n * @param title {string}\r\n * @param retryConnectionFunction {function}\r\n * @param showContractSignOnError {boolean}\r\n * @param closeButtonCallback {function}\r\n * @param afterContractSignCallback {function}\r\n */\r\nexport const renderErrorPopup = (message,\r\n title = \"messageBox.defaultTitle\",\r\n retryConnectionFunction = null,\r\n showContractSignOnError = false,\r\n closeButtonCallback = null,\r\n afterContractSignCallback = null) => {\r\n if (_checkNetworkErrorMessage(message)) {\r\n message = \"noInternetText\";\r\n title = \"noInternetTitle\";\r\n }\r\n const closeMessageBox = () => {\r\n store.dispatch(changeMessageBoxState({\r\n visible: false,\r\n }));\r\n }\r\n const buttons = [{\r\n text: message === \"noInternetText\" ? \"messageBox.closeButton\" : \"messageBox.buttonOk\",\r\n color: message === \"noInternetText\" ? \"blue\" : \"red\",\r\n click: () => {\r\n closeMessageBox();\r\n if (closeButtonCallback) {\r\n closeButtonCallback()\r\n }\r\n }\r\n }];\r\n if (message === \"noInternetText\") {\r\n if (showContractSignOnError) {\r\n const {fabricatorState, contractSigningState} = store.getState();\r\n const needContractSignDocument = IS_OFFLINE_MODE\r\n && shouldUseContractSigning(fabricatorState.settings, contractSigningState.contractsList);\r\n if (needContractSignDocument) {\r\n buttons.push({\r\n text: \"messageBox.fillContract\",\r\n color: \"green\",\r\n click: () => {\r\n closeMessageBox();\r\n // store.dispatch(showContractSigning(true, () => {}));\r\n if (afterContractSignCallback) {\r\n store.dispatch(setAfterContractSignCallback(afterContractSignCallback))\r\n }\r\n hashHistory.push(ROUTES.contract);\r\n }\r\n })\r\n }\r\n }\r\n if (retryConnectionFunction) {\r\n buttons.push({\r\n text: \"messageBox.retryConnection\",\r\n color: \"green\",\r\n click: () => {\r\n closeMessageBox();\r\n retryConnectionFunction();\r\n }\r\n })\r\n }\r\n }\r\n store.dispatch({\r\n type: types.CHANGE_MESSAGE_BOX,\r\n payload: {\r\n visible: true,\r\n title,\r\n message,\r\n error: message !== \"noInternetText\",\r\n newStyles: true,\r\n buttons\r\n }\r\n });\r\n};\r\n\r\nexport const renderMessagePopup = (message) => {\r\n let title = \"messageBox.defaultTitle\";\r\n if (_checkNetworkErrorMessage(message)) {\r\n message = \"noInternetText\";\r\n title = \"noInternetTitle\";\r\n }\r\n store.dispatch({\r\n type: types.CHANGE_MESSAGE_BOX,\r\n payload: {\r\n visible: true,\r\n title,\r\n message,\r\n error: false,\r\n inline: false,\r\n buttons: [{\r\n text: \"messageBox.buttonOk\",\r\n color: \"blue\",\r\n click: () => {\r\n store.dispatch({\r\n type: types.CHANGE_MESSAGE_BOX,\r\n payload: {\r\n visible: false,\r\n }\r\n });\r\n }\r\n }]\r\n }\r\n });\r\n};\r\n\r\nexport const renderAccountNotActivatedErrorPopup = (message, email) => {\r\n store.dispatch({\r\n type: types.CHANGE_MESSAGE_BOX,\r\n payload: {\r\n visible: true,\r\n message,\r\n error: true,\r\n inline: false,\r\n buttons: [{\r\n text: \"userPopup.messageBox.resendActivationEmailText\",\r\n color: \"green\",\r\n click: () => {\r\n store.dispatch(hideUserPopup());\r\n loaderEnable(\"loader.resendActivationLinkText\");\r\n JsonApi.resendActivationEmail(email)\r\n .then(() => {\r\n loaderDisable();\r\n renderMessagePopup(\"userPopup.messageBox.resendActivationEmailSuccess\");\r\n });\r\n }\r\n }, {\r\n text: \"messageBox.buttonOk\",\r\n color: \"red\",\r\n click: () => {\r\n store.dispatch(hideUserPopup());\r\n }\r\n }]\r\n }\r\n })\r\n};\r\n\r\nexport const renderConfirmPopup = (confirmPopupType, tag, confirmPopupOpened = true) => {\r\n store.dispatch({\r\n type: types.TOGGLE_CONFIRM_POPUP,\r\n payload: {\r\n confirmPopupOpened,\r\n confirmPopupType,\r\n confirmPopupTag: {...tag}\r\n }\r\n });\r\n};\r\n","import uuid from \"uuid\";\r\n\r\nimport * as types from './actionTypes';\r\nimport {clearCart, setJobId} from \"./actionFunctions\";\r\nimport {setReceiptUrl} from \"./printFunctions\";\r\nimport {setAmazonImageUrl} from \"./serverFunctions\";\r\nimport {setWizardSelectedValues} from \"../visit/wizardLogic/wizardActions\";\r\nimport {setWizardActiveStep, updateAllWizardValues} from \"./wizardFunctions\";\r\nimport {setActiveQuoteIndex, setQuotes} from \"./roomsFunctions\";\r\n\r\nexport const showOrderCompletePopup = (orderCompletePopupVisible) => ({\r\n type: types.SHOW_ORDER_COMPLETE_POPUP,\r\n payload: {orderCompletePopupVisible}\r\n})\r\n\r\nexport const toggleShowMobileQuotes = (showMobileQuotes) => ({\r\n type: types.TOGGLE_SHOW_MOBILE_QUOTES,\r\n payload: {showMobileQuotes}\r\n})\r\n\r\nexport const toggleShowAllQuotesCartItemsList = (showAllQuotesCartItemsList) => ({\r\n type: types.TOGGLE_SHOW_ALL_QUOTES_CART_ITEMS_LIST,\r\n payload: {showAllQuotesCartItemsList}\r\n})\r\n\r\nexport const getMinimumChargeCartItem = (fromCartItem, onlyMinimum = false, quantity = 1) => {\r\n const {selectionGroup, partId, currentQuote, } = fromCartItem;\r\n const newDbFeature = Object.assign({}, fromCartItem.cartFeature.dbFeature, {\r\n id: 1,\r\n customDisplayName: \"additionalCartItem.minimumCharge\",\r\n displayName: \"additionalCartItem.minimumCharge\",\r\n sharedFeatureName: \"additionalCartItem.minimumCharge\",\r\n });\r\n if (onlyMinimum) {\r\n newDbFeature.cost = 375;\r\n newDbFeature.costplus = 375;\r\n newDbFeature.stonePricingId = null;\r\n }\r\n let minCartItem = {\r\n id: uuid.v4(),\r\n isEmpty: false,\r\n isMinimumCharge: true,\r\n isMinimumChargeItems: !onlyMinimum,\r\n selectionGroup,\r\n partId,\r\n currentQuote,\r\n quantity,\r\n cartFeature: Object.assign({}, fromCartItem.cartFeature, {\r\n fromFeatureName: fromCartItem.cartFeature.getFeatureName(),\r\n partName: \"additionalCartItem.minimumCharge\",\r\n _customDisplayName: \"additionalCartItem.minimumCharge\",\r\n _countertopGroupsCustomDisplayName: \"additionalCartItem.minimumCharge\",\r\n metaData: {},\r\n notesList: {},\r\n getCountertopGroupsSplittedFeatureName: function () {\r\n return this.partName\r\n },\r\n getSplittedFeatureName: function () {\r\n return this.partName\r\n },\r\n getFeatureName: function () {\r\n return this.partName\r\n },\r\n dbFeature: newDbFeature,\r\n })\r\n }\r\n if (fromCartItem.fromWizardId || minCartItem.fromWizardGroupId) { // just in case fromWizardId is 0\r\n minCartItem.fromWizardId = fromCartItem.fromWizardId; // this is needed to prevent showing minimum cart item ↓\r\n minCartItem.fromWizardStep = fromCartItem.fromWizardStep; // in different wizards in advanced quoting ↓\r\n minCartItem.fromWizardGroupId = fromCartItem.fromWizardGroupId; // for the same groups\r\n }\r\n return minCartItem\r\n};\r\n\r\nexport const setCartFooterActiveButtonIndex = (cartFooterActiveButtonIndex) => ({\r\n type: types.SET_CART_FOOTER_ACTIVE_BUTTON_INDEX,\r\n payload: {cartFooterActiveButtonIndex}\r\n})\r\n\r\nexport const setCartItemEditFeature = (cartItemEditFeature) => ({\r\n type: types.SET_CART_ITEM_EDIT_FEATURE,\r\n payload: {cartItemEditFeature}\r\n})\r\n\r\nexport const setLookRemovedCartItems = (lookRemovedCartItems) => ({\r\n type: types.SET_LOOK_REMOVED_CART_ITEMS,\r\n payload: {lookRemovedCartItems}\r\n})\r\n\r\nexport const setCItemsAddedToParentCart = (cartItems) => ({\r\n type: types.SET_CART_ITEMS_ADDED_TO_PARENT_CART,\r\n payload: {cartItems}\r\n})\r\n\r\nexport const changeAllCartItems = (cartItems) => ({\r\n type: types.CHANGE_ALL_CART_ITEMS,\r\n payload: {cartItems}\r\n})\r\n\r\nexport const setSureTax = (sureTax) => ({\r\n type: types.SET_SURE_TAX,\r\n payload: {sureTax}\r\n});\r\nexport const setSureTaxLoading = (sureTaxLoading) => ({\r\n type: types.SET_SURE_TAX_LOADING,\r\n payload: {sureTaxLoading}\r\n});\r\nexport const setDeliveryList = (deliveryList) => ({\r\n type: types.SET_DELIVERY_LIST,\r\n payload: {deliveryList}\r\n});\r\n\r\nexport const clearCartAndStartOver = (fullClear = false) => {\r\n return (dispatch) => {\r\n if (fullClear) {\r\n dispatch(setWizardSelectedValues({}, true));\r\n dispatch(setWizardActiveStep(0));\r\n dispatch(updateAllWizardValues([]));\r\n dispatch(setActiveQuoteIndex(0));\r\n dispatch(setQuotes([{}]));\r\n }\r\n dispatch(clearCart()); // clear cart\r\n dispatch(setReceiptUrl(\"\")); // clear receipt\r\n dispatch(setAmazonImageUrl(\"\")); // not sure if it is needed here, but let it be\r\n dispatch(setJobId(0)); // erase current job\r\n document.kvConfig.jobId = null; // erase current job\r\n }\r\n};\r\n\r\nexport const setManualTax = (manualTax) => ({\r\n type: types.SET_MANUAL_TAX,\r\n payload: {manualTax}\r\n});\r\n\r\nexport const setMarkUpLogic = (markUpLogic) => ({\r\n type: types.SET_MARK_UP_LOGIC,\r\n payload: {markUpLogic}\r\n});\r\n\r\n","import React from 'react';\r\nimport PropTypes from \"prop-types\";\r\nimport MaterialSpinner from \"./materialSpinner\";\r\nimport {IS_LIXIL_UI} from \"../../config\";\r\n\r\nconst LoadingSpinner = (props) => {\r\n if (IS_LIXIL_UI) {\r\n return \r\n }\r\n const size = props.size || \"small\"; //class modifier\r\n return
\r\n};\r\n\r\nLoadingSpinner.propTypes = {\r\n size: PropTypes.string\r\n}\r\n\r\nLoadingSpinner.displayName = 'LoadingSpinner';\r\n\r\nexport default LoadingSpinner;\r\n","import orderBy from \"lodash/orderBy\";\r\nimport {Part} from \"../part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport {cabinetThumbnail} from \"../assets\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\n\r\nimport BottomCabinet from \"../subparts/cabinet/bottomCabinet\";\r\nimport TopCabinet from \"../subparts/cabinet/topCabinet\";\r\nimport CrownMolding from \"../subparts/cabinet/crownMolding\";\r\nimport TopHandle from \"../subparts/cabinet/topHandle\";\r\nimport BottomHandle from \"../subparts/cabinet/bottomHandle\";\r\nimport TopCabinetShadow from \"../subparts/cabinet/topCabinetShadow\";\r\nimport BottomCabinetShadow from \"../subparts/cabinet/bottomCabinetShadow\";\r\n\r\nexport default class Cabinet extends Part {\r\n static id = 'Cabinet';\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Cabinet';\r\n this.partThumbnail = cabinetThumbnail;\r\n this.partThumbnailSize = \"70%\";\r\n this.translateId = \"visualizer.kitchen.cabinet\";\r\n\r\n // related items\r\n this.topCabinet = null;\r\n this.bottomCabinet = null;\r\n this.crownMolding = null;\r\n this.topHandle = null;\r\n this.bottomHandle = null;\r\n this.topCabinetShadow = null;\r\n this.bottomCabinetShadow = null;\r\n }\r\n\r\n load(dbFeature) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Bottom Cabinet\":\r\n relatedItemName = \"bottomCabinet\";\r\n RelatedItemClass = BottomCabinet;\r\n break;\r\n case \"Top Cabinet\":\r\n relatedItemName = \"topCabinet\";\r\n RelatedItemClass = TopCabinet;\r\n break;\r\n case \"Crown Molding\":\r\n relatedItemName = \"crownMolding\";\r\n RelatedItemClass = CrownMolding;\r\n // if (dbFeature.metaData && dbFeature.metaData[\"Parts\"]) {\r\n // relatedItemName = \"crownMolding\";\r\n // RelatedItemClass = CrownMolding;\r\n // }\r\n break;\r\n case \"Top Handle\":\r\n relatedItemName = \"topHandle\";\r\n RelatedItemClass = TopHandle;\r\n break;\r\n case \"Bottom Handle\":\r\n relatedItemName = \"bottomHandle\";\r\n RelatedItemClass = BottomHandle;\r\n break;\r\n case \"Top Cabinet Shadow\":\r\n relatedItemName = \"topCabinetShadow\";\r\n RelatedItemClass = TopCabinetShadow;\r\n break;\r\n case \"Bottom Cabinet Shadow\":\r\n relatedItemName = \"bottomCabinetShadow\";\r\n RelatedItemClass = BottomCabinetShadow;\r\n break;\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n navigationItem() {\r\n return new DesignNavigationItem('Cabinet', this);\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n getRelatedItems() {\r\n return orderBy(this.relatedItems, 'layerPriority');\r\n }\r\n\r\n subParts(withHidden = true, hideWithoutFeatures = false) {\r\n return this.getRelatedItems()\r\n .filter(item => this.filterRelatedItem(item, withHidden))\r\n .filter(item => {\r\n if ((item.partId === \"crown_molding\" || item.partId === \"top_handle\") && hideWithoutFeatures && item.allFeaturesReceived) {\r\n return item.navigationSubItems({}, \"\").length\r\n }\r\n return item\r\n })\r\n .map(_ => new DesignNavigationItem(_.partName, _));\r\n }\r\n\r\n handleSubPartClick() {\r\n\r\n }\r\n\r\n getTopCabinetType() {\r\n if (this.topCabinet && this.topCabinet.activeFeature) {\r\n if (this.topCabinet.activeFeature.dbFeature.metaData[\"Cabinet\"]) {\r\n return this.topCabinet.activeFeature.dbFeature.metaData[\"Cabinet\"][0]\r\n } else {\r\n // console.log(\"no topCabinet metaData!\", this.topCabinet.activeFeature);\r\n return \"\"\r\n }\r\n }\r\n return \"\"\r\n }\r\n\r\n // getTopCabinetLayout() {\r\n //\r\n // if (this.topCabinet && this.topCabinet.activeFeature) {\r\n // if (this.topCabinet.activeFeature.dbFeature.metaData[\"Cabinet\"]) {\r\n // return this.topCabinet.activeFeature.dbFeature.metaData[\"Cabinet\"][0]\r\n // } else {\r\n // // console.log(\"no topCabinet metaData!\", this.topCabinet.activeFeature);\r\n // return \"\"\r\n // }\r\n // }\r\n // return \"ALL\"\r\n // }\r\n\r\n getBottomCabinetType() {\r\n if (this.bottomCabinet && this.bottomCabinet.activeFeature) {\r\n if (this.bottomCabinet.activeFeature.dbFeature.metaData[\"Cabinet\"]) {\r\n return this.bottomCabinet.activeFeature.dbFeature.metaData[\"Cabinet\"][0]\r\n } else {\r\n // console.log(\"no bottomCabinet metaData!\", this.bottomCabinet.activeFeature);\r\n return \"\"\r\n }\r\n }\r\n return \"\"\r\n }\r\n\r\n getTopCabinetApplianceType() {\r\n if (this.topCabinet && this.topCabinet.activeFeature) {\r\n if (this.topCabinet.activeFeature.dbFeature.metaData[\"Appliance\"]) {\r\n return this.topCabinet.activeFeature.dbFeature.metaData[\"Appliance\"][0]\r\n } else {\r\n // console.log(\"no Appliance metaData!\", this.topCabinet.activeFeature);\r\n return \"Hood\"\r\n }\r\n }\r\n return \"Hood\"\r\n }\r\n\r\n getTopCabinetShadowLayout() {\r\n if (this.topCabinet && this.topCabinet.activeFeature && this.topCabinet.activeFeature.dbFeature.metaData[\"CabinetLayout\"]) {\r\n return this.topCabinet.activeFeature.dbFeature.metaData[\"CabinetLayout\"][0]\r\n }\r\n return \"\"\r\n }\r\n\r\n getBottomCabinetApplianceType() {\r\n if (this.bottomCabinet && this.bottomCabinet.activeFeature) {\r\n if (this.bottomCabinet.activeFeature.dbFeature.metaData[\"Appliance\"]) {\r\n return this.bottomCabinet.activeFeature.dbFeature.metaData[\"Appliance\"][0]\r\n } else {\r\n // console.log(\"no Appliance metaData!\", this.bottomCabinet.activeFeature);\r\n return \"Range\"\r\n }\r\n }\r\n return \"Range\"\r\n }\r\n\r\n}\r\n","import {getAvailableSteps, getFeatureGroupFromWizardGroup, navItemIsExcluded} from \"./lookWizardFunctions\";\r\nimport Config, {getCommonVisualizerType} from \"../../../../../config\";\r\nimport {fixWizardItem} from \"./wizardFunctionsCommon\";\r\nimport {\r\n getVisualizerTypeFromSubscription,\r\n hasSubscriptionForRoom\r\n} from \"../../../../../misc/visualizerSwitchingFunctions\";\r\n\r\nexport const getWizardGroupName = (wizardGroup) => {\r\n if (!wizardGroup) {\r\n return \"\"\r\n }\r\n return wizardGroup.title || wizardGroup.customDisplayName || wizardGroup.productCartTitle || wizardGroup.groupName || \"\"\r\n // if (stepName === \"Vanitie\") { // it should be renamed on the backend so no need for that\r\n // stepName = \"Vanity\"\r\n // }\r\n}\r\n\r\n/**\r\n * this returns new wizard steps depending on the current selection\r\n * @param wizardActiveItem {wizardItemInterface}\r\n * @param currentStep {number}\r\n * @param allWizardSelectedValues {object}\r\n * @returns {object}\r\n */\r\nexport const getNextWizardSteps = (wizardActiveItem, currentStep, allWizardSelectedValues) => {\r\n// const oldWizardSteps = getAvailableSteps(wizardActiveItem, oldWizardSelectedValues, true);\r\n\r\n let newValues = {};\r\n Object.keys(allWizardSelectedValues).forEach(key => {\r\n if (+key <= currentStep) {\r\n newValues[key] = allWizardSelectedValues[key] // here we create values object just until the current selected value\r\n }\r\n });\r\n\r\n const afterCurrentSelectionWizardSteps = getAvailableSteps(wizardActiveItem, newValues, true, allWizardSelectedValues);\r\n // const allWizardSteps = getAvailableSteps(wizardActiveItem, allWizardSelectedValues, true);\r\n\r\n // const nextStep = currentStep + 1;\r\n\r\n // if (\r\n // afterCurrentSelectionWizardSteps[nextStep] && allWizardSteps[nextStep]\r\n // && afterCurrentSelectionWizardSteps[nextStep].stepGroups.every((wizardGroup, wizardGroupIndex) => {\r\n // return allWizardSteps[nextStep].stepGroups[wizardGroupIndex] && wizardGroup.id === allWizardSteps[nextStep].stepGroups[wizardGroupIndex].id\r\n // }) && (allWizardSelectedValues[nextStep] && allWizardSelectedValues[nextStep].wizardGroup\r\n // && afterCurrentSelectionWizardSteps[nextStep].stepGroups.some(wizG => allWizardSelectedValues[nextStep].wizardGroup.id === wizG.id))\r\n // ) {\r\n // return allWizardSteps // keep it, as we didn't change the flow\r\n // }\r\n\r\n return afterCurrentSelectionWizardSteps // use new ones, as the flow was changed\r\n\r\n}\r\n\r\n/**\r\n * this returns conflicting with the current selections steps\r\n * @param allWizardSelectedValues {object}\r\n * @param actionPayload {object} // {wizardActiveItem, quoteIndex}\r\n * @param cartItems {[cartItemInterface]}\r\n * @param newWizardSteps {[]}\r\n * @returns {array}\r\n */\r\nexport const getConflictingWizardSteps = (allWizardSelectedValues, actionPayload, cartItems, newWizardSteps) => {\r\n\r\n const {wizardActiveItem, quoteIndex} = actionPayload;\r\n\r\n const currentStep = +Object.keys(actionPayload.wizardSelectedValues)[0];\r\n\r\n let conflictingWizardSteps = [];\r\n\r\n cartItems.forEach(cartItem => {\r\n if (!cartItem.fromWizardGroupId || (cartItem.currentQuote !== quoteIndex) || (cartItem.fromWizardId !== wizardActiveItem.id)) {\r\n return false\r\n }\r\n if ((Object.keys(allWizardSelectedValues).length - 1) === cartItem.fromWizardStep\r\n && (cartItem.fromWizardStep === currentStep)) { // we are reselectecting the same (last selected step), it is not conflicting\r\n return false\r\n }\r\n if (conflictingWizardSteps.some(confObject => confObject.cartItemId === cartItem.id)) { // already added\r\n return false\r\n }\r\n // no more step with this cart item\r\n if (!newWizardSteps.some(step => step.stepGroups.some(wizardGroup => wizardGroup.id === cartItem.fromWizardGroupId))\r\n || !newWizardSteps[cartItem.fromWizardStep]) {\r\n conflictingWizardSteps.push({\r\n stepIndex: cartItem.fromWizardStep,\r\n wizardGroupId: cartItem.fromWizardGroupId,\r\n cartItemId: cartItem.id,\r\n });\r\n } else if (newWizardSteps[cartItem.fromWizardStep + 1] && newWizardSteps[cartItem.fromWizardStep + 1].stepGroups) {\r\n // // here we check if some cart item is added, but his next steps are not anymore in the wizard\r\n //\r\n // // we need to get steps only for before current selected item\r\n // let testValues = {};\r\n // Object.keys(allWizardSelectedValues).forEach(key => {\r\n // if (+key <= cartItem.fromWizardStep) {\r\n // testValues[key] = allWizardSelectedValues[key] // here we create values object just until the current selected value\r\n // }\r\n // });\r\n // const testWizardSteps = getNextWizardSteps(wizardActiveItem, cartItem.fromWizardStep, testValues);\r\n //\r\n // const testGroups = testWizardSteps[cartItem.fromWizardStep + 1] ? testWizardSteps[cartItem.fromWizardStep + 1].stepGroups : null;\r\n // const sameGroupsNew = newWizardSteps[cartItem.fromWizardStep + 1] ? newWizardSteps[cartItem.fromWizardStep + 1].stepGroups : null;\r\n //\r\n // if (testGroups && testGroups.length && sameGroupsNew && sameGroupsNew.length && ((sameGroupsNew.length !== testGroups.length)\r\n // || sameGroupsNew.some((wizardGroup, wizardGroupIndex) => wizardGroup.id !== testGroups[wizardGroupIndex].id))) {\r\n // conflictingWizardSteps.push({\r\n // stepIndex: cartItem.fromWizardStep,\r\n // wizardGroupId: cartItem.fromWizardGroupId,\r\n // cartItemId: cartItem.id,\r\n // });\r\n // }\r\n }\r\n });\r\n\r\n // get current selected wizard value and check if the next one is conflicting - then add the current one to, because it cases the issue\r\n const nextStepKey = currentStep + 1;\r\n if (conflictingWizardSteps.some(confObject => confObject.stepIndex === nextStepKey)) {\r\n cartItems.forEach(cartItem => {\r\n if (!cartItem.fromWizardGroupId || (cartItem.currentQuote !== quoteIndex) || (cartItem.fromWizardId !== wizardActiveItem.id)) {\r\n return false\r\n }\r\n if (conflictingWizardSteps.some(confObject => confObject.cartItemId === cartItem.id)) { // already added\r\n return false\r\n }\r\n // no more step with this cart item\r\n if (cartItem.fromWizardStep === currentStep) {\r\n conflictingWizardSteps.unshift({\r\n stepIndex: cartItem.fromWizardStep,\r\n wizardGroupId: cartItem.fromWizardGroupId,\r\n cartItemId: cartItem.id,\r\n });\r\n }\r\n });\r\n }\r\n\r\n // console.log(\"newWizardSteps\", newWizardSteps);\r\n // console.log(\"conflictingWizardSteps\", conflictingWizardSteps);\r\n\r\n return conflictingWizardSteps\r\n}\r\n\r\n/**\r\n * this changes cart items wizard groups to use new wizard group ids\r\n * @param newWizardSteps {array}\r\n * @param actionPayload {object} // {wizardActiveItem, quoteIndex}\r\n * @param cartItems {[cartItemInterface]}\r\n * @returns {object}\r\n */\r\nexport const switchCartItemsToNewWizardGroups = (newWizardSteps, actionPayload, cartItems) => {\r\n\r\n const {wizardActiveItem, quoteIndex} = actionPayload;\r\n\r\n let shouldReassign = false;\r\n\r\n const newCartItems = cartItems.map(cartItem => {\r\n if (!cartItem.fromWizardGroupId || (cartItem.currentQuote !== quoteIndex) || (cartItem.fromWizardId !== wizardActiveItem.id)) {\r\n return cartItem\r\n }\r\n // no more step with this cart item\r\n if (!newWizardSteps.some(step => step.stepGroups.some(wizardGroup => wizardGroup.id === cartItem.fromWizardGroupId))\r\n || !newWizardSteps[cartItem.fromWizardStep]) {\r\n // here we check all next steps, if there are some step with the same wizardGroup, and it has the cartFeature navItem\r\n newWizardSteps.forEach(step => {\r\n if (!step.stepGroups || !step.stepGroups[0] || (step.stepGroups.length > 1)) {\r\n return\r\n }\r\n let testWizG = step.stepGroups[0];\r\n if (testWizG.groupName !== cartItem.cartFeature.dbFeature.groupName) {\r\n return;\r\n }\r\n if (testWizG.mergedGroups) {\r\n // check only next wizardGroup selectedFeatures, not all of them (merged)\r\n testWizG = testWizG.mergedGroups.find(mergedGroup => mergedGroup.id === step.stepGroups[0].id)\r\n || testWizG.mergedGroups.find(mergedGroup => !navItemIsExcluded({part: cartItem.cartFeature}, mergedGroup))\r\n }\r\n if ((testWizG.mergedGroups && testWizG) || !navItemIsExcluded({part: cartItem.cartFeature}, testWizG)) {\r\n shouldReassign = true;\r\n cartItem.fromWizardStep = step.stepIndex;\r\n cartItem.fromWizardGroupId = testWizG.id;\r\n console.log(\"cartItem changed!\", cartItem);\r\n }\r\n })\r\n }\r\n return cartItem\r\n });\r\n\r\n return {newCartItems, shouldReassign}\r\n}\r\n\r\nexport const selectedWizardGroupIsNotInCurrentStepAnymore = (selectedWizardValue, currentStepGroups) => {\r\n const stepWizGroup = currentStepGroups[0]; // could be merged\r\n const selectedWizardGroup = selectedWizardValue ? selectedWizardValue.wizardGroup : null;\r\n if (currentStepGroups.length > 1 && stepWizGroup && currentStepGroups.some(wG => wG.id === selectedWizardGroup.id)) {\r\n return false\r\n }\r\n return selectedWizardGroup && stepWizGroup && (selectedWizardGroup.id !== stepWizGroup.id)\r\n && (!stepWizGroup.mergedGroups || !stepWizGroup.mergedGroups.length\r\n || !stepWizGroup.mergedGroups.some(mG => mG.id === selectedWizardGroup.id))\r\n}\r\n\r\n/**\r\n * this returns conflicting with the current selections steps\r\n * @param newWizValues {object}\r\n * @param newWizardSteps {array}\r\n // * @param cartItems {[cartItemInterface]}\r\n * @returns {object}\r\n */\r\nexport const changeWizardValuesToUseNewGroups = (newWizValues, newWizardSteps) => {\r\n\r\n let shouldReassignValues = false;\r\n let updatedWizardValues = Object.assign({}, newWizValues);\r\n\r\n Object.keys(updatedWizardValues).forEach(key => { // here we replace wizard values to match new selections! to prevent conflicting\r\n // if there are no wizardGroup anymore in the next flow, but it was selected earlier - set new wizardGroup\r\n if (updatedWizardValues[key].wizardGroup\r\n && updatedWizardValues[key].selectedFeature\r\n && !newWizardSteps.some(step => (step.stepGroups.length === 1) && (step.stepGroups[0].id === updatedWizardValues[key].wizardGroup.id))\r\n && (newWizardSteps[key] && newWizardSteps[key].stepGroups && (newWizardSteps[key].stepGroups.length === 1)\r\n && (updatedWizardValues[key].wizardGroup.groupName === newWizardSteps[key].stepGroups[0].groupName)\r\n && !navItemIsExcluded({part: updatedWizardValues[key].selectedFeature}, newWizardSteps[key].stepGroups[0])\r\n )) {\r\n shouldReassignValues = true;\r\n updatedWizardValues[key].wizardGroup = newWizardSteps[key].stepGroups[0];\r\n // console.log(\"wizardGroup updated!\", updatedWizardValues[key]);\r\n }\r\n });\r\n\r\n const erasedValues = {};\r\n\r\n // here we go through all new wizard steps - and check old values - if there are something selected and it is not\r\n // anymore in the flow - but there is a step - assign new wizard selected value\r\n newWizardSteps.forEach(newWizardStep => {\r\n if (newWizardStep.stepGroups.length !== 1 || newWizardStep.stepGroups[0].nodeType !== \"group\") {\r\n return\r\n }\r\n const stepWizGroup = newWizardStep.stepGroups[0]; // could be merged\r\n if (!updatedWizardValues[newWizardStep.stepIndex] ||\r\n (updatedWizardValues[newWizardStep.stepIndex]\r\n && updatedWizardValues[newWizardStep.stepIndex].wizardGroup\r\n && (updatedWizardValues[newWizardStep.stepIndex].wizardGroup.groupName !== stepWizGroup.groupName\r\n // we still need to get inside if group is not valid - to erase it as we don't need it! we will assign a new one below if needed\r\n || selectedWizardGroupIsNotInCurrentStepAnymore(updatedWizardValues[newWizardStep.stepIndex], newWizardStep.stepGroups))\r\n )) {\r\n // we have a step and the value selected is incorrect - go ahead and find something similar\r\n let updated = false;\r\n Object.keys(newWizValues).forEach(key => { // here we replace wizard values to match new selections! to prevent conflicting\r\n // if there are no wizardGroup anymore in the next flow, but it was selected earlier - set new wizardGroup\r\n if (newWizValues[key].wizardGroup\r\n && newWizValues[key].selectedFeature\r\n && newWizValues[key].wizardGroup.groupName === stepWizGroup.groupName\r\n && (!newWizardSteps[key] || (newWizardSteps[key].stepGroups.length !== 1) || newWizValues[key].wizardGroup.groupName !== newWizardSteps[key].stepGroups[0].groupName)\r\n && !navItemIsExcluded({part: newWizValues[key].selectedFeature}, stepWizGroup)) {\r\n\r\n shouldReassignValues = true;\r\n erasedValues[newWizardStep.stepIndex] = Object.assign({}, updatedWizardValues[newWizardStep.stepIndex]); // save it first, to restore below\r\n updatedWizardValues[newWizardStep.stepIndex] = Object.assign({}, newWizValues[key], {\r\n wizardGroup: stepWizGroup,\r\n });\r\n updated = true;\r\n // updatedWizardValues[key] = {}; // clear old step\r\n // console.log(\"wizardGroup updated throw all steps search!\", updatedWizardValues[key]);\r\n }\r\n });\r\n if (!updated) {\r\n erasedValues[newWizardStep.stepIndex] = Object.assign({}, updatedWizardValues[newWizardStep.stepIndex]); // save it first, to restore below\r\n updatedWizardValues[newWizardStep.stepIndex] = {};\r\n delete updatedWizardValues[newWizardStep.stepIndex];\r\n }\r\n }\r\n });\r\n\r\n // console.log(\"erasedValues\", erasedValues);\r\n\r\n // 3) here we go through again through steps and check if we erased something but it exist in the next flow\r\n newWizardSteps.forEach(newWizardStep => {\r\n if (newWizardStep.stepGroups.length !== 1 || newWizardStep.stepGroups[0].nodeType !== \"group\") {\r\n return\r\n }\r\n const stepWizGroup = newWizardStep.stepGroups[0]; // could be merged\r\n if (!updatedWizardValues[newWizardStep] || !updatedWizardValues[newWizardStep].wizardGroup) {\r\n Object.keys(erasedValues).forEach(key => {\r\n if (erasedValues[key].wizardGroup && erasedValues[key].selectedFeature\r\n && (erasedValues[key].wizardGroup.groupName === stepWizGroup.groupName)\r\n && !navItemIsExcluded({part: erasedValues[key].selectedFeature}, stepWizGroup)) {\r\n updatedWizardValues[newWizardStep.stepIndex] = Object.assign({}, newWizValues[key], {\r\n wizardGroup: stepWizGroup,\r\n });\r\n // console.log(\"USE ERASED LOGIC\", updatedWizardValues[newWizardStep.stepIndex]);\r\n erasedValues[key] = {}; // use it only once! then delete\r\n }\r\n })\r\n }\r\n });\r\n\r\n // now go again and set missing wizard groups\r\n Object.keys(updatedWizardValues).forEach(key => {\r\n if (!updatedWizardValues[key] || !updatedWizardValues[key].wizardGroup || !newWizardSteps[key]\r\n || !newWizardSteps[key].stepGroups.length || (newWizardSteps[key].stepGroups.length !== 1)) { // we set wizard group only if the next one is selected\r\n return\r\n }\r\n // const nextSelectedValue = updatedWizardValues[key + 1];\r\n // const selectedWizGroup = updatedWizardValues[key].wizardGroup;\r\n const newWizGroup = newWizardSteps[key].stepGroups[0];\r\n\r\n if (selectedWizardGroupIsNotInCurrentStepAnymore(updatedWizardValues[key], newWizardSteps[key].stepGroups)) {\r\n // set wizard group as we might have cart items added to this group, we can't have it disabled\r\n updatedWizardValues[key] = {\r\n wizardGroup: newWizGroup\r\n }\r\n }\r\n });\r\n\r\n //last update - make sure that every wizard group is selected if we have cart item in the group below\r\n // const lastSelectedStep = Object.keys(updatedWizardValues).reverse().find(lastKey => updatedWizardValues[lastKey] && updatedWizardValues[lastKey].wizardGroup);\r\n Object.keys(updatedWizardValues).forEach(key => {\r\n if (!updatedWizardValues[key].wizardGroup && newWizardSteps[key] && newWizardSteps[key].stepGroups.length\r\n && (newWizardSteps[key].stepGroups.length === 1) && updatedWizardValues[+key + 1] && updatedWizardValues[+key + 1].wizardGroup) {\r\n // we set wizard group only if the next one is selected\r\n updatedWizardValues[key] = {\r\n wizardGroup: newWizardSteps[key].stepGroups[0]\r\n }\r\n }\r\n });\r\n\r\n return {updatedWizardValues, shouldReassignValues}\r\n}\r\n\r\n/**\r\n * @param partId {string}\r\n * @param featureGroup {featureGroupInterface}\r\n * @param isBathroom {boolean}\r\n * @returns {boolean}\r\n */\r\nconst checkFeatureGroupForOpposite = (partId, featureGroup, isBathroom) => {\r\n switch (partId) {\r\n case \"backsplash\":\r\n return isBathroom && (featureGroup.partId === \"vanity_backsplash\")\r\n case \"center_island_edge\":\r\n return featureGroup.partId === \"edge_profile\"\r\n case \"edge_profile\":\r\n return featureGroup.partId === \"center_island_edge\"\r\n case \"countertop\":\r\n return (featureGroup.partId === \"center_island_countertop\") || (isBathroom && (featureGroup.partId === \"vanity_countertop\"))\r\n case \"center_island_countertop\":\r\n return (featureGroup.partId === \"countertop\") || (isBathroom && (featureGroup.partId === \"vanity_countertop\"))\r\n case \"corners\":\r\n return featureGroup.partId === \"radius\"\r\n default:\r\n return featureGroup.partId === partId\r\n }\r\n}\r\n\r\n/**\r\n * @param wizardSteps {array}\r\n * @param cartItem {cartItemInterface}\r\n * @returns foundStep {object}\r\n */\r\nexport const getWizardStepFromCartItemFeature = (wizardSteps, cartItem) => {\r\n let foundStep = wizardSteps.find(step => step.stepGroups.some(wizardGroup => {\r\n const featureGroup = getFeatureGroupFromWizardGroup(wizardGroup);\r\n return featureGroup && featureGroup.partId === cartItem.partId\r\n }));\r\n if (!foundStep) {\r\n const isBathroom = getCommonVisualizerType() === \"bathroom\";\r\n foundStep = wizardSteps.find(step => step.stepGroups.some(wizardGroup => {\r\n const featureGroup = getFeatureGroupFromWizardGroup(wizardGroup);\r\n if (!featureGroup) {\r\n return false\r\n }\r\n return checkFeatureGroupForOpposite(cartItem.partId, featureGroup, isBathroom)\r\n }));\r\n }\r\n return foundStep\r\n}\r\n\r\n/**\r\n * @param wizardSteps {array}\r\n * @param partId {string}\r\n * @returns {object}\r\n */\r\nexport const getFeatureGroupFromWizardSteps = (wizardSteps, partId) => {\r\n for (const step of wizardSteps) {\r\n for (const wizardGroup of step.stepGroups) {\r\n const featureGroup = getFeatureGroupFromWizardGroup(wizardGroup);\r\n if (featureGroup && featureGroup.partId === partId) {\r\n return {part: featureGroup}\r\n }\r\n }\r\n }\r\n const isBathroom = getCommonVisualizerType() === \"bathroom\";\r\n for (const step of wizardSteps) {\r\n for (const wizardGroup of step.stepGroups) {\r\n const featureGroup = getFeatureGroupFromWizardGroup(wizardGroup);\r\n if (featureGroup && checkFeatureGroupForOpposite(partId, featureGroup, isBathroom)) {\r\n return {part: featureGroup}\r\n }\r\n }\r\n }\r\n}\r\n\r\nconst parseWizardData = (wizardData) => {\r\n let allItems = typeof wizardData === \"string\" ? JSON.parse(wizardData) : [];\r\n if (typeof wizardData === \"object\" && (wizardData != null)) {\r\n Object.keys(wizardData).forEach(key => {\r\n allItems = [...allItems, ...JSON.parse(wizardData[key])]\r\n });\r\n }\r\n return allItems\r\n}\r\n\r\n/**\r\n * @param mainResponse\r\n * @param parseOnly {boolean}\r\n * @param newVisualizerType {string}\r\n * @returns {array}\r\n */\r\nexport const getParsedWizardList = (mainResponse, parseOnly, newVisualizerType = \"\") => {\r\n const {wizardData, wizardDataV2} = mainResponse;\r\n const allItems = parseWizardData(wizardDataV2 || wizardData); // if we have v2 - use it, else old support\r\n if (Config.isDevMode()) {\r\n console.log(\"all wizardItems \", allItems);\r\n }\r\n if (parseOnly) {\r\n return allItems.filter(wizardItem => wizardItem.enabled)\r\n }\r\n const wizardList = allItems\r\n .filter(wizardItem => wizardItem.enabled)\r\n .map((wizardItem, wizardItemIndex) => {\r\n wizardItem = fixWizardItem(wizardItem, wizardItemIndex, false, newVisualizerType);\r\n if (wizardItem.visualizer === \"all\") {\r\n wizardItem.visualizer = getCommonVisualizerType(newVisualizerType); // we keep same wizard as different\r\n wizardItem.id = wizardItem.id + 100;\r\n }\r\n wizardItem.id = getUpdatedWizardId(wizardItem.visualizer, wizardItem.id);\r\n return wizardItem\r\n });\r\n console.log(\"wizardList\", wizardList);\r\n return wizardList\r\n}\r\n\r\n/**\r\n * same function for wizard item and cart item on parse - it returns new wizard id depending on the visualizer\r\n * @param visualizerType {string}\r\n * @param oldWizardItemId {number}\r\n * @returns {number}\r\n */\r\nexport const getUpdatedWizardId = (visualizerType, oldWizardItemId) => {\r\n switch (getCommonVisualizerType(visualizerType)) {\r\n case \"laundryroom\":\r\n if (oldWizardItemId < 3000) {\r\n return oldWizardItemId + 3000 // increase because we don't want to have same id's\r\n }\r\n break;\r\n case \"fireplace\":\r\n if (oldWizardItemId < 2000) {\r\n return oldWizardItemId + 2000 // increase because we don't want to have same id's\r\n }\r\n break;\r\n case \"bathroom\":\r\n if (oldWizardItemId < 1000) {\r\n return oldWizardItemId + 1000 // increase because we don't want to have same id's\r\n }\r\n break;\r\n default:\r\n return oldWizardItemId // keep as is for kitchen\r\n }\r\n}\r\n\r\n/**\r\n * returns lowercased visualizer (bathroom | kitchen | fireplace) same as in the wizard item depending on wizardItem id\r\n * @param wizardItem {wizardItemInterface | wizardAllObjectInterface}\r\n * @param withToolVersion {boolean}\r\n * @returns {string} bathroom | kitchen | fireplace\r\n */\r\nexport const getWizardVisualizerType = (wizardItem, withToolVersion = false) => {\r\n\r\n let commonName = wizardItem.visualizer;\r\n\r\n if (!commonName) {\r\n commonName = \"kitchen\";\r\n const wizardItemId = wizardItem.id || wizardItem.wizardItemId;\r\n if (wizardItemId > 3000) {\r\n commonName = \"laundryroom\";\r\n } if (wizardItemId > 2000) {\r\n commonName = \"fireplace\";\r\n } else if (wizardItemId > 1000) {\r\n commonName = \"bathroom\";\r\n }\r\n }\r\n\r\n if (withToolVersion) {\r\n const existingSubscription = hasSubscriptionForRoom(commonName);\r\n if (existingSubscription) {\r\n return getVisualizerTypeFromSubscription(existingSubscription);\r\n }\r\n return commonName\r\n }\r\n return commonName\r\n}\r\n\r\n/**\r\n * checks if current wizard can be used in the visualizer\r\n * @param wizardItem {wizardItemInterface | wizardAllObjectInterface}\r\n * @param visualizerType {string}\r\n * @returns {boolean}\r\n */\r\nexport const isSameVisualizerWizard = (wizardItem, visualizerType = getCommonVisualizerType()) => {\r\n if (wizardItem.visualizer === \"all\") { // should not ever be here\r\n return true\r\n }\r\n if (wizardItem.visualizer) {\r\n return wizardItem.visualizer === visualizerType\r\n }\r\n return getWizardVisualizerType(wizardItem) === visualizerType\r\n}\r\n","import React from \"react\";\r\n\r\nexport const PrintDocumentContext = React.createContext({\r\n messages: {}\r\n});\r\n","import EventManager from \"../../store/sqftEventManager\";\r\nimport {renderMeasurementsAroundSnappedShapes, renderSlabRightPart, renderSlabWorkspace} from \"./sqftSlabDraw\";\r\nimport workspace from \"../workspace\";\r\nimport SlabAdditionalShapes from \"./slabAdditionalShapes\";\r\nimport sqftSlabManager from \"../../store/sqftSlabManager\";\r\nimport StaticImage from \"../workspace/image/StaticImage\";\r\nimport workspaceZoom from \"../workspaceZoom\";\r\nimport sqftShape from \"../shapes/sqftShape\";\r\nimport {getClosestHigherNumber} from \"../../../../helpers/sqftHelper\";\r\nimport store from \"../../../../../../store\";\r\n\r\nconst SlabWorkspace = function() {\r\n this.eventManager = EventManager;\r\n this.objectName = {name: 'SlabWorkspace'};\r\n this.leftImagePos = {\r\n x: 0,\r\n y: 0,\r\n };\r\n this.state = {\r\n inEnabled: false,\r\n mouseDown: false,\r\n mouseDownPosition: null,\r\n isCenterButtonRightPartHovered: false,\r\n isCenterButtonLeftPartHovered: false,\r\n rightPartZoomedShapeId: 1,\r\n leftPartZoomedShapeId: 1,\r\n isSlabPlaceHolderPresent: false,\r\n }\r\n this.pos = {\r\n x: 0,\r\n y: 0,\r\n };\r\n this.slabAdditionalShapes = new SlabAdditionalShapes();\r\n this.measurementPoints = [];\r\n this.shapeOffset = null;\r\n this.centerButtonRightPart = null;\r\n this.centerButtonLeftPart = null;\r\n\r\n this.getOffset = function() {\r\n return this.getCenter()\r\n };\r\n\r\n this.getPos = () => {\r\n return this.pos\r\n };\r\n\r\n this.setPos = function(pos) {\r\n this.pos = {...pos}\r\n };\r\n\r\n this.getCenter = function() {\r\n return this.pos\r\n };\r\n\r\n this.setEnabled = (val) => {\r\n this.state.inEnabled = val\r\n };\r\n\r\n this.setSlabPlaceHolderPresent = (val) => {\r\n this.state.isSlabPlaceHolderPresent = val\r\n };\r\n\r\n this.getRightPartWidth = () => {\r\n return workspace.getCanvas().width / 2\r\n };\r\n\r\n this.getShapeOffset = () => {\r\n return this.shapeOffset\r\n };\r\n\r\n this.init = () => {\r\n this.initRightPart();\r\n this.initLeftPart();\r\n }\r\n\r\n this.initRightPart = () => {\r\n this.centerButtonRightPart = new StaticImage(\r\n 'eyeball',\r\n this.eventManager.getCtx().canvas.width - 40 - sqftSlabManager.centerButton.width,\r\n 30,\r\n sqftSlabManager.centerButton.width,\r\n sqftSlabManager.centerButton.height,\r\n false,\r\n true,\r\n this.beforeRenderCenterButtonRightPart.bind(this)\r\n );\r\n this.centerButtonLeftPart = new StaticImage(\r\n 'eyeball',\r\n this.eventManager.getCtx().canvas.width / 2 - 40 - sqftSlabManager.centerButton.width,\r\n 30,\r\n sqftSlabManager.centerButton.width,\r\n sqftSlabManager.centerButton.height,\r\n false,\r\n true,\r\n this.beforeRenderCenterButtonLeftPart.bind(this)\r\n );\r\n this.initSlabWorkspaceEvents();\r\n }\r\n\r\n this.initLeftPart = () => {\r\n this.eventManager.addEvent(\r\n this.eventManager.events.RENDER,\r\n this.renderSlabLeftPartWrapper,\r\n this.objectName,\r\n this.eventManager.priorities.SEGMENT_MEASUREMENTS\r\n );\r\n }\r\n\r\n this.initSlabWorkspaceEvents = function() {\r\n this.eventManager.addEvent(\r\n this.eventManager.events.MOUSE_MOVE,\r\n this.onMouseMove,\r\n this.objectName,\r\n this.eventManager.priorities.SLAB_RIGHT_PART_WORKSPACE\r\n );\r\n this.eventManager.addEvent(\r\n this.eventManager.events.MOUSE_DOWN,\r\n this.onMouseDown,\r\n this.objectName,\r\n EventManager.priorities.SLAB_RIGHT_PART_WORKSPACE\r\n );\r\n this.eventManager.addEvent(\r\n this.eventManager.events.MOUSE_UP,\r\n this.onMouseUp,\r\n this.objectName,\r\n EventManager.priorities.SLAB_RIGHT_PART_WORKSPACE\r\n );\r\n this.eventManager.addEvent(\r\n this.eventManager.events.WHEEL,\r\n this.onWheel,\r\n this.objectName,\r\n this.eventManager.priorities.SLAB_RIGHT_PART_WORKSPACE\r\n );\r\n this.eventManager.addEvent(\r\n this.eventManager.events.RENDER,\r\n renderSlabWorkspace,\r\n this.objectName,\r\n this.eventManager.priorities.SLAB_RIGHT_PART_WORKSPACE\r\n );\r\n this.eventManager.addEvent(\r\n this.eventManager.events.RENDER,\r\n this.renderSlabRightPartWrapper,\r\n this.objectName,\r\n this.eventManager.priorities.SLAB_RIGHT_PART_CONTENT\r\n );\r\n this.eventManager.addEvent(\r\n this.eventManager.events.RENDER,\r\n this.centerButtonRightPart.render,\r\n this.objectName,\r\n this.eventManager.priorities.SLAB_RIGHT_PART_CONTENT\r\n );\r\n this.eventManager.addEvent(\r\n this.eventManager.events.RENDER,\r\n this.centerButtonLeftPart.render,\r\n this.objectName,\r\n this.eventManager.priorities.SLAB_RIGHT_PART_CONTENT\r\n );\r\n };\r\n\r\n this.disableSlabImages = () => {\r\n this.eventManager.removeEvent(this.objectName);\r\n };\r\n\r\n this.deregisterEvents = () => {\r\n this.eventManager.removeEvent(this.objectName);\r\n };\r\n\r\n this.onMouseDown = (mousePos, e) => {\r\n void e;\r\n if (this.state.isCenterButtonLeftPartHovered) {\r\n this.eyeballButtonLeftPartClick();\r\n }\r\n if (!this.isOverRightPart(mousePos)) {\r\n return false;\r\n }\r\n if (this.state.isCenterButtonRightPartHovered) {\r\n this.eyeballButtonRightPartClick();\r\n }\r\n this.eventManager.stealCursor(true, true);\r\n this.state.mouseDown = true;\r\n this.state.mouseDownPosition = mousePos;\r\n this.eventManager.setCursor('grabbing', this, false);\r\n\r\n return true;\r\n };\r\n\r\n this.onMouseUp = (mousePos, e) => {\r\n if (!this.isOverRightPart(mousePos)) {\r\n return false;\r\n }\r\n this.state.mouseDown = false;\r\n this.state.mouseDownPosition = null;\r\n\r\n return this.onMouseMove(mousePos, e);\r\n }\r\n\r\n this.onMouseMove = (mousePos, e) => {\r\n if (e.terminate) {\r\n return false;\r\n }\r\n this.state.isCenterButtonLeftPartHovered = this.centerButtonLeftPart.isHovered(mousePos);\r\n if (!this.isOverRightPart(mousePos)) {\r\n return false;\r\n }\r\n this.state.isCenterButtonRightPartHovered = this.centerButtonRightPart.isHovered(mousePos);\r\n if (this.state.mouseDown) {\r\n this.moveSlabWorkspace(mousePos);\r\n } else {\r\n this.eventManager.resetCursor(this);\r\n }\r\n return true;\r\n }\r\n\r\n this.onWheel = (mousePos, e) => {\r\n void mousePos;\r\n void e;\r\n\r\n return true;\r\n }\r\n this.moveSlabWorkspace = (mousePos) => {\r\n if (!this.isOverRightPart(mousePos)) {\r\n return false;\r\n }\r\n let xDiff = mousePos.x - this.state.mouseDownPosition.x;\r\n let yDiff = mousePos.y - this.state.mouseDownPosition.y;\r\n\r\n this.pos.x -= xDiff;\r\n this.state.mouseDownPosition.x = mousePos.x;\r\n\r\n this.pos.y -= yDiff;\r\n this.state.mouseDownPosition.y = mousePos.y;\r\n };\r\n\r\n this.beforeRenderCenterButtonRightPart = () => {\r\n this.centerButtonRightPart.x = this.eventManager.getCtx().canvas.width - 40 - sqftSlabManager.centerButton.width;\r\n };\r\n\r\n this.beforeRenderCenterButtonLeftPart = () => {\r\n this.centerButtonLeftPart.x = this.eventManager.getCtx().canvas.width / 2 - 40 - sqftSlabManager.centerButton.width;\r\n };\r\n\r\n this.eyeballButtonRightPartClick = () => {\r\n const shapesIds = workspace.getShapeIds();\r\n const closestHigherNumber = getClosestHigherNumber(this.state.rightPartZoomedShapeId, shapesIds);\r\n const shape = workspace.getShapeById(closestHigherNumber);\r\n\r\n if (shape instanceof sqftShape) {\r\n workspaceZoom.zoomToSlabShape(shape, true);\r\n this.state.rightPartZoomedShapeId = shape.id\r\n } else {\r\n this.state.rightPartZoomedShapeId = closestHigherNumber === null ? 0 : closestHigherNumber;\r\n this.eyeballButtonRightPartClick()\r\n }\r\n return false\r\n };\r\n\r\n this.eyeballButtonLeftPartClick = () => {\r\n const shapesIds = workspace.getShapeIds();\r\n const closestHigherNumber = getClosestHigherNumber(this.state.leftPartZoomedShapeId, shapesIds);\r\n const shape = workspace.getShapeById(closestHigherNumber);\r\n\r\n if (shape instanceof sqftShape) {\r\n workspaceZoom.zoomToShape(shape, true);\r\n this.state.leftPartZoomedShapeId = shape.id\r\n } else {\r\n this.state.leftPartZoomedShapeId = closestHigherNumber === null ? 0 : closestHigherNumber;\r\n this.eyeballButtonLeftPartClick()\r\n }\r\n return false\r\n };\r\n\r\n this.isOverRightPart = (mousePos = {x: 0}) => {\r\n let rpw = this.getRightPartWidth();\r\n\r\n return mousePos.x > rpw\r\n };\r\n\r\n this.renderSlabRightPartWrapper = (ctx, isFullRender = false) => {\r\n //if (this.state.setSlabPlaceHolderPresent) {\r\n return renderSlabRightPart(ctx, isFullRender);\r\n //}\r\n };\r\n this.renderSlabLeftPartWrapper = (ctx) => {\r\n const reduxState = store.getState()\r\n let isMeasurementVisibleInSlabMode = reduxState.sqftSlabState.isMeasurementVisibleInSlabMode;\r\n if (isMeasurementVisibleInSlabMode) {\r\n renderMeasurementsAroundSnappedShapes(ctx, this.measurementPoints);\r\n }\r\n };\r\n};\r\n\r\nexport default new SlabWorkspace;\r\n","import {getCurrentLayout} from \"../../appLayout\";\r\nimport store from \"../../../store\";\r\nimport config from \"../components/canvas/store/sqftConfig\";\r\n//import ManualCalculate from \"../components/canvas/core/controls/manualCalculate\";\r\nimport workspace from \"../components/canvas/core/workspace\";\r\nimport history from \"../components/canvas/core/workspaceHistory\";\r\nimport {\r\n enableSquareFootage,\r\n setSQFTViewMode,\r\n setSquareFootageGroup,\r\n updateSQFTCalculations\r\n} from \"../../../actions/sqftFunctions\";\r\nimport {toggleSelectionFeatureInfo} from \"../../../actions/actionFunctions\";\r\nimport {manualCalculateImport} from \"./sqftDataMapper\";\r\nimport {getInitialManualCalcRows} from \"../../../reducers/sqftManualCalculationReducer\";\r\nimport {updateManualCalculateRows} from \"../../../actions/sqftManualCalculationFunctions\";\r\nimport {hashHistory} from \"react-router\";\r\nimport {\r\n getAvailableSteps,\r\n navItemIsExcluded\r\n} from \"../../look/lookNavigation/lookMain/lookWizard/lookWizardFunctions\";\r\nimport {getNextNotCheckedStep} from \"../../qkbPages/materialsWizard/useChangeWizardStepRoute\";\r\nimport {setMeasureUnit} from \"./sqftConfigHelper\";\r\nimport {SQFT_VIEW_MODE} from \"../constants\";\r\n\r\nexport const getFeatureGroup = (mainNeeded = \"center_island_countertop\") => {\r\n const layout = getCurrentLayout();\r\n let featureGroup = layout.getSubPartFromQtCategories(mainNeeded);\r\n if (!featureGroup) {\r\n const foundGroup = layout.getFeatureGroupByPartId(mainNeeded);\r\n if (foundGroup) {\r\n featureGroup = {part: foundGroup}\r\n }\r\n }\r\n if (!featureGroup) {\r\n featureGroup = layout.parts[\"Countertop\"] && layout.parts[\"Countertop\"].countertop\r\n ? {part: layout.parts[\"Countertop\"].countertop}\r\n : null;\r\n }\r\n\r\n return featureGroup\r\n}\r\n\r\nexport const getNavItems = (featureGroup, searchText = \"\", filters= {}, withPlaceholders = true, withQuotingToolFeatures = false) => {\r\n let navItems = [];\r\n if (!featureGroup) {\r\n return navItems\r\n }\r\n let checkFeatureGroup = featureGroup.part ? featureGroup : {part: featureGroup}\r\n const state = store.getState();\r\n const {wizardIsActive} = state.wizardState;\r\n\r\n if (wizardIsActive) {\r\n navItems = getNavItemsFromTheWizard(checkFeatureGroup, searchText, filters);\r\n } else {\r\n const layout = getCurrentLayout();\r\n navItems = layout.designNavigationItems(checkFeatureGroup,\r\n filters,\r\n searchText,\r\n withPlaceholders,\r\n withQuotingToolFeatures,\r\n [],\r\n { firstFeature: null, firstConditions: null },\r\n )\r\n }\r\n\r\n return navItems;\r\n}\r\n\r\nexport const onSQFTLoadPrepareData = () => {\r\n const layout = getCurrentLayout();\r\n const state = store.getState();\r\n const quotes = state.quotesState.quotes;\r\n const activeQuoteIndex = state.quotesState.activeQuoteIndex;\r\n const filterGroups = state.filterState.filterGroups;\r\n const fabricatorData = state.fabricatorState;\r\n\r\n //if (this.iframeElement && this.iframeElement.contentWindow) {\r\n const activeQuote = quotes[activeQuoteIndex];\r\n //const {intl, fabricatorData} = this.props;\r\n const measureUnit = fabricatorData.settings.measureUnit;\r\n const payload = {\r\n loadData: (activeQuote && activeQuote.sqFtCalcData) ? activeQuote.sqFtCalcData : null,\r\n measureUnit,\r\n fabricatorId: document.kvConfig.userId,\r\n fabricatorData,\r\n currentLayout: layout.getCurrentLayoutAbbreviation(),\r\n filterGroups: filterGroups,\r\n //language: intl.locale\r\n }\r\n // if (hardCodeIsLowes()) {\r\n // let translates = {}\r\n // Object.keys(intl.messages).forEach(messageKey => {\r\n // if (messageKey.startsWith(\"transDoc.\")) {\r\n // if (!translates[intl.locale]) {\r\n // translates[intl.locale] = {};\r\n // }\r\n // translates[intl.locale][messageKey] = intl.messages[messageKey]\r\n // }\r\n // })\r\n // payload.translates = translates;\r\n // }\r\n console.log(\"sqft postMessage initial load data:\", payload);\r\n\r\n return payload;\r\n //}\r\n};\r\n\r\n//todo is this all needed?\r\nexport const onSQFTLoadImport = (payload) => {\r\n let {fabricatorId, fabricatorData, currentLayout, measureUnit, loadData, filterGroups} = payload;\r\n config.fabricatorData = fabricatorData;\r\n window.fabricatorId = fabricatorId;\r\n window.currentLayout = currentLayout;\r\n config.filterGroups = filterGroups;\r\n //TranslatesProvider.replaceHtml(language, translates);\r\n // config.fabricatorData = fabricatorData; // set if needed\r\n\r\n //todo\r\n //toolbar.setFabricatorButtons(fabricatorData); // specific fabricator rules\r\n if (measureUnit) {\r\n [].slice.call(document.querySelectorAll(\".settings-units [data-value]\")).forEach(element => {\r\n (element.dataset.value === measureUnit)\r\n ? element.classList.add(\"active\")\r\n : element.classList.remove(\"active\")\r\n });\r\n setMeasureUnit(measureUnit);\r\n history.rememberConfig({measureUnit});\r\n //todo\r\n //ManualCalculate.onMeasureUnitChange();\r\n }\r\n if (loadData) {\r\n loadData = (typeof loadData === 'string') ? JSON.parse(loadData) : loadData;\r\n if (loadData.manualCalculate === true) {\r\n manualCalculateImport(loadData);\r\n } else {\r\n workspace.import(loadData);\r\n }\r\n } else if (!config.tutorialIsRunning) {\r\n workspace.import({}); // if new room is opened - clear the previous(but not the first time if tutorial is active)\r\n store.dispatch(updateManualCalculateRows(getInitialManualCalcRows()));\r\n //todo\r\n //ManualCalculate.import({})\r\n } else {\r\n store.dispatch(updateManualCalculateRows(getInitialManualCalcRows()));\r\n }\r\n const state = store.getState();\r\n const updateCalculations = state.sqftState.updateCalculations;\r\n store.dispatch(updateSQFTCalculations(updateCalculations + 1));\r\n}\r\n\r\nexport const closeSQFTTool = (redirectToPage, shouldChangeWizardToNextStep, changeWizardStepRoute) => {\r\n const isSQFTinUrl = window.location.hash.includes(\"sqft\");\r\n store.dispatch(setSQFTViewMode(SQFT_VIEW_MODE.twoDMode));\r\n\r\n if (isSQFTinUrl) {\r\n hashHistory.push(redirectToPage);\r\n } else {\r\n store.dispatch(enableSquareFootage(false));\r\n store.dispatch(setSquareFootageGroup(null));\r\n if (shouldChangeWizardToNextStep) {\r\n changeWizardToNextStep(changeWizardStepRoute)\r\n }\r\n }\r\n}\r\n\r\nexport const changeWizardToNextStep = (changeWizardStepRoute) => {\r\n const state = store.getState();\r\n const {wizardIsActive, wizardActiveItem} = state.wizardState;\r\n const {selectionFeatureInfo} = state.selectionState;\r\n if (wizardIsActive && wizardActiveItem) {\r\n if (selectionFeatureInfo) {\r\n store.dispatch(toggleSelectionFeatureInfo(null));\r\n }\r\n const realNextStep = getNextNotCheckedStep();\r\n changeWizardStepRoute(realNextStep);\r\n }\r\n}\r\n\r\nexport const getNavItemsFromTheWizard = (subPart, searchText = \"\", filters= {}, wizardGroupId = null, visualizerType = document.kvConfig.visualizerType, withGroupIds = false) => {\r\n\r\n let groupName = subPart.part.wasCreatedFromGroupName || subPart.part.dbName || subPart.part.partName; //assign same stems as for the parent featureGroup (for the slabs)\r\n const wizardSteps = getWizardGroupsFromTheWizard(groupName, wizardGroupId);\r\n const layout = getCurrentLayout(visualizerType);\r\n const navItems = layout.designNavigationItems(subPart, filters, searchText, false, \"all\");\r\n\r\n // console.log(\"wizardSteps\", wizardSteps);\r\n let allNavItems = [];\r\n if (wizardSteps.length) {\r\n if (wizardSteps.length === 1) {\r\n const navItemsFromWizardGroup = navItems.filter(navItem => !navItemIsExcluded(navItem, wizardSteps[0].stepGroups[0]))\r\n if (navItemsFromWizardGroup.length) {\r\n allNavItems = navItemsFromWizardGroup\r\n if (!wizardGroupId && withGroupIds) {\r\n allNavItems = allNavItems.map(navItem => {\r\n return {...navItem, newWizardGroupId: wizardSteps[0].stepGroups[0].id, newWizardStep: wizardSteps[0].stepIndex}\r\n })\r\n }\r\n }\r\n } else {\r\n for (const wizardStep of wizardSteps) {\r\n const navItemsFromWizardGroup = navItems.filter(navItem => !navItemIsExcluded(navItem, wizardStep.stepGroups[0]));\r\n if (navItemsFromWizardGroup.length) {\r\n if (!allNavItems.length) {\r\n allNavItems = navItemsFromWizardGroup;\r\n if (!wizardGroupId && withGroupIds) {\r\n allNavItems = allNavItems.map(navItem => {\r\n return {...navItem, newWizardGroupId: wizardStep.stepGroups[0].id, newWizardStep: wizardStep.stepIndex}\r\n })\r\n }\r\n } else {\r\n navItemsFromWizardGroup.forEach(newNavItem => {\r\n if (!allNavItems.some(navItem => navItem.part.dbFeature.id === newNavItem.part.dbFeature.id)) {\r\n allNavItems.push(\r\n !wizardGroupId && withGroupIds\r\n ? {...newNavItem, newWizardGroupId: wizardStep.stepGroups[0].id, newWizardStep: wizardStep.stepIndex}\r\n : newNavItem\r\n )\r\n }\r\n })\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n return allNavItems\r\n}\r\n\r\n/**\r\n * returns all wizardGroups with current groupName and wizard group id if provided\r\n * @param groupName {string}\r\n * @param wizardGroupId {string|number|null}\r\n * @param forFeature {featureInterface}\r\n * @returns {array}\r\n */\r\nexport const getWizardGroupsFromTheWizard = (groupName, wizardGroupId = null, forFeature = null) => {\r\n const state = store.getState();\r\n const {wizardActiveItem, wizardSelectedValues} = state.wizardState;\r\n const wizardSteps = getAvailableSteps(wizardActiveItem, wizardSelectedValues, true);\r\n\r\n return wizardSteps.filter((wizardStep) => {\r\n if (wizardStep.stepGroups.length !== 1 || (wizardStep.stepGroups[0].groupName !== groupName)) {\r\n return false\r\n }\r\n if (wizardGroupId && (wizardStep.stepGroups[0].id !== wizardGroupId)) {\r\n return false\r\n }\r\n if (forFeature) {\r\n return !navItemIsExcluded({part: forFeature}, wizardStep.stepGroups[0])\r\n }\r\n return true\r\n });\r\n}\r\n\r\nexport const getUnderlaymentFeature = () => {\r\n const underlaymentFeatureGroup = getFeatureGroup('underlayment');\r\n const state = store.getState();\r\n const {wizardIsActive} = state.wizardState;\r\n let navItems;\r\n if (wizardIsActive) {\r\n navItems = getNavItemsFromTheWizard(underlaymentFeatureGroup, \"\", {});\r\n } else {\r\n const layout = getCurrentLayout();\r\n navItems = layout.designNavigationItems(underlaymentFeatureGroup,\r\n {},\r\n \"\",\r\n false,\r\n \"all\",\r\n [],\r\n { firstFeature: null, firstConditions: null },\r\n )\r\n }\r\n\r\n const underlaymentFeaureName = 'Xtone Underlayment';\r\n const underlaymentFeaure = navItems.find(navItem => navItem.part.getFeatureName() === underlaymentFeaureName);\r\n if (underlaymentFeaure) {\r\n return underlaymentFeaure\r\n }\r\n\r\n return navItems.length ? navItems[0] : null\r\n}\r\n","import {PartMenuType} from \"../../visComponents/constants\";\r\nimport {iCmp} from \"../../../misc/utils\";\r\nimport Layer from \"../../visComponents/layer\";\r\nimport {LayoutType, METADATA} from \"./constants\";\r\nimport PartCommon from \"../../visComponents/partCommon\";\r\nimport DesignNavigationItem from \"../../visComponents/designNavigationItem\";\r\n\r\nexport class Part extends PartCommon {\r\n\r\n constructor(isParent, isChild, menuType) {\r\n super();\r\n if (isChild || (isParent && menuType === PartMenuType.Simple)) {\r\n this.featuresList = {};\r\n this.featuresPartsList = {};\r\n Object.keys(LayoutType).forEach(layoutName => {\r\n this.featuresList[layoutName] = [];\r\n this.featuresPartsList[layoutName] = [];\r\n });\r\n this.allFeaturesReceived = false;\r\n this.realFeaturesReceived = false; // this prop is need on Scroll (if features count more that 1000)\r\n this.nextFeaturesPageToLoad = 0;\r\n this.activeFeature = null;\r\n this.placeholderFeature = null;\r\n this.placeholderChanged = false;\r\n this.firstClick = {\r\n \"0\": false\r\n };\r\n this.activeLockedFeature = null;\r\n this.activeNotInVisualizerFeature = null; // is needed to display in the QT selected activeNotInVisualizerFeature, but render proper activeFeature layer(for example, countertop)\r\n // name = \"\";\r\n this.visible = true;\r\n this.categoryEnabled = false;\r\n this.layout = null;\r\n this.featureGroupVisible = true; // dashboard's feature group eye ball logic\r\n this.featureGroupEnabled = true; // dashboard's feature group checkbox logic\r\n this.selectedFeaturesHistory = []; // array of strings(names). updated every time item is selected\r\n this.filtersReceived = null; // array of filters values, comes from BE, for ex [1221, 347, 1124]\r\n this.confirmedChange = false; // same as firstClick, but fires after someone changes feature and confirms changes\r\n this.featureBeforeChange = null; // feature that sets when menu is opened (to revert it back if user didn't confirm change)\r\n }\r\n if (isParent) {\r\n this.partThumbnail = '';\r\n this.relatedItems = [];\r\n }\r\n if (!isChild && !isParent) {\r\n this.dbFeature = null;\r\n this.layer = new Layer(\"bv\");\r\n this._customDisplayName = null;\r\n this.notesList = {};\r\n }\r\n this.partName = \"\";\r\n }\r\n\r\n set features(featuresList) {\r\n // features can't be set directly, we need to change featuresList array\r\n }\r\n get features() {\r\n const layout = this.layout || this.getParent().layout;\r\n return this.featuresList[layout.getCurrentLayoutName()]\r\n }\r\n set featuresParts(featuresList) {\r\n // featuresParts can't be set directly, we need to change featuresPartsList array\r\n }\r\n get featuresParts() {\r\n const layout = this.layout || this.getParent().layout;\r\n return this.featuresPartsList[layout.getCurrentLayoutName()]\r\n }\r\n\r\n /**\r\n * Checks whether a given for condition matches the needed value (or array of values)\r\n * @param name {string}\r\n * @param value {string || array}\r\n * @returns {boolean}\r\n */\r\n matchesMetaForCondition(name, value) {\r\n if (name === \"WaterLevel\" && this.partId === \"vanity_faucet\") {\r\n return this.metaData[\"Height\"] && this.metaData[\"Height\"] > value\r\n }\r\n if (name === \"SinkWidth\" && this.partId === \"vanity_sink\") {\r\n // if no metadata - return true! back compatability\r\n return !this.metaData[\"SinkWidth\"] || (this.metaData[\"SinkWidth\"] < value)// current sink should be smaller than Vanity\r\n }\r\n if (name === \"MountLevel\" && this.partId === \"vanity_sink\"\r\n && (!Array.isArray(this.metaData[\"MountType\"]) || !this.metaData[\"MountType\"].includes(\"V\"))) {\r\n // sinks without the MountType V should ignore MountLevel metaData, they should be checked my MountType only\r\n return true\r\n }\r\n if (!this.metaData[name]) {\r\n return false\r\n }\r\n if (Array.isArray(this.metaData[name])) {\r\n return this.metaData[name].some(condValue => {\r\n return condValue === METADATA.ALL || (Array.isArray(value) ? value.some(val => iCmp(condValue, val)) : iCmp(condValue, value))\r\n });\r\n }\r\n return this.metaData[name] === METADATA.ALL\r\n || (Array.isArray(value) ? value.some(val => iCmp(this.metaData[name], val)) : iCmp(this.metaData[name], value))\r\n }\r\n\r\n matchesMetaForArrayOfConditions(arrayOfConditions) {\r\n return arrayOfConditions.every((condition) => {\r\n return this.matchesMetaForCondition(condition.propName, condition.propValue);\r\n })\r\n }\r\n\r\n navigationItem() {\r\n return new DesignNavigationItem(this.partName, this)\r\n }\r\n}\r\n\r\n\r\n","import {baseNewImagesPath} from \"../../assets\";\r\n\r\nexport const applianceThumbnail = `${baseNewImagesPath}images/kv-icons/kv-filter-icons-stove.svg`;\r\nexport const cabinetThumbnail = `${baseNewImagesPath}images/kv-icons/top_cabinet.svg`;\r\nexport const centerIslandThumbnail = `${baseNewImagesPath}images/kv-icons/center_island_countertop.svg`;\r\nexport const countertopGroupThumbnail = `${baseNewImagesPath}images/kv-icons/vanity-countertop.svg`;\r\nexport const wallsThumbnail = `${baseNewImagesPath}images/bv_icons_new/Icons_Wall.svg`;\r\nexport const floorThumbnail = `${baseNewImagesPath}images/bv_icons_new/Icons_Floor.svg`;\r\n\r\nexport const largeLayoutShadow = `${baseNewImagesPath}images/bv-assets/KV-All-Global-Shadow-Placeholder_L_1620x1080.png`;\r\nexport const SmallLayoutShadow = `${baseNewImagesPath}images/bv-assets/KV-All-Global-Shadow-Placeholder_S_1620x1080.png`;\r\n\r\n/*layouts*/\r\nexport const LayoutThumbnails = {\r\n Small: `${baseNewImagesPath}images/kv-layout-thumbnails/S.png`,\r\n SmallWithPopout: `${baseNewImagesPath}images/kv-layout-thumbnails/SP.png`,\r\n SmallWithPeninsula: `${baseNewImagesPath}images/kv-layout-thumbnails/SN.png`,\r\n SmallWithIsland: `${baseNewImagesPath}images/kv-layout-thumbnails/SI.png`,\r\n SmallWithPopoutWithPeninsula: `${baseNewImagesPath}images/kv-layout-thumbnails/SPN.png`,\r\n SmallWithPopoutWithIsland: `${baseNewImagesPath}images/kv-layout-thumbnails/SPI.png`,\r\n SmallWithPeninsulaWithIsland: `${baseNewImagesPath}images/kv-layout-thumbnails/SNI.png`,\r\n SmallWithPopoutWithPeninsulaWithIsland: `${baseNewImagesPath}images/kv-layout-thumbnails/SPNI.png`,\r\n LShape: `${baseNewImagesPath}images/kv-layout-thumbnails/L.png`,\r\n LShapeWithPeninsula: `${baseNewImagesPath}images/kv-layout-thumbnails/LN.png`,\r\n LShapeWithIsland: `${baseNewImagesPath}images/kv-layout-thumbnails/LI.png`,\r\n LShapeWithPeninsulaWithIsland: `${baseNewImagesPath}images/kv-layout-thumbnails/LNI.png`,\r\n};\r\n","import {Part} from \"../part\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport {LayoutType, ShowerComboTubType} from \"../constants\";\r\nimport { showerTubComboThumbnail, custom60in30X8Shower } from '../../../bvComponent/core/assets';\r\n\r\nimport BathTubLiner from \"../subparts/showerTubCombo/bathtubLiner\";\r\nimport ReplacementTub from \"../subparts/showerTubCombo/replacementTub\";\r\nimport WalkInTub from \"../subparts/showerTubCombo/walkInTub\";\r\nimport JettedTub from \"../subparts/showerTubCombo/jettedTub\";\r\nimport WallConfiguration from \"../subparts/showerTubCombo/wallConfiguration\";\r\nimport {fixDbFeatureProperties} from \"../../../../misc/helpers\";\r\n\r\nexport class ShowerTubCombo extends Part {\r\n static id = 'Shower Tub Combo';\r\n\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.showerTubComboIsActive = false; // param needed to check if shower is still active or not\r\n this.menuType = PartMenuType.Complex;\r\n this.partThumbnail = showerTubComboThumbnail;\r\n this.partName = 'Shower Tub Combo';\r\n this.translateId = \"visualizer.bathroom.shower_tub_combo\";\r\n this.relatedItems = [];\r\n this.wallConfiguration = null;\r\n this.bathTubLiner = null;\r\n this.replacementTub = null;\r\n this.walkInTub = null;\r\n this.jettedTub = null;\r\n\r\n // Kohler hardcode, they don't have bathtub_liner\r\n this.bottomTub = ShowerComboTubType.replacement_tub;\r\n this.leftShowerWallType = 'Pony';\r\n this.showerComboSize = '60in';\r\n\r\n }\r\n\r\n load(dbFeature) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Bathtub Liner\":\r\n relatedItemName = \"bathTubLiner\";\r\n RelatedItemClass = BathTubLiner;\r\n break;\r\n case \"Replacement Tub\":\r\n relatedItemName = \"replacementTub\";\r\n RelatedItemClass = ReplacementTub;\r\n break;\r\n case \"Walk In Tub\":\r\n relatedItemName = \"walkInTub\";\r\n RelatedItemClass = WalkInTub;\r\n break;\r\n case \"Jetted Tub\":\r\n relatedItemName = \"jettedTub\";\r\n RelatedItemClass = JettedTub;\r\n break;\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n setSpecificRules() {\r\n if (!this.wallConfiguration) {\r\n this.wallConfiguration = new WallConfiguration(true);\r\n this.wallConfiguration.counts = {\r\n allLayoutFeaturesCount: 0,\r\n largeLayoutFeaturesCount: 0,\r\n smallLayoutFeaturesCount: 0\r\n };\r\n this.relatedItems.unshift(this.wallConfiguration);\r\n this.wallConfiguration.getParent = () => this;\r\n }\r\n Object.keys(LayoutType).forEach(layoutType => {\r\n this.wallConfiguration.featuresList[layoutType] = [\r\n ShowerTubCombo.createCustomWallConfiguration(\r\n custom60in30X8Shower,\r\n \"Full Wall 60in\",\r\n \"30X8\",\r\n \"60in\",\r\n {\r\n \"RoomLayout\": [layoutType],\r\n \"ShowerSize\": ['60in'],\r\n \"CountertopSize\": [\"20in\", \"24in\", \"30in\", \"36in\", \"48in\", \"60in\", \"72in\"],\r\n },\r\n this,\r\n 100001\r\n ),\r\n ];\r\n this.wallConfiguration.counts[layoutType.toLowerCase() + \"LayoutFeaturesCount\"]++;\r\n });\r\n }\r\n\r\n static createCustomWallConfiguration(customThumbnail, name, leftShowerWallType, showerComboSize, metaData, parent, id) {\r\n const conf = new WallConfiguration();\r\n conf.partName = name;\r\n conf.showerBodyId = name.toLowerCase().replace(/ /gi, \"-\");\r\n conf.dbFeature = {};\r\n conf.featureName = name;\r\n conf.groupName = \"Wall Configuration\";\r\n conf.showerComboSize = showerComboSize;\r\n // conf.parent = parent;\r\n conf.getParent = () => parent.wallConfiguration;\r\n conf.metaData = metaData;\r\n conf.leftShowerWallType = leftShowerWallType;\r\n conf.customThumbnail = customThumbnail;\r\n conf.dbFeature = fixDbFeatureProperties({\r\n metaData,\r\n id,\r\n unlocked: true\r\n });\r\n return conf;\r\n }\r\n\r\n setLayers(layout, placeholdersNeeded) {\r\n\r\n if (!this.showerTubComboIsActive) {\r\n return null\r\n }\r\n\r\n let res = [];\r\n this.getRelatedItems().forEach(relatedItem => {\r\n relatedItem.setLayers(layout);\r\n (placeholdersNeeded && !relatedItem.placeholderChanged && relatedItem.placeholderFeature)\r\n ? relatedItem.placeholderFeature.layer.addTo(res)\r\n : relatedItem.activeFeature ? relatedItem.activeFeature.layer.addTo(res) : null;\r\n });\r\n\r\n return res.length ? res : null;\r\n }\r\n\r\n subParts() {\r\n\r\n let subParts = [\r\n ...this.getRelatedItems().filter(item => item.visible).map(_ => new DesignNavigationItem(_.partName, _)),\r\n ...this.layout.parts.Shower.subParts().filter(subPart => {\r\n return (subPart.text === \"Fixture\")\r\n || (subPart.text === \"Shower Head\")\r\n || (subPart.text === \"Shower Walls\")\r\n || (subPart.text === \"Shower Walls Accent\")\r\n || (subPart.text === \"Shower Door\")\r\n || (subPart.text === \"Handle\")\r\n || (subPart.text === \"Pony Wall\")\r\n || (subPart.text === \"Pony Wall Cap\")\r\n || (subPart.text === \"Pony Wall Glass\")\r\n })\r\n ];\r\n\r\n if (this.bottomTub === ShowerComboTubType.walk_in_tub) {\r\n subParts = subParts.filter(subPart => {\r\n return subPart.part.partId !== \"shower_door\" && subPart.part.partId !== \"shower_door_handle\" && subPart.part.partId !== \"shower_fixture\"\r\n })\r\n }\r\n\r\n return subParts\r\n }\r\n\r\n getShowerRelatedItems() {\r\n return this.layout.parts.Shower.getRelatedItems().filter(relItem => {\r\n return (relItem.partId === \"shower_fixture\")\r\n || (relItem.partId === \"shower_head\")\r\n || (relItem.partId === \"shower_interior_wall\")\r\n || (relItem.partId === \"shower_wall_accent\")\r\n || (relItem.partId === \"shower_door\")\r\n || (relItem.partId === \"shower_door_handle\")\r\n || (relItem.partId === \"pony_wall\")\r\n || (relItem.partId === \"pony_wall_cap\")\r\n || (relItem.partId === \"pony_wall_glass\")\r\n })\r\n }\r\n\r\n setShowerTubCombo() {\r\n this.showerTubComboIsActive = true;\r\n if (this.layout.type === LayoutType.Small) {\r\n const showerParent = this.layout.parts.Shower;\r\n if (showerParent.showerBody && showerParent.showerBody.disabled) { // switch on all Shower features\r\n showerParent.showerBody.disabled = false;\r\n showerParent.showerBody.disabledClick();\r\n this.showerTubComboIsActive = true;\r\n }\r\n }\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false\r\n }\r\n\r\n handleSubPartClick() {}\r\n\r\n setZIndex(zIndexes) {\r\n if (!this.showerTubComboIsActive) {\r\n return null\r\n }\r\n\r\n if(zIndexes)\r\n this.relatedItems.forEach(_ => _.setZIndex(zIndexes));\r\n }\r\n\r\n setActiveTub(bottomTub) {\r\n this.bottomTub = bottomTub;\r\n }\r\n\r\n showerSize() {\r\n return this.showerComboSize\r\n }\r\n\r\n showerDimensions() {\r\n return this.leftShowerWallType\r\n }\r\n\r\n setShowerSize(leftShowerWallType, showerComboSize) {\r\n this.leftShowerWallType = leftShowerWallType;\r\n this.showerComboSize = showerComboSize;\r\n }\r\n\r\n setDefault() {\r\n // this.relatedItems.forEach(relatedItem => relatedItem.setDefault(layout));\r\n }\r\n\r\n}\r\n","import * as PropTypes from \"prop-types\";\r\n\r\nexport const DISCOUNT_MAIN_TYPES = {\r\n custom: \"custom\",\r\n freeFill: \"freeFill\",\r\n subTotal: \"subTotal\",\r\n nested: \"nested\",\r\n finance: \"finance\",\r\n deposit: \"deposit\",\r\n};\r\n\r\nexport const DISCOUNT_TYPES = {\r\n price: \"Price\",\r\n percent: \"Percent\"\r\n};\r\n\r\nexport const DISCOUNT_MODES = {\r\n and: \"And\",\r\n or: \"Or\"\r\n};\r\n\r\nexport const DISCOUNT_SECTION_TYPES = {\r\n default: \"default\",\r\n finance: \"finance\"\r\n};\r\n\r\nexport const DISCOUNT_FINANCE_CELLS = {\r\n financePercentage: \"Finance Percentage\",\r\n financeMonths: \"Months\",\r\n financeSalesPercentage: \"Sales Person Percentage\",\r\n}\r\n\r\nexport const discountInterFace = {\r\n id: PropTypes.oneOfType([PropTypes.number, PropTypes.string]).isRequired,\r\n order: PropTypes.number.isRequired,\r\n name: PropTypes.string.isRequired,\r\n enabled: PropTypes.bool.isRequired,\r\n type: PropTypes.oneOf([DISCOUNT_TYPES.price, DISCOUNT_TYPES.percent]).isRequired,\r\n mode: PropTypes.oneOf([DISCOUNT_MODES.and, DISCOUNT_MODES.or]).isRequired,\r\n amount: PropTypes.number.isRequired,\r\n isRidged: PropTypes.bool.isRequired,\r\n isSubTotal: PropTypes.bool,\r\n selected: PropTypes.bool, // it is not required, since it is not stored on the backend\r\n // specialVisible: PropTypes.bool, // it is not required, since it is not stored on the backend // we don't have it anymore\r\n oldDeleted: PropTypes.bool, // it is not required, since it is not stored on the backend\r\n uuId: PropTypes.string, // for new added nested\r\n nestedParent: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\r\n discountType: PropTypes.oneOf(Object.keys(DISCOUNT_MAIN_TYPES)),\r\n financePercentage: PropTypes.number,\r\n financeMonths: PropTypes.number,\r\n financeSalesPercentage: PropTypes.number,\r\n financeOptions: PropTypes.string, // \"[12345, 12314, 1233]\" JSON\r\n multiSelections: PropTypes.bool,\r\n approveOptions: PropTypes.string, // \"['Some Name', 'Another Name']\"\r\n};\r\n\r\nexport const discountSectionsInterface = {\r\n id: PropTypes.number.isRequired,\r\n order: PropTypes.number.isRequired,\r\n name: PropTypes.string.isRequired,\r\n type: PropTypes.string,\r\n discounts: PropTypes.arrayOf(PropTypes.shape(discountInterFace))\r\n};\r\n","export const baseDashboardImagesPath = document.kvConfig.kioskMode ? './images/dashboard/images/icons/pj-scope-icons/enabled/' : ((location.port === '9007')\r\n ? 'http://quotekandb.com/content/Views/dashboard/images/icons/pj-scope-icons/enabled/'\r\n : '/content/Views/dashboard/images/icons/pj-scope-icons/enabled/');\r\nexport const baseNewImagesPath = (document.kvConfig.kioskMode || document.kvConfig.noInternetMode || location.port === '9007')\r\n ? './'\r\n : '/content/Views/visualizers/';\r\n","import {getPriceWithCurrency} from \"./helpers\";\r\nimport store from \"../store\";\r\n\r\n/**\r\n *\r\n * @param price {string|number|null}\r\n * @param feature {featureInterface}\r\n * @param fabricatorData {object}\r\n * @param messages {object} intl messages object (t obe able to use in the receipt)\r\n * @return {string}\r\n */\r\nexport const getPriceWithIncluded = (price, feature, fabricatorData, messages) => {\r\n if (price) {\r\n return getPriceWithCurrency(fabricatorData.settings, price, feature, false)\r\n }\r\n if (feature && fabricatorData.isLowes && (feature.partId === \"center_island_sink\" || feature.partId === \"sink\")) {\r\n return messages[\"navItem.priceNotIncluded\"]\r\n }\r\n return messages[\"navItem.priceIncluded\"]\r\n}\r\n\r\n/**\r\n * returns actual price property\r\n * @param feature {featureInterface}\r\n * @param fabricatorSettings {object}\r\n * @return {string|number|null}\r\n */\r\nexport const getFeaturePriceProperty = (feature, fabricatorSettings = null) => {\r\n let settings = fabricatorSettings;\r\n if (!settings) {\r\n settings = store.getState().fabricatorState.settings;\r\n }\r\n if (settings.useFabricatorCostPrices) { // show fabricator prices instead of retail prices\r\n return feature.dbFeature.price\r\n }\r\n if (settings.showSalePrices && (typeof feature.dbFeature.fabricatorCost == \"number\") && (feature.dbFeature.fabricatorCost > 0)) {\r\n return feature.dbFeature.fabricatorCost\r\n }\r\n return feature.dbFeature.cost\r\n}\r\n\r\n\r\n/**\r\n *\r\n * @param fabricatorData {object}\r\n * @param forTotal {boolean}\r\n * @return {boolean}\r\n */\r\nexport const getShowPrice = (fabricatorData, forTotal = false) => {\r\n const fabricatorSettings = fabricatorData.settings;\r\n if (forTotal) {\r\n return fabricatorSettings.showPricing && !fabricatorData.hidePricesFromUser;\r\n }\r\n return fabricatorSettings.showPricing && !fabricatorData.hideCheckoutBreakdownCost && !fabricatorData.hidePricesFromUser;\r\n};\r\n\r\nexport function numberWithCommas(x) {\r\n return x.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\r\n}\r\n\r\n/**\r\n *\r\n * @param price {number}\r\n * @param markUpValue {number}\r\n * @param markUpType {\"mark_up\"|\"mark_down\"|undefined}\r\n * @return {number}\r\n */\r\nconst getMarkUpPrice = (price, markUpValue, markUpType) => {\r\n const percentCost = price * markUpValue / 100;\r\n return markUpType === \"mark_down\" ? price - percentCost : price + percentCost\r\n}\r\n\r\n/**\r\n *\r\n * @param price {number}\r\n * @param markUpLogic {markUpLogic}\r\n * @param fabricatorSettings {object}\r\n * @return {number}\r\n */\r\nexport const updatePriceWithMarkUp = (price, markUpLogic, fabricatorSettings) => {\r\n if (!price || !markUpLogic) {\r\n return price\r\n }\r\n if (fabricatorSettings && fabricatorSettings.useFabricatorCostPrices) {\r\n if (markUpLogic.cost && markUpLogic.cost.value) {\r\n return getMarkUpPrice(price, markUpLogic.cost.value, markUpLogic.cost.type)\r\n }\r\n } else if (fabricatorSettings && fabricatorSettings.showSalePrices) {\r\n if (markUpLogic.discounts && markUpLogic.discounts.value) {\r\n return getMarkUpPrice(price, markUpLogic.discounts.value, markUpLogic.discounts.type)\r\n }\r\n } else if (markUpLogic.retail && markUpLogic.retail.value) {\r\n return getMarkUpPrice(price, markUpLogic.retail.value, markUpLogic.retail.type)\r\n }\r\n return price\r\n}\r\n\r\nexport const parseMarkUp = (markUpString) => {\r\n if (!markUpString) {\r\n return \"\"\r\n }\r\n let globalMarkUp = JSON.parse(markUpString);\r\n if (typeof globalMarkUp === \"object\" && (globalMarkUp != null)) {\r\n // {retail: {value: \"10\", type: \"mark_up\"}} -> {retail: {value: 10, type: \"mark_up\"}}\r\n Object.keys(globalMarkUp).forEach(key => {\r\n if ((typeof globalMarkUp[key] === \"object\") && globalMarkUp[key].value) {\r\n globalMarkUp[key].value = +globalMarkUp[key].value;\r\n }\r\n });\r\n if (globalMarkUp.isUpdatedInJobBoard) {\r\n delete globalMarkUp.isUpdatedInJobBoard // we don't need this property anymore, once we save the job - it should be erased\r\n }\r\n }\r\n return globalMarkUp\r\n}\r\n","//INITIAL FLOW\r\nimport * as types from \"./actionTypes\";\r\n\r\nexport const addNewQuote = () => ({\r\n type: types.ADD_NEW_QUOTE,\r\n payload: {}\r\n});\r\n\r\nexport const setQuotes = (quotes) => ({\r\n type: types.SET_QUOTES,\r\n payload: {quotes}\r\n});\r\n\r\nexport const updateQuote = (quote, updatedQuote) => ({\r\n type: types.UPDATE_QUOTE,\r\n payload: {quote, updatedQuote}\r\n});\r\n\r\nexport const setActiveQuoteIndex = (activeQuoteIndex) => ({\r\n type: types.SET_ACTIVE_QUOTE_INDEX,\r\n payload: {activeQuoteIndex}\r\n});\r\n","import {createContext} from \"react\";\r\n\r\nexport default createContext({});\r\n","import {iCmp} from \"../../../../misc/utils\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport Layer from \"../../../visComponents/layer\";\r\nimport PartCommon from \"../../../visComponents/partCommon\";\r\n\r\nexport class Part extends PartCommon {\r\n\r\n constructor(isParent, isChild, menuType) {\r\n super();\r\n if (isChild || (isParent && menuType === PartMenuType.Simple)) {\r\n this.featuresList = {\r\n Large: [],\r\n Small: []\r\n };\r\n this.featuresPartsList = {\r\n Large: [],\r\n Small: []\r\n };\r\n this.allFeaturesReceived = false;\r\n this.realFeaturesReceived = false; // this prop is need on Scroll (if features count more that 1000)\r\n this.nextFeaturesPageToLoad = 0;\r\n this.activeFeature = null;\r\n this.placeholderFeature = null;\r\n this.shadowFeature = null;\r\n this.placeholderChanged = false;\r\n this.firstClick = {\r\n \"0\": false // first quote\r\n };\r\n this.activeLockedFeature = null;\r\n this.activeNotInVisualizerFeature = null; // is needed to display in the QT selected activeNotInVisualizerFeature, but render proper activeFeature layer(for example, countertop)\r\n // name = \"\";\r\n this.visible = true;\r\n this.categoryEnabled = false;\r\n this.layout = null;\r\n this.featureGroupVisible = true; // dashboard's feature group eye ball logic\r\n this.featureGroupEnabled = true; // dashboard's feature group checkbox logic\r\n this.filtersReceived = null; // array of filters values, comes from BE, for ex [1221, 347, 1124]\r\n }\r\n if (isParent) {\r\n this.partThumbnail = '';\r\n this.relatedItems = [];\r\n }\r\n if (!isChild && !isParent) {\r\n this.dbFeature = null;\r\n this.layer = new Layer(\"bv\");\r\n this._customDisplayName = null;\r\n this.notesList = {};\r\n }\r\n this.partName = \"\";\r\n }\r\n\r\n set features(featuresList) {\r\n // features can't be set directly, we need to change featuresList array\r\n }\r\n get features() {\r\n const layout = this.layout || this.getParent().layout;\r\n return this.featuresList[layout.getCurrentLayoutName()]\r\n }\r\n set featuresParts(featuresList) {\r\n // featuresParts can't be set directly, we need to change featuresPartsList array\r\n }\r\n get featuresParts() {\r\n const layout = this.layout || this.getParent().layout;\r\n return this.featuresPartsList[layout.getCurrentLayoutName()]\r\n }\r\n\r\n featureClicked() {\r\n this.updateLocalStorage();\r\n // other specific events, for ex. Google Analytics, etc.\r\n }\r\n\r\n /**\r\n * Checks whether a given for condition matches the needed value (or array of values)\r\n * @param name {string}\r\n * @param value {string || array}\r\n * @returns {int} -1 - no such for condition, 0 - no match, 1 - matches\r\n */\r\n matchesMetaForCondition(name, value) {\r\n return this.metaData[name] && this.metaData[name].some(condValue => {\r\n return Array.isArray(value) ? value.some(val => iCmp(condValue, val, true)) : iCmp(condValue, value, true)\r\n });\r\n }\r\n\r\n matchesMetaForArrayOfConditions(arrayOfConditions) {\r\n return arrayOfConditions.every((condition) => {\r\n let conditionPassed = this.matchesMetaForCondition(condition.propName, condition.propValue);\r\n if (condition.propName === \"EX L\" && !conditionPassed) {\r\n conditionPassed = this.matchesMetaForCondition( \"Wall\", condition.propValue);\r\n } else if (condition.propName === \"Size\" && condition.propValue === \"60in\" && Array.isArray(this.metaData[\"Size\"])\r\n && this.metaData[\"Size\"].includes(\"30in\")) {\r\n conditionPassed = false\r\n }\r\n return conditionPassed\r\n })\r\n }\r\n}\r\n\r\n\r\n","import React from \"react\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport Analytics from './../../analytics';\r\nimport store from \"../../store\";\r\nimport {UserPopupTypes} from \"../visComponents/constants\";\r\n\r\nconst LockedView = (props) => {\r\n const fabricatorSettings = store.getState().fabricatorState.settings;\r\n const getQuoteEnabled = fabricatorSettings.enableQuote;\r\n return (\r\n
\r\n \r\n
\r\n
\r\n )\r\n};\r\n\r\nLockedView.displayName = 'LockedView';\r\n\r\nexport default LockedView;\r\n\r\n","import React, { Component } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport $ from \"jquery\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport Analytics from \"../../../../analytics\";\r\nimport {getCurrentLayout} from \"../../../appLayout\";\r\n\r\nexport default class MobileMenuSelect extends Component {\r\n\r\n static propTypes = {\r\n // relatedItems: PropTypes.array,\r\n // relatedItemClick: PropTypes.func.isRequired,\r\n onSubPartClick: PropTypes.func.isRequired,\r\n onParentItemClick: PropTypes.func.isRequired,\r\n parentItems: PropTypes.arrayOf(PropTypes.instanceOf(DesignNavigationItem)),\r\n activePart: PropTypes.object,\r\n activeSubPart: PropTypes.object,\r\n desktop: PropTypes.bool,\r\n };\r\n\r\n static defaultProps = {\r\n desktop: false,\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n toggle: false,\r\n showRelatedItems: true,\r\n translateId: this.props.activeSubPart ? this.props.activeSubPart.translateId : ''\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n if (!this.props.desktop) {\r\n this.setShowName(this.props);\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n window.removeEventListener('click', this.handleWrapperBlur)\r\n }\r\n\r\n componentWillReceiveProps(nextProps) {\r\n this.setShowName(nextProps);\r\n }\r\n\r\n setShowName(props) {\r\n if (props.activeSubPart && (props.activeSubPart.translateId !== this.state.translateId)) {\r\n this.setState({\r\n translateId: props.activeSubPart.translateId\r\n })\r\n }\r\n if (!props.activeSubPart && props.activePart && (props.activePart.partName !== this.state.translateId)) {\r\n this.setState({\r\n translateId: props.activePart.translateId\r\n })\r\n }\r\n }\r\n\r\n handleParentItemClick = (parentItem) => {\r\n Analytics.sendClickEvent(\"parent-item-clicked\");\r\n Analytics.sendClickEvent(\"parent-item-clicked: \" + parentItem.text);\r\n console.log('click parentItem', parentItem);\r\n this.props.onParentItemClick(parentItem);\r\n let showRelatedItems = true;\r\n if ((parentItem.text === \"Ceiling\" &&\r\n (document.kvConfig.visualizerType === \"Bathroom\" || document.kvConfig.visualizerType === \"BV\"))\r\n || parentItem.text === \"Floor\" || parentItem.text === \"Window\" || parentItem.text === \"Toilet\") {\r\n showRelatedItems = false;\r\n this.handleToggleDropdown();\r\n }\r\n\r\n this.setState({\r\n showRelatedItems,\r\n translateId: parentItem.part.translateId\r\n });\r\n if (parentItem.text === \"Floor\") {\r\n $('html, body').animate({scrollTop: document.body.scrollHeight}, 800);\r\n } else if (parentItem.text === \"Ceiling\") {\r\n $('html, body').animate({scrollTop: 0}, 800);\r\n }\r\n };\r\n\r\n handleBackClick = () => {\r\n this.setState({\r\n showRelatedItems: false,\r\n translateId: this.props.activePart.translateId\r\n });\r\n };\r\n\r\n handleRelatedItemClick = (relatedItem) => {\r\n Analytics.sendClickEvent(\"related-item-clicked\");\r\n Analytics.sendClickEvent(\"related-item-clicked: \" + relatedItem.part.partName);\r\n console.log('relatedItem', relatedItem);\r\n this.props.onSubPartClick(relatedItem);\r\n this.handleToggleDropdown();\r\n this.setState({\r\n translateId: relatedItem.part.translateId\r\n });\r\n if (relatedItem.text === \"Ceiling\") {\r\n $('html, body').animate({scrollTop: 0}, 800);\r\n }\r\n };\r\n\r\n handleToggleDropdown = () => {\r\n Analytics.sendClickEvent(this.state.toggle\r\n ? \"mobile-menu-select-dropdown-toggle-closed\"\r\n : \"mobile-menu-select-dropdown-toggle-open\"\r\n );\r\n\r\n this.setState({\r\n toggle: !this.state.toggle\r\n }, () => {\r\n if (this.state.toggle) {\r\n this.setState({\r\n subParts: this.props.activePart.subParts(),\r\n showRelatedItems: this.props.activePart.partName === \"Toilet\" ? false : !!this.props.activeSubPart\r\n });\r\n setTimeout(() => {\r\n window.addEventListener('click', this.handleWrapperBlur);\r\n }, 0)\r\n } else {\r\n window.removeEventListener('click', this.handleWrapperBlur)\r\n }\r\n })\r\n };\r\n\r\n handleWrapperBlur = (e) => {\r\n if (!e.target.closest('.menu-select__dropdown-list-item')\r\n && !e.target.closest('.menu-select__dropdown-back') && !e.target.closest('.menu-select__dropdown')) {\r\n this.handleToggleDropdown();\r\n }\r\n };\r\n\r\n handlePrevClick = () => {\r\n Analytics.sendClickEvent('mobile-menu-select-previous');\r\n // console.log('this.state.subParts', this.props.parentItems);\r\n // console.log('this.state.translateId', this.state.translateId);\r\n // console.log('this.state.subParts', this.state.subParts);\r\n // console.log('this.props.activePart', this.props.activePart);\r\n // console.log('this.props.activeSubPart', this.props.activeSubPart);\r\n\r\n let prevItem = null;\r\n if (this.props.activeSubPart) {\r\n const subParts = this.props.activePart.subParts();\r\n const currentChildIndex = subParts.findIndex(childItem => {\r\n return this.props.activeSubPart.partId === childItem.part.partId\r\n });\r\n prevItem = subParts[currentChildIndex - 1];\r\n // console.log('currentChildIndex', currentChildIndex);\r\n // console.log('prevItem', prevItem);\r\n }\r\n if (prevItem) {\r\n this.props.onSubPartClick(prevItem);\r\n this.setState({\r\n translateId: prevItem.part.translateId\r\n });\r\n } else {\r\n const currentParentIndex = this.props.parentItems.findIndex(parentItem => {\r\n const partName = this.props.activePart.partName;\r\n return parentItem.text === partName\r\n });\r\n const prevParentItem = this.props.parentItems[currentParentIndex - 1];\r\n\r\n // console.log('currentParentIndex', currentParentIndex);\r\n // console.log('prevParentItem', prevParentItem);\r\n if (prevParentItem) {\r\n this.props.onParentItemClick(prevParentItem);\r\n const subParts = prevParentItem.part.subParts();\r\n const lastSubPart = subParts[subParts.length - 1];\r\n // console.log('lastSubPart',lastSubPart);\r\n if (prevParentItem.part.menuType === 1) {\r\n setTimeout(() => {\r\n this.props.onSubPartClick(lastSubPart);\r\n this.setState({\r\n translateId: lastSubPart.part.translateId,\r\n });\r\n }, 0)\r\n }\r\n }\r\n }\r\n\r\n };\r\n\r\n handleNextClick = () => {\r\n Analytics.sendClickEvent('mobile-menu-select-next');\r\n let nextItem = null;\r\n if (this.props.activeSubPart) {\r\n const subParts = this.props.activePart.subParts();\r\n const currentChildIndex = subParts.findIndex(childItem => {\r\n return this.props.activeSubPart.partId === childItem.part.partId\r\n });\r\n nextItem = subParts[currentChildIndex + 1];\r\n }\r\n if (nextItem) {\r\n this.props.onSubPartClick(nextItem);\r\n this.setState({\r\n translateId: nextItem.part.translateId\r\n });\r\n } else {\r\n const currentParentIndex = this.props.parentItems.findIndex(parentItem => {\r\n const partName = this.props.activePart.partName;\r\n return parentItem.text === partName\r\n });\r\n const nextParentItem = this.props.parentItems[currentParentIndex + 1];\r\n if (nextParentItem) {\r\n this.props.onParentItemClick(nextParentItem);\r\n const subParts = nextParentItem.part.subParts();\r\n const lastSubPart = subParts[0];\r\n if (nextParentItem.part.menuType === 1) {\r\n setTimeout(() => {\r\n this.props.onSubPartClick(lastSubPart);\r\n this.setState({\r\n translateId: lastSubPart.part.translateId,\r\n });\r\n }, 0)\r\n }\r\n }\r\n }\r\n };\r\n\r\n render() {\r\n\r\n const dropDownStyles = this.state.toggle ? { height: this.props.desktop ? 320 : window.innerHeight - 42 } : {};\r\n\r\n return (\r\n
\r\n {/*
*/}\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n {this.state.translateId ? : null}\r\n \r\n
\r\n
\r\n {this.state.showRelatedItems\r\n ? \r\n : null}\r\n
    \r\n {this.state.showRelatedItems && this.props.activePart ? this.props.activePart.subParts(true, true).map((subPart, index) => {\r\n if (!subPart.part.translateId) {\r\n console.info(\"Feature Group Translate is missing!\", subPart.part.partId);\r\n }\r\n const layout = getCurrentLayout();\r\n if (!layout.hasNavItemsLength(subPart)) {\r\n return null\r\n }\r\n return (\r\n
  • this.handleRelatedItemClick(subPart)}\r\n className={\"menu-select__dropdown-list-item\"\r\n + (this.props.activeSubPart && (this.props.activeSubPart.partName === subPart.text)\r\n ? \" menu-select__dropdown-list-item--active\" : \"\")\r\n + ` menu-select__dropdown-list-item--${subPart.part.partId}`}>\r\n {subPart.part.translateId ? : null}\r\n
  • \r\n )\r\n }) : this.props.parentItems.map((parentItem, index) => {\r\n if (!parentItem.part.translateId) {\r\n console.info(\"Feature Parent Group translate is missing!\", parentItem.text);\r\n }\r\n return (\r\n
  • this.handleParentItemClick(parentItem)}\r\n className={\"menu-select__dropdown-list-item\"\r\n + (this.props.activePart && (this.props.activePart.partName === parentItem.text)\r\n ? \" menu-select__dropdown-list-item--active\" : \"\")\r\n + ` menu-select__dropdown-list-item--${parentItem.text.toLowerCase().replace(/ /g,\"_\")}`}>\r\n {parentItem.part.translateId ? : null}\r\n
  • \r\n )\r\n })}\r\n
\r\n
\r\n
\r\n
\r\n )\r\n }\r\n}\r\n","import {Part} from \"../part\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport {vanityThumbnail} from \"../../../bvComponent/core/assets\";\r\n\r\nimport CompleteVanity from \"../subparts/vanity/completeVanity\";\r\nimport VanityHandle from \"../subparts/vanity/vanityHandle\";\r\nimport VanityCabinet from \"../subparts/vanity/vanityCabinet\";\r\nimport VanityCountertop from \"../subparts/vanity/vanityCountertop\";\r\nimport VanityBacksplash from \"../subparts/vanity/vanityBacksplash\";\r\nimport Mirror from \"../subparts/vanity/mirror\";\r\nimport Sink from \"../subparts/vanity/sink\";\r\nimport VanityFaucet from \"../subparts/vanity/faucet\";\r\n\r\nexport class Vanity extends Part {\r\n static id = 'Vanity';\r\n\r\n static Types = {\r\n Complete: 'Complete',\r\n Custom: 'Custom'\r\n };\r\n\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Vanity';\r\n this.translateId = \"visualizer.bathroom.vanity\";\r\n this.partThumbnail = vanityThumbnail;\r\n this.activeSubType_ = Vanity.Types.Custom;\r\n this.relatedItems = [];\r\n this.placeholdersNeeded = false; // only Vanity property\r\n\r\n // vanity parts\r\n this.vanityCabinet = null;\r\n this.completeVanity = null;\r\n this.countertop = null;\r\n this.sink = null;\r\n this.faucet = null;\r\n this.vanityBacksplash = null;\r\n this.vanityHandle = null;\r\n this.mirror = null;\r\n }\r\n\r\n load(dbFeature) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Sink\":\r\n relatedItemName = \"sink\";\r\n RelatedItemClass = Sink;\r\n break;\r\n case \"Mirror\":\r\n relatedItemName = \"mirror\";\r\n RelatedItemClass = Mirror;\r\n break;\r\n case \"Countertop\":\r\n relatedItemName = \"countertop\";\r\n RelatedItemClass = VanityCountertop;\r\n break;\r\n case \"Faucet\":\r\n relatedItemName = \"faucet\";\r\n RelatedItemClass = VanityFaucet;\r\n break;\r\n case \"VanityBacksplash\":\r\n case \"BackSplash\":\r\n case \"Backsplash\":\r\n relatedItemName = \"vanityBacksplash\";\r\n RelatedItemClass = VanityBacksplash;\r\n break;\r\n case \"Vanity Handle\":\r\n relatedItemName = \"vanityHandle\";\r\n RelatedItemClass = VanityHandle;\r\n break;\r\n case \"Vanity\": {\r\n const completeVanity = dbFeature.metaData && dbFeature.metaData[\"Vanity\"]\r\n && dbFeature.metaData[\"Vanity\"].includes(\"Complete\");\r\n\r\n relatedItemName = completeVanity ? \"completeVanity\" : \"vanityCabinet\";\r\n RelatedItemClass = completeVanity ? CompleteVanity : VanityCabinet;\r\n break;\r\n }\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n if (relatedItemName === \"sink\") {\r\n const faucetIndex = this.relatedItems.findIndex(relItem => relItem.partName === 'Faucet');\r\n faucetIndex ? this.relatedItems.splice(faucetIndex, 0, this.sink) : this.relatedItems.push(this.sink);\r\n } else if (relatedItemName === \"completeVanity\") {\r\n this.relatedItems.unshift(this.completeVanity); // cabinet needs to be first in the list.\r\n } else if (relatedItemName === \"vanityCabinet\") {\r\n this.relatedItems.unshift(this.vanityCabinet); // cabinet needs to be first in the list.\r\n } else {\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n getRelatedItems() {\r\n return this.relatedItems.filter(item => item.visible.includes(this.activeSubType_));\r\n }\r\n\r\n subTypes() {\r\n return this.vanityCabinet && this.completeVanity ? [Vanity.Types.Custom, Vanity.Types.Complete] : [];\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return this.activeSubType_ === Vanity.Types.Complete;\r\n }\r\n\r\n activeSubType() {\r\n return this.activeSubType_;\r\n }\r\n\r\n subParts() {\r\n const relatedItems = this.getRelatedItems();\r\n const excluded = [];\r\n const vanityPart = relatedItems.find(navItem => navItem.partId === \"vanity_cabinet\");\r\n if (vanityPart && vanityPart.activeFeature\r\n && vanityPart.activeFeature.metaData[\"VanityHandle\"]\r\n && vanityPart.activeFeature.metaData[\"VanityHandle\"].includes(\"None\")) {\r\n excluded.push(\"vanity_handle\")\r\n }\r\n return relatedItems\r\n .filter(item => !excluded.includes(item.partId))\r\n .map(_ => new DesignNavigationItem(_.partName, _));\r\n }\r\n\r\n // subPartsWithAccentWall() {\r\n // const vanityAccent = this.layout.parts.Walls.vanityAccent;\r\n // return [new DesignNavigationItem(vanityAccent.partName, vanityAccent),\r\n // ...this.getRelatedItems().map(_ => new DesignNavigationItem(_.partName, _))];\r\n // }\r\n\r\n handleSubTypeClick(subType) {\r\n this.activeSubType_ = subType;\r\n this.getRelatedItems().forEach((relatedItem) => {\r\n if (!relatedItem.activeFeature) {\r\n relatedItem.setDefault()\r\n }\r\n });\r\n }\r\n\r\n setDefaultPartAfterSubTypeClick() {\r\n return this.subParts()[0]\r\n }\r\n\r\n setDefault(layout) {\r\n this.getRelatedItems().forEach(_ => _.setDefault(layout));\r\n }\r\n\r\n counterTopSize() {\r\n return this.getCounterTopSize() || \"24\"; // temporary hardcode until we would have meta data finished\r\n }\r\n\r\n getCounterTopSize() {\r\n if (this.vanityCabinet && !this.vanityCabinet.activeFeature) {\r\n this.vanityCabinet.setDefault()\r\n }\r\n return (this.vanityCabinet && this.vanityCabinet.activeFeature)\r\n ? this.vanityCabinet.activeFeature.dbFeature.metaData[\"VanitySize\"]\r\n : null;\r\n }\r\n\r\n toggleVanityParts(disabled) {\r\n this.getRelatedItems().forEach(relItem => {\r\n if (relItem.partId === \"vanity_sink\" || relItem.partId === \"vanity_faucet\"\r\n || relItem.partId === \"vanity_countertop\" || relItem.partId === \"vanity_cabinet\"\r\n || relItem.partId === \"vanity_handle\" || relItem.partId === \"vanity_backsplash\") {\r\n relItem.disabled = disabled;\r\n }\r\n });\r\n }\r\n}\r\n\r\n","import uniq from \"lodash/uniq\";\r\nimport isEqual from \"lodash/isEqual\";\r\nimport * as uuid from \"uuid\";\r\n\r\nimport {COUNTERTOP_GROUP} from \"../bvcomponents/kvComponent/core/constants\";\r\nimport Config, {USE_FAB_FILTERS_ONLY} from \"../config\";\r\nimport {hardCodeIsAmericanImport, hardCodeIsDeStefano, hardCodeIsFloform} from \"./fabricatorHardcode\";\r\nimport {getAllFeatureFilters, getFilterGroupValue, getFilterGroupValues, mergeFilterObjects} from \"./utils\";\r\nimport {getBvGroupFeatures, getBvGroupFilterValues} from \"../api/server-api\";\r\nimport {getCurrentLayout} from \"../bvcomponents/appLayout\";\r\nimport {getHardCodedFilterGroups} from \"../bvcomponents/look/filtersHardcode\";\r\nimport store from \"../store\";\r\nimport {updateFiltersCount} from \"../actions/filtersFunctions\";\r\n\r\n\r\n/**\r\n * returns feature' color filter value object\r\n * @param lookActiveFeature {object}\r\n * @param filterGroups {array}\r\n * @param colorFilterGroup {object}\r\n * @returns {object} feature' color filter value object\r\n */\r\nexport const getColorFilterValue = (lookActiveFeature, filterGroups, colorFilterGroup = null) => {\r\n if (!lookActiveFeature || !Array.isArray(filterGroups)) {\r\n return null\r\n }\r\n\r\n if (!colorFilterGroup) {\r\n colorFilterGroup = filterGroups.find(group => group.name === \"Color\");\r\n }\r\n\r\n if (!colorFilterGroup) {\r\n return null\r\n }\r\n\r\n const activeFeatureValues = getFilterGroupValues(lookActiveFeature, colorFilterGroup);\r\n\r\n // console.log(\"activeFeatureValues\", activeFeatureValues);\r\n\r\n if (!Array.isArray(activeFeatureValues) || !activeFeatureValues.length) {\r\n return null\r\n }\r\n\r\n return getFilterGroupValue(activeFeatureValues[0], colorFilterGroup);\r\n}\r\n\r\nexport const setActivePartFilterValues = (filterValuesArray, activePart, filterGroups) => {\r\n console.log(\"filterValuesArray from backend:\", filterValuesArray);\r\n if ((COUNTERTOP_GROUP.includes(activePart.partId) || activePart.partId === \"vanity_countertop\")\r\n && filterValuesArray && !Config.isDevMode() && !USE_FAB_FILTERS_ONLY) {\r\n let availableCountertopGroupFilters = [\"color\", \"stone color\", \"collection\", \"manufacturer\", \"countertop material\", \"stone finish\", \"color group\"]\r\n if (activePart.partId === \"backsplash\") {\r\n availableCountertopGroupFilters.push(\"material\");\r\n }\r\n if (document.kvConfig.userId === 141822) { // https://asw.quotekitchenandbath.com/kitchen#/\r\n availableCountertopGroupFilters.push(\"material thickness\");\r\n availableCountertopGroupFilters.push(\"promotional discounts\");\r\n availableCountertopGroupFilters.push(\"color group\");\r\n }\r\n if (document.kvConfig.userId === 138452) { // https://cutting_edge_countertops.quotekitchenandbath.com/kitchen#/\r\n availableCountertopGroupFilters.push(\"price group\");\r\n }\r\n if (document.kvConfig.userId === 252141) { // https://solidsurface.quotekitchenandbath.com/visualizer#/\r\n availableCountertopGroupFilters.push(\"price\");\r\n }\r\n if (window.location.href.includes(\"isfa\")) { // https://isfa.quotekitchenandbath.com/kitchen?mode=dashboard&p=208659&language=en-US#/visualizer\r\n availableCountertopGroupFilters.push(\"color temperature\");\r\n }\r\n if (hardCodeIsDeStefano()) { // https://de_stefano_new.quotekitchenandbath.com/kitchen#/\r\n availableCountertopGroupFilters = availableCountertopGroupFilters.filter(f => {\r\n return f !== \"collection\" && f !== \"manufacturer\"\r\n });\r\n availableCountertopGroupFilters.push(\"material thickness\");\r\n }\r\n if (hardCodeIsFloform()) {\r\n availableCountertopGroupFilters = availableCountertopGroupFilters.filter(f => f !== \"stone color\");\r\n }\r\n const allFilterGroups = filterGroups.filter(filterGroup => {\r\n if (window.location.href.includes(\"porcelanosa\")) { // show all filters on https://porcelanosa_new.quotekitchenandbath.com/kitchen#/ except Edge\r\n return filterGroup.name && !filterGroup.name.includes(\"Edge\")\r\n }\r\n // if (USE_FAB_FILTERS_ONLY) {\r\n // if (!Array.isArray(filterGroup.values) || !filterGroup.values.length) {\r\n // return false\r\n // }\r\n // if (filterGroup.values.filter(fgValue => fgValue.isFabricatorCustomFilter)) {\r\n // return true\r\n // }\r\n // }\r\n return filterGroup && filterGroup.name && availableCountertopGroupFilters.includes(filterGroup.name.trim().toLowerCase())\r\n });\r\n filterValuesArray = filterValuesArray.filter(filterId => {\r\n return allFilterGroups.some(filterGroup => filterGroup.values && filterGroup.values.some(filterValueObject => {\r\n return filterValueObject.id === filterId\r\n }))\r\n });\r\n }\r\n if (activePart.allFeaturesReceived && hardCodeIsAmericanImport()) {\r\n activePart.features.forEach(feature => {\r\n [\"filterValueIDs\", \"fabFilterValueIDs\"].forEach(key => {\r\n if (feature.dbFeature[key]) {\r\n Object.keys(feature.dbFeature[key]).forEach(filterGroupId => {\r\n const filterValues = feature.dbFeature[key][filterGroupId];\r\n if (Array.isArray(filterValues)) {\r\n filterValues.forEach(filterValueId => {\r\n if (!filterValuesArray.includes(filterValueId)) {\r\n filterValuesArray.push(filterValueId)\r\n }\r\n })\r\n }\r\n })\r\n }\r\n })\r\n })\r\n console.log(\"filterValuesArray from features:\", filterValuesArray);\r\n }\r\n activePart.filtersReceived = filterValuesArray;\r\n};\r\n\r\n\r\n\r\n/**\r\n * returns all available filter groups with values for navItems\r\n * @param navItems {array}\r\n * @param allFilterGroups {array}\r\n * @returns {array}\r\n */\r\nexport const getAvailableFiltersForNavItems = (navItems, allFilterGroups) => {\r\n let filterGroups = [];\r\n for (let i = 0; i < navItems.length; i++) {\r\n const checkFeature = navItems[i].part;\r\n let featureFilters = getAllFeatureFilters(checkFeature);\r\n const featureOptions = navItems[i].colorOptions;\r\n if (Array.isArray(featureOptions) && featureOptions.length) {\r\n featureOptions.forEach((option) => {\r\n if (option.feature.dbFeature.id !== checkFeature.dbFeature.id) {\r\n const fOptions = getAllFeatureFilters(option.feature);\r\n featureFilters = mergeFilterObjects(featureFilters, fOptions)\r\n }\r\n });\r\n }\r\n Object.keys(featureFilters).forEach(key => {\r\n let existingFilterGroup = filterGroups.find(group => group.id === +key);\r\n const filterGroupFromAll = allFilterGroups.find(group => group.id === +key);\r\n if (!existingFilterGroup) {\r\n if (filterGroupFromAll) {\r\n existingFilterGroup = Object.assign({}, filterGroupFromAll, {values: []});\r\n filterGroups.push(existingFilterGroup);\r\n }\r\n }\r\n if (existingFilterGroup) {\r\n const currentFilterValues = featureFilters[existingFilterGroup.id];\r\n if (Array.isArray(currentFilterValues)) {\r\n currentFilterValues.forEach(filterValueId => {\r\n if (!existingFilterGroup.values.some(fValue => fValue.id === filterValueId) && filterGroupFromAll) {\r\n const fValue = getFilterGroupValue(filterValueId, filterGroupFromAll);\r\n if (fValue) {\r\n existingFilterGroup.values.push(fValue)\r\n }\r\n }\r\n })\r\n }\r\n }\r\n })\r\n }\r\n return filterGroups\r\n}\r\n\r\n/**\r\n * returns all available filter groups with values for received from backend filters\r\n * @param featureGroup {featureGroupInterface}\r\n * @param allFilterGroups {[filterGroup]}\r\n * @returns {array}\r\n */\r\nexport const getAvailableFiltersForReceivedFilters = (featureGroup, allFilterGroups) => {\r\n let filterGroups = [];\r\n for (let i = 0; i < allFilterGroups.length; i++) {\r\n const filterGroup = allFilterGroups[i];\r\n for (let k = 0; k < filterGroup.values.length; k++) {\r\n const filterValue = filterGroup.values[k];\r\n if (featureGroup.filtersReceived.includes(filterValue.id)) {\r\n let existingFilterGroup = filterGroups.find(group => group.id === filterGroup.id);\r\n if (!existingFilterGroup) {\r\n existingFilterGroup = Object.assign({}, filterGroup, {values: []});\r\n filterGroups.push(existingFilterGroup);\r\n }\r\n if (!existingFilterGroup.values.some(fValue => fValue.id === filterValue.id)) {\r\n existingFilterGroup.values.push(filterValue)\r\n }\r\n }\r\n }\r\n }\r\n return filterGroups\r\n}\r\n\r\nexport const checkIfNeedToReceiveFeaturesIfFiltersApplied = (selectedFilters, currentParent, onScroll = false) => {\r\n let arrayOfNeededFiltersToReceive = uniq( // remove duplicates\r\n selectedFilters.map(filterObj => filterObj.filterId)\r\n );\r\n if (currentParent.filterIdsReceived) {\r\n // make one object with one filter in array (since we don't need to make request with several filters)\r\n arrayOfNeededFiltersToReceive = arrayOfNeededFiltersToReceive.filter((filterValue) => {\r\n return !currentParent.filterIdsReceived.find(filterIdsReceived => {\r\n return filterIdsReceived.filterIds.includes(filterValue)\r\n })\r\n })\r\n }\r\n if (!arrayOfNeededFiltersToReceive.length) {\r\n return false\r\n }\r\n if (!currentParent.filterIdsReceived) {\r\n currentParent.filterIdsReceived = [];\r\n return {\r\n arrayOfNeededFiltersToReceive,\r\n page: 0\r\n };\r\n } else {\r\n const existingFiltersRequest = currentParent.filterIdsReceived.find(filtersReceivedObject => {\r\n return isEqual(filtersReceivedObject.filterIds.sort(), arrayOfNeededFiltersToReceive.sort())\r\n });\r\n if (existingFiltersRequest) {\r\n if (existingFiltersRequest.allFeaturesWithFiltersReceived || !onScroll) { //!onScroll - componentWillReceiveProps request\r\n return false\r\n } else {\r\n return existingFiltersRequest\r\n }\r\n } else {\r\n return {\r\n arrayOfNeededFiltersToReceive,\r\n page: 0\r\n };\r\n }\r\n }\r\n};\r\n\r\nexport const getFeaturesFromBackendWithFilters = (featureGroup, counterTopFiltersIdsReceived, existingFilterObject = null) => {\r\n const filterObject = existingFilterObject || {\r\n uuid: uuid.v4(),\r\n filterIds: counterTopFiltersIdsReceived, // array of arrays, ex. [[56],[1122,1313]] etc.\r\n featuresReceived: 0,\r\n page: 0\r\n };\r\n if (!existingFilterObject) {\r\n featureGroup.filterIdsReceived.push(filterObject);\r\n }\r\n const featuresCountToReceive = 6000;\r\n featureGroup.requestInProgress = true;\r\n return getBvGroupFeatures(\r\n featureGroup.dbName || featureGroup.partName,\r\n filterObject.page,\r\n featuresCountToReceive,\r\n counterTopFiltersIdsReceived\r\n )\r\n .then((response) => {\r\n featureGroup.requestInProgress = false;\r\n if (response && response.length) {\r\n console.log(\"response.data with filters\", response);\r\n featureGroup.setGroupFeatures(response, featuresCountToReceive, false, \"\", null, true);\r\n featureGroup.filterIdsReceived = featureGroup.filterIdsReceived.map((filtersReceivedObject) => {\r\n if (filtersReceivedObject.uuid === filterObject.uuid) {\r\n filtersReceivedObject.featuresReceived += response.length;\r\n if (response.length < featuresCountToReceive) {\r\n filtersReceivedObject.allFeaturesWithFiltersReceived = true;\r\n } else {\r\n filtersReceivedObject.page++;\r\n }\r\n }\r\n return filtersReceivedObject\r\n });\r\n }\r\n return response\r\n });\r\n}\r\n\r\nexport const getSelectedFiltersLength = (filterGroup, selectedFilters) => {\r\n return selectedFilters.reduce((total, selectedFilter) => {\r\n return total + (filterGroup.id === selectedFilter.filterGroupId ? 1 : 0)\r\n }, 0)\r\n}\r\n\r\n\r\n/**\r\n * returns all available filter groups with values for featureGroup's part id\r\n * @param featureGroup {featureGroupInterface}\r\n * @param partId {string}\r\n * @param allFilterGroups {array}\r\n * @param shopNavItems {[navItemInterface]}\r\n * @returns {array}\r\n */\r\nexport const getAvailableFilters = (featureGroup, partId, allFilterGroups, shopNavItems = null) => {\r\n const layout = getCurrentLayout();\r\n if (!featureGroup && partId) {\r\n featureGroup = layout.getFeatureGroupByPartId(partId)\r\n }\r\n if (featureGroup) {\r\n if (featureGroup.filtersReceived) {\r\n return getAvailableFiltersForReceivedFilters(featureGroup, allFilterGroups)\r\n }\r\n const navItems = shopNavItems || layout.designNavigationItems(\r\n {part: featureGroup},\r\n {},\r\n \"\",\r\n null,\r\n false,\r\n allFilterGroups\r\n );\r\n return getAvailableFiltersForNavItems(navItems, allFilterGroups)\r\n }\r\n return []\r\n}\r\n\r\n/**\r\n * returns all available filter groups for featureGroup\r\n * @param featureGroup {featureGroupInterface}\r\n * @param shopNavItems {[navItemInterface]}\r\n * @returns {[filterGroupInterface]}\r\n */\r\nexport const getFeatureGroupFilters = (featureGroup, shopNavItems = null) => {\r\n if (!featureGroup) {\r\n return []\r\n }\r\n const {selectedFilters, filterGroups} = store.getState().filterState;\r\n if (!featureGroup.filtersReceived && !featureGroup.realFeaturesReceived && !featureGroup.filtersRequested) {\r\n // && !featureGroup.realFeaturesReceived\r\n featureGroup.filtersRequested = true;\r\n getBvGroupFilterValues(featureGroup.dbName || featureGroup.partName, null, false)\r\n .then((featureGroupFiltersResponse) => {\r\n setActivePartFilterValues(featureGroupFiltersResponse.data, featureGroup, filterGroups);\r\n store.dispatch(updateFiltersCount());\r\n });\r\n }\r\n const availableFilters = getAvailableFilters(featureGroup, \"\", filterGroups, shopNavItems);\r\n // we are using this in sqft calc\r\n // if (!IS_LIXIL_UI) { // might need to change this, but for now we hardcode filters for all profiles\r\n // return availableFilters\r\n // }\r\n return getHardCodedFilterGroups(availableFilters, featureGroup.partId, selectedFilters)\r\n}\r\n","import * as types from './actionTypes';\r\n\r\nexport const setLanguage = (language) => ({\r\n type: types.SET_LANGUAGE,\r\n payload: {language}\r\n});\r\n\r\nexport const setActiveTheme = (activeTheme) => ({\r\n type: types.SET_ACTIVE_THEME,\r\n payload: {activeTheme}\r\n});\r\n\r\nexport const setAgreeEmailCheckbox = (agreeEmailCheckbox) => ({\r\n type: types.SET_AGREE_EMAIL_CHECKBOX,\r\n payload: {agreeEmailCheckbox}\r\n});\r\n\r\nexport const setInitialVisualizerType = (initialVisualizerType) => ({\r\n type: types.SET_INITIAL_VISUALIZER_TYPE,\r\n payload: {initialVisualizerType}\r\n});\r\n\r\nexport const setNetworkConnection = (networkConnection) => ({\r\n type: types.SET_NETWORK_CONNECTION,\r\n payload: {networkConnection}\r\n});\r\n\r\nexport const setAmazonImageUrl = (amazonImageUrl) => ({\r\n type: types.SET_AMAZON_IMAGE_URL,\r\n payload: {amazonImageUrl}\r\n});\r\n\r\nexport const setAllFeaturesLoaded = (allFeaturesWereLoaded) => ({\r\n type: types.SET_ALL_FEATURES_LOADED,\r\n payload: {allFeaturesWereLoaded}\r\n});\r\n\r\nexport const setAllowRouting = (allowRouting) => ({\r\n type: types.SET_ALLOW_ROUTING,\r\n payload: {allowRouting}\r\n});\r\n\r\nexport const setAllowMainLoading = (allowMainLoading) => ({\r\n type: types.SET_ALLOW_MAIN_LOADING,\r\n payload: {allowMainLoading}\r\n});\r\n\r\nexport const setActionAfterVisualizerTypeIsChanged = (actionAfterRoomChange) => ({\r\n type: types.SET_ACTION_AFTER_VISUALIZER_TYPE_CHANGED,\r\n payload: {actionAfterRoomChange}\r\n});\r\n\r\nexport const setVisualizerIsChanging = (visualizerIsChanging) => ({\r\n type: types.SET_VISUALIZER_TYPE_CHANGING,\r\n payload: {visualizerIsChanging}\r\n});\r\n","import store from \"../store\";\r\nimport {getCurrentLayout} from \"../bvcomponents/appLayout\";\r\nimport {getImagePromiseFromLayout} from \"./getCanvasImageFromLayout\";\r\nimport {getQuoteVisualizerType, switchToNewVisualizerType} from \"./visualizerSwitchingFunctions\";\r\nimport {getRoomImageFromQtCategory} from \"./categorySwitchingFunctions\";\r\nimport {setQuotes} from \"../actions/roomsFunctions\";\r\nimport {loaderDisable, loaderEnable} from \"../bvcomponents/ui/loaderView\";\r\nimport {getTotalPrice} from \"./helpers\";\r\nimport {setVisualizerIsChanging} from \"../actions/serverFunctions\";\r\nimport {switchToWizardItem} from \"../bvcomponents/qkbPages/materialsWizard/useChangeWizardStepRoute\";\r\nimport workspace from \"../bvcomponents/sqft/components/canvas/core/workspace\";\r\nimport {\r\n deleteCartItemsThatAreMissingInSQFTCalcData,\r\n updateQuoteWithSQFTData\r\n} from \"../bvcomponents/sqft/helpers/sqftQuotesHelper\";\r\nimport {prepareSQFTData} from \"../bvcomponents/sqft/components/canvas/core/workspace/workspaceDataMapper\";\r\n\r\n/**\r\n * @param quoteIndex {number}\r\n * @param fakeLayout {object}\r\n * @param forLocalStorage {boolean}\r\n * @param nextVisualizerType {string}\r\n * @param bvImage {string}\r\n * returns updated quote object\r\n */\r\nexport const getQuoteInfo = async (quoteIndex, fakeLayout = null, forLocalStorage = false, nextVisualizerType, bvImage = \"\") => {\r\n const state = store.getState();\r\n const {quotes} = state.quotesState;\r\n const {settings} = state.fabricatorState;\r\n const {canvasDimensions} = state.bathroomVisualizerState;\r\n const quoteTotalPrice = getTotalPrice(quoteIndex);\r\n const quoteId = quotes[quoteIndex] && quotes[quoteIndex].quoteId ? quotes[quoteIndex].quoteId : null;\r\n const imageUrl = quotes[quoteIndex] && quotes[quoteIndex].imageUrl ? quotes[quoteIndex].imageUrl : null;\r\n\r\n const room = getQuoteVisualizerType(quoteIndex, nextVisualizerType);\r\n // keep old compatability without using different layouts\r\n const layout = fakeLayout || getCurrentLayout(settings.allowVisualizerSwitching ? room : document.kvConfig.visualizerType);\r\n\r\n // console.log(\"room\", room);\r\n if (!forLocalStorage && !bvImage) {\r\n if (document.kvConfig.visualizerType !== room && quotes[quoteIndex] && quotes[quoteIndex].bvImage) {\r\n bvImage = quotes[quoteIndex].bvImage;\r\n } else {\r\n bvImage = await new Promise((resolve) => resolve(getImagePromiseFromLayout(layout, canvasDimensions)))\r\n }\r\n }\r\n\r\n return {\r\n quoteId, // quoteId - quoteId is passed from the backend in the getBvJobData response(in dashboard edit mode)\r\n imageUrl, // amazon url\r\n // ...quotes[activeQuoteIndex], no need for it for now\r\n data: layout.getActiveFeaturesAsObject(false, true, true),\r\n leadFeatures: layout.getActiveNames(),\r\n bvImage,\r\n layoutType: layout.type,\r\n room, // prevent overwriting on save\r\n materialCost: quoteTotalPrice.materialPrice,\r\n sqFtCalcData: quotes[quoteIndex] ? quotes[quoteIndex].sqFtCalcData || null : null,\r\n installationCost: quoteTotalPrice.installationPrice,\r\n installationTaxes: quoteTotalPrice.installationTaxes, // installation tax amount\r\n materialTaxes: quoteTotalPrice.materialTaxes, // material tax amount\r\n priceTaxes: quoteTotalPrice.priceTaxes, // material tax amount\r\n staticCanvasImage: getRoomImageFromQtCategory(\"\", quoteIndex),\r\n isCreatedInSQFT: quotes[quoteIndex] ? quotes[quoteIndex].isCreatedInSQFT : false,\r\n isVisibleInSQFT: quotes[quoteIndex] ? quotes[quoteIndex].isVisibleInSQFT : true,\r\n qtCatName: quotes[quoteIndex] ? quotes[quoteIndex].qtCatName : \"\",\r\n }\r\n};\r\n\r\nexport const updateCurrentQuote = async (quoteIndex, nextVisualizerType, forLocalStorage = false) => {\r\n const {quotes, activeQuoteIndex} = store.getState().quotesState;\r\n const indexToUpdate = Number.isInteger(quoteIndex) ? quoteIndex : activeQuoteIndex;\r\n const currentQuoteObject = await getQuoteInfo(indexToUpdate, null, forLocalStorage, nextVisualizerType);\r\n const newQuotes = [...quotes.map((q, qIndex) => (qIndex === indexToUpdate) ? currentQuoteObject : q)];\r\n if (!forLocalStorage) {\r\n store.dispatch(setQuotes(newQuotes));\r\n }\r\n return newQuotes\r\n};\r\n\r\n// /**\r\n// * @param quotes {array}\r\n// * @param activeQuoteIndex {number}\r\n// * returns updated quotes array\r\n// */\r\n// export const updateAllQuotes = async (quotes, activeQuoteIndex) => {\r\n// console.log(\"quotes\", quotes);\r\n// let newQuotes = [];\r\n// for (const [quoteIndex, quoteObject] of quotes.entries()) {\r\n// let newQuote = null;\r\n// if (quoteIndex !== activeQuoteIndex && quoteObject.data) {\r\n// let fakeLayout = null;\r\n// const layout = getCurrentLayout();\r\n// fakeLayout = cloneDeep(layout);\r\n// fakeLayout.type = quoteObject.data.layout_type;\r\n// fakeLayout.scene = quoteObject.data.scene;\r\n// fakeLayout.getFeatures(true).forEach(parentGroup => {\r\n// parentGroup.layout = fakeLayout;\r\n// parentGroup.relatedItems.forEach(relItem => {\r\n// relItem.getParent = () => parentGroup;\r\n// })\r\n// });\r\n// await fakeLayout.selectLayout(layout.type, layout.type, null, layout.scene, null, true);\r\n// newQuote = await getQuoteInfo(quoteIndex, fakeLayout);\r\n// } else {\r\n// newQuote = await getQuoteInfo(quoteIndex);\r\n// }\r\n// newQuotes.push(newQuote);\r\n// }\r\n// console.log(\"newQuotes\", newQuotes);\r\n// store.dispatch(setQuotes(newQuotes));\r\n// return newQuotes\r\n// };\r\n\r\nexport const setNewActiveQuote = async (index, newQuotes) => {\r\n if (!newQuotes) {\r\n newQuotes = store.getState().quotesState.quotes;\r\n }\r\n const newQuote = newQuotes[index];\r\n if (newQuote && (newQuote.layoutType || newQuote.layoutType === 0) && newQuote.data) {\r\n loaderEnable();\r\n if (newQuote.room !== document.kvConfig.visualizerType) {\r\n await switchToNewVisualizerType(newQuote.room, false)\r\n }\r\n const layout = getCurrentLayout();\r\n const bvState = newQuote.data;\r\n const {wizardIsActive} = store.getState().wizardState;\r\n if (wizardIsActive) {\r\n // change selectedWizardValues!\r\n switchToWizardItem(null, null, null, null, false);\r\n }\r\n return layout.setItemsFromBvState(bvState)\r\n .then(() => {\r\n loaderDisable();\r\n store.dispatch(setVisualizerIsChanging(false))\r\n });\r\n }\r\n return Promise.resolve()\r\n};\r\n\r\nexport const deleteCartItemFromSQFTCalcData = async (cItem) => {\r\n if (cItem.sqftIds && cItem.sqftIds.length) {\r\n const state = store.getState();\r\n const quotes = state.quotesState.quotes;\r\n const cItemQuote = quotes[cItem.currentQuote];\r\n\r\n //create workspace and remove items as if they were removed from sqft\r\n workspace.import(cItemQuote.sqFtCalcData);\r\n [...cItem.sqftIds].forEach(sqftId => {\r\n workspace.removeFeatureBySQFTId(sqftId);\r\n })\r\n\r\n //save sqft calc data to quote\r\n const sqftCalcData = await prepareSQFTData();\r\n updateQuoteWithSQFTData(sqftCalcData, cItem.currentQuote);\r\n\r\n //remove cartItems that was attached features like edges and backsplashes\r\n deleteCartItemsThatAreMissingInSQFTCalcData();\r\n }\r\n}\r\n","export default function ( nvert, vertx, verty, testx, testy ) {\r\n var i, j, c = false;\r\n for( i = 0, j = nvert-1; i < nvert; j = i++ ) {\r\n if( ( ( verty[i] > testy ) != ( verty[j] > testy ) ) &&\r\n ( testx < ( vertx[j] - vertx[i] ) * ( testy - verty[i] ) / ( verty[j] - verty[i] ) + vertx[i] ) ) {\r\n c = !c;\r\n }\r\n }\r\n return c;\r\n}\r\nexport function pnpolyArray(points, test) { // receives pointsArray & mousePos, ex. [[50,100],[70, 100],[70, 200],[50,200]], {x:60, y: 80}\r\n let i, j, c = false;\r\n for (i = 0, j = points.length - 1; i < points.length; j = i++) {\r\n if (((points[i][1] > test.y) !== (points[j][1] > test.y)) &&\r\n (test.x < (points[j][0] - points[i][0]) * (test.y - points[i][1])\r\n / (points[j][1] - points[i][1]) + points[i][0])) {\r\n c = !c;\r\n }\r\n }\r\n return c;\r\n}\r\n\r\n/**\r\n* array of coordinates of each vertex of the polygon\r\n* var polygon = [ [ 1, 1 ], [ 1, 2 ], [ 2, 2 ], [ 2, 1 ] ];\r\n* isPointInsidePolygon([ 1.5, 1.5 ], polygon); // true\r\n*/\r\nexport function isPointInsidePolygon(point, polygon) {\r\n // ray-casting algorithm based on\r\n // https://wrf.ecse.rpi.edu/Research/Short_Notes/pnpoly.html/pnpoly.html\r\n\r\n let x = point.x, y = point.y;\r\n let inside = false;\r\n\r\n for (let i = 0, j = polygon.length - 1; i < polygon.length; j = i++) {\r\n let xi = polygon[i].x, yi = polygon[i].y;\r\n let xj = polygon[j].x, yj = polygon[j].y;\r\n let intersect = ((yi > y) !== (yj > y))\r\n && (x < (xj - xi) * (y - yi) / (yj - yi) + xi);\r\n\r\n if (intersect) inside = !inside;\r\n }\r\n\r\n return inside;\r\n}\r\n\r\n/**\r\n* array of coordinates of each vertex of the polygon\r\n* var polygon = [ [ 1, 1 ], [ 1, 2 ], [ 2, 2 ], [ 2, 1 ] ];\r\n* isPointInsidePolygon([ 1.5, 1.5 ], polygon); // true\r\n*/\r\nexport function isPointInsidePolygonArray(point, polygon) {\r\n var x = point[0], y = point[1];\r\n\r\n var inside = false;\r\n for (var i = 0, j = polygon.length - 1; i < polygon.length; j = i++) {\r\n var xi = polygon[i][0], yi = polygon[i][1];\r\n var xj = polygon[j][0], yj = polygon[j][1];\r\n\r\n var intersect = ((yi > y) != (yj > y))\r\n && (x < (xj - xi) * (y - yi) / (yj - yi) + xi);\r\n if (intersect) inside = !inside;\r\n }\r\n\r\n return inside;\r\n}\r\n","import workspace from \"../components/canvas/core/workspace\";\r\n//import {updateCurrentQuote} from \"../../../../../misc/quotesFunctions\";\r\nimport {\r\n getCurrentQuoteRoomCartItem,\r\n getRoomCartItemForCategoryName\r\n} from \"../../../misc/categorySwitchingFunctions\";\r\nimport store from \"../../../store\";\r\nimport {setActiveQuoteIndex, setQuotes} from \"../../../actions/roomsFunctions\";\r\nimport {addToCart, changeCartFeature, removeFromCart} from \"../../../actions/actionFunctions\";\r\nimport {prepareSQFTData} from \"../components/canvas/core/workspace/workspaceDataMapper\";\r\nimport {getFeatureGroup, getNavItems, onSQFTLoadImport, onSQFTLoadPrepareData} from \"./sqftHelperUi\";\r\nimport {ACTIVE_ROOM_TYPE} from \"../../../reducers/sqftMenuReducer\";\r\nimport {\r\n setSQFTActiveRoomId,\r\n setSQFTActiveRoomIndex,\r\n setSQFTActiveRoomType\r\n} from \"../../../actions/sqftMenuFunctions\";\r\nimport {getRoomNameInQuote} from \"../../popups/sqftFeaturesPopup/parseSqftData\";\r\nimport {getQtCategoryName} from \"../../visComponents/qtCategoryName\";\r\nimport {getStringFeatureName} from \"../../../misc/helpers\";\r\nimport {MEASURE_UNITS, PARENT_KEYS_WITH_COMBINED_FEATURES_IN_CART} from \"../constants\";\r\n\r\n/**\r\n *\r\n */\r\nexport const getQtCatName = () => {\r\n const reduxState = store.getState();\r\n const {activeRoomType} = reduxState.sqftMenuState;\r\n const {qtActiveCategory} = reduxState.qtState;\r\n const {activeRoomId} = reduxState.sqftMenuState;\r\n const {activeQuoteIndex} = reduxState.quotesState;\r\n const fabricatorData = reduxState.fabricatorState;\r\n const intl = workspace.intl;\r\n\r\n let switcherTitle;\r\n let roomNavItem;\r\n\r\n switch (activeRoomType) {\r\n case ACTIVE_ROOM_TYPE.quote:\r\n switcherTitle = getRoomNameInQuote(activeQuoteIndex);\r\n break;\r\n case ACTIVE_ROOM_TYPE.category:\r\n switcherTitle = getQtCategoryName(qtActiveCategory, intl, fabricatorData)\r\n break;\r\n case ACTIVE_ROOM_TYPE.roomGroup:\r\n roomNavItem = getRoomGroupById(activeRoomId);\r\n if (!roomNavItem) {\r\n switcherTitle = \"\"\r\n } else {\r\n switcherTitle = getStringFeatureName(roomNavItem.part, intl.messages, intl.locale, fabricatorData);\r\n }\r\n break;\r\n }\r\n\r\n return switcherTitle;\r\n}\r\n/**\r\n * @param qtCatName string\r\n */\r\nexport const isQuoteByQTCatNameEqualToCurrentQuote = (qtCatName) => {\r\n const state = store.getState();\r\n const quotes = state.quotesState.quotes;\r\n const activeQuoteIndex = state.quotesState.activeQuoteIndex;\r\n const quote = getQuoteByRoomName(qtCatName);\r\n let newQuoteIndex = quotes.indexOf(quote);\r\n newQuoteIndex = newQuoteIndex < 0 ? 0 : newQuoteIndex\r\n\r\n return activeQuoteIndex === newQuoteIndex\r\n}\r\n/**\r\n * @param qtCatName string\r\n */\r\nexport const loadQuoteByQtCatName = async (qtCatName) => {\r\n const state = store.getState();\r\n const quotes = state.quotesState.quotes;\r\n const quote = getQuoteByRoomName(qtCatName);\r\n let quoteIndex = quotes.indexOf(quote);\r\n quoteIndex = quoteIndex < 0 ? 0 : quoteIndex\r\n\r\n store.dispatch(setActiveQuoteIndex(quoteIndex));\r\n //await setNewActiveQuote(quoteIndex, quotes);\r\n loadActiveQuoteToSQFT().then();\r\n\r\n //todo fix error if quote is null\r\n store.dispatch(setSQFTActiveRoomId(qtCatName));\r\n store.dispatch(setSQFTActiveRoomIndex(null)); //todo if this is critical (set active room in qtCategory switcher)\r\n store.dispatch(setSQFTActiveRoomType(ACTIVE_ROOM_TYPE.quote));\r\n}\r\n\r\n\r\n/**\r\n * load quotes[activeQuoteIndex] to workspace\r\n */\r\nexport const getQuoteByRoomName = (roomName) => {\r\n const state = store.getState();\r\n const quotes = state.quotesState.quotes;\r\n return quotes.find((quote, index) => {\r\n const quoteByQtCatName = quote.qtCatName === roomName.trim().toLowerCase();\r\n const roomNameInQuote = getRoomNameInQuote(index);\r\n const quoteByRoomName = roomNameInQuote.trim().toLowerCase() === roomName.trim().toLowerCase();\r\n\r\n return quoteByQtCatName || quoteByRoomName\r\n });\r\n}\r\n\r\n/**\r\n * load quotes[activeQuoteIndex] to workspace\r\n */\r\nexport const loadActiveQuoteToSQFT = async () => {\r\n let payload = onSQFTLoadPrepareData();\r\n onSQFTLoadImport(payload);\r\n}\r\n\r\n/**\r\n * Checking type of current room and creates new or updating existing quote\r\n * @param sqftCalcData {object}\r\n */\r\nexport const saveSQFTDataToQuote = async (sqftCalcData = null) => {\r\n const state = store.getState();\r\n const activeRoomType = state.sqftMenuState.activeRoomType;\r\n const qtActiveCategory = state.qtState.qtActiveCategory;\r\n const activeRoomId = state.sqftMenuState.activeRoomId;\r\n const cartItems = state.cartState.cartItems;\r\n const activeRoomIndex = state.sqftMenuState.activeRoomIndex;\r\n\r\n if (activeRoomType === ACTIVE_ROOM_TYPE.category) {\r\n await createQuoteIfNotExistOrUpdateCurrent(qtActiveCategory.trim().toLowerCase());\r\n } else if (activeRoomType === ACTIVE_ROOM_TYPE.roomGroup) {\r\n //const roomNavItem = getRoomGroupById(activeRoomId);\r\n //const roomNavItemName = roomNavItem.part.partName.trim().toLowerCase();\r\n await createQuoteIfNotExistOrUpdateCurrent(activeRoomId);\r\n } else {\r\n if (!sqftCalcData) {\r\n sqftCalcData = await prepareSQFTData();\r\n console.log(\"sqft prepared data\", sqftCalcData);\r\n }\r\n updateActiveQuoteWithSQFTData(sqftCalcData);\r\n const quoteRoomCartItem = getCurrentQuoteRoomCartItem(cartItems, activeRoomIndex);\r\n if (!quoteRoomCartItem) {\r\n addRoomToCart(getQtCatName());\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Update specific quote with sqFtCalcData by given index\r\n */\r\nexport const updateQuoteWithSQFTData = (data, quoteIndex) => {\r\n const state = store.getState();\r\n const { quotes } = state.quotesState;\r\n\r\n const newQuotes = quotes.map((quote, qIndex) => {\r\n if (qIndex === quoteIndex) {\r\n return {\r\n ...quote,\r\n sqFtCalcData: { ...data }\r\n };\r\n }\r\n return quote;\r\n });\r\n\r\n store.dispatch(setQuotes(newQuotes));\r\n};\r\n\r\n/**\r\n * Update active quote with sqFtCalcData\r\n */\r\nexport const updateActiveQuoteWithSQFTData = (data) => {\r\n const state = store.getState();\r\n const { activeQuoteIndex } = state.quotesState;\r\n\r\n updateQuoteWithSQFTData(data, activeQuoteIndex);\r\n};\r\n\r\nexport const getSQFTIdsFromAllParentLists = (parentsLists) => {\r\n const SQFTIds = [];\r\n parentsLists.forEach(parentsList => {\r\n Object.keys(parentsList).forEach(parentKey => {\r\n if (!parentsList[parentKey] || !parentsList[parentKey].features) {\r\n return\r\n }\r\n let sqftFeatures = parentsList[parentKey].features;\r\n if (sqftFeatures && sqftFeatures.length) {\r\n sqftFeatures.forEach(sqftFeature => {\r\n SQFTIds.push(sqftFeature.sqftId)\r\n })\r\n }\r\n })\r\n })\r\n\r\n return SQFTIds\r\n}\r\n\r\n/**\r\n */\r\nexport const deleteCartItemsThatAreMissingInParentLists = (parentsLists, cartItems) => {\r\n const sqftIds = getSQFTIdsFromAllParentLists(parentsLists);\r\n const itemsToRemove = cartItems.filter(cItem => cItem.sqftId && !sqftIds.includes(cItem.sqftId));\r\n\r\n itemsToRemove.forEach(cItem => {\r\n store.dispatch(removeFromCart(cItem));\r\n });\r\n};\r\n\r\n/**\r\n * This will return string ids\r\n * @param SQFTCalcData\r\n * @return {[]}\r\n */\r\nexport const getSQFTIdsFromSQFTCalcData = (SQFTCalcData) => {\r\n if (SQFTCalcData) {\r\n const SQFTIds = [];\r\n SQFTCalcData.countertops.forEach(countertop => {\r\n SQFTIds.push(countertop.id.toString());\r\n })\r\n\r\n return SQFTIds\r\n }\r\n}\r\n\r\n/**\r\n */\r\nexport const deleteCartItemsThatAreMissingInSQFTCalcData = () => {\r\n const state = store.getState();\r\n const cartItems = state.cartState.cartItems;\r\n const fabricatorSettings = state.fabricatorState.settings;\r\n const quotes = state.quotesState.quotes;\r\n\r\n quotes.forEach((quote, quoteIndex) => {\r\n if (quote.sqFtCalcData) {\r\n const sqftIds = getSQFTIdsFromSQFTCalcData(quote.sqFtCalcData);\r\n\r\n cartItems\r\n .filter(cItem => cItem.currentQuote === quoteIndex)\r\n .forEach(cItem => {\r\n if (cItem.sqftQuantities) {\r\n const updatedQuantities = { ...cItem.sqftQuantities };\r\n\r\n // remove sqftIds from sqftQuantities that are not in the SQFTCalcData\r\n Object.keys(updatedQuantities).forEach(sqftId => {\r\n if (!sqftIds.includes(sqftId)) {\r\n delete updatedQuantities[sqftId];\r\n }\r\n });\r\n\r\n let newQuantity = Object.values(updatedQuantities).reduce((sum, qty) => sum + qty, 0);\r\n // The deleteCartItemsThatAreMissingInSQFTCalcData functionality is linked to this section.\r\n // If any changes are needed, ensure to update both places to maintain consistency.\r\n if (PARENT_KEYS_WITH_COMBINED_FEATURES_IN_CART.includes(cItem.partId)) {\r\n newQuantity = fabricatorSettings.measureUnit === MEASURE_UNITS.Metric\r\n ? Math.ceil10(newQuantity, -2)\r\n : Math.ceil(newQuantity);\r\n }\r\n\r\n // Update the cart item\r\n if (Object.keys(updatedQuantities).length > 0) {\r\n store.dispatch(changeCartFeature({\r\n ...cItem,\r\n sqftQuantities: updatedQuantities,\r\n quantity: newQuantity,\r\n }));\r\n } else {\r\n store.dispatch(removeFromCart(cItem));\r\n }\r\n }\r\n });\r\n }\r\n })\r\n};\r\n\r\n/**\r\n * @param qtCatName: string\r\n */\r\nexport const createQuoteIfNotExistOrUpdateCurrent = async (qtCatName) => {\r\n const currentQtCategoryInQuotes = getQuoteForCurrentQtCatName(qtCatName);\r\n const sqftCalcData = await prepareSQFTData();\r\n if (!currentQtCategoryInQuotes) {\r\n await createQuoteFromSqftCalcData(sqftCalcData, qtCatName)\r\n } else {\r\n updateActiveQuoteWithSQFTData(sqftCalcData);\r\n }\r\n}\r\n\r\n/**\r\n * @param sqftCalcData {object}\r\n * @param qtCatName {string}\r\n */\r\nexport const createQuoteFromSqftCalcData = async (sqftCalcData, qtCatName) => {\r\n if (!workspace.isEmpty() || isManualCalculateNotEmpty(sqftCalcData)) {\r\n await createNewQuoteFromCategory(sqftCalcData, qtCatName);\r\n }\r\n}\r\n\r\n/**\r\n * @param qtCatName string\r\n */\r\nexport const getQuoteForCurrentQtCatName = (qtCatName) => {\r\n const {quotes} = store.getState().quotesState;\r\n return quotes.find(quote =>\r\n quote.qtCatName === qtCatName\r\n && quote.isVisibleInSQFT === false)\r\n}\r\n\r\n/**\r\n * @param sqftCalcData {object}\r\n * @param qtActiveCategory {string}\r\n */\r\nexport const createNewQuoteFromCategory = async(sqftCalcData, qtActiveCategory) => {\r\n if (!workspace.isEmpty() || isManualCalculateNotEmpty(sqftCalcData)) {\r\n const quotes = await addNewQuote(sqftCalcData, qtActiveCategory);\r\n store.dispatch(setActiveQuoteIndex(quotes.length - 1));\r\n addRoomToCart(qtActiveCategory);\r\n }\r\n}\r\n\r\nexport const isManualCalculateNotEmpty = (sqftCalcData) => {\r\n if (sqftCalcData.manualCalculate) {\r\n return sqftCalcData.countertops.length > 0\r\n || sqftCalcData.backsplashes.length > 0\r\n || sqftCalcData.edges.length > 0\r\n }\r\n\r\n return false\r\n}\r\n/**\r\n * @param sqftCalcData {object}\r\n * @param qtActiveCategory {string}\r\n */\r\nconst addNewQuote = async (sqftCalcData, qtActiveCategory) => {\r\n //const currentQuote = await updateCurrentQuote();\r\n const {quotes} = store.getState().quotesState;\r\n const newQuotes = [...quotes, {\r\n quoteId: null,\r\n isCreatedInSQFT: true,\r\n isVisibleInSQFT: false,\r\n qtCatName: qtActiveCategory.trim().toLowerCase(),\r\n sqFtCalcData: sqftCalcData\r\n }];\r\n store.dispatch(setQuotes(newQuotes));\r\n\r\n return newQuotes\r\n};\r\n\r\n/**\r\n * @param qtCatName {string}\r\n */\r\nexport const addRoomToCart = (qtCatName) => {\r\n const roomCartItem = getRoomCartItemForCategoryName(qtCatName)\r\n if (roomCartItem) {\r\n store.dispatch(addToCart([roomCartItem]))\r\n return roomCartItem\r\n }\r\n}\r\n\r\n/**\r\n * update navItemBy roomIndex\r\n * @param roomName {string}\r\n */\r\nexport const getRoomGroupById = (roomName) => {\r\n const roomsFeatureGroup = getFeatureGroup('room');\r\n const roomsNavItems = getNavItems(roomsFeatureGroup, \"\", {}, false, true);\r\n\r\n return roomsNavItems.find(navItem => {\r\n return navItem.part.getFeatureName().toLowerCase() === roomName.toLowerCase()\r\n });\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {ShowerHeadTypes} from \"../../constants\";\r\n\r\nexport default class ShowerCommon extends IntermediatePart {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.isShowerCommonGroup = true;\r\n }\r\n\r\n setArmHeadType() { // for feature\r\n const parent = this.getParent();\r\n const showerParent = parent.getParent();\r\n showerParent.setShowerHeadType(ShowerHeadTypes.shower_arm, parent.partId);\r\n if (showerParent.showerFixture && showerParent.showerFixture.activeFeature && showerParent.showerFixture.activeFeature.metaData[\"MountType\"]\r\n && !showerParent.showerFixture.activeFeature.metaData[\"MountType\"].includes(\"0\") && !showerParent.showerFixture.disabled) {\r\n // store.dispatch(setLookOverlayOpened(LOOK_OVERLAYS.notCompatiblePopup));\r\n // return;\r\n // this.applyFeatureIfNotCompatible();\r\n showerParent.showerFixture.disabled = true;\r\n }\r\n }\r\n\r\n getArrayOfConditions() {\r\n const showerParent = this.getParent();\r\n let conditions = super.getArrayOfConditions(); // roomLayout && roomScene\r\n const showerSize = showerParent.showerSize();\r\n if (showerSize) {\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerSize\r\n })\r\n }\r\n return conditions\r\n }\r\n\r\n isActiveFeatureGroup(featureGroupId = \"\") {\r\n const showerParent = this.getParent();\r\n const featureGroup = showerParent[featureGroupId];\r\n return !!(featureGroup && featureGroup.activeFeature && !featureGroup.disabled)\r\n }\r\n\r\n togglePosition(position, partId) {\r\n const showerArm = this.getParent().relatedItems.find(featureGroup => featureGroup.partId === partId);\r\n if (showerArm && showerArm.layerPositions) {\r\n if (this.layerPositions[position]) {\r\n // if (!showerArm.layerPositions[position]) {\r\n // showerArm.layerPositions[position] = showerArm.getMatchingPositionFeature(position);\r\n // if (showerArm.disabled) {\r\n // showerArm.disabled = false;\r\n // }\r\n // }\r\n // we need always set here in the next line, because we might have another conditions. so update needed\r\n showerArm.layerPositions[position] = showerArm.getMatchingPositionFeature(position);\r\n if (showerArm.disabled) {\r\n showerArm.disabled = false;\r\n }\r\n } else {\r\n showerArm.layerPositions[position] = null;\r\n }\r\n }\r\n }\r\n\r\n showLayerPositionsModal() {\r\n return true\r\n }\r\n\r\n}\r\n","import {PartMenuType} from \"../../visComponents/constants\";\r\nimport {iCmp} from \"../../../misc/utils\";\r\nimport Layer from \"../../visComponents/layer\";\r\nimport {LayoutType, METADATA} from \"./constants\";\r\nimport PartCommon from \"../../visComponents/partCommon\";\r\nimport DesignNavigationItem from \"../../visComponents/designNavigationItem\";\r\n\r\nexport class Part extends PartCommon {\r\n\r\n constructor(isParent, isChild, menuType) {\r\n super();\r\n if (isChild || (isParent && menuType === PartMenuType.Simple)) {\r\n this.featuresList = {};\r\n this.featuresPartsList = {};\r\n this.modulePartsList = {};\r\n Object.keys(LayoutType).forEach(layoutName => {\r\n this.featuresList[layoutName] = [];\r\n this.featuresPartsList[layoutName] = [];\r\n this.modulePartsList[layoutName] = [];\r\n });\r\n this.allFeaturesReceived = false;\r\n this.realFeaturesReceived = false; // this prop is need on Scroll (if features count more that 1000)\r\n this.nextFeaturesPageToLoad = 0;\r\n this.activeFeature = null;\r\n this.placeholderFeature = null;\r\n this.placeholderChanged = false;\r\n this.firstClick = {\r\n \"0\": false\r\n };\r\n this.activeLockedFeature = null;\r\n this.activeNotInVisualizerFeature = null; // is needed to display in the QT selected activeNotInVisualizerFeature, but render proper activeFeature layer(for example, countertop)\r\n // name = \"\";\r\n this.visible = true;\r\n this.categoryEnabled = false;\r\n this.layout = null;\r\n this.featureGroupVisible = true; // dashboard's feature group eye ball logic\r\n this.featureGroupEnabled = true; // dashboard's feature group checkbox logic\r\n this.selectedFeaturesHistory = []; // array of strings(names). updated every time item is selected\r\n this.filtersReceived = null; // array of filters values, comes from BE, for ex [1221, 347, 1124]\r\n }\r\n if (isParent) {\r\n this.partThumbnail = '';\r\n this.relatedItems = [];\r\n }\r\n if (!isChild && !isParent) {\r\n this.dbFeature = null;\r\n this.layer = new Layer(\"bv\");\r\n this._customDisplayName = null;\r\n this.notesList = {};\r\n }\r\n this.partName = \"\";\r\n }\r\n\r\n set features(featuresList) {\r\n // features can't be set directly, we need to change featuresList array\r\n }\r\n get features() {\r\n const layout = this.layout || this.getParent().layout;\r\n return this.featuresList[layout.getCurrentLayoutName()]\r\n }\r\n set featuresParts(featuresList) {\r\n // featuresParts can't be set directly, we need to change featuresPartsList array\r\n }\r\n get featuresParts() {\r\n const layout = this.layout || this.getParent().layout;\r\n return this.featuresPartsList[layout.getCurrentLayoutName()]\r\n }\r\n get moduleParts() {\r\n const layout = this.layout || this.getParent().layout;\r\n return this.modulePartsList[layout.getCurrentLayoutName()]\r\n }\r\n\r\n /**\r\n * Checks whether a given for condition matches the needed value (or array of values)\r\n * @param name {string}\r\n * @param value {string || array}\r\n * @returns {int} -1 - no such for condition, 0 - no match, 1 - matches\r\n */\r\n matchesMetaForCondition(name, value) {\r\n return this.metaData[name] && this.metaData[name].some(condValue => {\r\n return condValue === METADATA.ALL || (Array.isArray(value) ? value.some(val => iCmp(condValue, val)) : iCmp(condValue, value))\r\n });\r\n }\r\n\r\n matchesMetaForArrayOfConditions(arrayOfConditions) {\r\n return arrayOfConditions.every((condition) => {\r\n return this.matchesMetaForCondition(condition.propName, condition.propValue);\r\n })\r\n }\r\n\r\n navigationItem() {\r\n return new DesignNavigationItem(this.partName, this)\r\n }\r\n}\r\n\r\n\r\n","import invert from 'lodash/invert';\r\n\r\nimport {splitFeatureName} from \"../../../misc/utils\";\r\nimport DesignNavigationItem from \"../../visComponents/designNavigationItem\";\r\nimport {Part} from \"./part\";\r\nimport store from '../../../store';\r\nimport {LayoutAbbreviation, LayoutType} from \"./constants\";\r\nimport {getFeatureIsLocked} from \"../../../misc/helpers\";\r\n\r\n/**\r\n * Used for Complex parts such as Vanity, to perform some base functionality for related items\r\n */\r\nexport class IntermediatePart extends Part {\r\n\r\n constructor(isChild) {\r\n super(false, isChild);\r\n this.disabled = false;\r\n this.defaultDisabled = false; // used after reset click\r\n this.canBeDisabled = false;\r\n }\r\n\r\n /**\r\n * This will be called on feature creation\r\n * @param dbFeature\r\n */\r\n load(dbFeature) {\r\n return this.load_(dbFeature, new this.constructor());\r\n }\r\n\r\n /**\r\n * This will be called by the underlying vanity feature with a concrete instance of the part\r\n * @param dbFeature\r\n * @param part {Part}\r\n * @param setParent {boolean}\r\n * @param features\r\n */\r\n load_(dbFeature, part, setParent = true, features = 'features') {\r\n\r\n const featureList = features + \"List\";\r\n\r\n const {displayName} = dbFeature;\r\n let {featureName} = splitFeatureName(displayName);\r\n if (!featureName && dbFeature.groupName && dbFeature.displayName) {\r\n featureName = dbFeature.displayName.replace(dbFeature.groupName + \" - \", \"\")\r\n }\r\n // console.log('displayName:', displayName);\r\n\r\n if (setParent) {\r\n part.getParent = () => this;\r\n if (dbFeature.galleryImages) {\r\n const featured = dbFeature.galleryImages.find(galImage => galImage.featured);\r\n if (featured) {\r\n this.featuredImage = featured.url\r\n }\r\n dbFeature.galleryImages = dbFeature.galleryImages.sort((a, b) => b.default - a.default)\r\n }\r\n }\r\n\r\n if (!dbFeature.sharedFeatureName) {\r\n console.error(\"No sharedFeatureName property:\", dbFeature);\r\n }\r\n\r\n part.partName = featureName;\r\n part.metaData = dbFeature.metaData || {};\r\n\r\n if (dbFeature.s3Bindings && dbFeature.s3Bindings.length) {\r\n // dbFeature.s3Bindings = dbFeature.s3Bindings.filter(binding => binding.visualizer === \"Fireplace\")\r\n }\r\n\r\n part.dbFeature = dbFeature || {};\r\n if (!part.dbFeature.filterValueIDs) {\r\n part.dbFeature.filterValueIDs = {}\r\n }\r\n part.notAvailableInVisualizer = !dbFeature.s3Bindings || !dbFeature.s3Bindings.length;\r\n\r\n if (part.metaData.RoomLayout) {\r\n const roomLayout = part.metaData.RoomLayout;\r\n if (roomLayout.includes(LayoutAbbreviation.All)) {\r\n Object.keys(LayoutType).forEach(layoutName => {\r\n this[featureList][layoutName].push(part);\r\n })\r\n } else if (Array.isArray(roomLayout) && roomLayout.length) {\r\n roomLayout.forEach(roomLayoutAbbreviation => {\r\n const layoutName = invert(LayoutAbbreviation)[roomLayoutAbbreviation];\r\n if (layoutName) { // Prevent bad roomLayout Metadata\r\n this[featureList][layoutName].push(part);\r\n }\r\n });\r\n } else { // single value\r\n const layoutName = invert(LayoutAbbreviation)[roomLayout];\r\n if(layoutName) {\r\n this[featureList][layoutName].push(part);\r\n }\r\n }\r\n }\r\n\r\n if (part.notAvailableInVisualizer || !part.metaData.RoomLayout) {\r\n part.notAvailableInVisualizer = true;\r\n Object.keys(LayoutType).forEach(layoutName => {\r\n this[featureList][layoutName].push(part);\r\n })\r\n }\r\n\r\n // Object.keys(LayoutType).forEach(layoutName => {\r\n // this[features+\"List\"][layoutName].push(part);\r\n // });\r\n\r\n this.loadFeatureCommon(part);\r\n\r\n return part\r\n }\r\n\r\n getActiveFeatureConditions() {\r\n return this.getArrayOfConditions()\r\n }\r\n\r\n // navigationSubItems(filters, searchText, forFeature, filterGroups, firstOpenedFeature, firstOpenedConditions) { // to do\r\n navigationSubItems(filters, searchText) {\r\n // const featuresList = (forFeature && forFeature.metaData.layerPosition === SIDE_POSITIONS[1]) ? this.featuresParts : this.features;\r\n const filteredAvailableFeatures = this.getFeaturesBySearchText(this.getFilteredFeaturesByFilters(filters, this.features), searchText);\r\n let featuresToDisplay = this.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(true), filteredAvailableFeatures);\r\n // console.log(\"filterGroups\", filterGroups);\r\n return this.returnUniqueNavFeatures(featuresToDisplay)\r\n }\r\n\r\n navigationSubItemsWithFilter(propName, propValue, featuresToCheck = this.features) {\r\n return featuresToCheck.filter((feature) => {\r\n return feature.matchesMetaForCondition(propName, propValue);\r\n }).map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n navigationSubItemsWithFilterMultipleConditions(arrayOfConditions, featuresToCheck = this.features) {\r\n // console.log('arrayOfConditions', arrayOfConditions);\r\n // console.log('featuresToCheck', featuresToCheck);\r\n return featuresToCheck.filter((feature) => {\r\n return feature.notAvailableInVisualizer || arrayOfConditions.every((conditionObject) => {\r\n const {propName, propValue} = conditionObject;\r\n return feature.matchesMetaForCondition(propName, propValue);\r\n });\r\n })\r\n }\r\n\r\n setDefault(layout, setNotInVisFeature = false) {\r\n this.setFeatureGroupDefault(layout, setNotInVisFeature)\r\n }\r\n\r\n setLayerPositions = (activeFeature = this.activeFeature) => {\r\n if (!activeFeature) {\r\n return\r\n }\r\n const layout = this.getParent().layout;\r\n const conditions = this.getArrayOfConditions();\r\n if (layout && this.defaultLayerLayoutPositions && this.defaultLayerLayoutPositions[layout.type]) {\r\n Object.keys(this.layerPositions).forEach(key => {\r\n if (this.defaultLayerLayoutPositions[layout.type] === key\r\n && (!this.layerPositions[key] || !this.layerPositions[key].matchesMetaForArrayOfConditions(conditions))) {\r\n this.layerPositions[key] = activeFeature;\r\n } else if (activeFeature.dbFeature.metaData[\"layerPosition\"] !== key) {\r\n this.layerPositions[key] = null;\r\n }\r\n })\r\n } else {\r\n Object.keys(this.layerPositions).forEach(key => {\r\n if (layout.initialized) {\r\n if ((activeFeature.dbFeature.metaData[\"layerPosition\"] === key)\r\n && (this.layerPositions[key] && !this.layerPositions[key].matchesMetaForArrayOfConditions(conditions))) {\r\n this.layerPositions[key] = activeFeature;\r\n // } else if (this.setAllLayerPositions) {\r\n } else if (this.layerPositions[key]) { // here we have to change vanity cabinet to console for example\r\n const matchingPositionFeature = this.getMatchingPositionFeature(key);\r\n if (matchingPositionFeature) {\r\n this.layerPositions[key] = matchingPositionFeature;\r\n }\r\n }\r\n } else { // first time we should set everything by the default! // missing layers issue\r\n if ((activeFeature.dbFeature.metaData[\"layerPosition\"] === key)\r\n && (!this.layerPositions[key] || !this.layerPositions[key].matchesMetaForArrayOfConditions(conditions))) {\r\n this.layerPositions[key] = activeFeature;\r\n // } else if (this.setAllLayerPositions) {\r\n } else {\r\n const matchingPositionFeature = this.getMatchingPositionFeature(key);\r\n if (matchingPositionFeature) {\r\n this.layerPositions[key] = matchingPositionFeature;\r\n }\r\n }\r\n }\r\n })\r\n }\r\n }\r\n\r\n toggleLayerPositions() {\r\n Object.keys(this.layerPositions).forEach(key => {\r\n this.layerPositions[key] = this.disabled ? null : this.getMatchingPositionFeature(key)\r\n })\r\n }\r\n\r\n getMatchingPositionFeature = (position = \"\", fromFeature = this.activeFeature, fromLayout = null) => {\r\n if (fromFeature) { //just in case\r\n const name1 = fromFeature.getSplittedFeatureName();\r\n let arrayOfConditions = this.getArrayOfConditions();\r\n if (fromFeature.metaData[\"SkuName\"]) {\r\n arrayOfConditions.push({\r\n propName: \"SkuName\",\r\n propValue: fromFeature.metaData[\"SkuName\"]\r\n })\r\n }\r\n if (fromLayout) {\r\n let roomLayoutMeta = arrayOfConditions.find(condition => condition.propName === \"RoomLayout\");\r\n let roomSceneMeta = arrayOfConditions.find(condition => condition.propName === \"RoomScene\");\r\n if (roomLayoutMeta) {\r\n roomLayoutMeta.propValue = fromLayout.getCurrentLayoutAbbreviation();\r\n }\r\n if (roomSceneMeta) {\r\n roomSceneMeta.propValue = fromLayout.scene;\r\n }\r\n }\r\n const skuNamesPartIds = [\"shower_door\", \"walk_in_tub\", \"shower_pan_combo\"];\r\n const whereToFind = (!this.layerPositions || (position === Object.keys(this.layerPositions)[0])) ? this.features : this.featuresParts;\r\n return whereToFind.find((feature) => {\r\n return (skuNamesPartIds.includes(this.partId) || name1 === feature.getSplittedFeatureName())\r\n && feature.matchesMetaForArrayOfConditions(arrayOfConditions) && feature.metaData[\"layerPosition\"] === position\r\n });\r\n }\r\n return null\r\n };\r\n\r\n getArrayOfConditions() {\r\n const layout = this.getParent().layout;\r\n return [{\r\n propName: 'RoomLayout',\r\n propValue: layout.getCurrentLayoutAbbreviation()\r\n }, {\r\n propName: 'RoomScene',\r\n propValue: layout.scene\r\n }];\r\n }\r\n\r\n setLayers(layout) {\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions()))) {\r\n if (this.hasAdditionalParts) {\r\n this.checkIfFeaturePartIsMatching();\r\n }\r\n return this._setLayers(layout);\r\n }\r\n this.setDefault(layout);\r\n return this._setLayers(layout);\r\n }\r\n showLayerPositionsModal() {\r\n return false\r\n }\r\n\r\n clickFromAllWalls(ignoreLocked) {\r\n if (this && this.dbFeature && this.dbFeature.sharedFeatureName) {\r\n console.log(`${this.partId}:`, this.dbFeature.sharedFeatureName);\r\n }\r\n this.handleClick(ignoreLocked, \"all_walls\");\r\n }\r\n\r\n tryToSetTheSameFeature(filteredFeatures = [], partName = \"\") {\r\n if (this.activeFeature && this.activeFeature.partName) {\r\n let splittedFromTheLayoutName = partName\r\n ? this.removeLayoutFromPartName(partName)\r\n : this.activeFeature.getMatchingFeatureName();\r\n this.activeFeature = filteredFeatures.find(feature => {\r\n return feature.getMatchingFeatureName() === splittedFromTheLayoutName\r\n });\r\n if (this.activeFeature) {\r\n return true\r\n }\r\n }\r\n return false\r\n }\r\n\r\n /**\r\n * @param ignoreLocked {boolean} // false by the default, is used by wizard ONLY\r\n */\r\n handleClick(ignoreLocked = false) {\r\n const parent = this.getParent();\r\n const {activeQuoteIndex} = store.getState().quotesState;\r\n parent.firstClick[activeQuoteIndex] = true; // allow to show active item\r\n const featureIsLocked = getFeatureIsLocked(this, ignoreLocked);\r\n if (featureIsLocked) {\r\n parent.activeLockedFeature = this;\r\n } else {\r\n if (parent.activeLockedFeature) {\r\n parent.activeLockedFeature = null;\r\n }\r\n this.featureClick();\r\n }\r\n }\r\n\r\n featureClick() {\r\n const parent = this.getParent();\r\n parent.placeholderChanged = true;\r\n if (this.notAvailableInVisualizer) {\r\n parent.activeNotInVisualizerFeature = this; // do not change the activeFeature (in order to keep the layer)\r\n } else if (parent.activeNotInVisualizerFeature) {\r\n parent.activeNotInVisualizerFeature = null; // remove it from other searches and so on\r\n parent.activeFeature = this;\r\n } else {\r\n parent.activeFeature = this;\r\n }\r\n this.featureClicked();\r\n }\r\n\r\n hideLayers() {\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.src = '';\r\n }\r\n if (Array.isArray(this.activeFeatureParts) && this.activeFeatureParts.length) {\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n if (activeFeaturePart && activeFeaturePart.layer) {\r\n activeFeaturePart.layer.src = '';\r\n }\r\n })\r\n }\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.src = '';\r\n }\r\n if (this.layerPositions) {\r\n Object.keys(this.layerPositions).forEach(key => {\r\n if (this.layerPositions[key]) {\r\n this.layerPositions[key].layer.src = '';\r\n }\r\n })\r\n }\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n\r\n const getZIndex = (feature, partId = null) => {\r\n return feature.metaData[\"ZSorting\"] ? feature.metaData[\"ZSorting\"] * 1000 : zIndexes[partId || this.partId];\r\n }\r\n\r\n if (this.layerPositions) {\r\n Object.keys(this.layerPositions).forEach((key, keyIndex) => {\r\n const feature = this.layerPositions[key];\r\n if (feature) {\r\n feature.layer.zIndex = getZIndex(feature) + keyIndex*10;\r\n }\r\n })\r\n } else if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = getZIndex(this.activeFeature);\r\n if (this.hasAdditionalParts && this.activeFeatureParts && this.activeFeatureParts.length) {\r\n this.activeFeatureParts.forEach((activeFeaturePart, keyIndex) => {\r\n activeFeaturePart.layer.zIndex = getZIndex(activeFeaturePart, this.additionalPartPartId) + (keyIndex + 1) * 10;\r\n });\r\n }\r\n }\r\n }\r\n\r\n removeEdgeFromPartName(partName) {\r\n const filterGroups = store.getState().filterState.filterGroups;\r\n const edgeFilterGroup = filterGroups.find(group => group.name === \"Edge\" || group.name === \"Edge Profile\");\r\n if (edgeFilterGroup && edgeFilterGroup.values && edgeFilterGroup.values.length) {\r\n const edgeFilterGroupValues = edgeFilterGroup.values.sort((a,b) => {\r\n return a.value && b.value && (b.value.length - a.value.length)\r\n }); // 1st should be \"Full Bullnose\", then simple \"Bullnose\"\r\n edgeFilterGroupValues.forEach((filterGroupValue) => { // arrayOf {id: 293, value: \"Eased\", displayText: \"Eased\", parent_id: null, icon: \"\", …}\r\n partName = partName.split(\" \"+filterGroupValue.value).join(\"\");\r\n });\r\n }\r\n return partName\r\n }\r\n\r\n getCountertopGroupsSplittedFeatureName = () => {\r\n if (this._countertopGroupsCustomDisplayName == null) {\r\n this._countertopGroupsCustomDisplayName = this.dbFeature.sharedFeatureName;\r\n }\r\n return this._countertopGroupsCustomDisplayName\r\n };\r\n\r\n getSplittedFeatureName = () => {\r\n if (this._customDisplayName == null) {\r\n this._customDisplayName = this.dbFeature.sharedFeatureName || this.partName || \"\";\r\n if (this.partId === \"center_island_countertop\") {\r\n this._customDisplayName = this._customDisplayName\r\n .replace(/2 0 /g, \"\")\r\n .replace(/Center Island Countertop 1 /g, \"\");\r\n }\r\n }\r\n return this._customDisplayName\r\n };\r\n\r\n getMatchingFeatureName = () => {\r\n return this.getSplittedFeatureName()\r\n };\r\n\r\n getModuleFeatureName = () => {\r\n // return this.partName.split(\" M_\")[0];\r\n return this.partName.split(\" M\")[0];\r\n };\r\n\r\n featureIsMatchingFilters(currentFeature, activeFilters, filters = []) {\r\n return filters.every(filter => {\r\n return activeFilters[filter.id]\r\n && currentFeature.dbFeature.filterValueIDs[filter.id]\r\n && currentFeature.dbFeature.filterValueIDs[filter.id].includes(activeFilters[filter.id][0])\r\n })\r\n }\r\n\r\n getActiveFeaturePartsAccordingToActiveFeature(fromFeature = this.activeFeature, activeFeatureConditions = []) {\r\n let activeFeatureParts = [];\r\n if (fromFeature && fromFeature.partNumber) {\r\n let activeFeaturePart;\r\n const name1 = fromFeature.getSplittedFeatureName();\r\n // console.log(\"name1\", name1);\r\n let arrayOfConditions = activeFeatureConditions.length\r\n ? activeFeatureConditions\r\n : this.getActiveFeatureConditions(fromFeature);\r\n // if (this.partId === \"right_wall\") {\r\n // arrayOfConditions = arrayOfConditions.filter(condition => condition.propName !== \"MirrorSize\");\r\n // }\r\n activeFeatureParts = this.featuresParts.filter((feature) => name1 === feature.getSplittedFeatureName());\r\n // console.log(\"this.featuresParts\", this.featuresParts);\r\n // console.log(\"activeFeatureParts\", activeFeatureParts);\r\n if (activeFeatureParts.length) {\r\n activeFeaturePart = activeFeatureParts.find((feature) => {\r\n return feature.matchesMetaForArrayOfConditions(arrayOfConditions)\r\n });\r\n if (!activeFeaturePart) {\r\n activeFeaturePart = activeFeatureParts[0];\r\n }\r\n }\r\n activeFeatureParts = activeFeaturePart ? [activeFeaturePart] : [];\r\n activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n }\r\n return activeFeatureParts\r\n }\r\n\r\n checkIfFeaturePartIsMatching() {\r\n if (this.activeFeatureParts && this.activeFeatureParts.length) {\r\n const activeFeatureConditions = this.getActiveFeatureConditions();\r\n const name1 = this.activeFeature.getSplittedFeatureName();\r\n const activeFeaturePart = this.activeFeatureParts[0];\r\n if (!(activeFeaturePart.matchesMetaForArrayOfConditions(activeFeatureConditions)\r\n && name1 === activeFeaturePart.getSplittedFeatureName())) {\r\n this.activeFeatureParts = this.setActiveFeatureParts(this.activeFeature, activeFeatureConditions);\r\n }\r\n } else {\r\n this.activeFeatureParts = this.setActiveFeatureParts();\r\n }\r\n }\r\n\r\n setActiveFeatureParts(fromFeature = this.activeFeature, activeFeatureConditions = []) {\r\n return this.getActiveFeaturePartsAccordingToActiveFeature(fromFeature, activeFeatureConditions);\r\n }\r\n\r\n}\r\n","import {getCurrentLayout} from \"../bvcomponents/appLayout\";\r\nimport {featureThumbnailUrl, getCartItemObject} from \"./helpers\";\r\nimport store from \"../store\";\r\nimport {setActiveQuoteIndex, setQuotes} from \"../actions/roomsFunctions\";\r\nimport {setQtActiveCategory} from \"../actions/actionFunctions\";\r\nimport {getCommonVisualizerType} from \"../config\";\r\nimport {hasSubscriptionForRoom} from \"./visualizerSwitchingFunctions\";\r\nimport {updateCurrentQuote} from \"./quotesFunctions\";\r\nimport {updateAllWizardValues} from \"../actions/wizardFunctions\";\r\nimport {showWizardInsteadOfQT} from \"../bvcomponents/look/lookNavigation/lookMain/lookWizard/lookWizardFunctions\";\r\nimport { getNavItems } from \"../bvcomponents/sqft/helpers/sqftHelperUi\";\r\n\r\n/**\r\n * @param qtCatName {string}\r\n * @param quoteIndex {number}\r\n * returns {string}\r\n */\r\nexport const getRoomImageFromQtCategory = (qtCatName, quoteIndex) => {\r\n const {fabricatorState, cartState} = store.getState();\r\n if (!fabricatorState.settings.useCategorySwitching) {\r\n return \"\"\r\n }\r\n const lowerCasedVisualizerType = getCommonVisualizerType().toLowerCase();\r\n if (!qtCatName && cartState.cartItems.length && Number.isInteger(quoteIndex)) {\r\n const {cartItems} = cartState;\r\n const existingAddedCartItem = cartItems.find(cItem => cItem.partId === \"room\" && (cItem.currentQuote === quoteIndex));\r\n if (existingAddedCartItem && !featureIsMatchingQtCatName(existingAddedCartItem.cartFeature, lowerCasedVisualizerType)\r\n && (!fabricatorState.settings.allowVisualizerSwitching || !hasSubscriptionForRoom(getRoomNameToCompare(existingAddedCartItem.cartFeature)))) {\r\n return featureThumbnailUrl(existingAddedCartItem.cartFeature)\r\n }\r\n return \"\"\r\n }\r\n const currentRoomName = qtCatName.trim().toLowerCase();\r\n const layout = getCurrentLayout();\r\n const roomFg = layout.getFeatureGroupByPartId(\"room\");\r\n if (roomFg) {\r\n const fgNavItems = layout.designNavigationItems({part: roomFg}, null, \"\", false, \"all\");\r\n const roomFeatureNavItem = fgNavItems.find(navItem => {\r\n return featureIsMatchingQtCatName(navItem.part, currentRoomName) && !featureIsMatchingQtCatName(navItem.part, lowerCasedVisualizerType)\r\n });\r\n if (roomFeatureNavItem) {\r\n return featureThumbnailUrl(roomFeatureNavItem.part)\r\n }\r\n }\r\n return \"\"\r\n}\r\n\r\n/**\r\n * @param cartItems {[cartItemInterface]}\r\n * @param quoteIndex {number}\r\n * returns {string}\r\n */\r\nexport const getCurrentQuoteRoomCartItem = (cartItems, quoteIndex) => {\r\n return cartItems.find(cItem => cItem.partId === \"room\" && cItem.currentQuote === quoteIndex)\r\n}\r\n\r\n/**\r\n * @param roomFeature {featureInterface}\r\n * returns {string}\r\n */\r\nexport const getRoomNameToCompare = (roomFeature) => {\r\n if (!roomFeature) {\r\n return \"\"\r\n }\r\n if (roomFeature.getLowerCasedCustomDisplayName) {\r\n return roomFeature.getLowerCasedCustomDisplayName() || roomFeature.dbFeature.sharedFeatureName || \"\"\r\n }\r\n return roomFeature.dbFeature.sharedFeatureName || \"\"\r\n}\r\n\r\n/**\r\n * @param cartItems {[cartItemInterface]}\r\n * @param quoteIndex {number}\r\n * @param withVisualizerCheck {boolean}\r\n * returns {string}\r\n */\r\nexport const getCurrentQuoteRoomName = (cartItems, quoteIndex, withVisualizerCheck = false) => {\r\n const quoteRoomCartItem = getCurrentQuoteRoomCartItem(cartItems, quoteIndex);\r\n if (quoteRoomCartItem && quoteRoomCartItem.cartFeature) {\r\n return getRoomNameToCompare(quoteRoomCartItem.cartFeature)\r\n }\r\n return withVisualizerCheck ? getCommonVisualizerType() : \"\"\r\n}\r\n\r\n/**\r\n * @param qtCategoryName {string}\r\n * @param fabricatorSettings {object}\r\n * returns {object}\r\n */\r\nexport const getRoomCartItemForCategoryName = (qtCategoryName, fabricatorSettings) => {\r\n const currentRoomName = qtCategoryName.trim().toLowerCase();\r\n const layout = getCurrentLayout();\r\n\r\n //1.) get room from qtCategories\r\n if (layout.qtCategories) {\r\n for (let i = 0; i < layout.qtCategories.length; i++) {\r\n const qtCategory = layout.qtCategories[i];\r\n if (qtCategory.subParts) {\r\n const roomFg = qtCategory.subParts.find(subPart => subPart.part.partId === \"room\");\r\n if (roomFg) {\r\n const fgNavItems = layout.designNavigationItems(roomFg, null, \"\", false, true);\r\n let roomFeatureNavItem = fgNavItems.find(navItem => featureIsMatchingQtCatName(navItem.part, currentRoomName));\r\n if (!roomFeatureNavItem) {\r\n let settings = fabricatorSettings;\r\n if (!settings) {\r\n settings = store.getState().fabricatorState.settings;\r\n }\r\n if (settings.allowVisualizerSwitching) {\r\n const visualizerRoomName = getCommonVisualizerType(document.kvConfig.visualizerType);\r\n if (visualizerRoomName !== qtCategoryName) {\r\n // QCDES-3163 cases when categories are not the same as room names, but we still need to add Room Cart Item\r\n roomFeatureNavItem = fgNavItems.find(navItem => featureIsMatchingQtCatName(navItem.part, visualizerRoomName));\r\n }\r\n }\r\n }\r\n if (roomFeatureNavItem) {\r\n return getCartItemObject(roomFeatureNavItem.part, 1, qtCategory.name)\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n //2.) get room from room Groups\r\n const roomsFeatureGroup = layout.getSubPartFromQtCategories('room');\r\n const roomsNavItems = getNavItems(roomsFeatureGroup, \"\", {}, false, true);\r\n\r\n if (roomsNavItems) {\r\n const roomFeatureNavItem = roomsNavItems.find(navItem => featureIsMatchingQtCatName(navItem.part, currentRoomName));\r\n if (roomFeatureNavItem) {\r\n return getCartItemObject(roomFeatureNavItem.part, 1, qtCategoryName);\r\n }\r\n }\r\n\r\n return null\r\n}\r\n\r\n/**\r\n * @param newCartItems {[cartItemInterface]}\r\n * @param setNewRoomIndex {boolean}\r\n * @param shouldCreateNewQuotes {boolean}\r\n * returns {[cartItemInterface]}\r\n */\r\nexport const updateQuoteRoomsForCartItems = async (newCartItems, setNewRoomIndex = false, shouldCreateNewQuotes = true) => {\r\n const {fabricatorState, qtState, cartState, quotesState, wizardState} = store.getState();\r\n if (!fabricatorState.settings.useCategorySwitching) {\r\n return newCartItems\r\n }\r\n const {qtActiveCategory} = qtState;\r\n const {cartItems} = cartState;\r\n const {quotes, activeQuoteIndex} = quotesState;\r\n const {wizardList, wizardIsActive} = wizardState;\r\n\r\n const createdRoomCartItems = [];\r\n const layout = getCurrentLayout();\r\n\r\n for (const newCartItem of [...newCartItems]) { // here we are changing array to prevent looping each time we add a new cart item below\r\n\r\n const withCreated = [...cartItems, ...createdRoomCartItems];\r\n\r\n const currentRoomName = newCartItem.qtCatName ? newCartItem.qtCatName.trim().toLowerCase() : qtActiveCategory.trim().toLowerCase();\r\n const existingCartRoom = getCurrentQuoteRoomCartItem(withCreated, activeQuoteIndex);\r\n\r\n console.log(\"existingCartRoom\", existingCartRoom);\r\n\r\n if (existingCartRoom && existingCartRoom.cartFeature && (\r\n !showWizardInsteadOfQT(wizardList, wizardIsActive)\r\n && layout.qtCategories && layout.qtCategories.length > 1\r\n && !featureIsMatchingQtCatName(existingCartRoom.cartFeature, currentRoomName)) || (\r\n fabricatorState.settings.allowVisualizerSwitching && existingCartRoom && existingCartRoom.fromVisualizerType && (\r\n existingCartRoom.fromVisualizerType !== document.kvConfig.visualizerType\r\n )\r\n )) {\r\n\r\n if (!getRoomCartItemForCategoryName(currentRoomName, fabricatorState.settings)) { // this checks if room is available for current category\r\n break;\r\n }\r\n\r\n const existingAddedCartItem = withCreated.find(cItem => cItem.partId === \"room\" && featureIsMatchingQtCatName(cItem.cartFeature, currentRoomName));\r\n let newActiveQuoteIndex = 0;\r\n if (existingAddedCartItem) {\r\n newActiveQuoteIndex = existingAddedCartItem.currentQuote;\r\n } else if (shouldCreateNewQuotes) { // here we add a new room and add a new room cartItem\r\n const currentQuote = await updateCurrentQuote();\r\n const newQuotes = [...currentQuote, {}];\r\n newActiveQuoteIndex = quotes.length; // for example, if length is 2 (we are adding 2 index(0 and 1 already exist))\r\n store.dispatch(setQuotes(newQuotes));\r\n // console.log(\"newCreatedRooms\", newQuotes);\r\n const roomCartItem = getRoomCartItemForCategoryName(currentRoomName, fabricatorState.settings);\r\n if (roomCartItem && !newCartItems.some(cItem => {\r\n // QCDES-3901 if we are already adding room to the cart - no need to add another room\r\n return (cItem.currentQuote === roomCartItem.currentQuote)\r\n && (cItem.partId === roomCartItem.partId)\r\n && (cItem.cartFeature.dbFeature.id === roomCartItem.cartFeature.dbFeature.id)\r\n })) {\r\n const newRoomCartItem = Object.assign({}, roomCartItem, {\r\n currentQuote: newActiveQuoteIndex\r\n })\r\n newCartItems.push(newRoomCartItem);\r\n createdRoomCartItems.push(newRoomCartItem);\r\n }\r\n }\r\n console.log(\"newActiveQuoteIndex\", newActiveQuoteIndex);\r\n newCartItem.currentQuote = newActiveQuoteIndex;\r\n if (setNewRoomIndex) {\r\n store.dispatch(setActiveQuoteIndex(newActiveQuoteIndex));\r\n }\r\n } else if (!existingCartRoom && (newCartItem.partId !== \"room\")) { // we should add room cart item in current quote\r\n const roomCartItem = getRoomCartItemForCategoryName(currentRoomName, fabricatorState.settings);\r\n if (roomCartItem) {\r\n const newRoomCartItem = Object.assign({}, roomCartItem, {\r\n currentQuote: Number.isInteger(newCartItem.currentQuote) ? newCartItem.currentQuote : activeQuoteIndex\r\n })\r\n newCartItems.push(newRoomCartItem);\r\n createdRoomCartItems.push(newRoomCartItem);\r\n }\r\n }\r\n\r\n }\r\n\r\n return newCartItems\r\n}\r\n\r\n\r\n/**\r\n * update isVisibleInSQFT status\r\n */\r\nexport const updateSQFTCreatedStatusForQuotes = async () => {\r\n const {quotes} = store.getState().quotesState;\r\n const updatedQuotes = quotes.map(quote => {\r\n quote.isVisibleInSQFT = true\r\n return {...quote}\r\n })\r\n\r\n store.dispatch(setQuotes(updatedQuotes));\r\n}\r\n\r\n/**\r\n * @param quoteRoomName {string}\r\n * @param feature {featureInterface}\r\n */\r\nexport const getQtCategoryFromQuoteRoomName = (quoteRoomName, feature = null) => {\r\n const layout = getCurrentLayout();\r\n if (!layout.qtCategories) {\r\n return null\r\n }\r\n return layout.qtCategories.find(qtCat => {\r\n if (feature) {\r\n return featureIsMatchingQtCatName(feature, qtCat.name, true)\r\n }\r\n return qtCat.name.trim().toLowerCase() === quoteRoomName\r\n });\r\n}\r\n\r\n/**\r\n * @param feature {featureInterface}\r\n * @param qtCategoryName {string}\r\n * @param needToLowerCaseName {boolean}\r\n * @returns {boolean}\r\n */\r\nexport const featureIsMatchingQtCatName = (feature, qtCategoryName = \"\", needToLowerCaseName = false) => {\r\n if (!feature || !qtCategoryName) {\r\n return false\r\n }\r\n const checkCatName = needToLowerCaseName ? qtCategoryName.trim().toLowerCase() : qtCategoryName;\r\n\r\n // we need to have both compares here because:\r\n // bugfix/fix for comparing room names (customDisplayName is 'A - Kitchen', sharedFeatureName is 'Kitchen')\r\n // bugfix/fix for comparing room names (customDisplayName is 'Shower', sharedFeatureName is 'Bathroom', qtCat - 'Shower')\r\n const customLowerCasedName = feature.getLowerCasedCustomDisplayName ? feature.getLowerCasedCustomDisplayName() : \"\";\r\n const originalLowerCasedName = feature.getLowerCasedSharedFeatureName ? feature.getLowerCasedSharedFeatureName() : \"\";\r\n return (customLowerCasedName === checkCatName) || (originalLowerCasedName === checkCatName)\r\n}\r\n\r\n/**\r\n * update qtActiveCategory if room was selected and qtActiveCategory is not set\r\n * @param quoteIndex {number}\r\n */\r\nexport const checkIfNeedToSetNewCategory = (quoteIndex = 0) => {\r\n const {fabricatorState, cartState} = store.getState();\r\n if (fabricatorState.settings.useCategorySwitching) {\r\n const selectedQuoteRoomCartItem = getCurrentQuoteRoomCartItem(cartState.cartItems, quoteIndex);\r\n const qtCategory = getQtCategoryFromQuoteRoomName(\"\", selectedQuoteRoomCartItem ? selectedQuoteRoomCartItem.cartFeature : null);\r\n if (qtCategory) {\r\n store.dispatch(setQtActiveCategory(qtCategory.name));\r\n return true\r\n }\r\n }\r\n return false\r\n}\r\n\r\n/**\r\n * here we check if new room is needed if we are adding a new room, but there is already added another room\r\n * @param newCartItems {[cartItemInterface]}\r\n * @returns {cartItemInterface}\r\n */\r\nexport const getOtherRoomCartItemThatIsAddedToCurrentQuote = (newCartItems) => {\r\n if (newCartItems.length !== 1 || newCartItems[0].partId !== \"room\") {\r\n return null\r\n }\r\n const {cartState, quotesState} = store.getState();\r\n const addedRoom = getCurrentQuoteRoomCartItem(cartState.cartItems, quotesState.activeQuoteIndex);\r\n if (addedRoom && (addedRoom.cartFeature.partName !== newCartItems[0].cartFeature.partName)) {\r\n return addedRoom\r\n }\r\n return null\r\n}\r\n\r\n/**\r\n * here we create a new room (quote) and set new cart item quoteIndex\r\n * @param newRoomCartItem {cartItemInterface}\r\n * @param oldRoomCartItem {cartItemInterface}\r\n * @returns {cartItemInterface}\r\n */\r\nexport const addNewQuoteWithNewRoomCartItem = async (newRoomCartItem, oldRoomCartItem) => {\r\n const {quotesState, wizardState, fabricatorState} = store.getState();\r\n const {quotes, activeQuoteIndex} = quotesState;\r\n\r\n const currentQuote = await updateCurrentQuote();\r\n const newQuotes = [...currentQuote, {}];\r\n // console.log(\"newCreatedRooms\", newQuotes);\r\n const newActiveQuoteIndex = quotes.length; // for example, if length is 2 (we are adding 2 index(0 and 1 already exist))\r\n newRoomCartItem = Object.assign({}, newRoomCartItem, {\r\n currentQuote: newActiveQuoteIndex\r\n })\r\n store.dispatch(setQuotes(newQuotes));\r\n store.dispatch(setActiveQuoteIndex(newActiveQuoteIndex));\r\n if (oldRoomCartItem && wizardState && wizardState.allWizardsValues.length && wizardState.wizardActiveItem) {\r\n const newValues = wizardState.allWizardsValues.map(wizObject => {\r\n if (wizObject.quoteIndex === activeQuoteIndex\r\n && wizObject.isLastActiveWizard\r\n && wizObject.wizardItemId === wizardState.wizardActiveItem.id\r\n && wizObject.wizardSelectedValues\r\n && (Object.keys(wizObject.wizardSelectedValues).length === (wizardState.wizardActiveStep + 1))\r\n && wizObject.wizardSelectedValues[wizardState.wizardActiveStep].partId === \"room\"\r\n && wizObject.wizardSelectedValues[wizardState.wizardActiveStep].selectedFeature\r\n && wizObject.wizardSelectedValues[wizardState.wizardActiveStep].selectedFeature.dbFeature.id !== oldRoomCartItem.cartFeature.dbFeature.id) {\r\n console.log(\"changing allSelectedWizardValues, we need to make sure they are correctly updated\", );\r\n if (Object.keys(wizObject.wizardSelectedValues).length === 1 && fabricatorState.settings.allowVisualizerSwitching) {\r\n // we don't need to keep one item selected wizard in old quoteIndex\r\n return null\r\n } else {\r\n wizObject.wizardSelectedValues[wizardState.wizardActiveStep] = Object.assign(\r\n {},\r\n wizObject.wizardSelectedValues[wizardState.wizardActiveStep],\r\n {selectedFeature: oldRoomCartItem.cartFeature}\r\n )\r\n }\r\n }\r\n return wizObject\r\n }).filter(wizObject => wizObject)\r\n store.dispatch(updateAllWizardValues(newValues))\r\n }\r\n return newRoomCartItem\r\n}\r\n","import {\r\n CABINET_COMMON_COLOR_PART_IDS,\r\n FEATUREGROUP_PART_ID,\r\n MITER_EDGE_NAMES,\r\n MITER_UNDERWRAP_EDGE_NAMES,\r\n SHAPE_PART_ID,\r\n SHAPE_TYPE,\r\n SQFT_APPLIANCES\r\n} from \"../constants\";\r\nimport store from \"./../../../store\";\r\nimport {getCountertopFeatureGroup, getCurrentLayout} from \"../../appLayout\";\r\nimport workspace from \"../components/canvas/core/workspace\";\r\nimport {getStringFeatureName} from \"../../../misc/helpers\";\r\nimport {getEdgeFeatures} from \"./shapeHelper\";\r\nimport {isSFTCabinetsGroup} from \"./sqftNavigationHelper\";\r\nimport {getFeatureGroup} from \"./sqftHelperUi\";\r\nimport sqftConfig from \"../components/canvas/store/sqftConfig\";\r\n\r\nexport const getShapeFeatureId = (partId) => {\r\n const state = store.getState();\r\n const { sqftFromFeature } = state.sqftState;\r\n const { wizardIsActive, wizardSelectedValues } = state.wizardState;\r\n const layout = getCurrentLayout();\r\n const isCabinetsMode = isSFTCabinetsGroup();\r\n\r\n // 1) Assign feature by sqftFromFeature that was passed from visualizer quoting tool\r\n if (wizardIsActive) {\r\n for (const key in wizardSelectedValues) {\r\n if (wizardSelectedValues.hasOwnProperty(key)) {\r\n const selectedFeature = wizardSelectedValues[key] ? wizardSelectedValues[key].selectedFeature : null;\r\n if (selectedFeature && selectedFeature.partId === partId) {\r\n return selectedFeature.dbFeature.id;\r\n }\r\n }\r\n }\r\n }\r\n\r\n //1.1) For the cabinets we will assign activeFeature from featureGroup\r\n if (!isCabinetsMode && sqftFromFeature && sqftFromFeature.cartFeature.partId === partId) {\r\n console.log(\"new shape featureId from sqftFromFeature\", sqftFromFeature.cartFeature.dbFeature.id);\r\n return sqftFromFeature.cartFeature.dbFeature.id;\r\n }\r\n\r\n //2) Assign default active feature group feature for the part id\r\n const featureGroup = layout.getFeatureGroupByPartId(partId);\r\n if (featureGroup && featureGroup.activeFeature) {\r\n console.log(\"new shape featureId featureGroup activeFeature\", featureGroup.activeFeature.dbFeature.id);\r\n return featureGroup.activeFeature.dbFeature.id;\r\n }\r\n\r\n //2.5) Assign feature for slab placeholder\r\n if (partId === SHAPE_PART_ID.slabPlaceHolder) {\r\n const countertopFeatureGroup = getCountertopFeatureGroup();\r\n if (sqftFromFeature && sqftFromFeature.cartFeature.partId === countertopFeatureGroup.partId) {\r\n console.log(\"new shape featureId from sqftFromFeature for the slabPlaceHolder\", sqftFromFeature.cartFeature.dbFeature.id);\r\n return sqftFromFeature.cartFeature.dbFeature.id;\r\n }\r\n\r\n if (countertopFeatureGroup && countertopFeatureGroup.activeFeature) {\r\n console.log(\"new shape featureId featureGroup activeFeature for the slabPlaceHolder\", countertopFeatureGroup.activeFeature.dbFeature.id);\r\n return countertopFeatureGroup.activeFeature.dbFeature.id;\r\n }\r\n }\r\n\r\n //3) Assign any feature\r\n //todo\r\n console.log(\"new shape featureId\", null);\r\n return null\r\n}\r\n\r\nexport const getFeatureNameById = (featureId) => {\r\n const layout = getCurrentLayout();\r\n const feature = layout.getFeatureById(featureId);\r\n const intl = workspace.intl;\r\n const state = store.getState();\r\n const fabricatorData = state.fabricatorState;\r\n\r\n return getStringFeatureName(feature, intl.messages, intl.locale, fabricatorData);\r\n}\r\n\r\nexport const shouldChangeCabinetShapePartId = (relatedParentFeature, newFeature) => {\r\n //console.log(\"relatedParentFeature\", relatedParentFeature);\r\n //console.log(\"sqftFromFeature\", sqftFromFeature);\r\n if (!newFeature || !relatedParentFeature) {\r\n return false\r\n }\r\n\r\n const sqftFromFeatureParentGroup = newFeature.getParent();\r\n const relatedParentParentGroup = relatedParentFeature.getParent();\r\n\r\n if ((CABINET_COMMON_COLOR_PART_IDS).includes(sqftFromFeatureParentGroup.partId)\r\n && (CABINET_COMMON_COLOR_PART_IDS).includes(relatedParentParentGroup.partId)\r\n ) {\r\n const sqftFromFeatureFeatureName = newFeature.getFeatureName();\r\n const relatedParentFeatureName = relatedParentFeature.getFeatureName();\r\n //console.log(\"sqftFromFeatureFeatureName\", sqftFromFeatureFeatureName);\r\n //console.log(\"relatedParentFeatureName\", relatedParentFeatureName);\r\n\r\n if (sqftFromFeatureFeatureName !== relatedParentFeatureName) {\r\n return true\r\n }\r\n }\r\n\r\n return false\r\n}\r\n\r\nexport const getEdgeFilterByValue = (filterValue = 'Waterfall') => {\r\n const state = store.getState();\r\n const filterGroups = state.filterState.filterGroups;\r\n const edgeFilterGroup = filterGroups.find(group => group.name === \"Edge\" || group.name === \"Edge Profile\");\r\n\r\n return edgeFilterGroup ? edgeFilterGroup.values.filter(group => group.value === filterValue) : [];\r\n};\r\n\r\nexport const isWaterfallFeature = (edgeFeatureId) => {\r\n const navItems = getEdgeFeatures();\r\n if (!navItems) {\r\n return false\r\n }\r\n let edgeFeature = navItems.find(edge => edge.part.dbFeature.id === edgeFeatureId);\r\n if (!edgeFeature) {\r\n return false\r\n }\r\n\r\n const intl = workspace.intl;\r\n const state = store.getState();\r\n const fabricatorData = state.fabricatorState;\r\n let edgeNameTranslated = getStringFeatureName(edgeFeature.part, intl.messages, intl.locale, fabricatorData);\r\n\r\n return edgeNameTranslated.toLowerCase().includes('waterfall')\r\n}\r\n\r\nexport const isMiterEdge = (featureId) => {\r\n const navItems = getEdgeFeatures();\r\n if (!navItems) {\r\n return false\r\n }\r\n\r\n let edge = navItems.find(edge => edge.part.dbFeature.id === featureId);\r\n if (!edge) {\r\n return false\r\n }\r\n\r\n const edgeName = edge.part.getFeatureName();\r\n\r\n return MITER_EDGE_NAMES.includes(edgeName);\r\n}\r\n\r\nexport const getEdgeByFeatureId = (featureId) => {\r\n const navItems = getEdgeFeatures();\r\n if (!navItems) {\r\n return null\r\n }\r\n\r\n let edge = navItems.find(edge => edge.part.dbFeature.id === featureId);\r\n if (!edge) {\r\n return null\r\n }\r\n\r\n return edge\r\n}\r\n\r\nconst parseNumberFromString = (str) => {\r\n // Convert the string \"1 1/2\" to 1.5\r\n const fractionMatch = str.match(/(\\d+)\\s+(\\d+)\\/(\\d+)/);\r\n if (fractionMatch) {\r\n const [_, whole, numerator, denominator] = fractionMatch;\r\n void _;\r\n return parseFloat(whole) + (parseFloat(numerator) / parseFloat(denominator));\r\n }\r\n\r\n // Convert a string like \"1 1/2\", \"2-3\" into separate numbers\r\n const numberMatch = str.match(/\\d+(\\.\\d+)?/g);\r\n if (numberMatch) {\r\n return Math.max(...numberMatch.map(Number));\r\n }\r\n\r\n return null;\r\n};\r\n\r\nexport const getMiterEdgeHeight = (featureId = null) => {\r\n //get height from featureName\r\n if (featureId) {\r\n const miterEdgeFeature = getEdgeByFeatureId(featureId);\r\n if (miterEdgeFeature) {\r\n const edgeName = miterEdgeFeature.part.getFeatureName();\r\n\r\n const heightFromFeatureName = parseNumberFromString(edgeName);\r\n\r\n if (edgeName !== 'Rimrock - 981' // don't get height from this edge\r\n && heightFromFeatureName > 0.5\r\n ) {\r\n return heightFromFeatureName\r\n }\r\n }\r\n }\r\n\r\n return sqftConfig.measureUnit === \"Imperial\" ? sqftConfig.miteredEdgeAdditionalImperialArea : sqftConfig.miteredEdgeAdditionalMetricArea;\r\n};\r\n\r\nexport const getMiterEdgeFeature = () => {\r\n const navItems = getEdgeFeatures();\r\n if (!navItems) {\r\n return null\r\n }\r\n\r\n let edgeFeature = navItems.find(edge => {\r\n return MITER_EDGE_NAMES.includes(edge.part.partName);\r\n });\r\n\r\n if (!edgeFeature) {\r\n edgeFeature = navItems.find(edge => edge.part.partName.toLowerCase().includes('miter'));\r\n }\r\n\r\n if (edgeFeature) {\r\n return edgeFeature.part\r\n }\r\n\r\n return null\r\n}\r\n\r\nexport const getMiterUnderwrap = () => {\r\n const navItems = getEdgeFeatures();\r\n if (!navItems) {\r\n return null\r\n }\r\n\r\n let edgeFeature = navItems.find(edge => {\r\n return MITER_UNDERWRAP_EDGE_NAMES.includes(edge.part.partName.toLowerCase());\r\n });\r\n\r\n if (edgeFeature) {\r\n return edgeFeature.part\r\n }\r\n\r\n return null\r\n}\r\n\r\nexport const getBumpoutFeature = () => {\r\n const bumpoutFeatureGroup = getFeatureGroup(FEATUREGROUP_PART_ID.specialty_cut_and_designs);\r\n const layout = getCurrentLayout();\r\n\r\n return layout.designNavigationItems(bumpoutFeatureGroup,\r\n {},\r\n 'bumpout',\r\n true,\r\n true,\r\n [],\r\n { firstFeature: null, firstConditions: null },\r\n )\r\n}\r\n\r\nexport const isFeatureUnitUseEach = (feature) => {\r\n return feature.dbFeature.unit === \"Each\"\r\n}\r\n\r\nexport const createApplianceOnTheWorkspace = (itemName, featureId = null, size = null) => {\r\n const getSize = (itemName) => {\r\n switch (itemName) {\r\n case SQFT_APPLIANCES.sink:\r\n return {width: 22, height: 30}\r\n case SQFT_APPLIANCES.doubleSink:\r\n return {width: 22, height: 33}\r\n default:\r\n return {width: 30, height: 26}\r\n }\r\n }\r\n if (!size) {\r\n size = getSize(itemName);\r\n }\r\n\r\n let iconFullName = 'icon-'+ itemName +'-placeholder';\r\n let svg = document.getElementById(iconFullName);\r\n if (!svg) {\r\n console.log('svg not found', 'icon-'+ itemName +'-placeholder');\r\n return\r\n }\r\n console.log('svg', iconFullName);\r\n\r\n let img = new Image(),\r\n xml = new XMLSerializer().serializeToString(svg), // get svg data\r\n svg64 = btoa(xml); // make it base64\r\n\r\n img.src = 'data:image/svg+xml;base64,' + svg64; // set it as the source of the img element\r\n\r\n const movableImage = workspace.addImage(img, size.width, size.height, null, null, SHAPE_TYPE.appliances, itemName, function () {});\r\n movableImage.setFeatureId(featureId);\r\n\r\n return movableImage;\r\n}\r\n\r\nexport const getDbFeatureName = (dbFeature) => {\r\n return dbFeature.metaData.ActualDisplayedName\r\n ? dbFeature.customDisplayName && (dbFeature.customDisplayName !== dbFeature.sharedFeatureName)\r\n ? dbFeature.customDisplayName\r\n : metaData.ActualDisplayedName[0]\r\n : dbFeature.customDisplayName || dbFeature.displayName || dbFeature.sharedFeatureName;\r\n};\r\n\r\n/**\r\n * Sort features By Width ASC\r\n * @param features\r\n */\r\nexport const getSortedFeatures = (features) => {\r\n features.sort((a, b) => {\r\n const indexA = a.dbFeature.description.indexOf('Width');\r\n const indexB = b.dbFeature.description.indexOf('Width');\r\n\r\n // Check if 'Width' was found in descriptions\r\n if (indexA !== -1 && indexB !== -1) {\r\n const widthA = parseInt(a.dbFeature.description.substr(indexA + 6, 3), 10);\r\n const widthB = parseInt(b.dbFeature.description.substr(indexB + 6, 3), 10);\r\n\r\n return widthB - widthA;\r\n } else if (indexA !== -1) {\r\n // Place items without 'Width' in descriptions below\r\n return -1; // Move item b lower in the list\r\n } else if (indexB !== -1) {\r\n // Place items without 'Width' in descriptions below\r\n return 1; // Move item a lower in the list\r\n } else {\r\n // If neither has 'Width' in description, maintain current order\r\n return 0;\r\n }\r\n })\r\n\r\n return features\r\n}\r\n\r\n// const getSplittedDbFeatureName = (dbFeature) => {\r\n// if (dbFeature.customDisplayName == null) {\r\n// dbFeature.customDisplayName = dbFeature.sharedFeatureName || dbFeature.partName || \"\";\r\n// if (dbFeature.partId === \"center_island_countertop\") {\r\n// dbFeature.customDisplayName = dbFeature.customDisplayName\r\n// .replace(/2 0 /g, \"\")\r\n// .replace(/Center Island Countertop 1 /g, \"\");\r\n// }\r\n// }\r\n// return dbFeature.customDisplayName\r\n// };\r\n//\r\n// export const getFilteredRelatedDbFeatures = (relatedDbFeaturesToCheck) => {\r\n// // console.log(\"relatedFeaturesToCheck\", relatedFeaturesToCheck);\r\n// let relatedDbFeatures = [];\r\n// relatedDbFeaturesToCheck.forEach((relFeature) => {\r\n// const featureAlreadyExistIndex = relatedDbFeatures.findIndex(currentFeature => {\r\n// return getSplittedDbFeatureName(currentFeature) === getSplittedDbFeatureName(relFeature)\r\n// })\r\n// if (featureAlreadyExistIndex > -1) {\r\n// if (relFeature.getParent().navigationSubItems().some(navItem => {\r\n// return navItem.part.dbFeature.id === relFeature.dbFeature.id\r\n// })) {\r\n// relatedDbFeatures.splice(featureAlreadyExistIndex, 1, relFeature)\r\n// }\r\n// } else {\r\n// relatedDbFeatures.push(relFeature);\r\n// }\r\n// });\r\n// // console.log(\"relatedFeatures\", relatedFeatures);\r\n// return relatedDbFeatures\r\n// };\r\n","import invert from \"lodash/invert\";\r\nimport {CountsType} from \"../../bvComponent/core/constants\";\r\nimport {LayoutAbbreviation} from \"../../kvComponent/core/constants\";\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\nimport Config from \"../../../config\";\r\n\r\nexport const getActivePartsCounts = (activePart, layoutName) => {\r\n let counts = 0;\r\n switch (document.kvConfig.visualizerType) {\r\n case \"Bathroom\":\r\n case \"BV\": {\r\n if (activePart.counts) {\r\n counts = activePart.counts.allLayoutFeaturesCount + activePart.counts[invert(CountsType)[layoutName]];\r\n }\r\n break;\r\n }\r\n case \"Kitchen\":\r\n case \"KV\": {\r\n const excluded = [\r\n \"range\", \"center_island_range\", \"stovetop\", \"center_island_stovetop\", \"faucet\", \"sink\", \"bottom_cabinet\",\r\n \"countertop\", \"center_island_faucet\", \"center_island_sink\", \"center_island_countertop\", \"top_cabinet\",\r\n \"center_island_edge\", \"edge_profile\"\r\n ];\r\n if (!excluded.includes(activePart.partId) && activePart.counts) {\r\n const layoutAbbr = LayoutAbbreviation[layoutName].toLowerCase();\r\n counts = activePart.counts[layoutAbbr];\r\n }\r\n break;\r\n }\r\n }\r\n return counts\r\n};\r\n\r\nexport const getAvailableLayouts = () => {\r\n const layout = getCurrentLayout();\r\n const parents = layout.getFeatures();\r\n\r\n if (document.kvConfig.visualizerType === \"bvScene\") { // removed Layout4 from bvScene as it is really buggy on some profiles (\"userId\": 224022)\r\n return [\"Layout1\"]\r\n }\r\n\r\n return Object.keys(layout.layoutNames)\r\n .filter(key => key !== \"All\" && parents.some(parent => {\r\n const exisitngRelItemWithFeatures = parent.relatedItems && parent.relatedItems.find(relItem => {\r\n return relItem.featuresList[key] && relItem.featuresList[key].length && relItem.featuresList[key].some(feature => {\r\n return feature.dbFeature.s3Bindings\r\n })\r\n })\r\n // console.log(\"exisitngRelItemWithFeatures\", exisitngRelItemWithFeatures);\r\n return exisitngRelItemWithFeatures\r\n }))\r\n}\r\n\r\nexport const getShowOtherLayouts = (fabricatorSettings) => {\r\n if (document.kvConfig.toolVersion >= 5 && !Config.isVisualizerManagement()) {\r\n return false\r\n }\r\n let showOtherLayouts =\r\n (document.kvConfig.visualizerType === \"Bathroom\" || document.kvConfig.visualizerType === \"BV\")\r\n ? fabricatorSettings && (fabricatorSettings.showSmallDesignForClients\r\n || (fabricatorSettings.showSmallDesignFromDashboard && document.kvConfig.isBackend))\r\n : true;\r\n if (showOtherLayouts) {\r\n showOtherLayouts = getAvailableLayouts().length > 1\r\n }\r\n return showOtherLayouts\r\n};\r\n\r\nexport const getAvailableRoomScenes = () => {\r\n let availableRoomScenes = [];\r\n const layout = getCurrentLayout();\r\n const allFeatures = layout.getAllFeatures();\r\n for (let i = 0; i < allFeatures.length; i++) {\r\n const feature = allFeatures[i];\r\n if (feature.dbFeature.metaData && Array.isArray(feature.dbFeature.metaData[\"RoomScene\"])) {\r\n feature.dbFeature.metaData[\"RoomScene\"].forEach(scene => {\r\n if (!availableRoomScenes.includes(scene)) {\r\n availableRoomScenes.push(scene)\r\n }\r\n })\r\n }\r\n }\r\n return availableRoomScenes.sort()\r\n}\r\n\r\nexport const scrolledVerticalToTheEnd = ({clientHeight, scrollHeight, scrollTop}) => {\r\n const ceilScrollHeight = Math.ceil(scrollHeight);\r\n const floorScrollHeight = Math.floor(scrollHeight);\r\n const ceilScrollTop = Math.ceil(scrollTop);\r\n const floorScrollTop = Math.floor(scrollTop);\r\n const ceilClientHeight = Math.ceil(clientHeight);\r\n const floorClientHeight = Math.floor(clientHeight);\r\n\r\n return (ceilScrollHeight - ceilScrollTop === ceilClientHeight)\r\n || (ceilScrollHeight - floorScrollTop === ceilClientHeight)\r\n || (ceilScrollHeight - ceilScrollTop === floorClientHeight)\r\n || (ceilScrollHeight - floorScrollTop === floorClientHeight)\r\n || (floorScrollHeight - ceilScrollTop === ceilClientHeight)\r\n || (floorScrollHeight - floorScrollTop === ceilClientHeight)\r\n || (floorScrollHeight - floorScrollTop === floorClientHeight)\r\n || (floorScrollHeight - floorScrollTop === floorClientHeight)\r\n}\r\n\r\n/**\r\n * when the new customer is created - the system creates a job for him with only one userState property\r\n * @param parentGroup {object}\r\n // * @param fabricatorData {object}\r\n * @returns {array}\r\n */\r\nexport const getSideBarSubParts = (parentGroup) => {\r\n if (!parentGroup || !parentGroup.subParts || !parentGroup.layout) {\r\n return []\r\n }\r\n let subParts = parentGroup.subParts(true, true) || [];\r\n const layout = parentGroup.layout;\r\n if (!Config.showAllVisualizerGroups()) {\r\n subParts = subParts.filter(subPart => {\r\n return layout.hasNavItemsLength(subPart)\r\n // && !(fabricatorData && fabricatorData.isEncore && Array.isArray(layout.disabledClickablePartIds)\r\n // && layout.disabledClickablePartIds.includes(subPart.part.partId)) // hide if it's not clickable (for encore)\r\n })\r\n }\r\n return subParts\r\n}\r\n","import store from \"../../../store\";\r\nimport {\r\n END_CAP_AREA_PART_IDS,\r\n END_CAP_CABINETS_PART_IDS,\r\n END_CAP_PART_IDS, SHAPE_PART_ID, SIDEBAR_NAVIGATION_BUTTONS,\r\n SQFT_AREA_TYPE_PART_IDS,\r\n SQFT_GROUP\r\n} from \"../constants\";\r\nimport {getUrlSQFTHashParam} from \"./sqftHelper\";\r\nimport sqftConfig from \"../components/canvas/store/sqftConfig\";\r\nimport { SIDEBAR_NAVIGATION_CABINET_BUTTONS, SQFT_APPLIANCES } from \"../constants\";\r\nimport endCapCanvas from \"../components/canvas/core/controls/endCapCanvas\";\r\nimport {setSelectedFeature} from \"../../../actions/sqftResourceFunctions\";\r\nimport {setSelectedCountertop} from \"../../../actions/sqftMenuFunctions\";\r\n\r\nexport const getSQFTGroupFromUrl = () => {\r\n return getUrlSQFTHashParam(\"group\")\r\n}\r\n\r\n/**\r\n * Is SQFT in Area Group TYPE\r\n */\r\nexport const getIsSFTAreaGroup = () => {\r\n const isSFTAreaGroupInUrl = getSQFTGroupFromUrl();\r\n const {sqftState} = store.getState();\r\n const {sqftFromFeature} = sqftState;\r\n\r\n return isSFTAreaGroupInUrl || sqftFromFeature && (Object.keys(SQFT_AREA_TYPE_PART_IDS).includes(sqftFromFeature.cartFeature.partId));\r\n}\r\n\r\n/**\r\n * Is SQFT in Cabinets Group TYPE\r\n */\r\nexport const isSFTCabinetsGroup = () => {\r\n const isCabinetGroupInURL = sqftConfig.isCabinetGroupInURL();\r\n const {sqftState} = store.getState();\r\n const {SQFTGroup} = sqftState;\r\n\r\n return isCabinetGroupInURL || SQFTGroup === SQFT_GROUP.cabinets;\r\n}\r\n\r\n/**\r\n * Is SQFT Group Type\r\n */\r\nexport const getSQFTGroup = () => {\r\n const isSFTAreaGroupInUrl = getSQFTGroupFromUrl();\r\n const {sqftState} = store.getState();\r\n const {SQFTGroup} = sqftState;\r\n\r\n if (isSFTAreaGroupInUrl) {\r\n return isSFTAreaGroupInUrl\r\n }\r\n\r\n if (SQFTGroup) {\r\n return SQFTGroup;\r\n }\r\n\r\n return SQFT_GROUP.default\r\n}\r\n\r\nexport const getPartIdsFromMenuOpened = (menuOpened) => {\r\n let partIds = menuOpened ? [menuOpened] : [];\r\n if (menuOpened === SIDEBAR_NAVIGATION_CABINET_BUTTONS.centerIsland) {\r\n partIds = ['countertop'];\r\n } else if (menuOpened === SQFT_APPLIANCES.refrigerator) {\r\n partIds = ['fridge'];\r\n } else if (menuOpened === SQFT_APPLIANCES.stovetop) {\r\n partIds = ['stove'];\r\n } else if (menuOpened === SIDEBAR_NAVIGATION_CABINET_BUTTONS.end_panel) {\r\n partIds = END_CAP_CABINETS_PART_IDS;\r\n } else if (menuOpened === SIDEBAR_NAVIGATION_BUTTONS.end_cap) {\r\n partIds = END_CAP_AREA_PART_IDS;\r\n }\r\n return partIds;\r\n};\r\n\r\nexport const getSearchTextFromMenuOpened = (menuOpened) => {\r\n let searchText = \"\";\r\n if (menuOpened === SIDEBAR_NAVIGATION_CABINET_BUTTONS.end_panel) {\r\n searchText = \"\";//'End Panel';\r\n }\r\n return searchText;\r\n};\r\n\r\nexport const getItemClickCallbackForPartId = (partId) => {\r\n let itemClickCallback = new Function();\r\n if (END_CAP_PART_IDS.includes(partId)) {\r\n itemClickCallback = (e, feature) => {\r\n endCapCanvas.setHighlighting(false);\r\n endCapCanvas.setCursorImage();\r\n store.dispatch(setSelectedFeature(feature));\r\n };\r\n } else if (partId === SHAPE_PART_ID.countertop) {\r\n itemClickCallback = (e, feature) => {\r\n store.dispatch(setSelectedCountertop(feature.dbFeature.id));\r\n }\r\n }\r\n\r\n return itemClickCallback;\r\n};\r\n","import {Part} from \"../part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport {applianceThumbnail} from \"../assets\";\r\n\r\nimport Dishwasher from \"../subparts/appliances/dishwasher\";\r\nimport Fridge from \"../subparts/appliances/fridge\";\r\nimport Hood from \"../subparts/appliances/hood\";\r\nimport Microwave from \"../subparts/appliances/microwave\";\r\nimport Range from \"../subparts/appliances/range\";\r\nimport Oven from \"../subparts/appliances/oven\";\r\nimport Stove from \"../subparts/appliances/stove\";\r\nimport FridgeEnclosure from \"../subparts/appliances/fridgeEnclosure\";\r\nimport FridgeEnclosureHandle from \"../subparts/appliances/fridgeEnclosureHandle\";\r\nimport Stovetop from \"../subparts/appliances/stovetop\";\r\n\r\nexport default class Appliance extends Part {\r\n static id = 'Appliances';\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Appliances';\r\n this.partThumbnail = applianceThumbnail;\r\n this.partThumbnailSize = \"70%\";\r\n this.translateId = \"visualizer.kitchen.appliance\";\r\n\r\n // related items\r\n this.dishwasher = null;\r\n this.fridge = null;\r\n this.hood = null;\r\n this.microwave = null;\r\n this.range = null;\r\n this.stove = null;\r\n this.stovetop = null;\r\n this.fridgeEnclosure = null;\r\n this.fridgeEnclosureHandle = null;\r\n this.oven = null;\r\n this.relatedGroupNames = [\"Dishwasher\", \"Fridge\", \"Fridge Enclosure\", \"Hood\", \"Microwave\", \"Range\", \"Stove\",\r\n \"Stovetop\", \"Oven\"];\r\n }\r\n\r\n load(dbFeature, loadFeature = true) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Dishwasher\":\r\n relatedItemName = \"dishwasher\";\r\n RelatedItemClass = Dishwasher;\r\n break;\r\n case \"Fridge\":\r\n relatedItemName = \"fridge\";\r\n RelatedItemClass = Fridge;\r\n break;\r\n case \"Fridge Enclosure Handle\":\r\n relatedItemName = \"fridgeEnclosureHandle\";\r\n RelatedItemClass = FridgeEnclosureHandle;\r\n break;\r\n case \"Fridge Enclosure\":\r\n relatedItemName = \"fridgeEnclosure\";\r\n RelatedItemClass = FridgeEnclosure;\r\n break;\r\n case \"Hood\":\r\n relatedItemName = \"hood\";\r\n RelatedItemClass = Hood;\r\n break;\r\n case \"Microwave\":\r\n relatedItemName = \"microwave\";\r\n RelatedItemClass = Microwave;\r\n break;\r\n case \"Range\":\r\n relatedItemName = \"range\";\r\n RelatedItemClass = Range;\r\n break;\r\n case \"Stove\":\r\n relatedItemName = \"stove\";\r\n RelatedItemClass = Stove;\r\n break;\r\n case \"StoveTop\":\r\n case \"Stovetop\":\r\n relatedItemName = \"stovetop\";\r\n RelatedItemClass = Stovetop;\r\n break;\r\n case \"Oven\":\r\n relatedItemName = \"oven\";\r\n RelatedItemClass = Oven;\r\n break;\r\n }\r\n return this.loadCommon(relatedItemName, RelatedItemClass, dbFeature, loadFeature)\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n handleSubPartClick() {\r\n\r\n }\r\n\r\n}\r\n","import {Shower} from \"../../parts/shower\";\r\nimport {IntermediatePart} from \"../../intermediatePart\";\r\nimport {ShowerComboTubType, SIDE_POSITIONS} from \"../../constants\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\n\r\nexport default class AccessoryCommon extends IntermediatePart {\r\n\r\n constructor(props) {\r\n super(props);\r\n }\r\n\r\n getArrayOfConditions() {\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n const layout = this.getParent().layout;\r\n const showerParent = layout.parts[Shower.id];\r\n const showerSize = showerParent.showerSize();\r\n if (showerParent && showerSize) {\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerSize\r\n });\r\n }\r\n if (this.partId === \"grab_bar\") {\r\n const showerCondition = showerParent.showerTubComboIsActive() && layout.parts[ShowerTubCombo.id]\r\n && (layout.parts[ShowerTubCombo.id].bottomTub === ShowerComboTubType.walk_in_tub)\r\n ? \"Tub\"\r\n : \"Shower\";\r\n conditions.push({\r\n propName: \"Shower\",\r\n propValue: showerCondition\r\n });\r\n }\r\n return conditions\r\n }\r\n\r\n checkRelatedFeatureGroupPositions(position) {\r\n const accessoriesParent = this.getParent();\r\n const showerParent = accessoriesParent.layout.parts[Shower.id]; // no need for another check\r\n const showerSize = showerParent.showerSize();\r\n let otherFeatureGroup = null;\r\n switch (this.partId) {\r\n case \"grab_bar\":\r\n otherFeatureGroup = accessoriesParent.soapDish;\r\n break;\r\n case \"soap_dish\":\r\n otherFeatureGroup = accessoriesParent.grabBar;\r\n break;\r\n case \"shower_seats\":\r\n otherFeatureGroup = accessoriesParent.largeCornerSeat;\r\n break;\r\n case \"large_corner_seat\":\r\n otherFeatureGroup = accessoriesParent.seats;\r\n break;\r\n default:\r\n break;\r\n }\r\n if (showerSize === \"30\") {\r\n if (otherFeatureGroup && otherFeatureGroup.layerPositions && !this.disabled && Object.keys(this.layerPositions).some(key => this.layerPositions[key])) {\r\n Object.keys(otherFeatureGroup.layerPositions).forEach(key => {\r\n otherFeatureGroup.layerPositions[key] = null\r\n });\r\n }\r\n if (this.layerPositions) {\r\n Object.keys(this.layerPositions).forEach(key => {\r\n if (key !== position) {\r\n this.layerPositions[key] = null; // it can be only on one side on small shower size\r\n }\r\n })\r\n }\r\n } else {\r\n if (this.layerPositions[position] && otherFeatureGroup && otherFeatureGroup.layerPositions[position] && !otherFeatureGroup.disabled) {\r\n const newPosition = position === SIDE_POSITIONS[0] ? SIDE_POSITIONS[1] : SIDE_POSITIONS[0];\r\n if (!this.layerPositions[newPosition]) {\r\n const matchingPositionFeature = otherFeatureGroup.getMatchingPositionFeature(newPosition, otherFeatureGroup.layerPositions[position]);\r\n if (matchingPositionFeature) {\r\n otherFeatureGroup.layerPositions[newPosition] = matchingPositionFeature;\r\n }\r\n }\r\n otherFeatureGroup.layerPositions[position] = null; //2) remove old soap dish position\r\n }\r\n }\r\n }\r\n\r\n}\r\n","import {getCurrentLayout} from \"../../../appLayout\";\r\nimport {getGroupDescription} from \"../../../selectionWindow/selectionDescriptionCoverTranslates\";\r\nimport {CART_ITEM_ADDED_BY} from \"../../../shoppingCart/cartItemInterface\";\r\nimport {cartItemInStock} from \"../../lookNavigation/lookFunctions2\";\r\nimport {IS_LIXIL_SERVERS, IS_PRODUCT_JOURNEY} from \"../../../../config\";\r\nimport {getCartItemUnit, getFeatureUnit} from \"../../../../misc/helpers\";\r\nimport store from \"../../../../store\";\r\n// import {getBvFeatures} from \"../../../../api/server-api\";\r\n\r\n/**\r\n * Returns qtCatProperties\r\n * @param lookActiveFeature {object}\r\n * @returns {object} objects\r\n */\r\nexport const getAvailableWizardList = (lookActiveFeature) => {\r\n if (!lookActiveFeature) {\r\n return {}\r\n }\r\n const parent = lookActiveFeature.getParent();\r\n\r\n return parent.qtCatProperties ? parent.qtCatProperties : {};\r\n}\r\n\r\n/**\r\n * Returns subParts\r\n * @param qtCategoryName {string}\r\n * @returns {array} array of objects\r\n */\r\nexport const getWizardSubParts = (qtCategoryName) => {\r\n const layout = getCurrentLayout();\r\n if (layout.qtCategories) { // set default if index is not matching\r\n //console.log(\"qtCategories\", layout.qtCategories);//virtualized list //navigation subitems\r\n\r\n let qtCategory = layout.qtCategories.find(qtCat => qtCat.name === qtCategoryName);\r\n if (qtCategory && qtCategory.subParts) {\r\n return qtCategory.subParts\r\n }\r\n }\r\n return []\r\n}\r\n\r\n/**\r\n * Returns active features list for\r\n * @param subPart {object}\r\n * @param intl {object}\r\n * @param fabricatorData array\r\n * @returns {array} array of objects\r\n */\r\nexport const getFeatureGroupDescription = (subPart, intl, fabricatorData) => {\r\n const name = (subPart.customGroupDisplayName || subPart.partName || \"\").toLowerCase();\r\n if ((fabricatorData.isLowes || fabricatorData.isCaesarStone) && intl.messages) {\r\n if (intl.locale === \"fr-FR\" && intl.messages[\"transDoc.description_FR.\" + name]) {\r\n return intl.formatMessage({id: \"transDoc.description_FR.\" + name})\r\n } else if (intl.locale === \"pl-PL\" && intl.messages[\"transDoc.customTranslateDescription_PL.\" + name]) {\r\n return intl.formatMessage({id: \"transDoc.customTranslateDescription_PL.\" + name})\r\n }\r\n }\r\n return subPart.customDescription || subPart.description\r\n || intl.formatMessage({ id: getGroupDescription(subPart.partName) });\r\n};\r\n\r\n// const getMissingFeatures = (missingFeatures) => {\r\n// getBvFeatures(missingFeatures)\r\n// .then(response => {\r\n// const layout = getCurrentLayout();\r\n// layout.loadNewFeatures(response.data);\r\n// return true\r\n// })\r\n// .catch(() => false)\r\n// }\r\n\r\n/**\r\n * returns bundled features\r\n * @param feature {featureInterface}\r\n * @returns {array}\r\n */\r\nexport const getLixilRequiredNotIncludedFeatures = (feature) => {\r\n if (Array.isArray(feature.dbFeature.lixilRequiredNotIncluded) && feature.dbFeature.lixilRequiredNotIncluded.length) {\r\n // todo remove\r\n //feature.dbFeature.lixilRequiredNotIncluded.push(90068248, 90068237, 90068210, 90074461, 90068828, 90074449,\r\n // 90068281, 90068389, 90069955, 90069948, 90069950, 90071177, 90070070, 90069587 );\r\n // await getMissingFeatures(feature.dbFeature.lixilRequiredNotIncluded);\r\n\r\n const layout = getCurrentLayout();\r\n let allFeatures = layout.getAllFeatures(true);\r\n let lixilRequiredNotIncluded = allFeatures.filter((checkFeature) => {\r\n return feature.dbFeature.lixilRequiredNotIncluded.includes(checkFeature.dbFeature.id)\r\n });\r\n console.log(\"lixilRequiredNotIncluded\", lixilRequiredNotIncluded);\r\n\r\n return lixilRequiredNotIncluded\r\n }\r\n return []\r\n}\r\n\r\n/**\r\n * returns formatted string\r\n * @param str {string}\r\n * @returns {string}\r\n */\r\nexport const formatStrToUrl = (str) => {\r\n if (!str) {\r\n return \"\"\r\n }\r\n\r\n return str.replace(/\\s+/g, '-').toLowerCase();\r\n}\r\n\r\n\r\n/**\r\n * removes check collection for specific fabricator\r\n * @param feature {featureInterface}\r\n * @returns {boolean}\r\n */\r\nexport const allowCheckForCollection = (feature) => {\r\n if (!feature) {\r\n return true\r\n }\r\n // For shower fixture we have same customDisplayName, but different collection name (\"Euphoria\" and \"Shower Configuration\").\r\n // But they still should match\r\n // return feature.partId !== \"shower_fixture\"\r\n return true\r\n}\r\n\r\nconst unitsToCountQuantity = [\"unit\", \"units\", \"qty\", \"each\", \"Each\", \"no quantity\"];\r\n\r\n/**\r\n * returns current cart items length (with all quantites or only cart Items)\r\n * @param cartItems {[cartItemInterface]}\r\n * @param intl {object}\r\n * @param forceCheckAllQuantitties {boolean}\r\n * @returns {number}\r\n */\r\nexport const getCartItemsCount = (cartItems, intl = null, forceCheckAllQuantitties = IS_LIXIL_SERVERS) => {\r\n\r\n const fabricatorData = store.getState().fabricatorState;\r\n\r\n return cartItems.reduce((total, cartItem) => {\r\n const shouldBeCounted = !cartItem.relatedProductParent && !cartItem.isRemoved && cartItemInStock(cartItem);\r\n if (!shouldBeCounted || (IS_PRODUCT_JOURNEY && cartItem.addedBy !== CART_ITEM_ADDED_BY.user)) {\r\n return total\r\n }\r\n // || (featureIsBundle(cartItem.cartFeature, cartItems) && getBundledFeatures(cartItem.cartFeature).some(relFeature => relFeature.dbFeature.lixilAvailableQty > 0))\r\n if (forceCheckAllQuantitties) {\r\n return total + cartItem.quantity\r\n } else if (intl) {\r\n const featureUnit = getFeatureUnit(cartItem.cartFeature, intl, fabricatorData, cartItem.quantity);\r\n const cartItemUnit = getCartItemUnit(cartItem, intl);\r\n const unit = cartItemUnit || featureUnit || \"\";\r\n if (unit && unitsToCountQuantity.includes(unit.toLowerCase())) {\r\n return total + cartItem.quantity\r\n }\r\n }\r\n // Items in visualizer should equal total quantity of items minus out of stock (Shower bundle will count as 1 not 7)\r\n return total + 1 // simple return cart items count\r\n }, 0)\r\n}\r\n\r\n","import {\r\n getPriceWithCurrency,\r\n getQuotePriceWithDiscounts,\r\n getTotalPrice, sortByOrder,\r\n toFixedPrice\r\n} from \"../../misc/helpers\";\r\nimport {DISCOUNT_MAIN_TYPES, DISCOUNT_SECTION_TYPES, DISCOUNT_TYPES} from \"./discounstInterface\";\r\nimport {PMT} from \"../../misc/excelFunctions\";\r\nimport {getPercentage} from \"../../misc/misc2\";\r\n\r\nexport const getSubTotalPrice = (discountSections, discountSection, discount, withoutCurrent = false, customAddedDiscounts = []) => {\r\n const totalPrice = getTotalPrice(null, false);\r\n\r\n const allDiscounts = sortByOrder(getDiscountsForSection(discountSection, customAddedDiscounts));\r\n let ignoreDiscounts = allDiscounts.filter(currentDiscount => {\r\n if (!shouldCalculateDiscount(currentDiscount)) {\r\n return false\r\n }\r\n return withoutCurrent\r\n ? currentDiscount.order >= discount.order\r\n : currentDiscount.order > discount.order\r\n });\r\n discountSections.forEach(disSection => {\r\n if (disSection.order > discountSection.order) {\r\n ignoreDiscounts = [...ignoreDiscounts, ...disSection.discounts] // ignore other sections\r\n }\r\n });\r\n customAddedDiscounts.forEach(customDiscount => {\r\n const section = discountSections.find(sec => sec.id === customDiscount.categoryId);\r\n if (!section) {\r\n return\r\n }\r\n if (section.order > discountSection.order) {\r\n ignoreDiscounts = [...ignoreDiscounts, customDiscount] // ignore other custom discounts\r\n }\r\n });\r\n\r\n const grandTotal = getQuotePriceWithDiscounts(totalPrice, ignoreDiscounts);\r\n return toFixedPrice(grandTotal);\r\n};\r\n\r\nexport const getDiscountsForSection = (discountSection, customAddedDiscounts) => {\r\n const customDiscounts = customAddedDiscounts.filter(dis => {\r\n return dis.selected && (dis.categoryId === discountSection.id)\r\n })\r\n return [...discountSection.discounts, ...customDiscounts];\r\n}\r\n\r\nexport const calculateCellValue = ({discountSections, financePercentage, fabricatorSettings}, numberOfMonths = 0, finalPrice = 0) => {\r\n if (!numberOfMonths || !finalPrice) {\r\n return \"N/A\"\r\n }\r\n const fixedDeposit = getCustomDepositAmount(discountSections, finalPrice) || 0;\r\n const rate = financePercentage / 100 / 12; // Converts the annual interest rate into a monthly rate by dividing it by 12\r\n const nper = numberOfMonths; // The number of months in the repayment term\r\n const pv = -(finalPrice - fixedDeposit); // The present value (loan amount to be repaid). This is the negative of:\r\n // finalPrice - Today's final price of the good.\r\n // fixedDeposit - A $1000 deposit applied to the total loan amount.\r\n\r\n // const cellValue = pv * rate / (1 - Math.pow((1 + rate), -nper)); // this works fine, but the func below returns the same\r\n const cellValue = PMT(rate, nper, pv);\r\n\r\n return getPriceWithCurrency(fabricatorSettings, cellValue, null, false, true)\r\n}\r\n\r\nexport const getNextCustomDiscountOrder = (fromDiscount) => {\r\n return +(fromDiscount.order + 0.01).toFixed(2)\r\n}\r\n\r\nexport const getFilteredSections = (discountSections) => {\r\n return discountSections.filter(section => {\r\n return section.type !== DISCOUNT_SECTION_TYPES.finance\r\n })\r\n}\r\n\r\nexport const isSaveOnlyDiscount = (discount) => {\r\n return discount.discountType === DISCOUNT_MAIN_TYPES.finance || discount.discountType === DISCOUNT_MAIN_TYPES.deposit\r\n}\r\n\r\nexport const shouldDisplayDiscount = (discount) => {\r\n return discount.selected && !isSaveOnlyDiscount(discount)\r\n}\r\n\r\nexport const shouldCalculateDiscount = (discount) => {\r\n if (discount.isRidged) {\r\n const approveOptions = discount.approveOptions ? JSON.parse(discount.approveOptions) : null;\r\n if (approveOptions && approveOptions.options && approveOptions.options.length && !approveOptions.selectedOption) {\r\n return false\r\n }\r\n }\r\n return shouldDisplayDiscount(discount) && !discount.isSubTotal\r\n}\r\n\r\nexport const getDepositDiscount = (discountSections) => {\r\n let depositDiscount = null;\r\n discountSections.forEach(discountSection => {\r\n discountSection.discounts.forEach(discount => {\r\n if (discount.discountType === DISCOUNT_MAIN_TYPES.deposit) {\r\n depositDiscount = discount;\r\n }\r\n })\r\n });\r\n return depositDiscount\r\n}\r\n\r\n/**\r\n *\r\n * @param discountSections {array}\r\n * @param grandTotal {number}\r\n * @returns {string|number}\r\n */\r\nexport const getCustomDepositAmount = (discountSections, grandTotal = 0) => {\r\n const depositDiscount = getDepositDiscount(discountSections);\r\n if (!depositDiscount) {\r\n return null\r\n }\r\n if (depositDiscount.type === DISCOUNT_TYPES.price) {\r\n return depositDiscount.amount\r\n }\r\n const priceTaken = getPercentage(grandTotal, depositDiscount.amount) // for ex. 25% from 2700 = 625\r\n return toFixedPrice(Math.trunc(priceTaken * 100) / 100);\r\n}\r\n\r\nexport const getDepositAmount = (discountSections, grandTotal, fabricatorData) => {\r\n const customDeposit = getCustomDepositAmount(discountSections, grandTotal);\r\n if (customDeposit !== null) {\r\n return customDeposit\r\n }\r\n return fabricatorData.settings.deposit\r\n ? Math.floor((grandTotal * (fabricatorData.settings.deposit / 100)) * 100) / 100\r\n : 0\r\n}\r\n\r\nexport const getPriceWorkSheetSaveValues = (priceWorksheetState) => {\r\n const selectedDiscounts = [];\r\n priceWorksheetState.discountSections.forEach(disSection => {\r\n if (disSection.type === DISCOUNT_SECTION_TYPES.finance) {\r\n return\r\n }\r\n disSection.discounts.forEach(discount => {\r\n if (discount.selected) {\r\n selectedDiscounts.push(Object.assign({}, discount, {\r\n categoryId: disSection.id,\r\n }));\r\n }\r\n })\r\n })\r\n return {\r\n selectedDiscounts,\r\n financePercentage: priceWorksheetState.financePercentage,\r\n customAddedDiscounts: priceWorksheetState.customAddedDiscounts, // save as is for now\r\n }\r\n}\r\n","import {connect} from \"react-redux\";\r\nimport {withRouter} from \"react-router-dom\";\r\n\r\nimport {addToCart, clearCart, removeFromCart, restoreCart, updateCanvasCount} from \"../../../actions/actionFunctions\";\r\nimport {getCartItemObject} from \"../../../misc/helpers\";\r\nimport {\r\n createCartList,\r\n getMatchingColorFeature,\r\n navFeatureCLick\r\n} from \"../lookNavigation/lookFunctions\";\r\nimport {setLookRemovedCartItems} from \"../../../actions/shoppingCartFunctions\";\r\nimport {\r\n featureIsBundle,\r\n getCartItemsArrayFromFeature, getFeatureUrl,\r\n} from \"../lookNavigation/lookFunctions2\";\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\nimport {IS_PRODUCT_JOURNEY} from \"../../../config\";\r\nimport {CART_ITEM_ADDED_BY} from \"../../shoppingCart/cartItemInterface\";\r\n\r\nconst WithUpdateLookCartItem = (props) => {\r\n\r\n const {cartItems, removeFromCart, addToCart, qtActiveCategory, lookActiveFeature, history, children, updateCanvasCount,\r\n lookRemovedCartItems, setLookRemovedCartItems, filterGroups, groheActiveFeatureQuantity,\r\n clearCart, restoreCart, fabricatorSettings} = props;\r\n\r\n /**\r\n * Creates cart items list depending on quotingTool features\r\n * @param neededFeature {featureInterface} current active updated feature\r\n * @param withAddToCart {boolean} should we add it to the cart (for product journey) or just update\r\n */\r\n const updateLookCartItem = (neededFeature = lookActiveFeature, withAddToCart = false) => {\r\n // if (!checkIfFeatureCanBeAddedToTheCart(neededFeature)) {\r\n // return false\r\n // }\r\n\r\n return updateLookCartItemsNew(neededFeature, withAddToCart); // temp test, if everything is ok - remove redundant code below\r\n\r\n let itemsToAdd = [];\r\n // const urlPartId = neededFeature.partId.replace(/_/gi, \"-\");\r\n const layout = getCurrentLayout();\r\n const addedCartItems = cartItems.filter(cItem => {\r\n // if (featureGroup.layerPositions) {\r\n // return (cItem.partId === neededFeature.partId)\r\n // && (cItem.cartFeature.metaData.layerPosition === neededFeature.metaData.layerPosition)\r\n // }\r\n const parent = layout.getFeatureGroupByPartId(cItem.partId);\r\n if (!IS_PRODUCT_JOURNEY && parent && parent.disabled) { // remove these cartItems too\r\n return true\r\n }\r\n return cItem.partId === neededFeature.partId\r\n });\r\n if (addedCartItems.length && !IS_PRODUCT_JOURNEY) {\r\n addedCartItems.forEach(addedCartItem => {\r\n removeFromCart(addedCartItem);\r\n if (featureIsBundle(addedCartItem.cartFeature, cartItems)) {\r\n cartItems.forEach(cItem => {\r\n if (cItem.relatedProductParent && cItem.relatedProductParent.dbFeature.id === addedCartItem.cartFeature.dbFeature.id) {\r\n removeFromCart(cItem)\r\n }\r\n })\r\n }\r\n })\r\n }\r\n // let newQuantity = IS_PRODUCT_JOURNEY\r\n // ? groheActiveFeatureQuantity\r\n // : addedCartItems.length ? addedCartItems[0].quantity : 1;\r\n let newQuantity = groheActiveFeatureQuantity;\r\n if (neededFeature.metaData.layerPosition && !IS_PRODUCT_JOURNEY) {\r\n const featureGroup = neededFeature.getParent();\r\n Object.keys(featureGroup.layerPositions).forEach(position => {\r\n if (featureGroup.layerPositions[position]) {\r\n if (position !== neededFeature.metaData.layerPosition) {\r\n if (neededFeature.dbFeature.sharedFeatureName === featureGroup.layerPositions[position].dbFeature.sharedFeatureName) {\r\n if (newQuantity === 1) {\r\n newQuantity += 1\r\n }\r\n } else {\r\n // here we update cart with same partId, but different position (for now it should not be executed since we have all positions same)\r\n itemsToAdd.push(getCartItemObject(featureGroup.layerPositions[position], 1, qtActiveCategory));\r\n if (newQuantity > 1) {\r\n newQuantity--;\r\n }\r\n }\r\n }\r\n }\r\n });\r\n if (neededFeature.partId === \"vanity_faucet\") {\r\n const sinkParent = featureGroup.getParent().sink;\r\n const addedSinkItem = cartItems.find(cItem => {\r\n return cItem.partId === sinkParent.partId\r\n });\r\n if (addedSinkItem && addedSinkItem.cartFeature.dbFeature.sharedFeatureName && sinkParent.activeFeature && sinkParent.activeFeature.dbFeature.sharedFeatureName\r\n && (addedSinkItem.cartFeature.dbFeature.sharedFeatureName !== sinkParent.activeFeature.dbFeature.sharedFeatureName)) {\r\n // here we update cart with automatically changed feature (via the metadata)\r\n itemsToAdd.push(getCartItemObject(sinkParent.activeFeature, addedSinkItem.quantity, qtActiveCategory));\r\n removeFromCart(addedSinkItem);\r\n }\r\n }\r\n }\r\n itemsToAdd = [...itemsToAdd, ...getCartItemsArrayFromFeature(neededFeature, newQuantity, qtActiveCategory)]; // here we update cart with clicked feature\r\n\r\n if (!IS_PRODUCT_JOURNEY) {\r\n const featureGroups = getLookList(true);\r\n if (featureGroups && featureGroups.length) {\r\n let shouldBeAdded = [];\r\n featureGroups.forEach(parentObject => {\r\n if (parentObject.featureGroup.layerPositions) {\r\n Object.keys(parentObject.featureGroup.layerPositions).forEach(position => {\r\n if (parentObject.featureGroup.layerPositions[position]) {\r\n if (position !== neededFeature.metaData.layerPosition) {\r\n if (neededFeature.dbFeature.sharedFeatureName === parentObject.featureGroup.layerPositions[position].dbFeature.sharedFeatureName) {\r\n if (newQuantity === 1) {\r\n newQuantity += 1\r\n }\r\n } else {\r\n // here we update cart with same partId, but different position (for now it should not be executed since we have all positions same)\r\n itemsToAdd.push(getCartItemObject(parentObject.featureGroup.layerPositions[position], 1, qtActiveCategory));\r\n if (newQuantity > 1) {\r\n newQuantity--;\r\n }\r\n }\r\n }\r\n }\r\n });\r\n }\r\n })\r\n itemsToAdd = [...itemsToAdd, ...shouldBeAdded]; // here we update cart with enabled but not added features\r\n }\r\n }\r\n\r\n addToCart(itemsToAdd);\r\n\r\n updateRemovedCartItems(itemsToAdd);\r\n layout.updateLocalStorage();\r\n }\r\n\r\n const updateRemovedCartItems = (itemsToAdd) => {\r\n if (lookRemovedCartItems.length) {\r\n let newRemovedCartItems = [...lookRemovedCartItems];\r\n itemsToAdd.forEach(cartItem => {\r\n const existingIndex = newRemovedCartItems.findIndex(removedCartItem => {\r\n if (cartItem.cartFeature.metaData.layerPosition) {\r\n return (removedCartItem.partId === cartItem.partId)\r\n && (cartItem.cartFeature.metaData.layerPosition === removedCartItem.cartFeature.metaData.layerPosition)\r\n }\r\n return removedCartItem.partId === cartItem.partId || (\r\n removedCartItem.relatedProductParent && removedCartItem.relatedProductParent.partId === cartItem.partId\r\n )\r\n });\r\n if (existingIndex > -1) {\r\n newRemovedCartItems.splice(existingIndex, 1);\r\n }\r\n });\r\n if (newRemovedCartItems.length !== lookRemovedCartItems.length) {\r\n setLookRemovedCartItems(newRemovedCartItems);\r\n }\r\n }\r\n }\r\n\r\n const updateLookCartItemsNew = (neededFeature, withAddToCart) => {\r\n\r\n clearCart();\r\n let itemsToAdd = createCartList(qtActiveCategory, null);\r\n itemsToAdd.forEach(currentCartItem => {\r\n const oldExistingCartItem = cartItems.find(cItem => cItem.partId === currentCartItem.partId);\r\n if (oldExistingCartItem && !IS_PRODUCT_JOURNEY) {\r\n currentCartItem.addedBy = oldExistingCartItem.addedBy; // if it was changed by user - keep it\r\n if (oldExistingCartItem.quantity > currentCartItem.quantity) {\r\n if (currentCartItem.cartFeature.getParent) {\r\n const parent = currentCartItem.cartFeature.getParent();\r\n if (parent.layerPositions) {\r\n currentCartItem.quantity = Object.keys(parent.layerPositions).filter(positionKey => parent.layerPositions[positionKey]).length\r\n } else {\r\n currentCartItem.quantity = oldExistingCartItem.quantity;\r\n }\r\n } else {\r\n currentCartItem.quantity = oldExistingCartItem.quantity;\r\n }\r\n }\r\n }\r\n if (IS_PRODUCT_JOURNEY && neededFeature && !neededFeature.notAvailableInVisualizer) {\r\n if (currentCartItem.partId === neededFeature.partId\r\n || (currentCartItem.relatedProductParent\r\n && (currentCartItem.relatedProductParent.dbFeature.id === neededFeature.dbFeature.id))) {\r\n currentCartItem.quantity = groheActiveFeatureQuantity;\r\n if (withAddToCart) {\r\n currentCartItem.addedBy = CART_ITEM_ADDED_BY.user;\r\n }\r\n }\r\n }\r\n });\r\n if (neededFeature && neededFeature.notAvailableInVisualizer) {\r\n const newCartItem = getCartItemObject(neededFeature, groheActiveFeatureQuantity, qtActiveCategory);\r\n newCartItem.addedBy = withAddToCart ? CART_ITEM_ADDED_BY.user : CART_ITEM_ADDED_BY.auto;\r\n itemsToAdd.push(newCartItem);\r\n }\r\n if (IS_PRODUCT_JOURNEY && fabricatorSettings.checkout) {\r\n itemsToAdd = [...itemsToAdd, ...cartItems.filter(cItem => cItem.addedBy === CART_ITEM_ADDED_BY.user)]; // keep old added cartItems!\r\n }\r\n if (fabricatorSettings.checkout) {\r\n cartItems.forEach(cItem => {\r\n if (!cItem.keepOnLookUpdate) {\r\n return\r\n }\r\n if (!itemsToAdd.some(itemToAdd => itemToAdd.id === cItem.id)) {\r\n itemsToAdd.push(cItem) // keep old added cartItems! that was added from wizard list for example\r\n }\r\n })\r\n }\r\n restoreCart({cartItems: itemsToAdd});\r\n updateRemovedCartItems(itemsToAdd);\r\n const layout = getCurrentLayout();\r\n layout.updateLocalStorage();\r\n }\r\n\r\n /**\r\n * updates array of features\r\n * @param notMatchingFeatures {array}\r\n * @param fromFeature {featureInterface}\r\n * @param changeUrl {boolean}\r\n * @param directChange {boolean} // if only update\r\n */\r\n const updateAllLookCartItems = (notMatchingFeatures = [],\r\n fromFeature = lookActiveFeature,\r\n changeUrl = true,\r\n directChange = false) => {\r\n let needToBeUpdated = [fromFeature];\r\n if (notMatchingFeatures.length) {\r\n const currentFeatureName = fromFeature.getSplittedFeatureName();\r\n let toiletEnabled = false;\r\n notMatchingFeatures.forEach(notMatchingFeature => {\r\n if (notMatchingFeature.dbFeature.id !== fromFeature.dbFeature.id) {\r\n const sameFeatureAsActive = directChange ? {part: notMatchingFeature} : getMatchingColorFeature(fromFeature, notMatchingFeature, filterGroups)\r\n if (sameFeatureAsActive) {\r\n navFeatureCLick(sameFeatureAsActive.part, false);\r\n needToBeUpdated.push(sameFeatureAsActive.part);\r\n switch (sameFeatureAsActive.part.partId) {\r\n case \"toilet_brush\":\r\n case \"paper_holder\": {\r\n if (!toiletEnabled) {\r\n const layout = getCurrentLayout();\r\n const relatedFeatureGroup = layout.getFeatureGroupByPartId(\"toilet\");\r\n if (relatedFeatureGroup && relatedFeatureGroup.disabled && relatedFeatureGroup.activeFeature && !toiletEnabled) {\r\n navFeatureCLick(relatedFeatureGroup.activeFeature, false);\r\n needToBeUpdated.push(relatedFeatureGroup.activeFeature);\r\n }\r\n }\r\n break;\r\n }\r\n default:\r\n break;\r\n }\r\n } else {\r\n console.log(\"sameFeatureAsActive not found\", notMatchingFeature.partId, currentFeatureName);\r\n }\r\n }\r\n })\r\n }\r\n needToBeUpdated.forEach(featureToClick => {\r\n navFeatureCLick(featureToClick, false);\r\n });\r\n // console.log(\"needToBeUpdated\", needToBeUpdated);\r\n updateLookCartItem(fromFeature)\r\n updateCanvasCount();\r\n // if (IS_PRODUCT_JOURNEY) {\r\n // setLookActiveCategory(\"\");\r\n // }\r\n // if (changeUrl && IS_PRODUCT_JOURNEY) {\r\n if (changeUrl) {\r\n history.push(getFeatureUrl(fromFeature, true));\r\n }\r\n }\r\n\r\n return children(updateLookCartItem, updateAllLookCartItems)\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const {lookActiveFeature} = store.lookState;\r\n const {cartItems, lookRemovedCartItems} = store.cartState;\r\n const {qtActiveCategory} = store.qtState;\r\n const {filterGroups} = store.filterState;\r\n const {groheActiveFeatureQuantity} = store.groheState;\r\n const {settings} = store.fabricatorState;\r\n\r\n return {\r\n lookActiveFeature,\r\n cartItems,\r\n qtActiveCategory,\r\n lookRemovedCartItems,\r\n filterGroups,\r\n groheActiveFeatureQuantity,\r\n fabricatorSettings: settings,\r\n }\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n removeFromCart,\r\n addToCart,\r\n updateCanvasCount,\r\n setLookRemovedCartItems,\r\n clearCart,\r\n restoreCart\r\n};\r\n\r\nexport default withRouter(\r\n connect(mapStateToProps, mapDispatchToProps)(WithUpdateLookCartItem)\r\n)\r\n","import $ from 'jquery';\r\nimport Config, {\r\n getCommonVisualizerType,\r\n IS_LIXIL_SERVERS, IS_OFFLINE_MODE,\r\n USE_SERVER_CACHING\r\n} from \"../config\";\r\nimport {toBoolean} from \"../misc/utils\";\r\nimport {getCurrentLayout} from '../bvcomponents/appLayout';\r\nimport store from \"../store\";\r\nimport AxiosInstance from \"./axiosInstance\";\r\nimport {renderErrorPopup} from \"./api-popups\";\r\nimport {HOST_NAME} from \"./api\";\r\nimport {fixFeaturesResponse} from \"../misc/backendFunctions\";\r\n\r\n//Axios.defaults.headers.get['Content-Type'] = 'application/json';\r\n\r\nif (!String.prototype.endsWith) {\r\n Object.defineProperty(String.prototype, 'endsWith', {\r\n value: function(searchString, position) {\r\n var subjectString = this.toString();\r\n if (position === undefined || position > subjectString.length) {\r\n position = subjectString.length;\r\n }\r\n position -= searchString.length;\r\n var lastIndex = subjectString.indexOf(searchString, position);\r\n return lastIndex !== -1 && lastIndex === position;\r\n }\r\n });\r\n}\r\n\r\nconst serverConfig = document.kvConfig;\r\nconst __hideFeatures = toBoolean(serverConfig.hide) ? 1 : 0;\r\n\r\nfunction _get(url, axiosController) {\r\n return axiosController ? AxiosInstance.get(url, {\r\n signal: axiosController.signal\r\n }) : AxiosInstance.get(url)\r\n}\r\n\r\nfunction _post(url, data) {\r\n // console.log('_post', url, data);\r\n return AxiosInstance.post(url, data, {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n 'x-antiforgery-token': $('input[name=__RequestVerificationToken]').val()\r\n }\r\n });\r\n}\r\n\r\nlet __urlBase = null;\r\n\r\nfunction _getUrlBase() {\r\n if (__urlBase) return __urlBase;\r\n let {subDomain} = document.kvConfig;\r\n // let {domain} = document.kvConfig;\r\n // domain = domain || 'quotesflooring.com';\r\n subDomain = subDomain ? subDomain + '.' : '';\r\n __urlBase = subDomain + HOST_NAME;\r\n return __urlBase;\r\n}\r\n\r\nfunction _urlBase() {\r\n return serverConfig.type === 'Fabricator' ? _getUrlBase() + '/Job/QuickQuote/' + serverConfig.userId : '.';\r\n}\r\n\r\nconst addUrlMode = (baseUrl, visualizerType = \"\") => {\r\n const visType = getCommonVisualizerType(visualizerType);\r\n if (IS_LIXIL_SERVERS && (document.kvConfig.visualizerType === \"bvLook\")) { // temporarily, until the backend is fixed\r\n return baseUrl\r\n }\r\n return baseUrl + (baseUrl.includes(\"?\") ? \"&\" : \"?\") + `mode=${visType}`\r\n}\r\n\r\nconst hardcodeResponsesFolder = () => {\r\n if (document.kvConfig.visualizerType === \"bvLook\") {\r\n return \"node/responses/lixil\"\r\n }\r\n return \"node/responses\"\r\n}\r\n\r\nexport default class JsonApi {\r\n static allAvailableStones(jobId, type) {\r\n jobId = jobId || 0;\r\n type = type || 'Fabricator';\r\n return _get(`${_getUrlBase()}/api/Public/${serverConfig.userId}/AvailableStones?jobId=${jobId}&type=${type}&loadStoneFilters=true`);\r\n // return _get(`${_getUrlBase()}/Job/QuickQuote/${serverConfig.userId}/AvailableStones?jobId=${jobId}&type=${type}`);\r\n }\r\n\r\n static getNewQuoteData(jobId, type) {\r\n jobId = jobId || 0;\r\n type = type || 'Fabricator';\r\n // let url = `${_getUrlBase()}/Job/QuickQuote/${serverConfig.userId}/GetNewQuoteData?jobId=${jobId}&type=${type}&hide=${__hideFeatures}`;\r\n let url = `${_getUrlBase()}/api/Public/${serverConfig.userId}/GetNewQuoteData?jobId=${jobId}&type=${type}&hide=${__hideFeatures}`;\r\n if (Config.isMobile()) {\r\n url += '&w=150';\r\n }\r\n return _get(url);\r\n }\r\n\r\n static getMenuNavigation (forTool) {\r\n if (document.kvConfig.noInternetMode) {\r\n return Promise.resolve({data: []})\r\n }\r\n const url = forTool\r\n ? `${_getUrlBase()}/api/PublicFabricatorVisualizerNavigation/List?FabricatorId=${serverConfig.userId}&forTool=${forTool}`\r\n : `${_getUrlBase()}/api/PublicFabricatorVisualizerNavigation/List?FabricatorId=${serverConfig.userId}`\r\n return _get(url);\r\n }\r\n\r\n static userLogin(data) {\r\n if(document.kvConfig.kioskMode) {\r\n var response = this.saveUserKiosk(data);\r\n return Promise.resolve(response);\r\n } else {\r\n return _post(_getUrlBase() + \"/api/Public/LoginClient\", data);\r\n }\r\n // return _post(_urlBase() + \"/LoginClient\", {email: email, password: password});\r\n }\r\n\r\n static userRegister(data) {\r\n if(document.kvConfig.kioskMode) {\r\n var response = this.saveUserKiosk(data);\r\n return Promise.resolve(response);\r\n } else {\r\n return _post(`${_getUrlBase()}/api/Public/RegisterClient`, data);\r\n }\r\n // return _post(_urlBase() + \"/RegisterClient\", data);\r\n }\r\n\r\n static saveQuote(data) {\r\n if(document.kvConfig.kioskMode) {\r\n const state = store.getState();\r\n const {serverState, userState} = state;\r\n const userInfo = userState.userInfo;\r\n return this.saveQuoteKiosk(JSON.stringify({\r\n subDomain: document.kvConfig.subDomain,\r\n encodedUserId: userInfo.encodedUserId,\r\n quoteData: JSON.stringify(data),\r\n id: serverState.jobId\r\n }));\r\n } else {\r\n return _post(_getUrlBase() + \"/api/Public/SaveQuote\", data);\r\n }\r\n // return _post(_urlBase() + \"/SaveMultiQuickQuote\", data);\r\n }\r\n\r\n static submitPayment(data) {\r\n return _post(_getUrlBase() + \"/api/Public/SubmitPayment\", data);\r\n }\r\n\r\n // email must be post-fixed by the /, see here\r\n // https://stackoverflow.com/questions/13298542/apicontroller-returns-404-when-id-contains-period\r\n // the accepted answer\r\n static resetUserPassword(email, language) {\r\n return _post(_getUrlBase() + '/api/Public/SendResetPassword', {\r\n email,\r\n language,\r\n fabricatorId: document.kvConfig.userId,\r\n });\r\n }\r\n\r\n static scheduleCustomer(data) {\r\n if(document.kvConfig.kioskMode) {\r\n return this.saveSchedule(JSON.stringify({\r\n subDomain: document.kvConfig.subDomain,\r\n json: JSON.stringify(data)\r\n }));\r\n } else {\r\n return _post(_getUrlBase() + \"/api/Public/Schedule\", data);\r\n }\r\n }\r\n\r\n static getJobData(jobId) {\r\n return _get(_urlBase() + \"/GetJobDataById?jobId=\" + jobId);\r\n }\r\n\r\n static getBVJobData(jobId, editToken) {\r\n return _get(_getUrlBase() + '/api/Public/getBvJobData/' + jobId + (editToken ? \"?editToken=\" + editToken : \"\"))\r\n }\r\n\r\n static getEmployees() {\r\n if(document.kvConfig.kioskMode) {\r\n return Promise.resolve(this.getKioskApiResponse(document.kvConfig.userId, `/api/Public/getEmployees/${+document.kvConfig.userId}`));\r\n } else {\r\n return _get(`${_getUrlBase()}/api/Public/getEmployees/${+document.kvConfig.userId}`);\r\n }\r\n }\r\n\r\n static generateAuthenticationToken() {\r\n const userState = store.getState().userState;\r\n const {userInfo} = userState;\r\n if (userInfo && userInfo.phoneNumber && userInfo.phoneNumber.indexOf(\"555-555-5555\") === -1) {\r\n return _get(_getUrlBase() + \"/api/TwoFactorAuthentication/GenerateAuthenticationRequest?encodedCustomerId=\" + encodeURIComponent(userState.encodedUserId));\r\n } else if(userInfo && userInfo.phoneNumber && userInfo.phoneNumber.indexOf('555-555-5555') !== -1) {\r\n return Promise.resolve(\"93eacff8-d2cf-488b-b10d-12c81dd806e2\");\r\n } else {\r\n return Promise.reject();\r\n }\r\n }\r\n\r\n static sendAuthenticationRequest(token, to, type) {\r\n if(token !== \"93eacff8-d2cf-488b-b10d-12c81dd806e2\")\r\n return _post(_getUrlBase() + \"/api/TwoFactorAuthentication/SendAuthenticationRequest\", {token, to, type});\r\n else\r\n return Promise.resolve(true);\r\n }\r\n\r\n static validateAuthenticationRequest(token, code, phoneNumber) {\r\n const userState = store.getState().userState;\r\n if(token === \"93eacff8-d2cf-488b-b10d-12c81dd806e2\") {\r\n return Promise.resolve({data: code === \"568127\"});\r\n } else {\r\n return _post(_getUrlBase() + \"/api/TwoFactorAuthentication/ValidateAuthenticationRequest\", {token, code, phoneNumber, encodedCustomerId: userState.encodedUserId});\r\n }\r\n }\r\n\r\n static postDisplayRoom(bvState) {\r\n return _post(`${_getUrlBase()}/api/public/saveDefaults/${+document.kvConfig.userId}/client/bathroomvisualizer`, [bvState]);\r\n }\r\n\r\n static getDisplayRoom() {\r\n return _get(`${_getUrlBase()}/api/public/getDefaults/${+document.kvConfig.userId}/client/bathroomvisualizer`);\r\n }\r\n\r\n static resendActivationEmail(email) {\r\n return _post(`${_getUrlBase()}/api/public/resendActivationEmail`,\r\n {email, fabricatorId: +document.kvConfig.userId});\r\n }\r\n\r\n static async getBathroomVisualizerData(featuresCount, forVisualizerType) {\r\n const visualizerType = forVisualizerType || document.kvConfig.visualizerType;\r\n if (document.kvConfig.noInternetMode) {\r\n const featuresResponse = await _get(hardcodeResponsesFolder() + \"/mainVisualizerResponseFeatures.json\");\r\n let allResponse = await _get(hardcodeResponsesFolder() + \"/mainVisualizerResponse.json\");\r\n allResponse.data.features = featuresResponse.data;\r\n return allResponse\r\n }\r\n let localUrl = addUrlMode(`/api/public/bvdata/${+document.kvConfig.userId}`, visualizerType);\r\n let remoteUrl = visualizerType === \"bvLook\"\r\n ? addUrlMode(`/api/public/bvdata/${+document.kvConfig.userId}${(featuresCount ? \"?featuresPerGroup=\"+featuresCount : \"\")}`, visualizerType)\r\n : addUrlMode(`/api/public/bvdata/${+document.kvConfig.userId}${(featuresCount ? \"/\"+featuresCount : \"\")}`, visualizerType)\r\n return document.kvConfig.kioskMode\r\n ? this.getKioskApiResponse(document.kvConfig.userId, localUrl)\r\n : _get(`${_getUrlBase()}${remoteUrl}`);\r\n }\r\n\r\n static getBathroomVisualizerFeatures(arrayOfIds, arrayOfSkus, requestSharedFeatureNames = false, visualizerType) {\r\n if (document.kvConfig.noInternetMode || IS_OFFLINE_MODE) { // no need to receive features, we already received 50k, all of them\r\n return Promise.resolve({data: []})\r\n }\r\n const baseUrl = addUrlMode(`${_getUrlBase()}/api/public/bvdata/${+document.kvConfig.userId}/features`, visualizerType);\r\n return _post(baseUrl, arrayOfSkus\r\n ? requestSharedFeatureNames ? {sharedFeatureNames: arrayOfSkus} : {skus: arrayOfSkus}\r\n : {Ids: arrayOfIds});\r\n }\r\n\r\n static getBathroomVisualizerGroups(visualizerType) {\r\n if (document.kvConfig.noInternetMode) {\r\n return _get(hardcodeResponsesFolder() + \"/featureGroupsCounts.json\")\r\n }\r\n const localUrl = addUrlMode(`/api/public/bvdata/${+document.kvConfig.userId}/groups`, visualizerType);\r\n return document.kvConfig.kioskMode\r\n ? this.getKioskApiResponse(document.kvConfig.userId, localUrl)\r\n : _get(`${_getUrlBase()}${localUrl}`);\r\n }\r\n\r\n static fixGroupName(groupName) {\r\n return groupName.trim().replace(/\\//g,\"%23%23\").replace(/ /g,\"%20\").replace(/&/g,\"%26\");\r\n }\r\n\r\n static async getBathroomVisualizerGroupFeatures(groupName,\r\n page = 0,\r\n pageSize = 1000,\r\n filterValues = [],\r\n searchText = \"\",\r\n layoutAbbreviation = \"\",\r\n axiosController,\r\n requestOldFeatures = false,\r\n visualizerType = document.kvConfig.visualizerType) {\r\n if (IS_OFFLINE_MODE) {\r\n return Promise.resolve({data: []})\r\n }\r\n pageSize = (groupName === \"EX L\") ? 1500 : pageSize;\r\n const fixedGroupName = JsonApi.fixGroupName(groupName);\r\n const layout = getCurrentLayout();\r\n\r\n let localUrl = layout.isNewLayout && (visualizerType === \"kvScene\" && !IS_LIXIL_SERVERS)\r\n ? `/api/public/bvdataR/${+document.kvConfig.userId}/features/${fixedGroupName}`\r\n : `/api/public/bvdata/${+document.kvConfig.userId}/features/${fixedGroupName}`;\r\n\r\n let requestUrl = `${_getUrlBase()}${localUrl}/${page}/${pageSize}/`;\r\n\r\n const searchGroupName = layout.isNewLayout && groupName.includes(\" Crop\") ? groupName.replace(\" Crop\", \"\") : groupName;\r\n const featureGroup = layout.getFeatureGroupByGroupName(searchGroupName);\r\n\r\n if (USE_SERVER_CACHING && (visualizerType === \"KV\" || visualizerType === \"Kitchen\")\r\n || (!requestOldFeatures && featureGroup && featureGroup.nextFeaturesPageToLoadArray)) {\r\n let layoutName = layoutAbbreviation || `${layout.getCurrentLayoutAbbreviation()}/`;\r\n if (layout.isNewLayout) {\r\n layoutName = layoutName.replace(\"Layout\", \"\");\r\n }\r\n requestUrl += layoutName; // should go before filters\r\n }\r\n\r\n requestUrl = addUrlMode(requestUrl, visualizerType);\r\n\r\n if (filterValues.length) {\r\n filterValues.forEach((filterValue) => {\r\n requestUrl += (requestUrl.includes(\"?\") ? \"&\" : \"?\") + \"filterId=\" + filterValue;\r\n });\r\n }\r\n if (searchText) {\r\n requestUrl += (requestUrl.includes(\"?\") ? \"&\" : \"?\") + \"filter=\" + searchText\r\n }\r\n\r\n const fabricatorSettings = store.getState().fabricatorState.settings;\r\n if (fabricatorSettings.leadCapture) {\r\n requestUrl += (requestUrl.includes(\"?\") ? \"&\" : \"?\") + \"sortBy=unlocked\";\r\n }\r\n if (requestOldFeatures) {\r\n const oldVersion = getCommonVisualizerType(visualizerType) === \"kitchen\" ? \"kv4\" : \"bv4\";\r\n requestUrl += (requestUrl.includes(\"?\") ? \"&\" : \"?\") + \"toolVersion=\" + oldVersion; // should go before filters\r\n }\r\n\r\n const response = document.kvConfig.kioskMode\r\n ? await this.getKioskApiResponse(document.kvConfig.userId, localUrl, {filterValues, searchText, page, pageSize, type: \"features\" })\r\n : await _get(requestUrl, axiosController)\r\n if (Config.isDevMode()) {\r\n console.log(requestUrl + \" response\", response);\r\n }\r\n if (!response || !response.data || response.data.error) {\r\n renderErrorPopup(response.data.error);\r\n return []\r\n }\r\n return fixFeaturesResponse(response.data)\r\n }\r\n\r\n static getBathroomVisualizerGroupFilterValues(groupName = \"\", filterId = null, withStoneFilters = true) {\r\n if (document.kvConfig.noInternetMode) { // no need to receive features, we already received 50k, all of them\r\n return Promise.resolve({data: []})\r\n }\r\n const fixedGroupName = JsonApi.fixGroupName(groupName);\r\n var localUrl = `/api/public/bvdata/${+document.kvConfig.userId}/filters/${fixedGroupName}/`;\r\n var featureLocal = `/api/public/bvdata/${+document.kvConfig.userId}/features/${fixedGroupName}`;\r\n // const layout = getCurrentLayout();\r\n if (USE_SERVER_CACHING) {\r\n localUrl += `ALL/`;\r\n }\r\n localUrl = addUrlMode(localUrl);\r\n featureLocal = addUrlMode(featureLocal);\r\n let requestUrl = `${_getUrlBase()}${localUrl}`;\r\n if (filterId) {\r\n requestUrl = requestUrl + filterId\r\n }\r\n if (!withStoneFilters) {\r\n requestUrl = requestUrl + (requestUrl.includes(\"?\") ? \"&\" : \"?\") + \"stoneFilters=false\";\r\n }\r\n\r\n if(document.kvConfig.kioskMode) {\r\n return this.getKioskApiResponse(document.kvConfig.userId, localUrl, {type: 'filters', filterId, featureLocal});\r\n } else {\r\n return _get(requestUrl);\r\n }\r\n }\r\n\r\n static getQtCategories(layoutName, forVisualizerType) {\r\n if (document.kvConfig.noInternetMode) {\r\n return _get(hardcodeResponsesFolder() + \"/featureGroupCategories.json\")\r\n }\r\n const featuresPerGroupAmount = window.location.href.includes(\"cutting_edge_countertops\")\r\n || (document.kvConfig.userId === 138452) ? 200 : 50;\r\n const visualizerType = getCommonVisualizerType(forVisualizerType);\r\n // return _get(`${_getUrlBase()}/api/public/featureGroupCategories/${+document.kvConfig.userId}/${visualizerType}/?featuresPerGroup=${featuresPerGroupAmount}&mode=${visualizerType}&layout=${layoutName}`);\r\n\r\n const layout = getCurrentLayout(forVisualizerType);\r\n const localUrl = layout.isNewLayout\r\n ? `/api/public/featureGroupCategoriesLite/${+document.kvConfig.userId}/${visualizerType}/`\r\n : `/api/public/featureGroupCategories/${+document.kvConfig.userId}/${visualizerType}/?featuresPerGroup=${featuresPerGroupAmount}&mode=${visualizerType}&layout=${layoutName}`;\r\n return document.kvConfig.kioskMode\r\n ? this.getKioskApiResponse(document.kvConfig.userId, localUrl)\r\n : _get(`${_getUrlBase()}${localUrl}`);\r\n }\r\n\r\n static saveQuoteFast(data) {\r\n if(document.kvConfig.kioskMode) {\r\n return Promise.resolve(this.getKioskData(\"quickSave\", JSON.stringify({\r\n id: data.jobId,\r\n saveData: data.data\r\n })));\r\n }\r\n else {\r\n return _post(`${_getUrlBase()}/api/public/SaveQuoteFast`, data);\r\n }\r\n }\r\n\r\n static contractSign(data) {\r\n return _post(`${_getUrlBase()}/api/public/replace-and-sign`, data);\r\n }\r\n\r\n static getDocumentForJob(jobId, forceNew = false) {\r\n return _post(`${_getUrlBase()}/api/public/document-for-job/${jobId}/${forceNew}`, {});\r\n }\r\n\r\n static getContractDocuments(fabricatorId = document.kvConfig.userId) {\r\n return _get(`${_getUrlBase()}/api/document-signing/documents/${fabricatorId}`);\r\n }\r\n\r\n static getDocumentForFabricator(fabricatorId = document.kvConfig.userId) {\r\n if (document.kvConfig.noInternetMode) {\r\n return _get(hardcodeResponsesFolder() + \"/documentsForFabricator.json\")\r\n }\r\n return _post(`${_getUrlBase()}/api/public/document-for-fab/${fabricatorId}/`);\r\n }\r\n\r\n static getFabricatorSubscriptions(fabricatorId) {\r\n if (document.kvConfig.noInternetMode) {\r\n return _get(hardcodeResponsesFolder() + \"/fabricatorSubscriptions.json\")\r\n }\r\n const localUrl = `/api/public/GetFabricatorSubscriptionInfo/${fabricatorId}`;\r\n return document.kvConfig.kioskMode\r\n ? this.getKioskApiResponse(fabricatorId, localUrl)\r\n : _get(`${_getUrlBase()}${localUrl}`);\r\n }\r\n\r\n static getFabricatorDiscounts(fabricatorId) {\r\n if (document.kvConfig.noInternetMode) {\r\n return _get(hardcodeResponsesFolder() + \"/fabricatorDiscounts.json\")\r\n }\r\n return _get(`${_getUrlBase()}/api/public/fabricator-discounts/${fabricatorId}`);\r\n }\r\n\r\n static async getKioskApiResponse(fabricatorId, localUrl, otherData = null) {\r\n let data = {\r\n fabricatorId,\r\n localUrl,\r\n additionalInfo: {...otherData}\r\n };\r\n return this.getKioskData(\"getJson\", data);\r\n }\r\n\r\n static async getKioskData(type, data) {\r\n var kioskData = await this.getRawKioskData(type, data);\r\n if(typeof(kioskData) == \"string\") {\r\n kioskData = JSON.parse(kioskData);\r\n }\r\n return {data: kioskData};\r\n }\r\n\r\n static getRawKioskData(type, data) {\r\n var kioskData = KioskApp.PostMessage({\r\n type,\r\n data\r\n });\r\n return kioskData;\r\n }\r\n\r\n static saveQuoteKiosk(data) { return this.getKioskData('saveQuote', data); }\r\n static saveUserKiosk(data) { return this.getKioskData('saveUser', data); }\r\n static saveSchedule(data) { return this.getKioskData('schedule', data); }\r\n\r\n static getCustomersAndEmployees(fabricatorId = document.kvConfig.userId) {\r\n if (document.kvConfig.noInternetMode) {\r\n return _get(hardcodeResponsesFolder() + \"/customersAndEmployees.json\")\r\n }\r\n return _get(`${_getUrlBase()}/api/public/fabricator-customer-employees/${fabricatorId}/`);\r\n }\r\n\r\n static getCustomerById(customerId) {\r\n return _get(`${_getUrlBase()}/api/public/getCustomerData/${customerId}?format=json`);\r\n }\r\n static copySqftImages(fabricatorId, postData) {\r\n return _post(`${_getUrlBase()}/api/public/copySqftImages/${fabricatorId}/`, postData);\r\n }\r\n static getPassedUserInfo(userData) {\r\n return _post(`${_getUrlBase()}/api/public/EncSSOLoginClient/`, userData);\r\n }\r\n static postSaveVisualizerImage(fabricatorId, postData) {\r\n return _post(`${_getUrlBase()}/api/public/saveVisualizerImage/${fabricatorId}`, postData);\r\n }\r\n static postSaveTempData(postData, id = \"\", expiresIn = \"\") {\r\n let postString = `${_getUrlBase()}/api/public/saveTempData`;\r\n if (id) {\r\n postString+= `/${id}`;\r\n }\r\n if (expiresIn) {\r\n postString+= `/${expiresIn}`;\r\n }\r\n return _post(postString, {\"data\": postData});\r\n }\r\n static getSaveTempData(id = \"\") {\r\n return _get(`${_getUrlBase()}/api/public/getTempData/${id}`);\r\n }\r\n static postSureTax(postData, fabricatorId = document.kvConfig.userId) {\r\n return _post(`${_getUrlBase()}/api/public/postSureTaxRequest/${fabricatorId}`, postData);\r\n }\r\n static postVerifyAddress(postData) {\r\n return _post(`${_getUrlBase()}/api/public/verifyAddress`, postData);\r\n }\r\n static getTrumbleShippingOptions(skuList, zipCode) {\r\n return _get(`${_getUrlBase()}/api/public/getTrumbleShippingOptions/${skuList}/${zipCode}`);\r\n }\r\n static postTrumbleShippingOptions(postData, zipCode) {\r\n return _post(`${_getUrlBase()}/api/public/trumbleShippingOptions/${zipCode}`, postData);\r\n }\r\n static postTrumbleInventory(postData) {\r\n return _post(`${_getUrlBase()}/api/public/trumbullInventory`, postData);\r\n }\r\n static postShipperHqShipping(postData) {\r\n return _post(`${_getUrlBase()}/api/public/shipperHqShipping`, postData);\r\n }\r\n static getFilterGroups(fabricatorId = document.kvConfig.userId) {\r\n return _get(`${_getUrlBase()}/api/public/filterGroups/${fabricatorId}`);\r\n }\r\n static getMarkUpForFeatures(featuresArray) {\r\n return _post(`${_getUrlBase()}/api/markup/get-features/`, featuresArray);\r\n }\r\n}\r\n","import {useHistory, useRouteMatch} from \"react-router-dom\";\r\nimport {hashHistory} from \"react-router\"; // omg pls don't kill me for that\r\n\r\nimport {setWizardActiveItem, setWizardActiveStep, setWizardSelectedValues} from \"../../../actions/wizardFunctions\";\r\nimport store from \"../../../store\";\r\nimport {\r\n getAvailableSteps,\r\n getCurrentGroups,\r\n getDefaultMaterialsWizardItem, getFeatureGroupFromWizardGroup, getWizardGroupFromCurrentSteps, navItemIsExcluded\r\n} from \"../../look/lookNavigation/lookMain/lookWizard/lookWizardFunctions\";\r\nimport Misc from \"../../../misc/misc\";\r\nimport {ROUTES} from \"../../../routes\";\r\nimport {IS_LIXIL_UI} from \"../../../config\";\r\nimport {\r\n getNextWizardSteps,\r\n isSameVisualizerWizard, selectedWizardGroupIsNotInCurrentStepAnymore\r\n} from \"../../look/lookNavigation/lookMain/lookWizard/lookWizardFunctions2\";\r\nimport {showWizardStepDoneCheckMark} from \"./materialsWizardDoneCheckMark\";\r\n\r\nexport const getNextNotCheckedStep = () => {\r\n\r\n const {wizardState, cartState, quotesState} = store.getState();\r\n const {wizardActiveItem, wizardActiveStep, wizardSelectedValues, wizardAllowSkipDoneSteps} = wizardState;\r\n const {cartItems} = cartState;\r\n const {activeQuoteIndex} = quotesState;\r\n\r\n let nextStep = wizardActiveStep + 1;\r\n\r\n if (!wizardAllowSkipDoneSteps) {\r\n return nextStep // use new logic with skip only first time\r\n }\r\n\r\n // if (!wizardSelectedValues[nextStep]) { // if the next step is free - just go next, otherwise - let's find where to jump\r\n // changeWizardStepRoute(nextStep);\r\n // return\r\n // }\r\n const wizardSteps = getNextWizardSteps(wizardActiveItem, wizardActiveStep, wizardSelectedValues);\r\n while (nextStep <= wizardSteps.length - 1) {\r\n if (!wizardSteps[nextStep]) {\r\n break;\r\n }\r\n const wizardGroup = wizardSteps[nextStep].stepGroups[0];\r\n const featureGroup = getFeatureGroupFromWizardGroup(wizardGroup);\r\n const showDoneCheckMark = showWizardStepDoneCheckMark(wizardSelectedValues[nextStep], featureGroup, cartItems, activeQuoteIndex, wizardSteps[nextStep].stepGroups);\r\n // console.log(\"showDoneCheckMark\", wizardGroup, featureGroup, showDoneCheckMark);\r\n if (!showDoneCheckMark) {\r\n break;\r\n }\r\n // console.log(\"activePartRelatedItemIndex skipped\", activePartRelatedItemIndex);\r\n nextStep = nextStep + 1;\r\n }\r\n return nextStep\r\n}\r\n\r\nconst getSkippedWizardValues = (nextStep, wizardActiveStep, wizardItem, wizardSelectedValues) => {\r\n if (nextStep > wizardActiveStep) {\r\n\r\n const wizardSteps = getAvailableSteps(wizardItem, wizardSelectedValues, true);\r\n wizardSteps.forEach((step, stepIndex) => {\r\n if ((stepIndex < nextStep) && (!wizardSelectedValues[stepIndex]\r\n || selectedWizardGroupIsNotInCurrentStepAnymore(wizardSelectedValues[stepIndex], step.stepGroups))) {\r\n const wizardGroup = step.stepGroups[0];\r\n if (wizardGroup) {\r\n const skippedValue = {\r\n [stepIndex]: {\r\n wizardGroup,\r\n }\r\n }\r\n store.dispatch(setWizardSelectedValues(skippedValue));\r\n wizardSelectedValues = Object.assign(wizardSelectedValues, skippedValue); // this is needed for code below\r\n }\r\n }\r\n });\r\n }\r\n return wizardSelectedValues\r\n}\r\n\r\n/**\r\n * is used for SQFT to prevent bug when advanced quoting is missing selected value\r\n * @param cartItems {[cartItemInterface]}\r\n */\r\nexport const setWizardValuesFromCartItems = (cartItems) => {\r\n const {wizardSelectedValues, wizardActiveItem} = store.getState().wizardState;\r\n if (!wizardActiveItem || !cartItems.length) {\r\n return\r\n }\r\n let shouldUpdate = false;\r\n let wizardValues = Object.assign({}, wizardSelectedValues);\r\n const wizardSteps = getAvailableSteps(wizardActiveItem, wizardSelectedValues, true);\r\n // console.log(\"wizardSteps\", wizardSteps);\r\n // console.log(\"cartItems\", cartItems);\r\n // console.log(\"wizardValues\", wizardValues);\r\n cartItems.forEach((cartItem) => {\r\n if (!cartItem.fromWizardGroupId\r\n || !Number.isInteger(cartItem.fromWizardStep)\r\n || !cartItem.fromWizardId || (cartItem.fromWizardId !== wizardActiveItem.id)\r\n || wizardValues[cartItem.fromWizardStep]) {\r\n return\r\n }\r\n if (wizardSteps[cartItem.fromWizardStep] && wizardSteps[cartItem.fromWizardStep].stepGroups) {\r\n const wizardGroup = wizardSteps[cartItem.fromWizardStep].stepGroups.find(wG => wG.id === cartItem.fromWizardGroupId)\r\n // yes, we added a cart item from the wizard step, we should select it\r\n if (wizardGroup) {\r\n wizardValues[cartItem.fromWizardStep] = {\r\n wizardGroup,\r\n }\r\n if (!navItemIsExcluded({part: cartItem.cartFeature}, wizardGroup)) {\r\n wizardValues[cartItem.fromWizardStep].selectedFeature = cartItem.cartFeature;\r\n wizardValues[cartItem.fromWizardStep].partId = cartItem.partId;\r\n }\r\n shouldUpdate = true;\r\n }\r\n }\r\n });\r\n wizardSteps.forEach(wizardStep => { // here we are checking steps that should be skipped!\r\n // because they are already selected in another similar wizard group\r\n if (!wizardValues[wizardStep.stepIndex]\r\n && wizardStep.stepGroups.length === 1\r\n && wizardStep.stepGroups[0].hidePriceNoCart) {\r\n const similarSelectedWizardStep = Object.keys(wizardValues).find(key => {\r\n return wizardValues[key].wizardGroup\r\n && (wizardValues[key].wizardGroup.groupName === wizardStep.stepGroups[0].groupName)\r\n && (cartItems.some(cartItem => {\r\n return cartItem.fromWizardGroupId === wizardValues[key].wizardGroup.id\r\n && (wizardValues[key].selectedFeature === cartItem.cartFeature) // make 100% sure!\r\n }))\r\n });\r\n if (similarSelectedWizardStep) {\r\n wizardValues[wizardStep.stepIndex] = { // make it selected too\r\n wizardGroup: wizardStep.stepGroups[0], // with it's own wizard group\r\n partId: wizardValues[similarSelectedWizardStep].partId, // but with same values\r\n selectedFeature: wizardValues[similarSelectedWizardStep].selectedFeature, // but with same values\r\n }\r\n if (!shouldUpdate) {\r\n shouldUpdate = true;\r\n }\r\n }\r\n }\r\n })\r\n if (shouldUpdate) {\r\n // console.log(\"shouldUpdate\", wizardValues);\r\n store.dispatch(setWizardSelectedValues(wizardValues, true, wizardActiveItem));\r\n }\r\n}\r\n\r\nexport const switchToWizardItem = (wizardItem, nextStep, quoteIndex, wizardGroupId = null, changeRoute = true) => {\r\n const {quotesState, wizardState} = store.getState();\r\n const {allWizardsValues, wizardActiveStep} = wizardState;\r\n\r\n if (!wizardItem) {\r\n wizardItem = getDefaultMaterialsWizardItem();\r\n }\r\n\r\n let wizardValues = {};\r\n const foundWizardSelectedObject = allWizardsValues.find(wizSelObject => {\r\n return (wizSelObject.quoteIndex === quotesState.activeQuoteIndex) && (wizSelObject.wizardItemId === wizardItem.id)\r\n && isSameVisualizerWizard(wizSelObject)\r\n });\r\n if (foundWizardSelectedObject) {\r\n wizardValues = Object.assign({}, foundWizardSelectedObject.wizardSelectedValues);\r\n wizardValues = getSkippedWizardValues(nextStep, wizardActiveStep, wizardItem, wizardValues);\r\n }\r\n store.dispatch(setWizardActiveItem(wizardItem, quoteIndex));\r\n store.dispatch(setWizardSelectedValues(wizardValues, true, wizardItem));\r\n if (Number.isInteger(nextStep)) {\r\n if (wizardGroupId) {\r\n const {neededStep} = getWizardGroupFromCurrentSteps(wizardItem, wizardValues, wizardGroupId);\r\n if (neededStep && (neededStep.stepIndex !== nextStep)) {\r\n nextStep = neededStep.stepIndex\r\n }\r\n }\r\n store.dispatch(setWizardActiveStep(nextStep));\r\n } else {\r\n nextStep = foundWizardSelectedObject && Number.isInteger(foundWizardSelectedObject.lastVisitedStep)\r\n ? foundWizardSelectedObject.lastVisitedStep // restore last step\r\n : wizardValues ? Object.keys(wizardValues).length : 0 // restore last step (just in case lastVisitedStep is missing)\r\n if (nextStep === 0 && wizardActiveStep !== 0) {\r\n store.dispatch(setWizardActiveStep(0)); // cases when someone changes the wizard\r\n }\r\n }\r\n if (!changeRoute) {\r\n return\r\n }\r\n const urlStepNumber = nextStep + 1; // because we don't want to have 0 in the URL\r\n const nextUrl = \"/materials/\" + Misc.getUrlFromString(wizardItem.name) + \"/\" + urlStepNumber;\r\n const currentHash = window.location.hash.split(\"#\")[1];\r\n if (!currentHash || (currentHash !== nextUrl)) {\r\n hashHistory.push(nextUrl);\r\n }\r\n}\r\n\r\nexport const useChangeWizardStepRoute = () => {\r\n\r\n let history = useHistory();\r\n let routeMatch = useRouteMatch();\r\n // {\r\n // isExact: true,\r\n // params: {partName: 'kitchen-cabinets', subPartName: '1'},\r\n // path: \"/materials/:partName/:subPartName\",\r\n // url: \"/materials/kitchen-cabinets/3/upper-cabinet-boxes\"\r\n // }\r\n // let {partName, subPartName} = routeMatch.params;\r\n let {partName} = routeMatch.params;\r\n\r\n const changeWizardStepRoute = (nextStep, propsWizardItem) => {\r\n\r\n const {wizardActiveItem, wizardActiveStep, wizardList} = store.getState().wizardState;\r\n let {wizardSelectedValues} = store.getState().wizardState;\r\n\r\n const currentWizardItem = propsWizardItem || wizardActiveItem;\r\n\r\n wizardSelectedValues = getSkippedWizardValues(nextStep, wizardActiveStep, currentWizardItem, wizardSelectedValues);\r\n\r\n const currentGroups = getCurrentGroups(currentWizardItem, nextStep, wizardSelectedValues);\r\n\r\n if (wizardActiveStep > -1 && !currentGroups.length) { // wizard finished! congratulations\r\n const currentWizardIndex = wizardList.findIndex(wizardItem => wizardItem.id === currentWizardItem.id);\r\n\r\n if (nextStep === -1 && wizardActiveStep === 0) { // go to the previous wizard\r\n const prevEnabledWizard = wizardList.find((wizardItem, wizardItemIndex) => {\r\n return (wizardItem.id !== currentWizardItem.id) && (wizardItemIndex < currentWizardIndex)\r\n });\r\n if (prevEnabledWizard) {\r\n switchToWizardItem(prevEnabledWizard);\r\n } else {\r\n history.push(ROUTES.quoteDesign);\r\n }\r\n return;\r\n }\r\n\r\n const nextEnabledWizard = wizardList.find((wizardItem, wizardItemIndex) => {\r\n return (wizardItem.id !== currentWizardItem.id) && (wizardItemIndex > currentWizardIndex)\r\n });\r\n if (nextEnabledWizard) {\r\n switchToWizardItem(nextEnabledWizard);\r\n } else {\r\n history.push(ROUTES.shoppingcart);\r\n }\r\n return;\r\n }\r\n\r\n // console.log(\"nextStep\", nextStep);\r\n store.dispatch(setWizardActiveStep(nextStep));\r\n\r\n if (IS_LIXIL_UI) {\r\n return; // no need to change url\r\n }\r\n\r\n // console.log(\"subPartName\", subPartName);\r\n // console.log(\"partName\", partName);\r\n // console.log(\"history\", history);\r\n\r\n if (!partName) {\r\n partName = Misc.getUrlFromString(currentWizardItem.name)\r\n }\r\n\r\n const wizardGroup = currentGroups[0];\r\n if (!wizardGroup) {\r\n console.info(\"no wizard group found, something is wrong with the wizard\", );\r\n return\r\n }\r\n const stepUrl = Misc.getUrlFromString(wizardGroup.customDisplayName || wizardGroup.groupName || \"\");\r\n\r\n const urlStepNumber = nextStep + 1; // because we don't want to have 0 in the URL\r\n history.push(\"/materials/\" + partName + \"/\" + urlStepNumber + (stepUrl ? \"/\" + stepUrl : \"\"));\r\n }\r\n\r\n return {changeWizardStepRoute}\r\n}\r\n","import uuid from \"uuid\";\r\nimport _ from 'lodash';\r\n\r\nimport EventManager from \"../../store/sqftEventManager\";\r\nimport point from \"./point\";\r\nimport lineLength from \"./overlays/lineLength\";\r\nimport pnpoly, {isPointInsidePolygon} from \"../../../../lib/pnpoly\";\r\nimport workspace from \"../workspace\";\r\nimport config from \"../../store/sqftConfig\";\r\nimport {\r\n addDecimalToLength,\r\n get45CornerLegDistanceByHypotenuse,\r\n getClosestPoint,\r\n getIntersectCords,\r\n getIntersectCordsBetweenLines,\r\n getMousePositionOnShape,\r\n getParallelPoints,\r\n getPointBetweenPoints,\r\n getPointDistance, getPointField,\r\n getPointOnTheLine, getTanDeg,\r\n isInnerCorner,\r\n measureDistanceToInches,\r\n orientation\r\n} from \"../../../../helpers/sqftHelper\";\r\n//todo sqft-react\r\nimport moveDiagonalLine from \"../../../../lib/moveDiagonalLine\";\r\nimport bumpout from \"./overlays/bumpout\";\r\nimport label from \"./overlays/label\";\r\nimport LineCorner from \"./lineHooks/lineCorner\";\r\n// import Color from \"./core/draw/color\";\r\nimport COLOR_THEMES, {COLOR} from \"../../store/colorThemes\";\r\nimport Color from \"../workspace/textBox/draw/color\";\r\nimport store from \"../../../../../../store\";\r\nimport {\r\n RESOURCE_ATTACHED_TO_NAME,\r\n RESOURCE_ATTACHED_TO_TYPE,\r\n RESOURCE_TYPE, SHAPE_PART_ID,\r\n SIDEBAR_SLAB_SEAM_BUTTONS,\r\n SQFT_MODE\r\n} from \"../../../../constants\";\r\nimport {updateSQFTCalculations} from \"../../../../../../actions/sqftFunctions\";\r\nimport sqftSlabManager from \"../../store/sqftSlabManager\";\r\nimport {addMiteredSection} from \"../../../../../../actions/sqftMiteredFunctions\";\r\nimport {addResource, deleteResourceAttachedTo} from \"../../../../../../actions/sqftResourceFunctions\";\r\nimport SqftStore from \"../../store/sqftStore\";\r\nimport {getAngleBetween3Points, getLineDirection, getLineOrientation} from \"../../../../helpers/shapeHelper\";\r\nimport RenderFigures from \"../../helpers/renderFigures\";\r\nimport {\r\n getLineBordersArrayV2,\r\n updateMiteredLength,\r\n updateShapeWaterfallLength,\r\n updateUnderlaymentLength\r\n} from \"../../helpers/lineHelper\";\r\nimport {isSFTCabinetsGroup} from \"../../../../helpers/sqftNavigationHelper\";\r\nimport MiteredController from \"../controls/mitered\";\r\nimport SlabWorkspace from \"../slab/slabWorkspace\";\r\nimport sqftResourcesManager from \"../../store/sqftResoursesManager\";\r\nimport BlinkingHighlight from \"../../helpers/commonParts/blink\";\r\nimport workspaceControllers from \"../../store/workspaceControllers\";\r\nimport {createSlabModeWaterfallShapes} from \"../../store/canvasHelper\";\r\nimport {isMiterEdge, isWaterfallFeature} from \"../../../../helpers/featureHelper\";\r\nimport {getCurrentLayout} from \"../../../../../appLayout\";\r\nimport LineAttachmentsComposite from \"./lineHooks/lineAttachmentsComposite\";\r\nimport UnderlaymentController from \"../controls/underlayment\";\r\nimport sqftEventManager from \"../../store/sqftEventManager\";\r\nimport {getClosestPointOnLine} from \"../../../../helpers/coordinatesHelper\";\r\n// import Menu from \"../controls/menu\";\r\n// import MiteredController from \"../controls/mitered\";\r\n\r\nexport default function (from, to, parent = null) {\r\n //private variables\r\n var self = this,\r\n //parent = null,\r\n state = {\r\n mousePos: {},\r\n mouseDown: false,\r\n mouseDownPosition: null,\r\n isHovering: false,\r\n withEdge: false,\r\n withBacksplash: false,\r\n withWall: false,\r\n withBumpout: false,\r\n isWithMitered: false, // mitered tool\r\n isWithUnderlayment: false,\r\n isWithWaterfallEdge: false, // waterfallTool edges\r\n isWithPeninsulaUnderwrapEdge: false, // Peninsula Underwrap Edge edges\r\n isWithFakeEdge: false,\r\n withId: null,\r\n attachedHandleId: null,\r\n attachedHandleUrl: null,\r\n attachedCrownMoldingFeatureId: null,\r\n attachedCrownMoldingUrl: null,\r\n backsplashFeatureId: null,\r\n backsplashHeight: 0, //this is backsplash size\r\n backsplashName: \"\", //this is backsplash size\r\n backsplashType: \"\", //this is backsplash size\r\n attachedItems: {\r\n isWithCrownMolding: false,\r\n isWithEndCap: false,\r\n },\r\n movePointDistance: 0, // is needed for diagonal lines\r\n angleLinePoints: {},\r\n slabModeSkipMiteredEdgeCreation: false,\r\n isHiddenForever: false,\r\n seamCutPoint: null,\r\n },\r\n design = {\r\n aroundLineColor: '#E3E1E3',\r\n cornerGutterSize: 0.1,\r\n outlineWidth: 8,\r\n outlineMargin: 9,\r\n horizontalOutlineMargin: 5,\r\n lineThickness: 4\r\n },\r\n overlayImportData = null,\r\n lineCornerImportData = null,\r\n overlayMiteredData = null,\r\n overlayUnderlaymentData = null,\r\n waterfallImportData = null,\r\n lineDirection = {};\r\n //public properties\r\n this.id = uuid();\r\n this.from = from;\r\n this.to = to;\r\n this.ctx = null;\r\n this.attachedShape = null;\r\n this.overlay = null;\r\n this.lineCorner = null;\r\n this.bumpoutOverlay = null;\r\n this.miteredOverlay = null;\r\n this.waterfallOverlay = null;\r\n this.labelOverlay = null;\r\n this.titleOverlay = null;\r\n this.staticOffset = null;\r\n this.isLine = true;\r\n this.blink = new BlinkingHighlight();\r\n //todo\r\n this.lineAttachmentsComposite = new LineAttachmentsComposite();\r\n\r\n //private property setters\r\n function setParent(value) { parent = value; }\r\n //public property getters\r\n this.getParent = function() { return parent; };\r\n this.getAttachedShape = () => { return this.attachedShape; };\r\n this.isWithBumpout = function() { return state.withBumpout; };\r\n this.isWithEdge = function() { return state.withEdge; };\r\n this.isWithWaterfallToolEdge = () => { return state.isWithWaterfallEdge; };\r\n this.isWithPeninsulaUnderwrapEdge = () => { return state.isWithPeninsulaUnderwrapEdge; };\r\n this.isWithBacksplash = () => { return state.withBacksplash; };\r\n this.isWithMitered = function() { return state.isWithMitered; };\r\n this.isWithUnderlayment = function() { return state.isWithUnderlayment; };\r\n this.isWithHandle = function() { return state.attachedHandleId; };\r\n this.isWithMiteredPrev = function() {\r\n const prevLine = parent.getPrevLine(self);\r\n return prevLine.isWithMitered();\r\n };\r\n this.isWithMiterEdge = () => {\r\n const attachedResource = workspace.getAttachedTo(this);\r\n if (attachedResource) {\r\n return isMiterEdge(attachedResource.featureId);\r\n }\r\n };\r\n /** this will return if green edge is waterfall (not waterfall tool) */\r\n this.isWithWaterfallEdgeFeature = () => {\r\n const attachedResource = workspace.getAttachedTo(this);\r\n if (attachedResource) {\r\n return isWaterfallFeature(attachedResource.featureId);\r\n }\r\n };\r\n this.isWithCrownMolding = () => {\r\n return state.attachedItems.isWithCrownMolding\r\n }\r\n\r\n this.getAttachedFeature = () => {\r\n const attachedResource = workspace.getAttachedTo(this);\r\n const layout = getCurrentLayout();\r\n\r\n return layout.getFeatureById(attachedResource.featureId, true);\r\n }\r\n this.isHovering = (shouldExcludePoints = false) => {\r\n if (!shouldExcludePoints && this.from.isHovering()) {\r\n return true\r\n }\r\n return state.isHovering;\r\n };\r\n this.isAngleHovering = function() { return this.lineCorner.state.isHovering; };\r\n this.isCornerLineHovering = function() { return this.lineCorner.state.isCornerLineHovering; };\r\n this.getDesign = function() { return design };\r\n this.getWithId = () => { return state.withId };\r\n this.setWithId = (value) => { state.withId = value };\r\n this.getBacksplashHeight = () => { return state.backsplashHeight };\r\n this.setBacksplashHeight = (value) => {\r\n //update resource height\r\n const attachedToResource = {...sqftResourcesManager.getAttachedToLineResource(this)};\r\n attachedToResource.height = value;\r\n sqftResourcesManager.updateAttachedToLineResource(attachedToResource);\r\n\r\n state.backsplashHeight = value\r\n this.overlay.renderBacksplashText(state.backsplashName, state.backsplashType);\r\n };\r\n this.getHandleId = () => { return state.attachedHandleId};\r\n this.setHandleId = (featureId) => { state.attachedHandleId = featureId};\r\n this.getHandle3dURL = () => { return state.attachedHandleUrl};\r\n this.setHandle3dURL = (url) => { state.attachedHandleUrl = url};\r\n this.getCrownMolding3dURL = () => { return state.attachedCrownMoldingUrl};\r\n this.setCrownMolding3dURL = (url) => { state.attachedCrownMoldingUrl = url};\r\n this.getCrownMoldingFeatureId = () => { return state.attachedCrownMoldingFeatureId};\r\n this.setCrownMoldingFeatureId = (url) => { state.attachedCrownMoldingFeatureId = url};\r\n this.getBacksplashFeatureId = () => { return sqftResourcesManager.getAttachedToLineResource(this).backsplashFeatureId };\r\n this.setBacksplashFeatureId = (featureId) => {\r\n state.backsplashFeatureId = featureId\r\n\r\n //update resource feature id\r\n const attachedToResource = {...sqftResourcesManager.getAttachedToLineResource(this)};\r\n attachedToResource.backsplashFeatureId = featureId;\r\n sqftResourcesManager.updateAttachedToLineResource(attachedToResource);\r\n\r\n //update slab shapes feature\r\n SlabWorkspace.slabAdditionalShapes.updateAdditionalShapeFeature(this, featureId);\r\n };\r\n\r\n this.getState = () => { return state };\r\n this.setStateParams = (params) => {\r\n state = {...state, ...params};\r\n };\r\n this.getPointsFeatures = function () {\r\n return {\r\n from: {\r\n arcLength: self.from.arcLength,\r\n angle: self.from.angle,\r\n x: self.from.x,\r\n y: self.from.y,\r\n pointDirection: self.from.pointDirection,\r\n corner: self.from.corner\r\n },\r\n to: {\r\n arcLength: self.to.arcLength,\r\n angle: self.to.angle,\r\n x: self.to.x,\r\n y: self.to.y,\r\n pointDirection: self.to.pointDirection,\r\n corner: self.to.corner\r\n },\r\n }\r\n };\r\n this.getOrientation = () => {\r\n return getLineOrientation(this.from, this.to);\r\n };\r\n this.getAttachedItems = function () {\r\n let isAnyItemsAttached = false;\r\n for (const attachedItemKey in state.attachedItems) {\r\n if (state.attachedItems[attachedItemKey]) {\r\n isAnyItemsAttached = true\r\n }\r\n }\r\n return state.withEdge\r\n || state.withBacksplash\r\n || state.withWall\r\n || state.withBumpout\r\n || state.isWithMitered\r\n || state.isWithUnderlayment\r\n || this.isWithWaterfallToolEdge()\r\n || this.isWithPeninsulaUnderwrapEdge()\r\n || state.withId\r\n || isAnyItemsAttached\r\n };\r\n this.setTutotialImage = function (image) {\r\n self.tutorialImage = image\r\n };\r\n this.isWithFakeEdge = () => { return state.isWithFakeEdge }\r\n this.setFakeEdge = (value) => { state.isWithFakeEdge = value };\r\n this.setHiddenForever = (value) => { state.isHiddenForever = value }; // this is for slab placeholder\r\n\r\n //private functions\r\n this.calculateRenderPosition = (point, sqftMode) => {\r\n const state = store.getState();\r\n const isShowSlabTool = state.sqftSlabState.isShowSlabTool;\r\n let offset = this.staticOffset ? this.staticOffset : this.getOffset();\r\n let scale = config.scale;\r\n let xCord = 0;\r\n let yCord = 0;\r\n if (!isShowSlabTool || sqftMode === SQFT_MODE.regular) {\r\n xCord = point.pos.x;\r\n yCord = point.pos.y;\r\n } else {\r\n if (point.posSlab) {\r\n xCord = point.posSlab.x;\r\n yCord = point.posSlab.y;\r\n } else {\r\n console.error(\"point.posSlab was not set\");\r\n }\r\n }\r\n\r\n return {\r\n x: (xCord * scale) + offset.x,\r\n y: (yCord * scale) + offset.y\r\n };\r\n };\r\n // function calculatePointPosition(renderPoint) {\r\n // var offset = self.getOffset();\r\n // var scale = config.scale;\r\n // return {\r\n // x: (renderPoint.x - offset.x) / scale,\r\n // y: (renderPoint.y - offset.y) / scale\r\n // };\r\n // }\r\n\r\n const getLineField = () => {\r\n var fieldSquares = {\r\n from: null,\r\n to: null,\r\n points: [],\r\n isHovering: state.isHovering,\r\n };\r\n\r\n fieldSquares.from = self.from.getPointField();\r\n fieldSquares.to = self.to.getPointField();\r\n var lineOrientation = getLineOrientation(this.from, this.to);\r\n if (lineOrientation == orientation.HORIZONTAL || lineOrientation == orientation.VERTICAL) {\r\n if (self.from.x > self.to.x) {\r\n var x = fieldSquares.from.x;\r\n fieldSquares.from.x = fieldSquares.to.x;\r\n fieldSquares.to.x = x;\r\n }\r\n if (self.from.y > self.to.y) {\r\n var y = fieldSquares.from.y;\r\n fieldSquares.from.y = fieldSquares.to.y;\r\n fieldSquares.to.y = y;\r\n }\r\n }\r\n\r\n var f = fieldSquares.from;\r\n var t = fieldSquares.to;\r\n var fieldSquareResizeRatio = 2,\r\n squeezeRatio = 0,\r\n marginFromCenter = 10;\r\n\r\n // var windowWidth = $(window).width(),\r\n // fieldSquareResizeRatio = 0;\r\n // if (windowWidth <= 1024) {\r\n // fieldSquareResizeRatio = 10;\r\n // }\r\n // if (windowWidth <= 768) {\r\n // fieldSquareResizeRatio = 15;\r\n // }\r\n\r\n switch(lineDirection.orientation) {\r\n case \"horizontal\": {\r\n if (lineDirection.newDirection === \"east\") {\r\n squeezeRatio =((t.x + f.width/2) - (f.x + f.width/2)) > 80 ? 15 : 0;\r\n fieldSquares.points.push({x: f.x + f.width/2 + squeezeRatio, y: f.y + fieldSquareResizeRatio - marginFromCenter});\r\n fieldSquares.points.push({x: t.x + f.width/2 - squeezeRatio, y: t.y + fieldSquareResizeRatio - marginFromCenter});\r\n fieldSquares.points.push({x: t.x + f.width/2 - squeezeRatio, y: t.y + t.height - fieldSquareResizeRatio - marginFromCenter});\r\n fieldSquares.points.push({x: f.x + f.width/2 + squeezeRatio, y: f.y + f.height - fieldSquareResizeRatio - marginFromCenter});\r\n } else if (lineDirection.newDirection === \"west\") {\r\n squeezeRatio =((t.x + f.width/2) - (f.x + f.width/2)) > 80 ? 15 : 0;\r\n fieldSquares.points.push({x: f.x + f.width/2 + squeezeRatio, y: f.y + fieldSquareResizeRatio + marginFromCenter});\r\n fieldSquares.points.push({x: t.x + f.width/2 - squeezeRatio, y: t.y + fieldSquareResizeRatio + marginFromCenter});\r\n fieldSquares.points.push({x: t.x + f.width/2 - squeezeRatio, y: t.y + t.height - fieldSquareResizeRatio + marginFromCenter});\r\n fieldSquares.points.push({x: f.x + f.width/2 + squeezeRatio, y: f.y + f.height - fieldSquareResizeRatio + marginFromCenter});\r\n }\r\n break;\r\n }\r\n case \"vertical\": {\r\n if (lineDirection.newDirection === \"south\") {\r\n squeezeRatio =((t.y + t.height/2) - (f.y + t.height/2)) > 80 ? 15 : 0;\r\n fieldSquares.points.push({x: f.x + fieldSquareResizeRatio + marginFromCenter, y: f.y + t.height/2 + squeezeRatio});\r\n fieldSquares.points.push({x: f.x + f.width - fieldSquareResizeRatio + marginFromCenter, y: f.y + t.height/2 + squeezeRatio});\r\n fieldSquares.points.push({x: t.x + t.width - fieldSquareResizeRatio + marginFromCenter, y: t.y + t.height/2 - squeezeRatio});\r\n fieldSquares.points.push({x: t.x + fieldSquareResizeRatio + marginFromCenter, y: t.y + t.height/2 - squeezeRatio });\r\n } else if (lineDirection.newDirection === \"north\") {\r\n squeezeRatio =((t.y + t.height/2) - (f.y + t.height/2)) > 80 ? 15 : 0;\r\n fieldSquares.points.push({x: f.x + fieldSquareResizeRatio - marginFromCenter, y: f.y + t.height/2 + squeezeRatio});\r\n fieldSquares.points.push({x: f.x + f.width - fieldSquareResizeRatio - marginFromCenter, y: f.y + t.height/2 + squeezeRatio});\r\n fieldSquares.points.push({x: t.x + t.width - fieldSquareResizeRatio - marginFromCenter, y: t.y + t.height/2 - squeezeRatio});\r\n fieldSquares.points.push({x: t.x + fieldSquareResizeRatio - marginFromCenter, y: t.y + t.height/2 - squeezeRatio });\r\n }\r\n break;\r\n }\r\n case \"SOUTHWEST\":\r\n case \"NORTHEAST\":\r\n fieldSquares.points.push({x: f.x, y: f.y });\r\n fieldSquares.points.push({x: t.x, y: t.y });\r\n fieldSquares.points.push({x: t.x + t.width, y: t.y + t.height });\r\n fieldSquares.points.push({x: f.x + f.width, y: f.y + f.height });\r\n break;\r\n case \"NORTHWEST\":\r\n case \"SOUTHEAST\":\r\n fieldSquares.points.push({x: f.x + f.width, y: f.y });\r\n fieldSquares.points.push({x: t.x + t.width, y: t.y });\r\n fieldSquares.points.push({x: t.x, y: t.y + t.height });\r\n fieldSquares.points.push({x: f.x, y: f.y + f.height });\r\n break;\r\n }\r\n return fieldSquares;\r\n }\r\n // function getDistance(point1, point2) {\r\n // var scale = workspace.getScale(),\r\n // xDiff = (point2.x - point1.x),\r\n // yDiff = (point2.y - point1.y),\r\n // distance = Math.sqrt(Math.pow(xDiff, 2) + Math.pow(yDiff, 2));\r\n // distance *= (xDiff + yDiff > 0 ? -1 : 1) / scale;\r\n // return distance;\r\n // }\r\n // function isLeft(a, b, c){\r\n // return ((b.x - a.x)*(c.y - a.y) - (b.y - a.y)*(c.x - a.x)) > 0;\r\n // }\r\n // function getDistanceToLine(p1, p2, p3) {\r\n // var scale = workspace.getScale(),\r\n // x0 = p3.x, y0 = p3.y,\r\n // x1 = p1.x, y1 = p1.y,\r\n // x2 = p2.x, y2 = p2.y,\r\n // distanceToLine = Math.abs(\r\n // ((y2 - y1) * x0) - ((x2 - x1) * y0) + (x2 * y1) - (y2 * x1)\r\n // ) / Math.sqrt(\r\n // Math.pow(y2 - y1, 2) + Math.pow(x2 - x1, 2)\r\n // ),\r\n // xDiff = (x2 - x1),\r\n // yDiff = (y2 - y1);\r\n // distanceToLine *= (isLeft(p1, p2, p3) ? -1 : 1) / scale;\r\n // return distanceToLine;\r\n // }\r\n // function getCanvasDimensions() {\r\n // var canvas = workspace.getCanvas(),\r\n // canvasWidth = canvas.width,\r\n // canvasHeight = canvas.height,\r\n // scale = config.scale,\r\n // gridSize = config.workspace.gridSize * scale,\r\n // adjustedSize = (gridSize / 3),\r\n // rulerSize = adjustedSize + 6;\r\n // return {\r\n // rulerSize: rulerSize,\r\n // canvasWidth: canvasWidth,\r\n // canvasHeight: canvasHeight\r\n // }\r\n // }\r\n // function lockPointToCanvas(point) {\r\n // var dim = getCanvasDimensions(),\r\n // pos = self.calculateRenderPosition(point),\r\n // rulerSize = calculatePointPosition({x: dim.rulerSize, y: dim.rulerSize}),\r\n // heightWidth = calculatePointPosition({x: dim.canvasWidth, y: dim.canvasHeight}),\r\n // drop = false;\r\n //\r\n //\r\n // console.log('dim', dim);\r\n // console.log('pos', pos);\r\n // console.log('rulerSize', rulerSize);\r\n // console.log('heightWidth', heightWidth);\r\n //\r\n // if (pos.x < dim.rulerSize) {\r\n // point.x = rulerSize.x + 1;\r\n // drop = true;\r\n // } else if (pos.x >= dim.canvasWidth) {\r\n // point.x = heightWidth.x - 1;\r\n // drop = true;\r\n // }\r\n // if (pos.y < dim.rulerSize) {\r\n // point.y = rulerSize.y + 1;\r\n // drop = true;\r\n // } else if (pos.y >= dim.canvasHeight) {\r\n // point.y = heightWidth.y - 1;\r\n // drop = true;\r\n // }\r\n // if (drop) {\r\n // state.isHovering = false;\r\n // state.mouseDown = false;\r\n // }\r\n // return point;\r\n // }\r\n\r\n function setMouseOverLine(mousePos) {\r\n var field = getLineField();\r\n var vertx = [];\r\n var verty = [];\r\n for(var i = 0; i < field.points.length; i++) {\r\n vertx.push(field.points[i].x);\r\n verty.push(field.points[i].y);\r\n }\r\n state.isHovering = pnpoly(field.points.length, vertx, verty, mousePos.x, mousePos.y);\r\n\r\n return state.isHovering || state.mouseDown;\r\n }\r\n\r\n /*\r\n * This is more accurate hover area used for cabinets\r\n */\r\n this.getMouseOverLineV2 = (mousePos) => {\r\n this.updateLineHovering(mousePos)\r\n return state.isHovering || state.mouseDown;\r\n }\r\n this.updateLineHovering = (mousePos = sqftEventManager.getMousePos()) => {\r\n state.isHovering = isPointInsidePolygon(mousePos, getLineBordersArrayV2(this.from, this.to, design.lineThickness + design.lineThickness * 0.2));\r\n }\r\n this.getLineHovering = () => {\r\n return state.isHovering\r\n }\r\n\r\n function onMouseUp(mousePos, e) {\r\n void mousePos;\r\n void e;\r\n if (state.mouseDown) {\r\n state.mouseDown = false;\r\n state.mouseDownPosition = null;\r\n self.from.snapToGrid();\r\n self.to.snapToGrid();\r\n }\r\n }\r\n const onMouseDown = (mousePos, e) => {\r\n void e;\r\n const reduxState = store.getState();\r\n const activeButton = reduxState.sqftMenuState.activeButton;\r\n\r\n if (( EventManager.getCursor().indexOf(\"n-resize\") >= 0\r\n || EventManager.getCursor().indexOf(\"e-resize\") >= 0\r\n || EventManager.getCursor().indexOf(\"ne-resize\") >= 0\r\n || EventManager.getCursor().indexOf(\"nw-resize\") >= 0\r\n ) && state.isHovering\r\n ){\r\n state.mouseDown = true;\r\n state.movePointDistance = getPointDistance(self.from, self.to);\r\n state.mouseDownPosition = mousePos;\r\n return true;\r\n }\r\n\r\n //Add free seam cut point in the slabMode\r\n if (activeButton === SIDEBAR_SLAB_SEAM_BUTTONS.addFreeSeam && state.isHovering) {\r\n const mousePosOnShape = getMousePositionOnShape(mousePos.x, mousePos.y, this.getParent());\r\n const lineStart = self.from;\r\n const lineEnd = self.to;\r\n const seamCutPoint = getClosestPointOnLine(lineStart, lineEnd, mousePosOnShape);\r\n\r\n const shape = this.getParent();\r\n if (shape.seamCutPoints.length >= 2) {\r\n shape.seamCutPoints.shift(); // Удаляем самую старую точку\r\n }\r\n shape.seamCutPoints.push(seamCutPoint);\r\n\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n const onMouseMove = (mousePos, e) => {\r\n void e;\r\n // if (e.terminate && !parent.isHovering()) {\r\n // state.isHovering = false;\r\n // return false;\r\n // }\r\n const isCabinet = isSFTCabinetsGroup();\r\n const isSlabMode = SqftStore.isSlabMode();\r\n const isMouseOverLine = isCabinet || isSlabMode ? this.getMouseOverLineV2(mousePos) : setMouseOverLine(mousePos);\r\n if (isMouseOverLine) {\r\n if (workspace.getAllowEdges() && !self.from.angleIsChanged && !self.to.angleIsChanged) {\r\n if (state.mouseDown) {\r\n this.moveLine(mousePos);\r\n }\r\n EventManager.releaseStealLock(parent);\r\n EventManager.stealCursor();\r\n switch(getLineOrientation(this.from, this.to)) {\r\n case orientation.HORIZONTAL:\r\n EventManager.setCursor(\"n-resize\", self);\r\n break;\r\n case orientation.VERTICAL:\r\n EventManager.setCursor(\"e-resize\", self);\r\n break;\r\n case orientation.NORTHWEST:\r\n case orientation.SOUTHEAST:\r\n EventManager.setCursor(\"ne-resize\", self);\r\n break;\r\n case orientation.NORTHEAST:\r\n case orientation.SOUTHWEST:\r\n EventManager.setCursor(\"nw-resize\", self);\r\n break;\r\n }\r\n return state.mouseDown;\r\n }\r\n\r\n if (config.highlight.lines && state.isHovering) {\r\n EventManager.releaseStealLock(parent);\r\n EventManager.stealCursor();\r\n return false;\r\n }\r\n // prevent all other mouseover's\r\n if (this.getAttachedItems()) {\r\n return true\r\n }\r\n }\r\n\r\n this.lineCorner.updateCornerHoverState(mousePos);\r\n\r\n if (workspace.getHoverShape() !== parent) {\r\n //state.isHovering = false; // allow hovering multiple shapes\r\n }\r\n EventManager.resetCursor(self);\r\n return false;\r\n }\r\n function onMouseLeave() {\r\n state.isHovering = false;\r\n state.mouseDown = false;\r\n }\r\n\r\n //public functions\r\n this.export = () => {\r\n return {\r\n id: this.id,\r\n from: this.from.export(),\r\n to: this.to.export(),\r\n bumpout: this.bumpoutOverlay ? this.bumpoutOverlay.export() : null,\r\n //todo\r\n mitered: this.miteredOverlay ? this.miteredOverlay.export() : null,\r\n underlayment: this.underlaymentOverlay ? this.underlaymentOverlay.export() : null,\r\n waterfallData: this.waterfallOverlay ? this.waterfallOverlay.export() : null,\r\n label: this.labelOverlay ? this.labelOverlay.export() : null,\r\n titleOverlay: this.titleOverlay ? this.titleOverlay.export() : null,\r\n overlay: this.overlay ? this.overlay.export() : null,\r\n lineCorner: this.lineCorner ? this.lineCorner.export() : null,\r\n state: _.clone(state),\r\n }\r\n };\r\n\r\n this.import = (value, existing) => {\r\n state = value.state;\r\n overlayImportData = value.overlay;\r\n lineCornerImportData = value.lineCorner;\r\n var foundFrom = null, foundTo = null;\r\n for (var i = 0; i < existing.length && !(foundFrom && foundTo); i++) {\r\n if (!foundFrom && existing[i].from.id == value.from.id) {\r\n foundFrom = existing[i].from;\r\n } else if (!foundFrom && existing[i].to.id == value.from.id) {\r\n foundFrom = existing[i].to;\r\n } else if (!foundTo && existing[i].to.id == value.to.id) {\r\n foundTo = existing[i].to;\r\n } else if (!foundTo && existing[i].from.id == value.to.id) {\r\n foundTo = existing[i].from;\r\n }\r\n }\r\n self.id = value.id;\r\n if (foundFrom) {\r\n self.from = foundFrom;\r\n } else {\r\n self.from = new point();\r\n self.from.import(value.from);\r\n }\r\n if (foundTo) {\r\n self.to = foundTo;\r\n } else {\r\n self.to = new point();\r\n self.to.import(value.to);\r\n }\r\n if (value.bumpout) {\r\n // self.overlay.setMidpointOffset(value.overlay.midpoint.xOffset, value.overlay.midpoint.yOffset);\r\n self.bumpoutOverlay = new bumpout();\r\n self.bumpoutOverlay.import(self, value.bumpout);\r\n state.withBumpout = true;\r\n }\r\n if (value.mitered) {\r\n //addMiteredToLine\r\n if (workspace.miteredController === null) {\r\n workspace.miteredController = new MiteredController();\r\n }\r\n this.miteredOverlay = workspace.miteredController.createMiteredOverlay(this);\r\n this.miteredOverlay.import(self, value.mitered);\r\n overlayMiteredData = value.mitered;\r\n state.isWithMitered = true;\r\n store.dispatch(addMiteredSection(this.miteredOverlay));\r\n }\r\n if (value.underlayment) {\r\n //addMiteredToLine isWithUnderlayment\r\n if (workspace.underlaymentController === null) {\r\n workspace.underlaymentController = new UnderlaymentController();\r\n }\r\n this.underlaymentOverlay = workspace.underlaymentController.createUnderlaymentOverlay(this);\r\n this.underlaymentOverlay.import(this, value.underlayment);\r\n overlayUnderlaymentData = value.underlayment;\r\n state.isWithUnderlayment = true;\r\n store.dispatch(addResource(RESOURCE_TYPE.underlaymentSections, this.underlaymentOverlay));\r\n }\r\n if (value.label) {\r\n // self.overlay.setMidpointOffset(value.overlay.midpoint.xOffset, value.overlay.midpoint.yOffset);\r\n self.labelOverlay = new label();\r\n self.labelOverlay.init(self, value.label.labelText, value.label.partId);\r\n self.labelOverlay.import(value.label);\r\n }\r\n if (value.titleOverlay) {\r\n // self.overlay.setMidpointOffset(value.overlay.midpoint.xOffset, value.overlay.midpoint.yOffset);\r\n self.titleOverlay = new label();\r\n self.titleOverlay.init(self, value.titleOverlay.state.labelText, value.titleOverlay.state.partId);\r\n self.titleOverlay.import(value.titleOverlay);\r\n }\r\n if (value.waterfallData) {\r\n waterfallImportData = value.waterfallData\r\n //this.waterfallOverlay = workspaceControllers.waterfall.createWaterfallOverlay(this, value.waterfallData);\r\n }\r\n };\r\n this.init = (parent, temp) => {\r\n temp = temp || false;\r\n setParent(parent);\r\n this.lineCorner = new LineCorner(this);\r\n if (lineCornerImportData) {\r\n this.lineCorner.import(lineCornerImportData);\r\n }\r\n if (!temp) {\r\n this.initEvents();\r\n self.from.init(self);\r\n }\r\n if (!temp && !parent.shapeCabinet && parent.partId !== SHAPE_PART_ID.spacer) {\r\n self.overlay = new lineLength();\r\n self.overlay.init(self);\r\n if (overlayImportData) {\r\n self.overlay.import(overlayImportData);\r\n }\r\n }\r\n if (this.miteredOverlay) {\r\n this.miteredOverlay.init(overlayMiteredData); // init after import\r\n //store.dispatch(addMiteredSection(this.miteredOverlay));\r\n //Menu.miteredController.updateInfo();\r\n //this.miteredOverlay.afterImport(overlayMiteredData);\r\n }\r\n if (this.underlaymentOverlay) {\r\n this.underlaymentOverlay.init(overlayUnderlaymentData);\r\n }\r\n if (waterfallImportData) {\r\n this.addWaterfallToLine(RESOURCE_ATTACHED_TO_NAME.waterfall, waterfallImportData);\r\n }\r\n if (this.isWithWaterfallToolEdge()) {\r\n this.overlay.renderWaterfallText(RESOURCE_ATTACHED_TO_NAME.waterfall, RESOURCE_ATTACHED_TO_TYPE.waterfall);\r\n }\r\n\r\n lineDirection = parent.getAngleDirection(self); // {direction:{x: \"forward\", y: \"forward\"},facing:\"sw\"}, cornerMargins, orientation. newDirection\r\n\r\n if (self.historyPointFeatures) {\r\n self.from.angle = self.historyPointFeatures.from.angle;\r\n self.from.arcLength = self.historyPointFeatures.from.arcLength;\r\n self.from.x = self.historyPointFeatures.from.x;\r\n self.from.y = self.historyPointFeatures.from.y;\r\n self.from.pointDirection = self.historyPointFeatures.from.pointDirection;\r\n self.from.corner = self.historyPointFeatures.from.corner;\r\n\r\n self.to.angle = self.historyPointFeatures.to.angle;\r\n self.to.arcLength = self.historyPointFeatures.to.arcLength;\r\n self.to.x = self.historyPointFeatures.to.x;\r\n self.to.y = self.historyPointFeatures.to.y;\r\n self.to.pointDirection = self.historyPointFeatures.to.pointDirection;\r\n self.to.corner = self.historyPointFeatures.to.corner;\r\n\r\n self.historyPointFeatures = null;\r\n }\r\n\r\n // console.log('lineDirection', lineDirection);\r\n };\r\n this.initEvents = () => {\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_MOVE,\r\n onMouseMove,\r\n this,\r\n EventManager.priorities.SEGMENT\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_DOWN,\r\n onMouseDown,\r\n this,\r\n EventManager.priorities.SEGMENT\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_UP,\r\n onMouseUp,\r\n this,\r\n EventManager.priorities.SEGMENT\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_LEAVE,\r\n onMouseLeave,\r\n this,\r\n EventManager.priorities.OVERALL\r\n );\r\n };\r\n this.deregisterEvents = () => {\r\n EventManager.removeEvent(this);\r\n this.from.deregisterEvents();\r\n this.overlay.deregisterEvents();\r\n if (this.bumpoutOverlay) {\r\n this.bumpoutOverlay.deregisterEvents();\r\n }\r\n if (this.miteredOverlay) {\r\n this.miteredOverlay.deregisterEvents();\r\n }\r\n if (this.titleOverlay) {\r\n this.titleOverlay.deregisterEvents();\r\n }\r\n if (this.overlay) {\r\n this.overlay.deregisterEvents();\r\n }\r\n };\r\n this.reInitEvents = () => {\r\n if (state.isHiddenForever) {\r\n return\r\n }\r\n this.initEvents();\r\n this.from.reInitEvents();\r\n if (!this.miteredOverlay) {\r\n this.overlay.reInitEvents();\r\n }\r\n if (this.bumpoutOverlay) {\r\n this.bumpoutOverlay.deregisterEvents();\r\n }\r\n if (this.miteredOverlay) {\r\n this.miteredOverlay.reInitEvents();\r\n }\r\n if (this.titleOverlay) {\r\n this.titleOverlay.reInitEvents();\r\n }\r\n if (this.overlay) {\r\n this.overlay.reInitEvents();\r\n }\r\n };\r\n this.deregisterPartEvents = () => {\r\n if (this.bumpoutOverlay) {\r\n this.bumpoutOverlay.deregisterEvents();\r\n }\r\n if (this.miteredOverlay) {\r\n this.miteredOverlay.deregisterEvents();\r\n }\r\n if (this.underlaymentOverlay) {\r\n this.underlaymentOverlay.deregisterEvents();\r\n }\r\n if (this.labelOverlay) {\r\n this.labelOverlay.deregisterPartEvents();\r\n }\r\n if (this.titleOverlay) {\r\n this.titleOverlay.deregisterPartEvents();\r\n }\r\n if (this.overlay) {\r\n this.overlay.deregisterEvents();\r\n }\r\n this.from.deregisterPartEvents();\r\n };\r\n this.reInitPartEvents = () => {\r\n if (this.bumpoutOverlay) {\r\n this.bumpoutOverlay.reInitEvents();\r\n }\r\n if (this.miteredOverlay) {\r\n this.miteredOverlay.reInitEvents();\r\n }\r\n if (this.underlaymentOverlay) {\r\n this.underlaymentOverlay.deregisterEvents();\r\n }\r\n if (this.labelOverlay) {\r\n this.labelOverlay.reInitPartEvents();\r\n }\r\n if (this.titleOverlay) {\r\n this.titleOverlay.reInitPartEvents();\r\n }\r\n if (this.overlay && !this.miteredOverlay) {\r\n this.overlay.reInitEvents();\r\n }\r\n this.from.reInitPartEvents();\r\n };\r\n this.reInitTitleEvents = () => {\r\n if (this.titleOverlay) {\r\n this.titleOverlay.reInitPartEvents();\r\n }\r\n };\r\n this.destroy = function(protect) {\r\n if (!protect) {\r\n var image = workspace.getImagesAttachedTo(self);\r\n if (image) {\r\n image.destroy();\r\n }\r\n EventManager.removeEvent(self);\r\n self.from.destroy();\r\n if (self.overlay)\r\n self.overlay.destroy();\r\n if (self.miteredOverlay) {\r\n self.miteredOverlay.destroy();\r\n }\r\n }\r\n };\r\n this.moveLine = (mousePos) => {\r\n\r\n // console.log(\"mousePos\", mousePos);\r\n // console.log(\"self.from.x\", self.from.x);\r\n // console.log(\"self.from.x\", self.to.x);\r\n\r\n var scale = workspace.getScale();\r\n\r\n var xDiff = (state.mouseDownPosition.x - mousePos.x) / scale;\r\n var yDiff = (state.mouseDownPosition.y - mousePos.y) / scale;\r\n // var slope = -getSlope(); // OLD LOGIC, let's keep it in case we found an issue with this moveDiagonalLine(see git diff)\r\n\r\n var o = getLineOrientation(this.from, this.to);\r\n if (o === orientation.VERTICAL) {\r\n self.from.x -= xDiff;\r\n self.to.x -= xDiff;\r\n if (self.isWithBumpout()) {\r\n self.bumpoutOverlay.moveBumpout(xDiff, 0);\r\n } else if (self.isWithMitered()) {\r\n self.miteredOverlay.moveMitered(xDiff, 0);\r\n } else if (this.isWithUnderlayment()) {\r\n this.underlaymentOverlay.moveMitered(xDiff, 0);\r\n }\r\n state.mouseDownPosition.x = mousePos.x;\r\n } else if (o === orientation.HORIZONTAL) {\r\n self.from.y -= yDiff;\r\n self.to.y -= yDiff;\r\n if (self.isWithBumpout()) {\r\n self.bumpoutOverlay.moveBumpout(0, yDiff);\r\n } else if (self.isWithMitered()) {\r\n self.miteredOverlay.moveMitered(0, yDiff);\r\n } else if (this.isWithUnderlayment()) {\r\n this.underlaymentOverlay.moveMitered(0, yDiff);\r\n }\r\n state.mouseDownPosition.y = mousePos.y;\r\n } else {\r\n const nextLine = parent.getNextLine(self);\r\n const prevLine = parent.getPrevLine(self);\r\n moveDiagonalLine(self, nextLine, prevLine, state.movePointDistance, yDiff, o);\r\n state.mouseDownPosition = mousePos;\r\n }\r\n // self.from = lockPointToCanvas(self.from); // removed locking because of this issue http://jira.mozidev.com/browse/QC-802\r\n // self.to = lockPointToCanvas(self.to);\r\n\r\n updateShapeWaterfallLength(this);\r\n updateMiteredLength(this);\r\n updateUnderlaymentLength(this);\r\n\r\n const reduxState = store.getState();\r\n const updateCalculations = reduxState.sqftState.updateCalculations;\r\n store.dispatch(updateSQFTCalculations(updateCalculations + 1));\r\n };\r\n this.getLineDirection = function() {\r\n return parent.getAngleDirection(self); // line text direction\r\n };\r\n this.getLineDirectionV2 = function() {\r\n return getLineDirection(this.from, this.to); // line text direction\r\n };\r\n this.getPairedLines = function() {\r\n let pairedLines = [];\r\n switch (parent.shapeType) {\r\n case \"horseshoe\": {\r\n const prevLine = parent.getPrevLine(self);\r\n const nextLine = parent.getNextLine(self);\r\n const prevLineStep2 = parent.getPrevLine(prevLine);\r\n const nextLineStep2 = parent.getNextLine(nextLine);\r\n const prevLineStep3 = parent.getPrevLine(prevLineStep2);\r\n const nextLineStep3 = parent.getNextLine(nextLineStep2);\r\n\r\n pairedLines = [nextLineStep3, prevLineStep3];\r\n break;\r\n }\r\n default:\r\n pairedLines = [parent.getPrevLine(self), parent.getNextLine(self)];\r\n break;\r\n }\r\n\r\n return pairedLines;\r\n };\r\n this.getLineLength = function () {\r\n let distance = getPointDistance(self.from, self.to);\r\n\r\n return self.addDecimalToLength(measureDistanceToInches(distance))\r\n };\r\n\r\n this.getLineLengthMm = function () {\r\n let distance = getPointDistance(self.from, self.to);\r\n\r\n return measureDistanceToInches(distance).millimeters\r\n };\r\n\r\n this.getLineDistance = function () {\r\n return getPointDistance(self.from, self.to);\r\n };\r\n\r\n this.getLineBumpoutTotalHeight = function () {\r\n return self.addDecimalToLength(self.bumpoutOverlay.getBumpoutTotalHeight())\r\n };\r\n\r\n this.addDecimalToLength = function(lineLength) {\r\n return addDecimalToLength(lineLength);\r\n };\r\n this.getBiggestXPoint = function() {\r\n return self.from.x > self.to.x ? self.from : self.to\r\n };\r\n this.getBiggestYPoint = function() {\r\n return self.from.y > self.to.y ? self.from : self.to\r\n };\r\n this.getSmallestXPoint = function() {\r\n return self.from.x < self.to.x ? self.from : self.to\r\n };\r\n this.getSmallestYPoint = function() {\r\n return self.from.y < self.to.y ? self.from : self.to\r\n };\r\n /**\r\n * @deprecated use getLinePointsWithoutCorners\r\n * @return {[null, null, (\"default\"|*), (\"default\"|*)]}\r\n */\r\n this.getSmallestAndBiggestPointWithCorners = () => {\r\n let o = getLineOrientation(this.from, this.to),\r\n lineDirection = this.getLineDirection(),\r\n //nextLine = parent.getNextLine(self),\r\n prevLine = parent.getPrevLine(self),\r\n toCornerLength = self.to.getArcLength() || self.get45CornerLegDistance(),\r\n fromCornerLength = prevLine.to.getArcLength() || prevLine.get45CornerLegDistance(),\r\n toLinePoint = Object.assign({}, self.to),\r\n fromLinePoint = Object.assign({}, self.from),\r\n biggestLinePoint = null,\r\n smallestLinePoint = null,\r\n toCornerMargin = null,\r\n fromCornerMargin = null;\r\n\r\n if (o === orientation.VERTICAL) {\r\n //line biggest and smallest points\r\n biggestLinePoint = Object.assign({}, this.getBiggestYPoint());\r\n smallestLinePoint = Object.assign({}, this.getSmallestYPoint());\r\n if (lineDirection.newDirection === \"north\" ) {\r\n toCornerMargin = -fromCornerLength;\r\n fromCornerMargin = +toCornerLength;\r\n toLinePoint.y += fromCornerMargin;\r\n fromLinePoint.y += toCornerMargin;\r\n } else {\r\n toCornerMargin = -toCornerLength;\r\n fromCornerMargin = +fromCornerLength;\r\n toLinePoint.y += toCornerMargin;\r\n fromLinePoint.y += fromCornerMargin;\r\n }\r\n biggestLinePoint.y += toCornerMargin;\r\n smallestLinePoint.y += fromCornerMargin;\r\n } else if (o === orientation.HORIZONTAL) {\r\n //line biggest and smallest points\r\n biggestLinePoint = Object.assign({}, this.getBiggestXPoint());\r\n smallestLinePoint = Object.assign({}, this.getSmallestXPoint());\r\n if (lineDirection.newDirection === \"east\" ) {\r\n toCornerMargin = -toCornerLength;\r\n fromCornerMargin = +fromCornerLength;\r\n toLinePoint.x += toCornerMargin;\r\n fromLinePoint.x += fromCornerMargin;\r\n } else {\r\n toCornerMargin = -fromCornerLength;\r\n fromCornerMargin = +toCornerLength;\r\n toLinePoint.x += fromCornerMargin;\r\n fromLinePoint.x += toCornerMargin;\r\n }\r\n biggestLinePoint.x += toCornerMargin;\r\n smallestLinePoint.x += fromCornerMargin;\r\n }\r\n\r\n return [smallestLinePoint, biggestLinePoint, toLinePoint, fromLinePoint]\r\n };\r\n this.getLinePointsWithoutCorners = () => {\r\n let toCornerLength = this.to.getArcLength(),\r\n toAngleLength = this.to.getAngle(),\r\n fromCornerLength = this.from.getArcLength(),\r\n fromAngleLength = this.from.getAngle();\r\n\r\n const toPoint = getPointOnTheLine(this.to, this.from, -toCornerLength || -toAngleLength);\r\n const fromPoint = getPointOnTheLine(this.from, this.to, -fromCornerLength || -fromAngleLength);\r\n\r\n return [fromPoint, toPoint]\r\n }\r\n this.getOffset = function() {\r\n var scale = config.scale;\r\n var workspacePos = workspace.getOffset();\r\n if (parent) {\r\n var _pos = parent.getPosition();\r\n if (config.workspace.snapToGrid) {\r\n _pos = parent.getSnappedPosition();\r\n }\r\n var offset = {\r\n x: workspacePos.x + (_pos.x * scale),\r\n y: workspacePos.y + (_pos.y * scale)\r\n }\r\n } else {\r\n return {x: 0, y: 0};\r\n }\r\n return offset;\r\n };\r\n this.stealCursor = function(who) {\r\n if (self.from === who) {\r\n EventManager.resetCursor(self);\r\n }\r\n };\r\n this.resetState = () => {\r\n state.mouseDown = false;\r\n state.mouseDownPosition = null;\r\n state.isHovering = false;\r\n };\r\n this.hasIntersections = () => {\r\n const lines = parent.getLines();\r\n const fromPosition = getPointField(this.from.x, this.from.y);\r\n const toPosition = getPointField(this.to.x, this.to.y);\r\n\r\n return lines.some(testLine => {\r\n const prevLine = parent.getPrevLine(this);\r\n const nextLine = parent.getNextLine(this);\r\n // skip closest lines\r\n if (testLine.id === this.id || testLine.id === prevLine.id || testLine.id === nextLine.id) {\r\n return false\r\n }\r\n const testLineFromPosition = getPointField(testLine.from.x, testLine.from.y);\r\n const testLineToPosition = getPointField(testLine.to.x, testLine.to.y);\r\n const intersections = getIntersectCordsBetweenLines(\r\n fromPosition, toPosition, testLineFromPosition, testLineToPosition\r\n )\r\n void intersections;\r\n // console.log(\"intersections\", intersections);\r\n // if (intersections) {\r\n // console.log(\"fromPosition\", fromPosition);\r\n // console.log(\"toPosition\", toPosition);\r\n // console.log(\"testLineFromPosition\", testLineFromPosition);\r\n // console.log(\"testLineToPosition\", testLineToPosition);\r\n // }\r\n return intersections\r\n })\r\n }\r\n\r\n /**\r\n * This will render blue shape\r\n * @param ctx\r\n * @param toOnly\r\n * @param sqftMode\r\n */\r\n this.render = (ctx, toOnly, sqftMode) => {\r\n this.renderLineBorder(ctx, toOnly, sqftMode);\r\n }\r\n\r\n /**\r\n * This will render blue shape\r\n * @param ctx\r\n * @param toOnly\r\n * @param sqftMode\r\n */\r\n this.renderLineBorder = (ctx, toOnly, sqftMode) => {\r\n if (workspace && workspace.getState().loading) return;\r\n this.ctx = ctx;\r\n toOnly = toOnly || false;\r\n const renderTo = self.calculateRenderPosition(self.to, sqftMode);\r\n const renderFrom = self.calculateRenderPosition(self.from, sqftMode);\r\n // if (!toOnly) {\r\n // let x = renderFrom.x;\r\n // let y = renderFrom.y;\r\n // if (self.from.arcLength > 0 || self.from.angle > 0) {\r\n // const radius = Math.sqrt(Math.pow(self.from.arcLength || self.from.angle, 2) / 2) * config.scale;\r\n // const o = getLineOrientation(this.from, this.to);\r\n // switch(o) {\r\n // case orientation.HORIZONTAL:\r\n // if (self.from.x < self.to.x)\r\n // x += radius;\r\n // else\r\n // x -= radius;\r\n // break;\r\n // case orientation.VERTICAL:\r\n // if (self.from.y < self.to.y)\r\n // y += radius;\r\n // else\r\n // y -= radius;\r\n // break;\r\n // case orientation.NORTHWEST:\r\n // case orientation.SOUTHEAST:\r\n // case orientation.NORTHEAST:\r\n // case orientation.SOUTHWEST:\r\n // //todo\r\n // break;\r\n // }\r\n // }\r\n // ctx.moveTo(x, y);\r\n // }\r\n\r\n if (state.withBumpout && !SqftStore.isSlabMode() && !this.isDisabledInPopup) {\r\n drawBumpoutLine(ctx);\r\n }\r\n // don't render arc Length and angle in the slab mode\r\n if (self.to.arcLength > 0 && !SqftStore.isSlabMode()) { // changes blue corner if radius or angle exists\r\n this.renderArcLength(ctx, renderFrom, renderTo);\r\n } else if (self.to.angle > 0) {\r\n this.renderAngle(ctx, renderFrom, renderTo);\r\n } else {\r\n ctx.lineTo(renderTo.x, renderTo.y);\r\n }\r\n }\r\n\r\n this.renderArcLength = (ctx, renderFrom, renderTo) => {\r\n let radiusMultiplier = this.to.arcLength;\r\n let radius = radiusMultiplier * config.scale;\r\n let dir = parent.getAngleDirection(this);\r\n\r\n switch (dir.orientation) {\r\n case \"horizontal\":\r\n case \"vertical\":\r\n case \"NORTHWEST\":\r\n case \"NORTHEAST\":\r\n case \"SOUTHWEST\":\r\n case \"SOUTHEAST\":\r\n default: {\r\n const nextLine = parent.getNextLine(this);\r\n const nextLineRenderTo = nextLine.calculateRenderPosition(nextLine.to);\r\n const angle = getAngleBetween3Points(renderFrom, renderTo, nextLineRenderTo);\r\n const radiusMultiplier = this.to.arcLength * config.scale;\r\n const marginFrom = Math.abs(radiusMultiplier / getTanDeg(Math.round(angle / 2)));\r\n const pointA = getPointBetweenPoints(renderTo, renderFrom, marginFrom); // *2 is made to fit arcTo\r\n const pointB = getPointBetweenPoints(renderTo, self.calculateRenderPosition(nextLine.to), radius);\r\n\r\n ctx.lineTo(pointA.x, pointA.y);\r\n //ctx.lineTo(renderFrom.x, renderFrom.y)\r\n ctx.arcTo(renderTo.x, renderTo.y, pointB.x, pointB.y, radius);\r\n break;\r\n }\r\n }\r\n };\r\n this.renderAngle = (ctx, renderFrom, renderTo) => {\r\n let radiusMultiplier = Math.sqrt( Math.pow(this.to.angle, 2) * 2); //todo\r\n let radius = radiusMultiplier * config.scale;\r\n let dir = parent.getAngleDirection(this);\r\n\r\n switch (dir.orientation) {\r\n case \"horizontal\":\r\n case \"vertical\":\r\n case \"NORTHWEST\":\r\n case \"NORTHEAST\":\r\n case \"SOUTHWEST\":\r\n case \"SOUTHEAST\": {\r\n const nextLine = parent.getNextLine(this);\r\n const nextLineRenderTo = this.calculateRenderPosition(nextLine.to);\r\n const pointA = getPointBetweenPoints(renderTo, renderFrom, radius / 2);\r\n const pointB = getPointBetweenPoints(renderTo, nextLineRenderTo, radius / 2);\r\n ctx.lineTo(pointA.x, pointA.y);\r\n ctx.lineTo(pointB.x, pointB.y);\r\n break;\r\n }\r\n default:\r\n break;\r\n }\r\n };\r\n\r\n this.renderLineOverlay = function(ctx) {\r\n lineLength.render(ctx, self);\r\n };\r\n\r\n const highLightBorder = (color) => {\r\n if (!self.from.angleIsChanged && !self.to.angleIsChanged) {\r\n let [fromPointWithIndent, toPointWithIndent] = this.getLinePointsWithoutCorners(),\r\n renderFrom = getPointField(fromPointWithIndent.x, fromPointWithIndent.y, this),\r\n renderTo = getPointField(toPointWithIndent.x, toPointWithIndent.y, this);\r\n //\r\n // let [smallestLinePoint, biggestLinePoint, to, from] = self.getSmallestAndBiggestPointWithCorners(),\r\n // renderFrom1 = self.calculateRenderPosition(from),\r\n // renderTo1 = self.calculateRenderPosition(to);\r\n //\r\n // void smallestLinePoint;\r\n // void biggestLinePoint;\r\n // console.log(\"renderFrom\", renderFrom);\r\n // console.log(\"renderFrom1\", renderFrom1);\r\n //\r\n // console.log(\"renderTo\", renderTo);\r\n // console.log(\"renderTo1\", renderTo1);\r\n //\r\n // debugger // eslint-disable-line no-debugger\r\n self.ctx.beginPath();\r\n self.ctx.moveTo(renderFrom.x, renderFrom.y);\r\n if (state.withBumpout) {\r\n drawBumpoutLine(self.ctx);\r\n }\r\n self.ctx.lineTo(renderTo.x, renderTo.y);\r\n self.ctx.lineWidth = 4;\r\n self.ctx.strokeStyle = color;\r\n self.ctx.stroke();\r\n self.ctx.closePath();\r\n\r\n /*var lineField = getLineField();\r\n var field = lineField.points;\r\n self.from.render(self.ctx);\r\n\r\n self.ctx.save();\r\n self.ctx.beginPath();\r\n self.ctx.moveTo(field[0].x, field[0].y);\r\n for(var i = 1; i < field.length; i++) {\r\n var p = field[i];\r\n var x = p.x, y = p.y;\r\n self.ctx.lineTo(x, y);\r\n }\r\n self.ctx.closePath();\r\n self.ctx.fillStyle = 'rgba(159,197,34,0.47)';\r\n self.ctx.fill();\r\n self.ctx.restore();*/ // this is old hovering, m.b. would be needed for tests\r\n }\r\n }\r\n\r\n function drawBumpoutLine(ctx) {\r\n var bumpoutPoints = self.bumpoutOverlay.getBumpoutPoints(),\r\n point1 = self.calculateRenderPosition(bumpoutPoints.point1),\r\n point2 = self.calculateRenderPosition(bumpoutPoints.point2),\r\n point3 = self.calculateRenderPosition(bumpoutPoints.point3),\r\n point4 = self.calculateRenderPosition(bumpoutPoints.point4);\r\n\r\n ctx.lineTo(point1.x, point1.y);\r\n ctx.lineTo(point2.x, point2.y);\r\n ctx.lineTo(point3.x, point3.y);\r\n ctx.lineTo(point4.x, point4.y);\r\n }\r\n\r\n const drawResizeCursor = () => {\r\n var\r\n renderFrom = self.calculateRenderPosition(self.from),\r\n renderTo = self.calculateRenderPosition(self.to);\r\n var o = getLineOrientation(this.from, this.to);\r\n const size = +self.tutorialImage.dataset.size;\r\n if (o === orientation.VERTICAL) {\r\n self.ctx.drawImage(self.tutorialImage, 0, 0, size, size, renderFrom.x - size/2, renderFrom.y - (renderFrom.y - renderTo.y)/2 - size/2, size, size);\r\n } else if (o === orientation.HORIZONTAL) {\r\n self.ctx.drawImage(self.tutorialImage, 0, 0, size, size, renderFrom.x - (renderFrom.x - renderTo.x)/2 - size/2, renderFrom.y - size/2, size, size);\r\n }\r\n }\r\n\r\n this.setLinePoints = () => {\r\n let renderFrom = self.calculateRenderPosition(self.from),\r\n renderTo = self.calculateRenderPosition(self.to),\r\n marginFrom = 0,\r\n marginTo = 0,\r\n //len = 0,\r\n afterIntersectionMargin = 9;\r\n const prevLine = parent.getPrevLine(self);\r\n const nextLine = parent.getNextLine(self);\r\n lineDirection = parent.getAngleDirection(self);\r\n\r\n if (this.from.arcLength > 0) {\r\n const prevLineRenderFrom = prevLine.calculateRenderPosition(prevLine.from);\r\n const angle = getAngleBetween3Points(prevLineRenderFrom, renderFrom, renderTo);\r\n const radiusMultiplier = self.from.arcLength * config.scale;\r\n marginFrom = Math.abs(radiusMultiplier / getTanDeg(Math.round(angle / 2))) ;\r\n\r\n // console.clear();\r\n // console.log(\"self.from.arcLength\", self.from.arcLength);\r\n // console.log(\"radiusMultiplier\", radiusMultiplier);\r\n // console.log(\"marginFrom\", marginFrom);\r\n // console.log(\"angle\", angle);\r\n // console.log(\"getTanDeg(Math.round(angle / 2))\", getTanDeg(Math.round(angle / 2)));\r\n // console.log(\"marginFrom < radiusMultiplier\", marginFrom < radiusMultiplier);\r\n } else if (this.from.angle > 0) {\r\n marginFrom = self.from.angle * config.scale / 1.48 + design.outlineMargin; // +design.outlineMargin is to prevent overlapping\r\n }\r\n\r\n if (this.to.arcLength > 0) {\r\n const nextLineRenderTo = nextLine.calculateRenderPosition(nextLine.to);\r\n const angle = getAngleBetween3Points(renderFrom, renderTo, nextLineRenderTo);\r\n const radiusMultiplier = this.to.arcLength * config.scale;\r\n marginTo = Math.abs(radiusMultiplier / getTanDeg(Math.round(angle / 2)));\r\n // console.clear();\r\n // console.log(\"self.to.arcLength\", self.to.arcLength);\r\n // console.log(\"radiusMultiplier\", radiusMultiplier);\r\n // console.log(\"marginTo\", marginTo);\r\n // console.log(\"angle\", angle);\r\n // console.log(\"getTanDeg(Math.round(angle / 2))\", getTanDeg(Math.round(angle / 2)));\r\n // console.log(\"marginFrom < radiusMultiplier\", marginTo < radiusMultiplier);\r\n } else if (this.to.angle > 0) {\r\n marginTo = self.to.angle * config.scale / 1.48; // not sure why 1.48\r\n }\r\n\r\n self.drawLineFrom = self.drawLineFrom || null;\r\n self.drawLineTo = self.drawLineTo || null;\r\n if (state.withBumpout) {\r\n var bumpoutPoints = self.bumpoutOverlay.getBumpoutPoints(),\r\n point1 = self.calculateRenderPosition(bumpoutPoints.point1),\r\n point2 = self.calculateRenderPosition(bumpoutPoints.point2),\r\n point3 = self.calculateRenderPosition(bumpoutPoints.point3),\r\n point4 = self.calculateRenderPosition(bumpoutPoints.point4);\r\n\r\n self.drawLineBumpoutPoints = self.drawLineBumpoutPoints || null;\r\n }\r\n\r\n //let prevParallelLine, nextParallelLine, rotateAnglePart, rotatedAngleValue;\r\n\r\n\r\n if (lineDirection.orientation !== \"horizontal\" && lineDirection.orientation !== \"vertical\") {\r\n //nextLineDirection = parent.getAngleDirection(nextLine);\r\n //prevLineDirection = parent.getAngleDirection(prevLine);\r\n // prevParallelLine = parent.getPrevLine(prevLine);\r\n // nextParallelLine = parent.getNextLine(nextLine);\r\n // rotateAnglePart = self.from.rotateAnglePart;\r\n // rotatedAngleValue = self.from.rotateAnglePart ? self.from.rotateAnglePart.rotatedAngleValue : 0;\r\n }\r\n\r\n switch (lineDirection.orientation) {\r\n case \"horizontal\":\r\n if (lineDirection.newDirection === 'east') {\r\n marginFrom = (prevLine.getLineDirection().newDirection === 'south') ? marginFrom + 18 : marginFrom;\r\n marginTo = (nextLine.getLineDirection().newDirection === 'north') ? marginTo + 18 : marginTo;\r\n self.drawLineFrom = {x: renderFrom.x + marginFrom, y: renderFrom.y - 9};\r\n self.drawLineTo = {x: renderTo.x - marginTo, y: renderTo.y - 9};\r\n if (state.withBumpout) {\r\n self.drawLineBumpoutPoints = this.bumpoutOverlay.bumpoutInOrOut() === 'out' ?\r\n {\r\n point1: {x: point1.x - 9, y: renderTo.y - 9},\r\n point2: {x: point2.x - 9, y: point2.y - 9},\r\n point3: {x: point3.x + 9, y: point3.y - 9},\r\n point4: {x: point4.x + 9, y: point4.y - 9},\r\n } : {\r\n point1: {x: point1.x + 9, y: renderTo.y - 9},\r\n point2: {x: point2.x + 9, y: point2.y - 9},\r\n point3: {x: point3.x - 9, y: point3.y - 9},\r\n point4: {x: point4.x - 9, y: point4.y - 9},\r\n }\r\n }\r\n setPointsOutlineIntersection(prevLine, nextLine);\r\n self.drawLineFrom = {x: self.drawLineFrom.x + afterIntersectionMargin, y: self.drawLineFrom.y};\r\n self.drawLineTo = {x: self.drawLineTo.x - afterIntersectionMargin, y: self.drawLineTo.y};\r\n } else if (lineDirection.newDirection === \"west\") {\r\n marginFrom = (prevLine.getLineDirection().newDirection === 'north') ? marginFrom + 18 : marginFrom;\r\n marginTo = (nextLine.getLineDirection().newDirection === 'south') ? marginTo + 18 : marginTo;\r\n self.drawLineFrom = {x: renderFrom.x - marginFrom, y: renderFrom.y + 9};\r\n self.drawLineTo = {x: renderTo.x + 1 + marginTo, y: renderTo.y + 9};\r\n\r\n if (state.withBumpout) {\r\n self.drawLineBumpoutPoints = this.bumpoutOverlay.bumpoutInOrOut() === 'out' ?\r\n {\r\n point1: {x: point1.x + 9, y: renderTo.y + 9},\r\n point2: {x: point2.x + 9, y: point2.y + 9},\r\n point3: {x: point3.x - 9, y: point3.y + 9},\r\n point4: {x: point4.x - 9, y: point4.y + 9},\r\n } : {\r\n point1: {x: point1.x - 9, y: renderTo.y + 9},\r\n point2: {x: point2.x - 9, y: point2.y + 9},\r\n point3: {x: point3.x + 9, y: point3.y + 9},\r\n point4: {x: point4.x + 9, y: point4.y + 9},\r\n }\r\n }\r\n setPointsOutlineIntersection(prevLine, nextLine);\r\n self.drawLineFrom = {x: self.drawLineFrom.x - afterIntersectionMargin, y: self.drawLineFrom.y};\r\n self.drawLineTo = {x: self.drawLineTo.x + afterIntersectionMargin, y: self.drawLineTo.y};\r\n }\r\n break;\r\n case \"vertical\":\r\n if (lineDirection.newDirection === 'south') {\r\n marginFrom = (prevLine.getLineDirection().newDirection === 'west') ? marginFrom + 18 : marginFrom;\r\n marginTo = (nextLine.getLineDirection().newDirection === 'east') ? marginTo + 18 : marginTo;\r\n self.drawLineFrom = {x: renderFrom.x + 9, y: renderFrom.y + marginFrom};\r\n self.drawLineTo = {x: renderTo.x + 9, y: renderTo.y - marginTo};\r\n if (state.withBumpout) {\r\n self.drawLineBumpoutPoints = this.bumpoutOverlay.bumpoutInOrOut() === 'out' ?\r\n {\r\n point1: {x: point1.x + 9, y: point1.y - 9},\r\n point2: {x: point2.x + 9, y: point2.y - 9},\r\n point3: {x: point3.x + 9, y: point3.y + 9},\r\n point4: {x: point4.x + 9, y: point4.y + 9},\r\n } : {\r\n point1: {x: point1.x + 9, y: point1.y + 9},\r\n point2: {x: point2.x + 9, y: point2.y + 9},\r\n point3: {x: point3.x + 9, y: point3.y - 9},\r\n point4: {x: point4.x + 9, y: point4.y - 9},\r\n }\r\n }\r\n setPointsOutlineIntersection(prevLine, nextLine);\r\n self.drawLineFrom = {x: self.drawLineFrom.x, y: self.drawLineFrom.y + afterIntersectionMargin};\r\n self.drawLineTo = {x: self.drawLineTo.x, y: self.drawLineTo.y - afterIntersectionMargin};\r\n } else if (lineDirection.newDirection === 'north') {\r\n marginTo = (nextLine.getLineDirection().newDirection === 'west') ? marginTo + 18 : marginTo;\r\n marginFrom = (prevLine.getLineDirection().newDirection === 'east') ? marginFrom + 18 : marginFrom;\r\n self.drawLineFrom = {x: renderFrom.x - 9, y: renderFrom.y - marginFrom};\r\n self.drawLineTo = {x: renderTo.x - 9, y: renderTo.y + marginTo};\r\n if (state.withBumpout) {\r\n self.drawLineBumpoutPoints = this.bumpoutOverlay.bumpoutInOrOut() === 'out' ?\r\n {\r\n point1: {x: point1.x - 9, y: point1.y + 9},\r\n point2: {x: point2.x - 9, y: point2.y + 9},\r\n point3: {x: point3.x - 9, y: point3.y - 9},\r\n point4: {x: point4.x - 9, y: point4.y - 9},\r\n } : {\r\n point1: {x: point1.x - 9, y: point1.y - 9},\r\n point2: {x: point2.x - 9, y: point2.y - 9},\r\n point3: {x: point3.x - 9, y: point3.y + 9},\r\n point4: {x: point4.x - 9, y: point4.y + 9},\r\n }\r\n }\r\n setPointsOutlineIntersection(prevLine, nextLine);\r\n self.drawLineFrom = {x: self.drawLineFrom.x, y: self.drawLineFrom.y - afterIntersectionMargin};\r\n self.drawLineTo = {x: self.drawLineTo.x, y: self.drawLineTo.y + afterIntersectionMargin};\r\n }\r\n break;\r\n case \"NORTHWEST\":\r\n case \"NORTHEAST\":\r\n case \"SOUTHWEST\":\r\n case \"SOUTHEAST\":\r\n default: {\r\n let distanceFromLine = 9;\r\n if (marginFrom) {\r\n const prevLineFrom = this.calculateRenderPosition(prevLine.from);\r\n if (isInnerCorner(parent, renderFrom, renderTo, prevLineFrom)) {\r\n marginFrom = marginFrom + 8;\r\n }\r\n renderFrom = getPointOnTheLine(renderFrom, renderTo, -marginFrom);\r\n }\r\n if (marginTo) {\r\n const nextLineTo = this.calculateRenderPosition(nextLine.to);\r\n if (isInnerCorner(parent, renderFrom, renderTo, nextLineTo)) {\r\n marginTo = marginTo + 8;\r\n }\r\n renderTo = getPointOnTheLine(renderTo, renderFrom, -marginTo);\r\n }\r\n\r\n [this.drawLineFrom, this.drawLineTo] = getParallelPoints(renderTo, renderFrom, distanceFromLine);\r\n setPointsOutlineIntersection(prevLine, nextLine);\r\n }\r\n break;\r\n// case \"SOUTHEAST\": {\r\n// if (rotateAnglePart && rotateAnglePart.angleDirection === \"right\") {\r\n// if (rotatedAngleValue < 90) {\r\n// self.drawLineFrom = getParralelPoint(renderFrom, self.calculateRenderPosition(nextParallelLine.to));\r\n// self.drawLineTo = getParralelPoint(self.calculateRenderPosition(nextLine.from), self.calculateRenderPosition(nextLine.to));\r\n// } else {\r\n// self.drawLineFrom = getParralelPoint(renderFrom, self.calculateRenderPosition(prevLine.from));\r\n// self.drawLineTo = getParralelPoint(renderTo, self.calculateRenderPosition(nextLine.to));\r\n// }\r\n// } else if (rotateAnglePart && rotateAnglePart.angleDirection === \"left\") {\r\n// self.drawLineFrom = getParralelPoint(renderFrom, self.calculateRenderPosition(prevLine.from));\r\n// self.drawLineTo = getParralelPoint(renderTo, self.calculateRenderPosition(prevParallelLine.from))\r\n// } else {\r\n// [this.drawLineFrom, this.drawLineTo] = getParallelPoints(renderTo, renderFrom, 9);\r\n//\r\n// RenderFigures.renderCircle(this.drawLineFrom, 12,1, '#63b141');\r\n// RenderFigures.renderCircle(this.drawLineTo, 10, 1);\r\n//\r\n// debugger // eslint-disable-line no-debugger\r\n//\r\n// // self.drawLineFrom = {x: renderFrom.x + 9, y: renderFrom.y - 9};\r\n// // self.drawLineTo = {x: renderTo.x + 9, y: renderTo.y - 9};\r\n// setPointsOutlineIntersection(prevLine, nextLine);\r\n// }\r\n// if (marginFrom) {\r\n// self.drawLineFrom = getPointBetweenPoints(self.drawLineFrom, self.drawLineTo, marginFrom)\r\n// }\r\n// if (marginTo) {\r\n// self.drawLineTo = getPointBetweenPoints(self.drawLineTo, self.drawLineFrom, marginTo)\r\n// }\r\n// break;\r\n// }\r\n// case \"NORTHEAST\": {\r\n// if (rotateAnglePart && rotateAnglePart.angleDirection === \"right\") {\r\n// self.drawLineFrom = getParralelPoint(renderFrom, self.calculateRenderPosition(nextParallelLine.to));\r\n// self.drawLineTo = getParralelPoint(renderTo, self.calculateRenderPosition(nextLine.to));\r\n// } else if (rotateAnglePart && rotateAnglePart.angleDirection === \"left\") {\r\n// if (rotatedAngleValue < 90) {\r\n// self.drawLineFrom = getParralelPoint(renderFrom, self.calculateRenderPosition(prevLine.from));\r\n// self.drawLineTo = getParralelPoint(renderTo, self.calculateRenderPosition(prevParallelLine.from));\r\n// } else {\r\n// // self.drawLineFrom = getParralelPoint(renderFrom, self.calculateRenderPosition(prevLine.from));\r\n// self.drawLineFrom = getParralelPoint(renderFrom, self.calculateRenderPosition(nextParallelLine.to));\r\n// self.drawLineTo = getParralelPoint(renderTo, self.calculateRenderPosition(nextLine.to));\r\n// }\r\n// } else {\r\n// // self.drawLineFrom = getParralelPoint(renderFrom, self.calculateRenderPosition(nextParallelLine.to));\r\n// // self.drawLineTo = getParralelPoint(renderTo, self.calculateRenderPosition(nextLine.to));\r\n// self.drawLineFrom = {x: renderFrom.x - 9, y: renderFrom.y - 9};\r\n// self.drawLineTo = {x: renderTo.x - 9, y: renderTo.y - 9};\r\n// setPointsOutlineIntersection(prevLine, nextLine);\r\n// }\r\n// if (marginFrom) {\r\n// self.drawLineFrom = getPointBetweenPoints(self.drawLineFrom, self.drawLineTo, marginFrom)\r\n// }\r\n// if (marginTo) {\r\n// self.drawLineTo = getPointBetweenPoints(self.drawLineTo, self.drawLineFrom, marginTo)\r\n// }\r\n// break;\r\n// }\r\n// case \"SOUTHWEST\": {\r\n// if (rotateAnglePart && rotateAnglePart.angleDirection === \"right\") {\r\n// if (rotatedAngleValue < 90 && rotateAnglePart && rotateAnglePart.shapeType !== \"wideangle\") {\r\n// self.drawLineFrom = getParralelPoint(renderFrom, self.calculateRenderPosition(prevLine.from));\r\n// self.drawLineTo = getParralelPoint(renderTo, self.calculateRenderPosition(nextLine.to));\r\n// } else {\r\n// self.drawLineFrom = getParralelPoint(renderFrom, self.calculateRenderPosition(prevLine.from));\r\n// self.drawLineTo = getParralelPoint(renderTo, self.calculateRenderPosition(prevParallelLine.from));\r\n// }\r\n// } else if (rotateAnglePart && rotateAnglePart.angleDirection === \"left\") {\r\n// if (rotatedAngleValue < 90) {\r\n// self.drawLineFrom = getParralelPoint(renderFrom, self.calculateRenderPosition(nextParallelLine.to));\r\n// self.drawLineTo = getParralelPoint(renderTo, self.calculateRenderPosition(nextLine.to));\r\n// } else {\r\n// self.drawLineFrom = getParralelPoint(renderFrom, self.calculateRenderPosition(prevLine.from));\r\n// self.drawLineTo = getParralelPoint(renderTo, self.calculateRenderPosition(prevParallelLine.from));\r\n// }\r\n// } else {\r\n// // self.drawLineFrom = getParralelPoint(renderFrom, self.calculateRenderPosition(nextParallelLine.to));\r\n// // self.drawLineTo = getParralelPoint(renderTo, self.calculateRenderPosition(nextLine.to));\r\n// self.drawLineFrom = {x: renderFrom.x + 9, y: renderFrom.y + 9};\r\n// self.drawLineTo = {x: renderTo.x + 9, y: renderTo.y + 9};\r\n// setPointsOutlineIntersection(prevLine, nextLine);\r\n// }\r\n// if (marginFrom) {\r\n// self.drawLineFrom = getPointBetweenPoints(self.drawLineFrom, self.drawLineTo, marginFrom)\r\n// }\r\n// if (marginTo) {\r\n// self.drawLineTo = getPointBetweenPoints(self.drawLineTo, self.drawLineFrom, marginTo)\r\n// }\r\n// break;\r\n// }\r\n// case \"NORTHWEST\": {\r\n// if (rotateAnglePart && rotateAnglePart.angleDirection === \"right\") {\r\n// self.drawLineFrom = getParralelPoint(renderFrom, self.calculateRenderPosition(prevLine.from));\r\n// self.drawLineTo = getParralelPoint(renderTo, self.calculateRenderPosition(prevParallelLine.from));\r\n// } else if (rotateAnglePart && rotateAnglePart.angleDirection === \"left\") {\r\n// if (rotatedAngleValue < 90) {\r\n// // self.drawLineFrom = getParralelPoint(renderFrom, self.calculateRenderPosition(prevLine.from));\r\n// self.drawLineFrom = getParralelPoint(renderFrom, self.calculateRenderPosition(nextParallelLine.to));\r\n// self.drawLineTo = getParralelPoint(renderTo, self.calculateRenderPosition(nextLine.to));\r\n// } else {\r\n// self.drawLineFrom = getParralelPoint(renderFrom, self.calculateRenderPosition(nextParallelLine.to));\r\n// self.drawLineTo = getParralelPoint(renderTo, self.calculateRenderPosition(nextLine.to));\r\n// }\r\n// } else {\r\n// // self.drawLineFrom = getParralelPoint(renderFrom, self.calculateRenderPosition(prevLine.from));\r\n// // self.drawLineTo = getParralelPoint(renderTo, self.calculateRenderPosition(nextLine.to));\r\n//\r\n// self.drawLineFrom = {x: renderFrom.x - 9, y: renderFrom.y + 9};\r\n// self.drawLineTo = {x: renderTo.x - 9, y: renderTo.y + 9};\r\n// setPointsOutlineIntersection(prevLine, nextLine);\r\n// }\r\n// if (marginFrom) {\r\n// self.drawLineFrom = getPointBetweenPoints(self.drawLineFrom, self.drawLineTo, marginFrom)\r\n// }\r\n// if (marginTo) {\r\n// self.drawLineTo = getPointBetweenPoints(self.drawLineTo, self.drawLineFrom, marginTo)\r\n// }\r\n// break;\r\n// }\r\n //default:\r\n }\r\n };\r\n const setPointsOutlineIntersection = (prevLine, nextLine) => {\r\n const fromBorderIntersectionPoint = getBorderFromIntersection(prevLine);\r\n const fromOutlineIntersectionPoint = getOutlineFromIntersection(prevLine);\r\n if ((fromBorderIntersectionPoint || fromOutlineIntersectionPoint)\r\n && !(this.from.isWithAngle())\r\n && !(this.from.isWithCorner())\r\n ) {\r\n let intersectionPoints = [];\r\n if (fromBorderIntersectionPoint) intersectionPoints.push(fromBorderIntersectionPoint);\r\n if (fromOutlineIntersectionPoint) intersectionPoints.push(fromOutlineIntersectionPoint);\r\n const closestIntersectionPoint = getClosestPoint(self.drawLineTo, intersectionPoints);\r\n\r\n // render dev circles intersection\r\n // if (lineDirection.orientation === \"NORTHWEST\") {\r\n // if (fromBorderIntersectionPoint) RenderFigures.renderCircle(fromBorderIntersectionPoint, 10,1, '#e5bf37')\r\n // if (fromOutlineIntersectionPoint) RenderFigures.renderCircle(fromOutlineIntersectionPoint, 10,1, '#de5f5f')\r\n // RenderFigures.renderCircle(closestIntersectionPoint, 20,1, '#63b141');\r\n // RenderFigures.renderCircle(self.drawLineTo, 25, 1);\r\n // debugger // eslint-disable-line no-debugger\r\n // }\r\n if (closestIntersectionPoint.x && closestIntersectionPoint.y) {\r\n this.drawLineFrom = {x: closestIntersectionPoint.x, y: closestIntersectionPoint.y};\r\n }\r\n }\r\n\r\n const toBorderIntersectionPoint = getBorderToIntersection(nextLine);\r\n const toOutlineIntersectionPoint = getOutlineToIntersection(nextLine);\r\n\r\n if ((toBorderIntersectionPoint || toOutlineIntersectionPoint)\r\n && !(this.to.isWithAngle())\r\n && !(this.to.isWithCorner())\r\n ) {\r\n let intersectionPoints = [];\r\n if (toBorderIntersectionPoint) { intersectionPoints.push(toBorderIntersectionPoint)}\r\n if (toOutlineIntersectionPoint) { intersectionPoints.push(toOutlineIntersectionPoint)}\r\n const closestIntersectionPoint = getClosestPoint(self.drawLineFrom, intersectionPoints);\r\n void RenderFigures.renderCircle;\r\n // if (lineDirection.orientation === \"SOUTHWEST\") {\r\n // if (toBorderIntersectionPoint) RenderFigures.renderCircle(toBorderIntersectionPoint, 10,1, '#e5bf37')\r\n // if (toOutlineIntersectionPoint) RenderFigures.renderCircle(toOutlineIntersectionPoint, 15,1, '#de5f5f')\r\n // RenderFigures.renderCircle(closestIntersectionPoint, 20, 1, '#63b141');\r\n // RenderFigures.renderCircle(self.drawLineFrom, 25);\r\n // debugger // eslint-disable-line no-debugger\r\n // }\r\n if (closestIntersectionPoint.x && closestIntersectionPoint.y) {\r\n this.drawLineTo = {x: closestIntersectionPoint.x, y: closestIntersectionPoint.y};\r\n }\r\n }\r\n\r\n // todo bumpout\r\n // self.drawLineBumpoutPoints = state.withBumpout ?\r\n // {\r\n // point1: {x: point1.x + 9, y: point1.y - 9},\r\n // point2: {x: point2.x + 9, y: point2.y - 9},\r\n // point3: {x: point3.x + 9, y: point3.y + 9},\r\n // point4: {x: point4.x + 9, y: point4.y + 9},\r\n // } : null;\r\n }\r\n // const getOutlineIntersectionPointWithPrevLine = () => {\r\n // const prevLine = parent.getPrevLine(this);\r\n // if (!prevLine.drawLineTo) {\r\n // debugger // eslint-disable-line no-debugger\r\n // prevLine.setLinePoints();\r\n // }\r\n //\r\n // const pointOnTheLine = getPointOnTheLine(this.drawLineTo, this.drawLineFrom, 300);\r\n // const pointOnThePrevLine = getPointOnTheLine(prevLine.drawLineFrom, prevLine.drawLineTo, 300);\r\n // console.log(\"this\", this);\r\n // debugger // eslint-disable-line no-debugger\r\n // return getIntersectCords(\r\n // this.drawLineFrom.x,\r\n // this.drawLineFrom.y,\r\n // pointOnTheLine.x,\r\n // pointOnTheLine.y,\r\n // pointOnThePrevLine.x,\r\n // pointOnThePrevLine.y,\r\n // prevLine.drawLineFrom.x,\r\n // prevLine.drawLineFrom.y,\r\n // );\r\n // }\r\n\r\n const getOutlineIntersectionPointWithNextTLine = () => {\r\n const nextLine = parent.getNextLine(this);\r\n nextLine.setLinePoints();\r\n const pointOnTheLine = getPointOnTheLine(this.drawLineTo, this.drawLineFrom, 1000);\r\n const pointOnTheNextLine = getPointOnTheLine(nextLine.drawLineFrom, nextLine.drawLineTo, 1000);\r\n return getIntersectCords(\r\n this.drawLineFrom.x,\r\n this.drawLineFrom.y,\r\n pointOnTheLine.x,\r\n pointOnTheLine.y,\r\n pointOnTheNextLine.x,\r\n pointOnTheNextLine.y,\r\n nextLine.drawLineFrom.x,\r\n nextLine.drawLineFrom.y,\r\n );\r\n }\r\n const getBorderToIntersection = (nextLine) => {\r\n let intersectionCords = false\r\n if (nextLine.drawLineTo) {\r\n const nextLineToPointField = nextLine.to.getPointField(false);\r\n const nextLineFromPointField = nextLine.from.getPointField(false);\r\n const pointOnTheLine = getPointOnTheLine(self.drawLineTo, self.drawLineFrom,25);\r\n const pointOnTheNextLine = getPointOnTheLine(nextLineFromPointField, nextLineToPointField, 25);\r\n\r\n intersectionCords = getIntersectCords(\r\n self.drawLineFrom.x,\r\n self.drawLineFrom.y,\r\n pointOnTheLine.x,\r\n pointOnTheLine.y,\r\n pointOnTheNextLine.x,\r\n pointOnTheNextLine.y,\r\n nextLineToPointField.x,\r\n nextLineToPointField.y,\r\n );\r\n // if (lineDirection.orientation === \"SOUTHWEST\") {\r\n // console.log(\"--------\");\r\n // console.log(\"pointOnTheLine\", pointOnTheLine);\r\n // console.log(\" self.drawLineFrom\", self.drawLineFrom);\r\n // console.log(\" self.drawLineTo\", self.drawLineTo);\r\n // console.log(\"--\");\r\n // console.log(\"pointOnTheNextLine\", pointOnTheNextLine);\r\n // console.log(\"nextLine.drawLineFrom\", nextLineFromPointField);\r\n // console.log(\" nextLine.drawLineTo\", nextLineToPointField);\r\n // console.log(\"intersectionCords\", intersectionCords);\r\n // debugger // eslint-disable-line no-debugger\r\n // }\r\n }\r\n\r\n return intersectionCords\r\n }\r\n\r\n const getBorderFromIntersection = (prevLine) => {\r\n let intersectionCords = false\r\n\r\n if (prevLine.drawLineFrom) {\r\n const prevLineToPointField = prevLine.to.getPointField(false);\r\n const prevLineFromPointField = prevLine.from.getPointField(false);\r\n const pointOnTheLineBeforeFrom = getPointOnTheLine(this.drawLineFrom, this.drawLineTo,25);\r\n const pointOnThePrevLine = getPointOnTheLine(prevLineToPointField, prevLineFromPointField, 25);\r\n intersectionCords = getIntersectCords(\r\n pointOnTheLineBeforeFrom.x,\r\n pointOnTheLineBeforeFrom.y,\r\n this.drawLineTo.x,\r\n this.drawLineTo.y,\r\n prevLineFromPointField.x,\r\n prevLineFromPointField.y,\r\n pointOnThePrevLine.x,\r\n pointOnThePrevLine.y,\r\n );\r\n // if (lineDirection.orientation === \"SOUTHWEST\") {\r\n // console.log(\"--------\");\r\n // console.log(\"pointOnTheLineBeforeFrom\", pointOnTheLineBeforeFrom);\r\n // console.log(\"self.drawLineFrom\", self.drawLineFrom);\r\n // console.log(\"self.drawLineTo\", self.drawLineTo);\r\n // console.log(\"--\");\r\n // console.log(\"pointOnThePrevLine\", pointOnThePrevLine);\r\n // console.log(\"prevLine.drawLineFrom\", prevLine.drawLineFrom);\r\n // console.log(\"prevLine.drawLineTo\", prevLine.drawLineTo);\r\n // console.log(\"intersectionCords\", intersectionCords);\r\n // debugger // eslint-disable-line no-debugger\r\n // }\r\n }\r\n\r\n return intersectionCords\r\n }\r\n\r\n function getOutlineFromIntersection (prevLine) {\r\n let intersectionCords = false\r\n\r\n if (prevLine.drawLineFrom) {\r\n const pointOnTheLineBeforeFrom = getPointOnTheLine(self.drawLineFrom, self.drawLineTo,15);\r\n const pointOnThePrevLine = getPointOnTheLine(prevLine.drawLineTo, prevLine.drawLineFrom, 15);\r\n intersectionCords = getIntersectCords(\r\n pointOnTheLineBeforeFrom.x,\r\n pointOnTheLineBeforeFrom.y,\r\n self.drawLineTo.x,\r\n self.drawLineTo.y,\r\n prevLine.drawLineFrom.x,\r\n prevLine.drawLineFrom.y,\r\n pointOnThePrevLine.x,\r\n pointOnThePrevLine.y,\r\n );\r\n // if (lineDirection.orientation === \"SOUTHWEST\") {\r\n // console.log(\"--------\");\r\n // console.log(\"pointOnTheLineBeforeFrom\", pointOnTheLineBeforeFrom);\r\n // console.log(\"self.drawLineFrom\", self.drawLineFrom);\r\n // console.log(\"self.drawLineTo\", self.drawLineTo);\r\n // console.log(\"--\");\r\n // console.log(\"pointOnThePrevLine\", pointOnThePrevLine);\r\n // console.log(\"prevLine.drawLineFrom\", prevLine.drawLineFrom);\r\n // console.log(\"prevLine.drawLineTo\", prevLine.drawLineTo);\r\n // console.log(\"intersectionCords\", intersectionCords);\r\n // debugger // eslint-disable-line no-debugger\r\n // }\r\n }\r\n return intersectionCords\r\n }\r\n\r\n function getOutlineToIntersection (nextLine) {\r\n let intersectionCords = false\r\n if (nextLine.drawLineTo) {\r\n const pointOnTheLine = getPointOnTheLine(self.drawLineTo, self.drawLineFrom,12);\r\n const pointOnTheNextLine = getPointOnTheLine(nextLine.drawLineFrom, nextLine.drawLineTo, 12);\r\n intersectionCords = getIntersectCords(\r\n self.drawLineFrom.x,\r\n self.drawLineFrom.y,\r\n pointOnTheLine.x,\r\n pointOnTheLine.y,\r\n pointOnTheNextLine.x,\r\n pointOnTheNextLine.y,\r\n nextLine.drawLineTo.x,\r\n nextLine.drawLineTo.y,\r\n );\r\n\r\n // if (lineDirection.orientation === \"SOUTHWEST\") {\r\n // console.log(\"--------\");\r\n // console.log(\"pointOnTheLine\", pointOnTheLine);\r\n // console.log(\" self.drawLineFrom\", self.drawLineFrom);\r\n // console.log(\" self.drawLineTo\", self.drawLineTo);\r\n // console.log(\"--\");\r\n // console.log(\"pointOnTheNextLine\", pointOnTheNextLine);\r\n // console.log(\"nextLine.drawLineFrom\", nextLine.drawLineFrom);\r\n // console.log(\"nextLine.drawLineTo\", nextLine.drawLineTo);\r\n // console.log(\"intersectionCords\", intersectionCords);\r\n // debugger // eslint-disable-line no-debugger\r\n // }\r\n }\r\n return intersectionCords\r\n }\r\n\r\n /**\r\n * Draw grey outline\r\n */\r\n const drawLine = (color, border) => {\r\n void border;\r\n self.setLinePoints();// dev remove to hide gray outline border\r\n self.ctx.beginPath();\r\n if (self.drawLineFrom && self.drawLineTo) {\r\n if (state.withBumpout) {\r\n self.ctx.moveTo(self.drawLineFrom.x, self.drawLineFrom.y);\r\n self.ctx.lineTo(self.drawLineBumpoutPoints.point1.x, self.drawLineBumpoutPoints.point1.y);\r\n\r\n self.ctx.moveTo(self.drawLineBumpoutPoints.point1.x, self.drawLineBumpoutPoints.point1.y);\r\n self.ctx.lineTo(self.drawLineBumpoutPoints.point2.x, self.drawLineBumpoutPoints.point2.y);\r\n\r\n self.ctx.moveTo(self.drawLineBumpoutPoints.point2.x, self.drawLineBumpoutPoints.point2.y);\r\n self.ctx.lineTo(self.drawLineBumpoutPoints.point3.x, self.drawLineBumpoutPoints.point3.y);\r\n\r\n self.ctx.moveTo(self.drawLineBumpoutPoints.point3.x, self.drawLineBumpoutPoints.point3.y);\r\n self.ctx.lineTo(self.drawLineBumpoutPoints.point4.x, self.drawLineBumpoutPoints.point4.y);\r\n\r\n self.ctx.lineTo(self.drawLineBumpoutPoints.point4.x, self.drawLineBumpoutPoints.point4.y);\r\n self.ctx.lineTo(self.drawLineTo.x, self.drawLineTo.y);\r\n } else {\r\n self.ctx.moveTo(self.drawLineFrom.x, self.drawLineFrom.y);\r\n self.ctx.lineTo(self.drawLineTo.x, self.drawLineTo.y);\r\n }\r\n }\r\n self.ctx.lineWidth = 8;\r\n self.ctx.strokeStyle = color;\r\n self.ctx.stroke();\r\n self.ctx.closePath();\r\n }\r\n\r\n const drawCorner = (color) => {\r\n self.ctx.beginPath();\r\n self.ctx.lineWidth = 8;\r\n self.ctx.strokeStyle = color;\r\n\r\n let\r\n renderTo = self.calculateRenderPosition(self.to),\r\n renderFrom = self.calculateRenderPosition(self.from),\r\n //radius = Math.sqrt(Math.pow(self.to.arcLength, 2) / 2) * config.scale + 18,\r\n radius = self.to.arcLength * config.scale,\r\n nextLine = parent.getNextLine(self);\r\n\r\n lineDirection = parent.getAngleDirection(self);\r\n // var midHyp = getMidPoint(ap.line1, ap.line2);\r\n if (lineDirection.orientation !== \"horizontal\" && lineDirection.orientation !== \"vertical\") {\r\n //prevLine = parent.getPrevLine(self);\r\n //nextLine = parent.getNextLine(self);\r\n //prevParallelLine = parent.getPrevLine(prevLine);\r\n }\r\n\r\n switch (lineDirection.orientation) {\r\n case \"horizontal\":\r\n case \"vertical\":\r\n case \"NORTHWEST\":\r\n case \"NORTHEAST\":\r\n case \"SOUTHWEST\":\r\n case \"SOUTHEAST\": {\r\n const interSectionPoint = getOutlineIntersectionPointWithNextTLine();\r\n //v1\r\n const nextLineTo = this.calculateRenderPosition(nextLine.to);\r\n if (isInnerCorner(parent, renderFrom, renderTo, nextLineTo)) {\r\n radius = radius - 18\r\n if (radius < -8) { // set minimum radius to display\r\n radius = -8\r\n }\r\n }\r\n this.ctx.moveTo(this.drawLineTo.x, this.drawLineTo.y);\r\n this.ctx.arcTo(interSectionPoint.x, interSectionPoint.y, nextLine.drawLineFrom.x, nextLine.drawLineFrom.y, radius + 9);\r\n\r\n this.ctx.moveTo(nextLine.drawLineFrom.x, nextLine.drawLineFrom.y);\r\n this.ctx.arcTo(interSectionPoint.x, interSectionPoint.y, this.drawLineTo.x, this.drawLineTo.y, radius + 9);\r\n //v2\r\n // this.ctx.moveTo(this.drawLineFrom.x, this.drawLineFrom.y);\r\n // this.ctx.arcTo(interSectionPoint.x, interSectionPoint.y, nextLine.drawLineFrom.x, nextLine.drawLineFrom.y, radius + 9);\r\n // this.ctx.stroke();\r\n // this.ctx.closePath();\r\n //\r\n // this.ctx.beginPath();\r\n // this.ctx.strokeStyle = design.aroundLineColor;\r\n // this.ctx.moveTo(this.drawLineFrom.x, this.drawLineFrom.y);\r\n // this.ctx.lineTo(this.drawLineTo.x, this.drawLineTo.y);\r\n\r\n //v3\r\n //this.ctx.moveTo(this.drawLineTo.x, this.drawLineTo.y);\r\n //this.ctx.quadraticCurveTo(renderTo.x, renderTo.y, nextLine.drawLineFrom.x, nextLine.drawLineFrom.y);\r\n break;\r\n }\r\n default:\r\n break;\r\n }\r\n\r\n self.ctx.stroke();\r\n self.ctx.closePath();\r\n }\r\n\r\n const drawAngle = (color) => {\r\n let strokeStyle;\r\n\r\n this.ctx.beginPath();\r\n this.ctx.lineWidth = 8;\r\n\r\n this.ctx.strokeStyle = design.aroundLineColor;\r\n this.ctx.lineCap = 'square';\r\n //this.ctx.lineCap = 'round';\r\n\r\n if (this.lineCorner.state.isHovering && EventManager.getCursor().indexOf(\"delete\") >= 0\r\n && (this.lineCorner.state.withEdge || this.lineCorner.state.withBacksplash || this.lineCorner.state.withWall || (this.lineCorner.state.attachedItems && this.lineCorner.state.attachedItems.isWithEndCap))) {\r\n strokeStyle = 'rgba(208,1,27,0.5)';\r\n } else if (this.lineCorner.state.withEdge) {\r\n strokeStyle = Color.getOutlineStrokeStyle('edge');\r\n } else if (this.lineCorner.state.withBacksplash) {\r\n strokeStyle = Color.getOutlineStrokeStyle('backsplash');\r\n } else if (this.lineCorner.state.attachedItems && this.lineCorner.state.attachedItems.isWithEndCap) {\r\n strokeStyle = Color.getOutlineStrokeStyle(RESOURCE_ATTACHED_TO_TYPE.end_cap);\r\n } else if (this.lineCorner.state.withWall) {\r\n strokeStyle = Color.getOutlineStrokeStyle('wall');\r\n } else if (config.highlight.lines && this.lineCorner.state.isHovering) {\r\n strokeStyle = Color.getOutlineHoverStrokeStyle();\r\n this.ctx.strokeStyle = strokeStyle;\r\n } else if (config.highlight.lines && config.highlight.demoShow && (config.highlight.id !== state.withId)) {\r\n strokeStyle = Color.getOutlineHoverStrokeStyle();\r\n }\r\n\r\n let angleLinePoints = this.lineCorner.getAnglePoints();\r\n\r\n this.ctx.strokeStyle = strokeStyle ? strokeStyle : color;\r\n this.ctx.moveTo(angleLinePoints.cord1.x, angleLinePoints.cord1.y);\r\n this.ctx.lineTo(angleLinePoints.cord2.x, angleLinePoints.cord2.y);\r\n this.ctx.lineTo(angleLinePoints.cord3.x, angleLinePoints.cord3.y);\r\n this.ctx.lineTo(angleLinePoints.cord4.x, angleLinePoints.cord4.y);\r\n\r\n this.ctx.moveTo(angleLinePoints.cord4.x, angleLinePoints.cord4.y);\r\n\r\n //this.ctx.moveTo(angleLinePoints.cord2.x, angleLinePoints.cord2.y);\r\n //this.ctx.lineTo(angleLinePoints.cord3.x, angleLinePoints.cord3.y);\r\n this.ctx.stroke();\r\n this.ctx.closePath();\r\n\r\n //purple line v2\r\n // this.ctx.beginPath();\r\n // this.ctx.strokeStyle = strokeStyle ? strokeStyle : color;\r\n // this.ctx.moveTo(angleLinePoints.cordCornerFrom.x, angleLinePoints.cordCornerFrom.y);\r\n // this.ctx.lineTo(angleLinePoints.cordCornerTo.x, angleLinePoints.cordCornerTo.y);\r\n\r\n //purple line v3\r\n // this.ctx.beginPath();\r\n // this.ctx.strokeStyle = color;\r\n // this.ctx.moveTo(angleLinePoints.cordCornerFrom.x, angleLinePoints.cordCornerFrom.y);\r\n // this.ctx.lineTo(angleLinePoints.cordCornerTo.x, angleLinePoints.cordCornerTo.y);\r\n\r\n this.ctx.stroke();\r\n this.ctx.closePath();\r\n }\r\n\r\n this.get45CornerLegDistanceScaled = () => {\r\n return get45CornerLegDistanceByHypotenuse(this.to.angle || this.to.arcLength) * config.scale\r\n };\r\n\r\n this.get45CornerLegDistance = () => {\r\n return get45CornerLegDistanceByHypotenuse(this.to.angle || this.to.arcLength)\r\n };\r\n\r\n this.deleteBumpout = () => {\r\n state.withBumpout = false;\r\n this.bumpoutOverlay.destroy();\r\n this.overlay.setMidpointOffset(0, 0);\r\n let bumpoutPoints = this.bumpoutOverlay.getBumpoutPoints();\r\n for (const pointName in bumpoutPoints) {\r\n if (bumpoutPoints.hasOwnProperty(pointName)) {\r\n bumpoutPoints[pointName].destroy();\r\n }\r\n }\r\n this.bumpoutOverlay = null;\r\n };\r\n\r\n this.deleteMitered = () => {\r\n state.isWithMitered = false;\r\n this.miteredOverlay.destroy();\r\n this.miteredOverlay = null;\r\n this.overlay.setMidpointOffset(0, 0);\r\n this.createLineLength();\r\n };\r\n\r\n this.deleteUnderlayment = () => {\r\n state.isWithUnderlayment = false;\r\n this.underlaymentOverlay.destroy();\r\n this.underlaymentOverlay = null;\r\n this.overlay.setMidpointOffset(0, 0);\r\n this.createLineLength();\r\n };\r\n\r\n this.deleteWaterfallTool = () => {\r\n this.waterfallOverlay.destroy();\r\n workspaceControllers.waterfall.destroy(this.waterfallOverlay);\r\n this.waterfallOverlay = null;\r\n };\r\n\r\n this.createLineLength = () => {\r\n this.overlay = new lineLength();\r\n this.overlay.init(self);\r\n };\r\n\r\n this.deleteAttachedItem = () => {\r\n state.withEdge = false;\r\n state.isWithWaterfallEdge = false;\r\n state.isWithPeninsulaUnderwrapEdge = false;\r\n state.withBacksplash = false;\r\n state.withWall = false;\r\n state.withBumpout = false;\r\n state.withId = null;\r\n for (const attachedItemsKey in state.attachedItems) {\r\n state.attachedItems[attachedItemsKey] = false\r\n }\r\n this.attachedShape = null;\r\n if (this.overlay) {\r\n this.overlay.removeLineText();\r\n }\r\n\r\n if (this.bumpoutOverlay) {\r\n this.deleteBumpout();\r\n }\r\n if (this.labelOverlay) {\r\n this.labelOverlay.destroy();\r\n }\r\n if (this.titleOverlay) {\r\n this.titleOverlay.destroy();\r\n }\r\n if (this.miteredOverlay) {\r\n this.deleteMitered();\r\n }\r\n if (this.underlaymentOverlay) {\r\n this.deleteUnderlayment();\r\n }\r\n if (this.waterfallOverlay) {\r\n this.deleteWaterfallTool();\r\n }\r\n sqftSlabManager.deleteSlabBacksplashByLine(this);\r\n store.dispatch(deleteResourceAttachedTo(RESOURCE_TYPE.attachedToLine, this));\r\n };\r\n\r\n this.addEdgeToLine = function(edgeName, id) {\r\n state.withEdge = true;\r\n state.withBacksplash = false;\r\n state.withWall = false;\r\n state.isWithWaterfallEdge = false;\r\n state.isWithPeninsulaUnderwrapEdge = false;\r\n state.withId = id;\r\n for (const attachedItemKey in state.attachedItems) {\r\n state.attachedItems[attachedItemKey] = false\r\n }\r\n self.overlay.renderEdgeText(edgeName);\r\n };\r\n\r\n this.addBacksplashToLine = (backsplashName, type, featureId, backsplashHeight) => {\r\n if (type === \"wall\") {\r\n state.withWall = true;\r\n state.withBacksplash = false;\r\n } else {\r\n state.withBacksplash = true;\r\n state.withWall = false;\r\n }\r\n state.withEdge = false;\r\n state.backsplashName = backsplashName;\r\n state.backsplashType = type;\r\n state.isWithWaterfallEdge = false;\r\n state.isWithPeninsulaUnderwrapEdge = false;\r\n state.withId = featureId;\r\n this.setBacksplashHeight(backsplashHeight);\r\n for (const attachedItemKey in state.attachedItems) {\r\n state.attachedItems[attachedItemKey] = false\r\n }\r\n self.overlay.renderBacksplashText(backsplashName, type);\r\n };\r\n\r\n this.addCrownMoldingToLine = (crownMoldingName, type, id) => {\r\n state.withBacksplash = false;\r\n state.withWall = false;\r\n state.withEdge = false;\r\n state.isWithWaterfallEdge = false;\r\n state.isWithPeninsulaUnderwrapEdge = false;\r\n state.attachedItems.isWithCrownMolding = true;\r\n state.withId = id;\r\n //this.overlay.renderBacksplashText(crownMoldingName, type);\r\n };\r\n\r\n this.addEndCapToLine = (endCapName, type, id) => {\r\n state.withBacksplash = false;\r\n state.withWall = false;\r\n state.withEdge = false;\r\n state.isWithWaterfallEdge = false;\r\n state.isWithPeninsulaUnderwrapEdge = false;\r\n state.attachedItems.isWithEndCap = true;\r\n state.attachedItems.isWithCrownMolding = false;\r\n state.withId = id;\r\n //this.overlay.renderBacksplashText(crownMoldingName, type);\r\n };\r\n\r\n this.addBumpoutToLine = function(mousePos, pointName, id) {\r\n void mousePos;\r\n void pointName;\r\n void id;\r\n //todo allow add multiple bumpout\r\n if (!state.withBumpout) {\r\n //todo fix rotation\r\n if (self.getOrientation() === orientation.VERTICAL || self.getOrientation() === orientation.HORIZONTAL) {\r\n state.withBumpout = true;\r\n self.bumpoutOverlay = new bumpout();\r\n self.bumpoutOverlay.init(self);\r\n }\r\n }\r\n };\r\n\r\n this.addMiteredToLine = () => {\r\n for (const attachedItemKey in state.attachedItems) {\r\n state.attachedItems[attachedItemKey] = false\r\n }\r\n if (!state.isWithMitered) {\r\n this.deleteAttachedItem();\r\n state.isWithMitered = true;\r\n if (workspace.miteredController === null) {\r\n workspace.miteredController = new MiteredController();\r\n }\r\n this.miteredOverlay = workspace.miteredController.createMiteredOverlay(this);\r\n this.miteredOverlay.init();\r\n\r\n return this.miteredOverlay;\r\n }\r\n\r\n return this.miteredOverlay\r\n };\r\n\r\n this.addUnderlaymentToLine = () => {\r\n for (const attachedItemKey in state.attachedItems) {\r\n state.attachedItems[attachedItemKey] = false\r\n }\r\n if (!state.isWithUnderlayment) {\r\n //todo fix rotation\r\n this.deleteAttachedItem();\r\n if (this.getOrientation() === orientation.VERTICAL || this.getOrientation() === orientation.HORIZONTAL) {\r\n state.isWithUnderlayment = true;\r\n if (workspace.underlaymentController === null) {\r\n workspace.underlaymentController = new UnderlaymentController();\r\n }\r\n this.underlaymentOverlay = workspace.underlaymentController.createUnderlaymentOverlay(this);\r\n this.underlaymentOverlay.init();\r\n\r\n return this.underlaymentOverlay;\r\n }\r\n }\r\n\r\n return this.underlaymentOverlay\r\n };\r\n\r\n this.addWaterfallToLine = (name = RESOURCE_ATTACHED_TO_NAME.waterfall, waterfallImportData) => {\r\n for (const attachedItemKey in state.attachedItems) {\r\n state.attachedItems[attachedItemKey] = false\r\n }\r\n if (!this.isWithWaterfallToolEdge()) {\r\n this.deleteAttachedItem();\r\n if (this.getOrientation() === orientation.VERTICAL || this.getOrientation() === orientation.HORIZONTAL) {\r\n state.isWithWaterfallEdge = true;\r\n state.isWithPeninsulaUnderwrapEdge = false;\r\n state.withBacksplash = false;\r\n state.withWall = false;\r\n state.withEdge = false;\r\n this.waterfallOverlay = workspaceControllers.waterfall.createWaterfallOverlay(this, waterfallImportData);\r\n createSlabModeWaterfallShapes();\r\n this.overlay.renderWaterfallText(name, RESOURCE_ATTACHED_TO_TYPE.waterfall);\r\n\r\n return this.waterfallOverlay;\r\n }\r\n }\r\n return this.waterfallOverlay\r\n };\r\n\r\n this.addPeninsulaUnderwrapToLine = () => {\r\n for (const attachedItemKey in state.attachedItems) {\r\n state.attachedItems[attachedItemKey] = false\r\n }\r\n if (!this.isWithPeninsulaUnderwrapEdge()) {\r\n if (this.getOrientation() === orientation.VERTICAL || this.getOrientation() === orientation.HORIZONTAL) {\r\n state.isWithPeninsulaUnderwrapEdge = true;\r\n state.isWithWaterfallEdge = false;\r\n state.withBacksplash = false;\r\n state.withWall = false;\r\n state.withEdge = false;\r\n this.waterfallOverlay = workspaceControllers.waterfall.createPeninsulaUnderwrapOverlay(this);\r\n createSlabModeWaterfallShapes();\r\n\r\n return this.waterfallOverlay;\r\n }\r\n }\r\n return this.waterfallOverlay\r\n };\r\n\r\n this.renderLineField = (ctx) => {\r\n\r\n this.ctx = ctx;\r\n\r\n if (config.highlight.tutorial && self.highLightedByTutorial) {\r\n drawLine('#E3E1E3');\r\n highLightBorder('#b263a8');\r\n if (self.tutorialImage) {\r\n drawResizeCursor();\r\n }\r\n } else if (config.highlight.lines && state.isHovering) {\r\n\r\n switch (config.highlight.type) {\r\n case 'edge':\r\n if (config.highlight.id !== state.withId) {\r\n drawLine(COLOR_THEMES[config.activeTheme].active_transparent);\r\n } else {\r\n drawLine(COLOR_THEMES[config.activeTheme].active);\r\n }\r\n break;\r\n case RESOURCE_ATTACHED_TO_TYPE.backsplash:\r\n case RESOURCE_ATTACHED_TO_TYPE.waterfall:\r\n if (config.highlight.id !== state.withId) {\r\n drawLine(COLOR_THEMES[config.activeTheme].primary_transparent);\r\n } else {\r\n drawLine(COLOR_THEMES[config.activeTheme].primary);\r\n }\r\n break;\r\n case 'wall':\r\n if (config.highlight.id !== state.withId) {\r\n drawLine('rgba(0,0,0,0.5)');\r\n } else {\r\n drawLine(COLOR_THEMES[config.activeTheme].primary);\r\n }\r\n break;\r\n case RESOURCE_ATTACHED_TO_TYPE.end_cap:\r\n if (config.highlight.id !== state.withId) {\r\n drawLine(COLOR.red_transparent);\r\n } else {\r\n drawLine(COLOR.red);\r\n }\r\n break;\r\n default:\r\n drawLine(COLOR_THEMES[config.activeTheme].active_transparent);\r\n break;\r\n }\r\n\r\n } else if (config.highlight.lines && config.highlight.demoShow && (config.highlight.id !== state.withId)) {\r\n switch (config.highlight.type) {\r\n case 'edge':\r\n default:\r\n drawLine(COLOR_THEMES[config.activeTheme].active_transparent);\r\n break;\r\n case RESOURCE_ATTACHED_TO_TYPE.backsplash:\r\n case RESOURCE_ATTACHED_TO_TYPE.end_cap:\r\n case RESOURCE_ATTACHED_TO_TYPE.waterfall:\r\n drawLine(COLOR_THEMES[config.activeTheme].primary_transparent);\r\n break;\r\n case 'wall':\r\n drawLine('rgba(0,0,0,0.5)');\r\n break;\r\n }\r\n } else if (this.blink.isHighlightedLightOn) {\r\n if (state.withEdge || this.isWithPeninsulaUnderwrapEdge()) {\r\n drawLine(COLOR_THEMES[config.activeTheme].active_transparent);\r\n } else if (state.withBacksplash || state.withBumpout || this.isWithWaterfallToolEdge()) {\r\n drawLine(COLOR_THEMES[config.activeTheme].primary_transparent);\r\n } else if (state.withWall) {\r\n drawLine('rgba(0,0,0,0.5)');\r\n } else if (state.attachedItems && state.attachedItems.isWithEndCap) {\r\n drawLine(COLOR.red_transparent);\r\n }\r\n } else {\r\n if (workspace.getAllowEdges() && workspace.getAllowLineHighlight()) {\r\n highLightBorder('#b263a8');\r\n }\r\n\r\n if (config.workspace.debug || state.isHovering && !config.highlight.lines && workspace.getAllowEdges()) {\r\n highLightBorder('#b263a8');\r\n }\r\n\r\n const orientation = this.getLineDirection().orientation;\r\n const isBumpoutHighlighted = workspace.getAllowBumpoutEdges() && workspace.getAllowLineHighlight();\r\n const isMiteredHighlighted = workspace.getAllowMiteredEdges() && workspace.getAllowLineHighlight();\r\n if ((isBumpoutHighlighted || isMiteredHighlighted)\r\n && (orientation === \"vertical\" || orientation === \"horizontal\")\r\n ) {\r\n highLightBorder(COLOR_THEMES[config.activeTheme].primary);\r\n }\r\n\r\n if (config.workspace.debug\r\n || state.isHovering && !config.highlight.lines\r\n && (\r\n (workspace.getAllowBumpoutEdges() || workspace.getAllowMiteredEdges())\r\n && (orientation === \"vertical\" || orientation === \"horizontal\")\r\n )\r\n ) {\r\n highLightBorder(COLOR_THEMES[config.activeTheme].primary);\r\n }\r\n\r\n if (state.isHovering && EventManager.getCursor().indexOf(\"delete\") >= 0\r\n && (state.withEdge\r\n || state.withBacksplash\r\n || (state.attachedItems && state.attachedItems.isWithEndCap)\r\n || state.withWall\r\n || this.isWithPeninsulaUnderwrapEdge()\r\n || this.isWithWaterfallToolEdge())\r\n ) {\r\n drawLine('rgba(208,1,27,0.5)');\r\n } else if (state.withEdge || this.isWithPeninsulaUnderwrapEdge()) {\r\n drawLine(COLOR_THEMES[config.activeTheme].active);\r\n if (self.tutorialImage) {\r\n drawResizeCursor();\r\n }\r\n } else if (state.withBacksplash) {\r\n drawLine(COLOR_THEMES[config.activeTheme].primary);\r\n } else if (this.isWithWaterfallToolEdge()) {\r\n drawLine(COLOR_THEMES[config.activeTheme].primary);\r\n } else if (state.withWall) {\r\n drawLine('#000000');\r\n } else if (state.withBumpout) {\r\n drawLine('#E3E1E3'); //todo enable border\r\n } else if (state.attachedItems && state.attachedItems.isWithEndCap) {\r\n drawLine(COLOR.red);\r\n } else {\r\n drawLine('#E3E1E3');\r\n }\r\n\r\n }\r\n\r\n if (self.to.arcLength > 0) {\r\n if (EventManager.getCursor().indexOf(\"delete\") >= 0 && !state.isHovering && self.to.isOverPointField()) {\r\n drawCorner('rgba(208,1,27,0.5)');\r\n } else {\r\n drawCorner(\"#b263a8\")\r\n }\r\n }\r\n\r\n //todo move this to lineCorner\r\n if (self.to.angle > 0) {\r\n if (EventManager.getCursor().indexOf(\"delete\") >= 0\r\n && !state.isHovering\r\n && (self.to.isOverPointField() || self.lineCorner.state.isCornerLineHovering) // todo perhaps hover over Point should be removed?\r\n ) {\r\n drawAngle('rgba(208,1,27,0.5)');\r\n } else {\r\n drawAngle(\"#b263a8\")\r\n }\r\n }\r\n ctx.restore();\r\n\r\n }\r\n}\r\n","import uuid from \"uuid\";\r\nimport _ from 'lodash';\r\n\r\n//todo sqft-react\r\nimport EventManager from \"./../../store/sqftEventManager\";\r\nimport PointRadius from \"./overlays/pointRadius\";\r\nimport workspace from \"../workspace\";\r\nimport sqftConfig from \"../../store/sqftConfig\";\r\nimport COLOR_THEMES, {COLOR} from \"../../store/colorThemes\";\r\n// import Radius from \"../controls/radius\";\r\nimport FitSize from \"../../../../helpers/sqftFitSize\";\r\nimport SqftStore from \"../../store/sqftStore\";\r\nimport store from \"../../../../../../store\";\r\nimport sqftShape from \"./sqftShape\";\r\nimport line from \"./line\";\r\nimport {\r\n getMidPoint,\r\n getPointOnTheLine,\r\n isDisabledInPopupWithParents\r\n} from \"../../../../helpers/sqftHelper\";\r\nimport config from \"../../store/sqftConfig\";\r\nimport {isDisabledInPopupShouldBeHidden, SIDEBAR_NAVIGATION_BUTTONS} from \"../../../../constants\";\r\nimport MiteredOverlay from \"./overlays/mitered\";\r\nimport {getAngleBetween3Points} from \"../../../../helpers/shapeHelper\";\r\n//import MiteredOverlay from \"../overlays/mitered\";\r\nimport {updateSQFTCalculations} from \"../../../../../../actions/sqftFunctions\";\r\nimport {isSFTCabinetsGroup} from \"../../../../helpers/sqftNavigationHelper\";\r\nimport {renderResetSeamPopup, shouldResetSlabModePopupOnPointMoveBeDisplayed} from \"../../canvasPopup/resetSeam\";\r\nimport sqftShapeManager from \"../../store/sqftShapeManager\";\r\n\r\nexport const allowedNavItemsForMovingPoint = [\r\n SIDEBAR_NAVIGATION_BUTTONS.freeDraw,\r\n SIDEBAR_NAVIGATION_BUTTONS.resize\r\n];\r\n\r\nexport default function (x, y, direction, corner, canBeMoved = true) {\r\n //private variables\r\n let self = this,\r\n parent = null,\r\n state = {\r\n isMovable: false,\r\n mouseDown: false,\r\n mouseDownPosition: {},\r\n selected: false,\r\n isHovering: false,\r\n mousePos: {},\r\n pointWasMoved: false,\r\n canBeMoved,\r\n miteredFeatureId: null,\r\n },\r\n fillStyle = \"#E3E1E3\",\r\n fillStyleEdge = COLOR_THEMES[sqftConfig.activeTheme].active,\r\n fillStyleWhite = \"#FFFFFF\",\r\n fillStyleBlack = \"#4a4a4a\",\r\n fillStyleDelete = \"#e77f8d\", //\"rgba(253,2,33, 0.5)\",\r\n fillStyleBlue = COLOR_THEMES[sqftConfig.activeTheme].primary,\r\n //highlightFillStyle = \"rgba(0,255,0,0.5)\",\r\n //hoverFillStyle = \"#D0011B\",\r\n radiusFillStyle = \"#b263a8\",\r\n translateX,\r\n translateY,\r\n pointRadiusOverlay = null;\r\n //public properties\r\n this.id = uuid();\r\n this.pos = {x, y};\r\n this.posSlab = {\r\n x: x ? JSON.parse(JSON.stringify(x)) : 0,\r\n y: y ? JSON.parse(JSON.stringify(y)) : 0\r\n };\r\n Object.defineProperty(this, \"x\", {\r\n set: (value) => {\r\n setPointWasChangedInRegularMode();\r\n if (SqftStore.isRegularMode() && shouldResetSlabModePopupOnPointMoveBeDisplayed(this.getGrandParent())) {\r\n renderResetSeamPopup(this.getGrandParent())\r\n }\r\n return SqftStore.isSlabMode() ? this.posSlab.x = parseFloat(value) : this.pos.x = parseFloat(value);\r\n },\r\n get: () => {\r\n if (this.pos === undefined) {\r\n console.log(\"point pos not defined\");\r\n return 0;\r\n }\r\n return SqftStore.isSlabMode() ? this.posSlab.x : this.pos.x;\r\n }\r\n });\r\n Object.defineProperty(this, \"y\", {\r\n set: (value) => {\r\n setPointWasChangedInRegularMode();\r\n if (SqftStore.isRegularMode() && shouldResetSlabModePopupOnPointMoveBeDisplayed(this.getGrandParent())) {\r\n renderResetSeamPopup(this.getGrandParent())\r\n }\r\n return SqftStore.isSlabMode() ? this.posSlab.y = value : this.pos.y = value;\r\n },\r\n get: () => {\r\n if (this.pos === undefined) {\r\n console.log(\"point pos not defined\");\r\n return 0;\r\n }\r\n return SqftStore.isSlabMode() ? this.posSlab.y : this.pos.y;\r\n }\r\n });\r\n this.arcLength = 0;\r\n this.angle = 0;\r\n this.featureId = null;\r\n this.pointDirection = direction;\r\n this.corner = corner;\r\n this.renderAngleCircle = false;\r\n this.renderAngleArc = false;\r\n this.angleIsChanged = false;\r\n this.layout = null;\r\n this.rotateAnglePart = null; // link to the whole rotation part\r\n this.exportAndImportProperties = [\r\n \"id\", \"x\", \"y\", \"pos\", \"posSlab\", \"arcLength\", \"angle\", \"pointDirection\", \"corner\", \"rotateAnglePart\", \"angleIsChanged\",\r\n \"renderAngleCircle\", \"renderAngleArc\", \"featureId\"\r\n ];\r\n this.isHidden = () => {\r\n const reduxState = store.getState();\r\n let isShowSlabTool = reduxState.sqftSlabState.isShowSlabTool;\r\n\r\n const shape = this.getGrandParent();\r\n\r\n return !!(\r\n isShowSlabTool\r\n || (shape && shape.shapeCabinet)\r\n || (shape && shape.shapeSpacer)\r\n );\r\n }\r\n this.setPos = (value) => {\r\n this.pos = value\r\n }\r\n this.setPosSlab = (value) => {\r\n this.posSlab = value\r\n }\r\n this.isWithAngle = () => {\r\n return this.angle > 0\r\n }\r\n this.isWithCorner = () => {\r\n return this.arcLength > 0\r\n }\r\n //private functions\r\n // var snappedPos = function(pos) {\r\n // var scaledGridSize = sqftConfig.workspace.getScaledGridSize(),\r\n // newX = Math.round(self.x / scaledGridSize) * scaledGridSize,\r\n // newY = Math.round(self.y / scaledGridSize) * scaledGridSize;\r\n //\r\n // return {\r\n // x: newX,\r\n // y: newY\r\n // };\r\n // };\r\n this.getMiteredFeatureId = () => {\r\n return state.miteredFeatureId\r\n }\r\n this.setMiteredFeatureId = (id) => {\r\n state.miteredFeatureId = id\r\n }\r\n const setPointWasChangedInRegularMode = () => {\r\n const regularMode = SqftStore.isRegularMode();\r\n regularMode ? setPointWasChanged() : null;\r\n }\r\n const setPointWasChanged = () => {\r\n let parent = this.getParent();\r\n if (parent && parent.hasOwnProperty('getParent')) {\r\n let shape = parent.getParent();\r\n if (shape instanceof line) {\r\n shape.getParent().setIsPointsChanged(true);\r\n } else if (shape instanceof sqftShape) {\r\n shape.setIsPointsChanged(true);\r\n }\r\n }\r\n }\r\n const setPointWasMoved = () => {\r\n let parent = this.getParent();\r\n if (parent && parent.hasOwnProperty('getParent')) {\r\n let shape = parent.getParent();\r\n if (shape instanceof line) {\r\n shape.getParent().isPointsMoved = true;\r\n } else if (shape instanceof sqftShape) {\r\n shape.isPointsMoved = true;\r\n }\r\n }\r\n }\r\n const isMovable = () => {\r\n let shape = parent.getParent();\r\n\r\n return (state.isMovable || shape.getState().isPointsMovable);\r\n }\r\n\r\n function setTranslates() {\r\n switch (self.pointDirection) {\r\n case \"lefttop\":\r\n translateX = -10;\r\n translateY = -9;\r\n break;\r\n case \"righttop\":\r\n translateX = 9;\r\n translateY = -9;\r\n break;\r\n case \"rightbottom\":\r\n translateX = 9;\r\n translateY = 10;\r\n break;\r\n case \"leftbottom\":\r\n translateX = -10;\r\n translateY = 10;\r\n break;\r\n default:\r\n translateX = 0;\r\n translateY = 0;\r\n break;\r\n }\r\n }\r\n\r\n const onMouseMove = (mousePos, e) => {\r\n state.mousePos = mousePos;\r\n state.isHovering = this.isOverPointField();\r\n if (e.terminate) {\r\n state.isHovering = false;\r\n return false;\r\n }\r\n\r\n if (state.mouseDown) {\r\n EventManager.setCursor('move', this, true);\r\n if (isMovable()) {\r\n if (shouldResetSlabModePopupOnPointMoveBeDisplayed(this.getGrandParent())) {\r\n renderResetSeamPopup(this.getGrandParent());\r\n } else {\r\n this.movePosition(mousePos);\r\n }\r\n }\r\n }\r\n\r\n if (sqftConfig.highlight.points && state.isHovering) {\r\n EventManager.stealCursor();\r\n EventManager.setCursor('pointer', self);\r\n return true;\r\n } else {\r\n EventManager.resetCursor(self);\r\n }\r\n return false;\r\n }\r\n\r\n const onMouseUp = (mousePos, e) => {\r\n void mousePos;\r\n void e;\r\n state.mouseDown = false;\r\n state.mouseDownPosition = null;\r\n // if (state.isHovering) {\r\n // let shape = parent.getParent();\r\n // if (shape instanceof sqftShape) {\r\n // shape.setIsPointsMovable(false);\r\n // }\r\n // }\r\n }\r\n const canPointBeMoved = () => {\r\n const reduxState = store.getState();\r\n const activeButton = reduxState.sqftMenuState.activeButton;\r\n const isShowSlabTool = reduxState.sqftSlabState.isShowSlabTool;\r\n\r\n // const disallowedNavItems = [\r\n // SIDEBAR_NAVIGATION_BUTTONS.edge,\r\n // SIDEBAR_NAVIGATION_BUTTONS.rotate,\r\n // SIDEBAR_NAVIGATION_BUTTONS.text,\r\n // SIDEBAR_NAVIGATION_BUTTONS.angle,\r\n // SIDEBAR_NAVIGATION_BUTTONS.backsplash,\r\n // SIDEBAR_NAVIGATION_BUTTONS.bumpout,\r\n // SIDEBAR_NAVIGATION_BUTTONS.corners,\r\n // SIDEBAR_NAVIGATION_BUTTONS.radius,\r\n // SIDEBAR_NAVIGATION_BUTTONS.resize,\r\n // SIDEBAR_NAVIGATION_BUTTONS.label,\r\n // SIDEBAR_NAVIGATION_BUTTONS.appliances,\r\n // SIDEBAR_NAVIGATION_BUTTONS.mitered,\r\n // SIDEBAR_BUTTONS_MENU.delete\r\n // ];\r\n\r\n const allowedNavItems = allowedNavItemsForMovingPoint;\r\n\r\n const shape = parent.getParent();\r\n let isLineWithBumpout = false;\r\n let isPrevLineWithBumpout = false;\r\n if (shape instanceof sqftShape) {\r\n const prevLine = shape.getPrevLine(parent);\r\n isLineWithBumpout = this.getParent().isWithBumpout();\r\n isPrevLineWithBumpout = prevLine.isWithBumpout();\r\n }\r\n\r\n return state.canBeMoved\r\n //&& !disallowedNavItems.includes(activeButton) // allow move points only when this button is not active\r\n && allowedNavItems.includes(activeButton) // allow move points only when button is active\r\n && !isShowSlabTool\r\n && !isLineWithBumpout\r\n && !isPrevLineWithBumpout\r\n && !this.isWithAngle()\r\n && !this.isWithCorner()\r\n ;\r\n }\r\n\r\n const onMouseDown = (mousePos, e) => {\r\n void mousePos;\r\n void e;\r\n if (state.isHovering && canPointBeMoved()) {\r\n let shape = parent.getParent();\r\n if (shape instanceof sqftShape) {\r\n shape.setIsPointsMovable(true);\r\n }\r\n state.mouseDown = true;\r\n state.mouseDownPosition = mousePos;\r\n //console.log(\"state.mouseDown\", state.mouseDown);\r\n return true;\r\n }\r\n\r\n if (state.isHovering) {\r\n // Set shape point with mitered edge id\r\n if (parent instanceof MiteredOverlay) {\r\n const miteredPoints = parent.getPoints();\r\n if (this.id === miteredPoints[miteredPoints.length - 1].id || this.id === miteredPoints[0].id) {\r\n const hoveredPoint = workspace.getHoverPoint();\r\n hoveredPoint.addEdgeToPoint();\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n this.addEdgeToPoint = () => {\r\n const reduxState = store.getState();\r\n const activeButton = reduxState.sqftMenuState.activeButton;\r\n if (activeButton === SIDEBAR_NAVIGATION_BUTTONS.edge) {\r\n const featureId = reduxState.sqftMenuState.activeSubMenuButton;\r\n this.setMiteredFeatureId(featureId);\r\n }\r\n const updateCalculations = reduxState.sqftState.updateCalculations;\r\n store.dispatch(updateSQFTCalculations(updateCalculations + 1));\r\n }\r\n\r\n this.movePosition = (mousePos) => {\r\n let scale = workspace.getScale();\r\n let xDiff = (state.mouseDownPosition.x - mousePos.x) / scale;\r\n let yDiff = (state.mouseDownPosition.y - mousePos.y) / scale;\r\n\r\n state.mouseDownPosition.x = mousePos.x;\r\n state.mouseDownPosition.y = mousePos.y;\r\n this.pos.x -= xDiff;\r\n this.pos.y -= yDiff;\r\n this.revertPositionIfHasIntersections(xDiff, yDiff);\r\n setPointWasChangedInRegularMode();\r\n setPointWasMoved();\r\n state.pointWasMoved = true;\r\n }\r\n this.revertPositionIfHasIntersections = (xDiff, yDiff) => {\r\n let shape = parent.getParent();\r\n let isShapeHasIntersections = false;\r\n if (shape instanceof sqftShape) {\r\n isShapeHasIntersections = shape.isShapeHasIntersections();\r\n //console.log(\"isShapeHasIntersections\", isShapeHasIntersections);\r\n if (isShapeHasIntersections) {\r\n this.pos.x += xDiff;\r\n this.pos.y += yDiff;\r\n }\r\n }\r\n }\r\n //private property setters\r\n function setParent(value) { parent = value; }\r\n\r\n //private functions\r\n\r\n //public functions\r\n this.export = () => {\r\n let exportPoint = {};\r\n this.exportAndImportProperties.forEach((property) => {\r\n exportPoint[property] = _.clone(this[property]);\r\n });\r\n return exportPoint;\r\n };\r\n this.import = (importPoint) => {\r\n this.exportAndImportProperties.forEach((property) => {\r\n this[property] = _.clone(importPoint[property]);\r\n });\r\n //compatibility with old visualizer\r\n if (!importPoint[\"pos\"] && importPoint[\"x\"] !== undefined && importPoint[\"y\"] !== undefined ) {\r\n this.pos = { x: _.clone(importPoint[\"x\"]), y: _.clone(importPoint[\"y\"])}\r\n }\r\n };\r\n this.isHovering = function() { return state.isHovering; };\r\n this.getParent = function() { return parent };\r\n this.getGrandParent = () => {\r\n const parent = this.getParent();\r\n if (parent && parent.getParent) {\r\n return parent.getParent();\r\n }\r\n return null\r\n };\r\n this.isOverPointField = () => {\r\n let field = this.getPointField();\r\n\r\n state.isHovering = (\r\n state.mousePos.x >= field.x - this.arcLength - this.angle &&\r\n state.mousePos.x <= field.x + field.width + this.arcLength + this.angle &&\r\n state.mousePos.y >= field.y - this.arcLength - this.angle &&\r\n state.mousePos.y <= field.y + field.height + this.arcLength + this.angle\r\n );\r\n\r\n return state.isHovering;\r\n };\r\n this.getAngle = function () {\r\n return this.angle;\r\n };\r\n this.getArcLength = function () {\r\n return this.arcLength;\r\n };\r\n this.removeAttachedItem = function () {\r\n this.arcLength = 0;\r\n this.angle = 0;\r\n this.setMiteredFeatureId(null);\r\n sqftShapeManager.updateMinMaxMiteredPoints(this.getGrandParent());\r\n //reset seam shape changes in the slab mode\r\n sqftShapeManager.resetShapeChangesInTheSlabMode(this.getGrandParent());\r\n };\r\n this.rotate = (origin, angle, isSlabMode) => {\r\n let ret = {x: 0, y: 0};\r\n let tr = {x: this.x - origin.x, y: this.y - origin.y};\r\n\r\n ret.x = tr.x * Math.cos(angle) - tr.y * Math.sin(angle);\r\n ret.y = tr.x * Math.sin(angle) + tr.y * Math.cos(angle);\r\n\r\n //console.log(\"isSlabMode in point rotation\", isSlabMode)\r\n const xPos = Math.round10(Math.round10(ret.x, -5) + Math.round10(origin.x, -5), -5);\r\n const yPos = Math.round10(Math.round10(ret.y, -5) + Math.round10(origin.y, -5), -5);\r\n isSlabMode ? this.setPosSlab({x: xPos, y: yPos}) : this.setPos({x: xPos, y: yPos});\r\n };\r\n this.getPointDirection =function () {\r\n return this.pointDirection\r\n };\r\n this.changeCornerDirection = function(line1, line2) {\r\n\r\n // console.log('line1', line1);\r\n // console.log('line2', line2);\r\n\r\n if (line1.orientation === \"vertical\" && line1.newDirection === \"north\"\r\n && line2.orientation === \"horizontal\" && line2.newDirection === \"west\") {\r\n this.pointDirection = \"leftbottom\";\r\n }\r\n if (line1.orientation === \"horizontal\" && line1.newDirection === \"east\"\r\n && line2.orientation === \"vertical\" && line2.newDirection === \"north\") {\r\n this.pointDirection = \"lefttop\";\r\n }\r\n if (line1.orientation === \"vertical\" && line1.newDirection === \"south\"\r\n && line2.orientation === \"horizontal\" && line2.newDirection === \"east\") {\r\n this.pointDirection = \"righttop\";\r\n }\r\n if (line1.orientation === \"horizontal\" && line1.newDirection === \"west\"\r\n && line2.orientation === \"vertical\" && line2.newDirection === \"south\") {\r\n this.pointDirection = \"rightbottom\";\r\n }\r\n\r\n if (line1.orientation === \"vertical\" && line1.newDirection === \"north\"\r\n && line2.orientation === \"horizontal\" && line2.newDirection === \"east\") {\r\n this.pointDirection = \"lefttop\";\r\n }\r\n if (line1.orientation === \"horizontal\" && line1.newDirection === \"east\"\r\n && line2.orientation === \"vertical\" && line2.newDirection === \"south\") {\r\n this.pointDirection = \"righttop\";\r\n }\r\n if (line1.orientation === \"vertical\" && line1.newDirection === \"south\"\r\n && line2.orientation === \"horizontal\" && line2.newDirection === \"west\") {\r\n this.pointDirection = \"rightbottom\";\r\n }\r\n if (line1.orientation === \"horizontal\" && line1.newDirection === \"west\"\r\n && line2.orientation === \"vertical\" && line2.newDirection === \"north\") {\r\n this.pointDirection = \"leftbottom\";\r\n }\r\n\r\n };\r\n this.getPointField = (useFieldWidth = true) => {\r\n const isCabinet = isSFTCabinetsGroup();\r\n let fieldWidth = isCabinet ? sqftConfig.fieldWidthCabinet : sqftConfig.fieldWidth,\r\n center = fieldWidth / 2,\r\n scale = workspace.getScale(),\r\n offset = parent.getOffset();\r\n\r\n return {\r\n x: (this.x * scale) + offset.x - (useFieldWidth ? center : 0),\r\n y: (this.y * scale) + offset.y - (useFieldWidth ? center : 0),\r\n height: fieldWidth,\r\n width: fieldWidth\r\n };\r\n };\r\n\r\n this.getPointPosOnWorkspace = (shouldGetRegularPosition) => {\r\n const shp = this.getGrandParent();\r\n let position;\r\n if (shp) {\r\n position = shouldGetRegularPosition && shp.pos ? shp.pos : shp.getPosition();\r\n } else {\r\n position = shouldGetRegularPosition && parent.pos ? parent.pos : parent.getPosition();\r\n }\r\n const x = shouldGetRegularPosition ? +this.pos.x : +this.x;\r\n const y = shouldGetRegularPosition ? +this.pos.y : +this.y;\r\n\r\n return {\r\n x: x + position.x,\r\n y: y + position.y,\r\n };\r\n };\r\n\r\n this.getPointCords = () => {\r\n let pointField = this.getPointField();\r\n\r\n return {\r\n x: pointField.x + pointField.width / 2,\r\n y: pointField.y + pointField.width / 2\r\n }\r\n };\r\n\r\n this.snapToGrid = () => {\r\n /*var pos = snappedPos();\r\n this.x = pos.x;\r\n this.y = pos.y;*/\r\n };\r\n\r\n this.destroy = function(protect) {\r\n if (!protect) {\r\n EventManager.removeEvent(self);\r\n pointRadiusOverlay.destroy();\r\n }\r\n };\r\n\r\n this.init = function(parent) {\r\n setParent(parent);\r\n this.initEvents();\r\n pointRadiusOverlay = new PointRadius();\r\n pointRadiusOverlay.init(self);\r\n };\r\n this.initEvents = () => {\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_MOVE,\r\n onMouseMove,\r\n self,\r\n EventManager.priorities.POINT\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_DOWN,\r\n onMouseDown,\r\n self,\r\n EventManager.priorities.POINT\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_UP,\r\n onMouseUp,\r\n self,\r\n EventManager.priorities.POINT\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.RENDER,\r\n this.render,\r\n self,\r\n EventManager.priorities.POINT\r\n );\r\n };\r\n this.deregisterEvents = () => {\r\n EventManager.removeEvent(this);\r\n };\r\n this.reInitEvents = () => {\r\n this.initEvents();\r\n };\r\n this.deregisterPartEvents = () => {\r\n if (pointRadiusOverlay) {\r\n pointRadiusOverlay.deregisterPartEvents();\r\n }\r\n };\r\n this.reInitPartEvents = () => {\r\n if (pointRadiusOverlay) {\r\n pointRadiusOverlay.reInitPartEvents();\r\n }\r\n };\r\n // check if corner can be applied to another side of the line\r\n this.isFitSize = function () {\r\n if (parent.isLine) {\r\n let fitSize = new FitSize(parent);\r\n\r\n return fitSize.isFitSize(SqftStore.radius.angle || SqftStore.radius.arcLength);\r\n }\r\n return true\r\n };\r\n\r\n this.isWithoutMitered = function () {\r\n return !(this.getParent() ? this.getParent().isWithMitered() : false)\r\n && !(this.getParent() ? this.getParent().isWithMiteredPrev() : false)\r\n };\r\n this.rememberPos = () => {\r\n this.backupX = this.x;\r\n this.backupY = this.y;\r\n }\r\n this.restorePos = () => {\r\n this.x = this.backupX;\r\n this.y = this.backupY;\r\n }\r\n\r\n this.render = (ctx) => {\r\n if (workspace && workspace.getState().loading) {\r\n return\r\n }\r\n\r\n if (isDisabledInPopupShouldBeHidden() && isDisabledInPopupWithParents(this)) {\r\n return\r\n }\r\n\r\n if (this.isHidden()) { return; }\r\n const reduxState = store.getState();\r\n const activeButton = reduxState.sqftMenuState.activeButton;\r\n const o = parent.getOffset();\r\n let\r\n pointField = self.getPointField(),\r\n scale = sqftConfig.scale,\r\n marginX,\r\n marginY;\r\n\r\n switch (this.pointDirection) {\r\n case \"lefttop\":\r\n marginX = -13;\r\n marginY = -13;\r\n break;\r\n case \"righttop\":\r\n marginX = 5;\r\n marginY = -13;\r\n break;\r\n case \"rightbottom\":\r\n marginX = 5;\r\n marginY = self.pointDiff ? 5 - self.pointDiff : 5;\r\n break;\r\n case \"leftbottom\":\r\n marginX = self.pointDiff ? -13 + self.pointDiff : -13;\r\n marginY = 5;\r\n break;\r\n default:\r\n marginX = 0;\r\n marginY = 0;\r\n break;\r\n }\r\n\r\n let pos = {\r\n x: o.x + (this.x * scale) + marginX,\r\n y: o.y + (this.y * scale) + marginY\r\n };\r\n\r\n let pos2 = {\r\n x: o.x + (this.x * scale),\r\n y: o.y + (this.y * scale)\r\n };\r\n void pos2;\r\n\r\n const shouldHighLightRadius = sqftConfig.highlight.points\r\n && !(this.arcLength > 0 || this.angle > 0)\r\n && !self.angleIsChanged\r\n && this.isFitSize();\r\n\r\n const isNotHighlighted = !(sqftConfig.highlight.points && !(this.arcLength > 0 || this.angle > 0))\r\n || sqftConfig.highlight.points && !this.isFitSize();\r\n\r\n ctx.save();\r\n ctx.beginPath();\r\n\r\n if (this.layout === 'white-circle') {\r\n this.renderCircleLayout(ctx, pointField);\r\n\r\n if (EventManager.getCursor().indexOf(\"delete\") >= 0 && state.isHovering && parent instanceof MiteredOverlay) {\r\n ctx.fillStyle = fillStyleDelete;\r\n } else {\r\n ctx.fillStyle = fillStyleWhite;\r\n }\r\n ctx.fill();\r\n\r\n } else if (this.layout === 'small-white-circle' || state.isHovering && canPointBeMoved()) {\r\n this.renderSmallCircleLayout(ctx, pointField);\r\n\r\n } else if (this.layout === 'black-circle') {\r\n this.renderCircleLayout(ctx, pointField);\r\n ctx.fillStyle = fillStyleBlack;\r\n ctx.fill();\r\n\r\n } else if (this.layout === 'arrow-circle') {\r\n this.renderArrowCircleLayout(ctx, pointField);\r\n\r\n } else if (this.layout === 'blank') {\r\n this.renderBlankLayout(ctx, pos);\r\n\r\n } else if (shouldHighLightRadius) {\r\n this.renderHighlightRadiusLayout(ctx, pointField);\r\n\r\n } else if (sqftConfig.highlight.rotateAngle && this.renderAngleCircle) {\r\n this.renderRotateAngleLayout(ctx, pointField);\r\n\r\n } else {\r\n if (this.getMiteredFeatureId()) {\r\n ctx.fillStyle = fillStyleEdge\r\n } else {\r\n ctx.fillStyle = fillStyle;\r\n }\r\n\r\n if (this.arcLength > 0 || this.angle > 0) {\r\n //this.renderArcLayoutOld(ctx, pointField, pos);\r\n\r\n } else if (isNotHighlighted) {\r\n if (allowedNavItemsForMovingPoint.includes(activeButton)) {\r\n this.renderWhitePointLayout(ctx, pos2);\r\n } else {\r\n // old gray rectangle\r\n //this.renderGrayPointLayoutV2(ctx, pos);\r\n\r\n // gray rectangle version 2\r\n this.renderGrayPointLayoutV2(ctx);\r\n }\r\n }\r\n }\r\n\r\n ctx.closePath();\r\n ctx.restore();\r\n };\r\n\r\n this.renderRotateAngleLayout = (ctx, pointField) => {\r\n //todo fix bumpout rotation and remove this\r\n ////////////////////////////////////////////////\r\n if (!parent.getParent().isWithBumpout()\r\n && !parent.getParent().isWithMitered()\r\n && !parent.getParent().isPointsMoved\r\n && parent.getParent().rotatedDegrees === 0\r\n ) {\r\n ///////////////////////////////////\r\n setTranslates();\r\n ctx.arc(\r\n pointField.x + translateX + pointField.width / 2,\r\n pointField.y + translateY - 2 + pointField.width / 2,\r\n this.renderAngleCircle,\r\n 0,\r\n 2 * Math.PI\r\n );\r\n ctx.closePath();\r\n ctx.lineWidth = 2;\r\n ctx.strokeStyle = COLOR_THEMES[sqftConfig.activeTheme].active;\r\n ctx.fillStyle = \"rgba(159, 197, 34, 0.25)\";\r\n ctx.fill();\r\n ctx.stroke();\r\n ctx.beginPath();\r\n ctx.arc(pointField.x + 45 / 2 + translateX + 2, pointField.y + 45 / 2 + translateY, this.renderAngleCircle / 2, 0, 2 * Math.PI);\r\n ctx.fillStyle = COLOR_THEMES[sqftConfig.activeTheme].active;\r\n ctx.fill();\r\n ctx.closePath();\r\n\r\n if (this.renderAngleArc) {\r\n ctx.beginPath();\r\n ctx.strokeStyle = COLOR_THEMES[sqftConfig.activeTheme].active;\r\n ctx.arc(\r\n pointField.x + translateX + 4 + pointField.width / 2,\r\n pointField.y + pointField.width / 2,\r\n this.renderAngleArc,\r\n 0,\r\n Math.PI / 2\r\n );\r\n ctx.stroke();\r\n }\r\n }\r\n }\r\n\r\n this.renderHighlightRadiusLayout = (ctx, pointField) => {\r\n //todo hide if override\r\n\r\n setTranslates();\r\n ctx.arc(\r\n pointField.x + translateX + pointField.width / 2,\r\n pointField.y + translateY + pointField.width / 2,\r\n pointField.width / 2,\r\n 0,\r\n 2 * Math.PI\r\n );\r\n ctx.closePath();\r\n ctx.lineWidth = 2;\r\n ctx.strokeStyle = radiusFillStyle;\r\n ctx.stroke();\r\n\r\n ctx.beginPath();\r\n ctx.arc(pointField.x + 45/2 + translateX + 2, pointField.y + 45/2 + translateY, 8, 0, 2 * Math.PI, false);\r\n ctx.fillStyle = radiusFillStyle;\r\n ctx.fill();\r\n }\r\n\r\n this.renderCircleLayout = (ctx, pointField) => {\r\n setTranslates();\r\n ctx.arc(\r\n pointField.x + translateX + pointField.width / 2,\r\n pointField.y + translateY + pointField.width / 2,\r\n 9,\r\n 0,\r\n 2 * Math.PI\r\n );\r\n ctx.closePath();\r\n ctx.lineWidth = 2;\r\n ctx.strokeStyle = fillStyleBlack;\r\n ctx.stroke();\r\n\r\n ctx.beginPath();\r\n ctx.arc(\r\n pointField.x + translateX + pointField.width / 2,\r\n pointField.y + translateY + pointField.width / 2,\r\n 8,\r\n 0,\r\n 2 * Math.PI,\r\n false\r\n );\r\n }\r\n\r\n this.renderSmallCircleLayout = (ctx, pointField) => {\r\n let arcRadius;\r\n ctx.lineWidth = 2;\r\n if (state.isHovering) {\r\n arcRadius = 6\r\n ctx.fillStyle = COLOR.blackLight;\r\n } else {\r\n arcRadius = 5\r\n ctx.fillStyle = COLOR.white;\r\n }\r\n\r\n ctx.arc(\r\n pointField.x + pointField.width / 2,\r\n pointField.y + pointField.width / 2,\r\n arcRadius,\r\n 0,\r\n 2 * Math.PI,\r\n false\r\n );\r\n\r\n ctx.strokeStyle = COLOR_THEMES[config.activeTheme].primary;\r\n\r\n ctx.stroke();\r\n ctx.fill();\r\n }\r\n\r\n this.renderBlankLayout = (ctx, pos) => {\r\n ctx.rect(pos.x, pos.y, 1, 1); // draw simple rectangle\r\n ctx.fill();\r\n }\r\n\r\n this.renderArrowCircleLayout = (ctx, pointField) => {\r\n setTranslates();\r\n\r\n ctx.beginPath();\r\n ctx.arc(\r\n pointField.x + translateX + pointField.width / 2,\r\n pointField.y + translateY + pointField.width / 2,\r\n 10,\r\n 0,\r\n 2 * Math.PI,\r\n false\r\n );\r\n ctx.fillStyle = fillStyleBlue;\r\n ctx.fill();\r\n }\r\n\r\n this.renderGrayPointLayout = (ctx, pos) => {\r\n ctx.rect(pos.x, pos.y, 8, 8); // draw simple rectangle\r\n ctx.fillStyle = 'rgba(205,202,202,0.5)';\r\n ctx.fill();\r\n ctx.closePath();\r\n }\r\n\r\n this.renderArcLayoutOld = (ctx, pointField, pos) => {\r\n console.log('pointField.x', pointField.x);\r\n console.log('pointField.y', pointField.y);\r\n console.log('radius', this.arcLength);\r\n\r\n ctx.beginPath();\r\n ctx.lineWidth = 8;\r\n ctx.strokeStyle = radiusFillStyle;\r\n ctx.strokeStyle = \"#b263a8\";\r\n ctx.moveTo(pointField.x + 15, pointField.y + 45); // P0\r\n ctx.arcTo(pointField.x + 15, pointField.y + 15, pointField.x + 45, pointField.y + 15, 30); // P1, P2 and the radius\r\n ctx.stroke();\r\n console.log('stroked2!');\r\n\r\n ctx.moveTo(pos.x, pos.y);\r\n ctx.arcTo(pos.x, pos.y, pos.x + 15, pos.y + 15, this.arcLength); // draw arc radius\r\n ctx.stroke();\r\n console.log('stroked!');\r\n }\r\n\r\n this.renderGrayPointLayoutV2 = (ctx) => {\r\n ctx.beginPath();\r\n const shape = parent.getParent();\r\n const nextLine = shape.getNextLine(parent);\r\n //const prevLine = shape.getPrevLine(parent);\r\n const angleBetweenTwoLines = getAngleBetween3Points(parent.from, parent.to, nextLine.to);\r\n //console.log(\"angleBetweenTwoLines\", angleBetweenTwoLines);\r\n\r\n void angleBetweenTwoLines;\r\n\r\n const pointOnTheLine = getPointOnTheLine(\r\n parent.to.getPointField(false),\r\n parent.from.getPointField(false),\r\n 15\r\n );\r\n const pointOnTheNextLine = getPointOnTheLine(\r\n nextLine.from.getPointField(false),\r\n nextLine.to.getPointField(false),\r\n 15\r\n );\r\n const midpoint = getMidPoint(pointOnTheLine, pointOnTheNextLine);\r\n let posX = midpoint.x; //o.x + (midpoint.x * scale);\r\n let posY = midpoint.y; //o.y + (midpoint.y * scale);\r\n void posX;\r\n void posY;\r\n\r\n ctx.rect(\r\n posX - 4,\r\n posY - 4,\r\n 8, 8\r\n ); // draw simple rectangle\r\n ctx.fillStyle = 'rgba(205,202,202,0.5)';\r\n ctx.fill();\r\n }\r\n\r\n this.renderWhitePointLayout = (ctx, pos2) => {\r\n ctx.arc(\r\n pos2.x,\r\n pos2.y,\r\n 5,\r\n 0,\r\n 2 * Math.PI\r\n );\r\n ctx.fillStyle = 'rgb(255,255,255)';\r\n ctx.fill();\r\n ctx.lineWidth = 2;\r\n ctx.strokeStyle = fillStyleBlue;\r\n ctx.stroke();\r\n }\r\n}\r\n","import SlabWorkspace from \"../core/slab/slabWorkspace\";\r\nimport workspace from \"../core/workspace\";\r\nimport {SHAPE_PART_ID} from \"../../../constants\";\r\nimport SQFTShapeOffset from \"../core/shapes/sqftShapeOffset\";\r\nimport sqftShape from \"../core/shapes/sqftShape\";\r\nimport createEventManager from \"./subscriptionEventManager\";\r\n\r\nconst eventManager = createEventManager();\r\n\r\nconst sqftSlabManager = {\r\n ...eventManager,\r\n\r\n centerButton: {\r\n width: 10,\r\n height: 9,\r\n },\r\n\r\n importSlabBacksplashes: (values) => {\r\n SlabWorkspace.slabAdditionalShapes.resetBacksplashes();\r\n SlabWorkspace.slabAdditionalShapes.importData(values);\r\n },\r\n removeAllSlabBacksplashes: (values) => {\r\n SlabWorkspace.slabAdditionalShapes.resetBacksplashes(values);\r\n },\r\n deleteSlabBacksplashByLine: (line) => {\r\n SlabWorkspace.slabAdditionalShapes.removeActiveBacksplashByLine(line);\r\n },\r\n getSlabPlaceHolderShapes: () => {\r\n return workspace.getShapes().filter(shp => shp.partId === SHAPE_PART_ID.slabPlaceHolder);\r\n },\r\n deleteShapeOffset: () => {\r\n if (SlabWorkspace.shapeOffset) {\r\n SlabWorkspace.shapeOffset.delete()\r\n }\r\n SlabWorkspace.shapeOffset = null\r\n },\r\n hideShapeOffset: () => {\r\n if (SlabWorkspace.shapeOffset) {\r\n SlabWorkspace.shapeOffset.deregisterEvents();\r\n }\r\n },\r\n reInitShapeOffset: () => {\r\n if (SlabWorkspace.shapeOffset) {\r\n SlabWorkspace.shapeOffset.reInitEvents();\r\n }\r\n },\r\n initShapeOffset: function (shape) {\r\n const shapes = workspace.getShapes();\r\n if (shape instanceof sqftShape) {\r\n if (SlabWorkspace.shapeOffset === null) {\r\n SlabWorkspace.shapeOffset = new SQFTShapeOffset(shapes[0]);\r\n SlabWorkspace.shapeOffset.init();\r\n SlabWorkspace.shapeOffset.setParent(shape);\r\n this.emit('shapeOffsetChanged', SlabWorkspace.shapeOffset);\r\n } else {\r\n SlabWorkspace.shapeOffset.animateShapeTransition(\r\n shape,\r\n () => {this.emit('shapeOffsetChanged', SlabWorkspace.shapeOffset)}\r\n );\r\n }\r\n\r\n }\r\n }\r\n}\r\n\r\nexport default sqftSlabManager\r\n","import {baseNewImagesPath} from \"../assets\";\r\n\r\nexport const iconPlusGreen = `${baseNewImagesPath}images/sqft-icons/cursors/plus_green.png`;\r\nexport const iconPlusBlack = `${baseNewImagesPath}images/sqft-icons/cursors/plus_black.png`;\r\nexport const iconPlusBlue = `${baseNewImagesPath}images/sqft-icons/cursors/plus_blue.png`;\r\nexport const iconplusPurple = `${baseNewImagesPath}images/sqft-icons/cursors/plus_purple.png`;\r\nexport const objectFlipVertical = `${baseNewImagesPath}images/sqft-icons/cursors/object_flip_vertical.png`;\r\nexport const objectFlipHorizontal = `${baseNewImagesPath}images/sqft-icons/cursors/object_flip_horizontal.png`;\r\nexport const iconGreenPlus32 = `${baseNewImagesPath}images/sqft-icons/icon-green-plus-32.png`;\r\nexport const iconGreenClip = `${baseNewImagesPath}images/greenclip.svg`;\r\nexport const iconHeight = `${baseNewImagesPath}images/sqft-icons/icon-height.svg`;\r\nexport const iconLength = `${baseNewImagesPath}images/sqft-icons/icon-length.svg`;\r\nexport const iconLink = `${baseNewImagesPath}images/sqft-icons/icon-link.svg`;\r\nexport const iconThickness = `${baseNewImagesPath}images/sqft-icons/icon-thickness.svg`;\r\nexport const iconEyeball = `${baseNewImagesPath}images/sqft-icons/icon-eyeball.svg`;\r\nexport const iconCursorPointer = `${baseNewImagesPath}images/sqft-icons/cursors/pointer.svg`;\r\nexport const iconLibrary = `${baseNewImagesPath}images/sqft-icons/icon-length.svg`;\r\nexport const iconUpload = `${baseNewImagesPath}images/sqft-icons/icon-upload.svg`;\r\nexport const iconImage = `${baseNewImagesPath}images/sqft-icons/icon-image.svg`;\r\n\r\n","import * as types from \"./actionTypes\";\r\n\r\nexport const showSlabTool = (isShowSlabTool) => ({\r\n type: types.SHOW_SLAB_TOOL,\r\n payload: {isShowSlabTool}\r\n});\r\n\r\nexport const setActiveSlabId = (activeSlabId) => ({\r\n type: types.SET_ACTIVE_SLAB_ID,\r\n payload: {activeSlabId}\r\n});\r\n\r\nexport const setActiveSlabUrl = (activeSlabUrl) => ({\r\n type: types.SET_ACTIVE_SLAB_URL,\r\n payload: {activeSlabUrl}\r\n});\r\n\r\nexport const setActiveStep = (activeStep) => ({\r\n type: types.SET_SQFT_SLAB_ACTIVE_STEP,\r\n payload: {activeStep}\r\n});\r\n\r\nexport const setSlabSearchText = (searchText) => ({\r\n type: types.SET_SQFT_SLAB_SEARCH_TEXT,\r\n payload: {searchText}\r\n});\r\n\r\nexport const setSlabAspectRatio = (slabAspectRatio) => ({\r\n type: types.SET_SQFT_SLAB_ASPECT_RATIO,\r\n payload: {slabAspectRatio}\r\n});\r\n\r\nexport const setSlabImageType = (slabImageType) => ({\r\n type: types.SET_SLAB_IMAGE_TYPE,\r\n payload: {slabImageType}\r\n});\r\n\r\nexport const setSlabImageWidth = (slabImageWidth) => ({\r\n type: types.SET_SQFT_SLAB_IMAGE_WIDTH,\r\n payload: {slabImageWidth}\r\n});\r\n\r\nexport const setSlabImageHeight = (slabImageHeight) => ({\r\n type: types.SET_SQFT_SLAB_IMAGE_HEIGHT,\r\n payload: {slabImageHeight}\r\n});\r\n\r\nexport const setCropperData = (cropperData) => ({\r\n type: types.SET_SQFT_SLAB_CROPPER_DATA,\r\n payload: {cropperData}\r\n});\r\n\r\nexport const setSqftCroppedSlabImages = (croppedSlabImages) => ({\r\n type: types.SET_SQFT_CROPPED_SLAB_IMAGES,\r\n payload: {croppedSlabImages}\r\n});\r\n\r\nexport const addSqftCroppedSlabImage = (croppedSlabImage) => ({\r\n type: types.ADD_SQFT_CROPPED_SLAB_IMAGE,\r\n payload: croppedSlabImage\r\n});\r\n\r\nexport const setSqftSlabToolVisited = (isSlabToolVisited) => ({\r\n type: types.SET_SLAB_TOOL_VISITED,\r\n payload: {isSlabToolVisited}\r\n});\r\n\r\nexport const addRoomWithVisitedSlabTool = (qtCatName) => ({\r\n type: types.ADD_ROOM_WITH_VISITED_SLAB_TOOL,\r\n payload: qtCatName\r\n});\r\n\r\nexport const deleteCroppedSlabImage = (id) => ({\r\n type: types.DELETE_CROPPED_SLAB_IMAGE,\r\n payload: {id}\r\n});\r\n\r\nexport const setPricePerArea = (pricePerArea) => ({\r\n type: types.SET_PRICE_PER_AREA,\r\n payload: {pricePerArea}\r\n});\r\n\r\nexport const setMeasurementVisibleInSlabMode = (isMeasurementVisibleInSlabMode) => ({\r\n type: types.SET_IS_MEASUREMENT_VISIBLE_IN_SLAB_MODE,\r\n payload: {isMeasurementVisibleInSlabMode}\r\n});\r\n\r\nexport const setIsSizeValidationFailed = (isSizeValidationFailed) => ({\r\n type: types.SET_IS_SIZE_VALIDATION_FAILED,\r\n payload: {isSizeValidationFailed}\r\n});\r\n\r\nexport const setIsSlabPricingEnabled = (isSlabPricingEnabled) => ({\r\n type: types.SET_IS_SLAB_PRICING_ENABLED,\r\n payload: {isSlabPricingEnabled}\r\n});\r\n","import {Part} from \"../part\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport {LayoutType, ShowerComboTubType} from \"../constants\";\r\nimport { showerTubComboThumbnail, custom60in30X8Shower } from '../../../bvComponent/core/assets';\r\n\r\nimport BathTubLiner from \"../subparts/showerTubCombo/bathtubLiner\";\r\nimport ReplacementTub from \"../subparts/showerTubCombo/replacementTub\";\r\nimport WalkInTub from \"../subparts/showerTubCombo/walkInTub\";\r\nimport JettedTub from \"../subparts/showerTubCombo/jettedTub\";\r\nimport WallConfiguration from \"../subparts/showerTubCombo/wallConfiguration\";\r\nimport {fixDbFeatureProperties} from \"../../../../misc/helpers\";\r\nimport WalkInTubFixture from \"../subparts/showerTubCombo/walkInTubFixture\";\r\nimport ReplacementTubFixture from \"../subparts/showerTubCombo/replacementTubFixture\";\r\n\r\nexport class ShowerTubCombo extends Part {\r\n static id = 'Shower Tub Combo';\r\n\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.showerTubComboIsActive = false; // param needed to check if shower is still active or not\r\n this.menuType = PartMenuType.Complex;\r\n this.partThumbnail = showerTubComboThumbnail;\r\n this.partName = 'Shower Tub Combo';\r\n this.translateId = \"visualizer.bathroom.shower_tub_combo\";\r\n this.relatedItems = [];\r\n this.wallConfiguration = null;\r\n this.bathTubLiner = null;\r\n this.replacementTub = null;\r\n this.replacementTubFixture = null;\r\n this.walkInTub = null;\r\n this.jettedTub = null;\r\n\r\n // Kohler hardcode, they don't have bathtub_liner\r\n this.bottomTub = ShowerComboTubType.replacement_tub;\r\n this.leftShowerWallType = 'Pony';\r\n this.showerComboSize = '60in';\r\n this.relatedGroupNames = [\"Bathtub Liner\", \"Replacement Tub\", \"Walk In Tub\", \"Jetted Tub\", \"Replacement tub Fixture\"];\r\n }\r\n\r\n load(dbFeature, loadFeature = true) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Bathtub Liner\":\r\n relatedItemName = \"bathTubLiner\";\r\n RelatedItemClass = BathTubLiner;\r\n break;\r\n case \"Replacement Tub\":\r\n relatedItemName = \"replacementTub\";\r\n RelatedItemClass = ReplacementTub;\r\n break;\r\n case \"Walk In Tub Fixture\":\r\n relatedItemName = \"walkInTubFixture\";\r\n RelatedItemClass = WalkInTubFixture;\r\n break;\r\n case \"Replacement tub Fixture\":\r\n case \"Replacement Tub Fixture\":\r\n relatedItemName = \"replacementTubFixture\";\r\n RelatedItemClass = ReplacementTubFixture;\r\n break;\r\n case \"Walk In Tub\":\r\n case \"Walk in Tub\":\r\n relatedItemName = \"walkInTub\";\r\n RelatedItemClass = WalkInTub;\r\n break;\r\n case \"Jetted Tub\":\r\n relatedItemName = \"jettedTub\";\r\n RelatedItemClass = JettedTub;\r\n break;\r\n }\r\n return this.loadCommon(relatedItemName, RelatedItemClass, dbFeature, loadFeature)\r\n }\r\n\r\n setSpecificRules() {\r\n if (!this.wallConfiguration) {\r\n this.wallConfiguration = new WallConfiguration(true);\r\n this.wallConfiguration.counts = {\r\n allLayoutFeaturesCount: 0,\r\n largeLayoutFeaturesCount: 0,\r\n smallLayoutFeaturesCount: 0\r\n };\r\n this.relatedItems.unshift(this.wallConfiguration);\r\n this.wallConfiguration.getParent = () => this;\r\n }\r\n const wallConfigurations = [\r\n // ShowerTubCombo.createCustomWallConfiguration(\r\n // custom60inPonyShower,\r\n // \"Pony Wall 60in\",\r\n // \"Pony\",\r\n // \"60in\",\r\n // {\r\n // \"ShowerSize\": ['60in'],\r\n // \"CountertopSize\": [\"20in\", \"24in\", \"30in\", \"36in\", \"48in\", \"60in\", \"72in\"],\r\n // },\r\n // this,\r\n // 100000\r\n // ),\r\n ShowerTubCombo.createCustomWallConfiguration(\r\n custom60in30X8Shower,\r\n \"Full Wall 60in\",\r\n \"30X8\",\r\n \"60in\",\r\n {\r\n \"ShowerSize\": ['60in'],\r\n \"CountertopSize\": [\"20in\", \"24in\", \"30in\", \"36in\", \"48in\", \"60in\", \"72in\"],\r\n },\r\n this,\r\n 100001\r\n ),\r\n ];\r\n Object.keys(LayoutType).forEach(layoutType => {\r\n this.wallConfiguration.featuresList[layoutType] = wallConfigurations;\r\n if (this.wallConfiguration.counts) {\r\n this.wallConfiguration.counts[layoutType.toLowerCase() + \"LayoutFeaturesCount\"]++;\r\n }\r\n });\r\n }\r\n\r\n static createCustomWallConfiguration(customThumbnail, name, leftShowerWallType, showerComboSize, metaData, parent, id) {\r\n const conf = new WallConfiguration();\r\n conf.partName = name;\r\n conf.showerBodyId = name.toLowerCase().replace(/ /gi, \"-\");\r\n conf.dbFeature = {};\r\n conf.featureName = name;\r\n conf.groupName = \"Wall Configuration\";\r\n conf.showerComboSize = showerComboSize;\r\n // conf.parent = parent;\r\n conf.getParent = () => parent.wallConfiguration;\r\n conf.metaData = metaData;\r\n conf.leftShowerWallType = leftShowerWallType;\r\n conf.customThumbnail = customThumbnail;\r\n conf.dbFeature = fixDbFeatureProperties({\r\n metaData,\r\n id,\r\n unlocked: true\r\n });\r\n return conf;\r\n }\r\n\r\n setLayers(layout, placeholdersNeeded) {\r\n\r\n if (!this.showerTubComboIsActive) {\r\n return null\r\n }\r\n\r\n return super.setLayers(layout, placeholdersNeeded)\r\n }\r\n\r\n subParts() {\r\n\r\n let subParts = [\r\n ...this.getRelatedItems().filter(item => item.visible).map(_ => new DesignNavigationItem(_.partName, _)),\r\n ...this.layout.parts.Shower.subParts().filter(subPart => {\r\n return (subPart.text === \"Fixture\")\r\n || (subPart.text === \"Shower Head\")\r\n || (subPart.text === \"Shower Walls\")\r\n || (subPart.text === \"Shower Walls Accent\")\r\n || (subPart.text === \"Shower Door\")\r\n || (subPart.text === \"Handle\")\r\n || (subPart.text === \"Pony Wall\")\r\n || (subPart.text === \"Pony Wall Cap\")\r\n || (subPart.text === \"Pony Wall Glass\")\r\n })\r\n ];\r\n\r\n if (this.bottomTub === ShowerComboTubType.walk_in_tub) {\r\n subParts = subParts.filter(subPart => {\r\n return subPart.part.partId !== \"shower_door\" && subPart.part.partId !== \"shower_door_handle\" && subPart.part.partId !== \"shower_fixture\"\r\n })\r\n }\r\n\r\n return subParts\r\n }\r\n\r\n getShowerRelatedItems() {\r\n return this.layout.parts.Shower.getRelatedItems().filter(relItem => {\r\n return (relItem.partId === \"shower_fixture\")\r\n || (relItem.partId === \"shower_head\")\r\n || (relItem.partId === \"shower_wall\")\r\n || (relItem.partId === \"shower_wall_accent\")\r\n || (relItem.partId === \"shower_door\")\r\n || (relItem.partId === \"shower_door_handle\")\r\n || (relItem.partId === \"pony_wall\")\r\n || (relItem.partId === \"pony_wall_cap\")\r\n || (relItem.partId === \"pony_wall_glass\")\r\n })\r\n }\r\n\r\n setShowerTubCombo() {\r\n this.showerTubComboIsActive = true;\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false\r\n }\r\n\r\n handleSubPartClick() {}\r\n\r\n setZIndex(zIndexes) {\r\n if (!this.showerTubComboIsActive) {\r\n return null\r\n }\r\n\r\n if(zIndexes)\r\n this.relatedItems.forEach(_ => _.setZIndex(zIndexes));\r\n }\r\n\r\n setActiveTub(bottomTub) {\r\n this.bottomTub = bottomTub;\r\n }\r\n\r\n showerSize() {\r\n return this.showerComboSize\r\n }\r\n\r\n showerDimensions() {\r\n return this.leftShowerWallType\r\n }\r\n\r\n setShowerSize(leftShowerWallType, showerComboSize) {\r\n this.leftShowerWallType = leftShowerWallType;\r\n this.showerComboSize = showerComboSize;\r\n }\r\n\r\n}\r\n","import {PartMenuType} from \"../../visComponents/constants\";\r\nimport {iCmp} from \"../../../misc/utils\";\r\nimport Layer from \"../../visComponents/layer\";\r\nimport {LayoutType, METADATA} from \"./constants\";\r\nimport PartCommon from \"../../visComponents/partCommon\";\r\nimport DesignNavigationItem from \"../../visComponents/designNavigationItem\";\r\n\r\nexport class Part extends PartCommon {\r\n\r\n constructor(isParent, isChild, menuType) {\r\n super();\r\n if (isChild || (isParent && menuType === PartMenuType.Simple)) {\r\n this.featuresList = {};\r\n this.featuresPartsList = {};\r\n this.modulePartsList = {};\r\n Object.keys(LayoutType).forEach(layoutName => {\r\n this.featuresList[layoutName] = [];\r\n this.featuresPartsList[layoutName] = [];\r\n this.modulePartsList[layoutName] = [];\r\n });\r\n this.allFeaturesReceived = false;\r\n this.realFeaturesReceived = false; // this prop is need on Scroll (if features count more that 1000)\r\n this.nextFeaturesPageToLoad = 0;\r\n this.activeFeature = null;\r\n this.placeholderFeature = null;\r\n this.shadowFeature = null;\r\n this.placeholderChanged = false;\r\n this.firstClick = {\r\n \"0\": false\r\n };\r\n this.activeLockedFeature = null;\r\n this.activeNotInVisualizerFeature = null; // is needed to display in the QT selected activeNotInVisualizerFeature, but render proper activeFeature layer(for example, countertop)\r\n // name = \"\";\r\n this.visible = true;\r\n this.categoryEnabled = false;\r\n this.layout = null;\r\n this.featureGroupVisible = true; // dashboard's feature group eye ball logic\r\n this.featureGroupEnabled = true; // dashboard's feature group checkbox logic\r\n this.selectedFeaturesHistory = []; // array of strings(names). updated every time item is selected\r\n this.filtersReceived = null; // array of filters values, comes from BE, for ex [1221, 347, 1124]\r\n }\r\n if (isParent) {\r\n this.partThumbnail = '';\r\n this.relatedItems = [];\r\n }\r\n if (!isChild && !isParent) {\r\n this.dbFeature = null;\r\n this.layer = new Layer(\"kv\");\r\n this._customDisplayName = null;\r\n this.notesList = {};\r\n }\r\n this.partName = \"\";\r\n }\r\n\r\n set features(featuresList) {\r\n // features can't be set directly, we need to change featuresList array\r\n }\r\n get features() {\r\n const layout = this.layout || this.getParent().layout;\r\n return this.featuresList[layout.getCurrentLayoutName()]\r\n }\r\n set featuresParts(featuresList) {\r\n // featuresParts can't be set directly, we need to change featuresPartsList array\r\n }\r\n get featuresParts() {\r\n const layout = this.layout || this.getParent().layout;\r\n return this.featuresPartsList[layout.getCurrentLayoutName()]\r\n }\r\n get moduleParts() {\r\n const layout = this.layout || this.getParent().layout;\r\n return this.modulePartsList[layout.getCurrentLayoutName()]\r\n }\r\n\r\n /**\r\n * Checks whether a given for condition matches the needed value (or array of values)\r\n * @param name {string}\r\n * @param value {string || array}\r\n * @returns {boolean}\r\n */\r\n matchesMetaForCondition(name, value) {\r\n if (!this.metaData[name]) {\r\n return false\r\n }\r\n if (Array.isArray(this.metaData[name])) {\r\n return this.metaData[name].some(condValue => {\r\n return condValue === METADATA.ALL || (Array.isArray(value) ? value.some(val => iCmp(condValue, val)) : iCmp(condValue, value))\r\n });\r\n }\r\n return this.metaData[name] === METADATA.ALL\r\n || (Array.isArray(value) ? value.some(val => iCmp(this.metaData[name], val)) : iCmp(this.metaData[name], value))\r\n }\r\n\r\n matchesMetaForArrayOfConditions(arrayOfConditions) {\r\n return arrayOfConditions.every((condition) => {\r\n return this.matchesMetaForCondition(condition.propName, condition.propValue);\r\n })\r\n }\r\n\r\n navigationItem() {\r\n return new DesignNavigationItem(this.partName, this);\r\n }\r\n}\r\n\r\n\r\n","import React, {useEffect, useRef} from \"react\";\r\nimport $ from \"jquery\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nconst WithOverlay = (props) => {\r\n\r\n const {children, visible, className, onClick, popupClassName} = props;\r\n\r\n const overlayElement = useRef(null);\r\n\r\n useEffect(() => {\r\n if (overlayElement && overlayElement.current) {\r\n $(overlayElement.current).fadeIn(300)\r\n }\r\n }, [visible]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n const hideOverlay = (closePopup) => {\r\n if (overlayElement && overlayElement.current) {\r\n $(overlayElement.current).fadeOut(300, () => {\r\n if (closePopup) {\r\n closePopup();\r\n }\r\n })\r\n }\r\n };\r\n\r\n const onOverlayClick = (event) => {\r\n if (!onClick) {\r\n return;\r\n }\r\n if (popupClassName && event.target.closest(\".\" + popupClassName)) {\r\n return\r\n }\r\n hideOverlay(onClick);\r\n }\r\n\r\n return (\r\n
\r\n {children(hideOverlay)}\r\n
\r\n )\r\n};\r\n\r\nWithOverlay.propTypes = {\r\n children: PropTypes.any,\r\n className: PropTypes.string,\r\n popupClassName: PropTypes.string,\r\n onClick: PropTypes.func,\r\n}\r\n\r\nexport default WithOverlay\r\n","import workspace from \"../workspace\";\r\nimport {v4 as uuidv4} from \"uuid\";\r\nimport store from \"../../../../../../store\";\r\nimport {addResource, changeResource} from \"../../../../../../actions/sqftResourceFunctions\";\r\nimport {getEdgeFeatures} from \"../../../../helpers/shapeHelper\";\r\nimport {getBacksplashArea, getEdgeArea, getEdgeLength} from \"../../../../helpers/sqftHelper\";\r\nimport {RESOURCE_ATTACHED_TO_TYPE, RESOURCE_TYPE} from \"../../../../constants\";\r\nimport {setSQFTPopup} from \"../../../../../../actions/sqftMenuFunctions\";\r\nimport {getQtCatName} from \"../../../../helpers/sqftQuotesHelper\";\r\nimport sqftConfig from \"../../store/sqftConfig\";\r\n\r\n/**\r\n * Prepare and attach resourceType(edge, backsplash, bumpout, mitered) to the line or lineCorner\r\n * @param {*} seg\r\n * @param {*} segCorner\r\n * @param {*} resourceType\r\n * @param {number} featureId\r\n * @param {string} partId\r\n * @param {*} featureName\r\n * @param height\r\n * @param {string} resourceId\r\n * @param qtCatName\r\n * @param {boolean} addResourceToStore\r\n * @param {boolean} shouldShowEyeBall\r\n */\r\nexport const attachResource = (\r\n seg,\r\n segCorner,\r\n resourceType,\r\n featureId,\r\n partId,\r\n featureName,\r\n height = 0,\r\n resourceId = null,\r\n qtCatName = null,\r\n addResourceToStore = true,\r\n shouldShowEyeBall = true,\r\n) => {\r\n const attachedToHovered = segCorner || seg;\r\n const attachedToExisting = workspace.getAttachedTo(attachedToHovered);\r\n const attachedToResource = prepareResource(seg, segCorner, resourceType, featureId, partId, featureName, resourceId, qtCatName, height, shouldShowEyeBall);\r\n\r\n attachResourceToLine(seg, segCorner, resourceType, featureId, partId, featureName, height, shouldShowEyeBall);\r\n\r\n if (addResourceToStore) {\r\n createAttachedResourceInStore(attachedToExisting, attachedToResource);\r\n }\r\n\r\n closeSQFTPopup();\r\n}\r\n\r\nconst createAttachedResourceInStore = (shouldChangeExisting, attachedToResource) => {\r\n const action = shouldChangeExisting ? changeResource : addResource;\r\n store.dispatch(action(RESOURCE_TYPE.attachedToLine, attachedToResource));\r\n}\r\n\r\nconst attachResourceToLine = (seg, segCorner, resourceType, featureId, partId, featureName, height) => {\r\n let historyCallBack = () => {};\r\n let newSection;\r\n\r\n const resourceActionMap = {\r\n 'edge': (segCorner) ? segCorner.addEdgeToCornerLine.bind(this, featureName, featureId) : seg.addEdgeToLine.bind(this, featureName, featureId),\r\n 'backsplash': (segCorner) ? segCorner.addBacksplashToCornerLine.bind(this, featureName, resourceType, featureId, height) : seg.addBacksplashToLine.bind(this, featureName, resourceType, featureId, height),\r\n [RESOURCE_ATTACHED_TO_TYPE.bumpout]: () => {\r\n if (seg && !seg.isWithBumpout()) seg.addBumpoutToLine();\r\n },\r\n [RESOURCE_ATTACHED_TO_TYPE.mitered]: () => {\r\n if (seg && !seg.isWithMitered()) {\r\n newSection = seg.addMiteredToLine();\r\n if (newSection) workspace.miteredController.addSection(newSection);\r\n }\r\n if (segCorner && !segCorner.isWithMitered()) {\r\n newSection = segCorner.addMiteredToCornerLine();\r\n if (newSection) workspace.miteredController.addSection(newSection);\r\n }\r\n },\r\n [RESOURCE_ATTACHED_TO_TYPE.underlayment]: () => {\r\n if (seg && !seg.isWithMitered()) {\r\n newSection = seg.addUnderlaymentToLine();\r\n if (newSection) workspace.underlaymentController.addSection(newSection);\r\n }\r\n },\r\n [RESOURCE_ATTACHED_TO_TYPE.crown_molding]: () => seg.addCrownMoldingToLine(featureName, featureId),\r\n [RESOURCE_ATTACHED_TO_TYPE.end_cap]: () => seg.addEndCapToLine(featureName, featureId),\r\n };\r\n\r\n if (resourceActionMap[resourceType]) {\r\n historyCallBack = resourceActionMap[resourceType];\r\n }\r\n\r\n historyCallBack();\r\n}\r\n\r\nexport const closeSQFTPopup = () => {\r\n const state = store.getState();\r\n const isSQFTPopupOpened = state.sqftMenuState.sqftPopup.isOpened;\r\n\r\n if (isSQFTPopupOpened) {\r\n store.dispatch(setSQFTPopup({\r\n title: workspace.intl.formatMessage({ id: \"sqft.popup.title.systemMessage\" }),\r\n content: '',\r\n isOpened: false,\r\n confirmCallback: () => {},\r\n confirmText: '',\r\n cancelCallback: () => {},\r\n cancelText: ''\r\n }));\r\n }\r\n}\r\n\r\nconst prepareResource = (seg, segCorner, resourceType, featureId, partId, featureName, resourceId, qtCatName, height, shouldShowEyeBall = true) => {\r\n const attachedToHovered = segCorner || seg;\r\n const id = resourceId || (attachedToHovered && attachedToHovered.id) || uuidv4();\r\n\r\n let attachedToParentId = null;\r\n if (attachedToHovered && attachedToHovered.getParent) {\r\n const parent = attachedToHovered.getParent();\r\n attachedToParentId = parent ? parent.id : null;\r\n }\r\n\r\n return {\r\n id,\r\n type: resourceType,\r\n featureId,\r\n name: featureName,\r\n attachedToId: attachedToHovered ? attachedToHovered.id : null,\r\n partId,\r\n part: segCorner ? 'lineCorner' : 'line',\r\n attachedToParentId,\r\n isDisabledInPopup: attachedToHovered ? attachedToHovered.isDisabledInPopup : null,\r\n qtCatName: qtCatName || getQtCatName(),\r\n shouldShowEyeBall,\r\n height,\r\n\r\n export() {\r\n let length = 0, realLength = 0, lineLength = 0, area = 0;\r\n const line = workspace.getLineOrCornerLineById(this.attachedToId);\r\n\r\n if (line) {\r\n switch (resourceType) {\r\n case RESOURCE_ATTACHED_TO_TYPE.edge: {\r\n const navItems = getEdgeFeatures();\r\n const navItem = navItems.find(edge => edge.part.dbFeature.id === this.featureId);\r\n const feature = navItem ? navItem.part : null;\r\n const unit = feature ? feature.dbFeature.unit : null;\r\n length = (unit && unit.toLowerCase() === \"each\") ? 1 : getEdgeLength(line);\r\n realLength = getEdgeLength(line);\r\n lineLength = sqftConfig.measureUnit === \"Imperial\" ? line.getLineLength() : line.getLineLengthMm();\r\n area = getEdgeArea(line, lineLength, featureId);\r\n break;\r\n }\r\n case RESOURCE_ATTACHED_TO_TYPE.backsplash:\r\n length = getBacksplashArea(line.getBacksplashHeight(), line);\r\n break;\r\n default:\r\n length = realLength = getEdgeLength(line);\r\n break;\r\n }\r\n return { ...this, length, realLength, lineLength, area };\r\n }\r\n\r\n return {};\r\n }\r\n };\r\n};\r\n\r\n","import * as types from \"./actionTypes\";\r\n\r\nexport const setResources = (resourceType, resources) => ({\r\n type: types.SET_RESOURCES,\r\n payload: {resourceType, resources}\r\n});\r\n\r\nexport const addResource = (resourceType, resource) => ({\r\n type: types.ADD_RESOURCE,\r\n payload: {resourceType, resource}\r\n});\r\n\r\nexport const changeResource = (resourceType, resource) => ({\r\n type: types.CHANGE_RESOURCE,\r\n payload: {resourceType, resource}\r\n});\r\n\r\nexport const deleteResource = (resourceType, id) => ({\r\n type: types.DELETE_RESOURCE,\r\n payload: {resourceType, id}\r\n});\r\n\r\nexport const deleteResourceAttachedTo = (resourceType, attachedTo) => ({\r\n type: types.DELETE_RESOURCE_ATTACHED_TO,\r\n payload: {resourceType, attachedTo}\r\n});\r\n\r\nexport const deleteAllResources = () => ({\r\n type: types.DELETE_ALL_RESOURCES,\r\n payload: {}\r\n});\r\n\r\nexport const setSelectedFeature = (selectedFeature) => ({\r\n type: types.SET_SELECTED_FEATURE,\r\n payload: {selectedFeature}\r\n});\r\n\r\nexport const setSelectedPartIds = (selectedPartIds) => ({\r\n type: types.SET_SELECTED_PART_IDS,\r\n payload: {selectedPartIds}\r\n});\r\n","import React, {Component} from 'react';\r\nimport {connect} from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport store from \"../../store\";\r\nimport {toggleUserPopup} from \"../../actions/actionFunctions\";\r\nimport Analytics from './../../analytics';\r\nimport {UserPopupTypes} from \"../visComponents/constants\";\r\nimport {toggleShowAssignQuotePopup} from \"../../actions/assignPopupFunctions\";\r\n\r\nclass UserLoginButton extends Component {\r\n\r\n static propTypes = {\r\n className: PropTypes.string\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n userLogoutActive: false\r\n }\r\n }\r\n\r\n static handleLoginClick = ({\r\n toggleUserPopup, toggleMobileButton = null,\r\n saveQuoteAfterLogin = false, userPopupType = UserPopupTypes.Unlock,\r\n checkout = false\r\n }) => {\r\n const state = store.getState();\r\n const fabricatorSettings = state.fabricatorState.settings;\r\n // console.log(\"state.userState.userIsLoggedIn\", state.userState.userIsLoggedIn);\r\n // console.log(\"state.userState.isPhoneNumberValidated:\", state.userState.isPhoneNumberValidated);\r\n // console.log(\"fabricatorSettings.twoFA:\", fabricatorSettings.twoFA);\r\n if (state.userState.userIsLoggedIn) {\r\n if (fabricatorSettings.twoFA) {\r\n if (!state.userState.isPhoneNumberValidated) {\r\n toggleUserPopup({userPopupOpened: true, saveQuoteAfterLogin, userPopupType, checkout});\r\n return false;\r\n } else {\r\n if (toggleMobileButton) {\r\n toggleMobileButton();\r\n return false;\r\n }\r\n }\r\n } else {\r\n if (toggleMobileButton) {\r\n toggleMobileButton();\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n } else {\r\n if (document.kvConfig.isBackend) {\r\n store.dispatch(toggleShowAssignQuotePopup(true));\r\n return false;\r\n }\r\n toggleUserPopup({userPopupOpened: true, saveQuoteAfterLogin, userPopupType, checkout});\r\n if (userPopupType !== UserPopupTypes.NewDesign) {\r\n window.allowClickLeadCapturePopup = false;\r\n }\r\n return false;\r\n }\r\n };\r\n\r\n handleUserLoginClick = (userPopupType = UserPopupTypes.Unlock) => {\r\n Analytics.sendClickEvent('user-login');\r\n UserLoginButton.handleLoginClick({...this.props, toggleMobileButton: this.toggleMobileButton, userPopupType})\r\n };\r\n\r\n toggleMobileButton = () => {\r\n this.setState({\r\n userLogoutActive: !this.state.userLogoutActive\r\n }, () => {\r\n setTimeout(() => {\r\n this.state.userLogoutActive\r\n ? window.addEventListener('click', this.handleDropdownWrapperBlur)\r\n : window.removeEventListener('click', this.handleDropdownWrapperBlur)\r\n }, 0)\r\n })\r\n };\r\n\r\n handleDropdownWrapperBlur = (e) => {\r\n const questionLogout = e.target.closest('[class*=\"scart-content__question\"]');\r\n if (!questionLogout) {\r\n this.toggleMobileButton();\r\n }\r\n };\r\n\r\n handleLogOutButtonClick = (logout) => {\r\n Analytics.sendClickEvent('user-logout');\r\n if (logout) {\r\n this.props.toggleUserPopup({\r\n userPopupOpened: false,\r\n userIsLoggedIn: false,\r\n isPhoneNumberValidated: false\r\n });\r\n }\r\n this.toggleMobileButton()\r\n };\r\n\r\n render() {\r\n return (\r\n
\r\n this.handleUserLoginClick()}>\r\n \r\n {this.props.userIsLoggedIn\r\n ? \r\n : }\r\n \r\n \r\n
\r\n
\r\n

\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n userIsLoggedIn: store.userState.userIsLoggedIn,\r\n isPhoneNumberValidated: store.userState.isPhoneNumberValidated,\r\n fabricatorSettings: store.fabricatorState.settings,\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, {\r\n toggleUserPopup,\r\n toggleShowAssignQuotePopup\r\n})(UserLoginButton);\r\n","import workspace from \"../../core/workspace\";\r\n\r\nexport class SQFTResourceController {\r\n resourceName = null\r\n\r\n constructor(resourceName) {\r\n this.resourceName = resourceName\r\n }\r\n\r\n getResources() {\r\n return workspace[this.resourceName];\r\n }\r\n\r\n addResource(resource) {\r\n workspace[this.resourceName].push(resource);\r\n\r\n return workspace[this.resourceName];\r\n }\r\n\r\n destroyResource(resource) {\r\n const index = workspace[this.resourceName].indexOf(resource);\r\n if (index > -1) {\r\n resource.destroy();\r\n workspace[this.resourceName].splice(index, 1);\r\n }\r\n\r\n return workspace[this.resourceName];\r\n }\r\n\r\n removeResource = (resource) => {\r\n const index = workspace[this.resourceName].indexOf(resource);\r\n if (index > -1) {\r\n workspace[this.resourceName].splice(index, 1);\r\n }\r\n\r\n return workspace[this.resourceName];\r\n };\r\n\r\n getResourceById(searchedId) {\r\n return workspace[this.resourceName].find(resource => resource.id === searchedId);\r\n }\r\n\r\n removeAllResources() {\r\n for (let resource of workspace[this.resourceName]) {\r\n resource.destroy()\r\n }\r\n workspace[this.resourceName] = [];\r\n }\r\n\r\n exportData() {\r\n const exportedData = [];\r\n for (let resource of workspace[this.resourceName]) {\r\n exportedData.push(resource.export ? resource.export() : resource);\r\n }\r\n return exportedData\r\n }\r\n\r\n importData(data) {\r\n workspace[this.resourceName] = [];\r\n for (let resource of data) {\r\n workspace[this.resourceName].push(resource.import ? resource.import() : resource);\r\n }\r\n }\r\n}\r\n\r\n","import RenderCabinets from \"./renderCabinets\";\r\nimport sqftConfig from \"../store/sqftConfig\";\r\nimport {\r\n getParallelPoints,\r\n getPointBetweenPoints,\r\n getPointOnTheLine,\r\n rotatePoint,\r\n getPointDistance,\r\n measureDistanceToInches, addDecimalToLength\r\n} from \"../../../helpers/sqftHelper\";\r\nimport workspace from \"../core/workspace\";\r\nimport {attachResource} from \"../core/controls/resourseCanas\";\r\nimport {MEASURE_UNITS, RESOURCE_ATTACHED_TO_TYPE} from \"../../../constants\";\r\nimport workspaceControllers from \"../store/workspaceControllers\";\r\nimport {areCollinearAndOverlap, calculateLeg, roundShapePoints} from \"../../../helpers/coordinatesHelper\";\r\nimport {DIRECTIONS} from \"../../../helpers/shapeHelper\";\r\nimport Point from \"../core/shapes/point\";\r\nimport Line from \"../core/shapes/line\";\r\n\r\n/**\r\n * @param line {{}}\r\n * @return {PointV2}\r\n */\r\nexport const getLineCrownMoldingPoints = (line) => {\r\n const linePointsIds = [\r\n line.from.id,\r\n line.to.id,\r\n ]\r\n const shapePoints = line.getParent().getPointsPointField();\r\n\r\n return RenderCabinets.getDiagonalPointsForTheLine(shapePoints, sqftConfig.crownMoldingParams.distance, linePointsIds);\r\n}\r\n\r\n/**\r\n * @param point1 {point}\r\n * @param point2 {point}\r\n * @param outlineDistance {int}\r\n * @return {[]}\r\n */\r\nexport const getLineBordersArrayV1 = (point1, point2, outlineDistance) => {\r\n const pointField1 = point1.getPointField(false);//point1 instanceof PointV2 ? point1.getPointField(false) : getPointField(point1.x, point1.y, point1.getParent());\r\n const pointField2 = point2.getPointField(false);//point2 instanceof PointV2 ? point2.getPointField() : getPointField(point2.x, point2.y, point2.getParent());\r\n const pointOnTheLine = getPointOnTheLine(pointField1, pointField2, outlineDistance);\r\n const pointOnTheLine2 = getPointOnTheLine(pointField2, pointField1, outlineDistance);\r\n return [\r\n rotatePoint(pointField1, pointOnTheLine, 90),\r\n rotatePoint(pointField1, pointOnTheLine, -90),\r\n rotatePoint(pointField2, pointOnTheLine2, 90),\r\n rotatePoint(pointField2, pointOnTheLine2, -90)\r\n ];\r\n}\r\n\r\n/**\r\n * @param point1 {point}\r\n * @param point2 {point}\r\n * @param outlineDistance {int}\r\n * @return {[]}\r\n */\r\nexport const getLineBordersArrayV2 = (point1, point2, outlineDistance) => {\r\n const pointField1 = point1.getPointField(false);//point1 instanceof PointV2 ? point1.getPointField(false) : getPointField(point1.x, point1.y, point1.getParent());\r\n const pointField2 = point2.getPointField(false);//point2 instanceof PointV2 ? point2.getPointField() : getPointField(point2.x, point2.y, point2.getParent());\r\n const [parallelPoint1, parallelPoint2] = getParallelPoints(pointField1, pointField2, outlineDistance);\r\n const [parallelPoint4, parallelPoint3] = getParallelPoints(pointField1, pointField2, -outlineDistance);\r\n return [\r\n parallelPoint1,\r\n parallelPoint2,\r\n parallelPoint3,\r\n parallelPoint4\r\n ];\r\n}\r\n\r\n\r\n/**\r\n * @param from {point}\r\n * @param to {point}\r\n * @param lineThickness {int}\r\n * @return {[]}\r\n */\r\nexport const getBordersOfTwoPoints = (from, to, lineThickness) => {\r\n const lineBorderArray = getLineBordersArrayV2(from, to, lineThickness);\r\n\r\n //console.log(\"lineBorderArray\", lineBorderArray);\r\n let virtualLines = [];\r\n for (const borderPointKey in lineBorderArray) {\r\n const len = lineBorderArray.length;\r\n const currentLineBorderPoint = lineBorderArray[+borderPointKey];\r\n //const previousLineBorderPoint = lineBorderArray[(lineBorderPointIndex + len - 1) % len];\r\n const nextLineBorderPoint = lineBorderArray[(+borderPointKey + 1) % len];\r\n let virtualLine = {\r\n from: {\r\n ...currentLineBorderPoint,\r\n modelCorePoint: {\r\n getPosX: function () { return currentLineBorderPoint.x },\r\n getPosY: function () { return currentLineBorderPoint.y }\r\n },\r\n getPointField: function () { return currentLineBorderPoint }\r\n },\r\n to: {\r\n ...nextLineBorderPoint,\r\n modelCorePoint: {\r\n getPosX: function () { return nextLineBorderPoint.x },\r\n getPosY: function () { return nextLineBorderPoint.y }\r\n },\r\n getPointField: function () { return nextLineBorderPoint }\r\n },\r\n getOffset: () => {\r\n return this.getOffset()\r\n }\r\n }\r\n virtualLines.push(virtualLine);\r\n }\r\n\r\n return virtualLines\r\n}\r\n\r\nexport const addEdgeToTheLines = (shapeId, edge, lineNumbers, shouldShowEyeBall = true) => {\r\n const shape = workspace.getShapeById(shapeId);\r\n const lines = shape.getLines();\r\n\r\n lines.forEach((line, index) => {\r\n if (lineNumbers.includes(index)) {\r\n //line.addEdgeToLine(edge.getFeatureName(), edge.dbFeature.id); // old functional\r\n attachResource(line,\r\n null,\r\n RESOURCE_ATTACHED_TO_TYPE.edge,\r\n edge.dbFeature.id,\r\n null,\r\n edge.getFeatureName(),\r\n 0,\r\n null,\r\n null,\r\n true,\r\n shouldShowEyeBall)\r\n }\r\n })\r\n}\r\n\r\n/**\r\n * Add Edge Without feature for the slab and material calculation\r\n * @param shapeId\r\n * @param lineNumbers\r\n */\r\nexport const addFakeEdgeToLines = (shapeId, lineNumbers) => {\r\n const shape = workspace.getShapeById(shapeId);\r\n const lines = shape.getLines();\r\n\r\n lines.forEach((line, index) => {\r\n if (lineNumbers.includes(index)) {\r\n line.setFakeEdge(true);\r\n }\r\n })\r\n}\r\n\r\nexport const setLineParams = (shapeId, lineNumbers, params) => {\r\n const shape = workspace.getShapeById(shapeId);\r\n const lines = shape.getLines();\r\n\r\n lines.forEach((line, index) => {\r\n if (lineNumbers.includes(index)) {\r\n line.setStateParams(params);\r\n }\r\n })\r\n}\r\n\r\nexport const updateShapeWaterfallLength = (line) => {\r\n const shape = line.getParent();\r\n for (const shapeLine of shape.getLines()) {\r\n if (shapeLine.isWithWaterfallToolEdge() || shapeLine.isWithPeninsulaUnderwrapEdge()) {\r\n workspaceControllers.waterfall.updateWaterfallLength(shapeLine);\r\n }\r\n }\r\n}\r\n\r\nexport const updateMiteredLength = (line) => {\r\n const shape = line.getParent();\r\n for (const shapeLine of shape.getLines()) {\r\n if (shapeLine.isWithMitered()) {\r\n shapeLine.miteredOverlay.setNewLineWidth();\r\n }\r\n }\r\n}\r\n\r\nexport const updateUnderlaymentLength = (line) => {\r\n const shape = line.getParent();\r\n for (const shapeLine of shape.getLines()) {\r\n if (shapeLine.isWithUnderlayment()) {\r\n shapeLine.underlaymentOverlay.setNewLineWidth();\r\n }\r\n }\r\n}\r\n\r\n/**\r\n *\r\n * @param points[]\r\n * @return lines[{}]\r\n */\r\nexport const createSimpleLinesFromPoints = (points) => {\r\n let lines = [];\r\n\r\n for (let i = 0; i < points.length; i++) {\r\n let line = {\r\n from: points[i],\r\n to: points[(i + 1) % points.length]\r\n };\r\n lines.push(line);\r\n }\r\n\r\n return lines;\r\n};\r\n\r\nexport const initAllLineLength = () => {\r\n const lines = workspace.getLines();\r\n for (const line of lines) {\r\n if (line.overlay) {\r\n line.overlay.reInitEvents();\r\n }\r\n }\r\n}\r\n\r\nexport const hideAllLineLength = () => {\r\n const lines = workspace.getLines();\r\n for (const line of lines) {\r\n if (line.overlay) {\r\n line.overlay.deregisterEvents();\r\n }\r\n }\r\n}\r\n\r\nexport const findCollinearLine = (searchLine) => {\r\n const lines = workspace.getLines();\r\n const roundedSearchLinePoints = roundShapePoints([searchLine.from.getPointPosOnWorkspace(), searchLine.to.getPointPosOnWorkspace()]);\r\n for (const testLine of lines) {\r\n const roundedTestPoints = roundShapePoints([testLine.from.getPointPosOnWorkspace(), testLine.to.getPointPosOnWorkspace()]);\r\n if (areCollinearAndOverlap(roundedSearchLinePoints[0], roundedSearchLinePoints[1], roundedTestPoints[0], roundedTestPoints[1], 1)) {\r\n return testLine\r\n }\r\n }\r\n}\r\n\r\nexport const isHorizontalDirection = (lineDirection) => {\r\n return [DIRECTIONS.WEST, DIRECTIONS.EAST].includes(lineDirection)\r\n}\r\n\r\nexport const isVerticalDirection = (lineDirection) => {\r\n return [DIRECTIONS.NORTH, DIRECTIONS.SOUTH].includes(lineDirection)\r\n}\r\n\r\nexport const isWesternHemisphere = (lineDirection) => {\r\n return [DIRECTIONS.WEST, DIRECTIONS.NORTHWEST, DIRECTIONS.NORTH, DIRECTIONS.NORTHEAST].includes(lineDirection);\r\n}\r\n\r\nexport const isEasternHemisphere = (lineDirection) => {\r\n return [DIRECTIONS.EAST, DIRECTIONS.SOUTHWEST, DIRECTIONS.SOUTH, DIRECTIONS.SOUTHEAST].includes(lineDirection);\r\n}\r\n\r\n/**\r\n *\r\n */\r\nexport const getLinesWithoutAnglePoints = (lines) => {\r\n const adjustedLines = [];\r\n\r\n lines.forEach((line) => {\r\n if (line.to.angle > 0 && line.from.angle > 0) {\r\n // Both 'to' and 'from' have angles, adjust both points\r\n const legLengthTo = calculateLeg(line.to.angle);\r\n const legLengthFrom = calculateLeg(line.from.angle);\r\n\r\n // Calculate new points for 'to' and 'from'\r\n const linePosTo = getPointBetweenPoints(line.to, line.from, legLengthFrom, -2);\r\n const linePointTo = new Point(linePosTo.x, linePosTo.y);\r\n\r\n const linePosFrom = getPointBetweenPoints(line.from, line.to, legLengthFrom, -2);\r\n const linePointFrom = new Point(linePosFrom.x, linePosFrom.y);\r\n\r\n // Add current line resized\r\n const cloneLine = { ...line };\r\n cloneLine.to = linePointTo;\r\n cloneLine.from = linePointFrom;\r\n adjustedLines.push(cloneLine);\r\n\r\n // Create adjusted line\r\n const nextLine = line.getParent().getNextLine(line);\r\n const newLinePosFrom = getPointBetweenPoints(nextLine.from, nextLine.to, legLengthTo, -2);\r\n const newLinePointFrom = new Point(newLinePosFrom.x, newLinePosFrom.y);\r\n\r\n adjustedLines.push(new Line(linePointTo, newLinePointFrom, line.getParent()));\r\n\r\n debugger // eslint-disable-line no-debugger\r\n } else if (line.to.angle > 0) {\r\n // Only 'to' has an angle\r\n const legLength = calculateLeg(line.to.angle);\r\n const newLinePosFrom = getPointBetweenPoints(line.to, line.from, legLength, -2);\r\n const newLinePointFrom = new Point(newLinePosFrom.x, newLinePosFrom.y);\r\n\r\n const nextLine = line.getParent().getNextLine(line);\r\n const newLinePosTo = getPointBetweenPoints(nextLine.from, nextLine.to, legLength, -2);\r\n const newLinePointTo = new Point(newLinePosTo.x, newLinePosTo.y);\r\n\r\n // Add current line resized\r\n const cloneLine = { ...line };\r\n cloneLine.to = newLinePointFrom;\r\n adjustedLines.push(cloneLine);\r\n\r\n // Create adjusted line\r\n adjustedLines.push(new Line(newLinePointFrom, newLinePointTo, line.getParent()));\r\n\r\n } else if (line.from.angle > 0) {\r\n // Only 'from' has an angle\r\n const legLength = calculateLeg(line.from.angle);\r\n const newLinePosTo = getPointBetweenPoints(line.from, line.to, legLength, -2);\r\n const newLinePointTo = new Point(newLinePosTo.x, newLinePosTo.y);\r\n\r\n const cloneLine = { ...line };\r\n cloneLine.from = newLinePointTo;\r\n adjustedLines.push(cloneLine);\r\n\r\n } else {\r\n // No angles, add line as is\r\n adjustedLines.push(line);\r\n }\r\n });\r\n\r\n return adjustedLines;\r\n};\r\n\r\n\r\n/**\r\n * Function to find the longest line in an array of lines.\r\n * @param {Array} lines - Array of lines where each line has properties from and to.\r\n * @returns {Object} The longest line object.\r\n */\r\nexport function findLongestLine(lines) {\r\n if (!lines || lines.length === 0) {\r\n return null;\r\n }\r\n\r\n let longestLine = lines[0];\r\n let maxLength = getPointDistance(longestLine.from, longestLine.to);\r\n\r\n lines.forEach(line => {\r\n const length = getPointDistance(line.from, line.to);\r\n if (length > maxLength) {\r\n maxLength = length;\r\n longestLine = line;\r\n }\r\n });\r\n\r\n return longestLine;\r\n}\r\n\r\nexport function getDistanceLength(distance) {\r\n switch (sqftConfig.measureUnit) {\r\n case MEASURE_UNITS.Metric:\r\n return measureDistanceToInches(distance).millimeters\r\n case MEASURE_UNITS.Imperial:\r\n default:\r\n return addDecimalToLength(measureDistanceToInches(distance))\r\n }\r\n}\r\n","import {s3Path} from \"../../misc/utils\";\r\n\r\nexport default class Layer {\r\n zIndex = 0;\r\n\r\n src = '';\r\n\r\n fromS3 = true;\r\n\r\n /**\r\n * @param visualizer {string} bv or kv\r\n * @param zIndex {number}\r\n * @param src {string}\r\n * @param fromS3 {boolean} Whether the layer comes from S3 bucket ir from local resources\r\n */\r\n constructor(visualizer, zIndex = 0, src = '', fromS3 = true) {\r\n this.zIndex = zIndex;\r\n this.src = src;\r\n this.fromS3 = fromS3;\r\n this.visualizer = visualizer;\r\n this.bucketName = \"\";\r\n }\r\n\r\n /**\r\n *\r\n * @returns {{backgroundImage}|*}\r\n */\r\n bgImg(isCropped) {\r\n return this.fromS3 ? s3Path(this.src, this.visualizer, isCropped, this.bucketName) : this.src;\r\n }\r\n\r\n fromS3Binding(s3Binding) {\r\n this.src = s3Binding ? s3Binding.path : null;\r\n this.bucketName = s3Binding ? s3Binding.bucketName : \"\";\r\n }\r\n\r\n /**\r\n *\r\n * @param ar {Array.}\r\n */\r\n addTo(ar) {\r\n if (this.src)\r\n ar.push(this);\r\n }\r\n}\r\n\r\n\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {Shower} from \"../../parts/shower\";\r\nimport {Vanity} from \"../../parts/vanity\";\r\nimport {getCurrentRoomType} from \"../../../../appLayout\";\r\nimport {LOOK_ROOM_TYPES} from \"../../constants\";\r\n\r\nconst splitWallPartIds = [\"left_wall\", \"right_wall\", \"split_wall\", \"left_wall_splitter\"];\r\nconst shouldCheckAdditionalPartsConditions = [\"front_wall\", \"right_wall\", \"left_wall\"];\r\n\r\nexport default class WallCommon extends IntermediatePart {\r\n\r\n constructor(props) {\r\n super(props);\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n const showerParent = this.getParent().layout.parts[Shower.id];\r\n const showerSize = showerParent ? showerParent.showerSize() : null;\r\n if (showerSize) {\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerSize\r\n })\r\n }\r\n\r\n if (getCurrentRoomType(showerParent.layout) === LOOK_ROOM_TYPES.as && splitWallPartIds.every(partId => this.partId !== partId)) {\r\n const wallParent = this.getParent();\r\n if (wallParent && wallParent.splitWall) {\r\n conditions.push({\r\n propName: \"SplitWallType\",\r\n propValue: wallParent.getSplitWallType()\r\n })\r\n }\r\n }\r\n return conditions\r\n }\r\n\r\n getAdditionalPartsConditions(arrayOfConditions = []) {\r\n if (shouldCheckAdditionalPartsConditions.every(partId => this.partId !== partId)) {\r\n return arrayOfConditions\r\n }\r\n const layout = this.getParent().layout;\r\n if (!layout) {\r\n return arrayOfConditions\r\n }\r\n const vanityParent = layout.parts[Vanity.id];\r\n if (!vanityParent) {\r\n return arrayOfConditions\r\n }\r\n // if (!arrayOfConditions.some(condition => condition.propName === \"VanitySize\")) {\r\n // const vanitySize = vanityParent.counterTopSize(this);\r\n // if (vanitySize) {\r\n // arrayOfConditions.push({\r\n // propName: \"VanitySize\",\r\n // propValue: vanitySize\r\n // })\r\n // }\r\n // }\r\n if (!arrayOfConditions.some(condition => condition.propName === \"MirrorShape\")) {\r\n const mirror = vanityParent.mirror;\r\n if (mirror && mirror.activeFeature && !mirror.disabled && mirror.activeFeature.metaData[\"MirrorShape\"]) {\r\n arrayOfConditions.push({\r\n propName: \"MirrorShape\",\r\n propValue: mirror.activeFeature.metaData[\"MirrorShape\"]\r\n })\r\n }\r\n }\r\n return arrayOfConditions\r\n }\r\n\r\n}\r\n","import {Shower} from \"../../parts/shower\";\r\nimport {IntermediatePart} from \"../../intermediatePart\";\r\nimport {SIDE_POSITIONS} from \"../../constants\";\r\n// import {SIDE_POSITIONS} from \"../../constants\";\r\n\r\nexport default class AccessoryCommon extends IntermediatePart {\r\n\r\n constructor(props) {\r\n super(props);\r\n }\r\n\r\n getArrayOfConditions() {\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n const layout = this.getParent().layout;\r\n const showerParent = layout.parts[Shower.id];\r\n const showerSize = showerParent.showerSize();\r\n if (showerParent && showerSize) {\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerSize\r\n });\r\n }\r\n return conditions\r\n }\r\n\r\n checkRelatedFeatureGroupPositions(position) {\r\n const accessoriesParent = this.getParent();\r\n const showerParent = accessoriesParent.layout.parts[Shower.id]; // no need for another check\r\n const showerSize = showerParent.showerSize();\r\n let otherFeatureGroup = null;\r\n switch (this.partId) {\r\n case \"grab_bar\":\r\n otherFeatureGroup = accessoriesParent.soapDish;\r\n break;\r\n case \"soap_dish\":\r\n otherFeatureGroup = accessoriesParent.grabBar;\r\n break;\r\n case \"shower_seats\":\r\n otherFeatureGroup = accessoriesParent.largeCornerSeat;\r\n break;\r\n case \"large_corner_seat\":\r\n otherFeatureGroup = accessoriesParent.seats;\r\n break;\r\n default:\r\n break;\r\n }\r\n if (showerSize === \"30\") {\r\n Object.keys(otherFeatureGroup.layerPositions).forEach(key => {\r\n otherFeatureGroup.layerPositions[key] = null\r\n })\r\n } else {\r\n if (this.layerPositions[position] && otherFeatureGroup && otherFeatureGroup.layerPositions[position] && !otherFeatureGroup.disabled) {\r\n const newPosition = position === SIDE_POSITIONS[0] ? SIDE_POSITIONS[1] : SIDE_POSITIONS[0];\r\n if (!this.layerPositions[newPosition]) {\r\n const matchingPositionFeature = otherFeatureGroup.getMatchingPositionFeature(newPosition, otherFeatureGroup.layerPositions[position]);\r\n if (matchingPositionFeature) {\r\n otherFeatureGroup.layerPositions[newPosition] = matchingPositionFeature;\r\n }\r\n }\r\n otherFeatureGroup.layerPositions[position] = null; //2) remove old soap dish position\r\n }\r\n }\r\n }\r\n\r\n}\r\n","import React, {Component} from 'react';\r\nimport {connect} from 'react-redux';\r\nimport PropTypes from 'prop-types';\r\nimport findIndex from \"lodash/findIndex\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport * as actions from '../../../../actions/actionFunctions';\r\n\r\n// import {DesignNavigationItem, Layout} from \"../core/layout\";\r\n\r\nexport const toggleFilterArrayValue = (array, {filterId, filterGroupId}) => {\r\n let index = findIndex(array, {filterGroupId});\r\n if (index >= 0) {\r\n array[index].filterId === filterId ? array.splice(index, 1) : array.splice(index, 1, {filterId, filterGroupId})\r\n } else {\r\n array.push({filterId, filterGroupId});\r\n }\r\n return array;\r\n};\r\n\r\nexport const replaceFilterArrayValue = (array, {filterId, filterGroupId}) => {\r\n let index = findIndex(array, {filterGroupId});\r\n if (index >= 0) {\r\n array.splice(index, 1, {filterId, filterGroupId})\r\n } else {\r\n array.push({filterId, filterGroupId});\r\n }\r\n return array;\r\n};\r\n\r\nconst setDefaultFilterArrayValue = (array, filterGroupId) => {\r\n let index = findIndex(array, {filterGroupId});\r\n if (index >= 0) {\r\n array.splice(index, 1);\r\n }\r\n return array;\r\n};\r\n\r\nclass FilterSwitchers extends Component {\r\n\r\n static propTypes = {\r\n // layout: PropTypes.instanceOf(Layout),\r\n isMobile: PropTypes.bool,\r\n activePart: PropTypes.object.isRequired,\r\n filterGroupName: PropTypes.string.isRequired\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n availableFilterValues: [],\r\n filterGroup: {}\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n this.setAvailableFiltersValues(this.props);\r\n }\r\n\r\n componentWillReceiveProps(nextProps) {\r\n if (nextProps.activePart && this.props.activePart && nextProps.activePart.partName !== this.props.activePart.partName) {\r\n this.setAvailableFiltersValues(nextProps);\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n this.setDefaultFilterValue();\r\n }\r\n\r\n setAvailableFiltersValues(nextProps = this.props) {\r\n const availableFilterValues = [];\r\n const filterGroup = nextProps.filterGroups.find(group => group.name === nextProps.filterGroupName);\r\n const fabricatorData = this.props.fabricatorData;\r\n if (filterGroup) {\r\n nextProps.activePart.features.forEach((feature) => {\r\n if (feature.dbFeature.filterValueIDs[filterGroup.id]) {\r\n feature.dbFeature.filterValueIDs[filterGroup.id].forEach((filterValue) => {\r\n if (!availableFilterValues.includes(filterValue)) {\r\n const fValue = filterGroup.values.find(val => val.id === filterValue);\r\n if (fValue.value === \"Slab\") { // we need to look for existing DuraBath Natural Stone features filter\r\n if (!fabricatorData || (fabricatorData && !fabricatorData.isRebath)) {\r\n availableFilterValues.push(filterValue)\r\n }\r\n } else if (fValue.value === \"DuraBath Natural Stone\") {\r\n if (!fabricatorData || (fabricatorData && fabricatorData.isRebath)) {\r\n availableFilterValues.push(filterValue)\r\n }\r\n } else {\r\n availableFilterValues.push(filterValue)\r\n }\r\n }\r\n })\r\n }\r\n });\r\n this.setState({\r\n availableFilterValues,\r\n filterGroup\r\n })\r\n }\r\n }\r\n\r\n setActiveFilterValue = (filterId, filterGroupId) => {\r\n this.props.setSelectedFilters(toggleFilterArrayValue([...this.props.selectedFilters], {filterId, filterGroupId}));\r\n };\r\n\r\n setDefaultFilterValue = () => {\r\n this.props.setSelectedFilters(setDefaultFilterArrayValue([...this.props.selectedFilters], this.state.filterGroup.id));\r\n };\r\n\r\n render() {\r\n\r\n // console.log('parentItem', this.props.parentItem);\r\n // console.log('activePart', this.props.activePart);\r\n // console.log('selectedFilters', this.props.selectedFilters);\r\n // console.log('availableFilterValues:', this.state.availableFilterValues);\r\n let activeFilterValueId = null;\r\n if (this.state.availableFilterValues.length && this.state.filterGroup && this.props.selectedFilters.length) {\r\n const appliedFilter = this.props.selectedFilters.find(filterObj => filterObj.filterGroupId === this.state.filterGroup.id);\r\n if (appliedFilter) {\r\n activeFilterValueId = appliedFilter.filterId\r\n }\r\n }\r\n\r\n return this.state.availableFilterValues.length ? (\r\n this.props.isMobile ? (\r\n
\r\n
    \r\n
  • \r\n \r\n
  • \r\n {this.state.availableFilterValues.map((filterValueId, index) => {\r\n const filterValueObject = this.state.filterGroup.values.find(val => val.id === filterValueId);\r\n return (\r\n
  • this.setActiveFilterValue(filterValueId, this.state.filterGroup.id)}>\r\n {filterValueObject.value}\r\n
  • \r\n )\r\n })}\r\n
\r\n
\r\n ) : (\r\n
\r\n
    \r\n
  • \r\n \r\n \r\n \r\n
  • \r\n {this.state.availableFilterValues.map((filterValueId, index) => {\r\n const filterValueObject = this.state.filterGroup.values.find(val => val.id === filterValueId);\r\n return (\r\n
  • this.setActiveFilterValue(filterValueId, this.state.filterGroup.id)}>\r\n \r\n {filterValueObject.value}\r\n
  • \r\n )\r\n })}\r\n
\r\n
\r\n )\r\n ) : null\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => ({\r\n filterGroups: store.filterState.filterGroups,\r\n fabricatorData: store.fabricatorState,\r\n selectedFilters: store.filterState.selectedFilters\r\n});\r\n\r\nconst mapDispatchToProps = (dispatch) => ({\r\n setSelectedFilters: (selectedFilters) => dispatch(actions.setSelectedFilters(selectedFilters)),\r\n});\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(FilterSwitchers);\r\n","import {PartMenuType} from \"../../visComponents/constants\";\r\nimport {iCmp} from \"../../../misc/utils\";\r\nimport Layer from \"../../visComponents/layer\";\r\nimport store from '../../../store';\r\nimport {LayoutType, METADATA} from \"./constants\";\r\nimport PartCommon from \"../../visComponents/partCommon\";\r\n\r\nexport class Part extends PartCommon {\r\n\r\n constructor(isParent, isChild, menuType) {\r\n super();\r\n if (isChild || (isParent && menuType === PartMenuType.Simple)) {\r\n this.featuresList = {};\r\n this.featuresPartsList = {};\r\n this.modulePartsList = {};\r\n Object.keys(LayoutType).forEach(layoutName => {\r\n this.featuresList[layoutName] = [];\r\n this.featuresPartsList[layoutName] = [];\r\n this.modulePartsList[layoutName] = [];\r\n });\r\n this.allFeaturesReceived = false;\r\n this.realFeaturesReceived = false; // this prop is need on Scroll (if features count more that 1000)\r\n this.nextFeaturesPageToLoad = 0;\r\n this.activeFeature = null;\r\n this.placeholderFeature = null;\r\n this.shadowFeature = null;\r\n this.placeholderChanged = false;\r\n this.firstClick = {\r\n \"0\": false\r\n };\r\n this.activeLockedFeature = null;\r\n this.activeNotInVisualizerFeature = null; // is needed to display in the QT selected activeNotInVisualizerFeature, but render proper activeFeature layer(for example, countertop)\r\n // name = \"\";\r\n this.visible = true;\r\n this.categoryEnabled = false;\r\n this.layout = null;\r\n this.featureGroupVisible = true; // dashboard's feature group eye ball logic\r\n this.featureGroupEnabled = true; // dashboard's feature group checkbox logic\r\n this.selectedFeaturesHistory = []; // array of strings(names). updated every time item is selected\r\n this.filtersReceived = null; // array of filters values, comes from BE, for ex [1221, 347, 1124]\r\n }\r\n if (isParent) {\r\n this.partThumbnail = '';\r\n this.relatedItems = [];\r\n }\r\n if (!isChild && !isParent) {\r\n this.dbFeature = null;\r\n this.layer = new Layer(\"kv\");\r\n this._customDisplayName = null;\r\n this.notesList = {};\r\n }\r\n this.partName = \"\";\r\n }\r\n\r\n set features(featuresList) {\r\n // features can't be set directly, we need to change featuresList array\r\n }\r\n get features() {\r\n const layout = this.layout || this.getParent().layout;\r\n return this.featuresList[layout.getCurrentLayoutName()]\r\n }\r\n set featuresParts(featuresList) {\r\n // featuresParts can't be set directly, we need to change featuresPartsList array\r\n }\r\n get featuresParts() {\r\n const layout = this.layout || this.getParent().layout;\r\n return this.featuresPartsList[layout.getCurrentLayoutName()]\r\n }\r\n get moduleParts() {\r\n const layout = this.layout || this.getParent().layout;\r\n return this.modulePartsList[layout.getCurrentLayoutName()]\r\n }\r\n\r\n setGroupFeatures(dbFeaturesArray, pageSize = 1000, setNextPage = true, layoutAbbr = \"\", loadedPage = null, fromSearch = false) {\r\n\r\n super.setGroupFeatures(dbFeaturesArray, pageSize, setNextPage, layoutAbbr, loadedPage, fromSearch)\r\n\r\n if (this.partId === \"edge_profile\" || this.partId === \"center_island_edge\") {\r\n const countertop = this.getParent().countertop;\r\n // console.log('countertop', countertop);\r\n const filterGroups = store.getState().filterState.filterGroups;\r\n const edgeGroup = filterGroups.find(group => group.name === \"Edge\" || group.name === \"Edge Profile\");\r\n if (edgeGroup && countertop) {\r\n Object.keys(this.featuresList).forEach(layoutType => {\r\n for (let i = 0; i < this.featuresList[layoutType].length; i++) {\r\n const feature = this.featuresList[layoutType][i];\r\n if (feature.dbFeature.filterValueIDs[edgeGroup.id]) {\r\n const edgeValue = feature.dbFeature.filterValueIDs[edgeGroup.id][0];\r\n const edgeExist = countertop.featuresList[layoutType].some(countertopFeature => {\r\n return countertopFeature.dbFeature.filterValueIDs[edgeGroup.id]\r\n && countertopFeature.dbFeature.filterValueIDs[edgeGroup.id].includes(edgeValue)\r\n });\r\n if (edgeExist) {\r\n feature.notAvailableInVisualizer = false\r\n }\r\n }\r\n }\r\n });\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Checks whether a given for condition matches the needed value (or array of values)\r\n * @param name {string}\r\n * @param value {string || array}\r\n * @returns {int} -1 - no such for condition, 0 - no match, 1 - matches\r\n */\r\n matchesMetaForCondition(name, value) {\r\n return this.metaData[name] && this.metaData[name].some(condValue => {\r\n return condValue === METADATA.ALL || (Array.isArray(value) ? value.some(val => iCmp(condValue, val, true)) : iCmp(condValue, value, true))\r\n });\r\n }\r\n\r\n matchesMetaForArrayOfConditions(arrayOfConditions) {\r\n return arrayOfConditions.every((condition) => {\r\n return this.matchesMetaForCondition(condition.propName, condition.propValue);\r\n })\r\n }\r\n}\r\n\r\n\r\n","import React, {Component} from 'react';\r\nimport {connect} from 'react-redux';\r\nimport PropTypes from 'prop-types';\r\nimport findIndex from \"lodash/findIndex\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport * as actions from '../../../../actions/actionFunctions';\r\n\r\nexport const addFilterArrayValue = (array, {filterId, filterGroupId}) => {\r\n let index = findIndex(array, {filterGroupId});\r\n if (index >= 0) {\r\n array.splice(index, 1, {filterId, filterGroupId})\r\n } else {\r\n array.push({filterId, filterGroupId});\r\n }\r\n return array;\r\n};\r\n\r\nclass FilterSelection extends Component {\r\n\r\n static propTypes = {\r\n removeFilterSelection: PropTypes.func.isRequired,\r\n isMobile: PropTypes.bool,\r\n activePart: PropTypes.object\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n availableFilterValues: [],\r\n filterGroup: {}\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n this.setAvailableFiltersValues(this.props);\r\n }\r\n\r\n componentWillReceiveProps(nextProps) {\r\n if (nextProps.activePart && this.props.activePart && nextProps.activePart.partName !== this.props.activePart.partName) {\r\n this.setAvailableFiltersValues(nextProps);\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n // this.setDefaultFilterValue();\r\n }\r\n\r\n /**\r\n * Fucntion is needed to find among filterGroups needed group & to return only those filters that has\r\n * at least 1 feature with it assigned\r\n * @param {Array} filterGroups\r\n * @param {String} filterGroupName\r\n * @param {Object} activePart\r\n * @param {Object} fabricatorData\r\n * @param {Array} selectedFilters // example: [{filterId: 1113, filterGroupId: 15}]\r\n * @return {Array} ArrayOf filterIds // example: [1231, 1587, 1596]\r\n */\r\n static getAvailableFilterValues(filterGroups, filterGroupName, activePart, fabricatorData, selectedFilters = []) {\r\n const availableFilterValues = [];\r\n const filterGroup = filterGroups.find(group => group.name === filterGroupName);\r\n if (filterGroup && activePart.featuresList) {\r\n const featuresToFind = (filterGroup.name === \"Inlay Type\") ? activePart.moduleParts : activePart.features;\r\n // console.log(\"featuresToFind\", featuresToFind);\r\n // let missingFilters = {};\r\n featuresToFind.forEach((feature) => {\r\n if (feature.dbFeature.filterValueIDs[filterGroup.id] && selectedFilters.every(filterObject => {\r\n return feature.dbFeature.filterValueIDs[filterObject.filterGroupId]\r\n && feature.dbFeature.filterValueIDs[filterObject.filterGroupId].includes(filterObject.filterId)\r\n })) {\r\n feature.dbFeature.filterValueIDs[filterGroup.id].forEach((filterValue) => {\r\n if (!availableFilterValues.includes(filterValue)) {\r\n // console.log(\"feature with the filter:\", feature);\r\n const fValue = filterGroup.values.find(val => val.id === filterValue);\r\n if (fValue) {\r\n if (fValue.value === \"Slab\") { // we need to look for existing DuraBath Natural Stone features filter\r\n if (!fabricatorData || (fabricatorData && !fabricatorData.isRebath)) {\r\n // const duraBathNaturalStoneFilter = filterGroup.values.find(val => val.value === \"DuraBath Natural Stone\");\r\n // if (!activePart.features.some(testFeature => {\r\n // return testFeature.dbFeature\r\n // && testFeature.dbFeature.filterValueIDs\r\n // && testFeature.dbFeature.filterValueIDs[filterGroup.id]\r\n // && testFeature.dbFeature.filterValueIDs[filterGroup.id].includes(duraBathNaturalStoneFilter.id)\r\n // })) {\r\n // availableFilterValues.push(filterValue)\r\n // }\r\n availableFilterValues.push(filterValue)\r\n }\r\n } else if (fValue.value === \"DuraBath Natural Stone\") {\r\n if (!fabricatorData || (fabricatorData && fabricatorData.isRebath)) {\r\n availableFilterValues.push(filterValue)\r\n }\r\n // const slabFilter = filterGroup.values.find(val => val.value === \"Slab\");\r\n // if (!activePart.features.some.feature(testFeature => {\r\n // return testFeature.dbFeature && testFeature.dbFeature.filterValueIDs\r\n // && feature.dbFeature.filterValueIDs[duraBathNaturalStoneFilter.id]\r\n // })) {\r\n // availableFilterValues.push(filterValue)\r\n // }\r\n } else {\r\n availableFilterValues.push(filterValue)\r\n }\r\n } else {\r\n // if (!missingFilters[filterValue]) {\r\n // missingFilters[filterValue] = [feature]\r\n // } else {\r\n // missingFilters[filterValue].push(feature)\r\n // }\r\n }\r\n }\r\n })\r\n }\r\n });\r\n // if (Object.keys(missingFilters).length) {\r\n // console.error(\"Filter values are missing or wrong filter assigned!\", missingFilters);\r\n // console.info(\"Existing filters\", filterGroup.values);\r\n // }\r\n }\r\n // console.log(\"availableFilterValues\", availableFilterValues);\r\n return availableFilterValues\r\n }\r\n\r\n setAvailableFiltersValues(nextProps = this.props) {\r\n const filterGroup = nextProps.filterGroups.find(group => group.name === nextProps.filterGroupName);\r\n const availableFilterValues = FilterSelection.getAvailableFilterValues(\r\n nextProps.filterGroups, nextProps.filterGroupName, nextProps.activePart, this.props.fabricatorData\r\n );\r\n if (filterGroup) {\r\n this.setState({\r\n availableFilterValues,\r\n filterGroup\r\n })\r\n }\r\n }\r\n\r\n setActiveFilterValue = (filterId, filterGroupId) => {\r\n this.props.setSelectedFilters(addFilterArrayValue([...this.props.selectedFilters], {filterId, filterGroupId}));\r\n this.props.removeFilterSelection();\r\n };\r\n\r\n render() {\r\n\r\n // console.log('parentItem', this.props.parentItem);\r\n // console.log('activePart', this.props.activePart);\r\n // console.log('selectedFilters', this.props.selectedFilters);\r\n // console.log('availableFilterValues:', this.state.availableFilterValues);\r\n // let activeFilterValueId = null;\r\n // if (this.state.availableFilterValues.length && this.state.filterGroup && this.props.selectedFilters.length) {\r\n // const appliedFilter = this.props.selectedFilters.find(filterObj => filterObj.filterGroupId === this.state.filterGroup.id);\r\n // if (appliedFilter) {\r\n // activeFilterValueId = appliedFilter.filterId\r\n // }\r\n // }\r\n\r\n return this.state.availableFilterValues.length ? (\r\n
\r\n
    \r\n
  • \r\n \r\n
  • \r\n {this.state.availableFilterValues.map((filterValueId, index) => {\r\n const filterValueObject = this.state.filterGroup.values.find(val => val.id === filterValueId);\r\n return (\r\n
  • this.setActiveFilterValue(filterValueId, this.state.filterGroup.id)}>\r\n \r\n \r\n \r\n
  • \r\n )\r\n })}\r\n
\r\n
\r\n ) : null\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => ({\r\n filterGroups: store.filterState.filterGroups,\r\n fabricatorData: store.fabricatorState,\r\n selectedFilters: store.filterState.selectedFilters\r\n});\r\n\r\nconst mapDispatchToProps = (dispatch) => ({\r\n setSelectedFilters: (selectedFilters) => dispatch(actions.setSelectedFilters(selectedFilters)),\r\n});\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(FilterSelection);\r\n","import React, {useEffect, useState} from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport LoadingSpinner from \"../ui/loadingSpinner\";\r\nimport {featureThumbnailUrl, isIE} from \"../../misc/helpers\";\r\nimport {baseNewImagesPath} from \"../assets\";\r\nimport {THUMBNAIL_SIZES} from \"../../misc/utils\";\r\nimport Config, {IS_LIXIL_UI} from \"../../config\";\r\n\r\nconst FeatureThumbnail = (props) => {\r\n\r\n const {feature, dbFeatureId, isMobile} = props;\r\n const [isLoading, toggleLoader] = useState(true);\r\n const [thumbnailUrl, setThumbnailUrl] = useState(\"\");\r\n const [smallerSizeTried, setSmallerSizeTried] = useState(isIE() || Config.isDevMode()); // if it is ie - set smallerSizeTried to true\r\n\r\n\r\n const setBaseThumbnail = () => {\r\n const size = isMobile && IS_LIXIL_UI\r\n ? THUMBNAIL_SIZES.small\r\n : isIE() || Config.isDevMode() ? THUMBNAIL_SIZES.medium : THUMBNAIL_SIZES.large\r\n const baseThumbnail = featureThumbnailUrl(feature, size) // if it is ie - set small Thumbnails by the default\r\n setThumbnailUrl(baseThumbnail || `${baseNewImagesPath}images/image-not-found.png`);\r\n return baseThumbnail;\r\n }\r\n\r\n useEffect(() => {\r\n toggleLoader(true);\r\n setSmallerSizeTried(isIE() || Config.isDevMode());\r\n setBaseThumbnail();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [dbFeatureId])\r\n\r\n const onImageLoadError = () => {\r\n if (isMobile || smallerSizeTried) {\r\n setThumbnailUrl(`${baseNewImagesPath}images/image-not-found.png`);\r\n } else if (!smallerSizeTried) {\r\n toggleLoader(true);\r\n setThumbnailUrl(featureThumbnailUrl(feature, THUMBNAIL_SIZES.medium))\r\n setSmallerSizeTried(true)\r\n }\r\n };\r\n\r\n if (!thumbnailUrl && smallerSizeTried) { // no need to load anything, show not found\r\n return (\r\n
\r\n \"\"/\r\n
\r\n )\r\n }\r\n\r\n return (\r\n
\r\n {thumbnailUrl\r\n ? {\r\n toggleLoader(false);\r\n }}\r\n onError={onImageLoadError}\r\n alt=\"\"/>\r\n : null}\r\n {isLoading ? : null}\r\n
\r\n )\r\n};\r\n\r\nFeatureThumbnail.propTypes = {\r\n feature: PropTypes.object.isRequired,\r\n isMobile: PropTypes.bool,\r\n};\r\n\r\nexport default FeatureThumbnail\r\n","import store from \"../store\";\r\nimport {getCommonVisualizerType} from \"../config\";\r\n\r\n/**\r\n *\r\n * @param feature {featureInterface} (object which has dbFeature property)\r\n * @param cartItems {[cartItemInterface]}\r\n * @param currentQuote {number}\r\n * @param allWizardsValues {array}\r\n * @return {object} // {quantity, isMatching}\r\n */\r\nexport default function featureIsMatchingDisplayLogic(feature, cartItems = [], currentQuote = 0, allWizardsValues) {\r\n\r\n let visible = feature.dbFeature.displayLogic.action === \"show\";\r\n let quantity = 0;\r\n const displayRules = feature.dbFeature.displayRules;\r\n\r\n if (Array.isArray(displayRules) && displayRules.length) {\r\n\r\n const currentQuoteCartItems = cartItems.filter(cItem => cItem.currentQuote === currentQuote);\r\n let visibleUpdated = false; // we need to rewrite this, when we have time\r\n\r\n for (let i = 0; i < displayRules.length; i++) {\r\n const rule = displayRules[i];\r\n let entityVal = 0;\r\n // if (!rule) {\r\n // console.log(\"feature\", feature);\r\n // }\r\n if (rule && rule.entityId) {\r\n if (rule.entityId === -1) { // Material (should look for added Countertops value)\r\n let countertopCount = 0;\r\n currentQuoteCartItems.forEach((cartItem) => {\r\n if (cartItem.partId.includes(\"countertop\")) {\r\n countertopCount += cartItem.quantity;\r\n }\r\n });\r\n entityVal = countertopCount\r\n } else {\r\n const matchingCartItem = currentQuoteCartItems.find((cartItem) => {\r\n return rule.entityId === cartItem.cartFeature.dbFeature.id\r\n });\r\n if (matchingCartItem) {\r\n entityVal = matchingCartItem.quantity\r\n }\r\n }\r\n let result = true;\r\n const\r\n entVal = parseInt(entityVal),\r\n ruleVal = parseInt(rule.value);\r\n switch (rule.comparison) {\r\n case \"<\":\r\n result = (entVal === 0 && ruleVal === 0 ) ? true : entVal < ruleVal;\r\n break;\r\n case \"<=\":\r\n result = entVal <= ruleVal;\r\n break;\r\n case \"=\":\r\n result = entVal === ruleVal;\r\n break;\r\n case \">\":\r\n result = entVal > ruleVal;\r\n break;\r\n case \">=\":\r\n result = entVal >= ruleVal;\r\n break;\r\n case \"wizard\":\r\n result = allWizardsValues && allWizardsValues.some(wizObject => {\r\n return wizObject.quoteIndex === currentQuote && wizObject.wizardSelectedValues\r\n && Object.keys(wizObject.wizardSelectedValues).some(key => {\r\n return wizObject.wizardSelectedValues[key].selectedFeature\r\n && wizObject.wizardSelectedValues[key].selectedFeature.dbFeature.id === rule.entityId\r\n })\r\n });\r\n break;\r\n }\r\n if (!result) {\r\n if (!visibleUpdated) {\r\n visible = !visible;\r\n visibleUpdated = true;\r\n }\r\n quantity = quantity + entityVal;\r\n }\r\n }\r\n }\r\n }\r\n if (visible && !quantity) {\r\n quantity = 1;\r\n }\r\n return {quantity, isMatching: visible};\r\n}\r\n\r\n/**\r\n *\r\n * @param feature {object} (object which has dbFeature property)\r\n * @param propertyName {string}\r\n * @param originalValue {any}\r\n * @param fromQtCategory {string} (cart feature should be calculated from the category it was added)\r\n * @return {number}\r\n */\r\nexport const checkIfInCatProperty = (feature, propertyName, originalValue, fromQtCategory) => {\r\n const finalValue = (typeof originalValue !== \"undefined\") ? originalValue : feature.dbFeature[propertyName];\r\n if (feature.inCatProperties && fromQtCategory && feature.inCatProperties.hasOwnProperty(fromQtCategory)\r\n && feature.inCatProperties[fromQtCategory].hasOwnProperty(propertyName)) {\r\n if (propertyName === \"inCatPrice\") {\r\n const {settings} = store.getState().fabricatorState;\r\n if (settings.showSalePrices && (typeof feature.inCatProperties[fromQtCategory].inCatFabCost == \"number\")) {\r\n return feature.inCatProperties[fromQtCategory].inCatFabCost\r\n }\r\n return (typeof feature.inCatProperties[fromQtCategory].inCatCost === \"number\")\r\n ? feature.inCatProperties[fromQtCategory].inCatCost\r\n : (typeof feature.inCatProperties[fromQtCategory].inCatPrice === \"number\")\r\n ? feature.inCatProperties[fromQtCategory].inCatPrice\r\n : finalValue\r\n }\r\n return feature.inCatProperties[fromQtCategory][propertyName] // inCatValue\r\n }\r\n return finalValue;\r\n}\r\n\r\n/**\r\n * returns old dbFeature property name for displaying/hiding the feature\r\n * @param forPage {string} quotingTool || visualizer\r\n * @param visualizerType {string}\r\n * @return {string}\r\n */\r\nexport const getOldHidePropertyName = (forPage = \"quotingTool\", visualizerType = getCommonVisualizerType()) => {\r\n let hidePropertyName = \"\";\r\n switch (visualizerType) {\r\n case \"kitchen\":\r\n hidePropertyName = (forPage === \"quotingTool\") ? \"hideFromFrontEnd\" : \"hideFromKitchenVisualizer\";\r\n break;\r\n case \"bathroom\":\r\n hidePropertyName = (forPage === \"quotingTool\") ? \"hideFromBVQT\" : \"hideFromBathroomVisualizer\";\r\n break;\r\n default:\r\n break;\r\n }\r\n return hidePropertyName\r\n}\r\n\r\n/**\r\n * common function for displaying/hiding the feature\r\n * @param feature {featureInterface}\r\n * @param forPage {string} quotingTool || visualizer\r\n * @param fromQtCategory {string} for specific category\r\n * @param visualizerType {string} for specific visualizerType\r\n * @return {boolean}\r\n */\r\nexport const isFeatureEnabled = (feature, forPage = \"quotingTool\", fromQtCategory = \"\", visualizerType = getCommonVisualizerType()) => {\r\n\r\n // if (feature.dbFeature.sharedFeatureName === \"53010 1 American Standard Ceramic\") { // for testing\r\n // debugger;//eslint-disable-line\r\n // }\r\n\r\n const hidePropertyName = getOldHidePropertyName(forPage, visualizerType);\r\n\r\n if (feature.inCatProperties && fromQtCategory && feature.inCatProperties.hasOwnProperty(fromQtCategory)\r\n && feature.inCatProperties[fromQtCategory].hasOwnProperty(hidePropertyName)) {\r\n return !feature.inCatProperties[fromQtCategory][hidePropertyName]\r\n }\r\n\r\n const toolSettings = feature.dbFeature.toolSettings;\r\n if (Array.isArray(toolSettings) && toolSettings.length) {\r\n const checkProperty = forPage === \"quotingTool\" ? \"enableQuotingTool\" : \"enableVisualizer\";\r\n return toolSettings.some(toolSettingsObject => toolSettingsObject.tool === visualizerType && toolSettingsObject[checkProperty])\r\n }\r\n\r\n return !feature.dbFeature[hidePropertyName]\r\n}\r\n\r\nconst setFabricatorFeatureCategoriesProperties = (feature) => {\r\n if (Array.isArray(feature.dbFeature.fabricatorFeatureCategories) && feature.dbFeature.fabricatorFeatureCategories.length && !feature.fabricatorFeatureCategoriesPropertiesAreSet) {\r\n const parent = feature.getParent();\r\n const layout = parent.layout || parent.getParent().layout; // Floor & ceiling doesn't have getParent() function\r\n if (layout.qtCategoriesList && parent.qtCategoryName) { // do not change to qtCategory since there will be a Maximum call stack\r\n if (!feature.inCatProperties) {\r\n feature.inCatProperties = {};\r\n }\r\n Object.keys(parent.qtCatProperties).forEach(qtCatName => {\r\n const inCat = layout.qtCategoriesList.find(qtCat => qtCat.name === qtCatName);\r\n if (!inCat) {\r\n return\r\n }\r\n for (let i = 0; i < feature.dbFeature.fabricatorFeatureCategories.length; i++) {\r\n const currentFabricatorFeatureCategory = feature.dbFeature.fabricatorFeatureCategories[i];\r\n if (currentFabricatorFeatureCategory.fabricatorFeatureCategoryId === inCat.id) {\r\n if (!feature.inCatProperties[qtCatName]) {\r\n feature.inCatProperties[qtCatName] = {};\r\n }\r\n if (currentFabricatorFeatureCategory.price !== null) {\r\n feature.inCatProperties[qtCatName].inCatPrice = currentFabricatorFeatureCategory.price;\r\n }\r\n if (currentFabricatorFeatureCategory.cost !== null) {\r\n feature.inCatProperties[qtCatName].inCatCost = currentFabricatorFeatureCategory.cost;\r\n }\r\n if (currentFabricatorFeatureCategory.fabricatorCost !== null) {\r\n feature.inCatProperties[qtCatName].inCatFabCost = currentFabricatorFeatureCategory.fabricatorCost; // not used for now\r\n }\r\n if (currentFabricatorFeatureCategory.displayName !== null) {\r\n feature.inCatProperties[qtCatName].inCatName = currentFabricatorFeatureCategory.displayName;\r\n }\r\n if (currentFabricatorFeatureCategory.complexLogic) {\r\n feature.inCatProperties[qtCatName].complexLogic = currentFabricatorFeatureCategory.complexLogic;\r\n }\r\n if (Array.isArray(currentFabricatorFeatureCategory.toolSettings) && currentFabricatorFeatureCategory.toolSettings.length) {\r\n const bvSetting = currentFabricatorFeatureCategory.toolSettings.find(setting => setting.tool === \"bathroom\");\r\n const kvSetting = currentFabricatorFeatureCategory.toolSettings.find(setting => setting.tool === \"kitchen\");\r\n if (bvSetting) {\r\n feature.inCatProperties[qtCatName].hideFromBathroomVisualizer = !bvSetting.enableVisualizer;\r\n feature.inCatProperties[qtCatName].hideFromBVQT = !bvSetting.enableQuotingTool;\r\n }\r\n if (kvSetting) {\r\n feature.inCatProperties[qtCatName].hideFromKitchenVisualizer = !kvSetting.enableVisualizer;\r\n feature.inCatProperties[qtCatName].hideFromFrontEnd = !kvSetting.enableQuotingTool;\r\n }\r\n } else { // old logic\r\n // feature.inCatProperties[qtCatName].hideFromBathroomVisualizer = currentFabricatorFeatureCategory.hideFromBV;\r\n feature.inCatProperties[qtCatName].hideFromBathroomVisualizer\r\n = feature.dbFeature.fabricatorFeatureCategories.every(fCat => fCat.hideFromBV) && feature.dbFeature.hideFromBV; // hide feature from visualizer only if it is disabeld everywhere\r\n feature.inCatProperties[qtCatName].hideFromBVQT = currentFabricatorFeatureCategory.hideFromBVQT;\r\n // feature.inCatProperties[qtCatName].hideFromKitchenVisualizer = currentFabricatorFeatureCategory.hideFromKV;\r\n feature.inCatProperties[qtCatName].hideFromKitchenVisualizer =\r\n feature.dbFeature.fabricatorFeatureCategories.every(fCat => fCat.hideFromKV) && feature.dbFeature.hideFromKV; // hide feature from visualizer only if it is disabeld everywhere\r\n feature.inCatProperties[qtCatName].hideFromFrontEnd = currentFabricatorFeatureCategory.hideFromKVQT;\r\n }\r\n break;\r\n }\r\n }\r\n });\r\n feature.fabricatorFeatureCategoriesPropertiesAreSet = true;\r\n }\r\n }\r\n return feature\r\n}\r\n\r\nexport const isVisibleForNavigation = (feature, withQuotingToolFeatures, forActiveQTCategory = \"\") => {\r\n\r\n if (!feature || !feature.dbFeature) { // 1) check for something unexpected (just in case)\r\n return false\r\n }\r\n\r\n feature = setFabricatorFeatureCategoriesProperties(feature); // 2) set properties from fabricatorFeatureCategories\r\n\r\n if (feature.dbFeature.autoAddToCart) {\r\n return document.kvConfig.userId === 157678 //hardcode https://tshopinc.quotekitchenandbath.com/kitchen?mode=dashboard they should have labor feature displayed\r\n } else if (withQuotingToolFeatures && (withQuotingToolFeatures !== \"all\") // for look and product journey - we show all features\r\n && !isFeatureEnabled(feature, \"quotingTool\", forActiveQTCategory)) {\r\n return false\r\n } else if (withQuotingToolFeatures && (withQuotingToolFeatures === \"all\") // for look and product journey - we show all features (enabled)\r\n && !isFeatureEnabled(feature, \"quotingTool\", forActiveQTCategory)\r\n && !isFeatureEnabled(feature, \"visualizer\", forActiveQTCategory)) {\r\n return false\r\n } else if (feature.dbFeature.displayLogic) {\r\n const storeState = store.getState();\r\n return featureIsMatchingDisplayLogic(\r\n feature,\r\n storeState.cartState.cartItems,\r\n storeState.quotesState.activeQuoteIndex,\r\n storeState.wizardState.allWizardsValues,\r\n )\r\n }\r\n return true\r\n};\r\n","import React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport store from \"../../store\";\r\nimport {showSuccessNotification} from \"../../actions/actionFunctions\";\r\n\r\nclass SuccessNotification extends React.Component {\r\n\r\n state = {\r\n opened: false,\r\n isHiding: false\r\n }\r\n\r\n componentWillReceiveProps(nextProps) {\r\n if (nextProps.successNotification.show && !this.props.successNotification.show) {\r\n setTimeout(() => { // let it render first\r\n this.setState({\r\n opened: true\r\n })\r\n }, 0)\r\n } else if (!nextProps.successNotification.show && this.props.successNotification.show) {\r\n this.setState({\r\n isHiding: true,\r\n opened: false\r\n }, () => {\r\n setTimeout(() => {\r\n this.setState({\r\n isHiding: false\r\n })\r\n }, 500)\r\n })\r\n }\r\n }\r\n\r\n render() {\r\n const {show, icon, title, message} = this.props.successNotification;\r\n\r\n return show || this.state.isHiding ? (\r\n
\r\n
\r\n
\r\n
\r\n

\r\n

\r\n \r\n

\r\n
\r\n
\r\n
\r\n ) : null;\r\n }\r\n\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n successNotification: store.serverState.successNotification,\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, {})(SuccessNotification);\r\n\r\nexport const showQuoteSavedNotification = (title = \"successNotification.titleQuoteSaved\") => {\r\n if (document.kvConfig.visualizerOnly && (title === \"successNotification.titleQuoteSaved\")) {\r\n title = \"successNotification.titleDesignSaved\";\r\n }\r\n if (store.getState().serverState.successNotification) {\r\n window.clearTimeout(window.saveQuoteTimeoutId);\r\n store.dispatch(showSuccessNotification({\r\n show: false\r\n }));\r\n }\r\n store.dispatch(showSuccessNotification({\r\n show: true,\r\n icon: \"calculate\",\r\n title,\r\n message: \"successNotification.messageQuoteSaved\"\r\n }));\r\n window.saveQuoteTimeoutId = setTimeout(() => {\r\n store.dispatch(showSuccessNotification({\r\n show: false\r\n }));\r\n }, 3000)\r\n}\r\n","import store from \"../store\";\r\nimport enhanceCanvas from \"../bvcomponents/visComponents/canvasEnhancements\";\r\nimport Misc from \"./misc\";\r\nimport {IS_LIXIL_UI} from \"../config\";\r\n\r\nconst createCanvas = (width, height) => {\r\n const canvas = document.createElement('canvas');\r\n canvas.width = width;\r\n canvas.height = height;\r\n let backCtx = canvas.getContext('2d');\r\n // backCtx.fillStyle = \"#FFFFFF\";\r\n // backCtx.fillRect(0, 0, canvas.width, canvas.height);\r\n return {canvas, backCtx}\r\n}\r\n\r\nconst finishDraw = async (images, errorImages, layers, size = null, backgroundLayers = [], quality, useNewEnhance = false) => {\r\n\r\n //0) delete images that couldn't be loaded\r\n if (errorImages && errorImages.length) {\r\n images = images.filter(image => image && image.src && !errorImages.includes(image.src));\r\n }\r\n\r\n const width = size ? size.width : 720; // 1920\r\n const height = size ? size.height : 405; // 1080\r\n const maxWidth = 1920;\r\n const maxHeight = 1080;\r\n\r\n // 1) create canvas\r\n const canvasObject1 = createCanvas(width, height);\r\n canvasObject1.backCtx.fillStyle = \"#FFFFFF\";\r\n canvasObject1.backCtx.fillRect(0, 0, canvasObject1.canvas.width, canvasObject1.canvas.height);\r\n const canvasObject3 = createCanvas(maxWidth, maxHeight); // for crops\r\n\r\n // 2) put all background layout layers\r\n if (backgroundLayers.length) {\r\n const canvasObject2 = createCanvas(width, height);\r\n canvasObject2.backCtx.globalCompositeOperation = \"lighten\";\r\n images.forEach((imageObject) => {\r\n const layer = backgroundLayers.find(layer => layer.image === imageObject.src);\r\n if (layer) {\r\n if (layer.cropCoords && (document.kvConfig.visualizerType !== \"kvScene\")) {\r\n canvasObject3.backCtx.clearRect(0, 0, maxWidth, maxHeight);\r\n let layerWidth = layer.cropCoords[2] - layer.cropCoords[0];\r\n let layerHeight = layer.cropCoords[3] - layer.cropCoords[1];\r\n canvasObject3.backCtx.drawImage(imageObject, 0, 0, layerWidth, layerHeight, layer.cropCoords[0], layer.cropCoords[1], layerWidth, layerHeight);\r\n canvasObject3.backCtx.drawImage(canvasObject3.canvas, 0, 0, maxWidth, maxHeight,0, 0, width, height);\r\n } else if (layer.layerDimensions) {\r\n const dim = layer.layerDimensions;\r\n // console.log('yep', dim.width, dim.height, dim.polygonArray[0][0], dim.polygonArray[0][1], dim.width, dim.height);\r\n canvasObject2.backCtx.drawImage(imageObject, 0, 0, dim.width, dim.height, dim.polygonArray[0][0], dim.polygonArray[0][1], dim.width, dim.height);\r\n } else {\r\n imageObject.width = width;\r\n imageObject.height = height;\r\n canvasObject2.backCtx.drawImage(imageObject, 0, 0, width, height);\r\n }\r\n }\r\n });\r\n enhanceCanvas(canvasObject2.canvas, useNewEnhance);\r\n canvasObject1.backCtx.drawImage(canvasObject2.canvas, 0, 0, width, height, 0, 0, width, height);\r\n }\r\n\r\n // 3) put all layout layers\r\n for (const loadedImage of images) {\r\n const layer = layers.find(layers => layers.image === loadedImage.src);\r\n if (layer && backgroundLayers.every(layer => layer.image !== loadedImage.src)) {\r\n if (layer.cropCoords) {\r\n canvasObject3.backCtx.clearRect(0, 0, maxWidth, maxHeight);\r\n let layerWidth = layer.cropCoords[2] - layer.cropCoords[0];\r\n let layerHeight = layer.cropCoords[3] - layer.cropCoords[1];\r\n canvasObject3.backCtx.drawImage(loadedImage, 0, 0, layerWidth, layerHeight, layer.cropCoords[0], layer.cropCoords[1], layerWidth, layerHeight);\r\n await canvasObject1.backCtx.drawImage(canvasObject3.canvas, 0, 0, maxWidth, maxHeight,0, 0, width, height);\r\n // } else if (loadedImage.layerDimensions) {\r\n // console.log(\"loadedImage layerDimensions\", loadedImage.layerDimensions, loadedImage.src);\r\n // const dim = loadedImage.layerDimensions;\r\n // // console.log('yep', dim.width, dim.height, dim.polygonArray[0][0], dim.polygonArray[0][1], dim.width, dim.height);\r\n // canvasObject1.backCtx.drawImage(loadedImage, 0, 0, dim.width, dim.height, dim.polygonArray[0][0], dim.polygonArray[0][1], dim.width, dim.height);\r\n // } else if (loadedImage.coords) {\r\n // const min_x = width*loadedImage.coords.min_x;\r\n // const min_y = height*loadedImage.coords.min_y;\r\n // canvasObject1.backCtx.drawImage(loadedImage, 0, 0, loadedImage.width, loadedImage.height, min_x, min_y, loadedImage.width, loadedImage.height);\r\n } else {\r\n loadedImage.width = width;\r\n loadedImage.height = height;\r\n await canvasObject1.backCtx.drawImage(loadedImage, 0, 0, width, height);\r\n }\r\n if (Misc.isMobile() && IS_LIXIL_UI) { // we have to add some time for mobile safari, because of the process stuck\r\n await new Promise(resolve => setTimeout(resolve, 100));\r\n }\r\n }\r\n }\r\n // return canvas.toDataURL('image/png') // the size is 5.8Mb -- too much, let's use jpeg - it's only 600Kb\r\n return canvasObject1.canvas.toDataURL(\"image/jpeg\", quality)\r\n};\r\n\r\nconst getSubscriptionThumbnail = () => {\r\n const fabricatorState = store.getState().fabricatorState;\r\n if (fabricatorState.fabricatorSubscriptions) {\r\n let thumbnail = \"\";\r\n fabricatorState.fabricatorSubscriptions.forEach((subscription) => {\r\n if (subscription.thumbnail) {\r\n thumbnail = subscription.thumbnail\r\n }\r\n });\r\n return thumbnail\r\n }\r\n return \"\"\r\n}\r\n\r\n/**\r\n * A PROMISE! Returns the whole canvas image\r\n * @param layout\r\n * @param size\r\n * @param quality {number}\r\n * @param useNewEnhance {boolean}\r\n */\r\nexport const getImagePromiseFromLayout = (layout, size = null, quality = 0.7, useNewEnhance = false) => {\r\n if (!layout) {\r\n return Promise.resolve(getSubscriptionThumbnail())\r\n }\r\n const showPlaceHolders = document.bvConfig ? document.bvConfig.showPlaceholders : false;\r\n\r\n const layers = layout.getLayers(showPlaceHolders, true);\r\n if (!layers.length) {\r\n return Promise.resolve(getSubscriptionThumbnail())\r\n }\r\n\r\n const backGroundLayers = getBackgroundLayers(layers, layout);\r\n let imagesPromise = new Promise((resolve) => {\r\n let cnt = 0;\r\n const images = [];\r\n const errorImages = [];\r\n layers.forEach((layer) => {\r\n const image = new Image();\r\n image.crossOrigin = 'Anonymous';\r\n image.layerDimensions = layer.layerDimensions || null;\r\n image.coords = layer.coords || null;\r\n images.push(image);\r\n image.onload = () => {\r\n cnt++;\r\n if (cnt === layers.length) {\r\n resolve(finishDraw(images, errorImages, layers, size, backGroundLayers, quality, useNewEnhance))\r\n }\r\n };\r\n image.onerror = () => {\r\n //display error\r\n console.error('Coudn\\'t load image:', image.src);\r\n cnt++;\r\n errorImages.push(image.src);\r\n if (cnt === layers.length) {\r\n resolve(finishDraw(images, errorImages, layers, size, backGroundLayers, quality, useNewEnhance))\r\n }\r\n };\r\n try {\r\n image.src = layer.image;\r\n } catch (e) {\r\n console.log(e, 'Can\\'t apply image src', layer.image);\r\n }\r\n });\r\n });\r\n return imagesPromise.then(response => response)\r\n};\r\n\r\n/**\r\n * @param layers {array}\r\n * @param layout {object}\r\n * @param newLayoutType {boolean}\r\n * @returns layersArray {array}\r\n */\r\nexport const getBackgroundLayers = (layers, layout, newLayoutType = false) => {\r\n if ((layout && layout.isNewLayout) || newLayoutType) {\r\n return layers.filter((layer) => layer.zIndex >= 50000)\r\n }\r\n if (!layout) { // just in case\r\n return []\r\n }\r\n const name = layout.getCurrentLayoutName();\r\n return layers.filter((layer) => {\r\n return layout.zIndexes[name] && layout.zIndexes[name].Background &&\r\n Object.values(layout.zIndexes[name].Background).some(zIndex => zIndex === layer.zIndex);\r\n })\r\n};\r\n","import React, {Component} from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {connect} from 'react-redux';\r\nimport $ from \"jquery\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\n\r\nimport {setCountertopsApplyTo, setCountertopsApplyToBathroom} from \"../../../actions/navigationFunctions\";\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\nimport {loaderDisable, loaderEnable} from \"../../ui/loaderView\";\r\nimport Navigation from \"../../visComponents/navigation/navigation\";\r\nimport ActionTypes from \"../../../misc/actionTypes\";\r\nimport store from \"../../../store\";\r\nimport {COUNTERTOP_GROUP} from \"../core/constants\";\r\nimport UiSelect from \"../../ui/select\";\r\nimport Analytics from '../../../analytics';\r\nimport {COUNTERTOP_GROUP_BATHROOM} from \"../../bvSceneComponent/core/constants\";\r\nimport {getFeatureGroupName} from \"../../../misc/helpers\";\r\nimport {updateCanvasCount} from \"../../../actions/actionFunctions\";\r\nimport {getCommonVisualizerType} from \"../../../config\";\r\nimport {featureHasSelectedFilters, getAllFeatureFilters, getFilterGroupValues} from \"../../../misc/utils\";\r\n\r\nconst getIsBathroom = () => {\r\n return getCommonVisualizerType() === \"bathroom\"\r\n};\r\n\r\nclass CountertopSwitchers extends Component {\r\n\r\n static propTypes = {\r\n activeSubPart: PropTypes.object.isRequired,\r\n isMobile: PropTypes.bool,\r\n isMaterials: PropTypes.bool,\r\n showAsDropdown: PropTypes.bool,\r\n };\r\n\r\n componentDidMount() {\r\n this.setToggledByUserProperty(this.props);\r\n }\r\n\r\n componentWillReceiveProps(nextProps) {\r\n if (nextProps.activeSubPart.partId !== this.props.activeSubPart.partId) {\r\n this.setToggledByUserProperty(nextProps);\r\n }\r\n }\r\n\r\n setToggledByUserProperty = (props) => {\r\n const currentCategoryPartId = props.activeSubPart.partId;\r\n\r\n const isBathroom = getIsBathroom();\r\n\r\n const COUNTERTOPGROUPS = isBathroom ? COUNTERTOP_GROUP_BATHROOM : COUNTERTOP_GROUP;\r\n const applyTo = isBathroom ? this.props.countertopsApplyToBathroom : this.props.countertopsApplyTo;\r\n\r\n COUNTERTOPGROUPS.forEach(partId => {\r\n if (partId === currentCategoryPartId) {\r\n if (COUNTERTOPGROUPS.some(newPartId => {\r\n return (newPartId !== currentCategoryPartId) && !applyTo[newPartId].includes(currentCategoryPartId)\r\n })) {\r\n props.activeSubPart.toggleSwitchedOffByUser = true;\r\n }\r\n } else {\r\n if (!applyTo[partId].includes(currentCategoryPartId)) {\r\n const neededSubPart = getCurrentLayout().getSubPartByPartId(partId);\r\n if (neededSubPart) {\r\n neededSubPart.part.toggleSwitchedOffByUser = true;\r\n }\r\n }\r\n }\r\n });\r\n };\r\n\r\n getUpdatedCountertopSwitcherButtons = (partId) => {\r\n const applyTo = getIsBathroom() ? this.props.countertopsApplyToBathroom : this.props.countertopsApplyTo;\r\n let countertopsApplyTo = applyTo[this.props.activeSubPart.partId];\r\n const existingIndex = countertopsApplyTo.findIndex(countertopsApplyToPartId => countertopsApplyToPartId === partId);\r\n if (existingIndex > -1) {\r\n countertopsApplyTo.splice(existingIndex, 1)\r\n } else {\r\n countertopsApplyTo.push(partId)\r\n }\r\n let countertopsApplyTo2 = applyTo[partId];\r\n const existingIndex2 = countertopsApplyTo2.findIndex(countertopsApplyToPartId => countertopsApplyToPartId === this.props.activeSubPart.partId);\r\n if (existingIndex > -1) {\r\n countertopsApplyTo2.splice(existingIndex2, 1)\r\n } else {\r\n countertopsApplyTo2.push(this.props.activeSubPart.partId)\r\n }\r\n this.setToggleOffProperies(partId, countertopsApplyTo, countertopsApplyTo2);\r\n return {\r\n [this.props.activeSubPart.partId]: countertopsApplyTo,\r\n [partId]: countertopsApplyTo2\r\n }\r\n };\r\n\r\n static updateCountertopSwitcherButtons = (partId, currentGroupPartId, propsCountertopsApplyTo = {}) => {\r\n let countertopsApplyTo = propsCountertopsApplyTo[currentGroupPartId];\r\n const existingIndex = countertopsApplyTo.findIndex(countertopsApplyToPartId => countertopsApplyToPartId === partId);\r\n if (existingIndex > -1) {\r\n countertopsApplyTo.splice(existingIndex, 1)\r\n } else {\r\n countertopsApplyTo.push(partId)\r\n }\r\n let countertopsApplyTo2 = propsCountertopsApplyTo[partId];\r\n const existingIndex2 = countertopsApplyTo2.findIndex(countertopsApplyToPartId => countertopsApplyToPartId === currentGroupPartId);\r\n if (existingIndex > -1) {\r\n countertopsApplyTo2.splice(existingIndex2, 1)\r\n } else {\r\n countertopsApplyTo2.push(currentGroupPartId)\r\n }\r\n const setApplyTo = getIsBathroom() ? setCountertopsApplyToBathroom : setCountertopsApplyTo;\r\n store.dispatch(setApplyTo({\r\n [currentGroupPartId]: countertopsApplyTo,\r\n [partId]: countertopsApplyTo2\r\n }));\r\n };\r\n\r\n setToggleOffProperies = (partId, countertopsApplyTo, countertopsApplyTo2) => {\r\n this.props.activeSubPart.toggleSwitchedOffByUser = !countertopsApplyTo.includes(partId);\r\n const neededSubPart = getCurrentLayout().getSubPartByPartId(partId);\r\n if (neededSubPart) {\r\n neededSubPart.part.toggleSwitchedOffByUser = !countertopsApplyTo2.includes(this.props.activeSubPart.partId);\r\n }\r\n };\r\n\r\n toggleCountertopsApplyTo = (partId) => {\r\n Analytics.sendClickEvent('countertop-apply-to-' + partId);\r\n const setApplyTo = getIsBathroom() ? this.props.setCountertopsApplyToBathroom : this.props.setCountertopsApplyTo;\r\n setApplyTo(this.getUpdatedCountertopSwitcherButtons(partId));\r\n };\r\n\r\n getButtonName = (partId, layout) => {\r\n const {intl, fabricatorData} = this.props;\r\n if (intl.locale !== \"en-EN\") {\r\n const featureGroup = layout.getFeatureGroupByPartId(partId);\r\n if (featureGroup) {\r\n return getFeatureGroupName(featureGroup, intl, fabricatorData)\r\n }\r\n }\r\n switch (partId) {\r\n case \"countertop\":\r\n case \"vanity_countertop\":\r\n return \"countertop\";\r\n case \"backsplash\":\r\n case \"vanity_backsplash\":\r\n return \"backsplash\";\r\n case \"center_island_countertop\":\r\n return \"center island\";\r\n default:\r\n return \"\"\r\n }\r\n };\r\n\r\n static checkForTileBacksplash = (clickedFeature) => {\r\n if (getIsBathroom() || (clickedFeature.partId !== \"backsplash\")) {\r\n return false\r\n }\r\n const {filterState} = store.getState();\r\n if (!filterState || !Array.isArray(filterState.filterGroups)) {\r\n return false\r\n }\r\n const typeGroup = filterState.filterGroups.find(group => group.name === \"Type\");\r\n if (!typeGroup || !typeGroup.id || !typeGroup.values) {\r\n return false\r\n }\r\n const featureFilters = getAllFeatureFilters(clickedFeature);\r\n if (!featureFilters || !Array.isArray(featureFilters[typeGroup.id])) {\r\n return false\r\n }\r\n return [\"Tile\", \"Mosaic\", \"Linear Mosaic\", \"Mosaic Tiles\"].some(filterName => {\r\n const tileFilterValue = typeGroup.values.find(val => val.value === filterName);\r\n return tileFilterValue && featureFilters[typeGroup.id].includes(tileFilterValue.id)\r\n })\r\n }\r\n\r\n static applyAllCountertops = (navigationItemPart, ignoreLocked, passedArrayApplyTo = null, setCurrentFeature = false) => {\r\n const isBathroom = getIsBathroom();\r\n const COUNTERTOPGROUPS = isBathroom ? COUNTERTOP_GROUP_BATHROOM : COUNTERTOP_GROUP;\r\n const propsCountertopsApplyTo = store.getState().navigationState[\r\n isBathroom ? \"countertopsApplyToBathroom\" : \"countertopsApplyTo\"\r\n ];\r\n const clickedPartId = navigationItemPart.partId;\r\n const layout = getCurrentLayout();\r\n const countertopsApplyTo = passedArrayApplyTo\r\n || propsCountertopsApplyTo[clickedPartId] ? [...propsCountertopsApplyTo[clickedPartId]] : [];\r\n const existingIndex = countertopsApplyTo.findIndex(countertopsApplyToPartId => countertopsApplyToPartId === clickedPartId);\r\n if (existingIndex > -1) {\r\n countertopsApplyTo.splice(existingIndex, 1); // remove already clicked partId\r\n }\r\n const missingFeatures = [];\r\n layout.getFeatures().forEach(parentGroup => {\r\n let relatedItems = parentGroup.relatedItems;\r\n relatedItems.forEach((relatedItem) => {\r\n const currentPartId = relatedItem.partId;\r\n if (COUNTERTOPGROUPS.includes(currentPartId) && (currentPartId !== clickedPartId)\r\n && (countertopsApplyTo.includes(relatedItem.partId) || !relatedItem.toggleSwitchedOffByUser)) {\r\n const navigationItemName = navigationItemPart.getCountertopGroupsSplittedFeatureName();\r\n if (document.kvConfig.toolVersion !== 4) {\r\n const {navigationState} = store.getState();\r\n if (!navigationState.useFeaturesLightRequest.countertops\r\n && (!Array.isArray(relatedItem.alreadyRequestedFeatureNames) || !relatedItem.alreadyRequestedFeatureNames.includes(navigationItemName))) {\r\n // we should request every time! yes, because they have different manufacturers, and the same name\r\n missingFeatures.push({relatedItem, navigationItemName, ignoreLocked, fromFeature: navigationItemPart});\r\n return false\r\n }\r\n }\r\n let neededFeature = CountertopSwitchers.getNeededFeatureFromNavItems(navigationItemPart, relatedItem);\r\n if (!neededFeature && (document.kvConfig.visualizerType === \"Kitchen\")\r\n && !layout.getCurrentLayoutAbbreviation().includes(\"I\") && (currentPartId === \"center_island_countertop\")) {\r\n neededFeature = relatedItem.featuresList[\"LShapeWithPeninsulaWithIsland\"]\r\n && relatedItem.featuresList[\"LShapeWithPeninsulaWithIsland\"].find((feature) => {\r\n const featureName = feature.getCountertopGroupsSplittedFeatureName();\r\n return featureName === navigationItemName\r\n });\r\n if (neededFeature) {\r\n neededFeature = {part: neededFeature}\r\n }\r\n }\r\n if (neededFeature && !neededFeature.part.notAvailableInVisualizer) {\r\n if (setCurrentFeature) {\r\n relatedItem.activeFeatureBeforeAllWalls = relatedItem.activeFeature;\r\n }\r\n neededFeature.part.clickFromAllWalls(ignoreLocked);\r\n if (!relatedItem.toggleSwitchedOffByUser && !countertopsApplyTo.includes(currentPartId)) {\r\n CountertopSwitchers.updateCountertopSwitcherButtons(currentPartId, clickedPartId, propsCountertopsApplyTo);\r\n }\r\n } else {\r\n if (CountertopSwitchers.checkForTileBacksplash(navigationItemPart)) {\r\n return false\r\n }\r\n missingFeatures.push({relatedItem, navigationItemName, ignoreLocked, fromFeature: navigationItemPart})\r\n }\r\n }\r\n })\r\n });\r\n return CountertopSwitchers.getMissingFeaturesAndClickThem(missingFeatures, navigationItemPart, setCurrentFeature);\r\n };\r\n\r\n static getNeededFeatureFromNavItems = (fromFeature, featureGroup) => {\r\n let navItems;\r\n const isNewKitchen = (document.kvConfig.toolVersion !== 4);\r\n const isNewKitchenBacksplash = featureGroup.partId === \"backsplash\" && isNewKitchen;\r\n navItems = featureGroup.navigationSubItems();\r\n const navigationItemName = fromFeature.getCountertopGroupsSplittedFeatureName();\r\n let matchingFeatures = navItems.filter(navFeature => {\r\n if (navFeature.part.notAvailableInVisualizer) {\r\n return false\r\n }\r\n const featureName = navFeature.part.getSplittedFeatureName();\r\n const featureName2 = navFeature.part.getCountertopGroupsSplittedFeatureName();\r\n return featureName && (featureName === navigationItemName || featureName2 === navigationItemName)\r\n });\r\n if (matchingFeatures.length > 1 && isNewKitchen) {\r\n const filterGroups = store.getState().filterState.filterGroups;\r\n const manufacturerFilterGroup = filterGroups.find(group => (group.name || \"\").trim() === \"Manufacturer\");\r\n if (manufacturerFilterGroup) {\r\n const featureManValues = getFilterGroupValues(fromFeature, manufacturerFilterGroup);\r\n if (featureManValues && featureManValues.length) {\r\n const withSameManufacturerFeatures = matchingFeatures.filter(navItem => featureHasSelectedFilters(navItem.part, [{\r\n filterGroupId: manufacturerFilterGroup.id,\r\n filterId: featureManValues[0],\r\n }]));\r\n if (withSameManufacturerFeatures.length) {\r\n console.log(\"withSameManufacturerFeatures FOUBD!!\", withSameManufacturerFeatures);\r\n matchingFeatures = withSameManufacturerFeatures;\r\n }\r\n }\r\n }\r\n }\r\n if (isNewKitchenBacksplash) {\r\n const currentHeight = featureGroup.getCurrentActiveFeatureType();\r\n if (currentHeight) {\r\n const sameHeight = matchingFeatures.filter(navItem => featureGroup.getFeatureBacksplashType(navItem.part) === currentHeight);\r\n if (sameHeight.length) {\r\n console.log(\"Same Height Found\", sameHeight);\r\n return sameHeight[0]\r\n }\r\n }\r\n }\r\n return matchingFeatures[0] || null\r\n }\r\n\r\n static getMissingFeaturesAndClickThem = (missingFeatures, navigationItemPart, setCurrentFeature = false) => {\r\n if (missingFeatures.length) {\r\n const isBathroom = getIsBathroom();\r\n window.requestInProcess = true;\r\n loaderEnable();\r\n const promises = missingFeatures.map((missingFeatureObject) => {\r\n const relatedItem = missingFeatureObject.relatedItem;\r\n return Navigation.searchFeaturesByName(relatedItem, missingFeatureObject.navigationItemName)\r\n .then(response => {\r\n function turnOffToggles() { // turn off the toggles if feature isn't found\r\n const navItemParent = navigationItemPart.getParent();\r\n if (!navItemParent.toggleSwitchedOffByUser) { // current category\r\n let countertopsApplyTo = store.getState().navigationState[\r\n isBathroom ? \"countertopsApplyToBathroom\" : \"countertopsApplyTo\"\r\n ];\r\n const existingIndex = countertopsApplyTo[navigationItemPart.partId].findIndex(countertopsApplyToPartId => countertopsApplyToPartId === relatedItem.partId);\r\n if (existingIndex > -1) {\r\n countertopsApplyTo[navigationItemPart.partId].splice(existingIndex, 1);\r\n }\r\n if (!relatedItem.toggleSwitchedOffByUser) { // turn off the toggles if feature isn't found (mirrored category)\r\n const existingIndex = countertopsApplyTo[relatedItem.partId].findIndex(countertopsApplyToPartId => countertopsApplyToPartId === navigationItemPart.partId);\r\n if (existingIndex > -1) {\r\n countertopsApplyTo[relatedItem.partId].splice(existingIndex, 1);\r\n }\r\n }\r\n const setApplyTo = isBathroom ? setCountertopsApplyToBathroom : setCountertopsApplyTo;\r\n store.dispatch(setApplyTo(countertopsApplyTo));\r\n }\r\n }\r\n if (response && response.length) {\r\n let neededFeature = CountertopSwitchers.getNeededFeatureFromNavItems(missingFeatureObject.fromFeature, relatedItem);\r\n if (neededFeature) {\r\n let countertopsApplyTo = store.getState().navigationState[\r\n isBathroom ? \"countertopsApplyToBathroom\" : \"countertopsApplyTo\"\r\n ];\r\n if (setCurrentFeature) {\r\n relatedItem.activeFeatureBeforeAllWalls = relatedItem.activeFeature;\r\n }\r\n neededFeature.part.clickFromAllWalls(missingFeatureObject.ignoreLocked);\r\n if (!relatedItem.toggleSwitchedOffByUser && !countertopsApplyTo[navigationItemPart.partId].includes(relatedItem.partId)) {\r\n CountertopSwitchers.updateCountertopSwitcherButtons(relatedItem.partId, navigationItemPart.partId, countertopsApplyTo, false);\r\n }\r\n } else {\r\n turnOffToggles()\r\n }\r\n } else {\r\n turnOffToggles()\r\n }\r\n if (!relatedItem.alreadyRequestedFeatureNames) {\r\n relatedItem.alreadyRequestedFeatureNames = [];\r\n }\r\n relatedItem.alreadyRequestedFeatureNames.push(missingFeatureObject.navigationItemName);\r\n return response\r\n });\r\n });\r\n return Promise.all(promises)\r\n .then(() => {\r\n window.requestInProcess = false;\r\n if (document.kvConfig.toolVersion !== 4) {\r\n loaderDisable();\r\n return\r\n }\r\n $(window).trigger(ActionTypes.CHANGE_LAYOUT); // update canvas\r\n store.dispatch(updateCanvasCount());\r\n setTimeout(() => {\r\n $(window).trigger(ActionTypes.CHANGE_LAYOUT); // update canvas\r\n loaderDisable();\r\n }, 0)\r\n // forceUpdate if needed\r\n });\r\n }\r\n };\r\n\r\n getValueText = () => {\r\n if (this.props.activeSubPart.partId === \"backsplash\") {\r\n if (this.props.windowWidth < 900) {\r\n return \r\n } else {\r\n return \r\n }\r\n } else {\r\n if (this.props.windowWidth < 620) {\r\n return \r\n } else if (this.props.windowWidth < 680) {\r\n return \r\n } else {\r\n return \r\n }\r\n }\r\n };\r\n\r\n buttonIsDisabled = (partId) => {\r\n const layout = getCurrentLayout();\r\n return this.props.activeSubPart.partId === partId\r\n || (document.kvConfig.visualizerType === \"Kitchen\" && partId === \"center_island_countertop\"\r\n && !layout.getCurrentLayoutAbbreviation().includes(\"I\"));\r\n }\r\n\r\n renderDropDown = () => {\r\n const isBathroom = getIsBathroom();\r\n const COUNTERTOPGROUPS = isBathroom ? COUNTERTOP_GROUP_BATHROOM : COUNTERTOP_GROUP;\r\n const applyTo = isBathroom ? this.props.countertopsApplyToBathroom : this.props.countertopsApplyTo;\r\n const countertopsApplyTo = applyTo[this.props.activeSubPart.partId];\r\n\r\n if (!countertopsApplyTo) {\r\n return null\r\n }\r\n\r\n const layout = getCurrentLayout();\r\n\r\n return (\r\n \r\n {COUNTERTOPGROUPS.map(partId => {\r\n const disabledButton = this.buttonIsDisabled(partId);\r\n return (\r\n
  • \r\n disabledButton ? false : this.toggleCountertopsApplyTo(partId)}/>\r\n disabledButton ? false : this.toggleCountertopsApplyTo(partId)}>\r\n {this.getButtonName(partId, layout)}\r\n \r\n
  • \r\n )\r\n })}\r\n
    \r\n )\r\n };\r\n\r\n render() {\r\n\r\n if (this.props.showAsDropdown) {\r\n return this.renderDropDown()\r\n }\r\n\r\n const isBathroom = getIsBathroom();\r\n const COUNTERTOPGROUPS = isBathroom ? COUNTERTOP_GROUP_BATHROOM : COUNTERTOP_GROUP;\r\n const applyTo = isBathroom ? this.props.countertopsApplyToBathroom : this.props.countertopsApplyTo;\r\n const countertopsApplyTo = applyTo[this.props.activeSubPart.partId];\r\n const layout = getCurrentLayout();\r\n\r\n return (\r\n
    \r\n
    Apply to
    \r\n
      \r\n {COUNTERTOPGROUPS.map(partId => {\r\n const hideButton = this.buttonIsDisabled(partId);\r\n return hideButton ? null : (\r\n
    • this.toggleCountertopsApplyTo(partId)}>\r\n \r\n {this.getButtonName(partId, layout)}\r\n
      \r\n \r\n
      \r\n
    • \r\n )\r\n })}\r\n
    \r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => ({\r\n countertopsApplyTo: store.navigationState.countertopsApplyTo,\r\n countertopsApplyToBathroom: store.navigationState.countertopsApplyToBathroom,\r\n windowWidth: store.serverState.windowWidth,\r\n fabricatorData: store.fabricatorState,\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n setCountertopsApplyTo,\r\n setCountertopsApplyToBathroom\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(CountertopSwitchers)\r\n)\r\n","import React, {PureComponent} from 'react';\r\nimport {connect} from 'react-redux';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport { setExpandedFilters, setSelectedFilters, showFilters } from \"../../../../actions/actionFunctions\";\r\nimport FiltersBody from \"./filtersBody\";\r\n\r\nclass FiltersClass extends PureComponent {\r\n\r\n static propTypes = {\r\n id: PropTypes.string.isRequired,\r\n searchText: PropTypes.string.isRequired,\r\n handleSearchInputChange: PropTypes.func.isRequired,\r\n childItem: PropTypes.object\r\n };\r\n\r\n blurClickSet = false;\r\n\r\n componentDidMount() {\r\n this.props.setSelectedFilters([]); // reset filters on stones & color step\r\n }\r\n\r\n componentWillReceiveProps(nextProps) {\r\n if (nextProps.childItem && (!this.props.childItem\r\n || (this.props.childItem && nextProps.childItem.text !== this.props.childItem.text))) {\r\n this.props.setSelectedFilters([]);\r\n this.props.setExpandedFilters([]);\r\n }\r\n if (nextProps.visible && !this.blurClickSet) {\r\n this.blurClickSet = true;\r\n document.addEventListener('click', this.handleWrapperBlur);\r\n }\r\n }\r\n\r\n handleWrapperBlur = (e) => {\r\n if (!e.target.closest('[class*=\"filters\"]') && !e.target.closest(\".materials-button--search\") && this.props.id === this.props.activeFilterId) {\r\n this.props.showFilters(false);\r\n document.removeEventListener('click', this.handleWrapperBlur);\r\n this.blurClickSet = false;\r\n }\r\n };\r\n\r\n render() {\r\n return (\r\n
    \r\n {this.props.visible && this.props.childItem ? (\r\n \r\n ) : null}\r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n activeFilterId: store.filterState.filterId,\r\n visible: store.filterState.showFilters,\r\n filterVisible: store.filterState.filterVisible,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setSelectedFilters,\r\n setExpandedFilters,\r\n showFilters,\r\n};\r\nexport default connect(mapStateToProps, mapDispatchToProps)(FiltersClass);\r\n","export const LayoutType = {\r\n Layout1: 1,\r\n Layout2: 2,\r\n Layout41: 41,\r\n};\r\n\r\nexport const LayoutAbbreviation = {\r\n All: \"ALL\",\r\n Layout1: \"Layout1\",\r\n Layout2: \"Layout2\",\r\n Layout41: \"Layout41\",\r\n};\r\n\r\nexport const LayoutAbbreviations = [\r\n \"Layout1\",\r\n \"Layout2\",\r\n \"Layout41\",\r\n];\r\nexport const LayoutAbbreviationsToRemove = [\r\n \"Layout41\",\r\n \"Layout2\",\r\n \"Layout1\",\r\n];\r\n\r\nexport const METADATA = {\r\n ALL: \"ALL\"\r\n};\r\n\r\nexport const DECORS_MAX = 10;\r\n\r\nexport const SLAT_WALL_POSITIONS = [\"S1\",\"S2\",\"S3\",\"S4\"];\r\n","//INITIAL FLOW\r\nimport * as types from \"./actionTypes\";\r\n\r\nexport const setEmployeesList = (employeesList) => ({\r\n type: types.SET_EMPLOYEES_LIST,\r\n payload: {employeesList}\r\n});\r\n\r\nexport const setAlreadyRegisteredUserInfo = (alreadyRegisteredUserInfo) => ({\r\n type: types.SET_ALREADY_REGISTERED_USER,\r\n payload: {alreadyRegisteredUserInfo}\r\n});\r\n\r\nexport const setLeadCaptureClickCount = (leadCaptureClickCount) => ({\r\n type: types.SET_LEAD_CAPTURE_CLICK_COUNT,\r\n payload: {leadCaptureClickCount}\r\n});\r\n\r\nexport const setUserPopupContent = (userPopupContent) => ({\r\n type: types.SET_USER_POPUP_CONTENT,\r\n payload: {userPopupContent}\r\n});\r\n\r\nexport const setUserTwoFa = (userTwoFa) => ({\r\n type: types.SET_USER_TWO_FA,\r\n payload: {userTwoFa}\r\n});\r\n\r\nexport const setUserOptIn = (optIn) => ({\r\n type: types.SET_USER_OPT_IN,\r\n payload: {optIn}\r\n});\r\n","import {getIntersectCordsBetweenLines, getMidPoint, getPointDistance} from \"./sqftHelper\";\r\nimport polygonClipping from \"polygon-clipping\";\r\n\r\n/**\r\n * Get point position left or right from the line\r\n * if D = 0 - then searchedPoint is on the line\r\n * if D < 0 - then searchedPoint is on the left from the line\r\n * if D > 0 - then searchedPoint is on the right from the line\r\n * @param linePoint1 {{x: int, y: int}}\r\n * @param linePoint2 {{x: int, y: int}}\r\n * @param searchedPoint {{x: int, y: int}}\r\n */\r\nexport const getThePositionOfAPointToTheLeftOrRightOfALine = (linePoint1, linePoint2, searchedPoint) => {\r\n return (searchedPoint.x - linePoint1.x) * (linePoint2.y - linePoint1.y) - (searchedPoint.y - linePoint1.y) * (linePoint2.x - linePoint1.x)\r\n}\r\n\r\nfunction crossProduct(ax, ay, bx, by) {\r\n return ax * by - ay * bx;\r\n}\r\n\r\nfunction direction(ax, ay, bx, by, cx, cy) {\r\n return crossProduct(cx - ax, cy - ay, bx - ax, by - ay);\r\n}\r\n\r\nfunction onSegment(ax, ay, bx, by, cx, cy) {\r\n const withinX = (ax <= cx && cx <= bx) || (ax >= cx && cx >= bx);\r\n const withinY = (ay <= cy && cy <= by) || (ay >= cy && cy >= by);\r\n return withinX && withinY;\r\n}\r\n\r\n/**\r\n * Tests if line a-b intersects with line c-d, allow overlap will return false if lines are over each other\r\n * @param ax\r\n * @param ay\r\n * @param bx\r\n * @param by\r\n * @param cx\r\n * @param cy\r\n * @param dx\r\n * @param dy\r\n * @param allowOverlap\r\n */\r\nexport const getIntersectionCordsV2 = (ax, ay, bx, by, cx, cy, dx, dy, allowOverlap = true) => {\r\n const d1 = direction(ax, ay, bx, by, cx, cy);\r\n const d2 = direction(ax, ay, bx, by, dx, dy);\r\n const d3 = direction(cx, cy, dx, dy, ax, ay);\r\n const d4 = direction(cx, cy, dx, dy, bx, by);\r\n\r\n if (d1 * d2 < 0 && d3 * d4 < 0) {\r\n const A1 = by - ay;\r\n const B1 = ax - bx;\r\n const C1 = A1 * ax + B1 * ay;\r\n const A2 = dy - cy;\r\n const B2 = cx - dx;\r\n const C2 = A2 * cx + B2 * cy;\r\n\r\n const det = A1 * B2 - A2 * B1;\r\n if (det === 0) { // Collinear lines\r\n return null;\r\n } else {\r\n const x = (B2 * C1 - B1 * C2) / det;\r\n const y = (A1 * C2 - A2 * C1) / det;\r\n return [x, y];\r\n }\r\n }\r\n\r\n if (!allowOverlap && d1 === 0 && d2 === 0 && (onSegment(ax, ay, bx, by, cx, cy) || onSegment(ax, ay, bx, by, dx, dy))) {\r\n return null; //overlap each other\r\n }\r\n\r\n if ((d1 === 0 && onSegment(ax, ay, bx, by, cx, cy)) ||\r\n (d2 === 0 && onSegment(ax, ay, bx, by, dx, dy)) ||\r\n (d3 === 0 && onSegment(cx, cy, dx, dy, ax, ay)) ||\r\n (d4 === 0 && onSegment(cx, cy, dx, dy, bx, by))) {\r\n return null; //overlap only in one point\r\n }\r\n\r\n return null;\r\n}\r\n\r\n// Define a function to calculate the cross product of two vectors in 2D.\r\nexport function crossProduct2D(vectorA, vectorB) {\r\n // Calculate the cross product. Since the vectors are in 2D, the cross product will be a scalar.\r\n // vectorA.x * vectorB.y - vectorA.y * vectorB.x gives the Z component of the 3D cross product.\r\n return vectorA.x * vectorB.y - vectorA.y * vectorB.x;\r\n}\r\n\r\n/**\r\n * Finds the line in the `lines` array that is closest to referenceLine\r\n * and intersects the perpendicular line drawn from midpoint of referenceLine.\r\n *\r\n * @param {Line} referenceLine The line from which the perpendicular is drawn.\r\n * @param {Line[]} lines The array of lines to search in.\r\n * @return {{Line, point} | null} The found line or null if no line is found.\r\n */\r\nexport function findClosestIntersectingPointAndLine(referenceLine, lines) {\r\n // Find the perpendicular line to referenceLine\r\n const perpendicularVector = getPerpendicularMidpointVector(referenceLine);\r\n\r\n // Find all intersection points of the perpendicular line with the lines in the array\r\n const intersectionPointsAndLines = [];\r\n for (const line of lines) {\r\n // skip referenceLine\r\n if (line.id === referenceLine.id) {\r\n continue\r\n }\r\n //const intersectionPoint = getVectorIntersectionPoint(perpendicularVector, line);\r\n const intersectionPoint = getIntersectCordsBetweenLines(perpendicularVector.from, perpendicularVector.to, line.from, line.to, true ,true);\r\n\r\n if (intersectionPoint) {\r\n intersectionPointsAndLines.push({\r\n line,\r\n point: intersectionPoint,\r\n });\r\n }\r\n }\r\n\r\n return getClosestLineAndIntersectionPoint(referenceLine, intersectionPointsAndLines)\r\n}\r\n\r\n/**\r\n * Finds the line in the `lines` array that is closest to referenceLine\r\n * and intersects the perpendicular line drawn from midpoint of referenceLine.\r\n *\r\n * @return {{Line, point} | null} The found line or null if no line is found.\r\n * @param line\r\n * @param intersectionPointsAndLines\r\n */\r\nexport const getClosestLineAndIntersectionPoint = (line, intersectionPointsAndLines) => {\r\n let closestIntersectionPointAndLine = null;\r\n let minDistance = Infinity;\r\n for (const intersection of intersectionPointsAndLines) {\r\n const midPoint = getMidPoint(line.from, line.to);\r\n const distance = getPointDistance(midPoint, intersection.point);\r\n if (distance < minDistance) {\r\n minDistance = distance;\r\n closestIntersectionPointAndLine = intersection;\r\n }\r\n }\r\n\r\n return closestIntersectionPointAndLine;\r\n}\r\n\r\nexport const getPerpendicularMidpointVector = (line) => {\r\n const midPoint = getMidPoint(line.from, line.to);\r\n const vector = {\r\n x: line.from.y - line.to.y, // Изменение координат Y для получения перпендикуляра\r\n y: line.to.x - line.from.x, // Изменение координат X для получения перпендикуляра\r\n };\r\n\r\n // Вектор, начинающийся в серединной точке и проходящий через нее\r\n return {\r\n from: midPoint,\r\n to: {\r\n x: midPoint.x + vector.x,\r\n y: midPoint.y + vector.y,\r\n },\r\n };\r\n}\r\n\r\n// Function to find the convex hull using Graham's algorithm\r\nexport const convexHull = (points) => {\r\n // Sort points by Y (ascending) and then by X\r\n points.sort((a, b) => a.y === b.y ? a.x - b.x : a.y - b.y);\r\n // Function for calculating rotation: >0 if CCW, <0 if CW, 0 if collinear\r\n const cross = (o, a, b) => (a.x - o.x) * (b.y - o.y) - (a.y - o.y) * (b.x - o.x);\r\n\r\n const lower = [];\r\n for (let i = 0; i < points.length; i++) {\r\n while (lower.length >= 2 && cross(lower[lower.length - 2], lower[lower.length - 1], points[i]) <= 0) {\r\n lower.pop();\r\n }\r\n lower.push(points[i]);\r\n }\r\n\r\n const upper = [];\r\n for (let i = points.length - 1; i >= 0; i--) {\r\n while (upper.length >= 2 && cross(upper[upper.length - 2], upper[upper.length - 1], points[i]) <= 0) {\r\n upper.pop();\r\n }\r\n upper.push(points[i]);\r\n }\r\n\r\n // Deleting the last point of each half-shell (it is duplicated)\r\n lower.pop();\r\n upper.pop();\r\n\r\n // Concatenation of lower and upper shell\r\n return lower.concat(upper);\r\n}\r\n\r\n/////////////////////////////////////////////////////////////\r\n// function buildGraph(shapes) {\r\n// const graph = new Map();\r\n//\r\n// // Создаем узлы графа для каждой уникальной точки\r\n// for (const shape of shapes) {\r\n// for (let point of shape) {\r\n// point = roundPoint(point); // округляем точку\r\n// const key = `${point.x},${point.y}`;\r\n// if (!graph.has(key)) {\r\n// graph.set(key, {\r\n// ...point,\r\n// edges: new Set()\r\n// });\r\n// }\r\n// }\r\n// }\r\n//\r\n// // Добавляем рёбра между точками каждого шейпа\r\n// for (const shape of shapes) {\r\n// for (let i = 0; i < shape.length; i++) {\r\n// const current = roundPoint(shape[i]);\r\n// const next = roundPoint(shape[(i + 1) % shape.length]); // замкнутый контур\r\n// const currentKey = `${current.x},${current.y}`;\r\n// const nextKey = `${next.x},${next.y}`;\r\n//\r\n// graph.get(currentKey).edges.add(nextKey);\r\n// graph.get(nextKey).edges.add(currentKey);\r\n// }\r\n// }\r\n//\r\n// return graph;\r\n// }\r\n//\r\n// function findLeftBottomVertex(graph) {\r\n// let minVertex = null;\r\n// let minKey = null;\r\n// graph.forEach((value, key) => {\r\n// if (minVertex === null || value.y < minVertex.y || (value.y === minVertex.y && value.x < minVertex.x)) {\r\n// minVertex = value;\r\n// minKey = key;\r\n// }\r\n// });\r\n// return minKey;\r\n// }\r\n//\r\n// function findContours(shapes) {\r\n// const graph = buildGraph(shapes);\r\n// const startKey = findLeftBottomVertex(graph);\r\n// let currentKey = startKey;\r\n// let previousKey = null;\r\n// const result = [];\r\n//\r\n// do {\r\n// result.push(currentKey.split(',').map(Number)); // Добавляем текущую точку в контур\r\n// const currentVertex = graph.get(currentKey);\r\n// let nextKey = null;\r\n// let maxAngle = -Infinity;\r\n//\r\n// // Перебираем возможные следующие вершины\r\n// currentVertex.edges.forEach(key => {\r\n// if (key !== previousKey) { // Исключаем вернуться назад\r\n// const angle = calculateAngle(currentVertex, graph.get(previousKey), graph.get(key));\r\n// if (angle > maxAngle) {\r\n// maxAngle = angle;\r\n// nextKey = key;\r\n// }\r\n// }\r\n// });\r\n//\r\n// previousKey = currentKey;\r\n// currentKey = nextKey;\r\n// } while (currentKey !== startKey);\r\n//\r\n// return result.map(([x, y]) => ({ x, y }));\r\n// }\r\n//\r\n// function calculateAngle(current, previous, next) {\r\n// if (!previous) return 0; // Если предыдущая точка не задана, угол не вычисляется\r\n//\r\n// const vectorA = { x: current.x - previous.x, y: current.y - previous.y };\r\n// const vectorB = { x: next.x - current.x, y: next.y - current.y };\r\n// const dotProduct = vectorA.x * vectorB.x + vectorA.y * vectorB.y;\r\n// const magnitudeA = Math.sqrt(vectorA.x ** 2 + vectorA.y ** 2);\r\n// const magnitudeB = Math.sqrt(vectorB.x ** 2 + vectorB.y ** 2);\r\n//\r\n// // Косинус угла между векторами\r\n// const cosTheta = dotProduct / (magnitudeA * magnitudeB);\r\n//\r\n// // Возвращаем угол в радианах\r\n// return Math.acos(cosTheta);\r\n// }\r\n\r\n/**\r\n * Returns rounded shape points\r\n * @param {Array} shapesPoints shapes array\r\n * @returns {Array} shapes array with rounded points\r\n */\r\nexport const roundShapesPoints = (shapesPoints) => {\r\n return shapesPoints.map(shape =>\r\n roundShapePoints(shape)\r\n );\r\n};\r\n\r\nexport const roundShapePoints = (shapePoints) => {\r\n return shapePoints.map(point => roundPoint(point));\r\n};\r\n\r\nconst roundPoint = (point) => {\r\n const precision = 1000000; // Round to 6 digits after comma\r\n return {\r\n x: Math.round(point.x * precision) / precision,\r\n y: Math.round(point.y * precision) / precision,\r\n id: point.id\r\n };\r\n};\r\n\r\n// Convert shapes to polygon-clipping format\r\nexport function convertShapesToPolygons(shapesPoints) {\r\n return shapesPoints.map(shapePoints => [convertShapeToPolygon(shapePoints)]);\r\n}\r\n\r\nexport function convertShapeToPolygon(shapePoints) {\r\n return shapePoints.map(point => [point.x, point.y]);\r\n}\r\n\r\n// Convert points from polygon-clipping format to shapes format\r\nexport function convertFromPolygon(polygons) {\r\n if (Array.isArray(polygons) && polygons.length) {\r\n return polygons[0][0].map(coord => ({ x: coord[0], y: coord[1] }));\r\n }\r\n return []\r\n}\r\n\r\n/**\r\n * Function to calculate the outline of multiple shapes.\r\n * Each shape is defined by an array of points, which are connected together.\r\n * The function rounds the coordinates to a certain precision to handle slight mismatches.\r\n *\r\n * @param {Array} shapes - Array of shapes, each shape is an array of points.\r\n * @returns {Array} - Array of points forming the unified outline of the shapes.\r\n */\r\nexport const unifyShapePoints = (shapes) => {\r\n const roundedPoints = roundShapesPoints(shapes);\r\n const polygons = convertShapesToPolygons(roundedPoints);\r\n const result = polygonClipping.union(polygons);\r\n\r\n // console.log(\"roundedPoints\",roundedPoints);\r\n // console.log(\"polygons\",polygons);\r\n // console.log(\"result\",result);\r\n // console.log(\"convertFromPolygon(result);\",convertFromPolygon(result));\r\n return convertFromPolygon(result);\r\n}\r\n\r\n// Function to remove consecutive duplicate points\r\nexport function removeConsecutiveDuplicates(points) {\r\n // Filter the points array to remove consecutive duplicates\r\n return points.filter((point, index, array) => {\r\n // Check if the current point is different from the previous one\r\n if (index === 0) {\r\n return true; // Always include the first point\r\n }\r\n const prevPoint = array[index - 1];\r\n return point.x !== prevPoint.x || point.y !== prevPoint.y;\r\n });\r\n}\r\n\r\nexport function areCollinear(p1, p2, p3, p4) {\r\n // Check that the vector products (p2-p1) and (p4-p3) are equal to zero\r\n return (p2.x - p1.x) * (p4.y - p3.y) === (p4.x - p3.x) * (p2.y - p1.y) &&\r\n ((Math.min(p1.x, p2.x) <= Math.max(p3.x, p4.x) && Math.max(p1.x, p2.x) >= Math.min(p3.x, p4.x)) &&\r\n (Math.min(p1.y, p2.y) <= Math.max(p3.y, p4.y) && Math.max(p1.y, p2.y) >= Math.min(p3.y, p4.y)));\r\n}\r\n\r\nexport function getSegmentIntersectionPoint(seg1, seg2) {\r\n const a1 = seg1.end.y - seg1.start.y;\r\n const b1 = seg1.start.x - seg1.end.x;\r\n const c1 = a1 * seg1.start.x + b1 * seg1.start.y;\r\n\r\n const a2 = seg2.end.y - seg2.start.y;\r\n const b2 = seg2.start.x - seg2.end.x;\r\n const c2 = a2 * seg2.start.x + b2 * seg2.start.y;\r\n\r\n const determinant = a1 * b2 - a2 * b1;\r\n\r\n if (determinant === 0) {\r\n return null;\r\n } else {\r\n const x = (c1 * b2 - c2 * b1) / determinant;\r\n const y = (a1 * c2 - a2 * c1) / determinant;\r\n return { x, y };\r\n }\r\n}\r\n\r\nexport function isPointOnSegment(pt, seg) {\r\n return Math.min(seg.start.x, seg.end.x) <= pt.x && pt.x <= Math.max(seg.start.x, seg.end.x) &&\r\n Math.min(seg.start.y, seg.end.y) <= pt.y && pt.y <= Math.max(seg.start.y, seg.end.y);\r\n}\r\n\r\n/**\r\n * Return the length of the overlap of the segments\r\n */\r\nfunction getOverlapLength(seg1, seg2) {\r\n if (seg1.start.x === seg1.end.x && seg1.start.x === seg2.start.x) {\r\n const sortedY1 = [seg1.start.y, seg1.end.y].sort((a, b) => a - b);\r\n const sortedY2 = [seg2.start.y, seg2.end.y].sort((a, b) => a - b);\r\n\r\n if (sortedY1[1] < sortedY2[0] || sortedY2[1] < sortedY1[0]) {\r\n return 0;\r\n }\r\n\r\n const overlapY = Math.min(sortedY1[1], sortedY2[1]) - Math.max(sortedY1[0], sortedY2[0]);\r\n return overlapY;\r\n }\r\n\r\n if (seg1.start.y === seg1.end.y && seg1.start.y === seg2.start.y) {\r\n const sortedX1 = [seg1.start.x, seg1.end.x].sort((a, b) => a - b);\r\n const sortedX2 = [seg2.start.x, seg2.end.x].sort((a, b) => a - b);\r\n\r\n if (sortedX1[1] < sortedX2[0] || sortedX2[1] < sortedX1[0]) {\r\n return 0;\r\n }\r\n\r\n const overlapX = Math.min(sortedX1[1], sortedX2[1]) - Math.max(sortedX1[0], sortedX2[0]);\r\n return overlapX;\r\n }\r\n\r\n const intersection = getSegmentIntersectionPoint(seg1, seg2);\r\n if (intersection && isPointOnSegment(intersection, seg1) && isPointOnSegment(intersection, seg2)) {\r\n return Math.sqrt(Math.pow(intersection.x - seg1.start.x, 2) + Math.pow(intersection.y - seg1.start.y, 2));\r\n }\r\n\r\n return 0;\r\n}\r\n\r\nexport function areCollinearAndOverlap(p1, p2, p3, p4, minOverlap) {\r\n // Check the collinearity of the segments\r\n if (areCollinear(p1, p2, p3, p4)) {\r\n // If they are collinear, check for minimum overlap\r\n const seg1 = { start: p1, end: p2 };\r\n const seg2 = { start: p3, end: p4 };\r\n const overlapLength = getOverlapLength(seg1, seg2);\r\n\r\n return overlapLength >= minOverlap;\r\n }\r\n return false;\r\n}\r\n\r\n/**\r\n * Function for finding a point that is below and to the right of all other points\r\n * @param {Array} points {x, y}\r\n * @returns {Object} Point that is below and to the right of all others\r\n */\r\nexport function findLowestRightmostPoint(points) {\r\n if (!points.length) {\r\n return null;\r\n }\r\n\r\n let resultPoint = points[0];\r\n\r\n for (let i = 1; i < points.length; i++) {\r\n if (points[i].x > resultPoint.x) {\r\n resultPoint = points[i]; // Finding a new point to the right\r\n } else if (points[i].x === resultPoint.x && points[i].y < resultPoint.y) {\r\n resultPoint = points[i]; // If x are equal, choose a lower point\r\n }\r\n }\r\n\r\n return resultPoint;\r\n}\r\n\r\n/**\r\n * Calculate the length of the legs in an isosceles right triangle given the hypotenuse.\r\n * @param {number} hypotenuse - The length of the hypotenuse.\r\n * @returns {number} The length of each leg.\r\n */\r\nexport function calculateLeg(hypotenuse) {\r\n // Calculate the leg length using the relationship derived from Pythagoras' theorem\r\n return hypotenuse / Math.sqrt(2);\r\n}\r\n\r\n\r\n/**\r\n * Get closest point on the line\r\n * @returns {number} The length of each leg.\r\n * @param lineStart\r\n * @param lineEnd\r\n * @param mousePos\r\n */\r\nexport function getClosestPointOnLine(lineStart, lineEnd, mousePos) {\r\n const lineVec = {\r\n x: lineEnd.x - lineStart.x,\r\n y: lineEnd.y - lineStart.y\r\n };\r\n\r\n const lineLen = getPointDistance(lineStart, lineEnd);\r\n const lineUnitVec = {\r\n x: lineVec.x / lineLen,\r\n y: lineVec.y / lineLen\r\n };\r\n\r\n const mouseVec = {\r\n x: mousePos.x - lineStart.x,\r\n y: mousePos.y - lineStart.y\r\n };\r\n\r\n const dotProduct = mouseVec.x * lineUnitVec.x + mouseVec.y * lineUnitVec.y;\r\n const clampedDotProduct = Math.max(0, Math.min(dotProduct, lineLen));\r\n const x = lineStart.x + lineUnitVec.x * clampedDotProduct;\r\n const y = lineStart.y + lineUnitVec.y * clampedDotProduct;\r\n\r\n return {\r\n x: x,\r\n y: y,\r\n };\r\n}\r\n\r\nexport const findTopLeftPoint = (points) => {\r\n return points.reduce((topLeft, point) => {\r\n if (point.y < topLeft.y || (point.y === topLeft.y && point.x < topLeft.x)) {\r\n return point;\r\n }\r\n return topLeft;\r\n }, points[0]);\r\n};\r\n\r\nexport const adjustPointsRelativeToTopLeft = (points, topLeft) => {\r\n return points.map(point => ({\r\n x: point.x - topLeft.x,\r\n y: point.y - topLeft.y\r\n }));\r\n};\r\n\r\nexport const sortPointsClockwise = (points) => {\r\n let topLeft, topRight, bottomLeft, bottomRight;\r\n\r\n // Функция для округления координат\r\n const roundCoordinate = (value, precision = 10) => {\r\n const factor = Math.pow(10, precision); // precision — количество знаков после запятой\r\n return Math.round(value * factor) / factor;\r\n };\r\n\r\n // Округляем координаты точек\r\n const roundedPoints = points.map(point => ({\r\n x: roundCoordinate(point.x),\r\n y: roundCoordinate(point.y)\r\n }));\r\n\r\n // Находим крайние значения для округленных координат\r\n const minX = Math.min(...roundedPoints.map(p => p.x));\r\n const maxX = Math.max(...roundedPoints.map(p => p.x));\r\n const minY = Math.min(...roundedPoints.map(p => p.y));\r\n const maxY = Math.max(...roundedPoints.map(p => p.y));\r\n\r\n // Разделяем точки по их координатам\r\n roundedPoints.forEach(point => {\r\n if (point.x === minX && point.y === minY) {\r\n topLeft = point;\r\n } else if (point.x === maxX && point.y === minY) {\r\n topRight = point;\r\n } else if (point.x === minX && point.y === maxY) {\r\n bottomLeft = point;\r\n } else if (point.x === maxX && point.y === maxY) {\r\n bottomRight = point;\r\n }\r\n });\r\n\r\n // Проверяем, что все точки определены, чтобы не было undefined\r\n if (!topLeft || !topRight || !bottomLeft || !bottomRight) {\r\n console.error(\"Points\", points);\r\n console.error(\"One or more points are undefined\", {topLeft, topRight, bottomLeft, bottomRight});\r\n return null;\r\n }\r\n\r\n // Возвращаем точки в порядке: верхняя левая, верхняя правая, нижняя правая, нижняя левая\r\n return [topLeft, topRight, bottomRight, bottomLeft];\r\n};\r\n\r\nexport function calculatePolygonClippingPolygonArea(polygon) {\r\n if (!polygon || polygon.length === 0) return 0;\r\n\r\n let area = 0;\r\n const coordinates = polygon[0];\r\n\r\n for (let i = 0; i < coordinates.length - 1; i++) {\r\n const [x1, y1] = coordinates[i];\r\n const [x2, y2] = coordinates[i + 1];\r\n area += x1 * y2 - x2 * y1;\r\n }\r\n\r\n return Math.abs(area / 2);\r\n}\r\n\r\nexport function findNearestPoint (targetPoint, points) {\r\n let nearestPoint = null;\r\n let minDistance = Infinity;\r\n\r\n for (const point of points) {\r\n const distance = Math.sqrt(\r\n Math.pow(point.x - targetPoint.x, 2) + Math.pow(point.y - targetPoint.y, 2)\r\n );\r\n if (distance < minDistance) {\r\n minDistance = distance;\r\n nearestPoint = point;\r\n }\r\n }\r\n\r\n return nearestPoint;\r\n}\r\n\r\n","import React, {Component} from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {connect} from \"react-redux\";\r\nimport $ from \"jquery\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport Analytics from \"../../../../analytics\";\r\nimport ActionTypes from \"../../../../misc/actionTypes\";\r\nimport LookFeatureRemoveButton from \"../../../look/lookNavigation/lookMain/lookFeatureRemoveButton\";\r\nimport {getCurrentLayout} from \"../../../appLayout\";\r\nimport {disableFeature} from \"../../../look/lookNavigation/lookFunctions2\";\r\nimport {updateCanvasCount} from \"../../../../actions/actionFunctions\";\r\n\r\nclass BodyPanelRadio extends Component {\r\n\r\n static propTypes = {\r\n activeSubPart: PropTypes.object.isRequired,\r\n isMobile: PropTypes.bool,\r\n quotingTool: PropTypes.bool,\r\n refreshItems: PropTypes.func,\r\n };\r\n\r\n // componentWillReceiveProps(nextProps) {\r\n // if (nextProps.updateDisableFeatureGroupRadio && !this.props.updateDisableFeatureGroupRadio) {\r\n // this.forceUpdate();\r\n // }\r\n // }\r\n\r\n radioClick = async () => {\r\n const activeSubPart = this.props.activeSubPart;\r\n Analytics.sendClickEvent('disable-toggle-' + activeSubPart.partId);\r\n const layout = getCurrentLayout();\r\n if (!activeSubPart.disabled && activeSubPart.activeFeature && layout.isNewLayout) {\r\n await disableFeature(activeSubPart.activeFeature)\r\n } else {\r\n activeSubPart.disabled = !activeSubPart.disabled;\r\n activeSubPart.disabledClick();\r\n activeSubPart.updateLocalStorage();\r\n }\r\n $(window).trigger(ActionTypes.CHANGE_LAYOUT); // update canvas\r\n if (this.props.refreshItems) {\r\n this.props.refreshItems();// update navigation (non compatible)\r\n }\r\n this.forceUpdate();\r\n this.props.updateCanvasCount();\r\n setTimeout(() => {\r\n this.forceUpdate(); // for slow udpates\r\n }, 0)\r\n };\r\n\r\n render() {\r\n const activeSubPart = this.props.activeSubPart;\r\n const cabinetsPartIds = [\"top_cabinet\", \"bottom_cabinet\", \"center_island_cabinet\"];\r\n const isCabinet = activeSubPart && cabinetsPartIds.includes(activeSubPart.partId);\r\n const countertopPartIds = [\"countertop\", \"backsplash\", \"center_island_countertop\"];\r\n const isCountertop = activeSubPart && countertopPartIds.includes(activeSubPart.partId);\r\n\r\n if (this.props.quotingTool) {\r\n return (\r\n
    \r\n \r\n \r\n
    \r\n )\r\n }\r\n\r\n\r\n const layout = getCurrentLayout();\r\n if (layout.isNewLayout) {\r\n if (!activeSubPart || !activeSubPart.activeFeature) {\r\n return null\r\n }\r\n const text = this.props.isMobile && activeSubPart.partId === \"center_island_cabinet\" && this.props.windowWidth < 800\r\n ? \"radioButton.on\"\r\n : \"radioButtonDisableFeatueGroup1\";\r\n return \r\n }\r\n\r\n return (\r\n \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {updateDisableFeatureGroupRadio} = store.navigationState;\r\n const {windowWidth} = store.serverState;\r\n const {canvasCount} = store.bathroomVisualizerState; // to update component when feature is changed\r\n\r\n return {\r\n updateDisableFeatureGroupRadio,\r\n windowWidth,\r\n canvasCount,\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n updateCanvasCount,\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(BodyPanelRadio);\r\n\r\n","import {hashHistory} from \"react-router\";\r\nimport {changeQTRoutePath} from \"../../misc/changeRoutePath\";\r\nimport {getCurrentLayout} from \"../appLayout\";\r\nimport store from \"./../../store\";\r\nimport {\r\n changeActivePartRelatedItemIndex, setCameFromPage,\r\n setQtActiveCategory,\r\n toggleBathroomVisualizerOpen,\r\n toggleSelectionWindow\r\n} from \"../../actions/actionFunctions\";\r\nimport Config from \"../../config\";\r\nimport {switchToWizardItem} from \"../qkbPages/materialsWizard/useChangeWizardStepRoute\";\r\n\r\nexport default (cameFromPage, firstCat = false, subPart = null, qtCategoryName = \"\", wizardAllObject = null, stepIndex = 0) => {\r\n const layout = getCurrentLayout();\r\n const state = store.getState();\r\n const {selectionGroup, activePartRelatedItemIndex} = state.selectionState;\r\n const layoutParts = state.stepsState.layoutParts;\r\n const qtActiveCategory = qtCategoryName || (subPart && subPart.part ? subPart.part.qtCategoryName : state.qtState.qtActiveCategory);\r\n\r\n store.dispatch(toggleSelectionWindow(true, selectionGroup || layoutParts[0]));\r\n store.dispatch(toggleBathroomVisualizerOpen(false));\r\n store.dispatch(setCameFromPage(cameFromPage));\r\n\r\n const {wizardList, wizardIsActive} = state.wizardState;\r\n if (wizardAllObject) {\r\n const {wizardItemId, quoteIndex} = wizardAllObject;\r\n const wizardItem = wizardList.find(wizItem => wizItem.id === wizardItemId); // if not found - set default\r\n switchToWizardItem(wizardItem, stepIndex, quoteIndex);\r\n return\r\n } else if (wizardIsActive) {\r\n switchToWizardItem();\r\n return\r\n }\r\n\r\n if (layout.qtCategories) { // set default if index is not matching\r\n let currentActiveCategory = layout.qtCategories.find(qtCat => qtCat.name === qtActiveCategory);\r\n if (subPart) {\r\n if (!currentActiveCategory) { // edge profile cases\r\n currentActiveCategory = layout.qtCategories.find(qtCat => qtCat.subParts.some(sPart => sPart.part.partId === subPart.part.partId));\r\n }\r\n if (!currentActiveCategory) { // edge profile cases\r\n if (Config.isDevMode()) {\r\n console.log(\"NO CATEGORY for feature\", );\r\n }\r\n if (layout.qtCategories.length) {\r\n store.dispatch(setQtActiveCategory(layout.qtCategories[0].name));\r\n store.dispatch(changeActivePartRelatedItemIndex(0));\r\n changeQTRoutePath(layout.qtCategories[0].name, 0);\r\n } else {\r\n if (!window.location.href.includes('materials')) {\r\n hashHistory.push('materials');\r\n }\r\n }\r\n return;\r\n }\r\n const relatedItemIndex = currentActiveCategory.subParts.findIndex(subPartItem => {\r\n return subPartItem.part.partId === subPart.part.partId\r\n });\r\n store.dispatch(setQtActiveCategory(currentActiveCategory.name));\r\n store.dispatch(changeActivePartRelatedItemIndex(relatedItemIndex > -1 ? relatedItemIndex : 0));\r\n changeQTRoutePath(currentActiveCategory.name, relatedItemIndex);\r\n } else if (!currentActiveCategory || !currentActiveCategory.subParts[activePartRelatedItemIndex] || firstCat) {\r\n const qtCategory = layout.qtCategories[0];\r\n store.dispatch(setQtActiveCategory(qtCategory.name));\r\n store.dispatch(changeActivePartRelatedItemIndex(0));\r\n changeQTRoutePath(qtCategory.name, 0);\r\n }\r\n }\r\n\r\n if (!window.location.href.includes('materials')) {\r\n hashHistory.push('materials');\r\n }\r\n\r\n};\r\n","import {PartMenuType} from \"../../visComponents/constants\";\r\nimport {iCmp} from \"../../../misc/utils\";\r\nimport Layer from \"../../visComponents/layer\";\r\nimport {LayoutType, METADATA} from \"./constants\";\r\nimport PartCommon from \"../../visComponents/partCommon\";\r\n\r\nexport class Part extends PartCommon {\r\n\r\n constructor(isParent, isChild, menuType) {\r\n super();\r\n if (isChild || (isParent && menuType === PartMenuType.Simple)) {\r\n this.featuresList = {};\r\n this.featuresPartsList = {};\r\n this.modulePartsList = {};\r\n Object.keys(LayoutType).forEach(layoutName => {\r\n this.featuresList[layoutName] = [];\r\n this.featuresPartsList[layoutName] = [];\r\n this.modulePartsList[layoutName] = [];\r\n });\r\n this.allFeaturesReceived = false;\r\n this.realFeaturesReceived = false; // this prop is need on Scroll (if features count more that 1000)\r\n this.nextFeaturesPageToLoad = 0;\r\n this.activeFeature = null;\r\n this.placeholderFeature = null;\r\n this.shadowFeature = null;\r\n this.placeholderChanged = false;\r\n this.firstClick = {\r\n \"0\": false\r\n };\r\n this.activeLockedFeature = null;\r\n this.activeNotInVisualizerFeature = null; // is needed to display in the QT selected activeNotInVisualizerFeature, but render proper activeFeature layer(for example, countertop)\r\n // name = \"\";\r\n this.visible = true;\r\n this.categoryEnabled = false;\r\n this.layout = null;\r\n this.featureGroupVisible = true; // dashboard's feature group eye ball logic\r\n this.featureGroupEnabled = true; // dashboard's feature group checkbox logic\r\n this.selectedFeaturesHistory = []; // array of strings(names). updated every time item is selected\r\n this.filtersReceived = null; // array of filters values, comes from BE, for ex [1221, 347, 1124]\r\n }\r\n if (isParent) {\r\n this.partThumbnail = '';\r\n this.relatedItems = [];\r\n }\r\n if (!isChild && !isParent) {\r\n this.dbFeature = null;\r\n this.layer = new Layer();\r\n this._customDisplayName = null;\r\n this.notesList = {};\r\n }\r\n this.partName = \"\";\r\n }\r\n\r\n set features(featuresList) {\r\n // features can't be set directly, we need to change featuresList array\r\n }\r\n get features() {\r\n const layout = this.layout || this.getParent().layout;\r\n return this.featuresList[layout.getCurrentLayoutName()]\r\n }\r\n set featuresParts(featuresList) {\r\n // featuresParts can't be set directly, we need to change featuresPartsList array\r\n }\r\n get featuresParts() {\r\n const layout = this.layout || this.getParent().layout;\r\n return this.featuresPartsList[layout.getCurrentLayoutName()]\r\n }\r\n get moduleParts() {\r\n const layout = this.layout || this.getParent().layout;\r\n return this.modulePartsList[layout.getCurrentLayoutName()]\r\n }\r\n\r\n /**\r\n * Checks whether a given for condition matches the needed value (or array of values)\r\n * @param name {string}\r\n * @param value {string || array}\r\n * @returns {int} -1 - no such for condition, 0 - no match, 1 - matches\r\n */\r\n matchesMetaForCondition(name, value) {\r\n return this.metaData[name] && this.metaData[name].some(condValue => {\r\n return condValue === METADATA.ALL || (Array.isArray(value) ? value.some(val => iCmp(condValue, val)) : iCmp(condValue, value))\r\n });\r\n }\r\n\r\n matchesMetaForArrayOfConditions(arrayOfConditions) {\r\n return arrayOfConditions.every((condition) => {\r\n return this.matchesMetaForCondition(condition.propName, condition.propValue);\r\n })\r\n }\r\n}\r\n\r\n\r\n","import * as types from \"./actionTypes\";\r\n\r\n//********** CONTRACT SIGNING *************/\r\nexport const showContractSigning = (show, callback = null) => ({\r\n type: types.SHOW_CONTRACT_SIGNING,\r\n payload: {show, callback}\r\n});\r\n\r\nexport const setAfterContractSignCallback = (afterContractSignCallback) => ({\r\n type: types.SET_AFTER_CONTRACT_SIGN_CALLBACK,\r\n payload: {afterContractSignCallback}\r\n});\r\n\r\nexport const contractSignPostSignature = (contractSignData) => ({\r\n type: types.CONTRACT_SIGNING_POST_SIGNATURE,\r\n payload: contractSignData\r\n});\r\n\r\nexport const showSignaturePad = (show, tag) => ({\r\n type: types.CONTRACT_SIGNING_SHOW_SIGNATURE_PAD,\r\n payload: {show, tag}\r\n});\r\n\r\nexport const setContractsValues = ({contractId, pageIndex, fieldIndex, name, value}) => {\r\n return (dispatch, getState) => {\r\n let {contractsValues} = getState().contractSigningState;\r\n if (!contractId) {\r\n return\r\n }\r\n if (!contractsValues[contractId]) {\r\n contractsValues[contractId] = {}\r\n }\r\n if (!contractsValues[contractId][pageIndex]) {\r\n contractsValues[contractId][pageIndex] = {}\r\n }\r\n contractsValues[contractId][pageIndex][fieldIndex] = {name, value};\r\n dispatch({\r\n type: types.CONTRACT_SIGNING_SET_CONTRACTS_VALUES,\r\n payload: {\r\n contractsValues: {...contractsValues}\r\n }\r\n })\r\n }\r\n};\r\n\r\nexport const setContractSigningStep = step => ({\r\n type: types.CONTRACT_SIGNING_SET_STEP,\r\n payload: {step}\r\n});\r\n\r\nexport const setContractDocumentForJob = (documentData) => ({\r\n type: types.CONTRACT_SIGNING_JOB_DOCUMENT,\r\n payload: {...documentData}\r\n});\r\n\r\nexport const setContractBlob = (contractBlob) => ({\r\n type: types.SET_CONTRACT_BLOB,\r\n payload: {contractBlob}\r\n});\r\n\r\nexport const restoreContractValues = (pagesCustomFieldsValue, savedInvoiceNumberOfPages, needToUpdateContract, contractsValues = {}) => ({\r\n type: types.CONTRACT_SIGNING_RESTORE_VALUES,\r\n payload: {pagesCustomFieldsValue, savedInvoiceNumberOfPages, needToUpdateContract, contractsValues}\r\n});\r\n\r\nexport const setContractsList = (contractsList) => ({\r\n type: types.CONTRACT_SIGNING_SET_CONTRACTS_LIST,\r\n payload: {contractsList}\r\n});\r\n","import JsonApi from \"../../../api/jsonApi\";\r\nimport {getLocalStorageItem} from \"../../look/lookNavigation/lookFunctions\";\r\nimport store from \"../../../store\";\r\nimport {setContractsList} from \"../../../actions/contractsActions\";\r\n\r\nexport const getContracts = async () => {\r\n const {contractSigningState, fabricatorState} = store.getState();\r\n if (contractSigningState.contractsReceived || !fabricatorState.settings.useContractSigning) {\r\n if (!contractSigningState.contractsReceived) {\r\n store.dispatch(setContractsList([])); // set received property true\r\n }\r\n return\r\n }\r\n try {\r\n const response = await JsonApi.getContractDocuments();\r\n console.log(\"response\", response);\r\n if (response && Array.isArray(response.data)) {\r\n const savedContracts = getLocalStorageItem(\"activeContracts\");\r\n let newOrderedList = response.data\r\n .sort((a, b) => (a.order > b.order) ? 1 : -1)\r\n .map((contract, contractIndex) => {\r\n contract.selected = false; // this is used in the checkbox\r\n contract.order = contractIndex;\r\n if (document.kvConfig.isBackend) {\r\n const fabId = document.kvConfig.userId || \"noFabUser\";\r\n if (savedContracts && savedContracts[fabId] && Array.isArray(savedContracts[fabId])\r\n && savedContracts[fabId].length > 0 && savedContracts[fabId].includes(contract.id)) {\r\n contract.selected = true;\r\n }\r\n } else if (contract.isDefault) { // default is for customer, if it is unchecked - then do not use contract at all\r\n contract.selected = true;\r\n }\r\n if (response.data.length === 1 || (fabricatorState.isAmericanStandard && contractIndex === 0)) {\r\n // We need to always have the spec sheet loading for American standard as the first doc without selecting it\r\n // If there is only one contract - it should be selected by the default\r\n contract.selected = true;\r\n }\r\n return contract;\r\n });\r\n store.dispatch(setContractsList(newOrderedList))\r\n return newOrderedList\r\n } else {\r\n store.dispatch(setContractsList([])); // set received property true\r\n return []\r\n }\r\n } catch (error) {\r\n console.log(\"error\", error);\r\n store.dispatch(setContractsList([])); // set received property true\r\n return []\r\n }\r\n};\r\n\r\nexport const getSelectedContracts = (contractsList) => {\r\n if (!Array.isArray(contractsList) || !contractsList.length) {\r\n return []\r\n }\r\n return contractsList.filter(contract => contract.selected)\r\n}\r\n\r\nexport const shouldUseContractSigning = (fabricatorSettings, allContractsList, withoutContractsCheck = false) => {\r\n if (!fabricatorSettings.useContractSigning) {\r\n return false;\r\n }\r\n if (withoutContractsCheck) {\r\n return true\r\n }\r\n if (!allContractsList) {\r\n const {contractsList} = store.getState().contractSigningState;\r\n allContractsList = contractsList;\r\n }\r\n return getSelectedContracts(allContractsList).length\r\n}\r\n\r\nexport const setContractBlobs = async (contractsList, receiptPagesLength = 0, isOfflineFirstLoad = false) => {\r\n let pagesCount = receiptPagesLength || 1; // start from 1 if receipt is broken\r\n let updatedContractsList = contractsList;\r\n for (const contract of updatedContractsList) {\r\n contract.pagesFrom = 0;\r\n contract.pagesTo = 0;\r\n if (contract.selected || isOfflineFirstLoad) {\r\n const useDocument = contract.documentWithoutTagsUrl || contract.documentUrl; // use without tags! but if not at least something\r\n if (useDocument && !contract.blobUrl) {\r\n const responseFetch = await fetch(useDocument);\r\n const blob = await responseFetch.blob();\r\n contract.blobUrl = URL.createObjectURL(blob);\r\n }\r\n contract.pagesFrom = pagesCount + (receiptPagesLength ? 1 : 0);\r\n pagesCount = pagesCount + contract.pagesCount;\r\n contract.pagesTo = pagesCount + (receiptPagesLength ? 1 : 0);\r\n }\r\n }\r\n if (isOfflineFirstLoad) {\r\n store.dispatch(setContractsList(updatedContractsList))\r\n }\r\n // console.log(\"contractsList\", contractsList);\r\n return {updatedContractsList, totalPages: pagesCount}\r\n}\r\n\r\nexport const getActiveContract = (contractsList, globalContractPage) => {\r\n return contractsList.find(contract => {\r\n return globalContractPage >=contract.pagesFrom && globalContractPage < contract.pagesTo\r\n })\r\n}\r\n\r\nexport const getAllContractsValues = (contractsList, context) => {\r\n const selectedContracts = getSelectedContracts(contractsList);\r\n const activeContract = getActiveContract(selectedContracts, context.globalContractPage);\r\n const activeContractPage = activeContract\r\n ? context.globalContractPage + 1 - activeContract.pagesFrom\r\n : 1;\r\n return {\r\n ...context,\r\n selectedContracts,\r\n activeContract,\r\n activeContractPage\r\n }\r\n}\r\n\r\nexport const changeContractsPage = (newPage, contractsList, context, changeContext) => {\r\n const {receiptPages, activeContract, globalContractPage} = context;\r\n const allValues = getAllContractsValues(contractsList, {...context, globalContractPage: newPage});\r\n // here we set false to show loader while the blob is reloading\r\n const showPage = (allValues.activeContract && activeContract && (allValues.activeContract.blobUrl === activeContract.blobUrl))\r\n || (receiptPages && (newPage <= receiptPages) && (globalContractPage <= receiptPages));\r\n\r\n changeContext({...context, globalContractPage: newPage, showPage});\r\n}\r\n","import $ from \"jquery\";\r\n\r\nimport store from \"../store\";\r\nimport {getCurrentLayout} from \"../bvcomponents/appLayout\";\r\nimport {\r\n addToCart, removeFromCart,\r\n setCanvasDimensions,\r\n setDefaultSelectionGroup,\r\n setLayoutDataParts,\r\n updateFabricatorSettings\r\n} from \"../actions/actionFunctions\";\r\nimport ActionTypes from \"./actionTypes\";\r\nimport {AVAILABLE_VISUALIZER_TYPES, getCommonVisualizerType, IS_BATHROOM_OLD_BV_SCENE} from \"../config\";\r\nimport {setVisualizerIsChanging} from \"../actions/serverFunctions\";\r\nimport {\r\n getCurrentQuoteRoomCartItem,\r\n getRoomCartItemForCategoryName,\r\n getRoomNameToCompare\r\n} from \"./categorySwitchingFunctions\";\r\nimport {updateCurrentQuote} from \"./quotesFunctions\";\r\nimport loadVisualizer from \"./loadVisualizer\";\r\nimport {loaderDisable, loaderEnable} from \"../bvcomponents/ui/loaderView\";\r\nimport {\r\n getCorrectedWizardGroupForFeature,\r\n getCurrentGroups,\r\n getDefaultMaterialsWizardItem, getFeatureGroupFromWizardGroup,\r\n showWizardInsteadOfQT\r\n} from \"../bvcomponents/look/lookNavigation/lookMain/lookWizard/lookWizardFunctions\";\r\nimport {setWizardActiveItem, setWizardIsActive, setWizardSelectedValues} from \"../actions/wizardFunctions\";\r\nimport {setActiveQuoteIndex, setQuotes} from \"../actions/roomsFunctions\";\r\nimport {getCartItemObject} from \"./helpers\";\r\n\r\nexport const fixVisualizerType = () => {\r\n if (document.kvConfig.toolVersion > 4 || IS_BATHROOM_OLD_BV_SCENE || (document.kvConfig.visualizerType === \"Fireplace\")) {\r\n document.kvConfig.layersSize = \"full_hd\";\r\n switch (document.kvConfig.visualizerType) {\r\n case \"Bathroom\":\r\n document.kvConfig.visualizerType = document.kvConfig.toolVersion === 6 ? \"bvLook\" : \"bvScene\";\r\n break;\r\n case \"Kitchen\":\r\n document.kvConfig.visualizerType = \"kvScene\";\r\n break;\r\n default:\r\n break;\r\n }\r\n } else {\r\n document.kvConfig.layersSize = \"normal\";\r\n }\r\n}\r\n\r\nexport const hasSubscriptionForRoom = (room) => {\r\n const {fabricatorState} = store.getState();\r\n const neededSubscriptionName = getCommonVisualizerType(room);\r\n return fabricatorState.fabricatorSubscriptions\r\n && fabricatorState.fabricatorSubscriptions.find(subscription => subscription && subscription.service.toLowerCase() === neededSubscriptionName);\r\n}\r\n\r\n/**\r\n * @param newVisualizerType {string}\r\n * @param subscription {object} // subscriptionInterface\r\n * @returns number {number}\r\n */\r\nexport const getToolVersionByVisualizerType = (newVisualizerType, subscription = null) => {\r\n if (newVisualizerType === AVAILABLE_VISUALIZER_TYPES.Fireplace) {\r\n return 5\r\n }\r\n if (subscription && Number.isInteger(subscription.toolVersion)) {\r\n return subscription.toolVersion\r\n }\r\n switch (newVisualizerType) {\r\n case AVAILABLE_VISUALIZER_TYPES.Bathroom:\r\n case AVAILABLE_VISUALIZER_TYPES.Kitchen: {\r\n return 4\r\n }\r\n case AVAILABLE_VISUALIZER_TYPES.bvScene:\r\n case AVAILABLE_VISUALIZER_TYPES.kvScene: {\r\n return 5\r\n }\r\n case AVAILABLE_VISUALIZER_TYPES.bvLook: {\r\n return 6\r\n }\r\n default:\r\n return 4\r\n }\r\n}\r\n\r\n\r\n/**\r\n * @param room {string} roomName\r\n * @param disableLoader {boolean} whether to remove loader or wait on anything else\r\n */\r\nexport const switchToNewVisualizerType = async (room, disableLoader = true) => {\r\n const {fabricatorState, serverState, quotesState, wizardState} = store.getState();\r\n if (!fabricatorState.settings.allowVisualizerSwitching) {\r\n return false\r\n }\r\n const {visualizersLoaded} = serverState;\r\n\r\n const existingSubscription = hasSubscriptionForRoom(room);\r\n if (!existingSubscription) {\r\n return false\r\n }\r\n let oldLayout = getCurrentLayout();\r\n oldLayout.initialized = false; // stop updating old canvas!\r\n loaderEnable();\r\n\r\n const newVisualizerType = getVisualizerTypeFromSubscription(existingSubscription);\r\n\r\n store.dispatch(setVisualizerIsChanging(true));\r\n\r\n await updateCurrentQuote(quotesState.activeQuoteIndex, newVisualizerType, false); // create quote with correct room before switching\r\n\r\n console.log(\"newVisualizerType\", newVisualizerType);\r\n\r\n if (!visualizersLoaded.includes(newVisualizerType)) {\r\n const loaded = await loadVisualizer(newVisualizerType, true);\r\n if (!loaded) {\r\n return false\r\n }\r\n }\r\n if (wizardState.wizardIsActiveObject.hasOwnProperty(newVisualizerType)\r\n && (wizardState.wizardIsActiveObject[newVisualizerType] !== wizardState.wizardIsActive)) {\r\n store.dispatch(setWizardIsActive(wizardState.wizardIsActiveObject[newVisualizerType]));\r\n }\r\n\r\n document.kvConfig.visualizerType = newVisualizerType;\r\n document.kvConfig.toolVersion = getToolVersionByVisualizerType(newVisualizerType, existingSubscription);\r\n fixVisualizerType(); // set new bathroom or kitchen\r\n store.dispatch(setCanvasDimensions()); // update canvas height and width (version 4 <> 5 switch)\r\n\r\n const layout = getCurrentLayout();\r\n if (!layout.initialized) {\r\n layout.initialized = true; // start updating the canvas in if was stopped earlier\r\n }\r\n const layoutParts = layout.getFeatures()\r\n .filter(parentGroup => parentGroup.categoryEnabled)\r\n .map((parentGroup) => parentGroup.partName);\r\n\r\n const roomFeatureGroup = layout.getFeatureGroupByPartId(\"room\");\r\n if (roomFeatureGroup) {\r\n const newActiveFeature = roomFeatureGroup.features.find(feature => getRoomNameToCompare(feature).toLowerCase() === existingSubscription.service);\r\n if (newActiveFeature) {\r\n roomFeatureGroup.activeFeature = newActiveFeature; // set it because it will be set in the materials page after switch\r\n\r\n const {quotesState, wizardState, advancedQuotingState, cartState} = store.getState();\r\n const {wizardList, wizardIsActive, allWizardsValues, wizardActiveItem} = wizardState;\r\n const {showAdvancedQuoting} = advancedQuotingState;\r\n const {cartItems} = cartState;\r\n\r\n if (showWizardInsteadOfQT(wizardList, wizardIsActive)) {\r\n const nextWizard = getDefaultMaterialsWizardItem();\r\n if (nextWizard) {\r\n if (!wizardActiveItem || (wizardActiveItem.id !== nextWizard.id)) {\r\n store.dispatch(setWizardActiveItem(nextWizard, quotesState.activeQuoteIndex));\r\n }\r\n const lastSelectedWizardInThisQuote = allWizardsValues.find(wizObject => {\r\n return wizObject.quoteIndex === quotesState.activeQuoteIndex && wizObject.isLastActiveWizard\r\n && nextWizard.id === wizObject.wizardItemId\r\n });\r\n if (!lastSelectedWizardInThisQuote || (Object.keys(lastSelectedWizardInThisQuote.wizardSelectedValues).length <= 1)) {\r\n const wizardActiveStep = 0;\r\n const currentGroups = getCurrentGroups(nextWizard, wizardActiveStep, {});\r\n if (currentGroups[0]) {\r\n const featureGroup = getFeatureGroupFromWizardGroup(currentGroups[0]);\r\n if (featureGroup && (featureGroup.partId === \"room\")) {\r\n store.dispatch(setWizardSelectedValues({\r\n [wizardActiveStep]: {\r\n wizardGroup: getCorrectedWizardGroupForFeature(currentGroups[0], newActiveFeature),\r\n selectedFeature: newActiveFeature,\r\n partId: \"room\",\r\n }\r\n }, quotesState.activeQuoteIndex, nextWizard.id));\r\n if (showAdvancedQuoting) {\r\n const selectedQuoteRoomCartItem = getCurrentQuoteRoomCartItem(cartItems, quotesState.activeQuoteIndex);\r\n if (selectedQuoteRoomCartItem) {\r\n store.dispatch(removeFromCart(selectedQuoteRoomCartItem));\r\n }\r\n const roomCartItem = getCartItemObject(newActiveFeature, 1, \"\");\r\n roomCartItem.currentQuote = quotesState.activeQuoteIndex;\r\n roomCartItem.fromWizardId = nextWizard.id;\r\n roomCartItem.fromWizardStep = wizardActiveStep;\r\n roomCartItem.fromWizardGroupId = currentGroups[0].id;\r\n store.dispatch(addToCart([roomCartItem]));\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n store.dispatch(setLayoutDataParts(layoutParts));\r\n store.dispatch(setDefaultSelectionGroup(layoutParts[0]));\r\n store.dispatch(updateFabricatorSettings());\r\n\r\n $(window).trigger(ActionTypes.UPDATE_ALL_ITEMS);\r\n\r\n console.log(\"finish visualizer change\", document.kvConfig.visualizerType);\r\n\r\n setTimeout(() => {\r\n store.dispatch(setVisualizerIsChanging(false));\r\n }, 300) // prevent materials page canvas jumping\r\n\r\n if (disableLoader) {\r\n loaderDisable();\r\n } // else we wait in server reducer, when it is added to loaded\r\n return true\r\n}\r\n\r\nexport const getVisualizerTypeFromSubscription = (subscription) => {\r\n const toolVersionToCheck = subscription.toolVersion || 4;\r\n switch (subscription.service) {\r\n case \"Bathroom\":\r\n case \"bathroom\":\r\n return toolVersionToCheck === 6\r\n ? \"bvLook\"\r\n : toolVersionToCheck === 5 ? \"bvScene\" : \"Bathroom\"\r\n case \"Kitchen\":\r\n case \"kitchen\":\r\n return toolVersionToCheck === 5 ? \"kvScene\" : \"Kitchen\"\r\n case \"Fireplace\":\r\n case \"fireplace\":\r\n return \"Fireplace\"\r\n default:\r\n return subscription.service\r\n }\r\n}\r\n\r\n/**\r\n * @param quoteIndex {number}\r\n * @param nextVisualizerType {string}\r\n * @returns {string}\r\n */\r\nexport const getQuoteVisualizerType = (quoteIndex, nextVisualizerType) => {\r\n const {quotesState, cartState, fabricatorState, serverState} = store.getState();\r\n const {cartItems} = cartState;\r\n const {quotes, activeQuoteIndex} = quotesState;\r\n\r\n if (fabricatorState.settings.allowVisualizerSwitching) {\r\n const roomCartItem = getCurrentQuoteRoomCartItem(cartItems, quoteIndex);\r\n if (roomCartItem) {\r\n const existingSubscription = hasSubscriptionForRoom(getRoomNameToCompare(roomCartItem.cartFeature));\r\n if (existingSubscription) {\r\n return getVisualizerTypeFromSubscription(existingSubscription);\r\n }\r\n }\r\n const quoteCartItems = cartItems.filter(cartItem => {\r\n return (cartItem.currentQuote === quoteIndex) && !(cartItem.cartFeature && cartItem.cartFeature.dbFeature.autoAddToCart)\r\n && !(cartItem.cartFeature\r\n && cartItem.cartFeature.dbFeature.displayLogic\r\n && Array.isArray(cartItem.cartFeature.dbFeature.displayRules)\r\n && cartItem.cartFeature.dbFeature.displayRules.some(rule => rule))\r\n });\r\n if (quoteCartItems.length && quoteCartItems[0].fromVisualizerType\r\n && quoteCartItems.every(cartItem => cartItem.fromVisualizerType === quoteCartItems[0].fromVisualizerType)) {\r\n return quoteCartItems[0].fromVisualizerType\r\n }\r\n if (nextVisualizerType) { // if we don't have any cart items or room cart item and we are switching visualizer -> set it's type\r\n return nextVisualizerType\r\n }\r\n if (quoteIndex === activeQuoteIndex && !serverState.visualizerIsChanging) {\r\n return document.kvConfig.visualizerType\r\n }\r\n }\r\n if (quotes && quotes[quoteIndex] && quotes[quoteIndex].room) {\r\n return quotes[quoteIndex].room\r\n }\r\n return document.kvConfig.visualizerType\r\n}\r\n\r\n\r\n/**\r\n * @param featureClicked {featureInterface}\r\n * @param roomName {string}\r\n * @param fabricatorSettings {object}\r\n * @param visualizerIsChanging {boolean}\r\n * @returns {string|boolean}\r\n */\r\nexport const shouldSwitchVisualizer = (featureClicked, roomName, fabricatorSettings, visualizerIsChanging) => {\r\n if (!fabricatorSettings.allowVisualizerSwitching || visualizerIsChanging) {\r\n return false\r\n }\r\n\r\n let room = roomName || getRoomNameToCompare(featureClicked);\r\n\r\n // 2) if user clicked on unavailable visualizer -> go and set initial visualizer!\r\n const hasSubscription = hasSubscriptionForRoom(room);\r\n\r\n // 3) set main config visualizer type\r\n const newVisualizerType = hasSubscription ? getVisualizerTypeFromSubscription(hasSubscription) : null;\r\n if (newVisualizerType && (document.kvConfig.visualizerType !== newVisualizerType)) {\r\n return newVisualizerType\r\n }\r\n return false\r\n}\r\n\r\n\r\n/**\r\n * not used for now! but let it be\r\n * @param newRoomName {string}\r\n * @param needToAddRoomToCart {boolean}\r\n * @returns {Promise}\r\n */\r\nexport const createNewQuoteAfterVisualizerChange = async (newRoomName = \"\", needToAddRoomToCart = true) => {\r\n const {fabricatorState, quotesState} = store.getState();\r\n const {quotes, activeQuoteIndex} = quotesState;\r\n\r\n const currentQuote = await updateCurrentQuote(activeQuoteIndex);\r\n const newQuotes = [...currentQuote, {}];\r\n const newActiveQuoteIndex = quotes.length; // for example, if length is 2 (we are adding 2 index(0 and 1 already exist))\r\n store.dispatch(setQuotes(newQuotes));\r\n store.dispatch(setActiveQuoteIndex(newActiveQuoteIndex));\r\n if (needToAddRoomToCart) {\r\n const roomCartItem = getRoomCartItemForCategoryName(newRoomName, fabricatorState.settings);\r\n if (roomCartItem) {\r\n const newRoomCartItem = Object.assign({}, roomCartItem, {\r\n currentQuote: newActiveQuoteIndex\r\n })\r\n store.dispatch(addToCart([newRoomCartItem]));\r\n }\r\n }\r\n return Promise.resolve(true)\r\n}\r\n","export const replaceIncorrectSymbols = (string) => {\r\n return string.replace(/â€\\x9D/, \"\").replace(/\\//, \"\").replace(\"”\", \"\")\r\n}\r\n\r\n/**\r\n * @param value {number}\r\n * @param percent {number}\r\n * @returns {number}\r\n */\r\nexport const getPercentage = (value, percent) => {\r\n return (value / 100) * percent;\r\n}\r\n\r\n/**\r\n * @param value {number}\r\n * @param fromTotal {number}\r\n * @returns {number} %\r\n */\r\nexport const getPercentAmount = (value, fromTotal) => {\r\n if (!value) {\r\n return 0\r\n }\r\n return (fromTotal / value) * 100;\r\n}\r\n\r\n/**\r\n * common func for checking if need to show\r\n * @param fabricatorSettings {object}\r\n * @param forCartItems {array}\r\n * @return {array} // {currency: \"USD\", cartItems: []}\r\n */\r\nexport const getDifferentCurrencyCartItems = (fabricatorSettings, forCartItems = []) => {\r\n let totalArray = [];\r\n if (!fabricatorSettings.useDifferentCurrencies || !forCartItems.length) {\r\n return totalArray\r\n }\r\n forCartItems.forEach(cartItem => {\r\n if (cartItem.cartFeature && cartItem.cartFeature.getFeatureCurrency) {\r\n const featureCurrency = cartItem.cartFeature.getFeatureCurrency();\r\n if (featureCurrency && (featureCurrency !== fabricatorSettings.currency)) {\r\n const existingGroup = totalArray.find(filterGroupObject => {\r\n return filterGroupObject.currency === featureCurrency\r\n });\r\n if (existingGroup) {\r\n existingGroup.cartItems.push(cartItem);\r\n } else {\r\n totalArray.push({\r\n currency: featureCurrency,\r\n cartItems: [cartItem]\r\n })\r\n }\r\n }\r\n }\r\n });\r\n // console.log(\"totalArray\", totalArray);\r\n return totalArray\r\n}\r\n","import EventManager from \"../../store/sqftEventManager\";\r\nimport workspace from \"../workspace\";\r\nimport config from \"../../store/sqftConfig\";\r\nimport store from \"./../../../../../../store\";\r\nimport {\r\n setSQFTActiveButton, setSQFTActiveLevel3Button, setSQFTActiveSubMenuButton, setSQFTContextMenu,\r\n setSQFTMenuOpened,\r\n setSQFTMenuOpenedLock, setSQFTSystemDeleteMessage\r\n} from \"../../../../../../actions/sqftMenuFunctions\";\r\nimport {\r\n SIDEBAR_SHAPE_BUTTONS,\r\n SIDEBAR_NAVIGATION_BUTTONS,\r\n SIDEBAR_NAVIGATION_CABINET_BUTTONS,\r\n SIDEBAR_SLAB_BUTTONS, SHAPE_PART_ID,\r\n} from \"../../../../constants\";\r\nimport {getMousePositionOnField} from \"../../../../helpers/sqftHelper\";\r\nimport TextBox from \"./textBox\";\r\nimport sqftEventManager from \"../../store/sqftEventManager\";\r\nimport sqftConfig from \"../../store/sqftConfig\";\r\nimport {clearRotateAngles} from \"../../store/canvasHelper\";\r\nimport {updateSQFTCalculations} from \"../../../../../../actions/sqftFunctions\";\r\nimport FreeDraw from \"../controls/freeDraw\";\r\nimport Duplicate from \"../controls/duplicate\";\r\nimport sqftShape from \"../shapes/sqftShape\";\r\nimport MovableImage from \"../shapes/movableImage\";\r\nimport sqftShapeManager from \"../../store/sqftShapeManager\";\r\nimport workspaceControllers from \"../../store/workspaceControllers\";\r\nimport MiteredController from \"../controls/mitered\";\r\nimport {showFilters} from \"../../../../../../actions/actionFunctions\";\r\nimport {setGroheFiltersSearchText} from \"../../../../../../actions/groheFunctions\";\r\n\r\nconst WorkspaceEvents = function() {\r\n let self = this;\r\n this.workspace_onClick = (mousePos) => {\r\n let tookAction = false;\r\n const state = store.getState();\r\n const activeButton = state.sqftMenuState.activeButton;\r\n const isShowSlabTool = state.sqftSlabState.isShowSlabTool;\r\n const isWallsLockMode = state.sqftMenuState.isWallsLockMode;\r\n const isITextEditing = state.sqftMenuState.isITextEditing;\r\n //const shapes = workspace.getShapes();\r\n const shape = workspace.getHoverShape();\r\n const bumpoutLine = workspace.getHoverBumpout();\r\n const textBoxes = workspace.textBoxManager.getTextBoxes();\r\n let cursor = EventManager.getCursor();\r\n\r\n if (activeButton === SIDEBAR_SHAPE_BUTTONS.freeDraw\r\n && !workspace.getHoverPoint()\r\n ) {\r\n FreeDraw.initDraw(isWallsLockMode);\r\n FreeDraw.drawShape(mousePos);\r\n return false;\r\n }\r\n\r\n if (workspaceControllers.spacer.isJustCreated) {\r\n workspaceControllers.spacer.setIsJustCreated(false);\r\n return false;\r\n }\r\n\r\n if (shape || workspace.getLineWithMovingBumpout()) {\r\n const sideOpened = state.sqftMenuState.menuOpened;\r\n\r\n if (!sideOpened\r\n && !isShowSlabTool\r\n && activeButton !== \"move\"\r\n && activeButton !== \"label\"\r\n && activeButton !== \"rotate\"\r\n && activeButton !== \"angle\"\r\n && activeButton !== \"freeDraw\"\r\n && activeButton !== \"resize\"\r\n && activeButton !== \"waterfall\"\r\n && cursor && (cursor[0] === \"move\" || cursor[0] === \"grab\")\r\n ) {\r\n store.dispatch(setSQFTMenuOpened(\"move\"));\r\n store.dispatch(setSQFTActiveButton(\"move\"));\r\n resetEvents();\r\n config.workspace.menuItemActive = \"move\";\r\n //this.sideBarButtonClick(nodes.sidebar.mainNavButton, !config.highlight.rotateAngle);\r\n }\r\n store.dispatch(setSQFTMenuOpenedLock(true));\r\n } else {\r\n //1) close opened menus\r\n // todo sqft-react\r\n // this.hideSidebarSide();\r\n // this.hideSideBarContent();\r\n this.hideAngleTooltip();\r\n //2) remove active class from main button\r\n\r\n // todo sqft-react\r\n //this.removeActiveClassFromMainButton()\r\n //nodes.sidebar.mainNavButton.classList.remove(classes.buttonActiveClass);\r\n }\r\n\r\n if (activeButton) { //if (config.workspace.menuItemActive) {\r\n //tookAction = true;\r\n let resetCursor = false;\r\n if (shape) {\r\n let line;\r\n switch(activeButton) { // switch(config.workspace.menuItemActive) {\r\n case \"delete\":\r\n //todo priority\r\n if (textBoxes.length > 0) {\r\n for (let textBox of textBoxes) {\r\n if (textBox.box.mixin.movable.state.hovering) {\r\n //box.delete();\r\n return;\r\n }\r\n }\r\n }\r\n if (shape.type === \"appliances\") {\r\n workspace.removeShape(shape);\r\n } else if (shape.type === \"slabImage\" || shape.partId === SHAPE_PART_ID.slabPlaceHolder) {\r\n workspace.updateRemovedFeatures(shape);\r\n workspace.removeSlabImage(shape);\r\n } else {\r\n const line = shape.getHoverSegment() || shape.getHoverSegmentOutlineCorner();\r\n const point = shape.getHoverPointOnClick(mousePos);\r\n const cornerLine = shape.getHoverSegmentCorner();\r\n const miteredPoint = shape.getHoverMiteredPoint();\r\n const label = shape.getHoverLabel();\r\n\r\n if (cornerLine) {\r\n if (cornerLine.getAttachedItems()) {\r\n cornerLine.deleteAttachedItem();\r\n } else {\r\n cornerLine.line.to.removeAttachedItem();\r\n }\r\n } else if (point && (point.getArcLength() || point.getAngle() || point.getMiteredFeatureId())) {\r\n point.removeAttachedItem();\r\n tookAction = false;\r\n } else if (miteredPoint && line) {\r\n line.miteredOverlay.deletePoint(miteredPoint);\r\n line.miteredOverlay.resetHoveredPoint();\r\n } else if (line && line.getAttachedItems()) {\r\n //workspace.removeShape(line.getAttachedShape());\r\n line.deleteAttachedItem();\r\n } else if (label) {\r\n const lineWithTheLabel = label.getParent();\r\n lineWithTheLabel.labelOverlay.destroy();\r\n lineWithTheLabel.labelOverlay = null;\r\n } else if (!isShowSlabTool) {\r\n // shapeToDelete = shape;\r\n // self.callConfirmPopup(mousePos);\r\n store.dispatch(setSQFTSystemDeleteMessage({isOpened: true, shape: shape}));\r\n tookAction = false;\r\n } else {\r\n tookAction = false;\r\n }\r\n }\r\n //config.controls.delete.removeClass(config.activeClass);\r\n //nodes.designPatterns.delete.removeClass(config.activeClass);\r\n break;\r\n case \"flip-h\":\r\n shape.flip(shape.FlipDirection.HORIZONTAL);\r\n config.controls.flipH.removeClass(config.activeClass);\r\n resetCursor = true;\r\n break;\r\n case \"flip-v\":\r\n shape.flip(shape.FlipDirection.VERTICAL);\r\n config.controls.flipV.removeClass(config.activeClass);\r\n resetCursor = true;\r\n break;\r\n case \"rotate-right\":\r\n // rotate v1 disabled\r\n // shape.rotate(90, shape.Direction.RIGHT);\r\n //config.controls.rotateRight.removeClass(config.activeClass);\r\n //nodes.designPatterns.rotateRight.removeClass(config.activeClass);\r\n break;\r\n case \"rotate-left\":\r\n // activated from activeButton\r\n //shape.rotate(90, shape.Direction.LEFT);\r\n\r\n //config.controls.rotateLeft.removeClass(config.activeClass);\r\n //nodes.designPatterns.rotateLeft.removeClass(config.activeClass);\r\n break;\r\n case SIDEBAR_NAVIGATION_BUTTONS.label:\r\n EventManager.stealCursor(true);\r\n EventManager.resetCursor(self);\r\n\r\n if (store.getState().sqftMenuState.contextMenu.isOpened) {\r\n store.dispatch(setSQFTContextMenu({isOpened: false}));\r\n }\r\n store.dispatch(setSQFTContextMenu({isOpened: true, activeMenu: \"labels\", pos: mousePos, parent: shape}));\r\n tookAction = false;\r\n\r\n break;\r\n default:\r\n tookAction = false;\r\n break;\r\n }\r\n switch(activeButton) {\r\n case SIDEBAR_SLAB_BUTTONS.rotate:\r\n //rotate in slab and regular mode\r\n //rotate v2\r\n //shape.rotate(90, shape.Direction.LEFT, isShowSlabTool);\r\n //todo shape rotation with bumpout disabled\r\n if (sqftShapeManager.canShapeBeRotated(shape)) {\r\n if (!shape.getIsRotatable()) {\r\n sqftShapeManager.closeRotatablePopups(shape);\r\n sqftShapeManager.setShapeAsRotatable(shape);\r\n sqftShapeManager.rotateShapeTo90Deg(shape);\r\n } else {\r\n sqftShapeManager.disableRotatableState(shape);\r\n }\r\n }\r\n tookAction = false;\r\n break;\r\n case SIDEBAR_NAVIGATION_BUTTONS.duplicate:\r\n if (shape instanceof sqftShape && !isShowSlabTool\r\n || shape instanceof sqftShape && shape.partId === SHAPE_PART_ID.slabPlaceHolder\r\n ) {\r\n Duplicate.cloneShape(shape);\r\n } else if (shape instanceof MovableImage) {\r\n Duplicate.cloneMovableImage(shape);\r\n }\r\n\r\n tookAction = false;\r\n\r\n break;\r\n case SIDEBAR_NAVIGATION_CABINET_BUTTONS.crown:\r\n //crown molding displayed as edges and backsplashes\r\n //shape.addCrownMolding();\r\n break\r\n case SIDEBAR_NAVIGATION_CABINET_BUTTONS.end_panel:\r\n case SIDEBAR_NAVIGATION_BUTTONS.end_cap:\r\n //crown molding displayed as edges and backsplashes\r\n //shape.addCrownMolding();\r\n break;\r\n case SIDEBAR_NAVIGATION_CABINET_BUTTONS.spacer:\r\n //line = shape.getHoverSegment(true);\r\n line = workspace.getHoveredLine();\r\n if (line) {\r\n workspaceControllers.spacer.createSpacer(line.from, line.to, shape.getPosition());\r\n line.resetState();\r\n shape.resetState();\r\n tookAction = false // see QCDES-4731 we need to call mouseUp on each shape\r\n }\r\n //store.dispatch(setSQFTActiveButton(SIDEBAR_NAVIGATION_CABINET_BUTTONS.spacer));\r\n //store.dispatch(setSQFTMenuOpened(false));\r\n\r\n break;\r\n default:\r\n break;\r\n }\r\n } else if (bumpoutLine) {\r\n switch(activeButton) {\r\n case \"delete\":\r\n //workspace.removeShape(bumpoutLine.getAttachedShape());\r\n bumpoutLine.deleteAttachedItem();\r\n tookAction = false;\r\n break;\r\n default:\r\n break;\r\n }\r\n } else {\r\n if (activeButton === \"rotate-left\") {\r\n //EventManager.stealCursor(true);\r\n //EventManager.setCursor(\"rotate-left\", self, true);\r\n } else if (activeButton === \"delete\") {\r\n EventManager.stealCursor(true);\r\n EventManager.setCursor(\"delete\", self, true);\r\n } else if (activeButton === SIDEBAR_NAVIGATION_BUTTONS.text) {\r\n if (!workspace.textBoxManager.isBoxActive()\r\n && !isITextEditing\r\n ) {\r\n let pos = getMousePositionOnField(mousePos.x, mousePos.y);\r\n let textBox = new TextBox(pos);\r\n textBox.init();\r\n\r\n console.log(config.workspace.menuItemActive);\r\n\r\n //this.navButtonClick(nodes.sidebar.navButtons[0]); // change icon\r\n config.workspace.menuItemActive = null; // reset action\r\n }\r\n }\r\n tookAction = false;\r\n resetCursor = false;\r\n //$('#design-default').click();\r\n }\r\n const state = store.getState();\r\n const updateCalculations = state.sqftState.updateCalculations;\r\n store.dispatch(updateSQFTCalculations(updateCalculations + 1));\r\n if (resetCursor) {\r\n EventManager.resetCursor(self);\r\n config.workspace.menuItemActive = null;\r\n }\r\n }\r\n\r\n return tookAction;\r\n };\r\n\r\n this.init = () => {\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_UP,\r\n self.workspace_onClick,\r\n self,\r\n EventManager.priorities.OVERALL\r\n );\r\n };\r\n\r\n this.hideAngleTooltip = () => {\r\n // const input = document.getElementById(\"angle_input\");\r\n const angleTooltip = document.getElementById(\"angle-tooltip\");\r\n const inputArrows = [].slice.call(document.querySelectorAll(\"#angle-tooltip [data-action]\"));\r\n const inputSubmit = [].slice.call(document.querySelectorAll('[data-action=\"angle-input-submit\"]'));\r\n\r\n if (angleTooltip) {\r\n angleTooltip.style.display = \"none\";\r\n inputArrows.forEach(function (elem) {\r\n elem.parentNode.replaceChild(elem.cloneNode(true), elem);\r\n });\r\n inputSubmit[0].removeEventListener('click', self.deActivateRotateAngle);\r\n }\r\n }\r\n};\r\n\r\n//todo\r\nconst resetEvents = function () {\r\n EventManager.stealCursor(true);\r\n EventManager.resetCursor(self);\r\n workspace.setAllowEdges(false);\r\n workspace.setAllowBumpoutEdges(false);\r\n config.workspace.menuItemActive = null\r\n};\r\n\r\nexport const clearAllMenusEvents = () => {\r\n sqftEventManager.stealCursor(true); // making cursor default\r\n sqftEventManager.resetCursor(sqftEventManager.currentCursorOwner); // ??\r\n sqftConfig.workspace.menuItemActive = null; // out of resize, rotate, delete\r\n // let zz= sqftEventManager;\r\n // console.log(zz)\r\n // debugger // eslint-disable-line no-debugger\r\n\r\n workspace.setAllowEdges(false); // removing sizing lines\r\n workspace.setAllowBumpoutEdges(false); // removing sizing lines\r\n workspace.setAllowMiteredEdges(false); // removing mitered lines\r\n\r\n if (workspace.miteredController instanceof MiteredController) {\r\n workspace.miteredController.deregisterEvents();\r\n }\r\n clearRotateAngles();\t// remove rotateAngle\r\n sqftConfig.highlight.points = false;\t// remove radiuses\r\n sqftConfig.highlight.lines = false; // disable lines highlighting\r\n sqftConfig.highlight.type = ''; // disable lines highlighting\r\n sqftConfig.highlight.id = null; // disable lines highlighting\r\n sqftEventManager.removeStuckCursorEvents();\r\n\r\n store.dispatch(setSQFTContextMenu({isOpened: false}));\r\n store.dispatch(setSQFTActiveButton(\"\"));\r\n store.dispatch(setSQFTActiveSubMenuButton(\"\"));\r\n store.dispatch(setSQFTActiveLevel3Button(null));\r\n store.dispatch(setGroheFiltersSearchText(\"\"));\r\n store.dispatch(showFilters(false));\r\n FreeDraw.drawFinish();\r\n FreeDraw.destroy();\r\n sqftShapeManager.disableRotatableStateForAllShapes();\r\n};\r\n\r\n\r\n\r\nexport default new WorkspaceEvents();\r\n","import React, {Component} from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {connect} from \"react-redux\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\n\r\nclass FeatureWizardSteps extends Component {\r\n\r\n static propTypes = {\r\n availableSteps: PropTypes.array,\r\n featureWizardStep: PropTypes.number,\r\n setFeatureWizardStep: PropTypes.func,\r\n exitFeatureWizard: PropTypes.func,\r\n getFilterDisplayName: PropTypes.func.isRequired,\r\n toggleWizardFilterSelection: PropTypes.func,\r\n allProducts: PropTypes.bool,\r\n allStepsCompleted: PropTypes.bool,\r\n finishClicked: PropTypes.bool,\r\n showFeatureWizard: PropTypes.bool,\r\n };\r\n\r\n setFeatureWizardStep = (nextStep, disabled) => {\r\n\r\n if (disabled) {\r\n return false;\r\n }\r\n\r\n switch (nextStep) {\r\n case \"back\":\r\n nextStep = this.props.featureWizardStep === 0 ? 0 : this.props.featureWizardStep - 1;\r\n break;\r\n case \"next\":\r\n if (this.props.featureWizardStep === (this.props.availableSteps.length - 1)) {\r\n this.props.exitFeatureWizard(this.props.availableSteps);\r\n return;\r\n } else {\r\n nextStep = this.props.featureWizardStep + 1;\r\n }\r\n break;\r\n default:\r\n break;\r\n }\r\n const currentStep = this.props.availableSteps[nextStep - 1];\r\n const fabricatorSettings = this.props.fabricatorSettings;\r\n if ((nextStep > this.props.featureWizardStep) && currentStep && !this.props.allStepsCompleted\r\n && (!currentStep.selectedValueId || (fabricatorSettings.leadCapture && currentStep.selectedItemIsLocked && !this.props.isPhoneNumberValidated))) {\r\n return\r\n }\r\n if (this.props.showFeatureWizard) {\r\n this.props.setFeatureWizardStep(nextStep);\r\n if (nextStep === 0) {\r\n this.props.toggleWizardFilterSelection(false);\r\n }\r\n } else {\r\n this.props.enableFeatureWizard(nextStep);\r\n }\r\n };\r\n\r\n render() {\r\n // console.log('features top', this.props.features);\r\n const currentStep = this.props.availableSteps[this.props.featureWizardStep];\r\n // const nextStep = this.props.availableSteps[this.props.featureWizardStep + 1];\r\n const isLastStep = this.props.featureWizardStep === this.props.availableSteps.length - 1;\r\n\r\n const fabricatorSettings = this.props.fabricatorSettings;\r\n const nextStepIsLocked = currentStep && !this.props.allStepsCompleted && fabricatorSettings.leadCapture && currentStep.selectedItemIsLocked && !this.props.isPhoneNumberValidated;\r\n\r\n const lastStepIsDisabled = currentStep && (!currentStep.selectedValueId || nextStepIsLocked);\r\n\r\n return (\r\n
    \r\n {this.props.showFeatureWizard && (this.props.allProducts || !this.props.allStepsCompleted || (this.props.allStepsCompleted && !this.props.finishClicked)) ? (\r\n
    this.setFeatureWizardStep(\"back\")}>\r\n \r\n
    \r\n ) : null}\r\n
      \r\n {this.props.allProducts || (this.props.showFeatureWizard && this.props.finishClicked) ? (\r\n
    • this.props.exitFeatureWizard(this.props.availableSteps)}>\r\n \r\n
    • \r\n ) : null}\r\n {this.props.availableSteps.map((wizardButton, index) => {\r\n const prevStep = this.props.availableSteps[index - 1];\r\n const disabled = index && (!prevStep.selectedValueId\r\n || (fabricatorSettings.leadCapture && prevStep.selectedItemIsLocked && !this.props.isPhoneNumberValidated));\r\n const buttonName = this.props.getFilterDisplayName(wizardButton.filterName);\r\n const displayName = this.props.getFilterDisplayName(wizardButton.filterName, this.props.intl);\r\n return (\r\n
    • this.setFeatureWizardStep(index, disabled)}>\r\n {displayName}\r\n {this.props.availableSteps[index].selectedValueId && index !== this.props.featureWizardStep\r\n ? \r\n : null\r\n }\r\n
    • \r\n )\r\n })}\r\n
    \r\n {this.props.showFeatureWizard && (this.props.allProducts || !this.props.allStepsCompleted || (this.props.allStepsCompleted && !this.props.finishClicked)) ? (\r\n
    this.setFeatureWizardStep(\"next\", lastStepIsDisabled)}>\r\n \r\n \r\n \r\n
    \r\n ) : null}\r\n
    \r\n )\r\n }\r\n}\r\n\r\n\r\nconst mapStateToProps = (store) => ({\r\n fabricatorSettings: store.fabricatorState.settings,\r\n});\r\n\r\nconst mapDispatchToProps = () => ({});\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(FeatureWizardSteps)\r\n);\r\n","//********* TUTORIALS *********//\r\nimport * as types from \"./actionTypes\";\r\n\r\nexport const toggleShowAssignQuotePopup = (showAssignQuotePopup, assignQuotePopupSaveButtons = \"all\") => ({\r\n type: types.TOGGLE_SHOW_ASSIGN_QUOTE_POPUP,\r\n payload: {showAssignQuotePopup, assignQuotePopupSaveButtons}\r\n});\r\n\r\nexport const setAssignQuotePopupSearchText = (assignQuotePopupSearchText) => ({\r\n type: types.SET_ASSIGN_QUOTE_POPUP_SEARCH_TEXT,\r\n payload: {assignQuotePopupSearchText}\r\n});\r\n\r\nexport const setAssignQuotePopupEmployee = (assignQuotePopupEmployee) => ({\r\n type: types.SET_ASSIGN_QUOTE_POPUP_EMPLOYEE,\r\n payload: {assignQuotePopupEmployee}\r\n});\r\n\r\nexport const setAssignQuotePopupCustomer = (assignQuotePopupCustomer) => ({\r\n type: types.SET_ASSIGN_QUOTE_POPUP_CUSTOMER,\r\n payload: {assignQuotePopupCustomer}\r\n});\r\n\r\nexport const setAssignQuotePopupSuccessText = (assignQuotePopupSuccessText) => ({\r\n type: types.SET_ASSIGN_QUOTE_POPUP_SUCCESS_TEXT,\r\n payload: {assignQuotePopupSuccessText}\r\n});\r\n\r\nexport const setAssignQuoteCloneMode = (assignQuoteCloneMode) => ({\r\n type: types.SET_ASSIGN_QUOTE_CLONE_MODE,\r\n payload: {assignQuoteCloneMode}\r\n});\r\n\r\nexport const setAssignQuoteOfflineData = (offlineData) => ({\r\n type: types.SET_ASSIGN_QUOTE_OFFLINE_DATA,\r\n payload: offlineData\r\n});\r\n","import {connect} from \"react-redux\";\r\nimport {withRouter} from \"react-router-dom\";\r\nimport $ from \"jquery\";\r\n\r\nimport {ROUTES} from \"../../../routes\";\r\nimport {getCommonCoords, getFeatureCoords, getLayerCenter, navFeatureCLick} from \"../lookNavigation/lookFunctions\";\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\nimport {\r\n setLookActiveCategory,\r\n setLookActiveFeature,\r\n setLookDemoPointsClicked,\r\n setLookOpened, setLookPageOpened\r\n} from \"../../../actions/lookFunctions\";\r\nimport store from \"../../../store\";\r\nimport {LOOK_OPENED_TYPES, LOOK_WALLS} from \"../core/constants\";\r\nimport {IS_PRODUCT_JOURNEY} from \"../../../config\";\r\nimport {addToCart, setCanvasScale, updateCanvasCount} from \"../../../actions/actionFunctions\";\r\nimport {getCartItemObject} from \"../../../misc/helpers\";\r\nimport {\r\n enableRelatedFeature,\r\n getCategoryOnlyUrl,\r\n getFeatureUrl,\r\n hideFeatureSection\r\n} from \"../lookNavigation/lookFunctions2\";\r\nimport {CABINET_GROUP, COUNTERTOP_GROUP, EDGE_GROUP} from \"../../kvComponent/core/constants\";\r\n\r\nexport const doNotZoomPartIds = [\"kitchen_floor\", \"left_wall\", \"right_wall\", \"front_wall\", \"back_wall\",\r\n \"split_wall\", \"left_wall_splitter\", \"bathroom_floor\", \"shower_floor\", \"shower_curb\"];\r\n\r\nexport const shouldZoomPartId = (partId, isMobile) => {\r\n if (!partId) {\r\n return false\r\n }\r\n if (!isMobile && (CABINET_GROUP.includes(partId) || COUNTERTOP_GROUP.includes(partId) || EDGE_GROUP.includes(partId))) {\r\n return false\r\n }\r\n return (!doNotZoomPartIds.includes(partId) || (\r\n partId === \"front_wall\" && document.kvConfig.visualizerType === \"Fireplace\"\r\n ))\r\n}\r\n\r\nexport const shouldZoomToTheBottom = (partId) => {\r\n if (!partId) {\r\n return false\r\n }\r\n return partId === \"kitchen_floor\" || partId === \"bathroom_floor\"\r\n}\r\n\r\nexport const getCorrectedCenter = (center, scale = 1.75, clickedFeature, imageCanvas, isMobile) => {\r\n const {activePreset} = store.getState().bathroomVisualizerState;\r\n if ((clickedFeature.partId === \"shower_fixture\" || clickedFeature.partId === \"crown_molding\")\r\n && imageCanvas.current.pinchZoom.zoomFactor === 1) {\r\n if (activePreset !== 4) {\r\n scale = 1.5;\r\n }\r\n switch (activePreset) {\r\n case 3:\r\n center.y = center.y - 40;\r\n break;\r\n case 6:\r\n center.y = center.y + 40;\r\n break;\r\n default:\r\n break;\r\n }\r\n if (!isMobile) {\r\n $(\"html, body\").animate({scrollTop: 0}, 500);\r\n }\r\n }\r\n return {scale, center}\r\n}\r\n\r\nconst WithZoomToFeature = (props) => {\r\n\r\n const {history, children, imageCanvas, isMobile, setLookActiveCategory, setLookActiveFeature, lookOpened,\r\n setLookOpened, addToCart, qtActiveCategory, setCanvasScale, updateCanvasCount, lookActiveFeature,\r\n setLookDemoPointsClicked, lookPageOpened, setLookPageOpened, lookActiveCategory, lookCompatabilityAlert} = props;\r\n\r\n /**\r\n * Checks if list feature is currently active\r\n * @param partId {string}\r\n * @param zoomToFeature {featureInterface}\r\n * @param zoomToPostion {string}\r\n * @param changeUrl {boolean}\r\n * @param setActiveFeature {boolean}\r\n * @param closeOpenedCategory {boolean}\r\n * @param clickOnFeature {boolean}\r\n * @returns {featureInterface} clickedFeature\r\n */\r\n const zoomToFeatureGroup = (partId,\r\n zoomToFeature,\r\n zoomToPostion,\r\n changeUrl = true,\r\n setActiveFeature = true,\r\n closeOpenedCategory = true,\r\n clickOnFeature = true) => {\r\n let lookUrl = ROUTES.home;\r\n let clickedFeature;\r\n if (partId) {\r\n const layout = getCurrentLayout();\r\n const featureGroup = zoomToFeature ? zoomToFeature.getParent() : layout.getFeatureGroupByPartId(partId);\r\n clickedFeature = zoomToFeature || (featureGroup ? featureGroup.activeFeature : null);\r\n if (featureGroup && featureGroup.layerPositions && !zoomToFeature) {\r\n if (zoomToPostion) {\r\n clickedFeature = featureGroup.getMatchingPositionFeature(zoomToPostion);\r\n if (clickedFeature && !featureGroup.layerPositions[zoomToPostion]) {\r\n featureGroup.layerPositions[zoomToPostion] = clickedFeature;\r\n addToCart([getCartItemObject(clickedFeature, 1, qtActiveCategory)]);\r\n } else if (!clickedFeature) {\r\n clickedFeature = featureGroup.activeFeature || featureGroup.activeNotInVisualizerFeature; // show at least something\r\n }\r\n } else {\r\n Object.keys(featureGroup.layerPositions).forEach((position) => {\r\n if (featureGroup.layerPositions[position] && document.hoveredLayer\r\n && featureGroup.layerPositions[position].layer.zIndex === document.hoveredLayer.zIndex) {\r\n clickedFeature = featureGroup.layerPositions[position];\r\n }\r\n })\r\n }\r\n } else if (featureGroup && !featureGroup.layerPositions && !clickedFeature) {\r\n clickedFeature = featureGroup.activeFeature || featureGroup.activeNotInVisualizerFeature; // show at least something\r\n }\r\n if (clickedFeature) {\r\n console.log('clickedFeature', clickedFeature);\r\n if (clickOnFeature) {\r\n enableRelatedFeature(clickedFeature, addToCart, qtActiveCategory);\r\n navFeatureCLick(clickedFeature); // is needed for context menu vanity type switch\r\n }\r\n // console.log('Coords', clickedFeature.metaData.Coords);\r\n if (setActiveFeature) {\r\n setLookActiveFeature(clickedFeature);\r\n }\r\n featureGroup.featureBeforeChange = clickedFeature;\r\n const featureExistInQuotingTool = layout.partIdExistInQtCategory(partId);\r\n const allowFeatureScreen = featureExistInQuotingTool && !hideFeatureSection(true, partId, clickedFeature, lookCompatabilityAlert);\r\n\r\n if (!IS_PRODUCT_JOURNEY && isMobile && !setActiveFeature) {\r\n lookUrl = getCategoryOnlyUrl(clickedFeature.partId);\r\n setLookActiveCategory(clickedFeature.partId);\r\n } else if (featureExistInQuotingTool && (!IS_PRODUCT_JOURNEY || !lookActiveCategory || closeOpenedCategory)\r\n && (!IS_PRODUCT_JOURNEY || allowFeatureScreen)) {\r\n lookUrl = getFeatureUrl(clickedFeature);\r\n } else {\r\n lookUrl = getFeatureUrl(clickedFeature, true);\r\n setLookActiveCategory(clickedFeature.partId);\r\n }\r\n // if (!isMobile && imageCanvas.current && imageCanvas.current.setHoveredLayer && event) {\r\n // imageCanvas.current.setHoveredLayer(event);\r\n // }\r\n const commonCoords = getFeatureCoords(clickedFeature) || getCommonCoords(featureGroup, clickedFeature, imageCanvas.current.canvas);\r\n const shouldZoomCanvas = imageCanvas.current && imageCanvas.current.pinchZoom && commonCoords && Object.keys(commonCoords).length\r\n && !clickedFeature.notAvailableInVisualizer && shouldZoomPartId(clickedFeature.partId, isMobile);\r\n if (shouldZoomCanvas) {\r\n // const moreZoomFeatureGroups = [\"bathtub_fixture\"];\r\n const {center, scale} = getCorrectedCenter(\r\n getLayerCenter(commonCoords, imageCanvas.current.canvas, isMobile),\r\n null, clickedFeature, imageCanvas, isMobile\r\n );\r\n // const zoomFactor = (moreZoomFeatureGroups.includes(clickedFeature.partId)\r\n // && imageCanvas.current.pinchZoom.zoomFactor === 1 ) ? 3 : null // if null - it will be set in zoom to center func\r\n imageCanvas.current.pinchZoom.zoomToCenter(center, scale, false, allowFeatureScreen);\r\n setCanvasScale(imageCanvas.current.pinchZoom.options.tapZoomFactor);\r\n } else if (shouldZoomToTheBottom(clickedFeature.partId)) {\r\n $(\"html, body\").animate({scrollTop: document.body.scrollHeight}, 500);\r\n }\r\n if (!lookOpened) {\r\n setLookOpened(LOOK_OPENED_TYPES.featureZoom);\r\n setLookDemoPointsClicked(true);\r\n }\r\n if (IS_PRODUCT_JOURNEY && lookPageOpened) {\r\n setLookPageOpened(\"\");\r\n }\r\n }\r\n }\r\n if (changeUrl) {\r\n history.push(lookUrl);\r\n }\r\n return clickedFeature\r\n }\r\n\r\n const zoomToFeatureGroupByFeature = (zoomFeature) => {\r\n const featureGroup = zoomFeature.getParent();\r\n const isEmpty = (!zoomFeature && position) || (featureGroup && featureGroup.disabled);\r\n if (isEmpty) {\r\n if (!lookActiveFeature && position) {\r\n zoomFeature = featureGroup.getMatchingPositionFeature(position);\r\n if (zoomFeature) {\r\n featureGroup.layerPositions[position] = zoomFeature;\r\n }\r\n }\r\n if (zoomFeature) {\r\n featureGroup.activeFeature = zoomFeature;\r\n }\r\n console.log(\"zoomFeature featureGroup\", zoomFeature, featureGroup);\r\n }\r\n const layout = getCurrentLayout();\r\n if (zoomFeature) {\r\n if (!lookActiveFeature) {\r\n const parent = zoomFeature.getParent();\r\n parent.featureBeforeChange = zoomFeature;\r\n }\r\n setLookActiveFeature(zoomFeature);\r\n navFeatureCLick(zoomFeature);\r\n enableRelatedFeature(zoomFeature, addToCart, qtActiveCategory);\r\n\r\n if (isMobile) {\r\n // const closeOnly = zoomFeature && !layout.partIdExistInQtCategory(zoomFeature.partId) && !LOOK_WALLS.includes(zoomFeature.partId);\r\n const closeOnly = zoomFeature && !layout.partIdExistInQtCategory(zoomFeature.partId);\r\n if (closeOnly) {\r\n //history.push(getFeatureUrl(zoomFeature, true));\r\n } else {\r\n setLookActiveCategory(\"\");\r\n //history.push(getFeatureUrl(zoomFeature)); // always go to feature screen on mobile\r\n }\r\n } else {\r\n // history.push(getFeatureUrl(zoomFeature, !!lookActiveCategory))\r\n }\r\n\r\n updateCanvasCount();\r\n if (imageCanvas && imageCanvas.current && imageCanvas.current.pinchZoom && !LOOK_WALLS.includes(zoomFeature.partId)) {\r\n const commonCoords = getFeatureCoords(zoomFeature) || getCommonCoords(featureGroup || zoomFeature.getParent(), zoomFeature, imageCanvas.current.canvas);\r\n const center = getLayerCenter(commonCoords, imageCanvas.current.canvas, isMobile);\r\n const scale = imageCanvas.current.pinchZoom.options.tapZoomFactor;\r\n imageCanvas.current.pinchZoom.zoomToCenter(center, scale, true, layout.partIdExistInQtCategory(zoomFeature.partId));\r\n setCanvasScale(scale)\r\n }\r\n }\r\n }\r\n\r\n return children(zoomToFeatureGroup, zoomToFeatureGroupByFeature)\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const {lookOpened, lookActiveFeature, lookActiveCategory, lookCompatabilityAlert} = store.lookState;\r\n const {isMobile} = store.serverState;\r\n const {qtActiveCategory} = store.qtState;\r\n return {\r\n lookOpened,\r\n lookActiveFeature,\r\n isMobile,\r\n qtActiveCategory,\r\n lookActiveCategory,\r\n lookCompatabilityAlert,\r\n }\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setLookActiveCategory,\r\n setLookActiveFeature,\r\n setLookOpened,\r\n addToCart,\r\n setCanvasScale,\r\n updateCanvasCount,\r\n setLookDemoPointsClicked,\r\n setLookPageOpened,\r\n};\r\n\r\nexport default withRouter(\r\n connect(mapStateToProps, mapDispatchToProps)(WithZoomToFeature)\r\n)\r\n","import * as types from \"./actionTypes\";\r\n\r\nexport const togglePriceWorksheetOpened = (priceWorksheetOpened) => ({\r\n type: types.TOGGLE_PRICE_WORKSHEET_OPENED,\r\n payload: {\r\n priceWorksheetOpened\r\n }\r\n});\r\n\r\n// export const setDiscountSections = (discountSections) => {\r\n// return (dispatch, getState) => {\r\n// const {financeCellsVisible} = getState().priceWorksheetState;\r\n// // if (currentSection) {\r\n// // const discounts = sortByOrder(currentSection.discounts).filter((disc) => !disc.nestedParent);\r\n// // }\r\n// const payload = {\r\n// discountSections,\r\n// }\r\n// if (financeCellsVisible.length !== Object.keys(DISCOUNT_FINANCE_CELLS).length) {\r\n// const sectionWithFinance = discountSections.find(sec => {\r\n// return sec.type !== DISCOUNT_SECTION_TYPES.finance && sec.discounts.some(discount => {\r\n// return discount.discountType === DISCOUNT_SECTION_TYPES.finance\r\n// })\r\n// });\r\n// if (sectionWithFinance) {\r\n// sectionWithFinance.discounts\r\n// }\r\n// }\r\n// dispatch({\r\n// type: types.SET_DISCOUNT_SECTIONS,\r\n// payload\r\n// })\r\n// }\r\n// };\r\nexport const setDiscountSections = (discountSections) => ({\r\n type: types.SET_DISCOUNT_SECTIONS,\r\n payload: {\r\n discountSections,\r\n }\r\n});\r\n\r\nexport const setCustomAddedDiscounts = (customAddedDiscounts) => ({\r\n type: types.SET_CUSTOM_ADDED_DISCOUNTS,\r\n payload: {customAddedDiscounts}\r\n})\r\n\r\nexport const setFinancePercentage = (financePercentage) => ({\r\n type: types.SET_FINANCE_PERCENTAGE,\r\n payload: {financePercentage}\r\n});\r\n\r\nexport const setAllFinanceOptionsPopupVisible = (allFinanceOptionsPopupVisible) => ({\r\n type: types.SET_ALL_FINANCE_OPTIONS_POPUP_VISIBLE,\r\n payload: {allFinanceOptionsPopupVisible}\r\n});\r\n\r\nexport const setFinanceCellsVisible = (financeCellsVisible) => ({\r\n type: types.SET_DISCOUNT_FINANCE_CELLS_VISIBLE,\r\n payload: {financeCellsVisible}\r\n});\r\n","import React, {Component} from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {connect} from 'react-redux';\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\n\r\nimport {setCabinetsApplyTo, setCabinetsApplyToBathroom} from \"../../../actions/navigationFunctions\";\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\nimport UiSelect from \"../../ui/select\";\r\nimport {CABINET_GROUP} from \"../core/constants\";\r\nimport Analytics from '../../../analytics';\r\nimport {CABINET_GROUP_BATHROOM} from \"../../bvSceneComponent/core/constants\";\r\nimport store from \"../../../store\";\r\nimport {getFeatureGroupName} from \"../../../misc/helpers\";\r\nimport {getMissingFeaturesAndClickThem} from \"../../look/lookNavigation/lookNavigationFunctions\";\r\n\r\nclass CabinetSwitchers extends Component {\r\n\r\n static propTypes = {\r\n activeSubPart: PropTypes.object.isRequired,\r\n isMobile: PropTypes.bool,\r\n };\r\n\r\n componentDidMount() {\r\n const cabinetsApplyTo = this.getCabinetsApplyTo();\r\n const setCabinetsApplyTo = this.getSetCabinetsApplyTo();\r\n if (!cabinetsApplyTo.includes(this.props.activeSubPart.partId)) {\r\n cabinetsApplyTo.push(this.props.activeSubPart.partId);\r\n setCabinetsApplyTo(cabinetsApplyTo);\r\n }\r\n }\r\n\r\n toggleCabinetsApplyTo = (partId) => {\r\n Analytics.sendClickEvent('cabinets-apply-to-' + partId);\r\n let cabinetsApplyTo = [...this.getCabinetsApplyTo()];\r\n const setCabinetsApplyTo = this.getSetCabinetsApplyTo();\r\n const existingIndex = cabinetsApplyTo.findIndex(cabinetsApplyToPartId => cabinetsApplyToPartId === partId);\r\n if (existingIndex > -1) {\r\n cabinetsApplyTo.splice(existingIndex, 1)\r\n } else {\r\n cabinetsApplyTo.push(partId)\r\n }\r\n setCabinetsApplyTo(cabinetsApplyTo);\r\n };\r\n\r\n getButtonName = (partId, layout) => {\r\n const {intl, fabricatorData} = this.props;\r\n if (intl.locale !== \"en-EN\") {\r\n const featureGroup = layout.getFeatureGroupByPartId(partId);\r\n if (featureGroup) {\r\n return getFeatureGroupName(featureGroup, intl, fabricatorData)\r\n }\r\n }\r\n switch (partId) {\r\n case \"top_cabinet\":\r\n return this.props.showAsDropdown ? \"upper cabinet\" : \"upper\";\r\n case \"bottom_cabinet\":\r\n return this.props.showAsDropdown ? \"lower cabinet\" : \"lower\";\r\n case \"center_island_cabinet\":\r\n return \"center island\";\r\n case \"vanity_cabinet\":\r\n return \"Cabinet\";\r\n case \"vanity_mirror\":\r\n return \"Mirror\";\r\n default:\r\n return \"\"\r\n }\r\n };\r\n\r\n static getFeatureDoorStyleFilter = (feature, filterName = \"DoorStyle\") => {\r\n if (!feature) {\r\n return null\r\n }\r\n const filterGroups = store.getState().filterState.filterGroups;\r\n const doorStyleFilterGroup = filterGroups.find(group => group.name === filterName);\r\n return doorStyleFilterGroup && (feature.dbFeature.fabFilterValueIDs[doorStyleFilterGroup.id] || feature.dbFeature.filterValueIDs[doorStyleFilterGroup.id])\r\n };\r\n\r\n static getNeededFeatureFromNavItems = (navigationItemName, featureGroup) => {\r\n return featureGroup.features.find((feature) => {\r\n const featureName = feature.getSplittedFeatureName().replace(`${feature.dbFeature.groupName} - `, \"\");\r\n return featureName && navigationItemName && (featureName === navigationItemName)\r\n });\r\n }\r\n\r\n static applyClickTo = async (navigationItemPart, ignoreLocked, cabinetsApplyTo, setCurrentFeature = false) => {\r\n const layout = getCurrentLayout();\r\n let missingFeatures = [];\r\n for (const neededPartId of cabinetsApplyTo) {\r\n const featureGroup = layout.getFeatureGroupByPartId(neededPartId);\r\n if (!featureGroup) {\r\n continue;\r\n }\r\n let neededFeature;\r\n if (document.kvConfig.visualizerType === \"bvScene\") {\r\n const doorStyles = CabinetSwitchers.getFeatureDoorStyleFilter(navigationItemPart, \"DoorStyle\");\r\n const materials = CabinetSwitchers.getFeatureDoorStyleFilter(navigationItemPart, \"Material\");\r\n neededFeature = doorStyles && featureGroup.features.find((feature) => {\r\n const featureDoorStyles = CabinetSwitchers.getFeatureDoorStyleFilter(feature, \"DoorStyle\");\r\n const featureMaterials = CabinetSwitchers.getFeatureDoorStyleFilter(feature, \"Material\");\r\n return doorStyles && featureDoorStyles && materials && featureMaterials\r\n && (featureDoorStyles.some(ds => doorStyles.includes(ds)))\r\n && (featureMaterials.some(mat => materials.includes(mat)))\r\n });\r\n } else {\r\n const navigationItemName = navigationItemPart.getSplittedFeatureName().replace(`${navigationItemPart.dbFeature.groupName} - `, \"\");\r\n neededFeature = CabinetSwitchers.getNeededFeatureFromNavItems(navigationItemName, featureGroup);\r\n if (!neededFeature\r\n && (!featureGroup.alreadyRequestedFeatureNames || !featureGroup.alreadyRequestedFeatureNames.includes(navigationItemName))) {\r\n missingFeatures.push({relatedItem: featureGroup, navigationItemName, setCurrentFeature: true})\r\n }\r\n }\r\n if (neededFeature) {\r\n if (setCurrentFeature) {\r\n featureGroup.activeFeatureBeforeAllWalls = featureGroup.activeFeature;\r\n }\r\n neededFeature.clickFromAllWalls(ignoreLocked);\r\n }\r\n }\r\n if (missingFeatures.length) {\r\n await getMissingFeaturesAndClickThem(missingFeatures, true)\r\n }\r\n return Promise.resolve()\r\n }\r\n\r\n static applyAllCabinets = (navigationItemPart, ignoreLocked) => {\r\n const propsCabinetsApplyTo = store.getState().navigationState[\r\n document.kvConfig.visualizerType === \"bvScene\" ? \"cabinetsApplyToBathroom\" : \"cabinetsApplyTo\"\r\n ];\r\n const cabinetsApplyTo = [...propsCabinetsApplyTo];\r\n const existingIndex = cabinetsApplyTo.findIndex(cabinetsApplyToPartId => cabinetsApplyToPartId === navigationItemPart.partId);\r\n if (existingIndex > -1) {\r\n cabinetsApplyTo.splice(existingIndex, 1); // remove already clicked partId\r\n }\r\n return CabinetSwitchers.applyClickTo(navigationItemPart, ignoreLocked, cabinetsApplyTo)\r\n };\r\n\r\n getValueText = () => {\r\n if (this.props.windowWidth < 720) {\r\n return \r\n } else if (this.props.windowWidth < 800) {\r\n return \r\n } else {\r\n return \r\n }\r\n };\r\n\r\n buttonIsDisabled = (partId) => {\r\n const layout = getCurrentLayout();\r\n return this.props.activeSubPart.partId === partId\r\n || (document.kvConfig.visualizerType === \"Kitchen\" && partId === \"center_island_cabinet\"\r\n && !layout.getCurrentLayoutAbbreviation().includes(\"I\"));\r\n }\r\n\r\n renderDropDown = () => {\r\n const CABINETGROUPS = this.getCabinetGroups();\r\n const cabinetsApplyTo = this.getCabinetsApplyTo();\r\n const layout = getCurrentLayout();\r\n\r\n return (\r\n \r\n {CABINETGROUPS.map(partId => {\r\n const disabledButton = this.buttonIsDisabled(partId);\r\n return (\r\n
  • \r\n disabledButton ? false : this.toggleCabinetsApplyTo(partId)}/>\r\n disabledButton ? false : this.toggleCabinetsApplyTo(partId)}>\r\n {this.getButtonName(partId, layout)}\r\n \r\n
  • \r\n )\r\n })}\r\n
    \r\n )\r\n };\r\n\r\n getCabinetGroups = () => {\r\n if (document.kvConfig.visualizerType === \"bvScene\") {\r\n return CABINET_GROUP_BATHROOM\r\n }\r\n return [...CABINET_GROUP].filter(partId => partId !== \"fridge_enclosure\");\r\n };\r\n\r\n getCabinetsApplyTo = () => {\r\n return document.kvConfig.visualizerType === \"bvScene\" ? this.props.cabinetsApplyToBathroom : this.props.cabinetsApplyTo;\r\n };\r\n\r\n getSetCabinetsApplyTo = () => {\r\n return document.kvConfig.visualizerType === \"bvScene\" ? this.props.setCabinetsApplyToBathroom : this.props.setCabinetsApplyTo;\r\n };\r\n\r\n render() {\r\n const CABINETGROUPS = this.getCabinetGroups();\r\n if (this.props.showAsDropdown) {\r\n return this.renderDropDown()\r\n }\r\n const cabinetsApplyTo = this.getCabinetsApplyTo();\r\n const layout = getCurrentLayout();\r\n return (\r\n
    \r\n
    Apply to
    \r\n
      \r\n {CABINETGROUPS.map(partId => {\r\n const hideButton = this.buttonIsDisabled(partId);\r\n return hideButton ? null : (\r\n
    • this.toggleCabinetsApplyTo(partId)}>\r\n \r\n {this.getButtonName(partId, layout)}\r\n
      \r\n \r\n
      \r\n
    • \r\n )\r\n })}\r\n
    \r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => ({\r\n cabinetsApplyTo: store.navigationState.cabinetsApplyTo,\r\n cabinetsApplyToBathroom: store.navigationState.cabinetsApplyToBathroom,\r\n windowWidth: store.serverState.windowWidth,\r\n fabricatorData: store.fabricatorState,\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n setCabinetsApplyTo,\r\n setCabinetsApplyToBathroom\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(CabinetSwitchers)\r\n);\r\n","import isEmpty from \"lodash/isEmpty\";\r\nimport trim from \"lodash/trim\";\r\nimport isEqual from \"lodash/isEqual\";\r\nimport uniqBy from \"lodash/uniqBy\";\r\n\r\nimport DesignNavigationItem from \"./designNavigationItem\";\r\nimport {Exception} from \"../common/exception\";\r\nimport {\r\n filterFeaturesByValues,\r\n getAllFeatureFilters,\r\n getFilterGroupValue,\r\n getFilterGroupValues\r\n} from \"../../misc/utils\";\r\nimport store from \"../../store\";\r\nimport featureIsMatchingDisplayLogic, {checkIfInCatProperty} from \"../../misc/displayLogic\";\r\nimport {addDisplayLogicCartItem, addToCart} from \"../../actions/actionFunctions\";\r\nimport {capitalizeFirstLetters} from \"../../misc/helpers\";\r\nimport {IS_LIXIL_UI} from \"../../config\";\r\nimport {LOOK_ROOM_TYPES} from \"../look/core/constants\";\r\nimport {getCurrentRoomType} from \"../appLayout\";\r\nimport {getOptionsFromNavItemsForFeature} from \"../look/lookNavigation/lookFunctions\";\r\nimport {getColorFilterValue} from \"../../misc/filtersFunctions\";\r\nimport {loadRelatedFeatures, setRoomNotInVisualizerProperty} from \"./featuresFunctions\";\r\nimport {getFeatureCropCoors} from \"../../misc/metaDataFunctions\";\r\n\r\nexport default class PartCommon { // Common Class for KV & BV common methods (Feature -> IntermediatePart -> Part -> PartCommon)\r\n\r\n loadCommon(relatedItemName, RelatedItemClass, dbFeature, loadFeature = true, shouldLoadInDifferentGroups = false) {\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n if (loadFeature) {\r\n this[relatedItemName].load(dbFeature);\r\n }\r\n return !shouldLoadInDifferentGroups\r\n }\r\n return false\r\n }\r\n\r\n createRelatedItems() {\r\n if (this.relatedGroupNames) {\r\n this.relatedGroupNames.forEach(groupName => {\r\n this.load({groupName}, false)\r\n })\r\n }\r\n }\r\n\r\n navigationNoMetaSubItems(filters, searchText) {\r\n return this.returnUniqueNavFeatures(this.getFeaturesBySearchText(this.getFilteredFeaturesByFilters(filters, this.features), searchText))\r\n }\r\n\r\n /**\r\n * Returns an array of navigation items related to the given parent item\r\n * i.e. Floor - will return all Floor features\r\n * @returns {Array.}\r\n */\r\n navigationSubItems(filters, searchText) {\r\n return this.getFeaturesBySearchText(this.getFilteredFeaturesByFilters(filters), searchText)\r\n .map(_ => new DesignNavigationItem(_.featureName, _)); // 1) filter them by filters 2) filter them by search\r\n }\r\n\r\n navigationSubItemsWithFilterWithInactive(propName, propValue, featuresToCheck = this.features) {\r\n const refactoredArray = featuresToCheck.map((feature) => {\r\n feature.matchesMetaFailed = !(feature.matchesMetaForCondition(propName, propValue));\r\n return feature\r\n });\r\n return refactoredArray.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n /**\r\n * Called before setLayers, so that each Feature can set the zIndex for its layers\r\n * @param zIndexes {object}\r\n */\r\n setZIndex(zIndexes) {\r\n if(zIndexes) {\r\n this.getRelatedItems().forEach(_ => _.setZIndex(zIndexes));\r\n }\r\n }\r\n\r\n /**\r\n * Each feature will load its data from teh data object which comes from REST\r\n * @param dbFeature {object}\r\n * @return boolean // needed for break logic\r\n */\r\n load(dbFeature) {\r\n console.log('exception load', this, dbFeature);\r\n Exception.NotImplementedBaseClass();\r\n }\r\n\r\n /**\r\n * Will return the list of sub-parts if any, i.e. for Vanity it will be Mirror, Toilet, Sink, ...\r\n * !@param withHidden {boolean}\r\n * @returns {Array.}\r\n */\r\n subParts(withHidden = true) {\r\n return this.getRelatedItems()\r\n .filter(item => this.filterRelatedItem(item, withHidden))\r\n .map(_ => new DesignNavigationItem(_.partName, _));\r\n }\r\n\r\n filterRelatedItem(relatedItem, withHidden) {\r\n return withHidden\r\n ? relatedItem.visible && relatedItem.featureGroupEnabled\r\n : relatedItem.visible\r\n && relatedItem.featureGroupEnabled\r\n && (relatedItem.featureGroupVisible || (!relatedItem.featureGroupVisible && document.kvConfig.isBackend))\r\n }\r\n\r\n /**\r\n * Returns the navigation item to be displayed in navigation bar\r\n */\r\n navigationItem() {\r\n Exception.NotImplementedBaseClass(this);\r\n }\r\n\r\n /**\r\n * In case of Vanity is Custom & Complete.\r\n * Usually called for Complex parts, such as Vanities\r\n */\r\n subTypes() {\r\n // Exception.NotImplementedBaseClass(this);\r\n return []\r\n }\r\n\r\n /**\r\n * Converts a given sub-type to string\r\n // * @param subType\r\n * @returns {null}\r\n */\r\n subTypeToString() {\r\n return null;\r\n }\r\n\r\n /**\r\n * Checked whether the given sub-type has items, i.e. Vanity.Complete has\r\n */\r\n isSubTypeWithItems() {\r\n Exception.NotImplementedBaseClass(this);\r\n }\r\n\r\n activeSubType() {\r\n Exception.NotImplementedBaseClass(this);\r\n }\r\n\r\n getFilteredFeaturesByFilters(filters, featuresArray = this.features) {\r\n return !isEmpty(filters) ? filterFeaturesByValues(featuresArray, filters) : (featuresArray || []);\r\n }\r\n\r\n getFeaturesBySearchText(arrayToFilter, searchText) {\r\n if (!searchText) {\r\n return arrayToFilter\r\n }\r\n if (IS_LIXIL_UI) {\r\n return this.getFeaturesBySearchTextLixil(arrayToFilter, searchText)\r\n }\r\n const filterGroups = store.getState().filterState.filterGroups;\r\n return arrayToFilter.filter(feature => {\r\n const _searchText = trim(searchText.toLowerCase());\r\n let res = (!!feature);\r\n if (res) {\r\n const featureFilterValueIds = Object.assign(feature.dbFeature.filterValueIDs, feature.dbFeature.fabFilterValueIDs);\r\n let isPartName = feature.getFeatureName && feature.getFeatureName().toLowerCase().includes(_searchText);\r\n let isFilterName = false;\r\n\r\n if(!isPartName) {\r\n for(let filterGroupId in featureFilterValueIds) {\r\n let filterGroupIds = featureFilterValueIds[filterGroupId];\r\n for(let filterIndex in filterGroupIds) {\r\n let filterId = filterGroupIds[filterIndex];\r\n if(filterGroups[filterGroupId] && filterGroups[filterGroupId].values) {\r\n let filterGroup = filterGroups.find(fg => fg.id === filterGroupId);\r\n if (filterGroup && filterGroup.values) {\r\n let filter = filterGroup.values.find( fgv => fgv.id === filterId);\r\n if (filter) {\r\n isFilterName = (isFilterName || filter.displayText.toLowerCase().includes(_searchText) || filter.value.toLowerCase().includes(_searchText));\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n res = isPartName || isFilterName;\r\n }\r\n return res;\r\n })\r\n }\r\n\r\n getFeaturesBySearchTextLixil(arrayToFilter, searchText) {\r\n const filterGroups = store.getState().filterState.filterGroups;\r\n const collectionFilterGroup = filterGroups.find(group => group.name === \"Collection\");\r\n const _searchText = searchText.trim().toLowerCase();\r\n\r\n return arrayToFilter.filter(feature => {\r\n const featureFilterValueIds = getAllFeatureFilters(feature);\r\n const sku = (feature.getSplittedFeatureName() || \"\").toLowerCase();\r\n const customDisplayName = (feature.dbFeature.customDisplayName || \"\").toLowerCase();\r\n\r\n let res = (!!feature);\r\n if (res) {\r\n let matchByName = (sku && sku.includes(_searchText)) || (customDisplayName && customDisplayName.includes(_searchText));\r\n let isFilterName = false;\r\n\r\n if (!matchByName && collectionFilterGroup && Array.isArray(featureFilterValueIds[collectionFilterGroup.id])) {\r\n matchByName = featureFilterValueIds[collectionFilterGroup.id].some(filterId => {\r\n return collectionFilterGroup.values.some(fValue => {\r\n return (fValue.id === filterId) && fValue.displayText && fValue.displayText.toLowerCase().includes(_searchText)\r\n })\r\n })\r\n }\r\n\r\n if (!matchByName) {\r\n for(let filterGroupId in featureFilterValueIds) {\r\n let filterGroupIds = featureFilterValueIds[filterGroupId];\r\n for(let filterIndex in filterGroupIds) {\r\n let filterId = filterGroupIds[filterIndex];\r\n if(filterGroups[filterGroupId] && filterGroups[filterGroupId].values) {\r\n let filterGroup = filterGroups.find(fg => fg.id === filterGroupId);\r\n if (filterGroup && filterGroup.values) {\r\n let filter = filterGroup.values.find(fgv => fgv.id === filterId);\r\n if (filter) {\r\n isFilterName = (isFilterName || filter.displayText.toLowerCase().includes(_searchText) || filter.value.toLowerCase().includes(_searchText));\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n res = matchByName || isFilterName;\r\n }\r\n return res;\r\n })\r\n }\r\n\r\n /**\r\n * Returns the fabricator feature id\r\n * @returns {int}\r\n */\r\n id() {\r\n return this.dbFeature.id;\r\n }\r\n\r\n /**\r\n * Returns the fabricator feature id\r\n * @param featureId {number}\r\n * @param partsToo {boolean}\r\n * @returns {feature}\r\n */\r\n getFeatureById(featureId, partsToo = false) {\r\n const neededId = +featureId;\r\n if (!this.features && (!partsToo || !this.featuresParts)) {\r\n console.error(\"This featureGroup has no features array:\", this)\r\n return null\r\n }\r\n // if (partsToo) {\r\n // return this.features.find(f => f.dbFeature.id === neededId) || this.featuresParts.find(f => f.dbFeature.id === neededId)\r\n // }\r\n // return this.features.find(f => f.dbFeature.id === neededId)\r\n const allFeatures = partsToo ? [...this.features, ...this.featuresParts] : this.features;\r\n for (let i = 0; i < allFeatures.length; i++) {\r\n if (allFeatures[i].dbFeature.id === neededId) {\r\n return allFeatures[i];\r\n }\r\n }\r\n return null\r\n }\r\n\r\n getFeatureByPartName(partName, inParts = false) {\r\n if (!partName) {\r\n return null\r\n }\r\n partName = partName.split(\" \").join(\"\").toLowerCase(); // for example, \"Natural Stone Sofitel Gold\" & \"Natural Stone Sofitel Gold\" - different names\r\n const arrayToFind = inParts && this.featureParts ? this.featureParts.map(feature => { return {part: feature} }) : this.navigationSubItems();\r\n const matchingItem = arrayToFind.find(navFeature => {\r\n const feature = navFeature.part;\r\n if (!feature.partName || feature.notAvailableInVisualizer) {\r\n return false\r\n }\r\n if (!feature._partNameWithoutSpaces) {\r\n feature._partNameWithoutSpaces = feature.getMatchingFeatureName().split(\" \").join(\"\").toLowerCase();\r\n }\r\n return partName === feature._partNameWithoutSpaces\r\n });\r\n return matchingItem ? matchingItem.part : null\r\n }\r\n\r\n getDefaultFeature() {\r\n\r\n }\r\n\r\n /**\r\n * Returns the active feature id\r\n * @param placeholdersNeeded\r\n * @returns {int}\r\n */\r\n activeFeatureId(placeholdersNeeded = false) {\r\n return placeholdersNeeded && this.placeholderFeature && !this.placeholderChanged\r\n ? this.placeholderFeature.dbFeature.id\r\n : this.activeFeature.dbFeature.id\r\n }\r\n\r\n /**\r\n * @param feature {Part}\r\n * @returns {*}\r\n */\r\n featureDefinitionId(feature = null) {\r\n const dbFeature = feature ? feature.dbFeature : this.dbFeature;\r\n return dbFeature.featureDefinitionID;\r\n }\r\n\r\n handleClick() {}\r\n\r\n disabledClick() {}\r\n\r\n /**\r\n * Used for metaData conditions\r\n * @returns Array\r\n */\r\n getArrayOfConditions() {\r\n return []\r\n }\r\n\r\n updateLocalStorage() {\r\n const layout = this.layout || this.getParent().layout || this.getParent().getParent().layout;\r\n layout.updateLocalStorage();\r\n }\r\n\r\n /**\r\n * Used for complex parts, i.e. Vanity - Complex, Custom\r\n // * @param subType\r\n */\r\n handleSubTypeClick() {\r\n Exception.NotImplementedBaseClass();\r\n }\r\n\r\n /**\r\n * Handles the click on sub-part buttons, i.e. for Vanity on its buttons such as Toilet, Sink...\r\n // * @param subPart\r\n */\r\n handleSubPartClick() {\r\n // Exception.NotImplementedBaseClass();\r\n }\r\n\r\n /**\r\n * Returns first value Id from a specific group\r\n * @param groupId\r\n */\r\n filterValue(groupId) {\r\n return this.dbFeature.filterValueIDs[groupId][0];\r\n }\r\n\r\n /**\r\n * Do something specific after layer changes\r\n // * @param layoutType\r\n */\r\n changeLayout() {\r\n\r\n }\r\n\r\n /**\r\n * Do something specific after Type Changed (returns null by default for all Parts)\r\n */\r\n setDefaultPartAfterSubTypeClick() {\r\n return null\r\n }\r\n\r\n getRelatedItems() {\r\n return this.relatedItems\r\n }\r\n\r\n /**\r\n * Set default layer for each relatedItem of the group.\r\n * @param layout {Layout}\r\n */\r\n setDefault(layout) {\r\n this.relatedItems.forEach(relatedItem => relatedItem.setDefault(layout));\r\n }\r\n\r\n setFeatureGroupDefault(layout, setNotInVisFeature = this.hasNoVisualizerLayers) {\r\n const conditions = this.getArrayOfConditions ? this.getArrayOfConditions() : null;\r\n let filteredFeatures = conditions ? this.features.filter(feature => {\r\n return setNotInVisFeature\r\n ? feature.matchesMetaForArrayOfConditions(conditions)\r\n : feature.dbFeature.s3Bindings && feature.matchesMetaForArrayOfConditions(conditions)\r\n }) : this.features;\r\n\r\n if (document.kvConfig.visualizerType === \"bvLook\" && !filteredFeatures.length\r\n && (getCurrentRoomType(layout) === LOOK_ROOM_TYPES.as) && !(this.partId.includes(\"_wall\") && this.hasAdditionalParts)) {\r\n filteredFeatures = this.getArrayOfConditions\r\n ? this.featuresParts.filter(f => f.dbFeature.s3Bindings && f.matchesMetaForArrayOfConditions(conditions))\r\n : this.featuresParts;\r\n }\r\n\r\n const matchingFeatureExist = this.tryToSetTheSameFeature(filteredFeatures, null);\r\n if (!matchingFeatureExist) {\r\n this.activeFeature = filteredFeatures[0];\r\n }\r\n const features = this.features;\r\n if (IS_LIXIL_UI && !this.activeFeature && !this.activeNotInVisualizerFeature && Array.isArray(features)\r\n && features.length && features.every(feature => feature.notAvailableInVisualizer)) {\r\n this.activeNotInVisualizerFeature = features[0];\r\n }\r\n // this.placeholderFeature = this.features.find((feature) => {\r\n // return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"laceholder\");\r\n // });\r\n if (this.hasAdditionalParts) {\r\n this.activeFeatureParts = this.setActiveFeatureParts();\r\n }\r\n if (this.layerPositions) {\r\n if (this.activeFeature) {\r\n this.setLayerPositions()\r\n } else {\r\n Object.keys(this.layerPositions).forEach(key => {\r\n this.layerPositions[key] = null;\r\n })\r\n }\r\n }\r\n }\r\n\r\n tryToSetTheSameFeature(filteredFeatures = [], partName = \"\") {\r\n const currentActiveFeature = this.activeFeature;\r\n if (currentActiveFeature && currentActiveFeature.partName) {\r\n let splittedFromTheLayoutName = partName && this.removeLayoutFromPartName\r\n ? this.removeLayoutFromPartName(partName)\r\n : this.activeFeature.getMatchingFeatureName();\r\n this.activeFeature = filteredFeatures.find(feature => {\r\n return feature.getMatchingFeatureName() === splittedFromTheLayoutName\r\n });\r\n if (!this.activeFeature) {\r\n const filterGroups = store.getState().filterState.filterGroups;\r\n const colorFilterValue = getColorFilterValue(currentActiveFeature, filterGroups);\r\n if (colorFilterValue) {\r\n this.activeFeature = filteredFeatures.find(feature => {\r\n const currentColorFilterValue = getColorFilterValue(feature, filterGroups);\r\n return currentColorFilterValue && currentColorFilterValue.id === colorFilterValue.id\r\n });\r\n }\r\n }\r\n }\r\n if (!this.activeFeature && this.selectedFeaturesHistory) {\r\n for (let featureName of this.selectedFeaturesHistory.slice(0, 5)) { // check first five, no need to go further\r\n const foundFeature = this.getFeatureByPartName(featureName);\r\n if (foundFeature) {\r\n const prevFeatureMatchingName = foundFeature.getMatchingFeatureName();\r\n const foundFinally = filteredFeatures.find(feature => {\r\n return feature.getMatchingFeatureName() === prevFeatureMatchingName\r\n });\r\n if (foundFinally) {\r\n this.activeFeature = foundFinally;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n return !!this.activeFeature\r\n }\r\n\r\n getFeatureName = () => {\r\n const originalName = this.metaData.ActualDisplayedName\r\n ? this.dbFeature.customDisplayName && (this.dbFeature.customDisplayName !== this.dbFeature.sharedFeatureName)\r\n ? this.dbFeature.customDisplayName\r\n : this.metaData.ActualDisplayedName[0]\r\n : this.dbFeature.customDisplayName || this.partName || \"\";\r\n const checkedCatName = checkIfInCatProperty(this, \"inCatName\", originalName) || originalName || \"\";\r\n const parent = this.getParent();\r\n return checkedCatName.replace((this.dbFeature.customGroupName || parent.dbName || parent.partName) + \" - \", \"\");\r\n };\r\n\r\n getLowerCasedCustomDisplayName = () => {\r\n if (!this._lowercaseCustomDisplayName) {\r\n this._lowercaseCustomDisplayName = (this.dbFeature.customDisplayName || this.partName || '')\r\n .trim()\r\n .toLowerCase()\r\n .replace('room - ', '')\r\n }\r\n return this._lowercaseCustomDisplayName;\r\n };\r\n\r\n getLowerCasedSharedFeatureName = () => {\r\n if (!this._lowercaseSharedFeatureName) {\r\n this._lowercaseSharedFeatureName = (this.dbFeature.sharedFeatureName || this.partName || '')\r\n .trim()\r\n .toLowerCase()\r\n .replace('room - ', '')\r\n }\r\n return this._lowercaseSharedFeatureName;\r\n };\r\n\r\n /**\r\n * @param dbFeaturesArray {[dbFeatureInterface]}\r\n * @param pageSize {number}\r\n * @param setNextPage {boolean}\r\n * @param layoutAbbr {string}\r\n * @param loadedPage {number|null}\r\n * @param fromSearch {boolean}\r\n * @param setCustomConfigurationsAfter {boolean}\r\n */\r\n setGroupFeatures(dbFeaturesArray,\r\n pageSize = 1000,\r\n setNextPage = true,\r\n layoutAbbr = \"\",\r\n loadedPage = null,\r\n fromSearch = false,\r\n setCustomConfigurationsAfter = true) {\r\n\r\n const layout = this.layout || this.getParent().layout;\r\n const layoutToSet = layoutAbbr || layout.getCurrentLayoutAbbreviation();\r\n\r\n if (setNextPage) {\r\n // this.nextFeaturesPageToLoad += 1;\r\n let nextFeaturesPageToLoad = 1;\r\n const addFromPageSize = pageSize === 6000 ? 3 : 1;\r\n if (this.nextFeaturesPageToLoadArray) {\r\n nextFeaturesPageToLoad = Number.isInteger(loadedPage)\r\n ? this.nextFeaturesPageToLoadArray[layoutToSet].page + addFromPageSize\r\n : this.nextFeaturesPageToLoadArray[layoutToSet].page + 1\r\n } else {\r\n nextFeaturesPageToLoad = Number.isInteger(loadedPage)\r\n ? this.nextFeaturesPageToLoad + addFromPageSize\r\n : this.nextFeaturesPageToLoad + 1;\r\n }\r\n // let nextFeaturesPageToLoad = Number.isInteger(loadedPage)\r\n // ? this.nextFeaturesPageToLoad + (pageSize === 6000 ? 3 : 1)\r\n // : this.nextFeaturesPageToLoadArray ? this.nextFeaturesPageToLoadArray[layoutToSet].page + 1 : this.nextFeaturesPageToLoad + 1;\r\n // if ((pageSize / 1000 - 1) === 1) {\r\n // nextFeaturesPageToLoad += 1\r\n // }\r\n this.nextFeaturesPageToLoad = nextFeaturesPageToLoad;\r\n if (this.nextFeaturesPageToLoadArray) {\r\n this.nextFeaturesPageToLoadArray[layoutToSet].page = nextFeaturesPageToLoad;\r\n }\r\n this.allFeaturesReceived = true;\r\n }\r\n if (!fromSearch) {\r\n if (this.nextFeaturesPageToLoadArray) {\r\n this.nextFeaturesPageToLoadArray[layoutToSet].allReceived = dbFeaturesArray.length < pageSize;\r\n const {bvPresets} = store.getState().bathroomVisualizerState;\r\n if (bvPresets && bvPresets.length) {\r\n const uniqueLayoutsTypes = bvPresets.reduce((total, preset) => {\r\n if (!total.some(layoutType => layoutType === preset.layout_type)) {\r\n total.push(preset.layout_type)\r\n }\r\n return total\r\n }, []);\r\n this.realFeaturesReceived = uniqueLayoutsTypes.every(layoutNumber => {\r\n const layoutName = layout.getCurrentLayoutName(layoutNumber);\r\n return this.nextFeaturesPageToLoadArray[layoutName] && this.nextFeaturesPageToLoadArray[layoutName].allReceived\r\n });\r\n } else {\r\n this.realFeaturesReceived = dbFeaturesArray.length < pageSize;\r\n }\r\n } else {\r\n this.realFeaturesReceived = dbFeaturesArray.length < pageSize;\r\n }\r\n }\r\n\r\n layout.loadNewFeatures(dbFeaturesArray, this, setCustomConfigurationsAfter);\r\n\r\n }\r\n\r\n getRealFeaturesReceivedProperty = () => {\r\n const layout = this.layout || this.getParent().layout;\r\n const currentLayoutAbbr = layout.getCurrentLayoutAbbreviation();\r\n return this.nextFeaturesPageToLoadArray\r\n ? this.nextFeaturesPageToLoadArray[currentLayoutAbbr].allReceived\r\n : this.realFeaturesReceived\r\n }\r\n\r\n getNextPageToLoad = (currentLayoutAbbr) => {\r\n // intermediatePart\r\n if (this.nextFeaturesPageToLoadArray) {\r\n if (!currentLayoutAbbr) {\r\n const layout = this.layout || this.getParent().layout;\r\n currentLayoutAbbr = layout.getCurrentLayoutAbbreviation();\r\n }\r\n return this.nextFeaturesPageToLoadArray[currentLayoutAbbr].page\r\n }\r\n return this.nextFeaturesPageToLoad\r\n }\r\n\r\n getCollectionName = (filterGroups) => {\r\n if (this._collectionName) {\r\n return this._collectionName\r\n }\r\n const collectionFg = filterGroups ? filterGroups.find(fGroup => fGroup.name === \"Collection\") : null;\r\n if (collectionFg) {\r\n const featureCollectionValue = getFilterGroupValues(this, collectionFg);\r\n if (Array.isArray(featureCollectionValue)) {\r\n const featureCollectionValueObject = getFilterGroupValue(featureCollectionValue[0], collectionFg);\r\n if (featureCollectionValueObject) {\r\n this._collectionName = capitalizeFirstLetters(featureCollectionValueObject.displayText);\r\n return this._collectionName\r\n }\r\n }\r\n }\r\n return \"\"\r\n }\r\n\r\n getColorName = (filterGroups) => {\r\n if (this._colorName) {\r\n return this._colorName\r\n }\r\n const colorFilterGroup = filterGroups ? filterGroups.find(fGroup => fGroup.name === \"Color\") : null;\r\n\r\n if (colorFilterGroup) {\r\n const featureCollectionValue = getFilterGroupValues(this, colorFilterGroup);\r\n if (Array.isArray(featureCollectionValue)) {\r\n const featureCollectionValueObject = getFilterGroupValue(featureCollectionValue[0], colorFilterGroup);\r\n if (featureCollectionValueObject) {\r\n this._colorName = capitalizeFirstLetters(featureCollectionValueObject.displayText);\r\n return this._colorName\r\n }\r\n }\r\n }\r\n return \"\"\r\n }\r\n\r\n getCustomFullDisplayName = () => {\r\n return this.getSplittedFeatureName() // is different in bvLook visualizer\r\n }\r\n\r\n getMatchingOptionsName = () => {\r\n return this.getSplittedFeatureName() // is different in bvLook visualizer\r\n }\r\n\r\n /**\r\n * Update visibility for all layers.\r\n * Each feature decides on its own what layers are needed.\r\n * In case when feature must be invisible it must return null, not an empty array\r\n * @param layout {Layout}\r\n * @param placeholdersNeeded {boolean}\r\n */\r\n setLayers(layout, placeholdersNeeded) {\r\n let layers = [];\r\n this.getRelatedItems()\r\n .filter(relItem => relItem.featureGroupEnabled)\r\n .forEach(relatedItem => {\r\n relatedItem.setLayers(layout);\r\n let activeFeatures = [];\r\n if (relatedItem.layerPositions) {\r\n Object.keys(relatedItem.layerPositions).forEach(key => {\r\n if (relatedItem.layerPositions[key]) {\r\n activeFeatures.push(relatedItem.layerPositions[key])\r\n }\r\n })\r\n } else {\r\n if (placeholdersNeeded && !relatedItem.placeholderChanged && relatedItem.placeholderFeature) {\r\n activeFeatures.push(relatedItem.placeholderFeature)\r\n } else if (relatedItem.activeFeature && relatedItem.partId !== \"attachment\") {\r\n activeFeatures.push(relatedItem.activeFeature)\r\n }\r\n }\r\n if (relatedItem.activeFeatureParts && relatedItem.activeFeatureParts.length) {\r\n activeFeatures = [...activeFeatures, ...relatedItem.activeFeatureParts]\r\n }\r\n activeFeatures.forEach((activeFeaturePart) => {\r\n if (activeFeaturePart && activeFeaturePart.layer.src) {\r\n // cabinetActiveFeature.layer.partId = cabinetActiveFeature.partId;\r\n activeFeaturePart.layer.coords = activeFeaturePart.metaData[\"Coords\"];\r\n activeFeaturePart.layer.partId = activeFeaturePart.partId;\r\n activeFeaturePart.layer.layerPosition = activeFeaturePart.metaData.layerPosition;\r\n activeFeaturePart.layer.cropCoords = getFeatureCropCoors(activeFeaturePart);\r\n layers.push(activeFeaturePart.layer);\r\n }\r\n });\r\n });\r\n return layers.length ? layers : null;\r\n }\r\n\r\n // setPrevioslySelected(featureGroup) { // featureGroup is current active featureGroup from the click\r\n setPrevioslySelected() { // parent scope\r\n this.relatedItems.forEach(relatedItem => {\r\n relatedItem.activeFeatureBeforeAllWalls = !relatedItem.placeholderChanged\r\n ? \"placeholder\"\r\n : relatedItem.activeFeature;\r\n });\r\n }\r\n\r\n getFeaturesFromLayout = (layoutName, forSpecificScene, allFeatures) => {\r\n let currentLayoutFeatures = this.layerPositions\r\n ? [...(this.featuresList[layoutName] || []), ...(this.featuresPartsList[layoutName] || [])]\r\n : (this.featuresList[layoutName] || []);\r\n for (let i = 0; i < currentLayoutFeatures.length; i++) {\r\n const feature = currentLayoutFeatures[i];\r\n if (forSpecificScene && feature.metaData[\"RoomScene\"] && !feature.metaData[\"RoomScene\"].includes(forSpecificScene)) {\r\n continue\r\n }\r\n const featureName = feature.getSplittedFeatureName();\r\n if (!allFeatures.some(addedFeature => addedFeature.getSplittedFeatureName() === featureName)) {\r\n allFeatures.push(feature);\r\n }\r\n }\r\n return allFeatures\r\n }\r\n\r\n getFeaturesForNavigationFrom = (restOptions = {}) => {\r\n const {returnAllFeatures, forSpecificLayout, forSpecificScene} = restOptions;\r\n if (returnAllFeatures) {\r\n const layout = this.getParent().layout;\r\n let allFeatures = [];\r\n // 1) first add current layout features or specific layout features\r\n allFeatures = this.getFeaturesFromLayout(forSpecificLayout || (\"Layout\" + layout.type), forSpecificScene, allFeatures)\r\n if (forSpecificLayout) {\r\n return allFeatures\r\n }\r\n // 2) if we need all features - check another layouts\r\n const {bvPresets} = store.getState().bathroomVisualizerState;\r\n // const checkLayouts = layoutNames.filter(layoutName => {\r\n // if (forSpecificLayout) {\r\n // return forSpecificLayout === layoutName\r\n // }\r\n // return bvPresets.some(bvPreset => bvPreset.layout_type === +(layoutName.replace(\"Layout\", \"\")))\r\n // })\r\n\r\n // 2) next popular rooms are 11 for AS and 3 for grohe, check them\r\n if (layout.type !== 11 && (document.kvConfig.visualizerType === \"bvLook\")) {\r\n allFeatures = this.getFeaturesFromLayout(\"Layout11\", \"1\", allFeatures);\r\n }\r\n // if (layout.type !== 3) {\r\n // allFeatures = this.getFeaturesFromLayout(\"Layout3\", \"1\", allFeatures);\r\n // }\r\n // 3) select all features from scene 1\r\n bvPresets.forEach(bvPreset => {\r\n if (bvPreset.layout_type === layout.type) {\r\n return;\r\n }\r\n const stringifiedLayout = \"Layout\" + bvPreset.layout_type;\r\n allFeatures = this.getFeaturesFromLayout(stringifiedLayout, \"1\", allFeatures);\r\n });\r\n // 4) check skipped layouts to get all other features another room scenes features\r\n const layoutNames = Object.keys(layout.layoutNames).filter(key => key !== \"All\");\r\n layoutNames.forEach((layoutType) => {\r\n allFeatures = this.getFeaturesFromLayout(layoutType, null, allFeatures);\r\n });\r\n // console.log(\"allFeatures\", allFeatures);\r\n return allFeatures\r\n }\r\n return this.layerPositions ? [...this.features, ...this.featuresParts] : this.features\r\n }\r\n\r\n checkAutoAddToCart = (feature) => {\r\n //intermediatePart\r\n if (!feature.dbFeature.autoAddToCart) {\r\n return;\r\n }\r\n const parentGroup = this.getParent ? this.getParent() : null;// parent, for ex. \"Appliance\"\r\n if (parentGroup && parentGroup.layout && parentGroup.layout.isFakeLayout) {\r\n return;\r\n }\r\n const cartItem = {\r\n selectionGroup: (parentGroup && parentGroup.menuType) ? parentGroup.partName : this.partName,\r\n quantity: 1,\r\n partId: this.partId,\r\n cartFeature: feature\r\n };\r\n if (feature.dbFeature.displayLogic) {\r\n const storeState = store.getState();\r\n const {quantity, isMatching} = featureIsMatchingDisplayLogic(\r\n feature,\r\n storeState.cartState.cartItems,\r\n storeState.quotesState.activeQuoteIndex,\r\n storeState.wizardState.allWizardsValues\r\n );\r\n if (isMatching && (!storeState.cartState.cartItems.some(cItem => {\r\n return cItem.cartFeature && cItem.cartFeature.dbFeature && (cItem.cartFeature.dbFeature.id === feature.dbFeature.id)\r\n }))) {\r\n cartItem.quantity = quantity;\r\n store.dispatch(addToCart([cartItem]));\r\n }\r\n store.dispatch(addDisplayLogicCartItem(cartItem, this.getParent().layout.visualizerType));\r\n } else {\r\n store.dispatch(addToCart([cartItem]));\r\n }\r\n }\r\n\r\n loadFeatureCommon = (feature) => { // other logic\r\n this.checkAutoAddToCart(feature);\r\n if (feature.dbFeature.groupName === \"Room\") {\r\n feature = setRoomNotInVisualizerProperty(feature);\r\n }\r\n if (IS_LIXIL_UI && !feature.dbFeature.clickable) {\r\n const layout = this.getParent().layout;\r\n if (layout && layout.disabledClickablePartIds && !layout.disabledClickablePartIds.includes(this.partId)) {\r\n layout.disabledClickablePartIds.push(this.partId);\r\n }\r\n }\r\n // const layout = this.getParent().layout;\r\n // if (feature.dbFeature.isRelatedDbFeature) {\r\n // if (!Array.isArray(layout.allRelatedDbFeatures)) {\r\n // layout.allRelatedDbFeatures = [];\r\n // }\r\n // if (!layout.allRelatedDbFeatures.some(addedDbFeature => addedDbFeature.id === feature.dbFeature.id)) {\r\n // layout.allRelatedDbFeatures.push(feature.dbFeature);\r\n // }\r\n // }\r\n // loadRelatedFeatures(feature.dbFeature, layout);\r\n };\r\n\r\n _setLayers(layout) {\r\n //intermediatePart\r\n if (!this.disabled) {\r\n if (!this.activeFeature) {\r\n this.setDefault(layout);\r\n }\r\n if (this.layerPositions) {\r\n Object.keys(this.layerPositions).forEach(key => {\r\n if (this.layerPositions[key]) {\r\n if (this.layerPositions[key].matchesMetaForArrayOfConditions(this.getArrayOfConditions())) {\r\n this.setFeatureLayer(this.layerPositions[key], layout);\r\n } else {\r\n this.layerPositions[key].layer.src = '';\r\n }\r\n }\r\n })\r\n } else if (this.activeFeature && !this.activeFeature.notAvailableInVisualizer) {\r\n if (this.partId !== \"attachment\") { // remove activeFeature layer to prevent duplicate, it has parts\r\n this.setFeatureLayer(this.activeFeature, layout);\r\n }\r\n if (this.hasAdditionalParts && (document.kvConfig.visualizerType === \"kvScene\")) {\r\n this.activeFeatureParts = this.setActiveFeatureParts(); // we have to set them each time because we need to react on disabled clicks (bottom cabinet - appliances)\r\n }\r\n if (Array.isArray(this.activeFeatureParts) && this.activeFeatureParts.length) {\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n this.setFeatureLayer(activeFeaturePart, layout);\r\n })\r\n }\r\n }\r\n if (this.placeholderFeature) {\r\n this.setFeatureLayer(this.placeholderFeature, layout);\r\n }\r\n } else {\r\n this.hideLayers();\r\n }\r\n }\r\n\r\n setFeatureLayer(currentFeature, layout) {\r\n //intermediatePart\r\n // console.log('currentFeature', currentFeature);\r\n const layoutAbr = layout.getCurrentLayoutAbbreviation();\r\n if (!currentFeature || !currentFeature.dbFeature || !currentFeature.dbFeature.s3Bindings\r\n || (!(currentFeature.dbFeature.metaData[\"RoomLayout\"]) || !currentFeature.dbFeature.metaData[\"RoomLayout\"].includes(layoutAbr))) {\r\n if (currentFeature) {\r\n currentFeature.layer.src = \"\";\r\n }\r\n return;\r\n }\r\n const s3Binding = currentFeature.dbFeature.s3Bindings.find(binding => binding.visualizer === layout.layersBinding);\r\n currentFeature.layer.src = s3Binding ? s3Binding.path : null;\r\n currentFeature.layer.bucketName = s3Binding ? s3Binding.bucketName : null;\r\n }\r\n\r\n featureClicked() {\r\n const featuresHistory = this.activeFeature ? this.selectedFeaturesHistory : this.getParent().selectedFeaturesHistory;\r\n const partName = this.activeFeature ? this.activeFeature.partName : this.partName;\r\n if (Array.isArray(featuresHistory) && (featuresHistory[0] !== partName)) {\r\n featuresHistory.unshift(partName); // add in the beggining\r\n if (featuresHistory.length > 10) {\r\n featuresHistory.pop() // remove last element, no need to keep huge arrays\r\n }\r\n }\r\n this.updateLocalStorage();\r\n // other specific events, for ex. Google Analytics, etc.\r\n }\r\n\r\n\r\n // navigationSubItems(filters, searchText, forFeature, filterGroups, restOptions) { // to do\r\n navigationItemsWithOptions(filters, forFeature, filterGroups, featuresToDisplay) {\r\n // intermediate part\r\n let newFeatures = [];\r\n let navItems = [];\r\n const matchingFeatureProperty = this.useMatchingFeatureReplacement || \"MatchingFeature\";\r\n\r\n if (filterGroups && filterGroups.length && (!filters || !Object.keys(filters).length)) {\r\n // console.log(\"filteredAvailableFeatures\", filteredAvailableFeatures);\r\n // console.log(\"featuresToDisplay\", featuresToDisplay);\r\n for (let i = 0; i < featuresToDisplay.length; i++) { // 1) take all others\r\n const currentFeature = featuresToDisplay[i];\r\n const colorName = currentFeature.getColorName(filterGroups);\r\n const matchingOptionsName = currentFeature.getMatchingOptionsName();\r\n let conditionPassed = !colorName\r\n || !newFeatures.some(feature => feature.getMatchingOptionsName() === matchingOptionsName)\r\n || (currentFeature.metaData[matchingFeatureProperty] && !newFeatures.some(feature => feature.metaData[matchingFeatureProperty]\r\n && isEqual(feature.metaData[matchingFeatureProperty], currentFeature.metaData[matchingFeatureProperty])))\r\n if (conditionPassed) {\r\n newFeatures.push(currentFeature);\r\n }\r\n }\r\n navItems = this.returnUniqueNavFeatures(this.getNavItemsWithOptions(forFeature, newFeatures, featuresToDisplay, filterGroups).map(featureObject => {\r\n return new DesignNavigationItem(featureObject.mainFeature.featureName, featureObject.mainFeature, featureObject.otherOptions)\r\n }), false);\r\n }\r\n if (!navItems.length) {\r\n navItems = this.returnUniqueNavFeatures(featuresToDisplay)\r\n }\r\n // if (this.filterNavigationItems && forFeature) {\r\n // navItems = this.filterNavigationItems(navItems, forFeature)\r\n // }\r\n return navItems\r\n }\r\n\r\n /**\r\n * this is almost the same as feature options, it is replacing next nav items with the needed color feature\r\n * @param forFeature {featureInterface} featureInterface\r\n * @param newFeatures {[featureInterface]}\r\n * @param allFeatures {[featureInterface]}\r\n * @param filterGroups {[filterGroupInterface]}\r\n * @returns {array}\r\n */\r\n getNavItemsWithOptions = (forFeature= null,\r\n newFeatures = [],\r\n allFeatures = [],\r\n filterGroups) => {\r\n\r\n const matchingFeatureProperty = this.useMatchingFeatureReplacement || \"MatchingFeature\";\r\n const neededColorName = forFeature ? forFeature.getColorName(filterGroups) : \"\";\r\n\r\n return newFeatures.map(currentFeature => {\r\n const filterValue = getColorFilterValue(currentFeature, filterGroups);\r\n let otherOptions = getOptionsFromNavItemsForFeature(currentFeature, allFeatures, filterGroups);\r\n\r\n const currentFeatureColor = currentFeature.getColorName(filterGroups);\r\n const customFullDisplayName = currentFeature.getMatchingOptionsName();\r\n\r\n if (forFeature && (currentFeature.dbFeature.id === forFeature.dbFeature.id || (\r\n (customFullDisplayName === forFeature.getMatchingOptionsName())\r\n && (!forFeature.metaData[matchingFeatureProperty] || isEqual(forFeature.metaData[matchingFeatureProperty], currentFeature.metaData[matchingFeatureProperty]))\r\n && (currentFeatureColor && forFeature.getColorName(filterGroups) && (currentFeatureColor !== forFeature.getColorName(filterGroups)))\r\n ))) {\r\n if (filterValue && !otherOptions.some(option => option.colorValue.id === filterValue.id)) {\r\n otherOptions.push({feature: currentFeature, colorValue: filterValue})\r\n }\r\n return {\r\n mainFeature: forFeature,\r\n otherOptions: otherOptions.filter(option => option.feature.dbFeature.id !== forFeature.dbFeature.id)\r\n };\r\n } else {\r\n if (!filterValue) {\r\n return {mainFeature: currentFeature, otherOptions: []}\r\n }\r\n const allOptions = [{feature: currentFeature, colorValue: filterValue}, ...otherOptions];\r\n const mainOption = (forFeature && neededColorName && allOptions.find(option => option.feature.getColorName(filterGroups) === neededColorName))\r\n // console.log(\"mainOption\", mainOption);\r\n if (mainOption) {\r\n return {\r\n mainFeature: mainOption.feature,\r\n otherOptions: allOptions.filter(option => option.feature.dbFeature.id !== mainOption.feature.dbFeature.id)\r\n }\r\n }\r\n return {mainFeature: currentFeature, otherOptions}\r\n }\r\n });\r\n }\r\n\r\n returnUniqueNavFeatures(featuresToDisplay, createNavItems = true) {\r\n const navItems = createNavItems ? this.returnNavItemsFromFeatures(featuresToDisplay) : featuresToDisplay;\r\n if (document.kvConfig.visualizerType === \"bvScene\" && (this.partId ===\"sink\" || this.partId ===\"center_island_sink\"\r\n || this.partId ===\"vanity_sink\" || this.partId ===\"vanity_faucet\")) {\r\n return uniqBy(navItems, (navItem) => navItem.part.dbFeature.id && navItem.part.getSplittedFeatureName());\r\n }\r\n if (document.kvConfig.toolVersion >= 5) { // not sure if we can do that for old visualizers\r\n return uniqBy(navItems, (navItem) => navItem.part.dbFeature.id && navItem.part.dbFeature.sharedFeatureName);\r\n }\r\n return uniqBy(navItems, (navItem) => navItem.part.dbFeature.id);\r\n }\r\n\r\n returnNavItemsFromFeatures(featuresToDisplay) {\r\n return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n}\r\n\r\nPartCommon.prototype.getFeatureCurrency = function (propsFilterGroups) {\r\n if (Object.hasOwnProperty(this._useCurrency)) {\r\n return this._useCurrency\r\n }\r\n this._useCurrency = null;\r\n const filterGroups = propsFilterGroups || store.getState().filterState.filterGroups;\r\n const filterGroup = filterGroups.find(group => group.name === \"Currency\");\r\n if (!filterGroup) {\r\n return this._useCurrency\r\n }\r\n const featureCollectionValue = getFilterGroupValues(this, filterGroup);\r\n if (Array.isArray(featureCollectionValue)) {\r\n const featureCollectionValueObject = getFilterGroupValue(featureCollectionValue[0], filterGroup);\r\n if (featureCollectionValueObject) {\r\n this._useCurrency = featureCollectionValueObject.value\r\n }\r\n }\r\n return this._useCurrency\r\n}\r\n\r\nPartCommon.prototype.getFeatureRelatedFeatures = function () {\r\n if (!this._relatedFeaturesSet) {\r\n // console.log(\"loadRelatedFeatures\", this.dbFeature);\r\n loadRelatedFeatures(this.dbFeature, this.getParent().getParent().layout);\r\n this._relatedFeaturesSet = true;\r\n }\r\n return this.dbFeature.relatedFeatures\r\n}\r\n","import {Component} from 'react';\r\nimport invert from \"lodash/invert\";\r\n\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\nimport {getBvGroupFeatures, getBvGroupFilterValues} from \"../../../api/server-api\";\r\nimport {loaderDisable, loaderEnable} from \"../../ui/loaderView\";\r\nimport {IS_OFFLINE_MODE, USE_SERVER_CACHING} from \"../../../config\";\r\nimport {\r\n COUNTERTOP_GROUP,\r\n LayoutAbbreviations,\r\n LayoutType as LayoutTypes\r\n} from \"../../kvComponent/core/constants\";\r\nimport {setActivePartFilterValues} from \"../../../misc/filtersFunctions\";\r\nimport {checkIfLookFeaturesReceived, getAdditionalFeaturesOnScroll, getFeaturesPageSize} from \"../../../api/look-api\";\r\nimport store from \"../../../store\";\r\nimport {updateCanvasCount} from \"../../../actions/actionFunctions\";\r\n\r\nexport default class NavigationRequests extends Component {\r\n\r\n getBvPartFeatures = async (item, navigationItem, callBack = null) => {\r\n if (!item.part.createdManually && !item.part.requestInProgress) {\r\n const itemPart = item.part;\r\n const layout = itemPart && itemPart.getParent\r\n ? itemPart.getParent().layout || getCurrentLayout()\r\n : getCurrentLayout();\r\n let responseArray;\r\n if (layout.isNewLayout) {\r\n responseArray = await getAdditionalFeaturesOnScroll(itemPart, false);\r\n } else {\r\n const pageSize = getFeaturesPageSize(itemPart);\r\n const layoutAbbr = layout.getCurrentLayoutAbbreviation();\r\n const nextFeaturesPage = itemPart.getNextPageToLoad(layoutAbbr);\r\n itemPart.requestInProgress = true;\r\n const response = await getBvGroupFeatures(itemPart.dbName || itemPart.partName, nextFeaturesPage, pageSize);\r\n\r\n responseArray = Array.isArray(response) ? response : [];\r\n\r\n itemPart.requestInProgress = false;\r\n // if (location.port === '9007' || document.kvConfig.kioskMode) {\r\n // console.log('response', response.data);\r\n // }\r\n itemPart.setGroupFeatures(responseArray, pageSize, true, layoutAbbr, nextFeaturesPage);\r\n }\r\n if (navigationItem) {\r\n this.setState({\r\n [navigationItem]: item,\r\n render: false,\r\n showFilterSelection: true\r\n }, () => {\r\n this.setState({\r\n render: true,\r\n });\r\n this.forceUpdate()\r\n });\r\n }\r\n if (callBack) {\r\n callBack()\r\n }\r\n if (this._isMounted) {\r\n this.forceUpdate()\r\n }\r\n\r\n return responseArray\r\n }\r\n };\r\n\r\n getRelatedItemFeatures = (relatedItem) => {\r\n return this.getBvPartFeatures({\r\n part: relatedItem,\r\n text: relatedItem.partName\r\n }, \"\");\r\n };\r\n\r\n checkIfAllFeaturesReceived = (item, navigationItem, callBack, materialsPage) => {\r\n if (IS_OFFLINE_MODE) {\r\n return false\r\n }\r\n const itemPart = item.part;\r\n const layout = itemPart && itemPart.getParent\r\n ? itemPart.getParent().layout || getCurrentLayout()\r\n : getCurrentLayout();\r\n const layoutAbbr = layout.getCurrentLayoutAbbreviation();\r\n if (!(layout.isNewLayout && (itemPart && (itemPart.partId === \"range\" || itemPart.partId === \"stove\")))\r\n && (!itemPart.allFeaturesReceived || (itemPart.nextFeaturesPageToLoadArray && !itemPart.nextFeaturesPageToLoadArray[layoutAbbr].page))) {\r\n this.getBvPartFeatures(item, navigationItem, callBack);\r\n }\r\n if (layout.isNewLayout) {\r\n checkIfLookFeaturesReceived(itemPart, true).then(() => {\r\n if (materialsPage) {\r\n if (this._isMounted) {\r\n this.forceUpdate()\r\n }\r\n } else {\r\n callBack ? callBack() : this.forceUpdate();\r\n }\r\n }); // it has all needed feature groups already there\r\n }\r\n const showerParent = layout.parts[\"Shower\"];\r\n const wallParent = layout.parts[\"Walls\"];\r\n const showerComboParent = layout.parts[\"Shower Tub Combo\"];\r\n const cabinetParent = layout.parts[\"Cabinet\"];\r\n const centerIslandParent = layout.parts[\"CenterIsland\"];\r\n const countertopParent = layout.parts[\"Countertop\"];\r\n const applianceParent = layout.parts[\"Appliances\"];\r\n\r\n if (this.isWallItem(itemPart)) {\r\n wallParent.relatedItems.forEach(relatedItem => {\r\n if (relatedItem.partId !== itemPart.partId && !relatedItem.allFeaturesReceived) {\r\n this.getRelatedItemFeatures(relatedItem);\r\n }\r\n });\r\n } else if (itemPart.partId === \"vanity_cabinet\") {\r\n const vanityParent = itemPart.getParent();\r\n vanityParent.relatedItems.forEach(relatedItem => {\r\n if (relatedItem.partId !== itemPart.partId && !relatedItem.allFeaturesReceived) {\r\n this.getRelatedItemFeatures(relatedItem);\r\n }\r\n });\r\n if (!layout.isNewLayout) {\r\n const navItem = {\r\n part: showerParent.showerBody,\r\n text: showerParent.showerBody.partName\r\n };\r\n this.checkIfAllFeaturesReceived(navItem, \"\");\r\n if (wallParent.vanityAccent && !wallParent.vanityAccent.allFeaturesReceived) {\r\n this.getRelatedItemFeatures(wallParent.vanityAccent);\r\n }\r\n }\r\n } else if (itemPart.partId === \"shower_door\") {\r\n if (showerParent && showerParent.showerDoorHandle && !showerParent.showerDoorHandle.allFeaturesReceived) {\r\n this.getRelatedItemFeatures(showerParent.showerDoorHandle);\r\n }\r\n } else if (itemPart.partId === \"top_cabinet\") { /*** KITCHEN TOP CABINETS REQUIRE CROWN_MOLDING AND HOOD AND HANDLES AND CABINETS***/\r\n if (cabinetParent && cabinetParent.crownMolding && !cabinetParent.crownMolding.allFeaturesReceived) {\r\n this.getRelatedItemFeatures(cabinetParent.crownMolding);\r\n }\r\n if (cabinetParent && cabinetParent.topHandle && !cabinetParent.topHandle.allFeaturesReceived) {\r\n this.getRelatedItemFeatures(cabinetParent.topHandle);\r\n }\r\n if (cabinetParent && cabinetParent.bottomCabinet && !cabinetParent.bottomCabinet.allFeaturesReceived) {\r\n this.getRelatedItemFeatures(cabinetParent.bottomCabinet);\r\n }\r\n if (centerIslandParent && centerIslandParent.cabinet && !centerIslandParent.cabinet.allFeaturesReceived) {\r\n this.getRelatedItemFeatures(centerIslandParent.cabinet);\r\n }\r\n if (applianceParent && applianceParent.hood && !applianceParent.hood.allFeaturesReceived) {\r\n this.getRelatedItemFeatures(applianceParent.hood);\r\n }\r\n } else if (itemPart.partId === \"bottom_cabinet\") { /*** KITCHEN BOTTOM CABINETS REQUIRE TOP CABINETS & CENTER ISLAND ***/\r\n if (cabinetParent && cabinetParent.topCabinet && !cabinetParent.topCabinet.allFeaturesReceived) {\r\n this.getRelatedItemFeatures(cabinetParent.topCabinet);\r\n }\r\n if (centerIslandParent && centerIslandParent.cabinet && !centerIslandParent.cabinet.allFeaturesReceived) {\r\n this.getRelatedItemFeatures(centerIslandParent.cabinet);\r\n }\r\n if (cabinetParent && cabinetParent.bottomHandle && !cabinetParent.bottomHandle.allFeaturesReceived) {\r\n this.getRelatedItemFeatures(cabinetParent.bottomHandle);\r\n }\r\n } else if (itemPart.partId === \"center_island_cabinet\") { /*** KITCHEN CENTER ISLAND CABINETS REQUIRE TOP CABINETS & BOTTOM CABINETS***/\r\n if (cabinetParent && cabinetParent.topCabinet && !cabinetParent.topCabinet.allFeaturesReceived) {\r\n this.getRelatedItemFeatures(cabinetParent.topCabinet);\r\n }\r\n if (cabinetParent && cabinetParent.bottomCabinet && !cabinetParent.bottomCabinet.allFeaturesReceived) {\r\n this.getRelatedItemFeatures(cabinetParent.bottomCabinet);\r\n }\r\n } else if (itemPart.partId === \"countertop\") {\r\n if (centerIslandParent && centerIslandParent.countertop && !centerIslandParent.countertop.allFeaturesReceived) {\r\n this.getRelatedItemFeatures(centerIslandParent.countertop);\r\n }\r\n if (wallParent && wallParent.backsplash && !wallParent.backsplash.allFeaturesReceived) {\r\n this.getRelatedItemFeatures(wallParent.backsplash);\r\n }\r\n } else if (itemPart.partId === \"center_island_countertop\") {\r\n if (countertopParent && countertopParent.countertop && (!countertopParent.countertop.allFeaturesReceived\r\n || !(centerIslandParent.countertop && !centerIslandParent.countertop.allFeaturesReceived))) {\r\n this.getRelatedItemFeatures(countertopParent.countertop);\r\n }\r\n if (wallParent && wallParent.backsplash && !wallParent.backsplash.allFeaturesReceived) {\r\n this.getRelatedItemFeatures(wallParent.backsplash);\r\n }\r\n } else if (itemPart.partId === \"backsplash\") {\r\n if (countertopParent && countertopParent.countertop && !countertopParent.countertop.allFeaturesReceived) {\r\n this.getRelatedItemFeatures(countertopParent.countertop);\r\n }\r\n if (centerIslandParent && centerIslandParent.countertop && !centerIslandParent.countertop.allFeaturesReceived) {\r\n this.getRelatedItemFeatures(centerIslandParent.countertop);\r\n }\r\n } else if (itemPart.partId === \"edge_profile\") {\r\n if (countertopParent && countertopParent.countertop && !countertopParent.countertop.allFeaturesReceived) {\r\n this.getRelatedItemFeatures(countertopParent.countertop);\r\n }\r\n } else if (itemPart.partId === \"center_island_edge\") {\r\n if (centerIslandParent && centerIslandParent.countertop && !centerIslandParent.countertop.allFeaturesReceived) {\r\n this.getRelatedItemFeatures(centerIslandParent.countertop);\r\n }\r\n } else if (itemPart.partId === \"microwave\" || itemPart.partId === \"hood\") { /*** KITCHEN APPLIANCE REQUIRE TOP CABINETS ***/\r\n if (cabinetParent && cabinetParent.topCabinet && !cabinetParent.topCabinet.allFeaturesReceived) {\r\n this.getRelatedItemFeatures(cabinetParent.topCabinet);\r\n }\r\n } else if (itemPart.createdManually) { // shower_body || wall_configuration\r\n const neededParts = [\"pony_wall\", \"left_shower_wall\", \"right_shower_wall\"];\r\n if (callBack) {\r\n neededParts.push(\"wall_c\");\r\n }\r\n const getData = async () => {\r\n return await Promise.all([...showerParent.relatedItems.map(async relatedItem => {\r\n if (relatedItem.partId !== itemPart.partId && !relatedItem.allFeaturesReceived) {\r\n return await this.getRelatedItemFeatures(relatedItem)\r\n }\r\n }), ...wallParent.relatedItems.map(async relatedItem => {\r\n if (neededParts.includes(relatedItem.partId) && !relatedItem.allFeaturesReceived) {\r\n return await this.getRelatedItemFeatures(relatedItem);\r\n }\r\n })])\r\n };\r\n getData() // after we receive all shower related items we can switch shower body\r\n .then(() => {\r\n showerParent.showerBody.allFeaturesReceived = true;\r\n showerComboParent.wallConfiguration.allFeaturesReceived = true;\r\n if (materialsPage) {\r\n if (this._isMounted) {\r\n this.forceUpdate()\r\n }\r\n } else {\r\n callBack ? callBack() : this.forceUpdate();\r\n }\r\n });\r\n }\r\n };\r\n\r\n checkIfAllFiltersReceived = (activeSubPart, allFilterGroups) => {\r\n return getBvGroupFilterValues(activeSubPart.dbName || activeSubPart.partName)\r\n .then((response) => {\r\n setActivePartFilterValues(response.data, activeSubPart, allFilterGroups);\r\n return true\r\n });\r\n };\r\n\r\n isWallItem = (itemPart) => {\r\n let wallsPartIds = [];\r\n switch(document.kvConfig.visualizerType) {\r\n case \"Bathroom\":\r\n case \"BV\":\r\n wallsPartIds = [\"wall_a\", \"wall_b\", \"wall_c\", \"right_shower_wall\", \"left_shower_wall\",\"pony_wall\"];\r\n break;\r\n case \"Kitchen\":\r\n wallsPartIds = [\"left_wall\", \"right_wall\", \"popout_wall\"];\r\n break;\r\n case \"kvScene\":\r\n wallsPartIds = [\"left_wall\", \"right_wall\", \"center_wall\", \"front_wall\", \"popout_wall\"];\r\n break;\r\n case \"bvScene\":\r\n case \"bvLook\":\r\n wallsPartIds = [\"left_wall\", \"right_wall\", \"center_wall\", \"shower_interior_wall\"];\r\n break;\r\n default:\r\n wallsPartIds = [\"left_wall\", \"right_wall\", \"center_wall\"];\r\n }\r\n return wallsPartIds.includes(itemPart.partId);\r\n };\r\n\r\n static searchFeaturesByName = (relatedItem, searchName, pageSize = 9999) => {\r\n if (Array.isArray(relatedItem.alreadyRequestedFeatureNames)\r\n && relatedItem.alreadyRequestedFeatureNames.includes(searchName)) {\r\n return Promise.resolve()\r\n }\r\n const dbName = relatedItem.dbName || relatedItem.partName;\r\n return getBvGroupFeatures(dbName, 0, pageSize, [], searchName)\r\n .then(response => {\r\n if (response && response.length) {\r\n relatedItem.setGroupFeatures(response, 0, false);\r\n if (!relatedItem.alreadyRequestedFeatureNames) {\r\n relatedItem.alreadyRequestedFeatureNames = [];\r\n }\r\n if (searchName) {\r\n relatedItem.alreadyRequestedFeatureNames.push(searchName);\r\n }\r\n }\r\n return response\r\n })\r\n };\r\n\r\n changeLayout = (layoutType, firstChange = false) => {\r\n if (!firstChange) {\r\n loaderEnable();\r\n }\r\n window.requestInProcess = true;\r\n const layout = getCurrentLayout();\r\n switch (document.kvConfig.visualizerType) {\r\n case \"Kitchen\":\r\n case \"KV\": {\r\n const cabinetParent = layout.parts[\"Cabinet\"];\r\n const applianceParent = layout.parts[\"Appliances\"];\r\n const wallsParent = layout.parts[\"Walls\"];\r\n const countertopParent = layout.parts[\"Countertop\"];\r\n const neededParts = [\"left_wall\", \"fridge\", \"top_cabinet\", \"top_handle\", \"bottom_cabinet\", \"bottom_handle\",\r\n \"popout_wall\", \"backsplash\", \"countertop\"];\r\n let relatedArray = [];\r\n [cabinetParent, applianceParent, wallsParent, countertopParent].forEach(parent => {\r\n if (parent) {\r\n relatedArray = [...relatedArray, ...parent.relatedItems]\r\n }\r\n });\r\n relatedArray = relatedArray.filter((relatedItem) => {\r\n return neededParts.includes(relatedItem.partId) && !relatedItem.allFeaturesReceived\r\n });\r\n const countertopPageChanges = this.getSubPartLayoutPageChanges(countertopParent, \"countertop\", layoutType);\r\n const backsplashPageChanges = this.getSubPartLayoutPageChanges(wallsParent, \"backsplash\", layoutType);\r\n if (relatedArray.length\r\n || countertopPageChanges.requestNeeded\r\n || countertopPageChanges.requestNameNeeded\r\n || backsplashPageChanges.requestNeeded\r\n || backsplashPageChanges.requestNameNeeded\r\n ) {\r\n return this.getNeeededKvPartsOnLayoutChange(layoutType, relatedArray, [countertopPageChanges, backsplashPageChanges], firstChange);\r\n } else {\r\n this.finishChangeLayout(layoutType);\r\n }\r\n break;\r\n }\r\n // case \"kvScene\": {\r\n case \"bvScene\": {\r\n this.getBvSceneParts(layoutType);\r\n break;\r\n }\r\n case \"Bathroom\":\r\n case \"BV\": {\r\n const showerParent = layout.parts[\"Shower\"];\r\n if (showerParent && showerParent.showerBody && !showerParent.showerBody.allFeaturesReceived) {\r\n const navItem = {\r\n part: showerParent.showerBody,\r\n text: showerParent.showerBody.partName\r\n };\r\n const oldType = layout.type;\r\n layout.type = layoutType;\r\n this.forceUpdate();\r\n this.checkIfAllFeaturesReceived(navItem, \"\", () => {\r\n this.finishChangeLayout(layoutType, oldType);\r\n });\r\n } else {\r\n this.finishChangeLayout(layoutType);\r\n }\r\n break;\r\n }\r\n default:\r\n this.finishChangeLayout(layoutType, null, null, firstChange);\r\n break;\r\n }\r\n };\r\n\r\n finishChangeLayout = (layoutType, oldType, currentState, firstChange = false) => {\r\n const layout = getCurrentLayout();\r\n if (Number.isInteger(oldType)) {\r\n loaderEnable();\r\n layout.type = oldType;\r\n layout.selectLayout(layoutType, oldType, currentState);\r\n } else {\r\n layout.selectLayout(layoutType);\r\n }\r\n window.requestInProcess = false;\r\n if (!layout.initialized && !firstChange) {\r\n layout.initialized = true;\r\n }\r\n if (this.props.refreshCB && !firstChange) {\r\n this.props.refreshCB();\r\n }\r\n if (!firstChange) {\r\n this.forceUpdate();\r\n store.dispatch(updateCanvasCount()); // update canvas\r\n loaderDisable();\r\n }\r\n return true\r\n };\r\n\r\n getBvSceneParts = (layoutType) => {\r\n const layout = getCurrentLayout();\r\n const wallsParent = layout.parts[\"Walls\"];\r\n const showerParent = layout.parts[\"Shower\"];\r\n const neededParts = [\"left_wall\", \"right_wall\", \"shower_interior_wall\", \"shower_fixture\"];\r\n let promises = [];\r\n [wallsParent, showerParent].forEach(parent => {\r\n if (parent && parent.relatedItems) {\r\n parent.relatedItems.forEach(relatedItem => {\r\n if (neededParts.includes(relatedItem.partId) && !relatedItem.allFeaturesReceived) {\r\n promises.push(this.getRelatedItemFeatures(relatedItem))\r\n }\r\n })\r\n }\r\n })\r\n const oldType = layout.type;\r\n layout.type = layoutType;\r\n Promise.all(promises).then(() => this.finishChangeLayout(layoutType, oldType))\r\n };\r\n\r\n getSubPartLayoutPageChanges = (parent, childName, layoutType) => {\r\n let\r\n requestNeeded = false,\r\n requestNameNeeded = false,\r\n nextLayoutFeaturesPage = 0,\r\n maxCurrentFeaturesPage = 0;\r\n if (parent && parent[childName]) {\r\n if (USE_SERVER_CACHING && parent[childName].nextFeaturesPageToLoadArray) {\r\n maxCurrentFeaturesPage = Math.max(...Object.values(parent[childName].nextFeaturesPageToLoadArray).map(obj => obj.page))\r\n nextLayoutFeaturesPage = (parent[childName].nextFeaturesPageToLoadArray[LayoutAbbreviations[layoutType]]).page;\r\n if (nextLayoutFeaturesPage < maxCurrentFeaturesPage) {\r\n requestNeeded = true;\r\n }\r\n }\r\n if (parent[childName].activeFeature) {\r\n const currentActiveName = parent[childName].activeFeature.getSplittedFeatureName();\r\n const neededLayoutName = invert(LayoutTypes)[layoutType];\r\n const neededFeature = parent[childName].featuresList[neededLayoutName].find((feature) => {\r\n const featureName = feature.getSplittedFeatureName();\r\n return featureName && currentActiveName && (featureName === currentActiveName)\r\n });\r\n if (!neededFeature) {\r\n requestNameNeeded = currentActiveName.split(\" \")[0]\r\n }\r\n }\r\n }\r\n return {\r\n requestNeeded,\r\n requestNameNeeded,\r\n nextLayoutFeaturesPage,\r\n maxCurrentFeaturesPage,\r\n relatedItem: parent ? parent[childName] : null\r\n }\r\n };\r\n\r\n getNeeededKvPartsOnLayoutChange = (layoutType, relatedPartsToReceive, relatedPartsToReceiveForLayouts, firstChange = false) => {\r\n const layout = getCurrentLayout();\r\n const currentState = layout.getActiveFeaturesAsObject(true, false, true);\r\n const oldType = layout.type;\r\n layout.type = layoutType;\r\n if (!firstChange) {\r\n this.forceUpdate();\r\n }\r\n const promises = relatedPartsToReceive.map((relatedItem) => {\r\n const size = COUNTERTOP_GROUP.includes(relatedItem.partId) ? 2000 : 1000;\r\n return getBvGroupFeatures(relatedItem.dbName || relatedItem.partName, 0, size).then(response => {\r\n relatedItem.setGroupFeatures(Array.isArray(response) ? response : [], size);\r\n return response\r\n })\r\n });\r\n relatedPartsToReceiveForLayouts.forEach((pageChanges) => {\r\n if (pageChanges.requestNeeded) { // here we receive all the same features for new layout type (cause client already received them in another layout)\r\n const nextLayoutName = LayoutAbbreviations[layoutType];\r\n const featuresSize = 1000 * (pageChanges.maxCurrentFeaturesPage - pageChanges.nextLayoutFeaturesPage);\r\n promises.push(getBvGroupFeatures(pageChanges.relatedItem.partName, pageChanges.nextLayoutFeaturesPage, featuresSize, [], \"\", nextLayoutName)\r\n .then(response => {\r\n pageChanges.relatedItem.nextFeaturesPageToLoadArray[nextLayoutName].page = pageChanges.maxCurrentFeaturesPage - 1; // 1 will be added in setGroupFeatures method\r\n pageChanges.relatedItem.setGroupFeatures(Array.isArray(response) ? response : []);\r\n return response\r\n }))\r\n }\r\n if (pageChanges.requestNameNeeded) { // here we receive current active itm to set it\r\n promises.push(NavigationRequests.searchFeaturesByName(pageChanges.relatedItem, pageChanges.requestNameNeeded))\r\n }\r\n });\r\n return Promise.all(promises).then(() => this.finishChangeLayout(layoutType, oldType, currentState, firstChange));\r\n };\r\n\r\n}\r\n","import {connect} from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport {setLeadCaptureClickCount} from \"../../../actions/userFunctions\";\r\nimport {LOOK_OVERLAYS} from \"../core/constants\";\r\nimport {setLookOverlayOpened} from \"../../../actions/lookFunctions\";\r\n\r\n\r\nconst WithClickCount = (props) => {\r\n\r\n const {fabricatorSettings, isPhoneNumberValidated, leadCaptureClickCount, setLeadCaptureClickCount, children,\r\n setLookOverlayOpened} = props;\r\n\r\n const maxClickCountReached = () => {\r\n if (!isPhoneNumberValidated && fabricatorSettings.clickLeadCapture) {\r\n const newLeadCount = leadCaptureClickCount + 1;\r\n if (newLeadCount >= fabricatorSettings.clickLeadCount) {\r\n setLookOverlayOpened(LOOK_OVERLAYS.leadCapture);\r\n return true;\r\n } else {\r\n setLeadCaptureClickCount(newLeadCount);\r\n }\r\n }\r\n return false\r\n }\r\n\r\n\r\n return children(maxClickCountReached)\r\n};\r\n\r\nWithClickCount.propTypes = {\r\n children: PropTypes.any.isRequired\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {settings} = store.fabricatorState;\r\n const {isPhoneNumberValidated, leadCaptureClickCount} = store.userState;\r\n return {\r\n fabricatorSettings: settings,\r\n isPhoneNumberValidated,\r\n leadCaptureClickCount,\r\n }\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setLeadCaptureClickCount,\r\n setLookOverlayOpened,\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(WithClickCount)\r\n","import React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\nimport PropTypes from \"prop-types\";\r\nimport $ from \"jquery\";\r\n\r\nimport Switch from '@mui/material/Switch';\r\nimport FormControlLabel from '@mui/material/FormControlLabel';\r\n\r\nimport {getCurrentLayout} from \"../../../appLayout\";\r\n// import COLOR_THEMES, {COLORS} from \"../../../../colorThemes\";\r\nimport {featureInterface} from \"../../../../interfaces/featureInterface\";\r\nimport {updateCanvasCount} from \"../../../../actions/actionFunctions\";\r\nimport {clickOnSimilarFeatures, getApplyToLogic} from \"../lookNavigationFunctions\";\r\nimport {IS_QKB_UI} from \"../../../../config\";\r\nimport ActionTypes from \"../../../../misc/actionTypes\";\r\nimport LookAllWallsRadioButtonSmall from \"./lookAllWallsRadioButtonSmall\";\r\n\r\n\r\nconst LookAllWallsRadioButton = (props) => {\r\n\r\n const {lookFeature, lookActiveFeature, intl, updateCanvasCount, dispatch, showColumnCheckbox, type, viewType,\r\n showTutorialToolTip, fabricatorData} = props;\r\n\r\n const wallFeature = lookFeature || lookActiveFeature;\r\n\r\n if (!wallFeature || fabricatorData.isEncore) {\r\n return null\r\n }\r\n\r\n const layout = getCurrentLayout();\r\n\r\n const applyToLogic = getApplyToLogic(wallFeature);\r\n if (!applyToLogic) {\r\n return null\r\n }\r\n\r\n const {translateId, setApplyToFunction, applyToArrayAll, currentApplyToArray} = applyToLogic;\r\n const checked = currentApplyToArray.includes(wallFeature.partId);\r\n\r\n const updateCanvas = () => {\r\n if (IS_QKB_UI) {\r\n $(window).trigger(ActionTypes.CHANGE_LAYOUT); // update canvas\r\n } else {\r\n updateCanvasCount();\r\n }\r\n }\r\n\r\n const allWallsCheckboxClick = async () => {\r\n if (checked) { // already enabled\r\n if (currentApplyToArray.length) {\r\n dispatch(setApplyToFunction([], true, applyToLogic.type))\r\n }\r\n applyToArrayAll.forEach(wallPartId => {\r\n const subPart = layout.getSubPartByPartId(wallPartId);\r\n if (!subPart || (subPart.part.partId === wallFeature.partId) || !subPart.part.activeFeatureBeforeAllWalls) {\r\n return null\r\n }\r\n subPart.part.activeFeatureBeforeAllWalls.clickFromAllWalls(true);\r\n });\r\n updateCanvas();\r\n return\r\n } // already enabled end\r\n\r\n if (applyToArrayAll.length !== currentApplyToArray.length) {\r\n dispatch(setApplyToFunction([...applyToArrayAll], true, applyToLogic.type)) // update checkbox\r\n }\r\n await clickOnSimilarFeatures(wallFeature, applyToLogic);\r\n updateCanvas();\r\n };\r\n\r\n if (showColumnCheckbox) {\r\n return (\r\n
    \r\n :\r\n \r\n
    \r\n )\r\n }\r\n\r\n if (type === \"small\") {\r\n return \r\n }\r\n\r\n return (\r\n \r\n }\r\n />\r\n )\r\n};\r\n\r\nLookAllWallsRadioButton.propTypes = {\r\n lookFeature: PropTypes.shape(featureInterface),\r\n showColumnCheckbox: PropTypes.bool,\r\n showTutorialToolTip: PropTypes.bool,\r\n type: PropTypes.string,\r\n viewType: PropTypes.number,\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {lookActiveFeature, lookWallsApplyTo} = store.lookState;\r\n const {activeTheme} = store.serverState;\r\n const {countertopsApplyToArray, cabinetsApplyTo, cabinetsApplyToBathroom, edgesApplyTo, handlesApplyToBathroom,\r\n countertopsApplyToArrayBathroom, showerFloorApplyToBathroom} = store.navigationState;\r\n const fabricatorData = store.fabricatorState;\r\n\r\n return {\r\n lookActiveFeature,\r\n activeTheme,\r\n countertopsApplyToArray, cabinetsApplyTo, lookWallsApplyTo, cabinetsApplyToBathroom, edgesApplyTo,\r\n countertopsApplyToArrayBathroom, handlesApplyToBathroom, showerFloorApplyToBathroom, // update radio button on click\r\n fabricatorData,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n updateCanvasCount: () => dispatch(updateCanvasCount()),\r\n dispatch,\r\n }\r\n}\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(LookAllWallsRadioButton)\r\n)\r\n","import React from \"react\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\nimport isObject from \"lodash/isObject\";\r\nimport WithOverlay from \"./withOverlayHoc\";\r\nimport ExclamationMarkIcon from \"../ui/icons/exclamationMarkIcon\";\r\nimport {COLORS} from \"../../colorThemes\";\r\n\r\nclass MessageBox extends React.Component {\r\n\r\n displayName = 'MessageBox';\r\n\r\n getMessage = () => {\r\n const {intl} = this.props;\r\n const props = this.props.state || this.props;\r\n const message = props.message;\r\n // console.log(\"message\", message);\r\n if (Array.isArray(message)) {\r\n return message.map((msg, msgIndex) =>

    \r\n {intl.messages[msg] ? : msg}\r\n

    )\r\n } else if (isObject(message)) {\r\n return message.id\r\n ? \r\n : message.message\r\n ? message.message\r\n : message.toString ? message.toString() : null\r\n } else if (message) { //string\r\n return intl.messages[message] ? : message.replace(\"Zip\", \"Postal\")\r\n } else {\r\n return \"Error\";\r\n }\r\n };\r\n\r\n render() {\r\n const props = this.props.state || this.props;\r\n\r\n if (!props.visible) {\r\n return null\r\n }\r\n\r\n const bClass = props.error ? 'message-red-lable' : 'message-blue-lable';\r\n const hClass = props.error ? 'message-error-message-title' : 'message-system-message-title';\r\n const messageClass = (props.error ? 'message-system-text-red' : 'message-system-text-blue') +\r\n (props.inline ? ' message-system-text-inline' : '');\r\n let buttonsElements = [];\r\n if (props.buttons && props.buttons.length) {\r\n buttonsElements = props.buttons.map((b) => {\r\n return ;\r\n });\r\n } else {\r\n buttonsElements.push(\r\n {\r\n //TODO[Artem] add default close logic\r\n }\r\n }}/>\r\n );\r\n }\r\n\r\n if (props.newStyles) {\r\n return (\r\n \r\n {(hideOverlay) => (\r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n {this.getMessage()}\r\n
    \r\n
    \r\n {props.buttons && props.buttons.length ? props.buttons.map((button) => {\r\n return (\r\n \r\n )\r\n }) : null}\r\n
    \r\n
    \r\n )}\r\n
    \r\n )\r\n }\r\n\r\n return (\r\n
    \r\n
    \r\n
    \r\n
    \r\n
    {this.getMessage()}
    \r\n
    {buttonsElements}
    \r\n
    \r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst MessageBoxButton = ({button}) => {\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default injectIntl(MessageBox);\r\n","import {PartMenuType} from \"../../visComponents/constants\";\r\nimport {iCmp} from \"../../../misc/utils\";\r\nimport Layer from \"../../visComponents/layer\";\r\nimport {LayoutType, METADATA} from \"./constants\";\r\nimport PartCommon from \"../../visComponents/partCommon\";\r\n\r\nexport class Part extends PartCommon {\r\n\r\n constructor(isParent, isChild, menuType) {\r\n super();\r\n if (isChild || (isParent && menuType === PartMenuType.Simple)) {\r\n this.featuresList = {};\r\n this.featuresPartsList = {};\r\n this.modulePartsList = {};\r\n Object.keys(LayoutType).forEach(layoutName => {\r\n this.featuresList[layoutName] = [];\r\n this.featuresPartsList[layoutName] = [];\r\n this.modulePartsList[layoutName] = [];\r\n });\r\n this.allFeaturesReceived = false;\r\n this.realFeaturesReceived = false; // this prop is need on Scroll (if features count more that 1000)\r\n this.nextFeaturesPageToLoad = 0;\r\n this.activeFeature = null;\r\n this.placeholderFeature = null;\r\n this.shadowFeature = null;\r\n this.placeholderChanged = false;\r\n this.firstClick = {\r\n \"0\": false\r\n };\r\n this.activeLockedFeature = null;\r\n this.activeNotInVisualizerFeature = null; // is needed to display in the QT selected activeNotInVisualizerFeature, but render proper activeFeature layer(for example, countertop)\r\n // name = \"\";\r\n this.visible = true;\r\n this.categoryEnabled = false;\r\n this.layout = null;\r\n this.featureGroupVisible = true; // dashboard's feature group eye ball logic\r\n this.featureGroupEnabled = true; // dashboard's feature group checkbox logic\r\n this.selectedFeaturesHistory = []; // array of strings(names). updated every time item is selected\r\n this.filtersReceived = null; // array of filters values, comes from BE, for ex [1221, 347, 1124]\r\n }\r\n if (isParent) {\r\n this.partThumbnail = '';\r\n this.relatedItems = [];\r\n }\r\n if (!isChild && !isParent) {\r\n this.dbFeature = null;\r\n this.layer = new Layer(\"fireplace\");\r\n this._customDisplayName = null;\r\n this.notesList = {};\r\n }\r\n this.partName = \"\";\r\n }\r\n\r\n set features(featuresList) {\r\n // features can't be set directly, we need to change featuresList array\r\n }\r\n get features() {\r\n const layout = this.layout || this.getParent().layout;\r\n return this.featuresList[layout.getCurrentLayoutName()]\r\n }\r\n set featuresParts(featuresList) {\r\n // featuresParts can't be set directly, we need to change featuresPartsList array\r\n }\r\n get featuresParts() {\r\n const layout = this.layout || this.getParent().layout;\r\n return this.featuresPartsList[layout.getCurrentLayoutName()]\r\n }\r\n get moduleParts() {\r\n const layout = this.layout || this.getParent().layout;\r\n return this.modulePartsList[layout.getCurrentLayoutName()]\r\n }\r\n\r\n /**\r\n * Checks whether a given for condition matches the needed value (or array of values)\r\n * @param name {string}\r\n * @param value {string || array}\r\n * @returns {int} -1 - no such for condition, 0 - no match, 1 - matches\r\n */\r\n matchesMetaForCondition(name, value) {\r\n return this.metaData[name] && this.metaData[name].some(condValue => {\r\n return condValue === METADATA.ALL || (Array.isArray(value) ? value.some(val => iCmp(condValue, val)) : iCmp(condValue, value))\r\n });\r\n }\r\n\r\n matchesMetaForArrayOfConditions(arrayOfConditions) {\r\n return arrayOfConditions.every((condition) => {\r\n return this.matchesMetaForCondition(condition.propName, condition.propValue);\r\n })\r\n }\r\n}\r\n\r\n\r\n","import _ from 'lodash';\r\n\r\nimport workspace from \"../core/workspace\";\r\nimport {\r\n SHAPE_PART_ID,\r\n} from \"../../../constants\";\r\nimport sqftShape from \"../core/shapes/sqftShape\";\r\nimport ShapeHelper from \"../../../helpers/shapeHelper\";\r\nimport sqftShapeManager from \"./sqftShapeManager\";\r\nimport sqftSlabManager from \"./sqftSlabManager\";\r\nimport {renderErrorPopup} from \"../../../../../api/api-popups\";\r\n\r\nconst sqftShapeIntersectionsManager = {\r\n resetShapesIntersections() {\r\n const shapes = workspace.getShapes();\r\n for (const shape of shapes) {\r\n if (shape instanceof sqftShape) {\r\n shape.shapeIntersections.setOverlappedWithShapeIds([]);\r\n }\r\n }\r\n },\r\n updateShapesIntersections() {\r\n this.resetShapesIntersections();\r\n\r\n const shapes = workspace.getShapes();\r\n //console.log(\"----------------------\");\r\n for (const shape of shapes) {\r\n if (shape instanceof sqftShape) {\r\n for (const testShape of shapes) {\r\n if (testShape instanceof sqftShape\r\n && shape.id !== testShape.id\r\n ) {\r\n const shapeIntersections = ShapeHelper.getTwoShapesIntersections(shape, testShape);\r\n const shapeIds = Object.keys(shapeIntersections);\r\n if (shapeIds.length) {\r\n shape.shapeIntersections.addOverlappedWithShape(+shapeIds[0]);\r\n } else if (ShapeHelper.checkIfShapeContainsAnother(shape, testShape)) {\r\n //console.log(\"shapeId\", shape.id);\r\n //console.log(\"testShapeId\", testShape.id);\r\n testShape.shapeIntersections.addOverlappedWithShape(shape.id);\r\n shape.shapeIntersections.addOverlappedWithShape(testShape.id);\r\n }\r\n }\r\n }\r\n //console.log(\"shapeId\", shape.id);\r\n //console.log(\"shape.shapeIntersections.overlappedWithShapeIds\", shape.shapeIntersections.overlappedWithShapeIds);\r\n }\r\n }\r\n //this.logShapeFeatureIds()\r\n },\r\n logShapeFeatureIds() {\r\n const shapes = workspace.getShapes();\r\n for (const shape of shapes) {\r\n console.log(\"shape id\", shape.id);\r\n console.log(\"shape feature id\", shape.featureId);\r\n console.log(\"shape shapeIntersections overlappedWithShapeIds\", shape.shapeIntersections.overlappedWithShapeIds);\r\n }\r\n },\r\n logSnappedShapeGroups() {\r\n const shapes = workspace.getShapes();\r\n console.log(\"------\");\r\n for (const shape of shapes) {\r\n if (shape instanceof sqftShape) {\r\n console.log(\"shape id\", shape.id);\r\n console.log(\"shape area\", shape.getTotalArea());\r\n console.log(\"shape getSnappedShapeGroup\", shape.shapeAbsolute.getSnappedShapeGroup());\r\n console.log(\"shape shapeSlab getSnappedShapeGroup\", shape.shapeSlab.shapeAbsolute.getSnappedShapeGroup());\r\n }\r\n }\r\n console.log(\"------\");\r\n },\r\n updateSlabPlaceholderFeatureId() {\r\n const shapes = workspace.getShapes();\r\n for (const shape of shapes) {\r\n if (shape instanceof sqftShape\r\n && shape.partId === SHAPE_PART_ID.slabPlaceHolder\r\n ) {\r\n //console.log(\"update feature shape.shapeIntersections.overlappedWithShapeIds\", shape.shapeIntersections.overlappedWithShapeIds);\r\n if (shape.shapeIntersections.overlappedWithShapeIds.length >= 1) {\r\n const intersectedShape = sqftShapeManager.getShapeById(shape.shapeIntersections.overlappedWithShapeIds[0]);\r\n shape.setFeatureId(_.clone(intersectedShape.featureId));\r\n shape.setSlabParentPartId(_.clone(intersectedShape.slabParentPartId ? intersectedShape.slabParentPartId : intersectedShape.partId));\r\n }\r\n }\r\n }\r\n },\r\n\r\n showSlabPlaceHolderErrorMessage (\r\n slabPlaceHolderShapes = sqftSlabManager.getSlabPlaceHolderShapes(),\r\n callback = new Function()\r\n ) {\r\n for (const slabPlaceHolderShape of slabPlaceHolderShapes) {\r\n //console.log(\"slabPlaceHolderShape.overlappedWithShapeIds\", slabPlaceHolderShape.shapeIntersections.overlappedWithShapeIds);\r\n if (slabPlaceHolderShape.shapeIntersections.overlappedWithShapeIds.length >= 2) {\r\n const shapes = sqftShapeManager.getShapeByIds(slabPlaceHolderShape.shapeIntersections.overlappedWithShapeIds);\r\n if (\r\n !sqftShapeManager.hasSameSharedFeatureName(shapes)\r\n && !sqftShapeManager.hasSameFeatureId(shapes)\r\n ) {\r\n\r\n renderErrorPopup(workspace.intl.formatMessage({id: \"sqft.popup.system.slabPlaceholderMultipleOverlap\"}));\r\n callback();\r\n }\r\n }\r\n }\r\n }\r\n};\r\n\r\nexport default sqftShapeIntersectionsManager\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport $ from 'jquery';\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport Navigation from \"./navigation\";\r\nimport Config from \"../../../config\";\r\nimport {ignoreDefault} from \"../../../misc/utils\";\r\nimport Sidebar from './desktop/sidebar';\r\nimport Body from './desktop/body';\r\nimport {ContentType, ContentTypeName, ContentTypeNameTranslate, PartMenuType} from \"../constants\";\r\nimport FeatureWizard from \"./featureWizard/featureWizard\";\r\nimport Analytics from \"../../../analytics\";\r\nimport {CABINET_WIZARD_BUTTONS, BACKSPLASH_TYPES, COUNTERTOP_WIZARD_BUTTONS} from \"../../kvComponent/core/constants\";\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\nimport RoomSceneNavigation from \"./roomSceneNavigation\";\r\nimport {getAvailableRoomScenes, getShowOtherLayouts, getSideBarSubParts} from \"./navUtils\";\r\nimport DesktopNavigationLayoutsContent from \"./desktopNavigationLayoutsContent\";\r\n\r\nexport default class DesktopNavigationCommon extends Navigation {\r\n\r\n static propTypes = {\r\n refreshCB: PropTypes.func.isRequired,\r\n renderGreenLayerByZindex: PropTypes.func,\r\n changeMessageBoxState: PropTypes.func,\r\n setHoveredLayer: PropTypes.func,\r\n userIsLoggedIn: PropTypes.bool,\r\n isPhoneNumberValidated: PropTypes.bool,\r\n toggleUserPopup: PropTypes.func,\r\n setActiveFeature: PropTypes.func,\r\n setDemoPointClicked: PropTypes.func,\r\n activeFeature: PropTypes.object,\r\n fabricatorSettings: PropTypes.object,\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n this.navWrapper = null;\r\n this.navigationIsClosing = false;\r\n }\r\n\r\n componentDidMount() {\r\n this.setState({\r\n navWidth: $(this.navWrapper).width()\r\n });\r\n this.props.setNavigationViewType(3);\r\n this._componentDidMount();\r\n }\r\n\r\n componentWillReceiveProps(nextProps) {\r\n this._componentWillReceiveProps(nextProps)\r\n }\r\n\r\n handleContextMenuClick = (menuItem) => {\r\n const layout = getCurrentLayout();\r\n if (!this.state.showNavigation) {\r\n let clickedParent = \"\", clickedButton = \"\";\r\n const isBacksplash = BACKSPLASH_TYPES.some(bType => bType === menuItem.text);\r\n if (menuItem.text === \"Edge Profile\") {\r\n if (this.props.setActiveNavigationFilter) {\r\n this.props.setActiveNavigationFilter(COUNTERTOP_WIZARD_BUTTONS[3].buttonId); // set active navigation filter\r\n this.props.setActiveNavigationFilterStepIndex(3);\r\n }\r\n } else if (isBacksplash) {\r\n const wallsParent = layout.parts[\"Walls\"];\r\n const backsplashSubPart = wallsParent.relatedItems.find(relItem => relItem.partId === \"backsplash\");\r\n clickedParent = \"Walls\";\r\n clickedButton = \"Backsplash\";\r\n if (this.props.setActiveNavigationFilter) {\r\n this.props.setActiveNavigationFilter(COUNTERTOP_WIZARD_BUTTONS[4].buttonId); // set active navigation filter\r\n this.props.setActiveNavigationFilterStepIndex(4);\r\n }\r\n const applyBacksplash = () => {\r\n const featureToClick = backsplashSubPart.getFeatureByBacksplashType(menuItem.text);\r\n if (featureToClick) {\r\n console.log(\"featureToClick\", featureToClick);\r\n featureToClick.handleClick();\r\n this.props.setActiveFeature(featureToClick);\r\n const parentItem = this.state.parentNavigationItem;\r\n this.setState({\r\n parentNavigationItem: null\r\n }, () => {\r\n this.setState({\r\n parentNavigationItem: parentItem\r\n })\r\n })\r\n }\r\n }\r\n if (!backsplashSubPart.allFeaturesReceived) {\r\n this.checkIfAllFeaturesReceived({part: backsplashSubPart}, null, applyBacksplash);\r\n } else {\r\n applyBacksplash()\r\n }\r\n }\r\n if (!isBacksplash) {\r\n clickedButton = menuItem.text;\r\n clickedParent = menuItem.subMenuParent || this.state.contextMenuOpen;\r\n }\r\n if (clickedParent && clickedParent.module) {\r\n clickedParent = \"Cabinet\"\r\n }\r\n //\r\n // console.log('clickedButton', clickedButton);\r\n // console.log('clickedParent', clickedParent);\r\n // console.log('menuItem', menuItem);\r\n if (clickedParent === \"Walls\" && (clickedButton === \"Left Shower Wall\" || clickedButton === \"Pony Wall\")) {\r\n this.ponyWallAndLeftWallClick(menuItem);\r\n }\r\n\r\n this.setState({\r\n showNavigation: true,\r\n contentType: ContentType.Design,\r\n contextMenuOpen: false,\r\n hoveredLayer: {}\r\n }, () => {\r\n this.menuOpened();\r\n this.triggerOpenNavigationMenu(clickedButton, clickedParent);\r\n $(document).on('click', this.handleWrapperBlur);\r\n this.setNewActiveFeature();\r\n if (menuItem.clickFeature && !isBacksplash) {\r\n const featureToClick = menuItem.part.features.find(feature => feature.partName === menuItem.subMenuText);\r\n if (featureToClick) {\r\n featureToClick.handleClick();\r\n }\r\n }\r\n });\r\n }\r\n };\r\n\r\n handleNavTabClick = (contentType) => (e) => {\r\n Analytics.sendClickEvent('nav-tab-click-' + contentType);\r\n // console.log('e', e);\r\n // console.log('contentType', contentType);\r\n ignoreDefault(e);\r\n if (this.state.contentType === contentType) {\r\n this.closeNavigation(e);\r\n } else if (!this.navigationIsClosing) {\r\n this.setContentType(contentType);\r\n }\r\n };\r\n\r\n openLayoutMenu = (callBack) => {\r\n const contentType = document.querySelector(\".tab.tab--room-layout\")\r\n ? ContentType.Layout\r\n : document.querySelector(\".tab.tab--room-ideas\")\r\n ? ContentType.DisplayRoom\r\n : ContentType.Layout;\r\n this.setState({\r\n showNavigation: true,\r\n contentType,\r\n contextMenuOpen: false,\r\n hoveredLayer: {}\r\n }, () => {\r\n this.setNewActiveFeature();\r\n this.menuOpened();\r\n $(document).on('click', this.handleWrapperBlur);\r\n callBack();\r\n });\r\n };\r\n\r\n menuOpened = () => {\r\n this._menuOpened();\r\n };\r\n\r\n setContentType = (contentType) => {\r\n this.setState({\r\n showNavigation: true,\r\n contentType,\r\n contextMenuOpen: false,\r\n hoveredLayer: {},\r\n activeDefaultPreset: null\r\n }, () => {\r\n this.menuOpened();\r\n $(document).on('click', this.handleWrapperBlur);\r\n if (contentType === ContentType.Design) {\r\n this.setNewActiveFeature();\r\n }\r\n });\r\n };\r\n\r\n closeNavigation = (e) => {\r\n Analytics.sendClickEvent('close-nav');\r\n if (e) {\r\n ignoreDefault(e);\r\n }\r\n this.props.setActiveFeature(null);\r\n this.navigationIsClosing = true;\r\n this.setState({\r\n showNavigation: false,\r\n showFilterSelection: false,\r\n showerWallWizardGroupsSelected: true,\r\n }, () => {\r\n setTimeout(() => {\r\n this.setState({\r\n contentType: ContentType.None,\r\n showFilterSelection: true,\r\n showerWallWizardGroupsSelected: false,\r\n searchText: \"\"\r\n }, () => {\r\n this.navigationIsClosing = false;\r\n })\r\n }, 500);\r\n $(document).off('click', this.handleWrapperBlur);\r\n });\r\n if (this.props.setActiveNavigationNames) {\r\n this.props.setActiveNavigationNames(\"\", \"\")\r\n }\r\n setTimeout(() => {\r\n if (this.props.toggleDesktopNavigation) {\r\n this.props.toggleDesktopNavigation(false)\r\n }\r\n if (this.props.setActiveNavigationFilter) {\r\n this.props.setActiveNavigationFilter(CABINET_WIZARD_BUTTONS[0].buttonId);\r\n this.props.setActiveNavigationFilterStepIndex(0);\r\n }\r\n }, 500);\r\n };\r\n\r\n handleWrapperBlur = (e) => {\r\n const overlayClick = e.target.closest('.nav-overlay');\r\n const navClick = e.target.closest('.nav');\r\n const lockClick = e.target.closest('[class*=\"lock\"]');\r\n const userPopupClick = e.target.closest('[class*=\"user-popup\"]');\r\n if (overlayClick && !navClick && !lockClick && !userPopupClick && !e.target.closest('.nav-pos')) {\r\n this.closeNavigation(e);\r\n }\r\n };\r\n\r\n handleHeaderBackClick = () => {\r\n this.resetNavigation();\r\n };\r\n\r\n updateSideBar = () => {\r\n this.setState({\r\n updateSidebarItems: true\r\n }, () => {\r\n this.setState({\r\n updateSidebarItems: false\r\n })\r\n })\r\n };\r\n\r\n handleSubPartClick = (childNavigationItem, activeNavigationFilter = null) => { // sidebar list item click\r\n const subItemPart = childNavigationItem.part;\r\n const childNavigationItemPartId = subItemPart.partId;\r\n if (Config.isDevMode() && this.state.childNavigationItem && (this.state.childNavigationItem.text === childNavigationItem.text || subItemPart.disabled)) {\r\n if (subItemPart.canBeDisabled) {\r\n subItemPart.disabled = !subItemPart.disabled;\r\n subItemPart.disabledClick();\r\n this.props.refreshCB();\r\n }\r\n }\r\n subItemPart.getParent().handleSubPartClick(subItemPart);\r\n this.setState({\r\n childNavigationItem,\r\n showFilterSelection: subItemPart.allFeaturesReceived, // show filters only if subItemPart has all features\r\n showerWallWizardGroupsSelected: false,\r\n searchText: \"\"\r\n }, () => {\r\n this.scrollAsideToMenuItem(childNavigationItem.text);\r\n this.rememberWallsSelection();\r\n this.checkIfAllFeaturesReceived(childNavigationItem, \"childNavigationItem\");\r\n });\r\n this.setNewActiveFeature(childNavigationItem);\r\n /*set new materials page subIndex*/\r\n this.setActivePartRelatedItemIndex(childNavigationItem);\r\n\r\n if (this.props.setActiveNavigationNames\r\n && this.state.parentNavigationItem && this.state.parentNavigationItem.text\r\n && childNavigationItem && childNavigationItem.part\r\n ) {\r\n this.props.setActiveNavigationNames(\r\n this.state.parentNavigationItem.text.toLowerCase().replace(/ /g,\"_\"),\r\n childNavigationItemPartId\r\n )\r\n }\r\n\r\n this.setNavigationFilterIfTheChildWasChanged(childNavigationItemPartId, activeNavigationFilter);\r\n\r\n if (childNavigationItem.text === \"Ceiling\") {\r\n $('html, body').animate({scrollTop: 0}, 800);\r\n }\r\n\r\n };\r\n\r\n scrollAsideToMenuItem = (menuItemText) => {\r\n const parent = $(document.querySelector('.customize-list'));\r\n const child = parent.find('.customize-list__item[data-text=\"'+ menuItemText +'\"]');\r\n if (parent && child) {\r\n const needToScroll = +child.data('index') >= 5;\r\n parent.animate({\r\n scrollTop: needToScroll ? parent.height() : 0 // -30 this is one nav item height\r\n }, 500);\r\n }\r\n };\r\n\r\n handleSubPartHover = childNavigationItem => {\r\n const activeFeature = childNavigationItem.part.activeFeature;\r\n if (activeFeature) {\r\n const zIndex = activeFeature.layer.zIndex;\r\n zIndex && this.props.renderGreenLayerByZindex(zIndex);\r\n }\r\n };\r\n\r\n scrollToDefault = () => {\r\n const featuresList = document.getElementsByClassName('categories-list');\r\n if (featuresList.length) {\r\n featuresList[0].scrollLeft = 0;\r\n }\r\n };\r\n\r\n handleMobileSelectClick = (e) => {\r\n if (!this.state.showNavigation || !this.state.parentNavigationItem) {\r\n e.stopPropagation();\r\n if (!this.state.parentNavigationItem) {\r\n this.setState({\r\n childNavigationItem: null\r\n })\r\n }\r\n }\r\n if (this.state.contentType !== ContentType.Design && !this.navigationIsClosing) {\r\n this.setContentType(ContentType.Design);\r\n }\r\n };\r\n\r\n navigationItemClickCommon = (item) => {\r\n if (!this.state.parentNavigationItem) {\r\n if (item.part.menuType === PartMenuType.Simple) {\r\n this.checkIfAllFeaturesReceived(item, \"parentNavigationItem\");\r\n }\r\n this.setState({\r\n parentNavigationItem: item,\r\n showFilterSelection: item.text === \"Floor\" && item.part.allFeaturesReceived, // show filters only if subItemPart has all features\r\n }, () => {\r\n const featuresList = document.getElementsByClassName('categories-list');\r\n if (featuresList.length) {\r\n featuresList[0].scrollLeft = 0;\r\n }\r\n // let activeFeature = item.part.activeFeature;\r\n const subParts = getSideBarSubParts(this.state.parentNavigationItem.part);\r\n if (subParts[0] && (subParts[0].part.menuType !== PartMenuType.Simple)) {\r\n this.handleSubPartClick(subParts[0])\r\n } else {\r\n setTimeout(() => {\r\n this.setNewActiveFeature({part: item.part});\r\n }, 0)\r\n }\r\n if (this.props.setActiveNavigationNames && this.state.parentNavigationItem && this.state.parentNavigationItem.text) {\r\n this.props.setActiveNavigationNames(\r\n this.state.parentNavigationItem.text.toLowerCase().replace(/ /g,\"_\"), \"\"\r\n )\r\n }\r\n });\r\n this.props.setDefaultSelectionGroup(item.part.partName);\r\n } else {\r\n this.props.setActiveFeature(item.part);\r\n }\r\n if (Config.isDevMode() || document.kvConfig.kioskMode) {\r\n console.log('item', item);\r\n if (item.part.dbFeature) {\r\n console.log('sharedFeatureName:', item.part.dbFeature.sharedFeatureName);\r\n }\r\n }\r\n };\r\n\r\n content = (useWizard, wizardGroups, useFilters) => {\r\n let content = null;\r\n switch (this.state.contentType) {\r\n case ContentType.Design:\r\n return this.contentDesign(useWizard, wizardGroups, useFilters);\r\n case ContentType.Layout:\r\n return ;\r\n case ContentType.DisplayRoom:\r\n return this.contentRoom();\r\n case ContentType.Loading:\r\n return this.contentLoading();\r\n case ContentType.RoomScene:\r\n return ;\r\n default:\r\n return content;\r\n }\r\n };\r\n\r\n contentDesignBody = (useWizard, wizardGroups, useFilters = false) => {\r\n return (\r\n \r\n )\r\n };\r\n\r\n contentDesignWizard = () => {\r\n const wizardGroups = this.state[this.getWizardGroupsByPartId(this.state.childNavigationItem.part.partId)];\r\n return (\r\n \r\n )\r\n };\r\n\r\n contentDesign = (useWizard, wizardGroups, useFilters) => {\r\n\r\n // activePart = activePart || {\r\n // text: ''\r\n // };\r\n /*const filters = this.state.filters[activePart.text] || {};\r\n const filterValuesIDs = [];\r\n each(filters, (value) => {\r\n filterValuesIDs.push(value);\r\n });*/\r\n\r\n return (\r\n
    \r\n {this.state.parentNavigationItem\r\n ? \r\n : null}\r\n {this.state.showFeatureWizard ? (\r\n useWizard && this.state.childNavigationItem && this.state.childNavigationItem.part && this.state.parentNavigationItem\r\n ? this.contentDesignWizard()\r\n : this.contentDesignBody(false, wizardGroups, useFilters)\r\n ) : this.contentDesignBody(useWizard, wizardGroups, useFilters)}\r\n {/*{this.state.parentNavigationItem*/}\r\n {/*? */}\r\n {/*: null}*/}\r\n
    \r\n )\r\n };\r\n\r\n contentRoom = () => {\r\n let presets = this.checkedForLockedPresets();\r\n return (\r\n
    \r\n {presets.length ? (\r\n
      \r\n {presets.map((preset, index) => {\r\n return (\r\n
    • this.handleDefaultPresetClick(index, preset.presetIsLocked)}\r\n style={{backgroundImage: `url(${preset.bv_screen})`}}/>\r\n )\r\n })}\r\n
    \r\n ) :

    }\r\n
    \r\n )\r\n };\r\n\r\n contentLoading = () => {\r\n return
    \r\n }\r\n\r\n navigationMenuButtons = (availableNavButtons) => {\r\n return (\r\n
    \r\n {availableNavButtons.map((contentType) => {\r\n if (ContentTypeName[contentType] === \"Room Layout\") {\r\n const showOtherLayouts = getShowOtherLayouts(this.props.fabricatorSettings);\r\n if (!showOtherLayouts) {\r\n return null\r\n }\r\n }\r\n if (ContentTypeName[contentType] === \"Room Scene\") {\r\n const showOtherLayouts = getAvailableRoomScenes();\r\n if (!showOtherLayouts || !showOtherLayouts.length || (showOtherLayouts.length === 1)) {\r\n return null\r\n }\r\n }\r\n if (ContentTypeName[contentType] === \"Room Scene\" && (document.kvConfig.visualizerType === \"kvScene\" && !Config.isDevMode())) {\r\n return null\r\n }\r\n const tabClassName = ContentTypeName[contentType].toLowerCase().replace(\" \",\"-\")\r\n return (\r\n
    \r\n \r\n \r\n \r\n
    \r\n )\r\n })}\r\n
    \r\n )\r\n }\r\n\r\n}\r\n","import React, {Component} from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {connect} from \"react-redux\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport {\r\n setActiveNavigationFilter,\r\n setActiveNavigationFilterStepIndex,\r\n setCabinetNavigationFilterCompleted,\r\n setCountertopNavigationFilterCompleted, setNavigationViewType\r\n} from \"../../../../actions/navigationFunctions\";\r\nimport {CABINET_WIZARD_BUTTONS, COUNTERTOP_WIZARD_BUTTONS} from \"../../../kvComponent/core/constants\";\r\nimport {setSelectedFilters} from \"../../../../actions/actionFunctions\";\r\n\r\nclass NavigationFiltersSteps extends Component {\r\n\r\n static propTypes = {\r\n availableSteps: PropTypes.array,\r\n setFeatureWizardStep: PropTypes.func,\r\n exitFeatureWizard: PropTypes.func,\r\n showFeatureWizard: PropTypes.bool,\r\n isMobile: PropTypes.bool,\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n mounted: false\r\n };\r\n this._isMounted = false;\r\n }\r\n\r\n componentDidMount() {\r\n this._isMounted = true;\r\n setTimeout(() => {\r\n if (this._isMounted) {\r\n this.setState({\r\n mounted: true\r\n });\r\n }\r\n }, 0)\r\n }\r\n componentWillUnmount() {\r\n this._isMounted = false;\r\n }\r\n\r\n exitFeatureWizard = () => {\r\n this.props.setActiveNavigationFilter(CABINET_WIZARD_BUTTONS[0].buttonId);\r\n this.props.setActiveNavigationFilterStepIndex(0);\r\n const cabinetPartIds = [\"top_cabinet\", \"bottom_cabinet\"];\r\n const countertopPartIds = [\"countertop\", \"center_island_countertop\", \"edge_profile\", \"center_island_edge\", \"backsplash\"];\r\n if (cabinetPartIds.includes(this.props.activePart.partId)) {\r\n this.props.setCabinetNavigationFilterCompleted(true);\r\n } else if (countertopPartIds.includes(this.props.activePart.partId)) {\r\n this.props.setCountertopNavigationFilterCompleted(true);\r\n }\r\n };\r\n\r\n getAvailableSteps = () => {\r\n let wizardButtons = [];\r\n switch (this.props.activePart.partId) {\r\n case \"top_cabinet\":\r\n case \"bottom_cabinet\":\r\n wizardButtons = CABINET_WIZARD_BUTTONS.filter(wizardButton => {\r\n if (wizardButton.buttonId === \"all_products\") {\r\n return this.props.isMobile\r\n }\r\n return wizardButton.buttonId !== \"inlay_type\"\r\n });\r\n break;\r\n case \"countertop\":\r\n case \"edge_profile\":\r\n case \"backsplash\":\r\n wizardButtons = COUNTERTOP_WIZARD_BUTTONS;\r\n break;\r\n case \"center_island_countertop\":\r\n case \"center_island_edge\":\r\n wizardButtons = COUNTERTOP_WIZARD_BUTTONS.slice(0, 4);\r\n break;\r\n }\r\n return wizardButtons;\r\n };\r\n\r\n setFeatureWizardStep = (nextStepIndex, disabled = false, lastStep) => {\r\n\r\n if (disabled) {\r\n return false;\r\n }\r\n const availableSteps = this.getAvailableSteps();\r\n if (lastStep) {\r\n this.exitFeatureWizard();\r\n } else {\r\n this.props.setActiveNavigationFilter(availableSteps[nextStepIndex].buttonId);\r\n this.props.setActiveNavigationFilterStepIndex(nextStepIndex);\r\n }\r\n const commonView = (this.props.windowWidth < 991) ? 4 : 3;\r\n const buttonId = availableSteps[nextStepIndex].buttonId;\r\n if (buttonId === COUNTERTOP_WIZARD_BUTTONS[2].buttonId) {\r\n this.props.setNavigationViewType(2)\r\n } else if (this.props.navigationViewType !== commonView) {\r\n this.props.setNavigationViewType(commonView)\r\n }\r\n if (buttonId !== COUNTERTOP_WIZARD_BUTTONS[2].buttonId) {\r\n this.props.setSelectedFilters([]); // reset filters on finish filters\r\n }\r\n };\r\n\r\n render() {\r\n const availableSteps = this.getAvailableSteps();\r\n const currentActiveIndex = this.props.activeNavigationFilterStepIndex;\r\n\r\n const firstStepIsActive = currentActiveIndex === 0;\r\n const lastStepIsActive = currentActiveIndex === availableSteps.length - 1;\r\n\r\n const cabinetNavigationFilterCompleted = this.props.isMobile && this.props.cabinetNavigationFilterCompleted && (\r\n this.props.activePart.partId === \"top_cabinet\" || this.props.activePart.partId === \"bottom_cabinet\"\r\n );\r\n // const countertopNavigationFilterCompleted = this.props.isMobile && this.props.countertopNavigationFilterCompleted && (\r\n // this.props.activePart.partId === \"countertop\" || this.props.activePart.partId === \"center_island_countertop\"\r\n // );\r\n\r\n const countertopWizardPartIds = [\"countertop\", \"center_island_countertop\", \"edge_profile\", \"center_island_edge\", \"backsplash\"];\r\n const isCountertopWizard = countertopWizardPartIds.includes(this.props.activePart.partId);\r\n\r\n return (\r\n
    \r\n {this.props.isMobile ? null : (\r\n
    \r\n \r\n {availableSteps[currentActiveIndex]\r\n ? `Select a ${availableSteps[currentActiveIndex].text} for your ${this.props.activePart.partName}.`\r\n : null}\r\n \r\n {isCountertopWizard ? null : }\r\n
    \r\n )}\r\n
    \r\n {cabinetNavigationFilterCompleted ? null : (\r\n
    this.setFeatureWizardStep(currentActiveIndex - 1, firstStepIsActive)}>\r\n \r\n
    \r\n )}\r\n
      \r\n {availableSteps.map((wizardButton, index) => {\r\n const disabled = false;\r\n const buttonIcon = isCountertopWizard && wizardButton.buttonId === \"all_products\" ? \"stones\" : wizardButton.buttonId;\r\n return (\r\n
    • this.setFeatureWizardStep(index, disabled)}>\r\n {wizardButton.text}\r\n
    • \r\n )\r\n })}\r\n
    \r\n {cabinetNavigationFilterCompleted ? null : (\r\n
    this.setFeatureWizardStep(\r\n currentActiveIndex + 1,\r\n lastStepIsActive && isCountertopWizard,\r\n lastStepIsActive && !isCountertopWizard\r\n )}>\r\n \r\n \r\n \r\n
    \r\n )}\r\n
    \r\n
    \r\n )\r\n }\r\n}\r\n\r\n\r\nconst mapStateToProps = (store) => ({\r\n activeNavigationFilter: store.navigationState.activeNavigationFilter,\r\n activeNavigationFilterStepIndex: store.navigationState.activeNavigationFilterStepIndex,\r\n cabinetNavigationFilterCompleted: store.navigationState.cabinetNavigationFilterCompleted,\r\n countertopNavigationFilterCompleted: store.navigationState.countertopNavigationFilterCompleted,\r\n navigationViewType: store.navigationState.navigationViewType,\r\n windowWidth: store.serverState.windowWidth,\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n setActiveNavigationFilter,\r\n setActiveNavigationFilterStepIndex,\r\n setCabinetNavigationFilterCompleted,\r\n setCountertopNavigationFilterCompleted,\r\n setNavigationViewType,\r\n setSelectedFilters\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(NavigationFiltersSteps);\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport $ from 'jquery';\r\n\r\nimport Navigation from \"./navigation\";\r\nimport {ContentType, PartMenuType} from \"../constants\";\r\nimport MobileNavigationBodyNew from './mobile/mobileNavigationBodyNew';\r\nimport ActionTypes from \"../../../misc/actionTypes\";\r\nimport SelectionMobileViewSwitchers from './mobile/selectionMobileViewSwitchers';\r\nimport FeatureWizard from \"./featureWizard/featureWizard\";\r\nimport Analytics from \"../../../analytics\";\r\nimport {BACKSPLASH_TYPES, COUNTERTOP_WIZARD_BUTTONS} from \"../../kvComponent/core/constants\";\r\nimport MobileParentNavigationItems from \"./mobileParentNavigationItems\";\r\n\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\nimport BacksplashSelect from \"../../selectionWindow/backsplashSelect\";\r\nimport {getCommonVisualizerType} from \"../../../config\";\r\nimport LayoutNavigationItem from \"../layoutNavigationItem\";\r\nimport {getAvailableLayouts, getSideBarSubParts} from \"./navUtils\";\r\n\r\nexport default class MobileNavigationCommon extends Navigation {\r\n\r\n static propTypes = {\r\n changeMessageBoxState: PropTypes.func.isRequired,\r\n resetEverything: PropTypes.func.isRequired,\r\n goToMaterialsInfo: PropTypes.func,\r\n setCanvasClass: PropTypes.func,\r\n canvasId: PropTypes.string,\r\n userIsLoggedIn: PropTypes.bool,\r\n toggleUserPopup: PropTypes.func,\r\n setActiveFeature: PropTypes.func,\r\n activeFeature: PropTypes.object,\r\n fabricatorSettings: PropTypes.object,\r\n isPhoneNumberValidated: PropTypes.bool,\r\n setDemoPointClicked: PropTypes.func\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state.render = true;\r\n this.state.searchInputFocused = false;\r\n }\r\n\r\n componentDidMount() {\r\n $(document).on(ActionTypes.OPEN_MOBILE_NAVIGATION, this.openMobileMenu);\r\n $(document).on(ActionTypes.CHANGE_MOBILE_MENU_CONTENT_TYPE, (event, contentType) => {\r\n this.handleChangeContentType(contentType, true);\r\n });\r\n this.props.setNavigationViewType(4);\r\n this._componentDidMount();\r\n }\r\n\r\n componentWillReceiveProps(nextProps) {\r\n const layout = getCurrentLayout();\r\n if (!this.state.designNavigationItems || !this.state.designNavigationItems.length) {\r\n this.setState({designNavigationItems: layout.designNavigationItems()});\r\n }\r\n if (nextProps.filterGroups.length) {\r\n let updateComponent = false;\r\n if (nextProps.filterGroups.length === this.props.filterGroups.length) {\r\n updateComponent = nextProps.filterGroups.some((filter, index) => {\r\n return filter.filterId !== this.props.filterGroups[index].filterId\r\n || filter.filterGroupId !== this.props.filterGroups[index].filterGroupId\r\n });\r\n }\r\n if (updateComponent) {\r\n this.reRenderComponent();\r\n }\r\n }\r\n if (nextProps.activeNavigationFilter !== this.props.activeNavigationFilter\r\n && COUNTERTOP_WIZARD_BUTTONS.some(btn => btn.buttonId === nextProps.activeNavigationFilter)) {\r\n if (this.state.parentNavigationItem && (\r\n this.state.parentNavigationItem.part.partName === \"Countertop\"\r\n || this.state.parentNavigationItem.part.partName === \"CenterIsland\"\r\n )) {\r\n const subParts = this.state.parentNavigationItem.part.subParts();\r\n let subPart = null;\r\n switch (nextProps.activeNavigationFilter) {\r\n case COUNTERTOP_WIZARD_BUTTONS[0].buttonId:\r\n case COUNTERTOP_WIZARD_BUTTONS[1].buttonId:\r\n case COUNTERTOP_WIZARD_BUTTONS[2].buttonId:\r\n subPart = (this.state.parentNavigationItem.part.partName === \"Countertop\")\r\n ? subParts.find(sPart => sPart.part.partId === \"countertop\")\r\n : subParts.find(sPart => sPart.part.partId === \"center_island_countertop\");\r\n break;\r\n case COUNTERTOP_WIZARD_BUTTONS[4].buttonId:\r\n subPart = (this.state.parentNavigationItem.part.partName === \"Countertop\")\r\n ? subParts.find(sPart => sPart.part.partId === \"countertop\")\r\n : subParts.find(sPart => sPart.part.partId === \"center_island_countertop\");\r\n break;\r\n case COUNTERTOP_WIZARD_BUTTONS[3].buttonId:\r\n subPart = (this.state.parentNavigationItem.part.partName === \"Countertop\")\r\n ? subParts.find(sPart => sPart.part.partId === \"edge_profile\")\r\n : subParts.find(sPart => sPart.part.partId === \"center_island_edge\");\r\n break;\r\n }\r\n if (subPart) {\r\n this.handleSubPartClick(subPart, nextProps.activeNavigationFilter)\r\n }\r\n }\r\n }\r\n this._componentWillReceiveProps(nextProps)\r\n }\r\n\r\n reRenderComponent = () => {\r\n this.setState({\r\n render: false\r\n }, () => {\r\n this.setState({\r\n render: true\r\n })\r\n })\r\n };\r\n\r\n parentCategoryClick = (parentItemText) => {\r\n const clickedParent = this.state.designNavigationItems.find(item => item.text === parentItemText);\r\n if (clickedParent.part.menuType === PartMenuType.Simple) {\r\n this.triggerOpenNavigationMenu(clickedParent.text);\r\n } else {\r\n const firstChild = getSideBarSubParts(clickedParent.part)[0];\r\n if (firstChild) {\r\n this.triggerOpenNavigationMenu(firstChild.text, clickedParent.text);\r\n }\r\n }\r\n if (parentItemText === \"Floor\") {\r\n $('html, body').animate({scrollTop: document.body.scrollHeight}, 800);\r\n } else if (parentItemText === \"Ceiling\") {\r\n $('html, body').animate({scrollTop: 0}, 800);\r\n }\r\n };\r\n\r\n openMobileMenu = () => {\r\n // $(window).trigger(ActionTypes.SET_CANVAS_SCALE);\r\n this.setState({\r\n showNavigation: true,\r\n contentType: ContentType.Design,\r\n contextMenuOpen: false,\r\n hoveredLayer: {}\r\n }, () => {\r\n this.menuOpened();\r\n setTimeout(() => {\r\n $(document).on('click', this.handleWrapperBlur);\r\n window.mobileMenuOpened = true;\r\n $(window).trigger(ActionTypes.DISABLE_PINCH_ZOOM);\r\n document.removeEventListener('click', this.handleContextMenuBlur);\r\n }, 0)\r\n });\r\n };\r\n\r\n scrollContentToTop = () => {\r\n const listContainer = document.querySelector('.menu-body__content');\r\n if (listContainer) {\r\n listContainer.scrollTop = 0;\r\n }\r\n };\r\n\r\n handleWrapperBlur = (e) => {\r\n const navClick = e.target.closest('[class*=\"menu\"]');\r\n const messageBoxClick = e.target.closest('[class*=\"message\"]');\r\n const lockClick = e.target.closest('[class*=\"lock\"]');\r\n const userPopupClick = e.target.closest('[class*=\"user-popup\"]');\r\n const twoFactorPopup = e.target.closest('[class*=\"TwoFactorAuth-popup\"]');\r\n const countryList = e.target.closest('[class*=\"country\"]');\r\n const searchClick = e.target.closest('[class*=\"search\"]');\r\n const wizardClick = e.target.closest('[class*=\"wiz\"]');\r\n const loadingClick = e.target.closest('[class*=\"full-screen-wrapper\"]');\r\n if (!navClick && !messageBoxClick && !searchClick && !lockClick && !userPopupClick && !twoFactorPopup\r\n && !countryList && !loadingClick && !window.touchMove\r\n && !wizardClick && !window.canvasIsDragging && document.body.classList.contains('body--bv')) {\r\n this.closeNavigation();\r\n }\r\n };\r\n\r\n closeNavigation = () => {\r\n if (!window.canvasIsDragging) {\r\n this.props.setCanvasClass('none', true);\r\n }\r\n this.setState({\r\n showNavigation: false,\r\n showFilterSelection: false,\r\n showerWallWizardGroupsSelected: true,\r\n }, () => {\r\n setTimeout(() => {\r\n this.setState({\r\n contentType: ContentType.None,\r\n searchText: \"\",\r\n showFilterSelection: true,\r\n showerWallWizardGroupsSelected: false,\r\n });\r\n this.props.setActiveFeature(null);\r\n // this.resetWizardSteps(); // after wizard unmounts\r\n }, 500);\r\n $(document).off('click', this.handleWrapperBlur);\r\n window.mobileMenuOpened = false;\r\n $(window).trigger(ActionTypes.ENABLE_PINCH_ZOOM);\r\n });\r\n };\r\n\r\n handleContextMenuBlur = (e) => {\r\n const navClick = e.target.closest('[class*=\"contextmenu\"]');\r\n // console.log('blur');\r\n if (!navClick && !window.touchMove) {\r\n this.setState({\r\n contextMenuOpen: false,\r\n hoveredLayer: {}\r\n }, () => {\r\n document.removeEventListener('click', this.handleContextMenuBlur);\r\n });\r\n }\r\n };\r\n\r\n handleChangeContentType = (contentType, resetNav = false) => {\r\n this.setState({\r\n contentType,\r\n parentNavigationItem: resetNav ? null : this.state.parentNavigationItem,\r\n childNavigationItem: resetNav ? null : this.state.childNavigationItem,\r\n });\r\n if (contentType === ContentType.Design) {\r\n this.setNewActiveFeature();\r\n }\r\n };\r\n\r\n /* start oldNav methods */\r\n\r\n scrollToDefault = (item) => {\r\n if (!window.canvasIsDragging) {\r\n this.props.setCanvasClass(item.text.toLowerCase().replace(/ /g, \"-\"));\r\n }\r\n this.scrollContentToTop();\r\n };\r\n\r\n /* end oldNav methods */\r\n\r\n resetEverything = () => {\r\n this.props.resetEverything();\r\n this.closeNavigation();\r\n setTimeout(() => {\r\n this.resetWizardSteps(); // after wizard unmounts\r\n }, 300)\r\n };\r\n\r\n menuOpened = () => {\r\n this.scrollContentToTop();\r\n this.setNewActiveFeature();\r\n this._menuOpened();\r\n };\r\n\r\n handleContextMenuClick = (menuItem) => {\r\n const layout = getCurrentLayout();\r\n if (!this.state.showNavigation) {\r\n\r\n let clickedParent = \"\", clickedButton = \"\";\r\n const isBacksplash = BACKSPLASH_TYPES.some(bType => bType === menuItem.text);\r\n\r\n if (menuItem.text === \"Edge Profile\") {\r\n if (this.props.setActiveNavigationFilter) {\r\n this.props.setActiveNavigationFilter(COUNTERTOP_WIZARD_BUTTONS[3].buttonId); // set active navigation filter\r\n this.props.setActiveNavigationFilterStepIndex(3);\r\n }\r\n } else if (isBacksplash) {\r\n const wallsParent = layout.parts[\"Walls\"];\r\n const backsplashSubPart = wallsParent.subParts().find(subPart => subPart.part.partId === \"backsplash\");\r\n this.checkIfAllFeaturesReceived(backsplashSubPart);\r\n const featureToClick = backsplashSubPart.part.getFeatureByBacksplashType(menuItem.text);\r\n // console.log(\"featureToClick\", featureToClick);\r\n if (featureToClick) {\r\n featureToClick.handleClick();\r\n }\r\n clickedParent = \"Walls\";\r\n clickedButton = \"Backsplash\";\r\n\r\n if (this.props.setActiveNavigationFilter) {\r\n this.props.setActiveNavigationFilter(COUNTERTOP_WIZARD_BUTTONS[4].buttonId); // set active navigation filter\r\n this.props.setActiveNavigationFilterStepIndex(4);\r\n }\r\n\r\n }\r\n if (!isBacksplash) {\r\n clickedButton = menuItem.text;\r\n clickedParent = menuItem.subMenuParent || this.state.contextMenuOpen;\r\n }\r\n\r\n if (clickedParent && clickedParent.module) {\r\n clickedParent = \"Cabinet\"\r\n }\r\n\r\n if (!window.canvasIsDragging) {\r\n this.props.setCanvasClass(clickedParent.toLowerCase().replace(/ /g, \"-\"));\r\n }\r\n\r\n if (clickedParent === \"Walls\" && (clickedButton === \"Left Shower Wall\" || clickedButton === \"Pony Wall\")) {\r\n this.ponyWallAndLeftWallClick(menuItem);\r\n }\r\n\r\n this.setState({\r\n showNavigation: true,\r\n contentType: ContentType.Design,\r\n contextMenuOpen: false,\r\n hoveredLayer: {}\r\n }, () => {\r\n this.menuOpened();\r\n this.triggerOpenNavigationMenu(clickedButton, clickedParent);\r\n $(document).on('click', this.handleWrapperBlur);\r\n window.mobileMenuOpened = true;\r\n $(window).trigger(ActionTypes.DISABLE_PINCH_ZOOM);\r\n $(document).off('click', this.handleContextMenuBlur);\r\n if (menuItem.clickFeature && !isBacksplash) {\r\n const featureToClick = menuItem.part.features.find(feature => feature.partName === menuItem.subMenuText);\r\n if (featureToClick) {\r\n featureToClick.handleClick();\r\n }\r\n }\r\n });\r\n }\r\n\r\n };\r\n\r\n getDisplayRoomContent = () => {\r\n let presets = this.checkedForLockedPresets();\r\n return (\r\n
    \r\n {presets.length ? (\r\n
      \r\n {presets.map((preset, index) => ( //\r\n
    • Analytics.sendClickEvent(\"default-preset-clicked-\" + index) && this.handleDefaultPresetClick(index, preset.presetIsLocked)}\r\n key={index}>\r\n
      \r\n \"item.type\"/\r\n
      \r\n
    • \r\n ))}\r\n
    \r\n ) : (\r\n

    No display room found

    \r\n )}\r\n
    \r\n )\r\n };\r\n\r\n contentDesignWizard = () => {\r\n const wizardGroups = this.state[this.getWizardGroupsByPartId(this.state.childNavigationItem.part.partId)];\r\n return (\r\n \r\n )\r\n };\r\n\r\n toggleSearchInputFocus = () => {\r\n this.setState({\r\n searchInputFocused: !this.state.searchInputFocused\r\n })\r\n };\r\n\r\n getFeatures = (layout) => {\r\n const parentItem = this.state.parentNavigationItem;\r\n const childItem = this.state.childNavigationItem;\r\n const currentParent = (parentItem && (parentItem.part.menuType === PartMenuType.Simple)) ? parentItem : childItem;\r\n if (!currentParent) {\r\n return []\r\n }\r\n let features = layout.designNavigationItems(currentParent, this.props.selectedFilters, this.state.searchText);\r\n return features\r\n };\r\n\r\n contentBody = (features, useWizard, useFilters, activePart, activeSubPart, filterSelectionHasValues, allFeaturesReceived) => {\r\n const {intl} = this.props;\r\n const layout = getCurrentLayout();\r\n const layoutNames = getAvailableLayouts();\r\n return (\r\n
    \r\n {this.state.contentType === ContentType.Design && activePart ? (\r\n
    \r\n \r\n {activeSubPart && activeSubPart.partId === \"backsplash\" && getCommonVisualizerType() === \"kitchen\" ? (\r\n
    \r\n \r\n
    \r\n ) : null}\r\n
    \r\n {activePart.menuType === PartMenuType.Complex && activePart.subTypes().length\r\n ? activePart.subTypes().map(subType => (\r\n \r\n )) : (\r\n 12 ? \" search-input--with-close\" : \"\")\r\n }\r\n value={this.state.searchText}\r\n onFocus={this.toggleSearchInputFocus}\r\n onBlur={this.toggleSearchInputFocus}\r\n onChange={this.handleSearchInputChange}\r\n placeholder={intl.formatMessage({id: \"mobileMenu.searchPlaceholder\"})}\r\n id=\"main-search\"\r\n />\r\n )}\r\n {this.state.searchText\r\n ?
    \r\n
    \r\n ) : null}\r\n \r\n {this.state.contentType === ContentType.Layout ? (\r\n
    \r\n
      \r\n {layoutNames.map(key => {\r\n return \r\n })}\r\n
    \r\n
    \r\n ) : null}\r\n {this.state.contentType === ContentType.Design ? (\r\n
    \r\n {this.state.parentNavigationItem ? (\r\n this.state.render ? (\r\n \r\n ) :
    \r\n ) : }\r\n
    \r\n ) : null}\r\n {this.state.contentType === ContentType.DisplayRoom ? this.getDisplayRoomContent() : null}\r\n {this.state.contentType === ContentType.Loading ? (\r\n
    \r\n ) : null}\r\n
    \r\n
    \r\n )\r\n };\r\n\r\n}\r\n","import React, {Component} from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {connect} from \"react-redux\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\n\r\nimport store from \"../../../../store\";\r\nimport * as actions from \"../../../../actions/actionFunctions\";\r\nimport UserLoginButton from \"../../../ui/userLoginButton\";\r\n\r\nimport {ContentType} from \"../../constants\";\r\nimport Analytics from \"../../../../analytics\";\r\nimport HomeMenu from \"../../../common/homeMenu\";\r\nimport ScheduleButton from \"../../../common/scheduleButton\";\r\nimport Config from \"../../../../config\";\r\nimport {getShowOtherLayouts} from \"../navUtils\";\r\n\r\nclass MobileNavigationButtons extends Component {\r\n\r\n static propTypes = {\r\n handleChangeContentType: PropTypes.func.isRequired,\r\n handleSearchInputChange: PropTypes.func.isRequired,\r\n resetEverything: PropTypes.func.isRequired,\r\n contentType: PropTypes.number.isRequired,\r\n searchText: PropTypes.string,\r\n parentNavigationItem: PropTypes.object,\r\n canvasId: PropTypes.string,\r\n userIsLoggedIn: PropTypes.bool,\r\n toggleUserPopup: PropTypes.func,\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n designNavigationOpened: ''\r\n }\r\n }\r\n\r\n handleDropDownButtonClick = (type) => {\r\n Analytics.sendClickEvent('mobile-' + type + '-button-clicked');\r\n this.setState({\r\n designNavigationOpened: this.state.designNavigationOpened === type ? '' : type\r\n }, () => {\r\n this.state.designNavigationOpened\r\n ? window.addEventListener('click', this.handleDropdownWrapperBlur)\r\n : window.removeEventListener('click', this.handleDropdownWrapperBlur)\r\n })\r\n };\r\n\r\n handleResetButtonClick = () => {\r\n Analytics.sendClickEvent(\"mobile-nav-reset-button-question\");\r\n this.props.changeMessageBoxState({\r\n visible: true,\r\n message: \"messageBox.resetVisualizerState\",\r\n buttons: [{\r\n text: \"messageBox.buttonNo\",\r\n color: \"blue\",\r\n click: () => {\r\n Analytics.sendClickEvent(\"mobile-nav-reset-button-no\");\r\n this.props.changeMessageBoxState({visible:false});\r\n }\r\n },{\r\n text: \"messageBox.buttonYes\",\r\n color: \"green\",\r\n click: () => {\r\n Analytics.sendClickEvent(\"mobile-nav-reset-button-yes\");\r\n this.props.changeMessageBoxState({visible:false});\r\n setTimeout(() => {\r\n this.setState({\r\n designNavigationOpened: ''\r\n });\r\n this.props.resetEverything();\r\n }, 500);\r\n }\r\n }]\r\n });\r\n };\r\n\r\n changeContentType = (contentType) => {\r\n this.props.handleChangeContentType(contentType);\r\n this.resetDropDown();\r\n };\r\n\r\n resetDropDown = () => {\r\n this.setState({\r\n designNavigationOpened: ''\r\n }, () => {\r\n window.removeEventListener('click', this.handleDropdownWrapperBlur)\r\n })\r\n };\r\n\r\n handleDisplayRoomClick = () => {\r\n Analytics.sendClickEvent('mobile-navigation-display-room-button');\r\n this.changeContentType(ContentType.DisplayRoom);\r\n this.resetDropDown();\r\n };\r\n\r\n handleDropdownWrapperBlur = (e) => {\r\n const newButtonClick = e.target.closest('.menu-header__right-button');\r\n const dropDownClick = e.target.closest('[class*=\"menu-dropdown\"]');\r\n const userPopupClick = e.target.closest('[class*=\"user-popup\"]');\r\n if (!newButtonClick && !dropDownClick && !userPopupClick) {\r\n this.resetDropDown();\r\n }\r\n };\r\n\r\n handleFiltersClick = () => {\r\n Analytics.sendClickEvent('mobile-show-filters');\r\n store.dispatch(actions.showFiltersIfHidden('mobileNavigation'));\r\n };\r\n\r\n render() {\r\n const {intl} = this.props;\r\n const dashboardFramed = Config.isVisualizerManagement();\r\n const fabricatorSettings = this.props.fabricatorSettings;\r\n let showOtherLayouts = getShowOtherLayouts(fabricatorSettings);\r\n\r\n return (\r\n
    \r\n {this.props.mobileNav.length && this.props.windowWidth < 991 ? (\r\n \r\n ) : null}\r\n {this.props.parentNavigationItem ? (\r\n \r\n ) : null}\r\n {/*this.props.parentNavigationItem ? (\r\n \r\n ) : null*/}\r\n {dashboardFramed ? null : }\r\n \r\n
    \r\n {this.state.designNavigationOpened === 'menu' ? (\r\n
      \r\n
    • Analytics.sendClickEvent('menu-option-clicked-design') && this.changeContentType(ContentType.Design)}>\r\n \r\n
    • \r\n
    • \r\n \r\n
    • \r\n {/*
    • Quoted Items
    • */}\r\n {showOtherLayouts ? (\r\n
    • Analytics.sendClickEvent('menu-option-clicked-roomLayout') && this.changeContentType(ContentType.Layout)}>\r\n \r\n
    • \r\n ) : null}\r\n
    • \r\n \r\n
    \r\n ) : null}\r\n {this.state.designNavigationOpened === 'search' ? (\r\n
    \r\n \r\n {this.props.searchText ? (\r\n
    \r\n ) : null}\r\n
    \r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => ({\r\n mobileNav: store.navigationState.mobileNav,\r\n windowWidth: store.serverState.windowWidth,\r\n fabricatorSettings: store.fabricatorState.settings,\r\n selectedFilters: store.filterState.selectedFilters,\r\n});\r\n\r\nconst mapDispatchToProps = {};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(MobileNavigationButtons)\r\n)\r\n","import React, {Component} from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport Analytics from \"../../../../analytics\";\r\n\r\nexport default class MobileNavigationAllWallsCheckbox extends Component {\r\n\r\n static propTypes = {\r\n parentNavigationItem: PropTypes.instanceOf(DesignNavigationItem).isRequired,\r\n toggleApplyWallsCheckbox: PropTypes.func.isRequired,\r\n };\r\n\r\n allWallsClick = () => {\r\n Analytics.sendClickEvent('all-walls-toggled');\r\n this.props.toggleApplyWallsCheckbox();\r\n setTimeout(() => {\r\n this.forceUpdate();\r\n }, 0)\r\n };\r\n\r\n render() {\r\n return (\r\n \r\n )\r\n }\r\n}\r\n","import React from \"react\";\r\nimport {connect} from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport ShareButton from './shareButton';\r\n// import { downloadCanvasImageById } from \"../misc/utils\";\r\nimport HomeMenu from \"./homeMenu\";\r\nimport Analytics from \"./../../analytics\";\r\nimport {showSchedulerPopup, toggleUserPopup} from \"../../actions/actionFunctions\";\r\nimport SaveButton from \"./saveButton\";\r\nimport QuoteButton from \"./quoteButton\";\r\nimport DesignButton from \"./designButton\";\r\nimport {UserPopupTypes} from \"../visComponents/constants\";\r\nimport ScheduleButton from \"./scheduleButton\";\r\nimport MinimizeButton from \"./minimizeButton\";\r\nimport {getCurrentLayout} from \"../appLayout\";\r\nimport {renderMessagePopup} from \"../../api/api-popups\";\r\nimport {saveQuote} from \"../../api/server-api\";\r\nimport Config from \"../../config\";\r\nimport NavigationRequests from \"../visComponents/navigation/navigationRequests\";\r\nimport {loaderDisable, loaderEnable} from \"../ui/loaderView\";\r\nimport {downloadCSV} from \"../../misc/downloadCSV\";\r\nimport PingPilotButton from \"../visComponents/pingPilotButton\";\r\n\r\nclass MainButtons extends NavigationRequests {\r\n\r\n static propTypes = {\r\n goBack: PropTypes.func,\r\n goToCart: PropTypes.func,\r\n changeMessageBoxState: PropTypes.func.isRequired,\r\n resetEverything: PropTypes.func.isRequired,\r\n canvasId: PropTypes.string,\r\n };\r\n\r\n handleResetButtonClick = () => {\r\n Analytics.sendClickEvent(\"reset-quote-question\");\r\n this.props.changeMessageBoxState({\r\n visible: true,\r\n message: \"messageBox.resetTitle\",\r\n buttons: [{\r\n text: \"messageBox.buttonNo\",\r\n color: \"blue\",\r\n click: () => {\r\n Analytics.sendClickEvent(\"reset-quote-cancel\");\r\n this.props.changeMessageBoxState({visible: false});\r\n }\r\n }, {\r\n text: \"messageBox.buttonYes\",\r\n color: \"green\",\r\n click: () => {\r\n Analytics.sendClickEvent(\"reset-quote-yes\");\r\n this.props.changeMessageBoxState({visible: false});\r\n this.props.resetEverything();\r\n }\r\n }]\r\n });\r\n };\r\n\r\n handleLoginButtonClick = (userPopupType) => {\r\n Analytics.sendClickEvent(\"main-login-button\");\r\n this.props.toggleUserPopup({\r\n userPopupOpened: true,\r\n userPopupType\r\n });\r\n };\r\n\r\n handleLogOutButtonClick = () => {\r\n Analytics.sendClickEvent(\"main-logout-button-question\");\r\n this.props.changeMessageBoxState({\r\n visible: true,\r\n message: \"messageBox.logoutTitle\",\r\n buttons: [{\r\n text: \"messageBox.buttonNo\",\r\n color: \"blue\",\r\n click: () => {\r\n Analytics.sendClickEvent(\"main-logout-button-no\");\r\n this.props.changeMessageBoxState({visible: false});\r\n }\r\n }, {\r\n text: \"messageBox.buttonYes\",\r\n color: \"green\",\r\n click: () => {\r\n Analytics.sendClickEvent(\"main-logout-button-yes\");\r\n this.props.changeMessageBoxState({visible: false});\r\n this.props.toggleUserPopup({\r\n userPopupOpened: false,\r\n userIsLoggedIn: false,\r\n isPhoneNumberValidated: false\r\n });\r\n }\r\n }]\r\n });\r\n };\r\n\r\n handleScheduleButtonClick = () => {\r\n const fabricatorSettings = this.props.fabricatorData.settings;\r\n Analytics.sendClickEvent('schedule-appointment-main-button');\r\n if (!this.props.isPhoneNumberValidated) {\r\n this.handleLoginButtonClick(UserPopupTypes.Schedule);\r\n return;\r\n }\r\n if (fabricatorSettings.enableCalendarForScheduling) {\r\n this.props.showSchedulerPopup(true)\r\n } else {\r\n saveQuote({submit: true, quoteRequestType: QuoteRequestType.ScheduleAnAppointment})\r\n .then(() => {\r\n renderMessagePopup(\"userPopup.messageBox.appointmentRequested\");\r\n });\r\n }\r\n };\r\n\r\n getAllFeatures = () => {\r\n const layout = getCurrentLayout();\r\n const parents = layout.getFeatures(true); // we need other groups too\r\n parents.forEach((parent) => {\r\n parent.relatedItems.forEach(async relItem => {\r\n await this.checkIfAllFeaturesReceived({part: relItem});\r\n })\r\n });\r\n };\r\n\r\n consoleTableAllFeatures = async () => {\r\n loaderEnable();\r\n const layout = getCurrentLayout();\r\n // console.log(\"Active Features:\", layout.getActiveFeatures(true));\r\n // console.log(\"layout.getActiveFeaturesAsObject:\", JSON.stringify(layout.getActiveFeaturesAsObject(false, true, true)));\r\n const parents = layout.getFeatures(true); // we need other groups too\r\n // console.log(\"go\");\r\n await this.getAllFeatures();\r\n // console.log(\"stop\");\r\n let allFeatures = [\r\n [\"groupName\", \"sharedFeatureName\", \"customDisplayName\", \"metaData\", \"filters\"]\r\n ];\r\n parents.forEach((parent) => {\r\n parent.relatedItems.forEach(relItem => {\r\n for (let i = 0; i <= relItem.features.length; i++) {\r\n const feature = relItem.features[i];\r\n if (feature && allFeatures.every(f => (f.sharedFeatureName !== feature.dbFeature.sharedFeatureName)\r\n || (f.groupName !== feature.dbFeature.groupName))) {\r\n allFeatures.push([\r\n feature.dbFeature.groupName,\r\n feature.dbFeature.sharedFeatureName,\r\n feature.dbFeature.customDisplayName,\r\n JSON.stringify(feature.dbFeature.metaData),\r\n JSON.stringify(feature.dbFeature.filters)\r\n ])\r\n }\r\n }\r\n })\r\n });\r\n console.log(allFeatures);\r\n loaderDisable();\r\n downloadCSV(allFeatures);\r\n }\r\n\r\n consoleActiveFeatures = () => {\r\n const layout = getCurrentLayout();\r\n console.log(\"Active Features:\", layout.getActiveFeatures(true));\r\n console.log(\"Active Lead Features:\", layout.getActiveNames());\r\n console.log(\"layout.getActiveFeaturesAsObject:\", JSON.stringify(layout.getActiveFeaturesAsObject(false, true, true)));\r\n this.consoleTableAllFeatures();\r\n }\r\n\r\n render() {\r\n const fabricatorSettings = this.props.fabricatorData.settings;\r\n const dashboardFramed = Config.isVisualizerManagement();\r\n const allPagesEnabled = !document.kvConfig.visualizerOnly;\r\n const quoteEnabled = fabricatorSettings.enableQuote;\r\n return (\r\n
    \r\n {this.props.windowWidth < 991 ? (\r\n \r\n ) : null}\r\n {this.props.windowWidth < 991 || dashboardFramed || (this.props.fabricatorData.checkout && this.props.goToCart && allPagesEnabled) ? null : (\r\n \r\n )}\r\n {quoteEnabled ? : null}\r\n \r\n \r\n {(fabricatorSettings.leadCapture && !(document.kvConfig.isBackend && document.kvConfig.jobId)) ? (\r\n \r\n ) : null}\r\n {Config.isDevMode() ? (\r\n \r\n ) : null}\r\n {(fabricatorSettings.showPricing) && this.props.goToCart && allPagesEnabled ? (\r\n \r\n ) : null}\r\n {fabricatorSettings.enableSharing && !dashboardFramed ? : null }\r\n \r\n {allPagesEnabled ? : null}\r\n {this.props.mobileNav.length && this.props.windowWidth >= 991 ? : null}\r\n {document.kvConfig.jobId ?
    : null}\r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n mobileNav: store.navigationState.mobileNav,\r\n cartItems: store.cartState.cartItems,\r\n windowWidth: store.serverState.windowWidth,\r\n fabricatorData: store.fabricatorState,\r\n isPhoneNumberValidated: store.userState.isPhoneNumberValidated,\r\n userIsLoggedIn: store.userState.userIsLoggedIn,\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, {\r\n showSchedulerPopup,\r\n toggleUserPopup\r\n})(MainButtons);\r\n","import PropTypes from 'prop-types';\r\nimport uuid from 'uuid';\r\nimport {hashHistory} from \"react-router\";\r\nimport $ from \"jquery\";\r\n\r\nimport {loaderDisable, loaderEnable} from \"../ui/loaderView\";\r\nimport {getJobIdPreset, getQtCategories, saveQuote} from \"../../api/server-api\";\r\nimport ActionTypes from \"../../misc/actionTypes\";\r\nimport JsonApi from \"../../api/jsonApi\";\r\nimport NavigationRequests from \"./navigation/navigationRequests\";\r\nimport Config, {\r\n // getCommonVisualizerType,\r\n IS_LIXIL_UI,\r\n IS_LOOK_JOURNEY, IS_OFFLINE_MODE,\r\n IS_QKB_UI\r\n} from \"../../config\";\r\nimport {isNewlyCreatedJob, parseJobIdResponse} from \"../../api/parseResponse\";\r\nimport {getImagePromiseFromLayout} from \"../../misc/getCanvasImageFromLayout\";\r\nimport {createCartList, getLocalStorageItem, getParsedLookUrl} from \"../look/lookNavigation/lookFunctions\";\r\nimport {getDefaultPresetByLook, saveQuoteAndShare} from \"../look/lookNavigation/lookFunctions2\";\r\nimport store from \"../../store\";\r\nimport {GROHE_ON_OPEN_ACTION} from \"../look/iframeIntegration\";\r\nimport {addToCart} from \"../../actions/actionFunctions\";\r\n// import {setContractBlob} from \"../../actions/contractsActions\";\r\nimport {setAllowRouting} from \"../../actions/serverFunctions\";\r\nimport {renderErrorPopup} from \"../../api/api-popups\";\r\nimport {updatePresetRoomLayout} from \"../../misc/presetsFunctions\";\r\nimport {setShopPageLoaded} from \"../../actions/shopFunctions\";\r\nimport {showWizardInsteadOfQT} from \"../look/lookNavigation/lookMain/lookWizard/lookWizardFunctions\";\r\nimport {setAssignQuoteOfflineData} from \"../../actions/assignPopupFunctions\";\r\nimport {getAdditionalFeaturesOnScroll} from \"../../api/look-api\";\r\nimport {VISUALIZER_MANAGEMENT_ACTIONS} from \"../../misc/constants\";\r\nimport {parseWizardResponse} from \"../../misc/loadVisualizer\";\r\nimport {LOCAL_STORAGE_KEYS, LOOK_OVERLAYS} from \"../look/core/constants\";\r\nimport {setLookOverlayOpened} from \"../../actions/lookFunctions\";\r\nimport {updateCurrentQuote} from \"../../misc/quotesFunctions\";\r\nimport {getContracts, setContractBlobs, shouldUseContractSigning} from \"../popups/contractSign/contractsFunctions\";\r\nimport {getOfflineReceiptImages} from \"../../actions/printFunctions\";\r\n// import {setUseFeaturesLightRequest} from \"../../actions/navigationFunctions\";\r\n\r\nexport default class Visualizer extends NavigationRequests {\r\n\r\n static defaultProps = {\r\n useMouseHovering: true,\r\n useTouchZoom: true,\r\n };\r\n\r\n static propTypes = {\r\n toggleUserPopup: PropTypes.func,\r\n cartItems: PropTypes.array,\r\n useMouseHovering: PropTypes.bool,\r\n useTouchZoom: PropTypes.bool,\r\n userIsLoggedIn: PropTypes.bool,\r\n isPhoneNumberValidated: PropTypes.bool,\r\n handleToggleFeatureInfo: PropTypes.func,\r\n jobId: PropTypes.number,\r\n mobileNav: PropTypes.array,\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n this.imageCanvas = null;\r\n this.navBar = null;\r\n this.loadByTheDefault = null;\r\n this.needToSaveQuote = false;\r\n this.state = {\r\n messageBoxState: {\r\n visible: false\r\n },\r\n canvasId: uuid.v4(),\r\n lockedView: false,\r\n activeFeature: null,\r\n demoPointClicked: false,\r\n allowRouting: false,\r\n };\r\n // if (this.props.visualizersLoaded.includes(this.layout.visualizerType)) {\r\n // loaderEnable()\r\n // }\r\n if (IS_LIXIL_UI) { // temporary removed because of additional rooms loading\r\n loaderEnable();\r\n }\r\n }\r\n\r\n setSubscribers() {\r\n $(window).on(ActionTypes.CHANGE_LAYOUT, this.handleRefresh);\r\n $(window).on(ActionTypes.UPDATE_ALL_ITEMS, this.handleRefresh);\r\n $(window).on(ActionTypes.CANVAS_SCALE_CHANGED, this.canvasScaleChanged);\r\n }\r\n\r\n componentWillReceiveProps(nextProps) {\r\n if (nextProps.bvOpened && !this.props.bvOpened) {\r\n this.handleRefresh();\r\n if (IS_QKB_UI && !this.props.visualizerTutorialFinished && this.props.showVisualizerTutorial) {\r\n this.props.showVisualizerTutorial(true);\r\n }\r\n }\r\n if (!nextProps.showRestorePopup && this.props.showRestorePopup) {\r\n this.changeMessageBoxState({visible:false});\r\n try {\r\n window.localStorage.removeItem(this.layout.localStorageKey);\r\n } catch (ex) { console.log(\"localStorage exception\", ex); }\r\n }\r\n if (IS_QKB_UI && nextProps.initialFlowRoom && (nextProps.initialFlowRoom !== this.props.initialFlowRoom)) {\r\n this.tryToSetSelectedRoom()\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n $(window).off(ActionTypes.CHANGE_LAYOUT, this.handleRefresh);\r\n $(window).off(ActionTypes.UPDATE_ALL_ITEMS, this.handleRefresh);\r\n $(window).off(ActionTypes.CANVAS_SCALE_CHANGED, this.canvasScaleChanged);\r\n }\r\n\r\n shouldComponentUpdate() {\r\n return !window.requestInProcess\r\n }\r\n\r\n applyStoredItems = () => {\r\n loaderEnable();\r\n this.changeMessageBoxState({visible:false});\r\n try {\r\n const bvState = JSON.parse(window.localStorage.getItem(this.layout.localStorageKey));\r\n this.layout.setItemsFromBvState(bvState, true);\r\n } catch (ex) { console.log(\"applyStoredItems localStorage exception\", ex); }\r\n loaderDisable();\r\n };\r\n\r\n setIframeMessaging = () => {\r\n if (Config.isVisualizerManagement()) {\r\n window.addEventListener(\"message\", (event) => {\r\n if (event.data && (event.data.action === VISUALIZER_MANAGEMENT_ACTIONS.getState\r\n || event.data.action === VISUALIZER_MANAGEMENT_ACTIONS.checkState)) {\r\n setTimeout(() => {\r\n getImagePromiseFromLayout(this.layout)\r\n .then(response => {\r\n const bvState = this.layout.getActiveFeaturesAsObject(false, false, true);\r\n bvState.bv_screen = response;\r\n // console.log('bvState.bv_screen:', bvState.bv_screen);\r\n window.parent.postMessage({\r\n action: event.data.action,\r\n payload: bvState\r\n }, \"*\");\r\n })\r\n }, 0)\r\n }\r\n if (event.data && event.data.action === VISUALIZER_MANAGEMENT_ACTIONS.setState) {\r\n if ((document.kvConfig.visualizerType === \"bvLook\")) {\r\n event.data.bvState = updatePresetRoomLayout(event.data.bvState);\r\n console.log(\"applying new state...\", event.data.bvState);\r\n }\r\n this.layout.setItemsFromBvState(event.data.bvState);\r\n }\r\n });\r\n }\r\n\r\n if (window.parent) {\r\n window.parent.postMessage({\r\n action: VISUALIZER_MANAGEMENT_ACTIONS.visualizerIsLoaded,\r\n }, \"*\");\r\n }\r\n\r\n };\r\n\r\n canvasScaleChanged = (event, canvas_scale) => {\r\n if (canvas_scale !== 1) {\r\n this.setDemoPointClicked();\r\n $(window).off(ActionTypes.CANVAS_SCALE_CHANGED);\r\n }\r\n }\r\n\r\n async setVisualizerInfo(mainResponse, bvGroupsResponse, qtCategories, layoutTypes, userIsLoggedIn, savedTempData) {\r\n if (Config.isDevMode() || document.kvConfig.kioskMode) {\r\n console.log('mainResponse-->', mainResponse);\r\n if (mainResponse) {\r\n console.log('mainResponse features-->', mainResponse.features);\r\n }\r\n console.log('bvGroupsResponse-->', bvGroupsResponse);\r\n console.log('savedTempData-->', savedTempData);\r\n }\r\n parseWizardResponse(mainResponse, qtCategories, this.layout.visualizerType); // lixil ui enable routing\r\n if (qtCategories.length) {\r\n this.loadQtCategoriesFeatures(qtCategories); // load features from feature groups\r\n }\r\n this.layout.createCustomConfigurations(); // set shower body first\r\n this.layout.setGroupsItemsCount(bvGroupsResponse);\r\n // if (bvGroupsResponse && getCommonVisualizerType() === \"kitchen\") { // removed this logic, download countertops always as usual\r\n // toggles to request all features at once or each feature separately\r\n // store.dispatch(setUseFeaturesLightRequest({\r\n // countertops: !(bvGroupsResponse[\"countertop\"] && bvGroupsResponse[\"countertop\"].totalFeaturesCount > 8000), //increased for nhance\r\n // cabinets: !(bvGroupsResponse[\"top Cabinet\"] && bvGroupsResponse[\"top Cabinet\"].totalFeaturesCount > 6000),\r\n // }))\r\n // }\r\n this.layout.setDefaultFeatures();\r\n if (qtCategories.length) {\r\n this.layout.setQtCategoriesSubparts(qtCategories); // set QtCategories subParts(wait until defaults are set)\r\n this.loadQtCategoriesFeatures(qtCategories); // load features from feature groups second time!!\r\n // after qtCategories are set (because we need partIdExistInQtCategory logic)\r\n }\r\n\r\n // 2) check what to set next\r\n const {lookIdFromUrl} = getParsedLookUrl();\r\n\r\n const presets = mainResponse.defaults || [];\r\n console.log(\"presets\", presets);\r\n\r\n let loadByTheDefault = null;\r\n let isCartAndUserStatedUpdateNeeded = false;\r\n\r\n let recoverFromTempId = savedTempData && Array.isArray(savedTempData.records);\r\n if (recoverFromTempId) {\r\n console.log(\"recoverFromTempId savedTempData\", savedTempData);\r\n this.loadByTheDefault = savedTempData.records[0].data;\r\n this.loadByTheDefault.alreadyRestored = true;\r\n loadByTheDefault = savedTempData.records[0].data;\r\n await parseJobIdResponse(savedTempData);\r\n }\r\n console.log(\"userIsLoggedIn\", userIsLoggedIn);\r\n\r\n if (!loadByTheDefault) {\r\n loadByTheDefault = lookIdFromUrl ? getDefaultPresetByLook(presets, lookIdFromUrl) : null;\r\n console.log(\"loadByTheDefault by lookIdFromUrl\", loadByTheDefault);\r\n console.log(\"lookIdFromUrl\", lookIdFromUrl);\r\n }\r\n if (!loadByTheDefault) {\r\n loadByTheDefault = presets.find(preset => preset.loadByTheDefault);\r\n console.log(\"loadByTheDefault by mainResponse\", loadByTheDefault);\r\n }\r\n const editJobId = document.kvConfig.jobId && document.kvConfig.jobId > 0;\r\n console.log('editJobId', editJobId);\r\n\r\n const editToken = store.getState().userState.editToken;\r\n console.log('editToken', editToken);\r\n\r\n if (editJobId || editToken) {\r\n //console.log('resetting', document.kvConfig.jobId);\r\n const jobResponse = await getJobIdPreset(document.kvConfig.jobId, editToken);\r\n if (jobResponse && jobResponse.data && !jobResponse.data.error) {\r\n if (Array.isArray(jobResponse.data.records) && jobResponse.data.records.length) {\r\n this.loadByTheDefault = jobResponse.data.records[0].data;\r\n if (this.loadByTheDefault && this.loadByTheDefault.bvStateVersion) { // for old quotes we are keeping old create cart list logic\r\n this.loadByTheDefault.alreadyRestored = true;\r\n }\r\n }\r\n await parseJobIdResponse(jobResponse.data);\r\n if (loadByTheDefault && isNewlyCreatedJob(jobResponse.data)) {\r\n await this.setFirstPreset(loadByTheDefault, layoutTypes);\r\n await updateCurrentQuote(0);\r\n }\r\n } else if (loadByTheDefault) {\r\n await this.setFirstPreset(loadByTheDefault, layoutTypes)\r\n }\r\n if (IS_QKB_UI && !document.kvConfig.visualizerOnly\r\n && (!window.location.href.includes(\"#/\") || !window.location.href.split(\"#/\")[1].length)) {\r\n if (this.props.fabricatorSettings.checkout) {\r\n this.goToCart()\r\n } else {\r\n this.props.toggleBathroomVisualizerOpen(true);\r\n if (!window.location.href.includes(\"visualizer\")) {\r\n hashHistory.push(\"visualizer\");\r\n }\r\n }\r\n }\r\n return true\r\n } else if (loadByTheDefault) {\r\n if (!recoverFromTempId) { // temp id data is recovered in parse response\r\n await this.setFirstPreset(loadByTheDefault, layoutTypes, isCartAndUserStatedUpdateNeeded);\r\n }\r\n // 3) restore share button or save quote click\r\n if (loadByTheDefault.returnAction) {\r\n this.needToSaveQuote = false;\r\n if (!userIsLoggedIn) {\r\n console.info(`Sorry, can't share to ${loadByTheDefault.returnAction}, the user is not logged in, so the quote can not be saved.`);\r\n return\r\n }\r\n if (loadByTheDefault.returnAction === GROHE_ON_OPEN_ACTION.saveQuote) {\r\n setTimeout(() => {$(\"button[data-id='save-button']\").trigger('click')}, 0);\r\n } else if ([\r\n GROHE_ON_OPEN_ACTION.shareFacebook,\r\n GROHE_ON_OPEN_ACTION.sharePinterest,\r\n GROHE_ON_OPEN_ACTION.shareTwitter].some(action => loadByTheDefault.returnAction === action)) {\r\n setTimeout(() => {\r\n const {shareUrl} = store.getState().serverState;\r\n saveQuoteAndShare(loadByTheDefault.returnAction, shareUrl);\r\n }, 0);\r\n }\r\n }\r\n }\r\n\r\n }\r\n\r\n setFirstPreset = async (roomPreset, layoutTypes, isCartAndUserStatedUpdateNeeded= false) => {\r\n if (!layoutTypes || layoutTypes[roomPreset.layout_type]) {\r\n // this.setNewBvState(roomPreset, true);\r\n console.log(\"roomPreset\", roomPreset);\r\n const layout_type = +roomPreset.layout_type;\r\n const needToChangeLayout = (layout_type || layout_type === 0) && (layout_type !== +this.layout.type);\r\n if (needToChangeLayout) {\r\n await this.changeLayout(layout_type, true)\r\n }\r\n if (this.props.setFirstLoadedPreset) {\r\n this.props.setFirstLoadedPreset(roomPreset.id);\r\n }\r\n await this.layout.setItemsFromBvState(\r\n roomPreset, isCartAndUserStatedUpdateNeeded, (bvState) => bvState, true\r\n )\r\n }\r\n }\r\n\r\n getQtCategoriesCommon = () => {\r\n return (this.props.qtCategoriesRequested && this.props.qtCategoriesRequested.includes(this.layout.visualizerType))\r\n ? Promise.resolve([])\r\n : getQtCategories(this.layout.getCurrentLayoutAbbreviation())\r\n }\r\n\r\n setNewBvState = (bvState, firstLoad = false) => {\r\n this.layout.initialized = false;\r\n if (!firstLoad) {\r\n loaderEnable();\r\n }\r\n this.layout.setActiveFeaturesFromObject(bvState, false, false, true, true);\r\n if (!firstLoad) {\r\n this.handleRefresh();\r\n loaderDisable();\r\n }\r\n };\r\n\r\n resetEverything = () => {\r\n this.layout.resetEverything();\r\n if (this.navBar && this.navBar.resetWizardSteps) {\r\n this.navBar.resetWizardSteps()\r\n }\r\n this.handleRefresh();\r\n };\r\n\r\n goToCart = () => {\r\n this.props.toggleBathroomVisualizerOpen(false);\r\n this.props.setCameFromPage('visualizer');\r\n if (!window.location.href.includes('shoppingcart')) {\r\n hashHistory.push('shoppingcart');\r\n }\r\n };\r\n\r\n onBvLoad = () => {\r\n this.props.setCanvasId(this.state.canvasId);\r\n if (IS_QKB_UI && document.kvConfig.visualizerOnly) {\r\n this.props.toggleBathroomVisualizerOpen(true);\r\n if (!window.location.href.includes(\"visualizer\")) {\r\n hashHistory.push(\"visualizer\");\r\n }\r\n } else {\r\n const layoutParts = this.layout.getFeatures()\r\n .filter(parentGroup => parentGroup.categoryEnabled)\r\n .map((parentGroup) => parentGroup.partName);\r\n this.props.setLayoutDataParts(layoutParts);\r\n this.props.setDefaultSelectionGroup(layoutParts[0]);\r\n $(window).trigger(ActionTypes.UPDATE_ALL_ITEMS);\r\n }\r\n if (IS_QKB_UI && !(document.kvConfig.jobId && document.kvConfig.jobId > 0) && !Config.isVisualizerManagement()) {\r\n this.askToRestore(this.layout.localStorageKey);\r\n }\r\n };\r\n\r\n checkShareUrl = async () => {\r\n let design = new URLSearchParams(window.location.search).get(\"design\");\r\n if (design && (design[design.length - 1] === \"/\")) {\r\n design = design.slice(0, -1);\r\n }\r\n if (design) {\r\n const jobResponse = await getJobIdPreset(design);\r\n console.log(\"jobResponse for share URL design #\" + design, jobResponse);\r\n if (jobResponse && jobResponse.data && Array.isArray(jobResponse.data.records) && jobResponse.data.records.length) {\r\n this.loadByTheDefault = jobResponse.data.records[0].data;\r\n await parseJobIdResponse(jobResponse.data, true);\r\n }\r\n }\r\n };\r\n\r\n handleRefresh = () => {\r\n this.forceUpdate();\r\n };\r\n\r\n renderGreenLayerByZindex = (zIndex) => {\r\n this.imageCanvas.renderGreenLayerByZindex(zIndex)\r\n };\r\n\r\n setHoveredLayer = (event) => {\r\n this.imageCanvas.setHoveredLayer(event)\r\n };\r\n\r\n setCanvasClass = (canvasClass, removeAllClasses) => {\r\n if (this.imageCanvas) {\r\n this.imageCanvas.imageCanvasScroll(canvasClass, removeAllClasses, this.layout.type, this.layout.scene);\r\n }\r\n };\r\n\r\n changeMessageBoxState = (newMessageBoxState) => {\r\n this.setState({\r\n messageBoxState: {...this.state.messageBoxState, ...newMessageBoxState}\r\n })\r\n };\r\n\r\n setActiveFeature = (activeFeature) => { // this is needed for lock screen. we can't get rid of that\r\n this.setState({\r\n activeFeature\r\n })\r\n };\r\n\r\n setDemoPointClicked = () => {\r\n this.setState({\r\n demoPointClicked: true\r\n })\r\n };\r\n\r\n loadQtCategoriesFeatures = (qtCategories) => {\r\n const featureGroupsWithoutFeatures = this.layout.loadFeatureGroupFeatures(qtCategories);\r\n // console.log(\"featureGroupsWithoutFeatures\", featureGroupsWithoutFeatures);\r\n const {wizardList, wizardIsActive} = store.getState().wizardState;\r\n if (featureGroupsWithoutFeatures.length && !IS_LIXIL_UI && !showWizardInsteadOfQT(wizardList, wizardIsActive)) {\r\n if (this.layout.isNewLayout) {\r\n const toRequestFeatureGroups = featureGroupsWithoutFeatures.filter(subPart => !subPart.part.nextFeaturesPageToLoadArray);\r\n // prevent requesting countertops and backsplashes since the preset is not applied yet!\r\n Promise.all(toRequestFeatureGroups.map(subPart => {\r\n return getAdditionalFeaturesOnScroll(subPart.part, true)\r\n })).then(() => {\r\n $(window).trigger(ActionTypes.UPDATE_ALL_ITEMS)\r\n })\r\n } else featureGroupsWithoutFeatures.forEach(sPart => {\r\n this.checkIfAllFeaturesReceived(sPart, null, () => {\r\n $(window).trigger(ActionTypes.UPDATE_ALL_ITEMS);\r\n }, false)\r\n })\r\n }\r\n };\r\n\r\n finishLoading = async () => {\r\n store.dispatch(setShopPageLoaded(true)); // lixil ui don't do any requests on the shop page\r\n store.dispatch(setAllowRouting(true)); // lixil ui enable routing\r\n await this.getContractSignDocument(); // no need for now, we are keeping existing structure (first save, then - contract)\r\n await this.getAssignQuoteCustomersAndEmployees(); // no need for now, we are keeping existing structure (first save, then - contract)\r\n\r\n if (IS_LOOK_JOURNEY) {\r\n let loadByTheDefault = this.loadByTheDefault && this.loadByTheDefault.id === this.props.activePreset ? this.loadByTheDefault : null\r\n if (!loadByTheDefault || !loadByTheDefault.alreadyRestored) {\r\n setTimeout(() => {\r\n const {qtActiveCategory} = store.getState().qtState;\r\n const cartItems = createCartList(qtActiveCategory, loadByTheDefault);\r\n if (cartItems.length) {\r\n store.dispatch(addToCart(cartItems))\r\n }\r\n }, 1000) // is needed to finish render routing first (to create cart list from already selected features)\r\n }\r\n }\r\n\r\n if (this.props.initialFlowStep === 3) {\r\n this.changeLayout(this.props.initialFlowRoomLayout);\r\n this.tryToSetSelectedRoom();\r\n } else {\r\n console.log('initialized', this.layout);\r\n this.layout.initialized = true;\r\n this.handleRefresh();\r\n if (!this.props.bvOpened || IS_LIXIL_UI || !this.layout.getLayers().length) {\r\n loaderDisable();\r\n }\r\n }\r\n this.setIframeMessaging();\r\n this.props.addVisualizersLoaded(this.layout.visualizerType);\r\n if (this.needToSaveQuote || window.location.href.includes(\"saveOnLoad=true\")) {\r\n setTimeout(() => {\r\n saveQuote({submit: true, showReceipt: false})\r\n .then((saveJobResponse) => {\r\n if (this.props.updateCanvasCount) {\r\n this.props.updateCanvasCount(); // this is fixing the bug on mobile, after return from Grohe Register page the canvas is empty(white)\r\n }\r\n if (window.location.href.includes(\"saveOnLoad=true\") && window.parent) {\r\n window.parent.postMessage({\r\n action: VISUALIZER_MANAGEMENT_ACTIONS.visualizerIsSaved,\r\n saveJobResponse,\r\n }, \"*\");\r\n }\r\n });\r\n }, 0)\r\n }\r\n setTimeout(() => {\r\n if (!this.layout.allDbFeatures.length) {\r\n loaderDisable();\r\n renderErrorPopup(\"No Features Available\");\r\n }\r\n }, 1000)\r\n if (IS_LOOK_JOURNEY && (!document.kvConfig.isBackend || !getLocalStorageItem(LOCAL_STORAGE_KEYS.introVisited))\r\n && this.layout.isNewLayout && !document.kvConfig.jobId) { // always for client mode\r\n store.dispatch(setLookOverlayOpened(LOOK_OVERLAYS.intro));\r\n }\r\n };\r\n\r\n getContractSignDocument = async () => {\r\n\r\n const contractsList = await getContracts(); // set empty array to show sign route\r\n\r\n if (IS_OFFLINE_MODE && shouldUseContractSigning(this.props.fabricatorSettings, null, true)) {\r\n await getOfflineReceiptImages(); // cache images from the receipt\r\n await setContractBlobs(contractsList, 0, true);\r\n // const documentResult = await JsonApi.getDocumentForFabricator();\r\n // if (documentResult && documentResult.data && documentResult.data.base64PDF) {\r\n // const responseFetch = await fetch(\"data:application/pdf;base64,\" + documentResult.data.base64PDF);\r\n // const blob = await responseFetch.blob();\r\n // // console.log(\"responseFetch\", blob);\r\n // const jobDocumentUrl = URL.createObjectURL(blob);\r\n // // console.log(\"createdBlobDocument\", jobDocumentUrl);\r\n // store.dispatch(setContractBlob(jobDocumentUrl));\r\n // }\r\n }\r\n }\r\n\r\n getAssignQuoteCustomersAndEmployees = async () => {\r\n if (IS_OFFLINE_MODE && document.kvConfig.isBackend && !document.kvConfig.visualizerOnly) {\r\n const custAndEmpResponse = await JsonApi.getCustomersAndEmployees();\r\n if (custAndEmpResponse && custAndEmpResponse.data && (custAndEmpResponse.data.clients || custAndEmpResponse.data.employees)) {\r\n store.dispatch(setAssignQuoteOfflineData({\r\n assignQuoteOfflineCustomers: (custAndEmpResponse.data.clients || []).filter(client => client.fullName && client.email),\r\n assignQuoteOfflineEmployees: (custAndEmpResponse.data.employees || []).filter(employee => employee.fullName),\r\n }));\r\n }\r\n }\r\n }\r\n\r\n tryToSetSelectedRoom = () => {\r\n const roomChosen = store.getState().initialFlowState.initialFlowRoom;\r\n const {activeQuoteIndex} = store.getState().quotesState;\r\n if (this.layout.qtCategories && roomChosen) {\r\n this.layout.qtCategories.forEach((qtCategory => {\r\n if (qtCategory.subParts) {\r\n qtCategory.subParts.forEach((subPart) => {\r\n if (subPart.part.partName === \"Room\") {\r\n if (subPart.part.features) {\r\n const selectedRoomFeature = subPart.part.features.find(feature => feature.partName === roomChosen);\r\n if (selectedRoomFeature) {\r\n subPart.part.activeFeature = selectedRoomFeature;\r\n subPart.part.firstClick[activeQuoteIndex] = true;\r\n }\r\n }\r\n }\r\n })\r\n }\r\n }))\r\n }\r\n };\r\n\r\n askToRestore = (localStorageKey) => {\r\n try {\r\n const bvState = JSON.parse(window.localStorage.getItem(localStorageKey));\r\n if (bvState) {\r\n this.changeMessageBoxState({\r\n visible: true,\r\n message: \"messageBox.restoreSessionTitle\",\r\n buttons: [{\r\n text: \"messageBox.buttonNo\",\r\n color: \"blue\",\r\n click: () => {\r\n this.changeMessageBoxState({visible:false});\r\n window.localStorage.removeItem(localStorageKey);\r\n }\r\n },{\r\n text: \"messageBox.buttonYes\",\r\n color: \"green\",\r\n click: this.applyStoredItems\r\n }]\r\n });\r\n }\r\n } catch (ex) { console.log(\"localStorage exception\", ex); }\r\n };\r\n\r\n checkToShowTutorial = () => {\r\n return (this.props.bvOpened || this.props.bvVisited) && this.props.visualizerTutorialIsOpened\r\n && this.layout.initialized && !this.props.visualizerTutorialFinished && this.props.cookieAccepted\r\n && !this.state.messageBoxState.visible;\r\n }\r\n\r\n}\r\n","import React from 'react';\r\nimport $ from \"jquery\";\r\nimport {connect} from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport {\r\n setMaterialsTutorialFinished,\r\n setVisualizerTutorialFinished, setVisualizerTutorialStep,\r\n showMaterialsTutorial,\r\n showVisualizerTutorial\r\n} from \"../../actions/tutorialFunctions\";\r\nimport Tutorial from \"./tutorial\";\r\n// import ActionTypes from \"../../misc/actionTypes\";\r\n// import {ContentType} from \"../visComponents/constants\";\r\n\r\nclass VisualizerTutorial extends Tutorial {\r\n\r\n static propTypes = {\r\n isMobile: PropTypes.bool.isRequired\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n ringStyles: {\r\n left: 0,\r\n top: 0,\r\n }\r\n };\r\n }\r\n\r\n componentDidMount = () => {\r\n let nextStep = this.props.visualizerTutorialStep;\r\n if (document.kvConfig.visualizerOnly && !this.props.visualizerTutorialStep) {\r\n this.props.setVisualizerTutorialStep(1);\r\n nextStep = 1;\r\n } else if (nextStep === 2 && !this.props.isMobile) {\r\n this.props.setVisualizerTutorialStep(3);\r\n nextStep = 3;\r\n }\r\n if (nextStep === 3) {\r\n if (this.props.fabricatorSettings.enableSharing) {\r\n $(\".tutorial-overlay--visualizer\").fadeIn(300);\r\n this.showTutorialStep(nextStep);\r\n } else {\r\n this.exitTutorial(true);\r\n }\r\n } else {\r\n $(\".tutorial-overlay--visualizer\").fadeIn(300);\r\n this.showTutorialStep(nextStep);\r\n }\r\n };\r\n\r\n showTutorialStep = (nextStep = this.props.visualizerTutorialStep) => {\r\n switch (nextStep) {\r\n case 0: {\r\n this.scrollAndHighLightRing(\".mainbuttons .mobilebutton--back-to-quote\");\r\n break;\r\n }\r\n case 1: {\r\n if (this.props.isMobile) {\r\n this.scrollAndHighLightRing(\".mainbuttons .mobilebutton--design\", 0);\r\n } else {\r\n $(\"html, body\").animate({scrollTop: 0}, 500, () => {\r\n const roomLayoutsOrIdeas = this.getRoomLayoutsOrIdeasStepLogic();\r\n if (roomLayoutsOrIdeas.selector) {\r\n this.changeHighlightRingPosition(roomLayoutsOrIdeas.selector);\r\n }\r\n $(\".tutorial-step\").fadeIn(300)\r\n });\r\n }\r\n break;\r\n }\r\n case 3: {\r\n // if (this.props.isMobile) {\r\n // $(document).trigger(ActionTypes.OPEN_MOBILE_NAVIGATION); // open navigation\r\n // $(document).trigger(ActionTypes.CHANGE_MOBILE_MENU_CONTENT_TYPE, [ContentType.Layout]); // set navigation type\r\n // } else {\r\n // this.scrollAndHighLightRing(\".mainbuttons .mobilebutton--share\");\r\n // }\r\n this.scrollAndHighLightRing(\".mainbuttons .mobilebutton--share\");\r\n break;\r\n }\r\n default:\r\n break;\r\n }\r\n };\r\n\r\n scrollAndHighLightRing = (selector, scrollTop = document.body.scrollHeight) => {\r\n $(\"html, body\").animate({scrollTop}, 500, () => {\r\n this.changeHighlightRingPosition(selector);\r\n $(\".tutorial-step__ring, .tutorial-step\").fadeIn(300, () => {\r\n if (this.props.isMobile) {\r\n setTimeout(() => {\r\n this.changeHighlightRingPosition(selector);\r\n }, 300)\r\n }\r\n })\r\n });\r\n };\r\n\r\n handleNextStepClick = () => {\r\n const nextStep = this.props.visualizerTutorialStep + 1;\r\n this.props.setVisualizerTutorialStep(nextStep);\r\n switch (nextStep) {\r\n case 1:\r\n this.exitTutorial();\r\n break;\r\n case 2: {\r\n if (this.props.isMobile) {\r\n setTimeout(() => {\r\n this.changeHighlightRingPosition(\".des .mobilebutton--layout\");\r\n }, 500)\r\n } else {\r\n this.exitTutorial();\r\n }\r\n break;\r\n }\r\n case 3: {\r\n if (this.props.isMobile) {\r\n this.changeHighlightRingPosition(\".mainbuttons .mobilebutton--share\");\r\n } else {\r\n this.exitTutorial(true);\r\n }\r\n break;\r\n }\r\n }\r\n };\r\n\r\n exitTutorial = (forever) => {\r\n $(\".tutorial-overlay--visualizer\").fadeOut(300, () => {\r\n this.props.showVisualizerTutorial(false);\r\n if (forever) {\r\n this.props.setMaterialsTutorialFinished(true);\r\n this.props.setVisualizerTutorialFinished(true);\r\n try {\r\n window.localStorage.setItem(\"materials_tutorial_finished\", true);\r\n window.localStorage.setItem(\"visualizer_tutorial_finished\", true);\r\n } catch (ex) { console.log(\"localStorage exception\", ex); }\r\n }\r\n });\r\n };\r\n\r\n getHighLightButton = () => {\r\n switch (this.props.visualizerTutorialStep) {\r\n case 0: {\r\n return (\r\n \r\n )\r\n }\r\n case 1: {\r\n if (this.props.isMobile) {\r\n return (\r\n \r\n )\r\n }\r\n return this.getRoomLayoutsOrIdeasStepLogic().buttonComponent\r\n }\r\n case 2: {\r\n return (this.props.isMobile) ? (\r\n \r\n ) : null\r\n }\r\n case 3: {\r\n return (\r\n \r\n )\r\n }\r\n default:\r\n return null\r\n }\r\n };\r\n\r\n getRoomLayoutsOrIdeasStepLogic = () => {\r\n const existingRoomLayout = document.querySelector(\".tab.tab--room-layout\");\r\n if (existingRoomLayout) {\r\n return {\r\n selector: \".nav-wrapper__tabs .tab.tab--room-layout\",\r\n buttonComponent: (\r\n
    \r\n \r\n \r\n \r\n
    \r\n ),\r\n mainTranslate: \"roomLayout\",\r\n }\r\n }\r\n const existingRoomIdeas = document.querySelector(\".tab.tab--room-ideas\");\r\n if (existingRoomIdeas) {\r\n return {\r\n selector: \".nav-wrapper__tabs .tab.tab--room-ideas\",\r\n buttonComponent: (\r\n
    \r\n \r\n \r\n \r\n
    \r\n ),\r\n mainTranslate: \"roomIdeas\",\r\n }\r\n }\r\n return {\r\n selector: \"\",\r\n mainTranslate: null,\r\n buttonComponent: null\r\n }\r\n }\r\n\r\n render() {\r\n const ringStyles = this.state.ringStyles;\r\n const texts = (this.props.isMobile) ? \"mobile\" : \"desktop\";\r\n const highlightButton = this.getHighLightButton();\r\n const mainTextId = ((this.props.visualizerTutorialStep === 1) && !this.props.isMobile\r\n && this.getRoomLayoutsOrIdeasStepLogic().mainTranslate === \"roomIdeas\")\r\n ? `tutorials.visualizerPage.${texts}.step${this.props.visualizerTutorialStep}b`\r\n : `tutorials.visualizerPage.${texts}.step${this.props.visualizerTutorialStep}`;\r\n const showText = !(this.props.visualizerTutorialStep === 2 && !this.props.isMobile);\r\n const showNextButton = this.props.visualizerTutorialStep < 3 && showText;\r\n return (\r\n
    \r\n
    \r\n
    \r\n

    \r\n {showText ? : null}\r\n

    \r\n
    \r\n {showText ? (\r\n \r\n ) : null}\r\n {showNextButton ? (\r\n \r\n ) : null}\r\n
    \r\n
    \r\n \r\n {highlightButton ? (\r\n
    \r\n {highlightButton}\r\n
    \r\n ) : null}\r\n
    \r\n
    \r\n )\r\n }\r\n\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {settings} = store.fabricatorState;\r\n return {\r\n windowWidth: store.serverState.windowWidth,\r\n visualizerTutorialStep: store.tutorialState.visualizerTutorialStep,\r\n fabricatorSettings: settings,\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, {\r\n showMaterialsTutorial,\r\n setMaterialsTutorialFinished,\r\n showVisualizerTutorial,\r\n setVisualizerTutorialFinished,\r\n setVisualizerTutorialStep\r\n})(VisualizerTutorial);\r\n","import React from \"react\";\r\nimport {FormattedHTMLMessage} from \"react-intl\";\r\nimport {connect} from \"react-redux\";\r\n\r\nconst Copyright = (props) => {\r\n\r\n const {fabricatorData} = props;\r\n const date = new Date();\r\n\r\n return (\r\n
    \r\n \r\n
    \r\n );\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n fabricatorData: store.fabricatorState\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps)(Copyright)\r\n","import {pdf} from '@react-pdf/renderer';\r\nimport PrintDocument from \"../bvcomponents/popups/printPopup/printDocument\";\r\n\r\nimport store from './../store';\r\nimport * as types from \"./actionTypes\";\r\nimport {convertImgToBase64URL, THUMBNAIL_SIZES} from \"../misc/utils\";\r\nimport {getFabricatorLogo} from \"../misc/fabricatorHardcode\";\r\nimport {featureThumbnailUrl} from \"../misc/helpers\";\r\nimport {WIZARD_GROUP_TYPES} from \"../interfaces/wizardItemInterface\";\r\nimport {baseNewImagesPath} from \"../bvcomponents/assets\";\r\n\r\nlet printLogo = \"\";\r\nlet notFoundImage = \"\";\r\n\r\nexport const getCurrentReceipt = async (assignQuotePopupNewCustomer, newEmployeeSelected, onRender, isContractSign) => {\r\n\r\n const {userState, serverState, fabricatorState, cartState, quotesState, priceWorksheetState,\r\n filterState, assignQuoteState, wizardState, sqftSlabState, printState} = store.getState();\r\n\r\n const {assignQuotePopupCustomer, assignQuotePopupEmployee} = assignQuoteState;\r\n\r\n printLogo = printLogo || await convertImgToBase64URL(getFabricatorLogo(fabricatorState));\r\n let cartItemsThumbnails = {};\r\n if (fabricatorState.receiptSettings && fabricatorState.receiptSettings.showThumbnailsAndDescriptions) {\r\n cartItemsThumbnails = await getCartItemThumbnails(cartState.cartItems, wizardState);\r\n }\r\n\r\n return pdf(PrintDocument({\r\n fabricatorData: fabricatorState,\r\n userInfo: userState.userInfo,\r\n quotes: quotesState.quotes,\r\n cartItems: cartState.cartItems,\r\n priceWorksheetState,\r\n assignQuotePopupCustomer: assignQuotePopupNewCustomer || assignQuotePopupCustomer,\r\n employeeSelected: newEmployeeSelected || assignQuotePopupEmployee,\r\n locale: serverState.language,\r\n filterGroups: filterState.filterGroups,\r\n activeTheme: serverState.activeTheme,\r\n jobId: serverState.jobId,\r\n printLogo,\r\n wizardState,\r\n sqftSlabState,\r\n cartItemsThumbnails,\r\n printState,\r\n onRender,\r\n isContractSign,\r\n }))\r\n}\r\n\r\n// export const getCurrentReceiptPages = async (withReceiptUrl) => {\r\n// try {\r\n// const pdfReceipt = await getCurrentReceipt();\r\n// if (pdfReceipt && pdfReceipt.container && pdfReceipt.container.render) {\r\n// await pdfReceipt.container.render();\r\n// if (pdfReceipt.container.document && pdfReceipt.container.document.getLayoutData) {\r\n// const layoutData = pdfReceipt.container.document.getLayoutData();\r\n// if (layoutData && Array.isArray(layoutData.children) && layoutData.children.length) {\r\n// if (withReceiptUrl) {\r\n// const receipt = await pdfReceipt.toBlob();\r\n// const receiptUrl = URL.createObjectURL(receipt);\r\n// return {receiptUrl, receiptPages: layoutData.children.length};\r\n// }\r\n// return layoutData.children.length\r\n// }\r\n// }\r\n// }\r\n// if (withReceiptUrl) {\r\n// return {receiptUrl: \"\", receiptPages: 0};\r\n// }\r\n// return 0\r\n// } catch (e) {\r\n// console.log(\"error rendering pdf receipt\", e);\r\n// if (withReceiptUrl) {\r\n// return {receiptUrl: \"\", receiptPages: 0};\r\n// }\r\n// return 0\r\n// }\r\n// }\r\n\r\nexport const getCurrentReceiptPages = async (withReceiptUrl) => {\r\n try {\r\n let imagesPromise = new Promise(async (resolve) => {\r\n const onRender = (onRenObj) => {\r\n // console.log(\"onRender!!\", onRenObj);\r\n const receiptLayout = onRenObj ? onRenObj._INTERNAL__LAYOUT__DATA_ : null;\r\n const receiptPages = receiptLayout && receiptLayout.children ? receiptLayout.children.length : 1;\r\n const receiptUrl = URL.createObjectURL(onRenObj.blob);\r\n\r\n resolve({receiptUrl, receiptLayout, receiptPages})\r\n };\r\n const pdfReceipt2 = await getCurrentReceipt(null, null, onRender, true)\r\n await pdfReceipt2.toBlob();\r\n })\r\n if (withReceiptUrl) {\r\n return imagesPromise.then(response => response)\r\n }\r\n return 0\r\n } catch (e) {\r\n console.log(\"error rendering pdf receipt\", e);\r\n if (withReceiptUrl) {\r\n return {receiptUrl: \"\", receiptPages: 0};\r\n }\r\n return 0\r\n }\r\n}\r\n\r\nexport const getCartItemThumbnails = async (cartItems, wizardState) => {\r\n let cartItemsThumbnails = {};\r\n for (const cartItem of cartItems) {\r\n try {\r\n const thumbnailUrl = featureThumbnailUrl(cartItem.cartFeature, THUMBNAIL_SIZES.small);\r\n cartItemsThumbnails[cartItem.id] = await convertImgToBase64URL(thumbnailUrl);\r\n if (!cartItemsThumbnails[cartItem.id]) {\r\n if (!notFoundImage) {\r\n notFoundImage = await convertImgToBase64URL(`${baseNewImagesPath}images/image-not-found.png`);\r\n }\r\n cartItemsThumbnails[cartItem.id] = notFoundImage\r\n }\r\n } catch (e) {\r\n cartItemsThumbnails[cartItem.id] = `${baseNewImagesPath}images/image-not-found.png`;\r\n }\r\n }\r\n for (const wizard of wizardState.allWizardsValues) {\r\n for (const key of Object.keys(wizard.wizardSelectedValues)) {\r\n if (wizard.wizardSelectedValues[key].wizardGroup\r\n && (wizard.wizardSelectedValues[key].wizardGroup.nodeType === WIZARD_GROUP_TYPES.custom)\r\n && wizard.wizardSelectedValues[key].wizardGroup.customImageUrl) {\r\n try {\r\n cartItemsThumbnails[wizard.wizardSelectedValues[key].wizardGroup.id] = await convertImgToBase64URL(\r\n `https://corsproxy.io/?url=${encodeURIComponent(wizard.wizardSelectedValues[key].wizardGroup.customImageUrl)}`\r\n );\r\n if (!cartItemsThumbnails[wizard.wizardSelectedValues[key].wizardGroup.id]) {\r\n cartItemsThumbnails[wizard.wizardSelectedValues[key].wizardGroup.id] = await convertImgToBase64URL(\r\n `https://proxy.corsfix.com/?${wizard.wizardSelectedValues[key].wizardGroup.customImageUrl}`\r\n );\r\n }\r\n if (!cartItemsThumbnails[wizard.wizardSelectedValues[key].wizardGroup.id]) {\r\n cartItemsThumbnails[wizard.wizardSelectedValues[key].wizardGroup.id] = await convertImgToBase64URL(\r\n wizard.wizardSelectedValues[key].wizardGroup.customImageUrl\r\n );\r\n }\r\n if (!cartItemsThumbnails[wizard.wizardSelectedValues[key].wizardGroup.id]) {\r\n cartItemsThumbnails[wizard.wizardSelectedValues[key].wizardGroup.id] = await convertImgToBase64URL(\r\n wizard.wizardSelectedValues[key].wizardGroup.customImageUrl + \"?not-from-cache-please\"\r\n );\r\n }\r\n if (!cartItemsThumbnails[wizard.wizardSelectedValues[key].wizardGroup.id]) {\r\n if (!notFoundImage) {\r\n notFoundImage = await convertImgToBase64URL(`${baseNewImagesPath}images/image-not-found.png`);\r\n }\r\n cartItemsThumbnails[wizard.wizardSelectedValues[key].wizardGroup.id] = notFoundImage\r\n }\r\n } catch (e) {\r\n cartItemsThumbnails[wizard.wizardSelectedValues[key].wizardGroup.id] = `${baseNewImagesPath}images/image-not-found.png`;\r\n }\r\n }\r\n }\r\n }\r\n return cartItemsThumbnails\r\n}\r\n\r\nexport const getOfflineReceiptImages = async () => {\r\n const {fabricatorState} = store.getState();\r\n notFoundImage = await convertImgToBase64URL(`${baseNewImagesPath}images/image-not-found.png`)\r\n printLogo = await convertImgToBase64URL(getFabricatorLogo(fabricatorState));\r\n await getCurrentReceiptPages(true);\r\n return true\r\n}\r\n\r\nexport const printReceipt = async () => {\r\n const pdfReceipt = await getCurrentReceipt();\r\n const receipt = await pdfReceipt.toBlob();\r\n const fileURL = URL.createObjectURL(receipt);\r\n window.open(fileURL, \"_blank\");\r\n}\r\n\r\nexport const setReceiptUrl = (receiptUrl) => ({\r\n type: types.SET_RECEIPT_URL,\r\n payload: {receiptUrl}\r\n})\r\n\r\nexport const setReceiptSignature = (receiptSignature) => ({\r\n type: types.SET_RECEIPT_SIGNATURE,\r\n payload: {receiptSignature}\r\n})\r\n","//INITIAL FLOW\r\nimport * as types from \"./actionTypes\";\r\n\r\nexport const setPaymentInfo = (name, value) => ({\r\n type: types.SET_PAYMENT_INFO,\r\n payload: {name, value}\r\n});\r\n\r\nexport const setCardInfo = (name, value) => ({\r\n type: types.SET_CARD_INFO,\r\n payload: {name, value}\r\n});\r\n\r\nexport const setCardErrors = (cardErrors) => ({\r\n type: types.SET_CARD_ERRORS,\r\n payload: {cardErrors}\r\n});\r\n\r\nexport const setShippingErrors = (shippingErrors) => ({\r\n type: types.SET_SHIPPING_ERRORS,\r\n payload: {shippingErrors}\r\n});\r\n\r\nexport const setShippingInfo = (name, value) => ({\r\n type: types.SET_SHIPPING_INFO,\r\n payload: {name, value}\r\n});\r\n\r\nexport const setBillingInfo = (name, value) => ({\r\n type: types.SET_BILLING_INFO,\r\n payload: {name, value}\r\n});\r\n\r\nexport const restorePaymentInfo = (someValues) => ({\r\n type: types.RESTORE_PAYMENT_INFO,\r\n payload: someValues\r\n});\r\n","import {pnpolyArray} from \"../../../../../lib/pnpoly\";\r\nimport { v4 as uuidv4 } from 'uuid';\r\nimport _ from 'lodash';\r\n\r\nimport EventManager from \"../../../store/sqftEventManager\";\r\nimport workspace from \"../../workspace\";\r\nimport sqftConfig from \"../../../store/sqftConfig\";\r\nimport {\r\n distanceToInches,\r\n distanceToMillimeters,\r\n getAngleBetweenTwoPoints, getMidPoint,\r\n isDisabledInPopupWithParents,\r\n measureDistanceToInches,\r\n} from \"../../../../../helpers/sqftHelper\";\r\nimport COLOR_THEMES, {COLOR} from \"../../../store/colorThemes\";\r\nimport {isDisabledInPopupShouldBeHidden} from \"../../../../../constants\";\r\nimport {DIRECTIONS, getLineDirection} from \"../../../../../helpers/shapeHelper\";\r\nimport RenderFigures from \"../../../helpers/renderFigures\";\r\nimport {createAdjustableInput} from \"../../../../../helpers/uiHelper\";\r\n\r\nexport default class NumberText {\r\n id = null;\r\n design = {\r\n fontColor: COLOR_THEMES[sqftConfig.activeTheme].primary,\r\n fontFamily: 'playbold',\r\n fontHeight: 16,\r\n isLength: false,\r\n valuePrefix: '',\r\n valuePostfix: '',\r\n shouldRenderFrameBorder: false,\r\n eventsPriority: EventManager.priorities.SEGMENT\r\n };\r\n value = 0;\r\n callback = null;\r\n pos = {\r\n x: 0,\r\n y: 0,\r\n xOffset: 0,\r\n yOffset: 0,\r\n angle: 0,\r\n orientation: DIRECTIONS.EAST,\r\n betweenPoints: {\r\n pointFrom: null,\r\n pointTo: null,\r\n }\r\n };\r\n state = {\r\n isHovered: false,\r\n mouseDown: false,\r\n mouseDownPosition: null,\r\n isHidden: true\r\n };\r\n\r\n constructor(value, pos, design, parent = workspace, callback = Function(), isInit = true) {\r\n this.value = value;\r\n Object.assign(this.pos, pos);\r\n Object.assign(this.design, design);\r\n this.parent = parent;\r\n this.callback = callback;\r\n this.id = uuidv4();\r\n\r\n if (isInit) {\r\n this.initEventListeners();\r\n }\r\n }\r\n getParent() {\r\n return this.parent\r\n }\r\n\r\n get orientation () {\r\n return this.pos.orientation\r\n }\r\n\r\n initEventListeners() {\r\n EventManager.addEvent(\r\n EventManager.events.RENDER,\r\n this.render.bind(this),\r\n this,\r\n this.design.eventsPriority\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_MOVE,\r\n this.onMouseMove,\r\n this,\r\n this.design.eventsPriority\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_DOWN,\r\n this.onMouseDown,\r\n this,\r\n this.design.eventsPriority\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_UP,\r\n this.onMouseUp,\r\n this,\r\n this.design.eventsPriority\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_LEAVE,\r\n this.onMouseLeave,\r\n this,\r\n EventManager.priorities.OVERALL\r\n );\r\n }\r\n\r\n destroy() {\r\n this.deregisterEvents();\r\n }\r\n\r\n hideEvents() {\r\n if (!this.state.isHidden) {\r\n this.deregisterEvents();\r\n this.state.isHidden = true;\r\n }\r\n }\r\n\r\n revealEvents() {\r\n if (this.state.isHidden) {\r\n this.initEventListeners();\r\n this.state.isHidden = false;\r\n }\r\n }\r\n\r\n deregisterEvents() {\r\n EventManager.removeEvent(this);\r\n }\r\n\r\n reInitEvents() {\r\n this.initEventListeners();\r\n }\r\n\r\n onMouseMove = (mousePos, e) => {\r\n void e;\r\n this.state.isHovered = this.isMouseOverText(mousePos);\r\n\r\n if (this.state.isHovered) {\r\n EventManager.stealCursor();\r\n //todo rotated cursor\r\n EventManager.setCursor(([DIRECTIONS.WEST, DIRECTIONS.EAST].includes(this.pos.orientation)) ? \"text\" : \"text-vertical\", this);\r\n } else {\r\n EventManager.resetCursor(this);\r\n return false;\r\n }\r\n };\r\n\r\n isMouseOverText = (mousePos) => {\r\n return pnpolyArray(this.getTextPointsArea(), mousePos);\r\n };\r\n\r\n getTextPointsArea = () => {\r\n const mText = EventManager.getCtx().measureText(this.design.valuePrefix + this.value + this.design.valuePostfix );\r\n const {x, y} = this.getPos();\r\n\r\n let pointsArray = [];\r\n\r\n if ([DIRECTIONS.WEST, DIRECTIONS.EAST].includes(this.pos.orientation)) {\r\n pointsArray = [\r\n [x - Math.ceil10(mText.width,-2) / 2, y - this.design.fontHeight / 2],\r\n [x + Math.ceil10(mText.width,-2) / 2, y - this.design.fontHeight / 2],\r\n [x + Math.ceil10(mText.width,-2) / 2, y + this.design.fontHeight / 2],\r\n [x - Math.ceil10(mText.width,-2) / 2, y + this.design.fontHeight / 2],\r\n ]\r\n } else if ([DIRECTIONS.NORTH, DIRECTIONS.SOUTH].includes(this.pos.orientation)) {\r\n pointsArray = [\r\n [x - this.design.fontHeight / 2, y - Math.ceil10(mText.width,-2) / 2],\r\n [x + this.design.fontHeight / 2, y - Math.ceil10(mText.width,-2) / 2],\r\n [x + this.design.fontHeight / 2, y + Math.ceil10(mText.width,-2) / 2],\r\n [x - this.design.fontHeight / 2, y + Math.ceil10(mText.width,-2) / 2],\r\n ]\r\n } else {\r\n // todo horizontal\r\n }\r\n\r\n return pointsArray;\r\n };\r\n\r\n onMouseUp = (mousePos, e) => {\r\n void mousePos;\r\n void e;\r\n if (this.state.mouseDown) {\r\n this.state.mouseDown = false;\r\n this.state.mouseDownPosition = null;\r\n }\r\n };\r\n\r\n onMouseDown = (mousePos, e) => {\r\n void mousePos;\r\n void e;\r\n if (this.state.isHovered && !document.querySelector(\".line-input\")) {\r\n window.lineInputFocused = true;\r\n EventManager.stealCursor();\r\n\r\n const maxLength = this.parent.getMaxLength ? this.parent.getMaxLength() : 1000 * sqftConfig.getMeasureMultiplier();\r\n const pos = this.getPos();\r\n const initialValue = this.design.isLength\r\n ? sqftConfig.measureUnit === \"Metric\"\r\n ? measureDistanceToInches(this.value).millimeters\r\n : this.value\r\n : this.value;\r\n\r\n const inputWrapper = createAdjustableInput({\r\n position: pos,\r\n initialValue: initialValue.toString(),\r\n min: 1,\r\n max: maxLength,\r\n orientation: [DIRECTIONS.WEST, DIRECTIONS.EAST].includes(this.pos.orientation) ? \"horizontal\" : \"vertical\",\r\n onChange: this.onInputChange, // Trigger onInputChange when value changes\r\n onClose: () => {\r\n window.lineInputFocused = false;\r\n this.state.isHovered = false;\r\n },\r\n step: 1,\r\n });\r\n\r\n document.querySelector(\".sqft-main-grid\").appendChild(inputWrapper);\r\n // Focus and select input on creation\r\n const input = inputWrapper.querySelector(\".line-input-field\");\r\n input.focus();\r\n }\r\n\r\n return false;\r\n };\r\n\r\n onInputChange = (value) => {\r\n const valueBeforeUpdate = this.value;\r\n this.value = value;\r\n this.callback(value, this, valueBeforeUpdate);\r\n };\r\n\r\n onMouseLeave = () => {\r\n this.state.isHoveringPoint = false;\r\n this.state.mouseDown = false;\r\n this.state.hoveredPoint = null;\r\n this.state.isHoveredOverText = false;\r\n };\r\n\r\n setValue = (value) => {\r\n this.value = value\r\n }\r\n\r\n setPos = (pos) => {\r\n this.pos.x = pos.x\r\n this.pos.y = pos.y\r\n }\r\n\r\n setAngle = (angle) => {\r\n this.pos.angle = angle\r\n }\r\n\r\n setBetweenPoints = (pointFrom, pointTo) => {\r\n this.pos.betweenPoints.pointFrom = pointFrom;\r\n this.pos.betweenPoints.pointTo = pointTo;\r\n }\r\n\r\n getPos = () => {\r\n const parentOffset = this.parent.getOffset() ? this.parent.getOffset() : { x: 0, y: 0 };\r\n const scale = _.clone(sqftConfig.scale);\r\n let angle = this.pos.angle;\r\n\r\n //if this in the NumberText between lines than we override angle\r\n if (this.pos.betweenPoints.pointFrom) {\r\n angle = getAngleBetweenTwoPoints(this.pos.betweenPoints.pointFrom, this.pos.betweenPoints.pointTo);\r\n }\r\n\r\n const angleRad = angle * (Math.PI / 180);\r\n\r\n // calculate offset position according to offset point\r\n const calculatedXOffset = this.pos.xOffset * Math.cos(angleRad) - this.pos.yOffset * Math.sin(angleRad);\r\n const calculatedYOffset = this.pos.xOffset * Math.sin(angleRad) + this.pos.yOffset * Math.cos(angleRad);\r\n\r\n return {\r\n x: this.pos.x * scale + calculatedXOffset + parentOffset.x,\r\n y: this.pos.y * scale + calculatedYOffset + parentOffset.y\r\n }\r\n };\r\n\r\n getValue = (isString, withSuffixes = false) => {\r\n let value = this.value;\r\n if (this.design.isLength) {\r\n value = sqftConfig.measureUnit === \"Metric\"\r\n ? distanceToMillimeters(value)\r\n : distanceToInches(value)\r\n } else if (isString) {\r\n value = value.toString();\r\n }\r\n if (withSuffixes) {\r\n value = this.design.valuePrefix + value.toString() + this.design.valuePostfix;\r\n }\r\n\r\n return value\r\n };\r\n\r\n updateOrientation = () => {\r\n if (this.pos.betweenPoints.pointFrom) {\r\n this.pos.orientation = getLineDirection(this.pos.betweenPoints.pointFrom, this.pos.betweenPoints.pointTo, true);\r\n }\r\n }\r\n\r\n updatePositionBetweenPoints = () => {\r\n if (this.pos.betweenPoints.pointFrom) {\r\n const pointBetweenPoints = getMidPoint(this.pos.betweenPoints.pointFrom, this.pos.betweenPoints.pointTo);\r\n\r\n this.pos.x = pointBetweenPoints.x\r\n this.pos.y = pointBetweenPoints.y\r\n }\r\n }\r\n\r\n render = (ctx) => {\r\n if ((isDisabledInPopupShouldBeHidden() && isDisabledInPopupWithParents(this))\r\n || (this.pos.x === 0 && this.pos.y === 0) // this is for Free Draw. see https://qcquotecountertops.atlassian.net/browse/QCDES-2064\r\n ) {\r\n return\r\n }\r\n\r\n this.updateOrientation();\r\n this.updatePositionBetweenPoints();\r\n if (this.design.shouldRenderFrameBorder) {\r\n this.renderFrameBorder(ctx);\r\n }\r\n this.renderText(ctx);\r\n }\r\n\r\n renderFrameBorder = (ctx) => {\r\n ctx.beginPath();\r\n const pos = this.getPos();\r\n const value = this.getValue(true, true);\r\n const mText = ctx.measureText(value);\r\n let angle = 0;\r\n if (this.pos.betweenPoints.pointFrom) {\r\n angle = getAngleBetweenTwoPoints(this.pos.betweenPoints.pointFrom, this.pos.betweenPoints.pointTo);\r\n //this will help to rotate upside down text\r\n if ([DIRECTIONS.NORTHWEST, DIRECTIONS.SOUTHWEST].includes(this.pos.orientation)) {\r\n angle += 180;\r\n }\r\n }\r\n\r\n ctx.strokeStyle = COLOR_THEMES[sqftConfig.activeTheme].primary;\r\n ctx.lineWidth = 2;\r\n ctx.fillStyle = COLOR.white\r\n\r\n ctx.save();\r\n ctx.translate(\r\n pos.x ,\r\n pos.y\r\n );\r\n ctx.rotate(angle * (Math.PI / 180));\r\n RenderFigures.roundedRect(ctx,\r\n - mText.width / 2, // / sqftConfig.scale * sqftConfig.defaultScale,\r\n - this.design.fontHeight / 1.5,\r\n mText.width * 1.5, /// sqftConfig.scale * sqftConfig.defaultScale,\r\n this.design.fontHeight + 6,\r\n 5,\r\n true,\r\n true\r\n );\r\n\r\n ctx.restore();\r\n ctx.closePath();\r\n }\r\n\r\n renderText = (ctx) => {\r\n const //scale = sqftConfig.scale,\r\n fontHeight = this.design.fontHeight, //getFontsizeSmall(),\r\n font = fontHeight + \"px \" + this.design.fontFamily,\r\n value = this.getValue(true, true),//this.value.toString(),\r\n\r\n mText = ctx.measureText(value),\r\n pos = this.getPos();\r\n let angle = this.pos.angle;\r\n ctx.beginPath();\r\n ctx.font = font;\r\n ctx.textAlign = \"center\";\r\n ctx.fillStyle = this.design.fontColor;\r\n if (this.pos.betweenPoints.pointFrom) {\r\n angle = getAngleBetweenTwoPoints(this.pos.betweenPoints.pointFrom, this.pos.betweenPoints.pointTo);\r\n }\r\n\r\n switch (this.orientation) {\r\n case DIRECTIONS.EAST:\r\n case DIRECTIONS.WEST:\r\n case DIRECTIONS.SOUTH:\r\n case DIRECTIONS.NORTH:\r\n case DIRECTIONS.SOUTHEAST:\r\n case DIRECTIONS.SOUTHWEST:\r\n case DIRECTIONS.NORTHEAST:\r\n case DIRECTIONS.NORTHWEST: {\r\n //this will help to rotate upside down text\r\n if (this.pos.betweenPoints.pointFrom) {\r\n if ([DIRECTIONS.NORTHWEST, DIRECTIONS.SOUTHWEST, DIRECTIONS.WEST].includes(this.pos.orientation)) {\r\n angle += 180;\r\n }\r\n }\r\n\r\n ctx.save();\r\n ctx.translate(pos.x, pos.y);\r\n ctx.rotate(angle * (Math.PI / 180));\r\n ctx.wrapText(value, fontHeight / 2, fontHeight / 3, mText, fontHeight);\r\n ctx.restore();\r\n\r\n //ctx.wrapText(value, pos.x, pos.y, mText, fontHeight);\r\n break;\r\n }\r\n default:\r\n break;\r\n }\r\n }\r\n}\r\n","import _ from 'lodash';\r\n\r\nimport EventManager from \"../../store/sqftEventManager\";\r\nimport config from \"../../store/sqftConfig\";\r\nimport workspace from \"../workspace\";\r\nimport {\r\n getBacksplashArea,\r\n getEdgeLength,\r\n getPointField,\r\n isPointInsideShape,\r\n mmToM\r\n} from \"../../../../helpers/sqftHelper\";\r\nimport ShapeHelper, {getEdgeFeatures} from \"../../../../helpers/shapeHelper\";\r\n//import $ from \"jquery\";\r\nimport {\r\n APPLIANCES_THAT_SHOULD_RENDER_MEASUREMENTS_INSIDE_THE_SHAPE,\r\n MOVABLE_IMAGE_TYPES,\r\n SIDEBAR_SLAB_BUTTONS\r\n} from \"../../../../constants\";\r\nimport store from \"../../../../../../store\";\r\nimport PointV2, {CORE_POINT_LAYOUTS} from \"./pointV2\";\r\nimport RenderMovableImage from \"./imageParts/renderMovableImage\";\r\nimport sqftShape from \"./sqftShape\";\r\nimport ShapeAbsolute from \"./shapeParts/shapeAbsolute\";\r\n//import point from \"./point\";\r\nimport {createImageLinesFromPoints, getImagePoint} from \"../../helpers/movableImageHelper\";\r\nimport workspaceControllers from \"../../store/workspaceControllers\";\r\nimport {hardCodeIsCaesarStone} from \"../../../../../../misc/fabricatorHardcode\";\r\n//import LineImage from \"./imageParts/lineImage\";\r\n\r\nclass MovableImage {\r\n image = null;\r\n initialSize = {\r\n width: 12,\r\n height: 12, // depth in 3d mode\r\n thickness: 12 // height in 3d (this is not visible param for the cabinets)\r\n };\r\n size = {\r\n width: 12,\r\n height: 12,\r\n thickness: 12,\r\n };\r\n hoverColor = \"#6495ED\";\r\n // debugLineColor = \"rgba(0,255,0,0.3)\",\r\n // debugPointColor = \"rgba(0,0,255,0.3)\",\r\n //fillColor = \"rgba(255,255,255,0)\",\r\n attachedTo = null;\r\n type;\r\n part;\r\n shapeRotatable;\r\n shapeType = \"square\";\r\n renderMovableImage = null; //new RenderMovableImage(this);\r\n\r\n constructor(id, priority = null, subType) {\r\n this.id = id;\r\n this.priority = priority;\r\n this.subType = subType;\r\n this.pos = { x: 0, y: 0 };\r\n this._state = {\r\n mouseDown: false,\r\n mouseDownPosition: null,\r\n mouseDownSize: null,\r\n hovering: false,\r\n isRotatable: false,\r\n minimumHeight: 1,\r\n minimumWidth: 1,\r\n };\r\n this.rotatedDegrees = 0;\r\n this.rotatedDegreesSlab = 0;\r\n this.featureId = id;\r\n this.pricePerArea = 0;\r\n this.isHidden = false;\r\n this.isDisabledInPopup = false;\r\n this.Direction = {\r\n RIGHT: 0,\r\n LEFT: 1\r\n };\r\n this.FlipDirection = {\r\n HORIZONTAL: 0,\r\n VERTICAL: 1\r\n };\r\n this.resizablePoint = null;\r\n this.onClicked = null;\r\n this.onHover = null;\r\n this.shapeAbsolute = new ShapeAbsolute(this); // this is used to snap images\r\n this.params = {\r\n canSnap: true\r\n }\r\n\r\n //this.initEvents();\r\n }\r\n\r\n //private methods\r\n _setFillColor = (red, green, blue, alpha) => {\r\n let fillColor =\r\n \"rgba(\" + red + \", \" + green + \", \" + blue + \", \" + alpha + \")\";\r\n void fillColor;\r\n }\r\n _setImage = (value) => { this.image = value; }\r\n _setAttachedTo = (value) => {\r\n if (value) {\r\n this.attachedTo = value;\r\n }\r\n }\r\n _setHovering = (value) => {\r\n this._state.hovering = value;\r\n return value;\r\n }\r\n _snappedPos = () => {\r\n let scaledGridSize = config.workspace.getScaledGridSize();\r\n\r\n let newX = Math.round(this.pos.x / scaledGridSize) * scaledGridSize;\r\n let newY = Math.round(this.pos.y / scaledGridSize) * scaledGridSize;\r\n return {\r\n x: newX,\r\n y: newY\r\n };\r\n }\r\n\r\n _moveImage = (mousePos) => {\r\n const scale = workspace.getScale();\r\n let xDiff = (this._state.mouseDownPosition.x - mousePos.x) / scale;\r\n let yDiff = (this._state.mouseDownPosition.y - mousePos.y) / scale;\r\n\r\n this.updateSnappedPos();\r\n\r\n this.pos.x -= xDiff;\r\n this._state.mouseDownPosition.x = mousePos.x;\r\n\r\n this.pos.y -= yDiff;\r\n this._state.mouseDownPosition.y = mousePos.y;\r\n };\r\n\r\n resetAbsolutePos = () => {\r\n if (this.params.canSnap) {\r\n this.shapeAbsolute.setAbsolutePos(null); //reset minLength for correct calculations without stacking\r\n this.shapeAbsolute.setSnappedWithShape(null);\r\n this.shapeAbsolute.setSnappedShapeGroup(null);\r\n }\r\n }\r\n\r\n updateLinesLength = () => {\r\n for (const line of this.getLines()) {\r\n line.updateLineLength();\r\n }\r\n }\r\n\r\n updateSnappedPos = () => {\r\n if (this.params.canSnap) {\r\n this.shapeAbsolute.setAbsolutePos(null); //reset minLength for correct calculations without stacking\r\n this.shapeAbsolute.setSnappedWithShape(null);\r\n this.shapeAbsolute.setSnappedShapeGroup(null);\r\n\r\n //let distancesToWalls = ShapeHelper.getDistancesToWalls(this);\r\n let distancesToShapes = ShapeHelper.getDistancesToShapes(this);\r\n let distancesToImages = ShapeHelper.getDistancesToImages(this);\r\n //console.log(\"distancesToWalls\", distancesToWalls);\r\n //console.log(\"distancesToShapes\", distancesToShapes);\r\n //console.log(\"distancesToImages\", distancesToImages);\r\n\r\n let snapPossibilitiesToShapes = ShapeHelper.getSnappingPossibilities(distancesToShapes);\r\n let snapPossibilitiesToImages = ShapeHelper.getSnappingPossibilities(distancesToImages);\r\n //let snapPossibilitiesToWalls = ShapeHelper.getSnappingPossibilities(distancesToWalls);\r\n //console.log(\"snapPossibilitiesToShapes\", snapPossibilitiesToShapes);\r\n\r\n //walls\r\n // let [absolutePosToWalls, snappedWithWalls] = ShapeHelper.getAbsolutePosFromSnapPossibilities(snapPossibilitiesToWalls, this.pos);\r\n // if (absolutePosToWalls) {\r\n // this.shapeAbsolute.setAbsolutePos(absolutePosToWalls);\r\n // void snappedWithWalls;\r\n // //snappedWithImage.shapeAbsolute.setSnappedWithImage(this);\r\n // }\r\n\r\n //shapes\r\n let [absolutePosToShapes, snappedWithShape] = ShapeHelper.getAbsolutePosFromSnapPossibilities(snapPossibilitiesToShapes, this.pos);\r\n if (absolutePosToShapes) {\r\n this.shapeAbsolute.setAbsolutePos(absolutePosToShapes);\r\n snappedWithShape.shapeAbsolute.setSnappedWithShape(this);\r\n workspaceControllers.snappedShapeGroups.setSameSnappedShapesGroup(this, snappedWithShape);\r\n }\r\n\r\n //images\r\n let [absolutePosToImages, snappedWithImage] = ShapeHelper.getAbsolutePosFromSnapPossibilities(snapPossibilitiesToImages, this.pos);\r\n if (absolutePosToImages) {\r\n this.shapeAbsolute.setAbsolutePos(absolutePosToImages);\r\n workspaceControllers.snappedShapeGroups.setSameSnappedShapesGroup(this, snappedWithImage);\r\n //snappedWithImage.shapeAbsolute.setSnappedWithImage(this);\r\n }\r\n }\r\n }\r\n\r\n _isMouesOverImage = (mousePos) => {\r\n let scale = workspace.getScale();\r\n let offset = workspace.getOffset();\r\n let realPos = {\r\n x: (this.pos.x * scale) + offset.x,\r\n y: (this.pos.y * scale) + offset.y\r\n };\r\n let realSize = {\r\n width: this.size.width * scale,\r\n height: this.size.height * scale\r\n };\r\n let axis = {\r\n x: realPos.x + (realSize.width / 2),\r\n y: realPos.y + (realSize.height / 2)\r\n }\r\n let points = [\r\n this._getRotatedPoint({x: realPos.x, y: realPos.y}, axis, this.rotatedDegrees),\r\n this._getRotatedPoint({x: realPos.x + realSize.width, y: realPos.y}, axis, this.rotatedDegrees),\r\n this._getRotatedPoint({x: realPos.x + realSize.width, y: realPos.y + realSize.height}, axis, this.rotatedDegrees),\r\n this._getRotatedPoint({x: realPos.x, y: realPos.y + realSize.height}, axis, this.rotatedDegrees)\r\n ];\r\n\r\n let maxX = points[0].x;\r\n let maxY = points[0].y;\r\n let minX = points[0].x;\r\n let minY = points[0].y;\r\n\r\n for (let i = 0; i < points.length; i++) {\r\n let point = points[i];\r\n if (maxX < point.x)\r\n maxX = point.x;\r\n if (minX > point.x)\r\n minX = point.x;\r\n if (maxY < point.y)\r\n maxY = point.y;\r\n if (minY > point.y)\r\n minY = point.y;\r\n }\r\n\r\n const isHovering = mousePos.x > minX && mousePos.y > minY && mousePos.x < maxX && mousePos.y < maxY;\r\n this._setHovering(isHovering);\r\n\r\n return isHovering;\r\n };\r\n\r\n _getRotatedPoint(point, around, angle) {\r\n let s = Math.sin(angle);\r\n let c = Math.cos(angle);\r\n point.x -= around.x;\r\n point.y -= around.y;\r\n\r\n let newPoint = {\r\n x: point.x * c - point.y * s,\r\n y: point.x * s + point.y * c\r\n };\r\n\r\n return {\r\n x: newPoint.x + around.x,\r\n y: newPoint.y + around.y\r\n };\r\n }\r\n\r\n //private event handles\r\n _onMouseMove(mousePos, e) {\r\n if (e.terminate) {\r\n this._setHovering(false);\r\n return false;\r\n }\r\n if (this._isMouesOverImage(mousePos)) {\r\n if (this.onHover) {\r\n this.onHover(this);\r\n }\r\n if (this._state.mouseDown) {\r\n EventManager.setCursor('move', this, true);\r\n this._moveImage(mousePos);\r\n }\r\n else {\r\n EventManager.setCursor('move', this)\r\n }\r\n return true;\r\n }\r\n //smooth scrolling\r\n if (this._state.mouseDown) {\r\n this._moveImage(mousePos);\r\n }\r\n EventManager.resetCursor(this);\r\n return false;\r\n }\r\n\r\n _onMouseUp(mousePos, e) {\r\n void mousePos;\r\n void e;\r\n EventManager.releaseStealLock(this);\r\n this._state.mouseDown = false;\r\n this._state.mouseDownPosition = null;\r\n this._state.mouseDownSize = null;\r\n }\r\n\r\n _onMouseDown = (mousePos, e) => {\r\n void e;\r\n //if not then handle event with this object\r\n if (this.isHovering()) {\r\n const reduxState = store.getState();\r\n const activeButton = reduxState.sqftMenuState.activeButton;\r\n const isShowSlabTool = reduxState.sqftSlabState.isShowSlabTool;\r\n\r\n //Delete this\r\n if (activeButton === SIDEBAR_SLAB_BUTTONS.delete && isShowSlabTool) {\r\n workspace.removeSlabImage(this);\r\n }\r\n\r\n //Move self\r\n if (EventManager.getCursor().indexOf(\"move\") >= 0) {\r\n\r\n this._state.mouseDown = true;\r\n this._state.mouseDownPosition = mousePos;\r\n this._state.mouseDownSize = this.getSize();\r\n }\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n //public methods\r\n setPricePerArea = (val) => { this.pricePerArea = _.clone(val) };\r\n setPosition = (value) => { this.pos = value; }\r\n setId = (id) => { this.id = id };\r\n setFeatureId = (featureId) => { this.featureId = featureId };\r\n getIsRotatable = () => { return this._state.isRotatable };\r\n getState = () => { return this._state };\r\n setIsRotatable = (isRotatable) => { this._state.isRotatable = isRotatable};\r\n setRotationDegrees = (rotationDegrees) => {\r\n this.rotatedDegrees = rotationDegrees\r\n }\r\n getCenter = () => {\r\n return {\r\n x: this.size.width / 2,\r\n y: this.size.height / 2\r\n }\r\n }\r\n getCenterPosition = () => {\r\n const center = this.getCenter();\r\n const position = this.getPosition();\r\n\r\n return {\r\n x: position.x + center.x,\r\n y: position.y + center.y\r\n }\r\n }\r\n\r\n setSize = (value) => {\r\n this.size.width = value.width;\r\n this.size.height = value.height;\r\n }\r\n\r\n setInitialSize = (value) => {\r\n this.initialSize.width = value.width;\r\n this.initialSize.height = value.height;\r\n }\r\n\r\n getPosition = () => {\r\n let absolutePos = this.shapeAbsolute.getAbsolutePosition();\r\n\r\n return absolutePos !== null ? absolutePos : this.pos;\r\n };\r\n getSnappedPosition = () => { return this._snappedPos(); };\r\n getPosField = () => {\r\n let position = this.getPosition();\r\n let offset = workspace.getOffset();\r\n const scale = workspace.getScale();\r\n\r\n return {\r\n x: ((position.x + (this.size.width / 2)) * scale) + offset.x,\r\n y: ((position.y + (this.size.height / 2)) * scale) + offset.y\r\n }\r\n };\r\n isHovering = () => {\r\n //console.log(\"this._state.hovering\", this._state.hovering);\r\n return this._state.hovering === true;\r\n };\r\n getAttachedTo = () => { return this.attachedTo; };\r\n getImage = () => { return this.image; };\r\n getSize = () => { return this.size; };\r\n getWidth = () => { return this.getSize().width; };\r\n getHeight = () => { return this.getSize().height; };\r\n getThickness = () => { return this.getSize().thickness; };\r\n getRotation = () => { return this.rotatedDegrees; };\r\n export = () => {\r\n let linesData = [];\r\n const Lines = this.getLines();\r\n for (const lineIndex in Lines) {\r\n if (Lines.hasOwnProperty(lineIndex)) {\r\n linesData.push({lineIndex, ...Lines[lineIndex].exportData()});\r\n }\r\n }\r\n\r\n let exportData = {\r\n pos: this.pos,\r\n id: this.id,\r\n featureId: this.featureId ? this.featureId : this.image.dataset.id, // this.image.dataset.id old support\r\n image: {\r\n src: this.image.currentSrc || $(this.image).attr('src'),\r\n id: this.image.dataset.id,\r\n name: this.image.dataset.name,\r\n nameMetric: this.image.dataset.nameMetric,\r\n width: this.image.width,\r\n height: this.image.height\r\n },\r\n type: this.type,\r\n subType: this.subType,\r\n part: this.part,\r\n size: this.size,\r\n rotatedDegrees: this.rotatedDegrees,\r\n rotatedDegreesSlab: this.rotatedDegreesSlab,\r\n attachedTo: this.attachedTo ? this.attachedTo.id : null,\r\n attachedToParentId: this.attachedTo\r\n ? this.attachedTo.getParent\r\n ? this.attachedTo.getParent().id\r\n : null\r\n : null,\r\n isDisabledInPopup: this.isDisabledInPopup,\r\n pricePerArea: this.pricePerArea,\r\n priority: this.priority,\r\n shapeAbsoluteData: this.shapeAbsolute ? this.shapeAbsolute.export() : null,\r\n linesData: linesData,\r\n };\r\n if (this.attachedTo && this.attachedTo.getLineLength){\r\n exportData.lineLength = config.measureUnit === \"Metric\" ? mmToM(this.attachedTo.getLineLengthMm()) : this.attachedTo.getLineLength();\r\n exportData.partId = this.attachedTo.getParent().partId;\r\n }\r\n if (this.type === \"edge\") {\r\n const navItems = getEdgeFeatures();\r\n let edge = navItems.find(edge => edge.part.dbFeature.id === +this.image.dataset.id);\r\n let unit = edge ? edge.unit : null;\r\n exportData.length = (unit ? unit.toLowerCase() : null) === \"each\"\r\n ? 1\r\n : config.measureUnit === \"Imperial\" ? getEdgeLength(this.attachedTo) : mmToM(getEdgeLength(this.attachedTo));\r\n } else if (this.type === \"backsplash\") {\r\n exportData.length = getBacksplashArea(this.attachedTo.getBacksplashHeight(), this.attachedTo);\r\n } else if (this.type === \"wall\") {\r\n exportData.length = exportData.lineLength;\r\n }\r\n\r\n return exportData;\r\n };\r\n importData = (importData) => {\r\n const skipImportProps = ['image', 'shapeAbsolute', 'linesData'];\r\n Object.keys(importData).forEach(key => {\r\n if (importData.hasOwnProperty(key)) {\r\n if (!skipImportProps.includes(key)) {\r\n this[key] = importData[key];\r\n }\r\n }\r\n });\r\n if (importData.shapeAbsoluteData) {\r\n this.shapeAbsolute.import(importData.shapeAbsoluteData);\r\n }\r\n if (importData.linesData) {\r\n for (const lineData of importData.linesData) {\r\n const line = this.lines.find(line => line.lineIndex === +lineData.lineIndex);\r\n if (line) {\r\n line.importData(lineData);\r\n }\r\n }\r\n }\r\n }\r\n //todo sqft-react is this needed?\r\n // generateImage = (value, shapes) => {\r\n // let domImg = document.createElement('img');\r\n // domImg.crossOrigin = \"Anonymous\";\r\n // let $img = $(domImg);\r\n // $img.css({\r\n // position: 'absolute',\r\n // width: '1px',\r\n // height: '1px'\r\n // });\r\n // $img.attr({\r\n // 'data-id': value.image.id,\r\n // 'data-name': value.image.name,\r\n // });\r\n // let attachedTo = null;\r\n // if (value.attachedTo) {\r\n // for (let i = 0; i < shapes.length; i++) {\r\n // let shape = shapes[i];\r\n // if (shape.getLines && !attachedTo) {\r\n // let lines = shape.getLines();\r\n // for(let n = 0; n < lines.length; n++) {\r\n // let line = lines[n];\r\n // if ( line.id == value.attachedTo && !attachedTo ) {\r\n // attachedTo = line;\r\n // }\r\n // }\r\n // }\r\n // }\r\n // }\r\n // $img.appendTo($('body'));\r\n // $img.attr('src', (config.isKiosk || value.image.src.includes('data:image') ? '' : '/api/SqFtCalc/GetImage?url=') + value.image.src);\r\n // return {\r\n // image: domImg,\r\n // attachedTo: this.attachedTo\r\n // };\r\n // };\r\n getTotalInches = function() {\r\n return 0;\r\n };\r\n\r\n /**\r\n * Public functions\r\n * @param flipDirection\r\n */\r\n flip = function(flipDirection) {\r\n void flipDirection\r\n };\r\n rotate = (degrees, direction) => {\r\n //todo slab rotation QCDES-1358\r\n if (this.type === MOVABLE_IMAGE_TYPES.slabImage) {\r\n return\r\n }\r\n const isSlabMode = store.getState().sqftSlabState.isShowSlabTool;\r\n isSlabMode ? this.rotatedDegreesSlab += degrees : this.rotatedDegrees += degrees;\r\n (this.rotatedDegrees === 360) && (this.rotatedDegrees = 0);\r\n (this.rotatedDegreesSlab === 360) && (this.rotatedDegreesSlab = 0);\r\n\r\n direction = direction || this.Direction.Right;\r\n let angle = (degrees * Math.PI / 180);\r\n if (direction === this.Direction.LEFT)\r\n angle *= -1;\r\n if (this.shapeRotatable) {\r\n this.shapeRotatable.rotateShapeRotatablePoints(this.getCenter(), angle, isSlabMode);\r\n }\r\n this.rotateBorderPoints(angle);\r\n };\r\n rotateBorderPoints = (angle) => {\r\n const center = this.getCenter();\r\n for (const linePoint of this.getLinePoints()) {\r\n linePoint.rotate(center, angle);\r\n }\r\n }\r\n init = (position, image, size, attachedTo, isHidden) => {\r\n this.setPosition(position);\r\n this._setImage(image);\r\n this.setSize(size);\r\n this.setInitialSize(size);\r\n this._setAttachedTo(attachedTo);\r\n function getRandomInt(min, max) {\r\n return Math.floor(Math.random() * (max - min)) + min;\r\n }\r\n this._setFillColor(getRandomInt(0, 255), getRandomInt(0, 255), getRandomInt(0, 255), 0.3);\r\n if (isHidden) {\r\n this.isHidden = true;\r\n } else {\r\n this.initEvents();\r\n //this.initResizablePoint(position);\r\n }\r\n this.lines = this.createLines();\r\n //hide lines for slab images\r\n if (this.type === MOVABLE_IMAGE_TYPES.slabImage) {\r\n this.deregisterLineEvents();\r\n }\r\n\r\n this.renderMovableImage = new RenderMovableImage(this);\r\n };\r\n initEvents = () => {\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_MOVE,\r\n this._onMouseMove,\r\n this,\r\n this.priority ? this.priority : EventManager.priorities.IMAGE - (this.attachedTo ? 1 : 0)\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_DOWN,\r\n this._onMouseDown,\r\n this,\r\n this.priority ? this.priority : EventManager.priorities.IMAGE - (this.attachedTo ? 1 : 0)\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_UP,\r\n this._onMouseUp,\r\n this,\r\n this.priority ? this.priority : EventManager.priorities.IMAGE - (this.attachedTo ? 1 : 0)\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.RENDER,\r\n this._render,\r\n this,\r\n this.priority ? this.priority : EventManager.priorities.IMAGE - (this.attachedTo ? 1 : 0)\r\n );\r\n };\r\n\r\n initResizablePoint = () => {\r\n let pointParams = {\r\n priority: EventManager.priorities.BOX_POINT,\r\n movable: true,\r\n isCentered: true,\r\n isVisibleOnHover: true,\r\n moveCallback: (mousePos, movable) => {\r\n //const movablePoint = movable.parent;\r\n const movableImage = movable.grandParent;\r\n //const size = movableImage.getSize();\r\n const state = movableImage.getState();\r\n let scale = workspace.getScale();\r\n let xDiff = (movable.state.mouseDownPosition.x - mousePos.x) / scale;\r\n let yDiff = (movable.state.mouseDownPosition.y - mousePos.y) / scale;\r\n // const newWidth = movable.state.mouseDownSize.width - xDiff;\r\n // const newHeight = movable.state.mouseDownSize.height - yDiff;\r\n const newWidth = (movable.state.mouseDownSize.width - xDiff + movable.state.mouseDownSize.height - yDiff) / 2;\r\n const newHeight = (movable.state.mouseDownSize.height - yDiff + movable.state.mouseDownSize.width - xDiff) / 2;\r\n\r\n if (newHeight >= state.minimumHeight && newWidth >= state.minimumWidth ) {\r\n movableImage.setSize({\r\n width: newWidth,\r\n height: newHeight\r\n });\r\n movable.posX = newWidth;\r\n movable.posY = newHeight;\r\n }\r\n },\r\n mouseUpCallback: (mousePos, movable) => {\r\n movable.state.mouseDownSize = null\r\n },\r\n mouseDownCallback: (mousePos, movable) => {\r\n const movableImage = movable.grandParent;\r\n movable.state.mouseDownSize = {...movableImage.getSize()};\r\n }\r\n };\r\n let pointDesign = {\r\n radius: 10,\r\n lineWidth: 1,\r\n layout: CORE_POINT_LAYOUTS.resize\r\n };\r\n //const position = this.getPosition();\r\n const size = this.getSize();\r\n const pointPositionX = size.width;\r\n const pointPositionY = size.height;\r\n this.resizablePoint = new PointV2(pointPositionX, pointPositionY, this, pointParams, pointDesign);\r\n }\r\n\r\n deregisterEvents = () => {\r\n EventManager.removeEvent(this);\r\n this.isHidden = true;\r\n this.deregisterLineEvents()\r\n };\r\n\r\n deregisterLineEvents = () => {\r\n const lines = this.getLines();\r\n for (const line of lines) {\r\n line.deregisterEvents();\r\n }\r\n };\r\n\r\n reInitEvents = () => {\r\n if (this.isHidden) {\r\n this.initEvents();\r\n this.isHidden = false;\r\n this.reInitLineEvents();\r\n }\r\n };\r\n\r\n reInitLineEvents = () => {\r\n //hide lines for slab images\r\n if (this.type !== MOVABLE_IMAGE_TYPES.slabImage) {\r\n for (const line of this.getLines()) {\r\n line.reInitEvents();\r\n }\r\n }\r\n };\r\n\r\n destroy = (protect) => {\r\n if (!protect) {\r\n EventManager.removeEvent(this);\r\n for (const line of this.getLines()) {\r\n line.destroy();\r\n }\r\n if (this.resizablePoint) {\r\n this.resizablePoint.destroy();\r\n }\r\n }\r\n };\r\n\r\n stealCursor = function(who) {\r\n if (this === who) {\r\n EventManager.resetCursor(this);\r\n }\r\n };\r\n\r\n resetCursor = function(who) {\r\n void who;\r\n EventManager.resetCursor(this);\r\n };\r\n\r\n // getMidPoint(from, to) {\r\n // return {\r\n // x: from.x + (to.x - from.x)/2,\r\n // y: from.y + (to.y - from.y)/2\r\n // };\r\n // }\r\n\r\n isIE = function() {\r\n return (/Trident/i).test(window.navigator.appVersion);\r\n };\r\n\r\n getSrc = function(img) {\r\n if (img) {\r\n let src = img.getAttribute('src');\r\n if (src) {\r\n return src;\r\n }\r\n src = img.getAttribute(\"style\");\r\n if (src) {\r\n return src.replace(/background-image: url\\(\"\\/api\\/SqFtCalc\\/GetImage\\?url=/g, \"\").replace(/\"\\);/g, \"\");\r\n }\r\n }\r\n return \"\";\r\n };\r\n\r\n isSVG = (img) => {\r\n return (/data:image\\/svg\\+xml;base64,/).test(this.getSrc(img));\r\n };\r\n\r\n getLinePointsPointField = () => {\r\n const points = this.getLines().map(line => line.from);\r\n return points.map(point => getPointField(point.x, point.y, this))\r\n }\r\n\r\n getPointsPointField = () => {\r\n return this.getLinePointsPointField()\r\n }\r\n\r\n getBorderPointsOnWorkspace = () => {\r\n const posField = this.getPosition();\r\n const points = this.getLines().map(line => line.from);\r\n return points.map(point => {\r\n return {\r\n x: posField.x + point.x,\r\n y: posField.y + point.y\r\n }\r\n })\r\n }\r\n\r\n getPointsPosOnWorkspace = () => {\r\n return this.getBorderPointsOnWorkspace();\r\n };\r\n\r\n createBorderPointsPosition = () => {\r\n return [\r\n getImagePoint(0, 0, this),\r\n getImagePoint(this.size.width, 0, this),\r\n getImagePoint(this.size.width, this.size.height, this),\r\n getImagePoint(0, this.size.height, this),\r\n ]\r\n\r\n // return [\r\n // new point(0, 0, this),\r\n // new point(this.size.width, 0, this),\r\n // new point(this.size.width, this.size.height, this),\r\n // new point(0, this.size.height, this),\r\n // ]\r\n }\r\n\r\n getLines = () => {\r\n return this.lines\r\n }\r\n\r\n getPrevLine = (line) => {\r\n const index = this.lines.indexOf(line);\r\n if (index === -1) return null; // Line not found\r\n\r\n return this.lines[(index - 1 + this.lines.length) % this.lines.length]; // Loop back if it's the first line\r\n }\r\n\r\n getNextLine = (line) => {\r\n const index = this.lines.indexOf(line);\r\n if (index === -1) return null; // Line not found\r\n\r\n return this.lines[(index + 1) % this.lines.length]; // Loop back if it's the last line\r\n }\r\n\r\n getLinePoints = () => {\r\n return this.lines.map(line => line.from)\r\n }\r\n\r\n revealMeasurementsInsideShape = () => {\r\n for (const imageLine of this.getLines()) {\r\n imageLine.measurementInsideShape.revealEvents();\r\n }\r\n }\r\n\r\n hideMeasurementsInsideShape = () => {\r\n for (const imageLine of this.getLines()) {\r\n imageLine.measurementInsideShape.hideEvents();\r\n }\r\n }\r\n\r\n isAnyLineHovering = () => {\r\n const lines = this.getLines();\r\n for (const line of lines) {\r\n if (line.isHovering()) {\r\n return true\r\n }\r\n }\r\n\r\n return false\r\n }\r\n\r\n createLines = () => {\r\n return createImageLinesFromPoints(this.createBorderPointsPosition(), this);\r\n }\r\n\r\n getOffset = () => {\r\n const scale = config.scale;\r\n const workspacePos = workspace.getOffset();\r\n let _pos = this.getPosition();\r\n if (config.workspace.snapToGrid) {\r\n _pos = this.getSnappedPosition();\r\n }\r\n return {\r\n x: workspacePos.x + (_pos.x * scale),\r\n y: workspacePos.y + (_pos.y * scale)\r\n }\r\n };\r\n\r\n shouldRenderMeasurementsInsideTheShape = () => {\r\n return APPLIANCES_THAT_SHOULD_RENDER_MEASUREMENTS_INSIDE_THE_SHAPE.includes(this.subType)\r\n && !hardCodeIsCaesarStone(); //CAES-547 remove measurements for the CaesarStone\r\n }\r\n\r\n getOuterShape = () => {\r\n const centerPos = this.getCenter();\r\n const centerPosOnField = getPointField(centerPos.x, centerPos.y, this);\r\n const shapes = workspace.getShapes(true);\r\n //let countInsidePoints;\r\n for (let shape of shapes) {\r\n //countInsidePoints = 0;\r\n if (shape instanceof sqftShape) {\r\n // for (let borderPoint of borderPoints) {\r\n // if (isPointInsideShape(borderPoint, shape, true)) {\r\n // countInsidePoints += 1\r\n // }\r\n // }\r\n const isCenterInsideShape = isPointInsideShape(centerPosOnField, shape, true);\r\n if (isCenterInsideShape) {\r\n return shape\r\n }\r\n // if (countInsidePoints >= 2) {\r\n // return shape\r\n // }\r\n }\r\n }\r\n\r\n return null\r\n }\r\n\r\n _render = (ctx) => {\r\n this.renderMovableImage.render(ctx);\r\n }\r\n}\r\n\r\nexport default MovableImage;\r\n","import * as uuid from \"uuid\";\r\nimport Movable from \"../workspace/mixin/movable\";\r\nimport EventManager from \"../../store/sqftEventManager\";\r\nimport ModelCorePoint from \"../workspace/textBox/model/modelCorePoint\";\r\nimport workspace from \"../workspace\";\r\nimport {getPointField, getPointOnWorkspace} from \"../../../../helpers/sqftHelper\";\r\nimport config from \"../../store/sqftConfig\";\r\nimport DrawImage from \"../workspace/textBox/draw/drawImage\";\r\nimport COLOR_THEMES, {COLOR} from \"../../store/colorThemes\";\r\nimport RenderFigures from \"../../helpers/renderFigures\";\r\n\r\nexport const CORE_POINT_LAYOUTS = {\r\n black: 'black',\r\n white: 'white',\r\n green: 'green',\r\n ear: 'ear',\r\n resize: 'resize',\r\n}\r\n\r\nexport default class PointV2 {\r\n _modelCorePoint;\r\n id;\r\n parent;\r\n design = {\r\n radius: 12,\r\n lineWidth: 1,\r\n layout: CORE_POINT_LAYOUTS.white\r\n };\r\n params = {\r\n priority: EventManager.priorities.POINT,\r\n movable: false,\r\n isCentered: false,\r\n\r\n isCenteredByY: false,\r\n isResizedByPoint: false,\r\n isScaledByPoint: false,\r\n isVisibleOnHover: false,\r\n shouldRotateShape: false,\r\n };\r\n\r\n constructor(x, y, parent, pointPrams = {}, design = {}) {\r\n this.params = Object.assign(this.params, pointPrams);\r\n this.design = Object.assign(this.design, design);\r\n let mixins = {\r\n movable : this.params.movable\r\n ? new Movable(x,\r\n y,\r\n this.design.radius,\r\n this.design.radius,\r\n this.params.priority,\r\n this,\r\n parent,\r\n this.params.moveCallback,\r\n this.params.mouseUpCallback,\r\n this.params.mouseDownCallback\r\n )\r\n : null,\r\n };\r\n this._modelCorePoint = new ModelCorePoint(x, y, parent, mixins);\r\n this.parent = parent;\r\n this.id = uuid.v4();\r\n this.initEvents();\r\n }\r\n\r\n get x() {\r\n return this._modelCorePoint.getPosX();\r\n }\r\n\r\n get y() {\r\n return this._modelCorePoint.getPosY();\r\n }\r\n\r\n set x(value) {\r\n return this._modelCorePoint.setPosX(value);\r\n }\r\n\r\n set y(value) {\r\n return this._modelCorePoint.setPosY(value);\r\n }\r\n\r\n get modelCorePoint() {\r\n return this._modelCorePoint;\r\n }\r\n\r\n set modelCorePoint(value) {\r\n this._modelCorePoint = value;\r\n }\r\n\r\n exportData = () => {\r\n return {\r\n id: this.id,\r\n x: this.x,\r\n y: this.y,\r\n design: this.design,\r\n params: this.params,\r\n }\r\n }\r\n\r\n importData = (pointData) => {\r\n this.id = pointData.id;\r\n this.x = pointData.x;\r\n this.y = pointData.y;\r\n this.design = pointData.design;\r\n this.params = pointData.params;\r\n }\r\n\r\n getPointField = () => {\r\n return getPointField(this.modelCorePoint.getPosX(), this.modelCorePoint.getPosY(), this.modelCorePoint.parent);\r\n }\r\n\r\n getPointPosOnWorkspace = () => {\r\n return getPointOnWorkspace(this.modelCorePoint.getPosX(), this.modelCorePoint.getPosY(), this.modelCorePoint.parent);\r\n };\r\n\r\n getParent = () => {\r\n return this.parent;\r\n }\r\n\r\n getPosition = () => {\r\n return {\r\n x: this.modelCorePoint.getPosX(),\r\n y: this.modelCorePoint.getPosY()\r\n }\r\n }\r\n\r\n setPosition(value) {\r\n this.modelCorePoint.setPosX(value.x);\r\n this.modelCorePoint.setPosY(value.y);\r\n }\r\n\r\n rotate(origin, angle, isSlabMode) {\r\n this._modelCorePoint.rotate(origin, angle, isSlabMode);\r\n }\r\n\r\n initEvents() {\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_MOVE,\r\n this.onMouseMove.bind(this),\r\n this,\r\n this.params.priority\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_DOWN,\r\n this.onMouseDown.bind(this),\r\n this,\r\n this.params.priority\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_UP,\r\n this.onMouseUp.bind(this),\r\n this,\r\n this.params.priority\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.RENDER,\r\n this.render.bind(this),\r\n this,\r\n this.params.priority\r\n );\r\n }\r\n\r\n onMouseMove() {\r\n }\r\n\r\n onMouseUp() {\r\n }\r\n\r\n onMouseDown() {\r\n }\r\n\r\n delete() {\r\n this.deregisterEvents();\r\n }\r\n\r\n destroy() {\r\n this.delete();\r\n }\r\n\r\n deregisterEvents = () => {\r\n EventManager.removeEvent(this.modelCorePoint.mixins.movable);\r\n EventManager.removeEvent(this);\r\n }\r\n\r\n reInitEvents = () => {\r\n this.initEvents();\r\n if (this.modelCorePoint.mixins.movable) {\r\n this.modelCorePoint.mixins.movable.reInitEvents();\r\n }\r\n }\r\n\r\n render = (ctx) => {\r\n if (workspace && workspace.getState().loading) return;\r\n\r\n // display only hovered or when mouse is down\r\n if (this.params.isVisibleOnHover && !this.isHoveredWithParent() && !this.isMouseDownWithParent()) {\r\n return\r\n }\r\n\r\n let pointField = this.getPointField();\r\n\r\n ctx.save();\r\n ctx.beginPath();\r\n\r\n switch (this.design.layout) {\r\n case CORE_POINT_LAYOUTS.black: {\r\n let arcRadius = 0;\r\n if (this.isHoveredWithParent()) {\r\n arcRadius = this.design.radius\r\n ctx.fillStyle = COLOR.blackLight;\r\n } else {\r\n arcRadius = this.design.radius / 2\r\n ctx.fillStyle = COLOR.white;\r\n }\r\n\r\n ctx.arc(\r\n pointField.x,\r\n pointField.y,\r\n arcRadius,\r\n 0,\r\n 2 * Math.PI,\r\n false\r\n );\r\n\r\n ctx.strokeStyle = COLOR_THEMES[config.activeTheme].primary;\r\n\r\n ctx.stroke();\r\n ctx.fill();\r\n break;\r\n }\r\n case CORE_POINT_LAYOUTS.white: {\r\n ctx.arc(\r\n pointField.x,\r\n pointField.y,\r\n this.design.radius,\r\n 0,\r\n Math.PI,\r\n false\r\n );\r\n\r\n ctx.strokeStyle = COLOR_THEMES[config.activeTheme].primary;\r\n ctx.fillStyle = '#ffffff';\r\n ctx.stroke();\r\n ctx.fill();\r\n break;\r\n }\r\n case CORE_POINT_LAYOUTS.green: {\r\n let arcRadius = 0;\r\n if (this.modelCorePoint.mixins.movable\r\n && this.modelCorePoint.mixins.movable.state.hovering\r\n ) {\r\n arcRadius = this.design.radius + 5;\r\n ctx.strokeStyle = COLOR.blackLight;\r\n ctx.fillStyle = COLOR.blackLight;\r\n } else {\r\n arcRadius = this.design.radius;\r\n ctx.strokeStyle = 'rgba(159,197,34,0.47)';\r\n ctx.fillStyle = 'rgba(159,197,34, 1)';\r\n }\r\n ctx.arc(\r\n pointField.x,\r\n pointField.y,\r\n arcRadius,\r\n 0,\r\n Math.PI * 2,\r\n false\r\n );\r\n\r\n ctx.lineWidth = 2;\r\n ctx.fill();\r\n\r\n // RenderFigures.drawRotatedArrow(ctx,\r\n // pointField.x - 20, pointField.y,\r\n // pointField.x, pointField.y - 20,\r\n // pointField.x - 20, pointField.y - 20,\r\n // 10\r\n // )\r\n\r\n ctx.stroke();\r\n break;\r\n }\r\n case CORE_POINT_LAYOUTS.ear: {\r\n let subLineWidth = 10;\r\n let subLineHeight = this.design.radius;\r\n ctx.moveTo(pointField.x, pointField.y - subLineHeight);\r\n ctx.lineTo(pointField.x + subLineWidth, pointField.y - subLineHeight);\r\n RenderFigures.renderOval(ctx, this.design.radius * 2 , this.design.radius * 2, pointField.x+ subLineWidth, pointField.y);\r\n ctx.moveTo(pointField.x + subLineWidth, pointField.y + subLineHeight);\r\n ctx.lineTo(pointField.x, pointField.y + subLineHeight);\r\n\r\n ctx.strokeStyle = COLOR_THEMES[config.activeTheme].primary;\r\n ctx.fillStyle = '#ffffff';\r\n ctx.lineWidth = this.design.lineWidth;\r\n ctx.stroke();\r\n //ctx.fill();\r\n break;\r\n }\r\n case CORE_POINT_LAYOUTS.resize: {\r\n //outside circle\r\n ctx.arc(\r\n pointField.x,\r\n pointField.y,\r\n this.design.radius,\r\n 0,\r\n Math.PI * 2,\r\n false\r\n );\r\n ctx.strokeStyle = COLOR_THEMES[config.activeTheme].primary;\r\n ctx.fillStyle = '#ffffff';\r\n ctx.lineWidth = this.design.lineWidth + 1;\r\n ctx.stroke();\r\n ctx.fill();\r\n\r\n //inside circle\r\n ctx.beginPath();\r\n ctx.arc(\r\n pointField.x,\r\n pointField.y,\r\n this.design.radius - 3,\r\n 0,\r\n Math.PI * 2,\r\n false\r\n );\r\n\r\n ctx.fillStyle = COLOR_THEMES[config.activeTheme].primary;\r\n ctx.lineWidth = this.design.lineWidth + 1;\r\n ctx.fill();\r\n\r\n // arrows\r\n DrawImage.renderImage('resizeArrows', ctx,\r\n pointField.x - this.design.radius / 2 + 1.5,\r\n pointField.y - this.design.radius / 2 + 1.5,\r\n 2.5,\r\n 2.5,\r\n true,\r\n true\r\n );\r\n break;\r\n }\r\n }\r\n\r\n ctx.closePath();\r\n ctx.restore();\r\n };\r\n\r\n isHoveredWithParent() {\r\n const isParentMovableHovered = this.modelCorePoint.parent.mixin\r\n ? this.modelCorePoint.parent.mixin.movable.state.hovering\r\n : false;\r\n const isParentHovered = this.modelCorePoint.parent && this.modelCorePoint.parent.state\r\n ? this.modelCorePoint.parent.state.hovering\r\n : false;\r\n const isParentChildrenHovered = this.modelCorePoint.parent.mixin\r\n ? this.modelCorePoint.parent.mixin.movable.state.hoveringWithChildren\r\n : false;\r\n const isHovered = this.modelCorePoint.mixins.movable\r\n ? this.modelCorePoint.mixins.movable.state.hovering\r\n : false;\r\n\r\n return isParentHovered || isParentMovableHovered || isParentChildrenHovered || isHovered\r\n }\r\n\r\n isMouseDownWithParent() {\r\n const isParentMouseDown = this.modelCorePoint.parent.mixin\r\n ? this.modelCorePoint.parent.mixin.movable.state.mouseDown\r\n : false;\r\n const isParentChildrenMouseDown = this.modelCorePoint.parent.mixin\r\n ? this.modelCorePoint.parent.mixin.movable.state.mouseDownWithChildren\r\n : false;\r\n const isMouseDown = this.modelCorePoint.mixins.movable\r\n ? this.modelCorePoint.mixins.movable.state.mouseDown\r\n : false;\r\n\r\n return isParentMouseDown || isParentChildrenMouseDown || isMouseDown\r\n }\r\n}\r\n","import {\r\n getFontsizeSmall,\r\n getMidPoint,\r\n getPointDistance, getPointField, getPointOnTheLine,\r\n} from \"../../../helpers/sqftHelper\";\r\nimport ShapeHelper from \"../../../helpers/shapeHelper\";\r\n//import COLOR_THEMES from \"../../../../../colorThemes\";\r\nimport COLOR_THEMES from \"../store/colorThemes\";\r\nimport sqftConfig from \"../store/sqftConfig\";\r\n//import workspace from \"../core/workspace\";\r\nimport {\r\n RENDER_TEMPLATES,\r\n SIDEBAR_BUTTONS_MENU,\r\n} from \"../../../constants\";\r\nimport {getDistanceLength, getLineCrownMoldingPoints} from \"./lineHelper\";\r\nimport RenderCabinets from \"./renderCabinets\";\r\nimport RenderFigures from \"./renderFigures\";\r\nimport {COLORS as Colors} from \"../../../../../colorThemes\";\r\nimport store from \"../../../../../store\";\r\nimport config from \"../store/sqftConfig\";\r\nimport workspace from \"../core/workspace\";\r\n\r\nexport default class RenderParts {\r\n static drawMeasurementAroundPoints = (ctx, points, minLength = 3) => {\r\n points.forEach((point, index) => {\r\n const nextPoint = points[index + 1] ? points[index + 1] : points[0];\r\n const midPoint = getMidPoint(point, nextPoint);\r\n const distance = getPointDistance(point, nextPoint);\r\n const scale = workspace.getScale();\r\n if (distance / scale > minLength) {\r\n //const length = addDecimalToLength(measureDistanceToInches(distance / sqftConfig.scale));\r\n const length = getDistanceLength(distance / sqftConfig.scale);\r\n //debugger // eslint-disable-line no-debugger\r\n const lineOrientation = ShapeHelper.getLineOrientation(point, nextPoint);\r\n const mText = ctx.measureText(length);\r\n let fontSize = getFontsizeSmall(),\r\n font = (fontSize).toString() + \"px \" + sqftConfig.activeFontBold,\r\n xMargin = 0,\r\n yMargin = 0,\r\n pos = midPoint\r\n ;\r\n\r\n //todo change index logic\r\n switch (lineOrientation) {\r\n case \"horizontal\": {\r\n yMargin = index === 0\r\n ? -fontSize + sqftConfig.scale / sqftConfig.defaultScale\r\n : +fontSize + sqftConfig.scale / sqftConfig.defaultScale + 10;\r\n break;\r\n }\r\n case \"vertical\": {\r\n xMargin = index === 1 ? mText.width + 5 : -mText.width;\r\n break;\r\n }\r\n // todo rotation\r\n case \"NORTHWEST\": { break;}\r\n case \"NORTHEAST\": { break;}\r\n case \"SOUTHWEST\": { break;}\r\n case \"SOUTHEAST\": { break;}\r\n default:\r\n break;\r\n }\r\n pos.x += xMargin;\r\n pos.y += yMargin;\r\n\r\n ctx.beginPath();\r\n ctx.font = font;\r\n ctx.textAlign = \"center\"; //todo\r\n ctx.fillStyle = COLOR_THEMES[sqftConfig.activeTheme].primary;\r\n ctx.wrapText(length.toString(), pos.x, pos.y, mText.width, font);\r\n ctx.stroke();\r\n ctx.closePath();\r\n }\r\n })\r\n }\r\n\r\n static drawShapeBorders = (ctx, staticOffset, strokeTemplate, fillTemplate, shape) => {\r\n if (sqftConfig.isDevMode()) {\r\n RenderParts.renderDevMode(ctx, shape);\r\n }\r\n let lines = shape.getLines();\r\n const reduxState = store.getState();\r\n const isShowSlabTool = reduxState.sqftSlabState.isShowSlabTool;\r\n\r\n ctx.beginPath();\r\n for (let i = 0; i < lines.length; i++) {\r\n lines[i].staticOffset = staticOffset;\r\n lines[i].render(ctx, i > 0);\r\n lines[i].staticOffset = null;\r\n }\r\n\r\n //set fillStyle and strokeStyle colors\r\n const isShapeHovering = shape.isHoveringOnlyShape();\r\n let shapeColorSet;\r\n\r\n function renderColorSetTemplate(shapeColorSet, isShapeHovering) {\r\n if (isShapeHovering) {// && workspace.getHoverShape() === shape ) {\r\n ctx.strokeStyle = shapeColorSet.primary_border;\r\n ctx.fillStyle = shapeColorSet.primary_hover;\r\n } else {\r\n ctx.strokeStyle = shapeColorSet.primary_border;\r\n ctx.fillStyle = shapeColorSet.primary;\r\n }\r\n }\r\n\r\n function renderFilledPrimaryTemplate(isShapeHovering) {\r\n if (isShapeHovering) {// && workspace.getHoverShape() === shape ) {\r\n ctx.strokeStyle = COLOR_THEMES[sqftConfig.activeTheme].primary_hover;\r\n ctx.fillStyle = COLOR_THEMES[sqftConfig.activeTheme].active_transparent;\r\n } else {\r\n ctx.strokeStyle = COLOR_THEMES[sqftConfig.activeTheme].primary;\r\n ctx.fillStyle = COLOR_THEMES[sqftConfig.activeTheme].primary_transparent;\r\n }\r\n }\r\n\r\n function renderFilledActiveTemplate(isShapeHovering) {\r\n if (isShapeHovering) {// && workspace.getHoverShape() === shape ) {\r\n ctx.strokeStyle = COLOR_THEMES[sqftConfig.activeTheme].active_hover;\r\n ctx.fillStyle = COLOR_THEMES[sqftConfig.activeTheme].primary_transparent;\r\n } else {\r\n ctx.strokeStyle = COLOR_THEMES[sqftConfig.activeTheme].active;\r\n ctx.fillStyle = COLOR_THEMES[sqftConfig.activeTheme].active_transparent;\r\n }\r\n }\r\n\r\n switch (fillTemplate) {\r\n case RENDER_TEMPLATES.accordingToFeature:\r\n shapeColorSet = shape.getColorSet();\r\n if (shapeColorSet) {\r\n renderColorSetTemplate(shapeColorSet, isShapeHovering)\r\n } else {\r\n renderFilledPrimaryTemplate(isShapeHovering)\r\n }\r\n break;\r\n case RENDER_TEMPLATES.filledPrimary:\r\n renderFilledPrimaryTemplate(isShapeHovering)\r\n break;\r\n case RENDER_TEMPLATES.filledActive:\r\n renderFilledActiveTemplate(isShapeHovering)\r\n break;\r\n }\r\n\r\n //set hover style colors\r\n if (isShapeHovering) {\r\n const reduxState = store.getState();\r\n const activeButton = reduxState.sqftMenuState.activeButton;\r\n if (activeButton === SIDEBAR_BUTTONS_MENU.delete\r\n && !isShowSlabTool\r\n ) {\r\n ctx.fillStyle = Colors.red\r\n }\r\n }\r\n\r\n //set lineWidth\r\n switch (strokeTemplate) {\r\n case RENDER_TEMPLATES.linesOnly:\r\n ctx.lineWidth = 0;\r\n ctx.closePath();\r\n break;\r\n case RENDER_TEMPLATES.default:\r\n default:\r\n ctx.fill();\r\n ctx.lineWidth = 2; // Math.ceil(scale);\r\n ctx.closePath();\r\n ctx.stroke();\r\n break;\r\n }\r\n }\r\n\r\n static getBoundingBoxFromShape = (shape) => {\r\n let minX = Infinity;\r\n let minY = Infinity;\r\n let maxX = -Infinity;\r\n let maxY = -Infinity;\r\n\r\n const lines = shape.getLines();\r\n for (let line of lines) {\r\n const renderTo = line.calculateRenderPosition(line.to);\r\n const renderFrom = line.calculateRenderPosition(line.from);\r\n\r\n minX = Math.min(minX, renderFrom.x, renderTo.x);\r\n minY = Math.min(minY, renderFrom.y, renderTo.y);\r\n maxX = Math.max(maxX, renderFrom.x, renderTo.x);\r\n maxY = Math.max(maxY, renderFrom.y, renderTo.y);\r\n }\r\n\r\n return {\r\n x: minX,\r\n y: minY,\r\n width: maxX - minX,\r\n height: maxY - minY\r\n };\r\n };\r\n\r\n /**\r\n * Функция для рисования прямоугольника с полосами под углом.\r\n *\r\n * @param ctx\r\n * @param {Number} x - координата x верхнего левого угла прямоугольника\r\n * @param {Number} y - координата y верхнего левого угла прямоугольника\r\n * @param {Number} width - ширина прямоугольника\r\n * @param {Number} height - высота прямоугольника\r\n * @param {Number} lineWidth - ширина полосы\r\n * @param {Number} angle - угол наклона полос в градусах\r\n * @param {String} color1 - первый цвет\r\n * @param {String} color2 - второй цвет\r\n */\r\n static drawStripedRectangle = (ctx,\r\n x,\r\n y,\r\n width,\r\n height,\r\n lineWidth= 3 * 3.5,\r\n angle= 3 * 1000,\r\n color1 = \"white\",\r\n color2= \"#E6E4E6\") => {\r\n //const scale = sqftConfig.scale;\r\n //const lineWidth = 2 * scale;\r\n //const lineGap = 5 * scale;\r\n const lineGap = 6 * 3.5;\r\n\r\n ctx.save();\r\n\r\n // Define clipping area (visible rectangle)\r\n ctx.beginPath();\r\n ctx.rect(x, y, width, height);\r\n ctx.fillStyle = color1;\r\n ctx.fill();\r\n ctx.clip();\r\n\r\n // Draw diagonal lines across the entire canvas\r\n ctx.beginPath();\r\n ctx.lineWidth = lineWidth;\r\n ctx.strokeStyle = color2;\r\n\r\n // The pattern should cover the entire canvas\r\n for (let i = -ctx.canvas.width * 2; i < ctx.canvas.width; i += lineGap) {\r\n ctx.moveTo(i, -ctx.canvas.height);\r\n ctx.lineTo(i + lineGap + angle, ctx.canvas.height * 2);\r\n }\r\n ctx.stroke();\r\n ctx.restore();\r\n }\r\n\r\n /**\r\n *\r\n * @param ctx\r\n * @param {Number} x - координата x верхнего левого угла прямоугольника\r\n * @param {Number} y - координата y верхнего левого угла прямоугольника\r\n * @param {Number} width - ширина прямоугольника\r\n * @param {Number} height - высота прямоугольника\r\n */\r\n static fillStripedRectangle = (ctx, x, y, width, height) => {\r\n let gradient = ctx.createLinearGradient(x, y, width, height);\r\n gradient.addColorStop(0.25, '#868d91');\r\n gradient.addColorStop(0.25, '#7b8185');\r\n gradient.addColorStop(0.5, '#7b8185');\r\n gradient.addColorStop(0.5, '#868d91');\r\n gradient.addColorStop(0.75, '#868d91');\r\n gradient.addColorStop(0.75, '#7b8185');\r\n gradient.addColorStop(1, '#7b8185');\r\n\r\n // Заливка шейпа градиентом\r\n ctx.fillStyle = gradient;\r\n ctx.fill();\r\n }\r\n\r\n static drawDiagonalStripesV2 = (ctx, shape, lineWidth = 2, rotationAngle = -Math.PI / 4) => {\r\n const bbox = RenderParts.getBoundingBoxFromShape(shape);\r\n void rotationAngle;\r\n void lineWidth;\r\n\r\n ctx.save();\r\n let lines = shape.getLines();\r\n\r\n //draw border\r\n ctx.beginPath();\r\n ctx.rect(bbox.x, bbox.y, bbox.width, bbox.height);\r\n ctx.lineWidth = 2;\r\n ctx.stroke();\r\n\r\n for (let i = 0; i < lines.length; i++) {\r\n //lines[i].render(ctx, i > 0);\r\n }\r\n const pointPos = lines[1].calculateRenderPosition(lines[1].to);\r\n\r\n RenderParts.fillStripedRectangle(ctx, bbox.x, bbox.y, pointPos.x, pointPos.y);\r\n ctx.closePath();\r\n\r\n ctx.restore();\r\n };\r\n\r\n static drawDiagonalStripes = (ctx, shape, lineWidth = 2, rotationAngle = -Math.PI / 4) => {\r\n const bbox = RenderParts.getBoundingBoxFromShape(shape);\r\n // const lightGray = '#80848a';\r\n // const darkGray = '#787c82';\r\n const lightGray = '#5a5c61';\r\n const darkGray = '#54575b';\r\n void rotationAngle;\r\n\r\n // ctx.save();\r\n // let lines = shape.getLines();\r\n // // ctx.beginPath();\r\n // // ctx.rect(bbox.x, bbox.y, bbox.width, bbox.height);\r\n // ctx.beginPath();\r\n // for (let i = 0; i < lines.length; i++) {\r\n // lines[i].render(ctx, i > 0);\r\n // }\r\n // ctx.closePath();\r\n // ctx.clip();\r\n //\r\n // ctx.lineWidth = 2;\r\n // ctx.stroke();\r\n //\r\n // for (let i = 0; i < lines.length; i++) {\r\n // lines[i].render(ctx, i > 0);\r\n // }\r\n // ctx.closePath();\r\n // ctx.clip();\r\n\r\n const scale = config.scale;\r\n const scaledLineWidth = lineWidth * scale;\r\n\r\n RenderParts.drawStripedRectangle(\r\n ctx,\r\n bbox.x,\r\n bbox.y,\r\n bbox.width,\r\n bbox.height,\r\n scaledLineWidth,\r\n 3 * 1000,\r\n lightGray,\r\n darkGray\r\n );\r\n\r\n ctx.restore();\r\n };\r\n\r\n\r\n static drawHoveredBorders = (ctx,\r\n staticOffset,\r\n shape,\r\n style = {\r\n lineWidth: 3,\r\n strokeStyle: COLOR_THEMES[sqftConfig.activeTheme].primary_hover,\r\n shadowBlur: 4,\r\n extendHoveredLine: 0\r\n }\r\n ) => {\r\n let lines = shape.getLines();\r\n\r\n for (let i = 0; i < lines.length; i++) {\r\n if (lines[i].getState().isHovering) {\r\n ctx.save();\r\n ctx.beginPath();\r\n lines[i].staticOffset = staticOffset;\r\n ctx.lineWidth = style.lineWidth;\r\n ctx.shadowColor = ctx.strokeStyle = style.strokeStyle;\r\n ctx.shadowBlur = style.shadowBlur;\r\n\r\n let pointTo = {...lines[i].to};\r\n let pointFrom = {...lines[i].from};\r\n if (style.extendHoveredLine > 0) {\r\n pointFrom = {pos: getPointOnTheLine(lines[i].from, lines[i].to, 5)};\r\n pointTo = {pos: getPointOnTheLine(lines[i].to, lines[i].from, 5)};\r\n }\r\n const renderTo = lines[i].calculateRenderPosition(pointTo);\r\n const renderFrom = lines[i].calculateRenderPosition(pointFrom);\r\n\r\n ctx.moveTo(renderTo.x, renderTo.y);\r\n ctx.lineTo(renderFrom.x, renderFrom.y);\r\n lines[i].staticOffset = null;\r\n\r\n ctx.stroke();\r\n ctx.closePath();\r\n ctx.restore();\r\n }\r\n }\r\n }\r\n\r\n static drawSpacerBorders = (ctx, staticOffset, shape) => {\r\n let lines = shape.getLines();\r\n ctx.save();\r\n ctx.beginPath();\r\n ctx.lineWidth = 2;\r\n ctx.fillStyle = COLOR_THEMES[sqftConfig.activeTheme].primary_transparent8;\r\n for (let i = 0; i < lines.length; i++) {\r\n lines[i].staticOffset = staticOffset;\r\n if (i === 0) {\r\n const renderFrom = lines[i].calculateRenderPosition(lines[i].from);\r\n ctx.moveTo(renderFrom.x, renderFrom.y);\r\n }\r\n const renderTo = lines[i].calculateRenderPosition(lines[i].to);\r\n ctx.lineTo(renderTo.x, renderTo.y);\r\n\r\n lines[i].staticOffset = null;\r\n }\r\n\r\n //set hover style colors\r\n if (shape.isHovering()) {\r\n const reduxState = store.getState();\r\n const activeButton = reduxState.sqftMenuState.activeButton;\r\n if (activeButton === SIDEBAR_BUTTONS_MENU.delete) {\r\n ctx.fillStyle = Colors.red\r\n }\r\n }\r\n\r\n ctx.closePath();\r\n ctx.stroke();\r\n ctx.fill();\r\n ctx.restore();\r\n }\r\n\r\n static drawShapeCrownMoldings = (ctx, staticOffset, shape) => {\r\n let lines = shape.getLines();\r\n //ctx.beginPath();\r\n for (let i = 0; i < lines.length; i++) {\r\n lines[i].staticOffset = staticOffset;\r\n if (lines[i].getState().attachedItems.isWithCrownMolding) {\r\n const crownMoldingPoints = getLineCrownMoldingPoints(lines[i]);\r\n ctx.save();\r\n if (lines[i].isHovering()) {\r\n const reduxState = store.getState();\r\n const activeButton = reduxState.sqftMenuState.activeButton;\r\n if (activeButton === SIDEBAR_BUTTONS_MENU.delete) {\r\n ctx.strokeStyle = Colors.red\r\n }\r\n }\r\n RenderCabinets.renderCrownMolding(ctx, crownMoldingPoints);\r\n ctx.restore();\r\n }\r\n lines[i].staticOffset = null;\r\n }\r\n }\r\n\r\n static drawShapeEndCap = (ctx, staticOffset, shape) => {\r\n let lines = shape.getLines();\r\n //ctx.beginPath();\r\n for (let i = 0; i < lines.length; i++) {\r\n lines[i].staticOffset = staticOffset;\r\n const lineState = lines[i].getState();\r\n if (lineState.attachedItems && lineState.attachedItems.isWithEndCap) {\r\n ctx.save();\r\n if (lines[i].isHovering()) {\r\n const reduxState = store.getState();\r\n const activeButton = reduxState.sqftMenuState.activeButton;\r\n if (activeButton === SIDEBAR_BUTTONS_MENU.delete) {\r\n ctx.strokeStyle = Colors.red\r\n }\r\n }\r\n RenderCabinets.renderEndCap(ctx, lines[i]);\r\n ctx.restore();\r\n }\r\n lines[i].staticOffset = null;\r\n }\r\n }\r\n\r\n static drawHandles = (ctx, shape) => {\r\n let lines = shape.getLines();\r\n for (let i = 0; i < lines.length; i++) {\r\n if (lines[i].isWithHandle()) {\r\n const midPoint = getMidPoint(lines[i].from, lines[i].to);\r\n const renderPosition = getPointField(midPoint.x, midPoint.y, shape);\r\n RenderFigures.renderHandle(ctx, renderPosition);\r\n }\r\n }\r\n }\r\n\r\n static renderDevMode = (ctx, shape) => {\r\n // render __intersectionPoints\r\n const intersectionPoints = shape.shapeAbsolute.getIntersectionPoints()\r\n if (intersectionPoints) {\r\n for (let i in intersectionPoints) {\r\n intersectionPoints[i].forEach(intPoint => {\r\n ctx.beginPath();\r\n ctx.arc(intPoint.x, intPoint.y, 20, 0, 2 * Math.PI);\r\n ctx.stroke();\r\n ctx.closePath();\r\n })\r\n }\r\n }\r\n // render slabPos\r\n ctx.beginPath();\r\n let pf = getPointField(shape.slabPos.x, shape.slabPos.y);\r\n ctx.arc(pf.x, pf.y, 10, 0, 2 * Math.PI);\r\n ctx.stroke();\r\n ctx.closePath();\r\n\r\n // render absolutePos\r\n const absolutePos = shape.shapeAbsolute.getAbsolutePosition();\r\n if (absolutePos) {\r\n ctx.beginPath();\r\n ctx.strokeStyle = '#a02f2f';\r\n pf = getPointField(absolutePos.x, absolutePos.y)\r\n ctx.arc(pf.x, pf.y, 5, 0, 2 * Math.PI);\r\n ctx.stroke();\r\n ctx.closePath();\r\n }\r\n }\r\n}\r\n","import store from \"../../../../../store\";\r\nimport workspace from \"../core/workspace\";\r\nimport {setSqftCroppedSlabImages} from \"../../../../../actions/sqftSlabFunctions\";\r\nimport sqftEventManager from \"./sqftEventManager\";\r\nimport MovableImage from \"../core/shapes/movableImage\";\r\nimport {APPLIANCES_THAT_SHOULD_RENDER_MEASUREMENTS_INSIDE_THE_SHAPE, SHAPE_TYPE} from \"../../../constants\";\r\n\r\nconst sqftImageManager = {\r\n getAppliances: function() {\r\n const shapes = workspace.getShapes();\r\n return shapes.filter(shp => shp.type === SHAPE_TYPE.appliances);\r\n },\r\n getSlabImages: function() {\r\n const state = store.getState();\r\n return state.sqftSlabState.croppedSlabImages;\r\n },\r\n getAppliancesThatShouldRenderMeasurementsInsideTheShape: function() {\r\n const shapes = workspace.getShapes();\r\n return shapes.filter(shp => shp.type === SHAPE_TYPE.appliances\r\n && APPLIANCES_THAT_SHOULD_RENDER_MEASUREMENTS_INSIDE_THE_SHAPE.includes(shp.subType));\r\n },\r\n hideSlabImages: function() {\r\n let movableImages = store.getState().sqftSlabState.croppedSlabImages;\r\n for (let i = movableImages.length - 1; i >= 0; i--) {\r\n movableImages[i].deregisterEvents();\r\n }\r\n },\r\n restoreSlabImages: function() {\r\n let movableImages = store.getState().sqftSlabState.croppedSlabImages;\r\n for (let i = movableImages.length - 1; i >= 0; i--) {\r\n movableImages[i].reInitEvents();\r\n }\r\n },\r\n getExportedSlabImages: function () {\r\n let slabState = store.getState().sqftSlabState;\r\n let croppedImages = slabState.croppedSlabImages;\r\n let exportData = [];\r\n for(let croppedImage of croppedImages) {\r\n exportData.push(croppedImage.export());\r\n }\r\n\r\n return exportData;\r\n },\r\n\r\n removeAllSlabImages: function () {\r\n const state = store.getState();\r\n let slabImages = state.sqftSlabState.croppedSlabImages;\r\n if (slabImages.length > 0) {\r\n store.dispatch(setSqftCroppedSlabImages([]));\r\n }\r\n },\r\n\r\n /**\r\n * @param {[]} data\r\n */\r\n importSlabImages: function (data) {\r\n if (data.length === 0) {\r\n sqftImageManager.removeAllSlabImages();\r\n return\r\n }\r\n let workspaceImages = [];\r\n for(let movableImageData of data) {\r\n let image = new Image();\r\n image.src = movableImageData.image.src;\r\n\r\n let workspaceImage = workspace.addImage(\r\n image,\r\n movableImageData.size.width,\r\n movableImageData.size.height,\r\n null,\r\n null,\r\n \"slabImage\",\r\n null,\r\n function () {},\r\n movableImageData.pos,\r\n null,\r\n movableImageData.id,\r\n sqftEventManager.priorities.SLAB_IMAGE,\r\n movableImageData.featureId,\r\n true\r\n );\r\n\r\n workspaceImage.importData({isDisabledInPopup: movableImageData.isDisabledInPopup});\r\n workspaceImages.push(workspaceImage)\r\n }\r\n\r\n store.dispatch(setSqftCroppedSlabImages(workspaceImages));\r\n },\r\n hideImages: function() {\r\n const shapes = workspace.getShapes();\r\n for (let shape of shapes) {\r\n if (shape instanceof MovableImage && shape.type !== 'slabImage') {\r\n shape.deregisterEvents();\r\n }\r\n }\r\n },\r\n restoreImages: function() {\r\n const shapes = workspace.getShapes();\r\n for (let shape of shapes) {\r\n if (shape instanceof MovableImage && shape.type !== 'slabImage') {\r\n shape.reInitEvents();\r\n }\r\n }\r\n },\r\n hideTextBoxes: function() {\r\n const textBoxes = workspace.textBoxManager.getTextBoxes();\r\n for (let textBox of textBoxes) {\r\n textBox.deregisterEvents();\r\n }\r\n },\r\n restoreTextBoxes: function() {\r\n const textBoxes = workspace.textBoxManager.getTextBoxes();\r\n for (let textBox of textBoxes) {\r\n textBox.reInitEvents();\r\n }\r\n },\r\n getMinMaxShapePoints: function(movableImage) {\r\n let size = movableImage.getSize();\r\n return {\r\n minX : 0,\r\n maxX : size.width,\r\n minY : 0,\r\n maxY : size.height\r\n }\r\n },\r\n};\r\n\r\nexport default sqftImageManager\r\n","import sqftConfig from \"./sqftConfig\";\r\nimport sqftImageManager from \"./sqftImageManager\";\r\nimport sqftShapeManager from \"./sqftShapeManager\";\r\nimport workspace from \"../core/workspace\";\r\nimport slabWorkspace from \"../core/slab/slabWorkspace\";\r\nimport store from \"../../../../../store\";\r\nimport {setIsRoomSwitcherVisible} from \"../../../../../actions/sqftMenuFunctions\";\r\nimport sqftSlabManager from \"./sqftSlabManager\";\r\nimport sqftShapeIntersectionsManager from \"./sqftShapeIntersectionsManager\";\r\nimport workspaceControllers from \"./workspaceControllers\";\r\n\r\nexport const enableRegularMode = () => {\r\n store.dispatch(setIsRoomSwitcherVisible(true));\r\n //sqftConfig.workspace.snapToGrid = true;\r\n slabWorkspace.disableSlabImages();\r\n slabWorkspace.deregisterEvents();\r\n sqftImageManager.hideSlabImages();\r\n sqftShapeManager.hideSeamShapes();\r\n sqftShapeManager.hideSlabShapes();\r\n\r\n sqftSlabManager.deleteShapeOffset();\r\n\r\n sqftImageManager.restoreTextBoxes();\r\n sqftImageManager.restoreImages();\r\n sqftShapeManager.restoreCorePieceShapes();\r\n sqftShapeManager.restoreShapeParts();\r\n\r\n slabWorkspace.slabAdditionalShapes.hideAdditionalShapes(); //this should go last\r\n};\r\n\r\nexport const enableSlabMode = (shouldUpdatePlaceholderFeatureIds = false) => {\r\n store.dispatch(setIsRoomSwitcherVisible(false));\r\n sqftConfig.workspace.snapToGrid = false;\r\n sqftImageManager.restoreSlabImages();\r\n sqftShapeManager.checkForUpdateSlabPoints();\r\n sqftShapeManager.checkForUpdateSlabPosition();\r\n sqftShapeManager.restoreSeamShapes();\r\n sqftShapeManager.restoreSlabShapes();\r\n\r\n sqftSlabManager.reInitShapeOffset();\r\n\r\n slabWorkspace.slabAdditionalShapes.initWaterfallToolShapes(); // 1\r\n slabWorkspace.slabAdditionalShapes.initBacksplashAndEdgeShapes();\r\n slabWorkspace.slabAdditionalShapes.initMiteredToolShapes(); // 2\r\n slabWorkspace.slabAdditionalShapes.initUnderlaymentToolShapes(); // 2\r\n slabWorkspace.slabAdditionalShapes.initBumpoutShapes();\r\n slabWorkspace.slabAdditionalShapes.restoreBacksplashShapes();\r\n slabWorkspace.initLeftPart();\r\n\r\n sqftImageManager.hideImages();\r\n sqftImageManager.hideTextBoxes();\r\n sqftShapeManager.hideShapeParts();\r\n sqftShapeManager.hideCorePieceShapes();\r\n\r\n if (shouldUpdatePlaceholderFeatureIds) {\r\n window.setTimeout(() => { // first we need to enable slab mode to get slab mode coordinates for the shape\r\n sqftShapeIntersectionsManager.updateShapesIntersections();\r\n sqftShapeIntersectionsManager.updateSlabPlaceholderFeatureId();\r\n workspaceControllers.snappedShapeGroups.updateShapesSnappedGroups(false);\r\n }, 0)\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n};\r\n\r\nexport const createSlabModeWaterfallShapes = () => {\r\n slabWorkspace.slabAdditionalShapes.initWaterfallToolShapes(); // 1\r\n slabWorkspace.slabAdditionalShapes.initMiteredToolShapes(); // 2\r\n slabWorkspace.slabAdditionalShapes.hideAdditionalShapes(); //this should go last\r\n}\r\n\r\nexport const clearRotateAngles = () => {\r\n sqftConfig.highlight.rotateAngle = false;\r\n const angleTooltip = document.getElementById(\"angle-tooltip\");\r\n if (angleTooltip) {\r\n angleTooltip.style.display = \"none\";\r\n }\r\n\r\n workspace.getShapes().forEach((shape) => {\r\n if (Array.isArray(shape.rotateAngleParts) && shape.rotateAngleParts.length) {\r\n shape.deActivateRotateAngle();\r\n }\r\n });\r\n}\r\n\r\nexport const getDimensionsDependingOnShapePositions = (workspace) => {\r\n const {minX, maxX, minY, maxY} = sqftShapeManager.getMinMaxWorkspacePoints(workspace, true);\r\n let maxCordX = Math.abs(minX) > Math.abs(maxX) ? Math.abs(minX) : Math.abs(maxX);\r\n let maxCordY = Math.abs(minY) > Math.abs(maxY) ? Math.abs(minY) : Math.abs(maxY);\r\n\r\n let imageWidth = maxCordX / sqftConfig.scale * Math.pow(sqftConfig.defaultScale, 2) + 500 / sqftConfig.scale * sqftConfig.defaultScale;\r\n let imageHeight = maxCordY / sqftConfig.scale * Math.pow(sqftConfig.defaultScale, 2) + 500 / sqftConfig.scale * sqftConfig.defaultScale;\r\n\r\n //todo re-wright this\r\n if (window.innerWidth < 1024) {\r\n imageWidth *= 3.75\r\n imageHeight *= 3.75\r\n }\r\n\r\n return [imageWidth, imageHeight]\r\n}\r\n\r\nexport const getFontSizeFromContext = (ctx) => {\r\n const fontSizeMatch = ctx.font.match(/\\d+/);\r\n return fontSizeMatch ? Number(fontSizeMatch[0]) : null;\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {getFeatureIsLocked} from \"../../../../../misc/helpers\";\r\n// import store from \"../../../../../store\";\r\n// import {setLookOverlayOpened} from \"../../../../../actions/lookFunctions\";\r\n// import {LOOK_OVERLAYS} from \"../../constants\";\r\n// import {Shower} from \"../../parts/shower\";\r\n\r\nexport default class TubCommon extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n }\r\n\r\n disabledClick() {}\r\n\r\n applyFeatureIfNotCompatible() {\r\n const showerTubComboParent = this.getParent().getParent();\r\n showerTubComboParent.setShowerTubCombo();\r\n showerTubComboParent.setActiveTub(this.bottomTubId);\r\n }\r\n\r\n handleClick(ignoreLocked) {\r\n super.handleClick(ignoreLocked);\r\n\r\n if (this.notAvailableInVisualizer || getFeatureIsLocked(this)) {\r\n return\r\n }\r\n\r\n // const showerTubComboParent = this.getParent().getParent();\r\n // const currentBottomTub = showerTubComboParent.bottomTub;\r\n //\r\n // const showNotCompatibleViewConditions = !window.location.hash.includes(\"visualizer\") &&\r\n // (!showerTubComboParent.showerTubComboIsActive || (\r\n // (this.partId === \"walk_in_tub\" && currentBottomTub !== \"walk_in_tub\") || (this.partId !== \"walk_in_tub\" && currentBottomTub === \"walk_in_tub\")\r\n // ));\r\n //\r\n // if (showNotCompatibleViewConditions) {\r\n // store.dispatch(setLookOverlayOpened(LOOK_OVERLAYS.notCompatiblePopup));\r\n // return;\r\n // }\r\n\r\n this.applyFeatureIfNotCompatible();\r\n this.featureClicked();\r\n }\r\n\r\n getArrayOfConditions() {\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n // const layout = this.getParent().layout;\r\n // const showerParent = layout.parts[Shower.id];\r\n // const showerSize = showerParent.showerSize();\r\n // if (showerParent && showerSize) {\r\n // conditions.push({\r\n // propName: \"ShowerSize\",\r\n // propValue: showerSize\r\n // });\r\n // }\r\n return conditions\r\n }\r\n\r\n hideLayerCondition() {\r\n const showerTubComboParent = this.getParent();\r\n return !showerTubComboParent.showerTubComboIsActive || showerTubComboParent.bottomTub !== this.bottomTubId\r\n }\r\n\r\n canDisplayDemoPoint() {\r\n return !this.hideLayerCondition()\r\n }\r\n\r\n}\r\n","import QRCode from 'qrcode';\r\nimport store from \"../../../store\";\r\nimport {CabinetsSet} from \"./sqftCabinetsDataMapper\";\r\nimport SqftJsonApi from \"../api/sqftJsonApi\";\r\nimport {setAPIErrorMessage, setSqftCabinetsGlb} from \"../../../actions/sqftFunctions\";\r\nimport {setAbortController} from \"../../../actions/sqftMenuFunctions\";\r\nimport {groupUrlsByVersion, similarityByWords} from \"./dataHelper\";\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\nimport sqftConfig from \"../components/canvas/store/sqftConfig\";\r\nimport {SQFT_AR3D_GLB_VIEWER} from \"../constants\";\r\n\r\nexport const generateQRCode = async (url) => {\r\n // Generate the QR code data as a string\r\n const qrData = await QRCode.toDataURL(url);\r\n\r\n // Create a canvas element to draw the QR code image on\r\n const canvas = document.createElement(\"canvas\");//createCanvas(300, 300);\r\n canvas.width = 300;\r\n canvas.height = 300;\r\n const ctx = canvas.getContext('2d');\r\n\r\n // Load the QR code image data into an Image object\r\n const img = new Image();\r\n img.src = qrData;\r\n\r\n // Draw the QR code image onto the canvas\r\n ctx.drawImage(img, 0, 0, canvas.width, canvas.height);\r\n\r\n // Return the canvas as an image data URL\r\n return canvas.toDataURL();\r\n}\r\n\r\nexport const getThirdPartyAR3DMetaData = (dbFeature, thirdPartyAR3DUrl) => {\r\n if (dbFeature && dbFeature.thirdPartyAR3DMetaData && thirdPartyAR3DUrl) {\r\n const metadataString = dbFeature.thirdPartyAR3DMetaData[thirdPartyAR3DUrl];\r\n\r\n // Check if the metadata string is present\r\n if (metadataString) {\r\n try {\r\n // Parse the metadata string as JSON\r\n return JSON.parse(metadataString);\r\n } catch (error) {\r\n // Handle JSON parsing error\r\n console.log(\"JSON parsing error:\", error.message);\r\n console.log(\"JSON metadataString\", metadataString);\r\n console.log(\"dbFeature\", dbFeature.sharedFeatureName);\r\n return null;\r\n }\r\n } else {\r\n console.log(\"dbFeature missing metadata\", dbFeature.id);\r\n }\r\n }\r\n\r\n return null\r\n}\r\n\r\nexport const getDepthFromAR3DMetaData = (thirdPartyAR3DMetaData) => {\r\n if (thirdPartyAR3DMetaData && Array.isArray(thirdPartyAR3DMetaData.Depth) && thirdPartyAR3DMetaData.Depth.length) {\r\n return parseFloat(thirdPartyAR3DMetaData.Depth[0]);\r\n }\r\n return null;\r\n};\r\n\r\nexport const getWidthFromAR3DMetaData = (thirdPartyAR3DMetaData) => {\r\n if (thirdPartyAR3DMetaData && Array.isArray(thirdPartyAR3DMetaData.Width) && thirdPartyAR3DMetaData.Width.length) {\r\n return parseFloat(thirdPartyAR3DMetaData.Width[0]);\r\n }\r\n return null;\r\n};\r\n\r\nexport const getHeightFromAR3DMetaData = (thirdPartyAR3DMetaData) => {\r\n if (thirdPartyAR3DMetaData && Array.isArray(thirdPartyAR3DMetaData.Height) && thirdPartyAR3DMetaData.Height.length) {\r\n return parseFloat(thirdPartyAR3DMetaData.Height[0]);\r\n }\r\n return null;\r\n};\r\n\r\nexport const getSpecialShape = (thirdPartyAR3DMetaData) => {\r\n if (thirdPartyAR3DMetaData && Array.isArray(thirdPartyAR3DMetaData.SpecialShape) && thirdPartyAR3DMetaData.SpecialShape.length) {\r\n return thirdPartyAR3DMetaData.SpecialShape[0];\r\n }\r\n return null;\r\n};\r\n\r\nexport const getCategoryFromMetadata = (thirdPartyAR3DMetaData) => {\r\n if (thirdPartyAR3DMetaData && Array.isArray(thirdPartyAR3DMetaData.Category) && thirdPartyAR3DMetaData.Category.length) {\r\n return thirdPartyAR3DMetaData.Category[0];\r\n }\r\n return null;\r\n};\r\n\r\nexport const getDepthFromDescription = (dbFeature) => {\r\n if (dbFeature.description) {\r\n const extractDimension = (dim) => parseInt(dbFeature.description.substr(dbFeature.description.indexOf(dim) + dim.length + 1, 3), 10);\r\n return extractDimension('Depth');\r\n }\r\n return null;\r\n};\r\n\r\nexport const getWidthFromDescription = (dbFeature) => {\r\n if (dbFeature.description) {\r\n const extractDimension = (dim) => parseInt(dbFeature.description.substr(dbFeature.description.indexOf(dim) + dim.length + 1, 3), 10);\r\n return extractDimension('Width');\r\n }\r\n return null;\r\n};\r\n\r\nexport const getHeightFromDescription = (dbFeature) => {\r\n if (dbFeature.description) {\r\n const extractDimension = (dim) => parseInt(dbFeature.description.substr(dbFeature.description.indexOf(dim) + dim.length + 1, 3), 10);\r\n return extractDimension('Height');\r\n }\r\n return null;\r\n};\r\n\r\nexport const getWidthFromDbFeature = (dbFeature, thirdPartyAR3DMetaData) => {\r\n let width = getWidthFromAR3DMetaData(thirdPartyAR3DMetaData);\r\n if (!width) {\r\n width = getWidthFromDescription(dbFeature);\r\n }\r\n return width\r\n};\r\n\r\nexport const getDepthFromDbFeature = (dbFeature, thirdPartyAR3DMetaData) => {\r\n let depth = getDepthFromAR3DMetaData(thirdPartyAR3DMetaData);\r\n if (!depth) {\r\n depth = getDepthFromDescription(dbFeature);\r\n }\r\n return depth\r\n};\r\n\r\nexport const getHeightFromDbFeature = (dbFeature, thirdPartyAR3DMetaData) => {\r\n let height = getHeightFromAR3DMetaData(thirdPartyAR3DMetaData);\r\n if (!height) {\r\n height = getHeightFromDescription(dbFeature);\r\n }\r\n return height\r\n};\r\n\r\nexport const findGLBLink = (links) => {\r\n const glbLink = links.find(link => link.endsWith('.glb'));\r\n return glbLink || null;\r\n};\r\n\r\n// Function to normalize strings for comparison\r\nexport const normalizeString = (str) => {\r\n return str.toLowerCase().replace(/[\\W_]+/g, ''); // Remove non-alphanumeric characters and convert to lowercase\r\n}\r\n\r\n// Function to split and normalize feature name or URL part for comparison\r\nexport const splitAndNormalize = (str) => {\r\n // Split by spaces and dashes, then normalize each part\r\n return str.split(/[\\s\\-]+/).map(normalizeString);\r\n}\r\n\r\n// Function to split and normalize feature name or URL part for comparison\r\nexport const getUrlByName = (nameSearch, thirdPartyAR3DUrls) => {\r\n const featureNameParts = splitAndNormalize(nameSearch);\r\n\r\n // 1.urlBySharedFeatureName - Enhanced Matching\r\n return thirdPartyAR3DUrls.find(url => {\r\n const urlParts = splitAndNormalize(url.toLowerCase().split('/').pop().split('.')[0]);\r\n return featureNameParts.every(part => urlParts.includes(part));\r\n });\r\n}\r\n\r\n// Function to get 3D URLs for a feature\r\nexport const get3dURLsForFeature = (feature) => {\r\n // Check if feature, feature.getFeatureName, and feature.dbFeature are defined\r\n if (!feature || !feature.getFeatureName || typeof feature.getFeatureName !== 'function' || !feature.dbFeature) {\r\n console.log('Invalid feature or feature properties');\r\n return null;\r\n }\r\n\r\n const featureNameParts = splitAndNormalize(feature.getFeatureName());\r\n\r\n // Check if thirdPartyAR3DUrls is defined and is an array\r\n if (!Array.isArray(feature.dbFeature.thirdPartyAR3DUrls)) {\r\n console.log('thirdPartyAR3DUrls is not defined or not an array. Id:', feature.dbFeature.id);\r\n return null;\r\n }\r\n\r\n const thirdPartyAR3DUrls = feature.dbFeature.thirdPartyAR3DUrls.filter(url => url.endsWith('.glb'));\r\n\r\n // Enhanced Matching\r\n const urlByFeatureName = thirdPartyAR3DUrls.find(url => {\r\n const urlParts = splitAndNormalize(url.toLowerCase().split('/').pop().split('.')[0]);\r\n // Check if all parts of the feature name are present in the URL segment\r\n return featureNameParts.every(part => urlParts.includes(part));\r\n });\r\n\r\n console.log(\"urlByFeatureName\", urlByFeatureName);\r\n if (urlByFeatureName) {\r\n return urlByFeatureName;\r\n }\r\n\r\n return null;\r\n};\r\n\r\n// Function to check if a URL contains \"-HE\" right before the file extension\r\nexport const containsHEBeforeExtension = (url) => {\r\n // Regular expression to match \"-HE\" right before the file extension\r\n const pattern = /-HE\\.[^/.]+$/;\r\n return pattern.test(url);\r\n}\r\n\r\n// Function to check if a URL contains \"-HE\" right before the file extension\r\nexport const startsFromH = (str) => {\r\n return str.charAt(0) === 'H';\r\n}\r\n\r\n// Function to check if a URL contains \"-HE\" right before the file extension\r\nexport const isHoodShape = (shape) => {\r\n const layout = getCurrentLayout();\r\n const relatedParentFeature = layout.getFeatureById(shape.relatedParentFeatureId, true);\r\n if (relatedParentFeature) {\r\n let shapeDbFeature = relatedParentFeature.dbFeature.relatedFeatures.find(relatedFeature => relatedFeature.id === shape.featureId);\r\n if (!shapeDbFeature) {\r\n const shapeFeature = layout.getFeatureById(shape.featureId, true);\r\n if (shapeFeature) {\r\n shapeDbFeature = shapeFeature.dbFeature\r\n }\r\n }\r\n const url = getUrlMatchingByColor(shapeDbFeature, relatedParentFeature).replace(/\\s+\\.glb$/, '.glb');\r\n\r\n const metaData = getThirdPartyAR3DMetaData(shapeDbFeature, url);\r\n const category = getCategoryFromMetadata(metaData);\r\n const shapeHeight = shape.shapeCabinet ? shape.shapeCabinet.getShapeHeight() : shape.getHeight();\r\n\r\n return category === \"Hood\" || containsHEBeforeExtension(url) || shapeHeight <= 18;\r\n }\r\n}\r\n\r\nexport const setCabinetGLBFromCabinetsSet = async(displayDoorsOnly = false) => {\r\n const cabinetsData = CabinetsSet.prepareCabinetsSet(displayDoorsOnly);\r\n console.log(\"prepared cabinetsData\", cabinetsData);\r\n\r\n if (sqftConfig.threeD.glbViewer === SQFT_AR3D_GLB_VIEWER.singleModel) {\r\n await setUrlToCabinetGLB(cabinetsData);\r\n } else {\r\n await setCabinetsSetToCabinetGLB(cabinetsData);\r\n }\r\n}\r\n\r\nexport const setCabinetsSetToCabinetGLB = async(cabinetsData) => {\r\n store.dispatch(setSqftCabinetsGlb(cabinetsData));\r\n}\r\n\r\nexport const setUrlToCabinetGLB = async(cabinetsData) => {\r\n const state = store.getState();\r\n if (state.sqftState.abortRequestController) {\r\n state.sqftState.abortRequestController.abort();\r\n }\r\n\r\n let cabinetSet;\r\n try {\r\n store.dispatch(setAPIErrorMessage(null));\r\n const abortController = new AbortController();\r\n store.dispatch(setAbortController(abortController));\r\n cabinetSet = await SqftJsonApi.postCabinetSet(cabinetsData, { signal: abortController.signal });\r\n } catch (e) {\r\n if (e.name !== 'AbortError') {\r\n store.dispatch(setAPIErrorMessage(e));\r\n }\r\n }\r\n console.log(\"response cabinetSet from api\", cabinetSet );\r\n\r\n //URL needs to be here to display it in AR https://s3.amazonaws.com/qc-3dfiles/composed/ to override it check SquareFootageToolAR\r\n //glbUrl = \"https://qc-3dfiles.s3.amazonaws.com/ar-composer/W3030.glb\"\r\n //glbUrl = \"/images/sqft-icons/3d/Chair.glb\"\r\n //store.dispatch(setSqftCabinetsGlb(\"/video/3d/cabinet.glb\"));\r\n //store.dispatch(setSqftCabinetsGlb(\"https://quoteremodel.com/video/sqft/cabinets/cabinet.glb\"));\r\n //glbUrl = \"/images/sqft-icons/3d/DCW2430 Summer Flame.glb\"\r\n //glbUrl = \"/images/sqft-icons/3d/hood/Hood Oven GLB/Appliances/Hood_0_0_0_30_0_0_Collection/All-Hood ZLINE 8654SNZ CB-30-25.6.glb\"\r\n //glbUrl = \"https://discoverthreejs.com/examples/assets/models/Parrot.glb\"\r\n //glbUrl = \"https://threejs.org/examples/models/gltf/AnisotropyBarnLamp.glb\"\r\n //setSqftCabinetsGlb(\"https://threejs.org/examples/models/gltf/AnisotropyBarnLamp.glb\");\r\n //store.dispatch(setSqftCabinetsGlb(\"https://master_new_1512.quoteremodel.com/content/Views/visualizers/images/sqft-icons/3d/cabinet.glb\"));\r\n //store.dispatch(setSqftCabinetsGlb(\"https://d1mb1i73swc8dz.cloudfront.net/ar-composer/All-Bottom Cabinet-Light Italian Walnut-Bryant-30-34.5-SB.glb\"));\r\n //store.dispatch(setSqftCabinetsGlb(\"https://s3.amazonaws.com/qc-3dfiles/composed/5dd7954e-ed43-4489-8260-93eeaade08c5.glb\"));\r\n store.dispatch(setSqftCabinetsGlb(cabinetSet ? cabinetSet.s3Url : null));\r\n}\r\n\r\nexport function getUrlMatchingByColor(dbFeature, relatedParentFeature) {\r\n //console.log(\"relatedParentFeature.getFeatureName()\", relatedParentFeature.getFeatureName());\r\n //console.log(\"relatedParentFeature.sharedFeatureName\", relatedParentFeature.dbFeature.sharedFeatureName);\r\n\r\n if (!dbFeature || !relatedParentFeature) {\r\n console.log('Invalid feature or feature properties');\r\n return null;\r\n }\r\n\r\n if (!Array.isArray(dbFeature.thirdPartyAR3DUrls)) {\r\n console.log('thirdPartyAR3DUrls is not defined or not an array. Id:', dbFeature.id);\r\n return null;\r\n }\r\n\r\n const relatedParentFeatureName = relatedParentFeature.getFeatureName();\r\n\r\n // Sort URLs by version in descending order\r\n const sortedUrls = groupUrlsByVersion(dbFeature.thirdPartyAR3DUrls);\r\n\r\n // Try to find a URL by the shared feature name\r\n const urlBySharedFeatureName = getUrlByName(relatedParentFeature.dbFeature.sharedFeatureName, sortedUrls);\r\n if (urlBySharedFeatureName) {\r\n return urlBySharedFeatureName;\r\n }\r\n\r\n // Try to find a URL by the parent feature name\r\n const urlByFeatureName = getUrlByName(relatedParentFeatureName, sortedUrls);\r\n if (urlByFeatureName) {\r\n return urlByFeatureName;\r\n }\r\n\r\n // Try to find a URL by similarity based on the shared feature name\r\n const urlBySimilarity = similarityByWords(sortedUrls, relatedParentFeature.dbFeature.sharedFeatureName);\r\n if (urlBySimilarity) {\r\n return urlBySimilarity;\r\n }\r\n\r\n // Try to find a URL by similarity based on the parent feature name\r\n const urlBySimilarityFromFeatureName = similarityByWords(sortedUrls, relatedParentFeatureName);\r\n if (urlBySimilarityFromFeatureName) {\r\n return urlBySimilarityFromFeatureName;\r\n }\r\n\r\n // Check if URL contains the feature name\r\n let matchingUrl = sortedUrls.find(url => url.includes(relatedParentFeatureName));\r\n if (matchingUrl) {\r\n return matchingUrl;\r\n }\r\n\r\n // Check if URL contains the color name\r\n const color = relatedParentFeature.getColorName();\r\n if (color && color.length > 3) {\r\n matchingUrl = sortedUrls.find(url => url.includes(color));\r\n if (matchingUrl) {\r\n return matchingUrl;\r\n }\r\n }\r\n\r\n // If no specific color, fallback to checking for 'black' in URL\r\n matchingUrl = sortedUrls.find(url => url.toLowerCase().includes('black'));\r\n if (matchingUrl) {\r\n return matchingUrl;\r\n }\r\n\r\n // If no match was found, return the first URL as a fallback\r\n return sortedUrls[0] || null;\r\n}\r\n\r\nexport function getRelatedFeatureMetadata (relatedFeature, parentFeature) {\r\n const url = getUrlMatchingByColor(relatedFeature.dbFeature, parentFeature);\r\n return getThirdPartyAR3DMetaData(relatedFeature.dbFeature, url);\r\n}\r\n\r\nexport function getCabinetDimensions (relatedFeature, parentFeature) {\r\n const thirdPartyAR3DMetaData = getRelatedFeatureMetadata(relatedFeature, parentFeature);\r\n const width = getWidthFromDbFeature(relatedFeature.dbFeature, thirdPartyAR3DMetaData);\r\n const depth = getDepthFromDbFeature(relatedFeature.dbFeature, thirdPartyAR3DMetaData);\r\n const height = getHeightFromDbFeature(relatedFeature.dbFeature, thirdPartyAR3DMetaData);\r\n const diamondLength = thirdPartyAR3DMetaData && thirdPartyAR3DMetaData.DiamondLength ? parseFloat(thirdPartyAR3DMetaData.DiamondLength[0]) : 0;\r\n\r\n return { width: width, height: height, depth: depth, diamondLength: diamondLength, thirdPartyAR3DMetaData };\r\n}\r\n\r\nexport function getCabinetSimilarFeatureFromAnotherColor (featuresListToSearchForNewFeature, currentShapeDbFeature) {\r\n const getCabinetBoxName = (str) => {\r\n if (str.includes('/')) {\r\n const parts = str.split('/');\r\n return parts[0].trim();\r\n } else {\r\n return str.trim();\r\n }\r\n }\r\n const cabinetBoxName = getCabinetBoxName(currentShapeDbFeature.sharedFeatureName);\r\n let newShapeDbFeature = featuresListToSearchForNewFeature.find(relatedFeature =>\r\n relatedFeature.sharedFeatureName === cabinetBoxName\r\n );\r\n\r\n // If no exact match found, search for an 'includes' match\r\n if (!newShapeDbFeature) {\r\n newShapeDbFeature = featuresListToSearchForNewFeature.find(relatedFeature =>\r\n relatedFeature.sharedFeatureName.includes(cabinetBoxName)\r\n );\r\n }\r\n\r\n return newShapeDbFeature\r\n}\r\n","import {getWizardListFromBackend} from \"../api/wizard-api\";\r\nimport {setLeadPopup} from \"../globalLogic/globalActions\";\r\nimport {getErrorPopupObject} from \"../components/helpers/popupFunctions\";\r\nimport {getConflictingWizardSteps, getUpdatedAllWizardValues} from \"./wizardLogicOld\";\r\n\r\nexport const SET_WIZARD_LIST = \"SET_WIZARD_LIST\";\r\nexport const SET_WIZARD_ACTIVE_ITEM = \"SET_WIZARD_ACTIVE_ITEM\";\r\nexport const SET_WIZARD_ACTIVE_STEP = \"SET_WIZARD_ACTIVE_STEP\";\r\nexport const SET_WIZARD_SELECTED_VALUES = \"SET_WIZARD_SELECTED_VALUES\";\r\nexport const SET_ALL_WIZARD_SELECTED_VALUES = \"SET_ALL_WIZARD_SELECTED_VALUES\";\r\nexport const RESTORE_ALL_WIZARD_SELECTED_VALUES = \"RESTORE_ALL_WIZARD_SELECTED_VALUES\";\r\nexport const SET_WIZARD_MISSING_FEATURES = \"SET_WIZARD_MISSING_FEATURES\";\r\n\r\nexport const getWizardList = () => {\r\n return async (dispatch) => {\r\n const {wizardList, error} = await getWizardListFromBackend();\r\n if (error) {\r\n dispatch(setLeadPopup(getErrorPopupObject(error)));\r\n } else if (!wizardList.length) {\r\n dispatch(setLeadPopup(getErrorPopupObject(\"No wizards found\")));\r\n }\r\n if (document.kvConfig.devMode) {\r\n console.log(\"wizardList\", wizardList);\r\n }\r\n const wizardsArray = Array.isArray(wizardList.wizardList) ? wizardList.wizardList : wizardList;\r\n const nextActiveItem = document.kvConfig.wizardId\r\n ? wizardsArray.find(wizItem => wizItem.id === document.kvConfig.wizardId) || wizardsArray[0]\r\n : wizardsArray[0];\r\n dispatch(setWizardActiveItem(nextActiveItem));\r\n dispatch(setWizardList(wizardList));\r\n }\r\n};\r\n\r\nexport const setWizardList = (wizardList) => ({\r\n type: SET_WIZARD_LIST,\r\n payload: {wizardList}\r\n});\r\n\r\n// export const setWizardActiveItem = (wizardActiveItem, quoteIndex = null) => {\r\nexport const setWizardActiveItem = (wizardActiveItem) => {\r\n return (dispatch) => {\r\n // return (dispatch, getState) => {\r\n // const {quotesState} = getState();\r\n\r\n dispatch({\r\n type: SET_WIZARD_ACTIVE_ITEM,\r\n payload: {\r\n wizardActiveItem,\r\n // quoteIndex: Number.isInteger(quoteIndex) ? quoteIndex : quotesState.activeQuoteIndex,\r\n quoteIndex: 0,\r\n }\r\n })\r\n }\r\n};\r\n\r\nexport const setWizardActiveStep = (wizardActiveStep) => {\r\n return (dispatch, getState) => {\r\n // const {quotesState, wizardState} = getState();\r\n const {wizardState} = getState();\r\n\r\n let wizardConflictingSteps = wizardState.wizardConflictingSteps;\r\n let newWizValues = Object.assign({}, wizardState.wizardSelectedValues);\r\n if (wizardState.wizardConflictingSteps.length) {\r\n Object.keys(wizardState.wizardSelectedValues).reverse().forEach(selectedKeyNumber => { // erase conflicting selected steps!\r\n if (selectedKeyNumber >= wizardActiveStep) {\r\n delete newWizValues[selectedKeyNumber]\r\n }\r\n });\r\n wizardConflictingSteps = [];\r\n }\r\n let allWizardsValues = wizardState.allWizardsValues;\r\n if (wizardState.wizardActiveItem) {\r\n allWizardsValues = wizardState.allWizardsValues.map(wizObject => {\r\n // if (wizObject.wizardItemId === wizardState.wizardActiveItem.id && wizObject.quoteIndex === quotesState.activeQuoteIndex) {\r\n if (wizObject.wizardItemId === wizardState.wizardActiveItem.id && wizObject.quoteIndex === 0) {\r\n wizObject.lastVisitedStep = wizardActiveStep // keep it up to date to be able to restore\r\n if (wizardState.wizardConflictingSteps.length) {\r\n wizObject.wizardSelectedValues = Object.assign({}, newWizValues)\r\n }\r\n }\r\n return wizObject\r\n })\r\n }\r\n\r\n dispatch({\r\n type: SET_WIZARD_ACTIVE_STEP,\r\n payload: {\r\n wizardActiveStep,\r\n wizardSelectedValues: newWizValues,\r\n wizardConflictingSteps,\r\n allWizardsValues,\r\n // quoteIndex: quotesState.activeQuoteIndex,\r\n quoteIndex: 0,\r\n }\r\n })\r\n }\r\n}\r\n\r\nexport const setWizardSelectedValues = (wizardSelectedValues, direct = false, wizardItem = null) => {\r\n return (dispatch, getState) => {\r\n const {wizardState} = getState();\r\n const wizardActiveItem = wizardItem || wizardState.wizardActiveItem;\r\n\r\n let wizardConflictingSteps = wizardState.wizardConflictingSteps;\r\n\r\n let newWizValues = direct\r\n ? Object.assign({}, wizardSelectedValues)\r\n : Object.assign({}, wizardState.wizardSelectedValues, wizardSelectedValues);\r\n\r\n if (!direct && wizardSelectedValues && Object.keys(wizardSelectedValues).length === 1) {\r\n wizardConflictingSteps = getConflictingWizardSteps(\r\n newWizValues,\r\n {wizardActiveItem, quoteIndex: 0, wizardSelectedValues},\r\n );\r\n }\r\n\r\n if (wizardActiveItem) {\r\n // console.log(\"wizardConflictingSteps\", action.payload.wizardConflictingSteps);\r\n // this works for QKB UI only for now, we are not using it on lixil\r\n const allWizardsValues = wizardConflictingSteps.length // do not change them to be able to restore when wizard is closed\r\n ? wizardState.allWizardsValues\r\n : getUpdatedAllWizardValues(wizardState, 0, wizardActiveItem.id, newWizValues);\r\n\r\n dispatch({\r\n type: SET_WIZARD_SELECTED_VALUES,\r\n payload: {\r\n quoteIndex: 0,\r\n wizardSelectedValues: newWizValues,\r\n allWizardsValues,\r\n wizardConflictingSteps\r\n }\r\n });\r\n\r\n return;\r\n }\r\n\r\n dispatch({\r\n type: SET_WIZARD_SELECTED_VALUES,\r\n payload: {\r\n wizardSelectedValues: newWizValues,\r\n wizardConflictingSteps,\r\n // direct,\r\n quoteIndex: 0,\r\n // wizardActiveItem: wizardItem || wizardState.wizardActiveItem,\r\n // fabricatorState,\r\n // cartItems: cartState.cartItems\r\n }\r\n })\r\n }\r\n}\r\n\r\nexport const setAllWizardSelectedValues = (wizardSelectedValues, quoteIndex, wizardItemId) => ({\r\n type: SET_ALL_WIZARD_SELECTED_VALUES,\r\n payload: {wizardSelectedValues, quoteIndex, wizardItemId}\r\n});\r\n\r\nexport const updateAllWizardValues = (allWizardsValues) => ({\r\n type: RESTORE_ALL_WIZARD_SELECTED_VALUES,\r\n payload: {allWizardsValues}\r\n})\r\n","import {postLixilCalendar, postLixilGetSalesRep} from \"../api/lixil-api\";\r\nimport {defaultTimeValue} from \"./appointmentReducer\";\r\nimport {getLixilCampaignInfo, LIXIL_PRODUCT_TYPES} from \"../lixilLogic/lixilActions\";\r\n\r\nexport const SET_APPOINTMENT_DATE = \"SET_APPOINTMENT_DATE\";\r\nexport const SET_APPOINTMENT_TIME = \"SET_APPOINTMENT_TIME\";\r\nexport const SET_APPOINTMENT_TIME_STEP_ACTIVE = \"SET_APPOINTMENT_TIME_STEP_ACTIVE\";\r\nexport const SET_AVAILABLE_APPOINTMENTS = \"SET_AVAILABLE_APPOINTMENTS\";\r\nexport const SET_APPOINTMENTS_NOT_AVAILABLE = \"SET_APPOINTMENTS_NOT_AVAILABLE\";\r\nexport const SET_SALES_REP_ID = \"SET_SALES_REP_ID\";\r\nexport const setAppointmentDate = (date) => ({\r\n type: SET_APPOINTMENT_DATE,\r\n payload: date\r\n});\r\n\r\nexport const setAppointmentTime = (time = \"\", timeSlot = \"\") => ({\r\n type: SET_APPOINTMENT_TIME,\r\n payload: {time, timeSlot}\r\n});\r\n\r\nexport const setAppointmentTimeStepActive = (timeStepIsActive) => ({\r\n type: SET_APPOINTMENT_TIME_STEP_ACTIVE,\r\n payload: timeStepIsActive\r\n});\r\n\r\nexport const setAvailableAppointments = (availableAppointmentDates) => {\r\n return (dispatch, getState) => {\r\n const {appointmentDate, appointmentTimeSlot} = getState().appointmentState;\r\n let payload = {\r\n availableAppointmentDates\r\n };\r\n if (appointmentDate) {\r\n const formattedToMatchApiDate = formatCalendarDateToMatchAvailableDate(new Date(appointmentDate));\r\n const selectedLixilDateObject = availableAppointmentDates.find(dateObject => {\r\n return dateObject.salesRepAppointmentDate === formattedToMatchApiDate\r\n });\r\n if (!selectedLixilDateObject) {\r\n payload.appointmentDate = \"\";\r\n payload.appointmentTimeSlot = defaultTimeValue;\r\n } else if (!selectedLixilDateObject.salesRepsInSlots.some(timeSlotObject => timeSlotObject.timeSlot === appointmentTimeSlot)) {\r\n payload.appointmentTimeSlot = defaultTimeValue;\r\n }\r\n }\r\n dispatch({\r\n type: SET_AVAILABLE_APPOINTMENTS,\r\n payload\r\n });\r\n }\r\n};\r\n\r\nexport const setAppointmentsNotAvailable = (appointmentsNotAvailable) => ({\r\n type: SET_APPOINTMENTS_NOT_AVAILABLE,\r\n payload: {appointmentsNotAvailable}\r\n});\r\n\r\nexport const setSalesRepId = (salesRepID) => ({\r\n type: SET_SALES_REP_ID,\r\n payload: {salesRepID}\r\n});\r\n\r\nconst getCommonLixilPostData = (store) => {\r\n const {userState, wizardState} = store;\r\n const {userInfo, userLocation} = userState;\r\n\r\n const productId = wizardState.wizardSelectedValues\r\n && wizardState.wizardSelectedValues[1]\r\n && wizardState.wizardSelectedValues[1].selectedFeature\r\n ? wizardState.wizardSelectedValues[1].selectedFeature.id\r\n : 1;\r\n\r\n const productName = getLixilCampaignInfo(store).Product === LIXIL_PRODUCT_TYPES.srBathing\r\n ? LIXIL_PRODUCT_TYPES.srBathing\r\n : \"BR\";\r\n\r\n return {\r\n contactData: {\r\n email: userInfo.email,\r\n firstName: userInfo.firstName,\r\n installationAddress: userInfo.address,\r\n lastName: userInfo.lastName,\r\n phone: userInfo.phone,\r\n zipcode: userLocation.postal || userInfo.postal,\r\n \"city\": userLocation.city,\r\n \"direction\": userLocation.direction,\r\n \"state\": userLocation.state,\r\n \"streetName\": userLocation.streetName,\r\n \"streetNumber\": userLocation.streetNumber,\r\n },\r\n productInfo: {\r\n productId,\r\n productName,\r\n }\r\n }\r\n}\r\n\r\n export const checkLixilCalendar = () => {\r\n return async (dispatch, getState) => {\r\n\r\n const postCalendarData = getCommonLixilPostData(getState());\r\n\r\n // 1) register user\r\n const postCalendarResponse = await postLixilCalendar(postCalendarData);\r\n console.log(\"postCalendarResponse\", postCalendarResponse);\r\n\r\n if (postCalendarResponse && postCalendarResponse.data && postCalendarResponse.data.salesRepAvailability) {\r\n // dispatch(setAppointmentsNotAvailable(false)); // faraday reponse not available for this address\r\n // removed, it should be set when user submitted the form, if they opened calendar and left - it should be noAppt\r\n dispatch(setAvailableAppointments(postCalendarResponse.data.salesRepAvailability.availableSalesReps));\r\n return true\r\n }\r\n\r\n // dispatch(setAvailableAppointments([\r\n // {\r\n // \"salesRepAppointmentDate\": \"2024-03-18\",\r\n // \"salesRepsInSlots\": [\r\n // {\r\n // \"slotEndTime\": \"string\",\r\n // \"slotStartTime\": \"string\",\r\n // \"timeSlot\": \"string\"\r\n // }\r\n // ]\r\n // }\r\n // ]));\r\n\r\n // return !(postCalendarResponse && postCalendarResponse.data && postCalendarResponse.data.salesRepAvailability)\r\n return false\r\n }\r\n }\r\n\r\nexport const getLixilSalesRep = () => {\r\n return async (dispatch, getState) => {\r\n\r\n const store = getState();\r\n const {appointmentState} = store;\r\n\r\n let postData = getCommonLixilPostData(store);\r\n\r\n postData.date = formatCalendarDateToMatchAvailableDate(appointmentState.appointmentDate);\r\n // postData.consultationTime = appointmentState.appointmentTime;\r\n // postData.timeSlotId = 1;\r\n postData.timeSlot = appointmentState.appointmentTimeSlot;\r\n\r\n // 1) register user\r\n const postSalesRepResponse = await postLixilGetSalesRep(postData);\r\n console.log(\"postSalesRepResponse\", postSalesRepResponse);\r\n\r\n if (postSalesRepResponse && postSalesRepResponse.data && postSalesRepResponse.data.salesRepID) {\r\n dispatch(setSalesRepId(postSalesRepResponse.data.salesRepID));\r\n }\r\n\r\n // return !(postCalendarResponse && postCalendarResponse.data && postCalendarResponse.data.salesRepAvailability)\r\n return false\r\n }\r\n}\r\n\r\nexport const formatCalendarDateToMatchAvailableDate = (calendarDate, withSlashes = false) => {\r\n\r\n let day = \"\"+calendarDate.getDate();\r\n let month = \"\"+(calendarDate.getMonth() + 1); // +1 because getMonth returns starting from 0 (January is 0)\r\n let year = \"\"+calendarDate.getFullYear();\r\n\r\n day = day.length === 1 ? \"0\" + day : day;\r\n month = month.length === 1 ? \"0\" + month : month;\r\n\r\n if (withSlashes) {\r\n return month + \"/\" + day + \"/\" + year\r\n }\r\n\r\n return year + \"-\" + month + \"-\" + day\r\n}\r\n\r\nexport const getSelectedLixilDateObject = (appDate, availableAppointmentDates) => {\r\n const formattedToMatchApiDate = formatCalendarDateToMatchAvailableDate(appDate);\r\n const selectedLixilDateObject = availableAppointmentDates.find(dateObject => {\r\n return dateObject.salesRepAppointmentDate === formattedToMatchApiDate\r\n });\r\n if (!selectedLixilDateObject) {\r\n console.log(\"no selected day? try better search, something is incorrect\", );\r\n return null\r\n }\r\n return selectedLixilDateObject\r\n}\r\n","import invert from \"lodash/invert\";\r\nimport {LayoutType} from \"./constants\";\r\nimport {UseFullSizeImages} from \"../../../config\";\r\nimport {pnpoly} from \"../../../misc/utils\";\r\n\r\nlet layouts = {};\r\nObject.keys(LayoutType).forEach(layoutName => {\r\n layouts[layoutName] = {\r\n Walls: {\r\n Ceiling: 1000,\r\n RightWall: 2000,\r\n LeftWall: 3000,\r\n PopoutWall: 6000,\r\n Backsplash: 4000,\r\n BacksplashRightWall: 4050,\r\n BacksplashLeftWall: 4100,\r\n RightWallBacksplash: 4150,\r\n LeftWallBacksplash: 4200,\r\n // FourInchBacksplash: 12000,\r\n // FullHeightBacksplash: 13000,\r\n // SixHeightBacksplash: 14000,\r\n },\r\n Floor: 5000,\r\n Globals: {\r\n GlobalShadow: 7000,\r\n Baseboard: 8000,\r\n CeilingLights: 9000,\r\n CeilingHighlights: 10000,\r\n Decor1: 25000,\r\n Decor2: 32000,\r\n Decor3: 36500, // center island decor\r\n Decor4: 41000,\r\n },\r\n Cabinet: {\r\n TopCabinetShadow: 15000,\r\n TopCabinetShadowPart2: 15005,\r\n BottomCabinetShadow: 15500,\r\n TopCabinet: 16000,\r\n TopCabinetModuleBox: 16050,\r\n CrownMolding: 17000,\r\n TopCabinet2: 19000, //Crown Molding should be higher than Top cabinet (c) Nikita\r\n TopCabinetModuleBox2: 219050, //Crown Molding should be higher than Top cabinet (c) Nikita\r\n CrownMolding2: 20000,\r\n BottomCabinet: 22000,\r\n BottomCabinetModuleBox: 22050,\r\n BottomCabinet2: 27000,\r\n BottomCabinetModuleBox2: 27050,\r\n TopHandle: 28000,\r\n TopHandle2: 28100,\r\n BottomHandle: 28500,\r\n BottomHandle2: 28750,\r\n Peninsula: 29250,\r\n TopCabinetModules: {},\r\n BottomCabinetModules: {},\r\n },\r\n Appliances: {\r\n Microwave: 21000,\r\n Hood: 18000,\r\n Dishwasher: 23000,\r\n Range: 26000,\r\n Fridge: 29000,\r\n FridgeShadow: 29050,\r\n },\r\n CountertopGroup: {\r\n Countertop: 24000,\r\n Countertop2: 30000,\r\n Sink: 43000,\r\n Faucet: 44000,\r\n Stovetop: 45000,\r\n // Countertop3: 42000,\r\n },\r\n CenterIsland: {\r\n CenterIslandShadow: 29500,\r\n Cabinet: 31000,\r\n Countertop: 36000,\r\n Sink: 37000,\r\n Faucet: 38000,\r\n Stovetop: 38500,\r\n Range: 38750,\r\n ChairsShadow: 35000,\r\n Chairs: 39000,\r\n Handle: 40000,\r\n },\r\n };\r\n});\r\n\r\nlayouts[\"Small\"].Appliances.Fridge = 15750;\r\nlayouts[\"SmallWithPeninsula\"].Appliances.Fridge = 15750;\r\nlayouts[\"SmallWithIsland\"].Appliances.Fridge = 15750;\r\nlayouts[\"SmallWithPeninsulaWithIsland\"].Appliances.Fridge = 15750;\r\nlayouts[\"Small\"].Appliances.FridgeShadow = 15800;\r\nlayouts[\"SmallWithPeninsula\"].Appliances.FridgeShadow = 15800;\r\nlayouts[\"SmallWithIsland\"].Appliances.FridgeShadow = 15800;\r\nlayouts[\"SmallWithPeninsulaWithIsland\"].Appliances.FridgeShadow = 15800;\r\n\r\nlet startTopCabinetZIndex = 17100;\r\nlet startTopCabinetZIndex2 = 21100;\r\n\r\nlet startBottomCabinetZIndex = 22100;\r\nlet startBottomCabinetZIndex2 = 27100;\r\n\r\nObject.keys(LayoutType).forEach(layoutName => {\r\n let moduleTopNumber = 1, moduleBottomNumber = 1;\r\n for (let i = 1; i <= 8; i++) { // 8 modules\r\n for (let k = 1; k <= 64; k++) { // 64 module parts\r\n const module_modulePart = i + \"_\" + k;\r\n layouts[layoutName].Cabinet.TopCabinetModules[module_modulePart] = (i <= 5)\r\n ? startTopCabinetZIndex + (i*100)+ k\r\n : startTopCabinetZIndex2 + (moduleTopNumber*100)+ k;\r\n layouts[layoutName].Cabinet.BottomCabinetModules[module_modulePart] = (i <= 6)\r\n ? startBottomCabinetZIndex + (i*100)+ k\r\n : startBottomCabinetZIndex2 + (moduleBottomNumber*100)+ k;\r\n }\r\n if (i > 5) {\r\n moduleTopNumber++;\r\n }\r\n if (i > 6) {\r\n moduleBottomNumber++;\r\n }\r\n }\r\n});\r\n\r\nconst getLayerDimensions = (zIndex, currentLayout) => {\r\n const fullImagesFactor = UseFullSizeImages ? 185.1851851851852 : 100;\r\n\r\n if ((zIndex >= layouts[currentLayout].Cabinet.TopCabinetModules[\"1_1\"])\r\n && (zIndex <= layouts[currentLayout].Cabinet.TopCabinetModules[\"1_64\"])) {\r\n return {\r\n polygonArray: [[0,(fullImagesFactor/100)*240],[(fullImagesFactor/100)*290,(fullImagesFactor/100)*240],[(fullImagesFactor/100)*290,(fullImagesFactor/100)*400],[0,(fullImagesFactor/100)*400]],\r\n width: (fullImagesFactor/100)*290,\r\n height: (fullImagesFactor/100)*160\r\n };\r\n } else if ((zIndex >= layouts[currentLayout].Cabinet.TopCabinetModules[\"2_1\"])\r\n && (zIndex <= layouts[currentLayout].Cabinet.TopCabinetModules[\"2_64\"])) {\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*260,(fullImagesFactor/100)*270],[(fullImagesFactor/100)*480,(fullImagesFactor/100)*270],[(fullImagesFactor/100)*480,(fullImagesFactor/100)*510],[(fullImagesFactor/100)*260,(fullImagesFactor/100)*510]],\r\n width: (fullImagesFactor/100)*220,\r\n height: (fullImagesFactor/100)*240\r\n };\r\n } else if ((zIndex >= layouts[currentLayout].Cabinet.TopCabinetModules[\"3_1\"])\r\n && (zIndex <= layouts[currentLayout].Cabinet.TopCabinetModules[\"3_64\"])) {\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*470,(fullImagesFactor/100)*300],[(fullImagesFactor/100)*630,(fullImagesFactor/100)*300],[(fullImagesFactor/100)*630,(fullImagesFactor/100)*510],[(fullImagesFactor/100)*470,(fullImagesFactor/100)*510]],\r\n width: (fullImagesFactor/100)*160,\r\n height: (fullImagesFactor/100)*210\r\n };\r\n } else if ((zIndex >= layouts[currentLayout].Cabinet.TopCabinetModules[\"4_1\"])\r\n && (zIndex <= layouts[currentLayout].Cabinet.TopCabinetModules[\"4_64\"])) {\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*620,(fullImagesFactor/100)*310],[(fullImagesFactor/100)*770,(fullImagesFactor/100)*310],[(fullImagesFactor/100)*770,(fullImagesFactor/100)*510],[(fullImagesFactor/100)*620,(fullImagesFactor/100)*510]],\r\n width: (fullImagesFactor/100)*150,\r\n height: (fullImagesFactor/100)*200\r\n };\r\n } else if ((zIndex >= layouts[currentLayout].Cabinet.TopCabinetModules[\"5_1\"])\r\n && (zIndex <= layouts[currentLayout].Cabinet.TopCabinetModules[\"5_64\"])) {\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*750,(fullImagesFactor/100)*280],[(fullImagesFactor/100)*930,(fullImagesFactor/100)*280],[(fullImagesFactor/100)*930,(fullImagesFactor/100)*510],[(fullImagesFactor/100)*750,(fullImagesFactor/100)*280]],\r\n width: (fullImagesFactor/100)*180,\r\n height: (fullImagesFactor/100)*230\r\n };\r\n } else if ((zIndex >= layouts[currentLayout].Cabinet.TopCabinetModules[\"6_1\"])\r\n && (zIndex <= layouts[currentLayout].Cabinet.TopCabinetModules[\"6_64\"])) {\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*910,(fullImagesFactor/100)*260],[(fullImagesFactor/100)*1130,(fullImagesFactor/100)*260],[(fullImagesFactor/100)*1130,(fullImagesFactor/100)*510],[(fullImagesFactor/100)*910,(fullImagesFactor/100)*510]],\r\n width: (fullImagesFactor/100)*220,\r\n height: (fullImagesFactor/100)*250\r\n };\r\n } else if ((zIndex >= layouts[currentLayout].Cabinet.TopCabinetModules[\"7_1\"])\r\n && (zIndex <= layouts[currentLayout].Cabinet.TopCabinetModules[\"7_64\"])) {\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*1120,(fullImagesFactor/100)*220],[(fullImagesFactor/100)*1400,(fullImagesFactor/100)*220],[(fullImagesFactor/100)*1400,(fullImagesFactor/100)*520],[(fullImagesFactor/100)*1120,(fullImagesFactor/100)*520]],\r\n width: (fullImagesFactor/100)*280,\r\n height: (fullImagesFactor/100)*300\r\n };\r\n } else if ((zIndex >= layouts[currentLayout].Cabinet.TopCabinetModules[\"8_1\"])\r\n && (zIndex <= layouts[currentLayout].Cabinet.TopCabinetModules[\"8_64\"])) {\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*1380,(fullImagesFactor/100)*190],[(fullImagesFactor/100)*1620,(fullImagesFactor/100)*190],[(fullImagesFactor/100)*1620,(fullImagesFactor/100)*520],[(fullImagesFactor/100)*1380,(fullImagesFactor/100)*520]],\r\n width: (fullImagesFactor/100)*240,\r\n height: (fullImagesFactor/100)*330\r\n };\r\n } else if ((zIndex >= layouts[currentLayout].Cabinet.BottomCabinetModules[\"1_1\"])\r\n && (zIndex <= layouts[currentLayout].Cabinet.BottomCabinetModules[\"1_64\"])) {\r\n return {\r\n polygonArray: [[0,(fullImagesFactor/100)*240],[(fullImagesFactor/100)*290,(fullImagesFactor/100)*240],[(fullImagesFactor/100)*290,(fullImagesFactor/100)*400],[0,(fullImagesFactor/100)*400]],\r\n width: (fullImagesFactor/100)*290,\r\n height: (fullImagesFactor/100)*160\r\n };\r\n } else if ((zIndex >= layouts[currentLayout].Cabinet.BottomCabinetModules[\"2_1\"])\r\n && (zIndex <= layouts[currentLayout].Cabinet.BottomCabinetModules[\"2_64\"])) {\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*280,(fullImagesFactor/100)*620],[(fullImagesFactor/100)*480,(fullImagesFactor/100)*620],[(fullImagesFactor/100)*480,(fullImagesFactor/100)*850],[(fullImagesFactor/100)*280,(fullImagesFactor/100)*850]],\r\n width: (fullImagesFactor/100)*200,\r\n height: (fullImagesFactor/100)*230\r\n };\r\n } else if ((zIndex >= layouts[currentLayout].Cabinet.BottomCabinetModules[\"3_1\"])\r\n && (zIndex <= layouts[currentLayout].Cabinet.BottomCabinetModules[\"3_64\"])) {\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*470,(fullImagesFactor/100)*610],[(fullImagesFactor/100)*630,(fullImagesFactor/100)*610],[(fullImagesFactor/100)*630,(fullImagesFactor/100)*800],[(fullImagesFactor/100)*470,(fullImagesFactor/100)*800]],\r\n width: (fullImagesFactor/100)*160,\r\n height: (fullImagesFactor/100)*190\r\n };\r\n } else if ((zIndex >= layouts[currentLayout].Cabinet.BottomCabinetModules[\"4_1\"])\r\n && (zIndex <= layouts[currentLayout].Cabinet.BottomCabinetModules[\"4_64\"])) {\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*630,(fullImagesFactor/100)*600],[(fullImagesFactor/100)*760,(fullImagesFactor/100)*600],[(fullImagesFactor/100)*760,(fullImagesFactor/100)*800],[(fullImagesFactor/100)*630,(fullImagesFactor/100)*800]],\r\n width: (fullImagesFactor/100)*130,\r\n height: (fullImagesFactor/100)*200\r\n };\r\n } else if ((zIndex >= layouts[currentLayout].Cabinet.BottomCabinetModules[\"5_1\"])\r\n && (zIndex <= layouts[currentLayout].Cabinet.BottomCabinetModules[\"5_64\"])) {\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*750,(fullImagesFactor/100)*620],[(fullImagesFactor/100)*920,(fullImagesFactor/100)*620],[(fullImagesFactor/100)*920,(fullImagesFactor/100)*840],[(fullImagesFactor/100)*750,(fullImagesFactor/100)*840]],\r\n width: (fullImagesFactor/100)*170,\r\n height: (fullImagesFactor/100)*220\r\n };\r\n } else if ((zIndex >= layouts[currentLayout].Cabinet.BottomCabinetModules[\"6_1\"])\r\n && (zIndex <= layouts[currentLayout].Cabinet.BottomCabinetModules[\"6_64\"])) {\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*910,(fullImagesFactor/100)*640],[(fullImagesFactor/100)*1130,(fullImagesFactor/100)*640],[(fullImagesFactor/100)*1130,(fullImagesFactor/100)*880],[(fullImagesFactor/100)*910,(fullImagesFactor/100)*880]],\r\n width: (fullImagesFactor/100)*220,\r\n height: (fullImagesFactor/100)*240\r\n };\r\n } else if ((zIndex >= layouts[currentLayout].Cabinet.BottomCabinetModules[\"7_1\"])\r\n && (zIndex <= layouts[currentLayout].Cabinet.BottomCabinetModules[\"7_64\"])) {\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*1110,(fullImagesFactor/100)*660],[(fullImagesFactor/100)*1390,(fullImagesFactor/100)*660],[(fullImagesFactor/100)*1390,(fullImagesFactor/100)*940],[(fullImagesFactor/100)*1110,(fullImagesFactor/100)*940]],\r\n width: (fullImagesFactor/100)*280,\r\n height: (fullImagesFactor/100)*280\r\n };\r\n } else if ((zIndex >= layouts[currentLayout].Cabinet.BottomCabinetModules[\"8_1\"])\r\n && (zIndex <= layouts[currentLayout].Cabinet.BottomCabinetModules[\"8_64\"])) {\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*1380,(fullImagesFactor/100)*690],[(fullImagesFactor/100)*1620,(fullImagesFactor/100)*690],[(fullImagesFactor/100)*1620,(fullImagesFactor/100)*990],[(fullImagesFactor/100)*1380,(fullImagesFactor/100)*990]],\r\n width: (fullImagesFactor/100)*240,\r\n height: (fullImagesFactor/100)*300\r\n };\r\n }\r\n\r\n switch (zIndex) {\r\n case layouts[currentLayout].Floor:\r\n return {\r\n polygonArray: [[0,(fullImagesFactor/100)*750],[(fullImagesFactor/100)*1620,(fullImagesFactor/100)*750],[(fullImagesFactor/100)*1620,(fullImagesFactor/100)*1080],[0,(fullImagesFactor/100)*1080]],\r\n width: (fullImagesFactor/100)*1620,\r\n height: (fullImagesFactor/100)*330\r\n };\r\n\r\n //*** Walls ***//\r\n case layouts[currentLayout].Walls.LeftWall:\r\n return {\r\n polygonArray: [[0,(fullImagesFactor/100)*100],[(fullImagesFactor/100)*740,(fullImagesFactor/100)*100],[(fullImagesFactor/100)*740,(fullImagesFactor/100)*900],[0,(fullImagesFactor/100)*900]],\r\n width: (fullImagesFactor/100)*740,\r\n height: (fullImagesFactor/100)*800\r\n };\r\n case layouts[currentLayout].Walls.LeftWallBacksplash:\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*210,(fullImagesFactor/100)*500],[(fullImagesFactor/100)*630,(fullImagesFactor/100)*500],[(fullImagesFactor/100)*630,(fullImagesFactor/100)*590],[(fullImagesFactor/100)*210,(fullImagesFactor/100)*590]],\r\n };\r\n case layouts[currentLayout].Walls.RightWall:\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*600,(fullImagesFactor/100)*45],[(fullImagesFactor/100)*1620,(fullImagesFactor/100)*45],[(fullImagesFactor/100)*1620,(fullImagesFactor/100)*970],[(fullImagesFactor/100)*600,(fullImagesFactor/100)*970]],\r\n width: (fullImagesFactor/100)*1020,\r\n height: (fullImagesFactor/100)*925\r\n };\r\n case layouts[currentLayout].Walls.RightWallBacksplash:\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*630,(fullImagesFactor/100)*330],[(fullImagesFactor/100)*1620,(fullImagesFactor/100)*200],[(fullImagesFactor/100)*1620,(fullImagesFactor/100)*580],[(fullImagesFactor/100)*630,(fullImagesFactor/100)*580]],\r\n };\r\n case layouts[currentLayout].Walls.Ceiling:\r\n return {\r\n polygonArray: [[0,0],[(fullImagesFactor/100)*1620,0],[(fullImagesFactor/100)*1620,(fullImagesFactor/100)*260],[0,(fullImagesFactor/100)*260]],\r\n width: (fullImagesFactor/100)*1620,\r\n height: (fullImagesFactor/100)*260\r\n };\r\n case layouts[currentLayout].Walls.PopoutWall:\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*200,(fullImagesFactor/100)*120],[(fullImagesFactor/100)*740,(fullImagesFactor/100)*120],[(fullImagesFactor/100)*740,(fullImagesFactor/100)*880],[(fullImagesFactor/100)*200,(fullImagesFactor/100)*880]],\r\n width: (fullImagesFactor/100)*540,\r\n height: (fullImagesFactor/100)*760\r\n };\r\n case layouts[currentLayout].Walls.Backsplash:\r\n return {\r\n polygonArray: [[0,(fullImagesFactor/100)*200],[(fullImagesFactor/100)*1620,(fullImagesFactor/100)*200],[(fullImagesFactor/100)*1620,(fullImagesFactor/100)*700],[0,(fullImagesFactor/100)*700]],\r\n width: (fullImagesFactor/100)*1620,\r\n height: (fullImagesFactor/100)*500\r\n };\r\n case layouts[currentLayout].Walls.BacksplashLeftWall:\r\n return {\r\n polygonArray: [\r\n [(fullImagesFactor/100)*200,(fullImagesFactor/100)*280],\r\n [(fullImagesFactor/100)*632,(fullImagesFactor/100)*336],\r\n [(fullImagesFactor/100)*632,(fullImagesFactor/100)*600],\r\n [(fullImagesFactor/100)*200,(fullImagesFactor/100)*640]],\r\n };\r\n case layouts[currentLayout].Walls.BacksplashRightWall:\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*633,(fullImagesFactor/100)*336],[(fullImagesFactor/100)*1620,(fullImagesFactor/100)*210],[(fullImagesFactor/100)*1620,(fullImagesFactor/100)*680],[(fullImagesFactor/100)*633,(fullImagesFactor/100)*600]],\r\n };\r\n\r\n //*** Cabinet ***//\r\n case layouts[currentLayout].Cabinet.BottomCabinet:\r\n return {\r\n polygonArray: [[0,(fullImagesFactor/100)*590],[(fullImagesFactor/100)*1000,(fullImagesFactor/100)*590],[(fullImagesFactor/100)*1000,(fullImagesFactor/100)*860],[0,(fullImagesFactor/100)*860]],\r\n width: (fullImagesFactor/100)*1000,\r\n height: (fullImagesFactor/100)*270\r\n };\r\n case layouts[currentLayout].Cabinet.BottomCabinet2:\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*1090,(fullImagesFactor/100)*620],[(fullImagesFactor/100)*1620,(fullImagesFactor/100)*620],[(fullImagesFactor/100)*1620,(fullImagesFactor/100)*1080],[(fullImagesFactor/100)*1090,(fullImagesFactor/100)*1080]],\r\n width: (fullImagesFactor/100)*530,\r\n height: (fullImagesFactor/100)*480\r\n };\r\n case layouts[currentLayout].Cabinet.CrownMolding:\r\n return {\r\n polygonArray: [[0,(fullImagesFactor/100)*160],[(fullImagesFactor/100)*1620,(fullImagesFactor/100)*160],[(fullImagesFactor/100)*1620,(fullImagesFactor/100)*350],[0,(fullImagesFactor/100)*350]],\r\n width: (fullImagesFactor/100)*1620,\r\n height: (fullImagesFactor/100)*190\r\n };\r\n case layouts[currentLayout].Cabinet.CrownMolding2:\r\n return {\r\n polygonArray: [\r\n [(fullImagesFactor/100)*900,(fullImagesFactor/100)*110],\r\n [(fullImagesFactor/100)*1620,(fullImagesFactor/100)*110],\r\n [(fullImagesFactor/100)*1620,(fullImagesFactor/100)*280],\r\n [(fullImagesFactor/100)*900,(fullImagesFactor/100)*280]\r\n ],\r\n width: (fullImagesFactor/100)*720,\r\n height: (fullImagesFactor/100)*170\r\n };\r\n case layouts[currentLayout].Cabinet.TopCabinet:\r\n return {\r\n polygonArray: [[0,(fullImagesFactor/100)*180],[(fullImagesFactor/100)*1000,(fullImagesFactor/100)*180],[(fullImagesFactor/100)*1000,(fullImagesFactor/100)*520],[0,(fullImagesFactor/100)*520]],\r\n width: (fullImagesFactor/100)*1000,\r\n height: (fullImagesFactor/100)*340\r\n };\r\n case layouts[currentLayout].Cabinet.TopCabinet2:\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*910,(fullImagesFactor/100)*130],[(fullImagesFactor/100)*1620,(fullImagesFactor/100)*130],[(fullImagesFactor/100)*1620,(fullImagesFactor/100)*530],[(fullImagesFactor/100)*910,(fullImagesFactor/100)*530]],\r\n width: (fullImagesFactor/100)*710,\r\n height: (fullImagesFactor/100)*400\r\n };\r\n case layouts[currentLayout].Cabinet.Peninsula:\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*1190,(fullImagesFactor/100)*650],[(fullImagesFactor/100)*1620,(fullImagesFactor/100)*650],[(fullImagesFactor/100)*1620,(fullImagesFactor/100)*1080],[(fullImagesFactor/100)*1620,(fullImagesFactor/100)*1080]],\r\n width: (fullImagesFactor/100)*430,\r\n height: (fullImagesFactor/100)*430\r\n };\r\n case layouts[currentLayout].Cabinet.TopHandle:\r\n return {\r\n polygonArray: [[0,(fullImagesFactor/100)*230],[(fullImagesFactor/100)*990,(fullImagesFactor/100)*230],[(fullImagesFactor/100)*990,(fullImagesFactor/100)*550],[0,(fullImagesFactor/100)*550]],\r\n width: (fullImagesFactor/100)*990,\r\n height: (fullImagesFactor/100)*320\r\n };\r\n case layouts[currentLayout].Cabinet.TopHandle2:\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*990,(fullImagesFactor/100)*150],[(fullImagesFactor/100)*1620,(fullImagesFactor/100)*150],[(fullImagesFactor/100)*1620,(fullImagesFactor/100)*550],[(fullImagesFactor/100)*990,(fullImagesFactor/100)*550]],\r\n width: (fullImagesFactor/100)*630,\r\n height: (fullImagesFactor/100)*400\r\n };\r\n case layouts[currentLayout].Cabinet.BottomHandle:\r\n return {\r\n polygonArray: [[0,(fullImagesFactor/100)*620],[(fullImagesFactor/100)*910,(fullImagesFactor/100)*620],[(fullImagesFactor/100)*910,(fullImagesFactor/100)*920],[0,(fullImagesFactor/100)*920]],\r\n width: (fullImagesFactor/100)*910,\r\n height: (fullImagesFactor/100)*300\r\n };\r\n case layouts[currentLayout].Cabinet.BottomHandle2:\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*1100,(fullImagesFactor/100)*670],[(fullImagesFactor/100)*1100,(fullImagesFactor/100)*670],[(fullImagesFactor/100)*1620,(fullImagesFactor/100)*1000],[(fullImagesFactor/100)*1160,(fullImagesFactor/100)*1000]],\r\n width: (fullImagesFactor/100)*520,\r\n height: (fullImagesFactor/100)*330\r\n };\r\n\r\n //*** Appliances ***//\r\n case layouts[currentLayout].Appliances.Dishwasher:\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*650,(fullImagesFactor/100)*610],[(fullImagesFactor/100)*840,(fullImagesFactor/100)*840],[(fullImagesFactor/100)*840,(fullImagesFactor/100)*840],[(fullImagesFactor/100)*650,(fullImagesFactor/100)*610]],\r\n width: (fullImagesFactor/100)*190,\r\n height: (fullImagesFactor/100)*230\r\n };\r\n case layouts[currentLayout].Appliances.Fridge:\r\n return {\r\n polygonArray: [[0,(fullImagesFactor/100)*400],[(fullImagesFactor/100)*880,(fullImagesFactor/100)*400],[(fullImagesFactor/100)*880,(fullImagesFactor/100)*1080],[0,(fullImagesFactor/100)*1080]],\r\n width: (fullImagesFactor/100)*880,\r\n height: (fullImagesFactor/100)*680\r\n };\r\n case layouts[currentLayout].Appliances.Hood:\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*870,(fullImagesFactor/100)*130],[(fullImagesFactor/100)*1190,(fullImagesFactor/100)*130],[(fullImagesFactor/100)*1190,(fullImagesFactor/100)*520],[(fullImagesFactor/100)*870,(fullImagesFactor/100)*520]],\r\n width: (fullImagesFactor/100)*320,\r\n height: (fullImagesFactor/100)*390\r\n };\r\n case layouts[currentLayout].Appliances.Microwave:\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*890,(fullImagesFactor/100)*370],[(fullImagesFactor/100)*1130,(fullImagesFactor/100)*370],[(fullImagesFactor/100)*1130,(fullImagesFactor/100)*520],[(fullImagesFactor/100)*890,(fullImagesFactor/100)*520]],\r\n width: (fullImagesFactor/100)*240,\r\n height: (fullImagesFactor/100)*150\r\n };\r\n case layouts[currentLayout].Appliances.Range:\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*890,(fullImagesFactor/100)*550],[(fullImagesFactor/100)*1200,(fullImagesFactor/100)*550],[(fullImagesFactor/100)*1200,(fullImagesFactor/100)*910],[(fullImagesFactor/100)*890,(fullImagesFactor/100)*910]],\r\n width: (fullImagesFactor/100)*310,\r\n height: (fullImagesFactor/100)*360\r\n };\r\n\r\n //*** CountertopGroup ***//\r\n case layouts[currentLayout].CountertopGroup.Countertop:\r\n return {\r\n polygonArray: [[0,(fullImagesFactor/100)*570],[(fullImagesFactor/100)*1020,(fullImagesFactor/100)*570],[(fullImagesFactor/100)*1020,(fullImagesFactor/100)*650],[0,(fullImagesFactor/100)*650]],\r\n width: (fullImagesFactor/100)*1020,\r\n height: (fullImagesFactor/100)*80\r\n };\r\n case layouts[currentLayout].CountertopGroup.Countertop2:\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*1090,(fullImagesFactor/100)*630],[(fullImagesFactor/100)*1620,(fullImagesFactor/100)*630],[(fullImagesFactor/100)*1620,(fullImagesFactor/100)*1070],[(fullImagesFactor/100)*1090,(fullImagesFactor/100)*1070]],\r\n width: (fullImagesFactor/100)*530,\r\n height: (fullImagesFactor/100)*440\r\n };\r\n case layouts[currentLayout].CountertopGroup.Sink:\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*1240,(fullImagesFactor/100)*630],[(fullImagesFactor/100)*1620,(fullImagesFactor/100)*630],[(fullImagesFactor/100)*1620,(fullImagesFactor/100)*720],[(fullImagesFactor/100)*1240,(fullImagesFactor/100)*720]],\r\n width: (fullImagesFactor/100)*380,\r\n height: (fullImagesFactor/100)*90\r\n };\r\n case layouts[currentLayout].CountertopGroup.Faucet:\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*1240,(fullImagesFactor/100)*580],[(fullImagesFactor/100)*1620,(fullImagesFactor/100)*580],[(fullImagesFactor/100)*1620,(fullImagesFactor/100)*720],[(fullImagesFactor/100)*1240,(fullImagesFactor/100)*720]],\r\n width: (fullImagesFactor/100)*380,\r\n height: (fullImagesFactor/100)*140\r\n };\r\n case layouts[currentLayout].CountertopGroup.Stovetop:\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*530,(fullImagesFactor/100)*660],[(fullImagesFactor/100)*920,(fullImagesFactor/100)*660],[(fullImagesFactor/920)*1200,(fullImagesFactor/100)*760],[(fullImagesFactor/100)*530,(fullImagesFactor/100)*760]],\r\n width: (fullImagesFactor/100)*390,\r\n height: (fullImagesFactor/100)*100\r\n };\r\n\r\n //*** CenterIsland ***//\r\n case layouts[currentLayout].CenterIsland.Cabinet:\r\n case layouts[currentLayout].CenterIsland.Handle:\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*250,(fullImagesFactor/100)*640],[(fullImagesFactor/100)*1160,(fullImagesFactor/100)*640],[(fullImagesFactor/100)*1160,(fullImagesFactor/100)*1080],[(fullImagesFactor/100)*1160,(fullImagesFactor/100)*1080]],\r\n width: (fullImagesFactor/100)*910,\r\n height: (fullImagesFactor/100)*440\r\n };\r\n case layouts[currentLayout].CenterIsland.Countertop:\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*110,(fullImagesFactor/100)*640],[(fullImagesFactor/100)*1190,(fullImagesFactor/100)*640],[(fullImagesFactor/100)*1190,(fullImagesFactor/100)*1080],[(fullImagesFactor/100)*110,(fullImagesFactor/100)*1080]],\r\n width: (fullImagesFactor/100)*1080,\r\n height: (fullImagesFactor/100)*(fullImagesFactor/100)*440\r\n };\r\n case layouts[currentLayout].CenterIsland.Chairs:\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*90,(fullImagesFactor/100)*690],[(fullImagesFactor/100)*1160,(fullImagesFactor/100)*690],[(fullImagesFactor/100)*1160,(fullImagesFactor/100)*1080],[(fullImagesFactor/100)*90,(fullImagesFactor/100)*1080]],\r\n width: (fullImagesFactor/100)*1070,\r\n height: (fullImagesFactor/100)*390\r\n };\r\n case layouts[currentLayout].CenterIsland.Sink:\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*530,(fullImagesFactor/100)*650],[(fullImagesFactor/100)*900,(fullImagesFactor/100)*650],[(fullImagesFactor/100)*900,(fullImagesFactor/100)*750],[(fullImagesFactor/100)*530,(fullImagesFactor/100)*750]],\r\n width: (fullImagesFactor/100)*370,\r\n height: (fullImagesFactor/100)*100\r\n };\r\n case layouts[currentLayout].CenterIsland.Faucet:\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*530,(fullImagesFactor/100)*550],[(fullImagesFactor/100)*900,(fullImagesFactor/100)*550],[(fullImagesFactor/100)*900,(fullImagesFactor/100)*750],[(fullImagesFactor/100)*530,(fullImagesFactor/100)*750]],\r\n width: (fullImagesFactor/100)*370,\r\n height: (fullImagesFactor/100)*200\r\n };\r\n case layouts[currentLayout].CenterIsland.Stovetop:\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*530,(fullImagesFactor/100)*660],[(fullImagesFactor/100)*920,(fullImagesFactor/100)*660],[(fullImagesFactor/920)*1200,(fullImagesFactor/100)*760],[(fullImagesFactor/100)*530,(fullImagesFactor/100)*760]],\r\n width: (fullImagesFactor/100)*390,\r\n height: (fullImagesFactor/100)*100\r\n };\r\n case layouts[currentLayout].CenterIsland.Range:\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*530,(fullImagesFactor/100)*660],[(fullImagesFactor/100)*920,(fullImagesFactor/100)*660],[(fullImagesFactor/920)*1200,(fullImagesFactor/100)*760],[(fullImagesFactor/100)*530,(fullImagesFactor/100)*760]],\r\n width: (fullImagesFactor/100)*390,\r\n height: (fullImagesFactor/100)*100\r\n };\r\n default:\r\n return null\r\n }\r\n};\r\nconst checkForCanvasScale = (canvas, polygonArray) => {\r\n if (canvas && ((canvas.width !== canvas.offsetWidth) || (canvas.height !== canvas.offsetHeight))) {\r\n return polygonArray.map(point => {\r\n point = point.map(dot => Math.round(dot*canvas.offsetWidth/canvas.width));\r\n return point\r\n })\r\n }\r\n return polygonArray\r\n};\r\n\r\nexport default {\r\n layouts,\r\n getMenuByHoveredLayer: (currentLayout, layer, canvas) => {\r\n // console.log('currentLayout', currentLayout);\r\n // console.log('layer', layer);\r\n if ((\r\n (layer.zIndex >= layouts[currentLayout].Cabinet.TopCabinetModules[\"1_1\"])\r\n && (layer.zIndex <= layouts[currentLayout].Cabinet.TopCabinetModules[\"5_64\"])\r\n ) || (\r\n (layer.zIndex >= layouts[currentLayout].Cabinet.TopCabinetModules[\"6_1\"])\r\n && (layer.zIndex <= layouts[currentLayout].Cabinet.TopCabinetModules[\"8_64\"])\r\n )) {\r\n return {\r\n contextMenuPartId: \"top_cabinet\",\r\n module: invert(layouts[currentLayout].Cabinet.TopCabinetModules)[layer.zIndex],\r\n };\r\n } else if ((\r\n (layer.zIndex >= layouts[currentLayout].Cabinet.BottomCabinetModules[\"1_1\"])\r\n && (layer.zIndex <= layouts[currentLayout].Cabinet.BottomCabinetModules[\"6_64\"])\r\n ) || (\r\n (layer.zIndex >= layouts[currentLayout].Cabinet.BottomCabinetModules[\"7_1\"])\r\n && (layer.zIndex <= layouts[currentLayout].Cabinet.BottomCabinetModules[\"8_64\"])\r\n )) {\r\n return {\r\n contextMenuPartId: \"bottom_cabinet\",\r\n module: invert(layouts[currentLayout].Cabinet.BottomCabinetModules)[layer.zIndex],\r\n };\r\n }\r\n switch (layer.zIndex) {\r\n case layouts[currentLayout].Floor:\r\n return {\r\n parent: \"Floor\",\r\n child: \"Floor\"\r\n };\r\n case layouts[currentLayout].Walls.LeftWall: {\r\n let leftWallBacksplash = getLayerDimensions(layouts[currentLayout].Walls.LeftWallBacksplash, currentLayout);\r\n leftWallBacksplash.polygonArray = checkForCanvasScale(canvas, leftWallBacksplash.polygonArray);\r\n if (pnpoly(leftWallBacksplash.polygonArray, document.hoveredMousePos)) {\r\n return {\r\n contextMenuPartId: \"left_wall_custom\"\r\n };\r\n } else {\r\n return {\r\n parent: \"Walls\",\r\n child: \"Left Wall\"\r\n };\r\n }\r\n }\r\n case layouts[currentLayout].Walls.RightWall: {\r\n let rightWallBacksplash = getLayerDimensions(layouts[currentLayout].Walls.RightWallBacksplash, currentLayout);\r\n rightWallBacksplash.polygonArray = checkForCanvasScale(canvas, rightWallBacksplash.polygonArray);\r\n if (pnpoly(rightWallBacksplash.polygonArray, document.hoveredMousePos)) {\r\n return {\r\n contextMenuPartId: \"right_wall_custom\"\r\n };\r\n } else {\r\n return {\r\n parent: \"Walls\",\r\n child: \"Right Wall\"\r\n };\r\n }\r\n }\r\n case layouts[currentLayout].Walls.PopoutWall:\r\n return {\r\n parent: \"Walls\",\r\n child: \"Popout Wall\"\r\n };\r\n case layouts[currentLayout].Walls.Backsplash: {\r\n let backsplashLeftWall = getLayerDimensions(layouts[currentLayout].Walls.BacksplashLeftWall, currentLayout);\r\n let backsplashRightWall = getLayerDimensions(layouts[currentLayout].Walls.BacksplashRightWall, currentLayout);\r\n backsplashLeftWall.polygonArray = checkForCanvasScale(canvas, backsplashLeftWall.polygonArray);\r\n backsplashRightWall.polygonArray = checkForCanvasScale(canvas, backsplashRightWall.polygonArray);\r\n if (pnpoly(backsplashLeftWall.polygonArray, document.hoveredMousePos)) {\r\n return {\r\n contextMenuPartId: \"backsplash_custom_left\"\r\n };\r\n } else if (pnpoly(backsplashRightWall.polygonArray, document.hoveredMousePos)) {\r\n return {\r\n contextMenuPartId: \"backsplash_custom_right\"\r\n };\r\n } else {\r\n return {\r\n contextMenuPartId: \"backsplash_custom\"\r\n };\r\n }\r\n }\r\n case layouts[currentLayout].Walls.Ceiling:\r\n return {\r\n parent: \"Walls\",\r\n child: \"Ceiling\"\r\n };\r\n case layouts[currentLayout].Cabinet.TopCabinet:\r\n case layouts[currentLayout].Cabinet.TopCabinet2:\r\n return {\r\n parent: \"Cabinet\",\r\n child: \"Top Cabinet\"\r\n };\r\n case layouts[currentLayout].Cabinet.BottomCabinet:\r\n case layouts[currentLayout].Cabinet.BottomCabinet2:\r\n case layouts[currentLayout].Cabinet.Peninsula:\r\n return {\r\n parent: \"Cabinet\",\r\n child: \"Bottom Cabinet\"\r\n };\r\n case layouts[currentLayout].Cabinet.CrownMolding:\r\n case layouts[currentLayout].Cabinet.CrownMolding2:\r\n return {\r\n parent: \"Cabinet\",\r\n child: \"Crown Molding\"\r\n };\r\n case layouts[currentLayout].Cabinet.TopHandle:\r\n case layouts[currentLayout].Cabinet.TopHandle2:\r\n return {\r\n parent: \"Cabinet\",\r\n child: \"Top Handle\"\r\n };\r\n case layouts[currentLayout].Cabinet.BottomHandle:\r\n case layouts[currentLayout].Cabinet.BottomHandle2:\r\n return {\r\n parent: \"Cabinet\",\r\n child: \"Bottom Handle\"\r\n };\r\n case layouts[currentLayout].Appliances.Range:\r\n return {\r\n parent: \"Appliance\",\r\n child: \"Range\"\r\n };\r\n case layouts[currentLayout].Appliances.Fridge:\r\n return {\r\n parent: \"Appliance\",\r\n child: \"Fridge\"\r\n };\r\n case layouts[currentLayout].Appliances.Hood:\r\n return {\r\n parent: \"Appliance\",\r\n child: \"Hood\"\r\n };\r\n case layouts[currentLayout].Appliances.Microwave:\r\n return {\r\n parent: \"Appliance\",\r\n child: \"Microwave\"\r\n };\r\n case layouts[currentLayout].Appliances.Dishwasher:\r\n return {\r\n parent: \"Appliance\",\r\n child: \"Dishwasher\"\r\n };\r\n case layouts[currentLayout].CountertopGroup.Edge:\r\n return {\r\n parent: \"Countertop\",\r\n child: \"Edge\"\r\n };\r\n // case layouts[currentLayout].CountertopGroup.Countertop2:\r\n case layouts[currentLayout].CountertopGroup.Sink:\r\n case layouts[currentLayout].CountertopGroup.Faucet:\r\n case layouts[currentLayout].CountertopGroup.Countertop:\r\n case layouts[currentLayout].CountertopGroup.Countertop2:\r\n return {\r\n contextMenuPartId: \"countertop_group_custom\"\r\n };\r\n case layouts[currentLayout].CountertopGroup.Stovetop:\r\n return {\r\n parent: \"Countertop\",\r\n child: \"Stovetop\"\r\n };\r\n case layouts[currentLayout].CenterIsland.Chairs:\r\n return {\r\n parent: \"Center Island\",\r\n child: \"Chairs\"\r\n };\r\n case layouts[currentLayout].CenterIsland.Cabinet:\r\n return {\r\n parent: \"Center Island\",\r\n child: \"Cabinet\"\r\n };\r\n case layouts[currentLayout].CenterIsland.Edge:\r\n return {\r\n parent: \"Center Island\",\r\n child: \"Edge\"\r\n };\r\n case layouts[currentLayout].CenterIsland.Faucet:\r\n case layouts[currentLayout].CenterIsland.Sink:\r\n case layouts[currentLayout].CenterIsland.Stovetop:\r\n case layouts[currentLayout].CenterIsland.Range:\r\n case layouts[currentLayout].CenterIsland.Countertop:\r\n return {\r\n contextMenuPartId: \"center_island_custom\"\r\n };\r\n case layouts[currentLayout].CenterIsland.Handle:\r\n return {\r\n parent: \"Center Island\",\r\n child: \"Handle\"\r\n };\r\n default:\r\n return \"\"\r\n }\r\n },\r\n getLayerDimensions\r\n}\r\n\r\n\r\n","import {Part} from \"../part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport {centerIslandThumbnail} from \"../assets\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport {PLACEMENTS} from \"../constants\";\r\n\r\nimport Cabinet from \"../subparts/centerIsland/cabinet\";\r\nimport Faucet from \"../subparts/centerIsland/faucet\";\r\nimport Sink from \"../subparts/centerIsland/sink\";\r\nimport Edge from \"../subparts/centerIsland/edge\";\r\nimport Countertop from \"../subparts/centerIsland/countertop\";\r\nimport IslandHood from \"../subparts/centerIsland/islandHood\";\r\nimport Stovetop from \"../subparts/centerIsland/stovetop\";\r\nimport Pendants from \"../subparts/centerIsland/pendants\";\r\nimport RightIsland from \"../subparts/centerIsland/rightIsland\";\r\nimport {setActiveFeaturesBeforeAllWalls} from \"../../../look/lookNavigation/lookNavigationFunctions\";\r\nimport {CABINET_GROUP, COUNTERTOP_GROUP} from \"../../../kvComponent/core/constants\";\r\n\r\n// () = ()\r\n\r\nexport default class CenterIsland extends Part {\r\n static id = 'CenterIsland';\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'CenterIsland';\r\n this.partThumbnail = centerIslandThumbnail;\r\n this.translateId = \"visualizer.kitchen.center_island\";\r\n\r\n // related items\r\n this.cabinet = null;\r\n this.countertop = null;\r\n this.faucet = null;\r\n this.sink = null;\r\n this.edge = null;\r\n this.islandHood = null;\r\n this.relatedGroupNames = [\"Center Island\", \"Center Island Countertop\", \"Faucet\", \"Sink\", \"Edge Profile\",\r\n \"Island Hood\", \"Stovetop\", \"Pendants\", \"Right Island\"];\r\n }\r\n\r\n load(dbFeature, loadFeature = true) {\r\n let relatedItemName = \"\",\r\n shouldLoadInDifferentGroups = false,\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Center Island\":\r\n case \"Cabinets Center Island\":\r\n case \"Center Island Cabinet\":\r\n relatedItemName = \"cabinet\";\r\n RelatedItemClass = Cabinet;\r\n break;\r\n case \"Center Island Countertop\":\r\n case \"Countertop Center Island\":\r\n relatedItemName = \"countertop\";\r\n RelatedItemClass = Countertop;\r\n break;\r\n case \"Faucet\":\r\n if (loadFeature && ((dbFeature.metaData[\"Placement\"] && dbFeature.metaData[\"Placement\"].includes(PLACEMENTS.Island)) || (!dbFeature.metaData[\"Placement\"] && !dbFeature.s3Bindings))) {\r\n if (!dbFeature.metaData[\"Placement\"]) {\r\n shouldLoadInDifferentGroups = true;\r\n }\r\n relatedItemName = \"faucet\";\r\n RelatedItemClass = Faucet;\r\n }\r\n break;\r\n case \"Sink\":\r\n if (loadFeature && ((dbFeature.metaData[\"Placement\"] && dbFeature.metaData[\"Placement\"].includes(PLACEMENTS.Island)) || (!dbFeature.metaData[\"Placement\"] && !dbFeature.s3Bindings))) {\r\n if (!dbFeature.metaData[\"Placement\"]) {\r\n shouldLoadInDifferentGroups = true;\r\n }\r\n relatedItemName = \"sink\";\r\n RelatedItemClass = Sink;\r\n }\r\n break;\r\n case \"Edge Profile\":\r\n case \"Edge\":\r\n shouldLoadInDifferentGroups = true;\r\n relatedItemName = \"edge\";\r\n RelatedItemClass = Edge;\r\n break;\r\n case \"Island hood\":\r\n case \"Island Hood\":\r\n relatedItemName = \"islandHood\";\r\n RelatedItemClass = IslandHood;\r\n break;\r\n case \"Island Stove\":\r\n relatedItemName = \"stovetop\";\r\n RelatedItemClass = Stovetop;\r\n break;\r\n case \"Pendants\":\r\n relatedItemName = \"pendants\";\r\n RelatedItemClass = Pendants;\r\n break;\r\n case \"Right Island\":\r\n relatedItemName = \"rightIsland\";\r\n RelatedItemClass = RightIsland;\r\n break;\r\n }\r\n return this.loadCommon(relatedItemName, RelatedItemClass, dbFeature, loadFeature, shouldLoadInDifferentGroups)\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n subParts(withHidden = true) {\r\n return this.relatedItems\r\n .filter(item => {\r\n if (item.partId === \"center_island_handle\") {\r\n item.visible = item.features.filter(f => f.matchesMetaForArrayOfConditions(item.getArrayOfConditions())).length;\r\n }\r\n return this.filterRelatedItem(item, withHidden)\r\n })\r\n .map(_ => new DesignNavigationItem(_.partName, _));\r\n }\r\n\r\n handleSubPartClick() {\r\n\r\n }\r\n\r\n getCabinetType() {\r\n return this.cabinet && this.cabinet.activeFeature\r\n ? this.cabinet.activeFeature.dbFeature.metaData[\"Cabinet\"]\r\n : \"\"\r\n }\r\n\r\n getChairType() {\r\n return this.chairs && this.chairs.activeFeature\r\n ? this.chairs.activeFeature.dbFeature.metaData[\"Chair\"]\r\n : \"\"\r\n }\r\n\r\n setSpecificRules() {\r\n if (this.edge) {\r\n this.edge.setEdgeNotInVisualizer()\r\n }\r\n }\r\n\r\n setPrevioslySelected(featureGroup) {\r\n setActiveFeaturesBeforeAllWalls(featureGroup.partId === \"center_island_cabinet\" ? CABINET_GROUP : COUNTERTOP_GROUP);\r\n }\r\n\r\n}\r\n","import React, {useEffect, useState} from \"react\";\r\nimport {connect} from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\nimport NavItemPositionModalButton from \"./navItemPositionModalButton\";\r\nimport {toggleNavItemPositionModal} from \"../../../actions/navigationFunctions\";\r\nimport {CORNER_SHELVES_POSITIONS, PAN_POSITIONS, SIDE_POSITIONS} from \"../../bvSceneComponent/core/constants\";\r\n// import {SLAT_WALL_POSITIONS} from \"../../commonVisualizer/core/constants\";\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\nimport {featureInterface} from \"../../../interfaces/featureInterface\";\r\nimport NavItemPositionModalSlatWall from \"./navItemPositionModalSlatWall\";\r\n// import NavItemPositionModalSlatWallButton from \"./navItemPositionModalSlatWallButton\";\r\n\r\nconst disallowBlurClasses = [\".nav-pos\", \".feature\", \".menu-list__item\", \".m-feature\"];\r\n\r\nconst getPositionsArray = (partId) => {\r\n switch (partId) {\r\n case \"corner_shelf\":\r\n return CORNER_SHELVES_POSITIONS\r\n // case \"slat_wall\":\r\n // return SLAT_WALL_POSITIONS\r\n case \"shower_pan_combo\":\r\n case \"shower_fixture\":\r\n case \"grab_bar\":\r\n case \"soap_dish\":\r\n return PAN_POSITIONS\r\n default:\r\n return document.kvConfig.visualizerType === \"bvState\" ? SIDE_POSITIONS : [\"L\",\"R\", \"C\"]\r\n // return [\"L\",\"R\", \"C\"]\r\n }\r\n}\r\n\r\nconst NavItemPositionModal = (props) => {\r\n\r\n const {navItemPositionModal, toggleNavItemPositionModal, activePartId, windowWidth, windowHeight, isWizard,\r\n activeFeature} = props;\r\n const [parent, setParent] = useState(null);\r\n const [checkboxesUpdated, setCheckboxesUpdated] = useState(true);\r\n const left = navItemPositionModal.popupPosition.left;\r\n const top = navItemPositionModal.popupPosition.top;\r\n\r\n const contextMenuBlur = (e) => {\r\n if ((!disallowBlurClasses.some(cls => e.target.closest(cls)) || e.target.closest(\".feature-buttons\"))\r\n && navItemPositionModal.popupOpened) {\r\n toggleNavItemPositionModal({\r\n popupOpened: false,\r\n activePartId: \"\"\r\n })\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n document.addEventListener('click', contextMenuBlur);\r\n return () => {\r\n document.removeEventListener('click', contextMenuBlur)\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [navItemPositionModal]);\r\n\r\n useEffect(() => {\r\n const layout = getCurrentLayout();\r\n setParent(layout.getFeatureGroupByPartId(activePartId))\r\n }, [activePartId]);\r\n\r\n const updateCheckboxes = () => {\r\n setCheckboxesUpdated(!checkboxesUpdated);\r\n };\r\n\r\n useEffect(() => {\r\n updateCheckboxes();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [left, top, activePartId]);\r\n\r\n if (!navItemPositionModal.popupOpened || !parent) { // added !parent because the buttons were transitioning the modal width after the parent is set\r\n return null\r\n }\r\n\r\n const isMobile = windowWidth < 991;\r\n const maxRight = left > windowWidth - 200;\r\n const fixedTop = top > (windowHeight - 130) ? windowHeight - 130 : top;\r\n //\r\n // console.log(\"windowHeight\", windowHeight);\r\n // console.log(\"top\", top);\r\n // console.log(\"fixedTop\", fixedTop);\r\n\r\n const styles = isMobile ? {\r\n left: maxRight ? \"auto\" : left + \"px\",\r\n top: fixedTop + \"px\",\r\n right: maxRight ? 0 : \"auto\"\r\n } : {\r\n transform: `translate(${maxRight ? left - 200 : left}px, ${fixedTop}px)`,\r\n }\r\n\r\n const triangleStyles = isMobile ? {\r\n left: left + \"px\",\r\n top: fixedTop + \"px\",\r\n position: \"fixed\",\r\n marginTop: 10,\r\n } : maxRight ? {\r\n left: \"auto\",\r\n right: \"40px\"\r\n } : {}\r\n\r\n const isShelf = activePartId === \"corner_shelf\";\r\n const isSlatWall = activePartId === \"slat_wall\";\r\n\r\n if (isSlatWall) {\r\n return \r\n }\r\n\r\n let positionsArray = getPositionsArray(activePartId);\r\n\r\n positionsArray = positionsArray.filter(pos => {\r\n return parent && parent.getMatchingPositionFeature(pos, activeFeature);\r\n });\r\n\r\n return (\r\n
    3 ? \" nav-pos--shelf\" : \"\")\r\n + (positionsArray.length === 3 ? \" nav-pos--three\" : \"\") + (isWizard ? \" nav-pos--wizard\" : \"\")}\r\n style={styles}>\r\n \r\n
    \r\n
    \r\n

    {isShelf ? \"Left\" : \"Side\"}

    \r\n
    \r\n {positionsArray.slice(0, 3).map((shelf, shelfIndex) => {\r\n return \r\n })}\r\n
    \r\n
    \r\n {isShelf && (positionsArray.length > 3) ? (\r\n
    \r\n

    Right

    \r\n
    \r\n {positionsArray.slice(3, 6).map((shelf, shelfIndex) => {\r\n return \r\n })}\r\n
    \r\n
    \r\n ) : null}\r\n
    \r\n
    \r\n )\r\n};\r\n\r\nNavItemPositionModal.propTypes = {\r\n // feature: PropTypes.object.isRequired\r\n activeFeature: PropTypes.shape(featureInterface),\r\n isWizard: PropTypes.bool\r\n}\r\n\r\nconst mapStateToProps = (store, ownProps) => {\r\n const {windowHeight, windowWidth} = store.serverState;\r\n return {\r\n navItemPositionModal: store.navigationState.navItemPositionModal,\r\n activeFeature: ownProps.activeFeature || store.selectionState.activeFeature,\r\n activePartId: store.navigationState.navItemPositionModal.activePartId,\r\n windowHeight,\r\n windowWidth,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n toggleNavItemPositionModal\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(NavItemPositionModal)\r\n","import {getQuotePriceWithTaxes, getTotalPrice, toFixedFeatureCost} from \"./misc/helpers\";\r\nimport store from \"./store\";\r\nimport {getAllFeatureFilters, getFilterGroupValue} from \"./misc/utils\";\r\nimport {filterCartItems} from \"./bvcomponents/look/lookNavigation/lookFunctions2\";\r\n\r\n\r\nexport const getAnalyticsEcommerceItem = (feature, quantity = 1, index = 0) => {\r\n if (!feature) {\r\n return false\r\n }\r\n const {fabricatorState, filterState} = store.getState();\r\n const {filterGroups} = filterState;\r\n\r\n let item_brand = \"\";\r\n const manufacturerFilterGroup = filterGroups.find(filterGroup => filterGroup.name.trim() === \"Manufacturer\");\r\n if (manufacturerFilterGroup) {\r\n const featureFilters = getAllFeatureFilters(feature);\r\n if (featureFilters && Array.isArray(featureFilters[manufacturerFilterGroup.id]) && featureFilters[manufacturerFilterGroup.id].length) {\r\n const filterValueObject = getFilterGroupValue(featureFilters[manufacturerFilterGroup.id][0], manufacturerFilterGroup)\r\n if (filterValueObject) {\r\n item_brand = filterValueObject.displayText;\r\n }\r\n }\r\n }\r\n\r\n const featureGroup = feature.getParent();\r\n const itemQuantity = Number.isInteger(quantity) ? quantity : 1;\r\n\r\n return {\r\n item_id: feature.dbFeature.sku, // \"SKU_12345\"\r\n item_name: feature.getCustomFullDisplayName(), // \"Stan and Friends Tee\",\r\n affiliation: fabricatorState.companyName || \"\", // \"Google Merchandise Store\",\r\n coupon: \"\", // \"SUMMER_FUN\", // we never have any\r\n discount: 0.00, // 2.22 // we are not using them yet\r\n index,\r\n item_brand, // \"Google\", // Manufacturer filter\r\n item_category: feature.dbFeature.lixilProductCategory || \"\", // \"Apparel\",\r\n item_category2: feature.dbFeature.lixilProductSubCategory || \"\", // \"Adult\",\r\n item_category3: feature.getCollectionName(filterGroups), // \"Shirts\",\r\n item_category4: \"\", // \"Crew\",\r\n item_category5: \"\", // \"Short sleeve\",\r\n item_list_id: feature.partId, // \"related_products\",\r\n item_list_name: featureGroup.dbName || featureGroup.partName || \"\", //\"Related Products\",\r\n item_variant: feature.getColorName(filterGroups), // \"green\",\r\n location_id: \"\", // \"ChIJIQBpAG2ahYAR_6128GcTUEo\",\r\n price: +toFixedFeatureCost(feature, itemQuantity),\r\n quantity: itemQuantity\r\n }\r\n}\r\n\r\nexport const getAnalyticsEcommerceValues = (cartItemsToCount) => {\r\n const {cartState, fabricatorState} = store.getState();\r\n const cartItems = cartItemsToCount || cartState.cartItems;\r\n const fabricatorSettings = fabricatorState.settings;\r\n\r\n const cartItemsToInclude = filterCartItems(cartItems);\r\n const totalPrice = getTotalPrice(null, false, cartItemsToInclude);\r\n\r\n const tax = totalPrice.priceTaxes.length\r\n ? totalPrice.priceTaxes.reduce((acc, tax) => acc + tax.materialTax, 0)\r\n : totalPrice.materialTaxes\r\n\r\n return {\r\n currency: fabricatorSettings.currency,\r\n value: getQuotePriceWithTaxes(totalPrice),\r\n items: cartItemsToInclude.map((cartItem, cartItemIndex) => {\r\n return getAnalyticsEcommerceItem(cartItem.cartFeature, cartItem.quantity, cartItemIndex)\r\n }),\r\n tax: tax || 0,\r\n shipping: totalPrice.totalDeliveryCost || 0,\r\n }\r\n}\r\n","import React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport {FormattedMessage, injectIntl, FormattedHTMLMessage} from \"react-intl\";\r\nimport {withRouter} from \"react-router-dom\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport IconButton from \"@mui/material/IconButton\";\r\nimport CloseIcon from \"@mui/icons-material/Close\";\r\n\r\nimport LookListContentHeaderRightSide from \"../../list/lookListContentHeaderRightSide\";\r\nimport {setLookOpened, setLookPageOpened} from \"../../../../actions/lookFunctions\";\r\nimport {ROUTES} from \"../../../../routes\";\r\nimport GroheCartStepper from \"./groheCartStepper\";\r\n\r\nconst GroheCartHeaderCommon = (props) => {\r\n\r\n const {title, subTitle, afterTitle, withSave, intl, history, location, isMobile, setLookPageOpened, setLookOpened,\r\n className, subTitleValues} = props;\r\n\r\n const closeCartClick = () => {\r\n setLookPageOpened(\"\");\r\n setLookOpened(null);\r\n history.push(ROUTES.home);\r\n }\r\n\r\n return (\r\n
    \r\n
    \r\n {isMobile ? (\r\n
    \r\n \r\n \r\n \r\n
    \r\n ) : null}\r\n
    \r\n
    \r\n

    \r\n {afterTitle}\r\n

    \r\n {subTitle ? (\r\n

    \r\n \r\n

    \r\n ) : null}\r\n
    \r\n {location && (location.pathname !== ROUTES.cartSuccess) ? (\r\n
    \r\n \r\n {withSave ? null : }\r\n
    \r\n ) : null}\r\n
    \r\n )\r\n};\r\n\r\nGroheCartHeaderCommon.propTypes = {\r\n title: PropTypes.string.isRequired,\r\n subTitle: PropTypes.string,\r\n className: PropTypes.string,\r\n afterTitle: PropTypes.any,\r\n withSave: PropTypes.bool,\r\n subTitleValues: PropTypes.object,\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const {isMobile} = store.serverState;\r\n return {\r\n isMobile,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setLookPageOpened,\r\n setLookOpened,\r\n};\r\n\r\nexport default injectIntl(\r\n withRouter(\r\n connect(mapStateToProps, mapDispatchToProps)(GroheCartHeaderCommon)\r\n )\r\n)\r\n","//********* SQFT *********//\r\nimport * as types from \"./actionTypes\";\r\n\r\nexport const toggleShowManualCalculation = (showManualCalculation) => ({\r\n type: types.TOGGLE_SHOW_MANUAL_CALCULATION,\r\n payload: {showManualCalculation}\r\n});\r\n\r\nexport const setSwitcherPosition = (switcherPosition) => ({\r\n type: types.SET_SWITCHER_POSITION,\r\n payload: {switcherPosition}\r\n});\r\n\r\nexport const addManualCalculateRow = (type) => ({\r\n type: types.ADD_MANUAL_CALCULATION_ROW,\r\n payload: {type}\r\n});\r\n\r\nexport const updateManualCalculateRow = (type, row, updatedRowValue) => ({\r\n type: types.UPDATE_MANUAL_CALCULATION_ROW,\r\n payload: {type, row, updatedRowValue}\r\n});\r\n\r\nexport const updateManualCalculateRows = (manualCalculationRows) => ({\r\n type: types.UPDATE_MANUAL_CALCULATION_ROWS,\r\n payload: manualCalculationRows\r\n});\r\n\r\nexport const deleteManualCalculateRow = (type, id) => ({\r\n type: types.DELETE_MANUAL_CALCULATION_ROW,\r\n payload: {type, id}\r\n});\r\n","import { hashHistory } from 'react-router';\r\nimport store from '../store';\r\nimport {getCurrentLayout} from \"../bvcomponents/appLayout\";\r\nimport {switchToWizardItem} from \"../bvcomponents/qkbPages/materialsWizard/useChangeWizardStepRoute\";\r\n\r\nexport const changeRoutePath = (activePart, nextRelatedItemIndex, withHidden = true) => {\r\n let selectionGroup = store.getState().selectionState.selectionGroup;\r\n if (!selectionGroup) {\r\n return\r\n }\r\n const partName = selectionGroup.toLowerCase();\r\n // console.log('activePart', activePart);\r\n if (!activePart) {\r\n return\r\n }\r\n if (activePart.menuType === 0 || activePart.partName === \"Toilet\") {\r\n const nextPath = 'materials/'+partName;\r\n if (!window.location.href.includes(nextPath)) {\r\n hashHistory.push(nextPath);\r\n }\r\n } else {\r\n const part = activePart.subParts(withHidden)[nextRelatedItemIndex];\r\n if (part) {\r\n const subPartName = part.part.partName.toLowerCase().replace(\" \",\"-\");\r\n const nextPath = 'materials/'+partName+'/'+subPartName;\r\n if (!window.location.href.includes(nextPath)) {\r\n hashHistory.push(nextPath);\r\n }\r\n }\r\n }\r\n};\r\n\r\nexport const getMaterialsFixedName = (qtCategoryName = \"\") => {\r\n return qtCategoryName.replace(/ /g,\"-\").replace(/\\//g,\"-\").toLowerCase()\r\n}\r\n\r\nexport const changeQTRoutePath = (qtCategoryName, nextRelatedItemIndex) => {\r\n\r\n const {wizardIsActive, wizardActiveItem} = store.getState().wizardState;\r\n if (wizardIsActive) {\r\n switchToWizardItem(wizardActiveItem);\r\n return\r\n }\r\n\r\n const layout = getCurrentLayout();\r\n if (!qtCategoryName) {\r\n qtCategoryName = store.getState().qtState.qtActiveCategory || layout.qtCategories[0].name;\r\n }\r\n if (!nextRelatedItemIndex && (nextRelatedItemIndex !== 0)) {\r\n nextRelatedItemIndex = store.getState().selectionState.activePartRelatedItemIndex;\r\n }\r\n let qtCategory = layout.qtCategories.find(qtCat => qtCat.name === qtCategoryName);\r\n if (!qtCategory) { //cases when we switched visualizer type and qtCategoryName is still an old one\r\n qtCategory = layout.qtCategories[0];\r\n }\r\n let partName = getMaterialsFixedName(qtCategoryName);\r\n let nextSubPart = qtCategory.subParts[nextRelatedItemIndex] || qtCategory.subParts[0];\r\n if (!nextSubPart) {\r\n console.log(\"ERROR, no subparts exist in the category\", qtCategory);\r\n if (layout.qtCategories[0] && layout.qtCategories[0].subParts.length) {\r\n hashHistory.push('materials/'+partName);\r\n return\r\n } else {\r\n for (let i = 0; i < layout.qtCategories.length; i++) {\r\n // here we check at least some category which has featureGroup with features!\r\n if (layout.qtCategories[i] && layout.qtCategories[i].subParts.length) {\r\n partName = getMaterialsFixedName(layout.qtCategories[i].name);\r\n nextSubPart = layout.qtCategories[i].subParts[0];\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n if (!nextSubPart) {\r\n hashHistory.push(\"/materials\");\r\n return;\r\n }\r\n const subPartName = getMaterialsFixedName(nextSubPart.part.partName);\r\n const nextPath = 'materials/'+partName+'/'+subPartName;\r\n if (!window.location.href.includes(nextPath)) {\r\n hashHistory.push(nextPath);\r\n }\r\n\r\n return nextSubPart\r\n\r\n};\r\n","import React from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport $ from 'jquery';\r\nimport {connect} from \"react-redux\";\r\n\r\nimport DemoPoint from \"./demoPoint\";\r\nimport Config from \"../../../config\";\r\n\r\nclass DemoPoints extends React.Component {\r\n\r\n static propTypes = {\r\n layoutFeatures: PropTypes.array.isRequired,\r\n layoutType: PropTypes.number.isRequired,\r\n canvasId: PropTypes.string.isRequired,\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n points: [],\r\n currentLayoutType: null,\r\n dimensions: {\r\n width: this.props.canvasDimensions.width,\r\n height: this.props.canvasDimensions.height\r\n },\r\n }\r\n }\r\n\r\n componentDidMount() {\r\n this.setPoints(this.props);\r\n this.handleResize();\r\n $(window).on('resize', this.handleResize);\r\n }\r\n\r\n componentWillReceiveProps(nextProps) {\r\n if (this.state.currentLayoutType !== nextProps.layoutType) {\r\n this.setPoints(nextProps);\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n $(window).off('resize', this.handleResize);\r\n }\r\n\r\n setPoints = (nextProps) => {\r\n const points = [];\r\n nextProps.layoutFeatures.forEach((parentGroup) => {\r\n // console.log(\"parentGroup\", parentGroup);\r\n switch (document.kvConfig.visualizerType) {\r\n case \"Bathroom\":\r\n case \"BV\": {\r\n if (parentGroup.partName === \"Walls\") {\r\n const pointB = this.getBathroomPointPositionByPartName(\"Wall B\");\r\n const pointC = this.getBathroomPointPositionByPartName(\"Wall C\");\r\n points.push(pointB, pointC);\r\n } else if (parentGroup.partName === \"Vanity\") {\r\n const vanity = this.getBathroomPointPositionByPartName(\"Vanity\");\r\n const mirror = this.getBathroomPointPositionByPartName(\"Mirror\");\r\n points.push(vanity, mirror);\r\n } else if (!(nextProps.layoutType === 0 &&\r\n (parentGroup.partName === \"Window\" || parentGroup.partName === \"Bathtub\"))) {\r\n const point = this.getBathroomPointPositionByPartName(parentGroup.partName, nextProps);\r\n if (point.left || point.top) {\r\n points.push(point);\r\n }\r\n }\r\n break;\r\n }\r\n case \"bvScene\": {\r\n const bvScenePoints = [\r\n {\r\n partId: \"shower_head\",\r\n left: 925,\r\n top: 400,\r\n },\r\n {\r\n partId: \"toilet\",\r\n left: 380,\r\n top: 820,\r\n },\r\n {\r\n partId: \"vanity_sink\",\r\n left: 530,\r\n top: 670,\r\n },\r\n {\r\n partId: \"bathtub_body\",\r\n left: 1520,\r\n top: 760,\r\n },\r\n ]\r\n parentGroup.relatedItems.forEach(relItem => {\r\n const relPoint = bvScenePoints.find(bvScenePoint => {\r\n return bvScenePoint.partId === relItem.partId && !relItem.disabled\r\n })\r\n if (relPoint) {\r\n points.push(relPoint)\r\n }\r\n });\r\n break;\r\n }\r\n case \"Kitchen\":\r\n case \"KV\": {\r\n switch (parentGroup.partName) {\r\n case \"Walls\": {\r\n points.push(\r\n this.getKitchenPointPosition(\"left_wall\"),\r\n this.getKitchenPointPosition(\"right_wall\"),\r\n this.getKitchenPointPosition(\"ceiling\")\r\n );\r\n break;\r\n }\r\n case \"Appliances\": {\r\n points.push(\r\n this.getKitchenPointPosition(\"hood\"),\r\n this.getKitchenPointPosition(\"range\"),\r\n this.getKitchenPointPosition(\"fridge\"),\r\n this.getKitchenPointPosition(\"dishwasher\")\r\n );\r\n break;\r\n }\r\n case \"Countertop\": {\r\n points.push(\r\n this.getKitchenPointPosition(\"countertop3\"),\r\n this.getKitchenPointPosition(\"sink1\")\r\n );\r\n break;\r\n }\r\n case \"Cabinet\": {\r\n points.push(\r\n this.getKitchenPointPosition(\"top_cabinet\"),\r\n this.getKitchenPointPosition(\"top_cabinet2\"),\r\n this.getKitchenPointPosition(\"bottom_cabinet\")\r\n );\r\n break;\r\n }\r\n case \"CenterIsland\": {\r\n points.push(\r\n this.getKitchenPointPosition(\"center_island_counterop\"),\r\n this.getKitchenPointPosition(\"center_island_cabinet\"),\r\n this.getKitchenPointPosition(\"center_island_chairs\")\r\n );\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n }\r\n });\r\n this.setState({\r\n points,\r\n currentLayoutType: nextProps.layoutType\r\n });\r\n };\r\n\r\n handleResize = () => {\r\n const canvas = $(document.getElementById(this.props.canvasId));\r\n this.setState({\r\n dimensions: {\r\n width: canvas.width(),\r\n height: canvas.height()\r\n }\r\n });\r\n };\r\n\r\n getBathroomPointPositionByPartName = (partName, nextProps = this.props) => {\r\n switch (partName) {\r\n case \"Vanity\":\r\n return {\r\n left: 356,\r\n top: 720,\r\n };\r\n case \"Mirror\":\r\n return {\r\n left: 318,\r\n top: 422,\r\n };\r\n case \"Toilet\":\r\n return {\r\n left: 625,\r\n top: 740,\r\n };\r\n case \"Floor\":\r\n return {\r\n left: nextProps.layoutType === 0 ? 762 : 990,\r\n top: 990,\r\n };\r\n case \"Window\":\r\n return {\r\n left: 1290,\r\n top: 475,\r\n };\r\n case \"Bathtub\":\r\n return {\r\n left: 1450,\r\n top: 915,\r\n };\r\n case \"Shower\":\r\n return {\r\n left: 930,\r\n top: 600,\r\n };\r\n case \"Wall B\":\r\n return {\r\n left: 600,\r\n top: 440,\r\n };\r\n case \"Wall C\":\r\n return {\r\n left: 1480,\r\n top: 580,\r\n };\r\n default :\r\n return {\r\n left: 0,\r\n top: 0,\r\n }\r\n }\r\n };\r\n\r\n getKitchenPointPosition = (partId, nextProps = this.props) => {\r\n nextProps === 12 ? null : false;\r\n switch (partId) {\r\n case \"left_wall\":\r\n return {\r\n left: 450,\r\n top: 550,\r\n };\r\n case \"right_wall\":\r\n return {\r\n left: 1050,\r\n top: 550,\r\n };\r\n case \"ceiling\":\r\n return {\r\n left: 740,\r\n top: 120,\r\n };\r\n case \"hood\":\r\n return {\r\n left: 1020,\r\n top: 400,\r\n };\r\n case \"range\":\r\n return {\r\n left: 1000,\r\n top: 680,\r\n };\r\n case \"fridge\":\r\n return {\r\n left: 175,\r\n top: 600,\r\n };\r\n case \"dishwasher\":\r\n return {\r\n left: 720,\r\n top: 655,\r\n };\r\n case \"top_cabinet\":\r\n return {\r\n left: 740,\r\n top: 410,\r\n };\r\n case \"top_cabinet2\":\r\n return {\r\n left: 1380,\r\n top: 370,\r\n };\r\n case \"bottom_cabinet\":\r\n return {\r\n left: 1260,\r\n top: 780,\r\n };\r\n case \"center_island_counterop\":\r\n return {\r\n left: 600,\r\n top: 750,\r\n };\r\n case \"center_island_cabinet\":\r\n return {\r\n left: 1040,\r\n top: 890,\r\n };\r\n case \"center_island_chairs\":\r\n return {\r\n left: 390,\r\n top: 870,\r\n };\r\n case \"sink1\":\r\n return {\r\n left: 1430,\r\n top: 670,\r\n };\r\n case \"countertop3\":\r\n return {\r\n left: 1450,\r\n top: 930,\r\n };\r\n default :\r\n return {\r\n left: 0,\r\n top: 0,\r\n }\r\n }\r\n };\r\n\r\n render() {\r\n const dashboardFramed = Config.isVisualizerManagement();\r\n return this.state.dimensions.width && this.state.dimensions.height && !dashboardFramed ? (\r\n
    \r\n {this.state.points.map((point, index) => {\r\n const pointResponsive = {\r\n left: point.left * (this.state.dimensions.width / this.props.canvasDimensions.width),\r\n top: point.top * (this.state.dimensions.height / this.props.canvasDimensions.height),\r\n };\r\n return \r\n })}\r\n
    \r\n ) : null\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {canvasDimensions} = store.bathroomVisualizerState;\r\n return {\r\n canvasDimensions,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(DemoPoints)\r\n","import React from \"react\";\r\n\r\nimport Misc from './../../misc/misc';\r\nimport {getMousePos, requestAnimFrame, isTouchDevice} from \"../../misc/utils\";\r\nimport {isIE} from \"../../misc/helpers\";\r\nimport {loaderDisable} from \"../ui/loaderView\";\r\nimport enhanceCanvas from \"./canvasEnhancements\";\r\n// import {UseFullSizeImages} from \"../../config\";\r\nimport {getBackgroundLayers} from \"../../misc/getCanvasImageFromLayout\";\r\nimport ImageCanvasCommon from \"./imageCanvasCommon\";\r\n\r\n// import { getHoverZonesForPreset, getHoveringZone, hoverImages } from \"./imageCanvasTouchZones\";\r\n\r\nexport default class ImageCanvasCommonNew extends ImageCanvasCommon {\r\n\r\n finishDraw = (images, layers, alreadyRenderedImages, errorImages, callback) => {\r\n clearTimeout(this.id);\r\n this.id = 0;\r\n let copyImages = null;\r\n\r\n const {width, height} = this.props;\r\n\r\n // const fullImagesFactor = UseFullSizeImages ? 100 : 54;\r\n\r\n if (this.props.useMouseHovering && (this.shouldUpdateGreenZone || !this.state.layersHoverings.length)) {\r\n copyImages = [...images];\r\n }\r\n\r\n const backgroundLayers = getBackgroundLayers(layers, null, true);\r\n\r\n // console.log(\"layers\", layers);\r\n\r\n if (backgroundLayers.length) { // draw backgrounds first\r\n this.backCtxBg.clearRect(0, 0, width, height); // clear previous\r\n\r\n images.forEach((imageObject) => {\r\n if (imageObject.src.includes(\"data:image\") || errorImages.includes(imageObject.src)) {\r\n return\r\n }\r\n const layer = backgroundLayers.find(layer => layer.image === imageObject.src);\r\n if (layer) {\r\n this.drawImage(layer, imageObject, this.backCtxBg, width, height)\r\n }\r\n imageObject = null;\r\n });\r\n enhanceCanvas(this.canvasBg);\r\n this.backCtx.drawImage(this.canvasBg, 0, 0, width, height, 0, 0, width, height);\r\n const greenImage = images.find((imageObject) => imageObject.src.includes(\"data:image\"));\r\n if (greenImage) {\r\n const layer = backgroundLayers.find(layer => layer.image === greenImage.src);\r\n if (layer) {\r\n this.drawImage(layer, greenImage, this.backCtx, width, height)\r\n }\r\n }\r\n }\r\n\r\n images.forEach((loadedImage) => {\r\n if (errorImages.includes(loadedImage.src)) {\r\n return\r\n }\r\n const layer = layers.find(layers => layers.image === loadedImage.src);\r\n if (layer && (!backgroundLayers.length || (layer.zIndex < backgroundLayers[backgroundLayers.length - 1].zIndex))) {\r\n this.drawImage(layer, loadedImage, this.backCtx, width, height)\r\n }\r\n loadedImage = null;\r\n });\r\n\r\n // this.ctx.drawImage(this.backCtx.canvas, 0, 0);\r\n requestAnimFrame(this.ctx.drawImage(this.backCtx.canvas, 0, 0));\r\n\r\n if (this.props.useMouseHovering) {\r\n const isMobile = Misc.isMobile() || isTouchDevice();\r\n if (!isMobile && !isIE() && !this.state.mouseMoveSet && this.canvas) {\r\n this.setOnMouseMove();\r\n }\r\n this.setState({\r\n alreadyRenderedImages\r\n });\r\n if (this.shouldUpdateGreenZone || !this.state.layersHoverings.length) {\r\n this.setLayersHoverings(layers, copyImages, errorImages)\r\n }\r\n }\r\n\r\n if (!window.requestInProcess) {\r\n if (this.props.setShowCanvasLoader) {\r\n this.props.setShowCanvasLoader(false)\r\n } else {\r\n this.props.disableLoader ? this.props.disableLoader() : loaderDisable();\r\n }\r\n }\r\n\r\n // window.t1 = performance.now();\r\n // console.log(\"Call to doSomething took \" + (window.t1 - window.t0) + \" milliseconds.\");\r\n\r\n if (callback) {\r\n callback()\r\n }\r\n };\r\n\r\n getGliaImage = () => {\r\n return (\r\n
    \r\n this.canvasImg = el} alt=\"\" id={this.props.canvasId + \"Img\"}\r\n className=\"canvas-co-image blurred\" />\r\n
    \r\n )\r\n };\r\n\r\n nonTransparentPixelHovered = (mousePosArray, layerHovering) => {\r\n const x1 = layerHovering.layer.cropCoords ? layerHovering.layer.cropCoords[0] : layerHovering.layerDimensions.polygonArray[0][0];\r\n const y1 = layerHovering.layer.cropCoords ? layerHovering.layer.cropCoords[1] : layerHovering.layerDimensions.polygonArray[0][1];\r\n return mousePosArray.some(mousePos => {\r\n let pixelHovered = null;\r\n try {\r\n pixelHovered = layerHovering.context2D.getImageData(\r\n (((mousePos.x / this.canvas_scale) / this.state.dimensions.width * this.props.width)) - x1,\r\n (((mousePos.y / this.canvas_scale) / this.state.dimensions.height * this.props.height)) - y1,\r\n 1,\r\n 1,\r\n {willReadFrequently: true}).data[3]\r\n } catch (e) {\r\n console.log(\"can't find hovered pixel\",\r\n layerHovering.context2D,\r\n (((mousePos.x / this.canvas_scale) / this.state.dimensions.width * this.props.width)) - x1,\r\n (((mousePos.y / this.canvas_scale) / this.state.dimensions.height * this.props.height)) - y1\r\n );\r\n }\r\n return pixelHovered > 120\r\n })\r\n }\r\n\r\n setHoveredLayer = (evt) => {\r\n\r\n if (window.touchMove) {\r\n return false\r\n }\r\n\r\n if (this.pinchZoom) {\r\n this.canvas_scale = this.pinchZoom.getScale();\r\n if (this.canvas_scale !== 1) {\r\n return false\r\n }\r\n }\r\n\r\n const {layout} = this.props;\r\n const canvas = this.canvas;\r\n let mousePos = getMousePos(evt, canvas);\r\n let hovered = false;\r\n\r\n // console.log('mousePos', mousePos);\r\n\r\n if (this.pinchZoom) {\r\n this.canvas_scale = this.pinchZoom.getScale();\r\n }\r\n\r\n if (mousePos && (window.innerWidth < 480)) { // rotated version\r\n let temp = mousePos.x;\r\n // noinspection JSSuspiciousNameCombination\r\n mousePos.x = mousePos.y;\r\n mousePos.y = this.canvas.offsetHeight - temp;\r\n // console.log('mousePos2', mousePos);\r\n }\r\n\r\n if (this.state.layersHoverings.length) {\r\n let i = 0;\r\n for (i; i < this.state.layersHoverings.length; i++) {\r\n const layerHovering = this.state.layersHoverings[i];\r\n if ( mousePos\r\n && layerHovering\r\n && layerHovering.layerDimensions\r\n && !this.layerIsExcludedFromHover(layerHovering.layer, layout)\r\n // && pnpoly(layerHovering.layerDimensions.polygonArray, mousePos)\r\n ) {\r\n let mousePosArray = [mousePos];\r\n if (layout.checkMorePointsPartIds && layout.checkMorePointsPartIds.includes(layerHovering.layer.partId)) {\r\n for (let k = 1; k <= 20; k++) {\r\n mousePosArray = [\r\n ...mousePosArray,\r\n {x: mousePos.x - k, y: mousePos.y - k},\r\n {x: mousePos.x + k, y: mousePos.y - k},\r\n {x: mousePos.x - k, y: mousePos.y + k},\r\n {x: mousePos.x + k, y: mousePos.y + k},\r\n {x: mousePos.x - k, y: mousePos.y},\r\n {x: mousePos.x + k, y: mousePos.y},\r\n {x: mousePos.x, y: mousePos.y - k},\r\n {x: mousePos.x, y: mousePos.y + k},\r\n ]\r\n }\r\n }\r\n // console.log(\"checkMorePointsPartIds\", mousePosArray);\r\n if (this.nonTransparentPixelHovered(mousePosArray, layerHovering)) {\r\n hovered = true;\r\n document.hoveredLayer = layerHovering.layer;\r\n document.hoveredMousePos = mousePos;\r\n if (!isIE() && (this.activeGreenZoneIndex !== layerHovering.layer.zIndex)) {\r\n // console.log('layerHovering active = ', layerHovering);\r\n this.activeGreenZoneIndex = layerHovering.layer.zIndex;\r\n this.renderGreenLayer(layerHovering);\r\n }\r\n\r\n break; // break for...of loop\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (!hovered) {\r\n document.hoveredLayer = null;\r\n this.draw(this.state.layers); // reload all layers without hovered\r\n }\r\n\r\n };\r\n\r\n renderGreenLayerByZindex = (zIndex, partId) => {\r\n if (!isIE()) {\r\n const neededLayerHovering = this.state.layersHoverings.find((layerHovering) => {\r\n if (partId) {\r\n return layerHovering.layer.zIndex === zIndex && layerHovering.layer.partId === partId\r\n }\r\n return layerHovering.layer.zIndex === zIndex\r\n });\r\n neededLayerHovering ? this.renderGreenLayer(neededLayerHovering, true) : this.draw(this.state.layers)\r\n }\r\n };\r\n\r\n drawImage = (layer, imageObject, canvasContext, width, height) => {\r\n try {\r\n if (layer.cropCoords) {\r\n let layerWidth = layer.cropCoords[2] - layer.cropCoords[0];\r\n let layerHeight = layer.cropCoords[3] - layer.cropCoords[1];\r\n canvasContext.drawImage(imageObject, 0, 0, layerWidth, layerHeight, layer.cropCoords[0], layer.cropCoords[1], layerWidth, layerHeight);\r\n } else if (layer.layerDimensions) {\r\n const dim = layer.layerDimensions;\r\n // console.log('yep', dim.width, dim.height, dim.polygonArray[0][0], dim.polygonArray[0][1], dim.width, dim.height);\r\n const firstX = layer.isGreenHovering ? 0 : dim.polygonArray[0][0]; // green is already cropped\r\n const firstY = layer.isGreenHovering ? 0 : dim.polygonArray[0][1]; // green is already cropped\r\n canvasContext.drawImage(imageObject, firstX, firstY, dim.width, dim.height, dim.polygonArray[0][0], dim.polygonArray[0][1], dim.width, dim.height);\r\n // } else if (loadedImage.coords) {\r\n // loadedImage.width = loadedImage.width*fullImagesFactor/100;\r\n // loadedImage.height = loadedImage.height*fullImagesFactor/100;\r\n // const max_x = loadedImage.coords.max_x*fullImagesFactor/100;\r\n // const min_x = this.props.width*loadedImage.coords.min_x;\r\n // const min_y = this.props.height*loadedImage.coords.min_y;\r\n // const max_y = loadedImage.coords.max_y*fullImagesFactor/100;\r\n // const width = max_x - min_x;\r\n // const height = max_y - min_y;\r\n // console.log('width', width);\r\n // console.log('height', height);\r\n // console.log('min_x', min_x);\r\n // console.log('min_y', min_y);\r\n // console.log('max_x', max_x);\r\n // console.log('max_y', max_y);\r\n // this.backCtx.drawImage(loadedImage, 0, 0, loadedImage.width, loadedImage.height, min_x, min_y, loadedImage.width, loadedImage.height);\r\n } else {\r\n // imageObject.width = width;\r\n // imageObject.height = height;\r\n canvasContext.drawImage(imageObject, 0, 0, width, height);\r\n }\r\n } catch (e) {\r\n console.log(\"canvas context cant draw image\", imageObject);\r\n }\r\n }\r\n\r\n onMouseDown = (event) => {\r\n if (this.pinchZoom && this.pinchZoom.onMouseDown) {\r\n this.pinchZoom.onMouseDown(event)\r\n }\r\n }\r\n\r\n onMouseMove = (event) => {\r\n if (this.pinchZoom && this.pinchZoom.onMouseMove) {\r\n this.pinchZoom.onMouseMove(event)\r\n }\r\n }\r\n\r\n onMouseUp = (event) => {\r\n if (this.pinchZoom && this.pinchZoom.onMouseUp) {\r\n this.pinchZoom.onMouseUp(event, this.props.lookCanvasClick) // we should be here always // callback is passed to execute after drag n drop\r\n } else if (this.props.lookCanvasClick) {\r\n this.props.lookCanvasClick()\r\n }\r\n }\r\n\r\n render() {\r\n const style = {};\r\n if (this.props.transform) {\r\n style.transform = this.props.transform\r\n }\r\n return (\r\n //
    \r\n
    \r\n {/*
    */}\r\n {/* {this.pinchZoom ? this.pinchZoom.el.style.transform + \" // \" + this.pinchZoom.container.style.transform : null}*/}\r\n {/*
    */}\r\n {this.props.useMouseHovering ? this.getGliaImage() : null}\r\n this.canvas = el}\r\n className={\"canvas-el\" + (this.props.useMouseHovering ? \" canvas-el--pointer\" : \"\")}\r\n onMouseDown={this.onMouseDown}\r\n onMouseMove={this.onMouseMove}\r\n onMouseUp={this.onMouseUp}\r\n onDoubleClick={null}\r\n id={this.props.canvasId}\r\n width={this.props.width}\r\n height={this.props.height}\r\n // onTouchStart={this.moveStart}\r\n // onTouchMove={this.move}\r\n // onTouchEnd={this.moveEnd}\r\n data-mobile={Misc.isMobile() || isTouchDevice()}\r\n style={style} />\r\n
    \r\n );\r\n }\r\n\r\n}\r\n","import React from \"react\";\r\n\r\nimport Button from \"@mui/material/Button\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nconst GroheCartStickyFooter = (props) => {\r\n\r\n const {stickyFooterButtons} = props;\r\n\r\n return (\r\n
    \r\n {stickyFooterButtons.map(button => (\r\n \r\n ))}\r\n
    \r\n )\r\n};\r\n\r\nexport default GroheCartStickyFooter\r\n","'use strict';\r\n\r\nObject.defineProperty(exports, \"__esModule\", {\r\n value: true\r\n});\r\nexports.showLoading = exports.resetLoading = exports.loadingBarReducer = exports.loadingBarMiddleware = exports.LoadingBar = exports.ImmutableLoadingBar = exports.hideLoading = undefined;\r\n\r\nvar _loading_bar = require('./loading_bar');\r\n\r\nvar _loading_bar2 = _interopRequireDefault(_loading_bar);\r\n\r\nvar _loading_bar_middleware = require('./loading_bar_middleware');\r\n\r\nvar _loading_bar_middleware2 = _interopRequireDefault(_loading_bar_middleware);\r\n\r\nvar _loading_bar_ducks = require('./loading_bar_ducks');\r\n\r\nvar _immutable = require('./immutable');\r\n\r\nvar _immutable2 = _interopRequireDefault(_immutable);\r\n\r\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\r\n\r\nexports.hideLoading = _loading_bar_ducks.hideLoading;\r\nexports.ImmutableLoadingBar = _immutable2.default;\r\nexports.LoadingBar = _loading_bar.LoadingBar;\r\nexports.loadingBarMiddleware = _loading_bar_middleware2.default;\r\nexports.loadingBarReducer = _loading_bar_ducks.loadingBarReducer;\r\nexports.resetLoading = _loading_bar_ducks.resetLoading;\r\nexports.showLoading = _loading_bar_ducks.showLoading;\r\nexports.default = _loading_bar2.default;","import {getFeatureCost} from \"./helpers\";\r\nimport {BATHROOM_VISUALIZER_TYPES} from \"../config\";\r\n\r\n/**\r\n * returns feature compressed object that can be passed on the backend (without redundant info)\r\n * @param fromCartItem {cartItemInterface}\r\n * @param fromFeature {featureInterface}\r\n * @param quoteIndex {number}\r\n * @returns {object}\r\n */\r\nexport const getCompressedFeature = (fromCartItem, fromFeature, quoteIndex = 0) => {\r\n if (!fromFeature || !fromFeature.dbFeature) {\r\n return null\r\n }\r\n const currentQuote = fromCartItem && Number.isInteger(fromCartItem.currentQuote) ? fromCartItem.currentQuote : quoteIndex;\r\n const compressedDbFeature = {\r\n partName: fromFeature.partName,\r\n sharedFeatureName: fromFeature.dbFeature.sharedFeatureName,\r\n dbFeatureId: fromFeature.dbFeature.id,\r\n sku: fromFeature.dbFeature.sku,\r\n partId: fromFeature.partId,\r\n featureDefinitionID: fromFeature.dbFeature.featureDefinitionID,\r\n noteText: fromFeature.notesList[currentQuote], // we don't restore noteText from here, we take it from getCompressedCartItem\r\n }\r\n if (fromFeature.dbFeature.priceWasChanged) {\r\n compressedDbFeature.customCost = fromFeature.dbFeature.cost; // to restore job feature prices\r\n compressedDbFeature.customPrice = fromFeature.dbFeature.price; // to restore job feature prices\r\n }\r\n if (fromFeature.dbFeature.markUpString) {\r\n compressedDbFeature.markUpString = fromFeature.dbFeature.markUpString; // to be able to compare! not needed for now\r\n }\r\n return compressedDbFeature\r\n}\r\n\r\n/**\r\n * returns cart item compressed object that can be passed on the backend // IS NOT USED IN PARSE RESPONSE ! ONLY NOTE TEXT IS USED\r\n * @param fromCartItem {cartItemInterface}\r\n // * @param fromFeature {featureInterface}\r\n // * @param quoteIndex {number}\r\n * @returns {object}\r\n */\r\nexport const getCompressedCartItem = (fromCartItem) => {\r\n if (!fromCartItem) {\r\n return null\r\n }\r\n const compressedCartItem = {\r\n partId: fromCartItem.partId,\r\n featureId: fromCartItem.cartFeature.dbFeature.featureDefinition_id,\r\n sku: fromCartItem.cartFeature.dbFeature.sku,\r\n quantity: fromCartItem.quantity,\r\n fabricatorFeatureId: fromCartItem.cartFeature.dbFeature.id,\r\n calculatedCost: getFeatureCost(fromCartItem.cartFeature, fromCartItem.quantity, fromCartItem.fromQtCategory),\r\n noteText: fromCartItem.noteText,\r\n addedBy: fromCartItem.addedBy,\r\n isRemoved: fromCartItem.isRemoved,\r\n }\r\n if (fromCartItem.cartFeature.dbFeature.priceWasChanged) {\r\n compressedCartItem.customCost = fromCartItem.cartFeature.dbFeature.cost; // to restore job feature prices\r\n compressedCartItem.customPrice = fromCartItem.cartFeature.dbFeature.price; // to restore job feature prices\r\n }\r\n if (fromCartItem.cartFeature.dbFeature.markUpString) {\r\n compressedCartItem.markUpString = fromCartItem.cartFeature.dbFeature.markUpString; // to be able to compare! not needed for now\r\n }\r\n return compressedCartItem\r\n}\r\n\r\n/**\r\n * returns cart items compressed objects\r\n * @param cartItems {[cartItemInterface]}\r\n * @returns {array}\r\n */\r\nexport const getCompressedCartItems = (cartItems) => {\r\n return cartItems.map(ci => {\r\n if (!ci.cartFeature || !ci.cartFeature.dbFeature) {\r\n return null\r\n }\r\n const cartItem = Object.assign({}, ci, {\r\n cartFeature: getCompressedFeature(ci, ci.cartFeature),\r\n });\r\n if (ci.relatedProductParent) {\r\n cartItem.relatedProductParent = getCompressedFeature(ci, ci.relatedProductParent);\r\n }\r\n if (ci.bundleParentId) {\r\n cartItem.bundleParentId = ci.bundleParentId;\r\n }\r\n return cartItem\r\n }).filter(cartItem => !!cartItem)\r\n}\r\n\r\n/**\r\n * sets feature groups properties TO bvState\r\n * @param bvState {object}\r\n * @param layout {object}\r\n * @returns {object}\r\n */\r\nexport const getFeatureGroupsProperties = (bvState, layout) => {\r\n layout.getFeatures(true).forEach((parentGroup) => {\r\n let relatedItems = parentGroup.getRelatedItems();\r\n relatedItems.forEach((subPart) => {\r\n if (subPart.customNames) {\r\n bvState[subPart.partId + \"_customNames\"] = subPart.customNames;\r\n }\r\n })\r\n })\r\n return bvState\r\n}\r\n\r\n/**\r\n * sets feature groups properties FROM bvState\r\n * @param bvState {object}\r\n * @param layout {object}\r\n * @returns {object}\r\n */\r\nexport const setFeatureGroupsProperties = (bvState, layout) => {\r\n layout.getFeatures(true).forEach((parentGroup) => {\r\n let relatedItems = parentGroup.getRelatedItems();\r\n relatedItems.forEach((subPart) => {\r\n if (bvState[subPart.partId + \"_customNames\"]) {\r\n subPart.customNames = bvState[subPart.partId + \"_customNames\"];\r\n }\r\n })\r\n })\r\n return bvState\r\n}\r\n\r\n\r\n/**\r\n * adds cookie to request data\r\n * @param data {object}\r\n * @returns {object}\r\n */\r\nexport const addGACookie = (data) => {\r\n try {\r\n if (!document.cookie) {\r\n return data\r\n }\r\n const getCookie = name => {\r\n const splitted = document.cookie.match(new RegExp(`(^| )${name}=([^;]+)`));\r\n return splitted ? splitted[2] : \"\"\r\n };\r\n data.cookiesAll = document.cookie;\r\n data.cookie_ga = getCookie(\"_ga\");\r\n } catch (error) {\r\n console.log(\"can't access cookie\", error);\r\n }\r\n return data\r\n}\r\n\r\nexport const getCartItemPartIdFix = (partId) => {\r\n if ((partId !== \"shower_wall\") && (partId !== \"shower_interior_wall\")) {\r\n return partId\r\n }\r\n const isBathroom = BATHROOM_VISUALIZER_TYPES.includes(document.kvConfig.visualizerType);\r\n if (isBathroom) {\r\n if (document.kvConfig.visualizerType === \"bvLook\") {\r\n return \"shower_wall\"\r\n }\r\n return \"shower_interior_wall\"\r\n }\r\n return partId // just in case\r\n}\r\n\r\nexport const fixFeaturesResponse = (response) => {\r\n if (!response) {\r\n return []\r\n }\r\n if (Array.isArray(response)) {\r\n return response;\r\n }\r\n if (Array.isArray(response.features)) {\r\n if (Array.isArray(response.relatedFeatures) && response.relatedFeatures.length) {\r\n // for (let i = 0; i < response.relatedFeatures.length; i++) {\r\n // response.relatedFeatures[i].isRelatedDbFeature = true;\r\n // }\r\n // console.log(\"response.relatedFeatures\", response.relatedFeatures);\r\n return [...response.relatedFeatures, ...response.features] // we should always be here // related goes first\r\n }\r\n return response.features; // keep it as an array\r\n }\r\n return [];\r\n}\r\n","//INITIAL FLOW\r\nimport * as types from \"./actionTypes\";\r\n\r\nexport const setFabricatorSubscriptions = (fabricatorSubscriptions) => ({\r\n type: types.SET_FABRICATOR_SUBSCRIPTIONS,\r\n payload: {fabricatorSubscriptions}\r\n});\r\n\r\nexport const setInitialFlowAdditionalRooms = (initialFlowAdditionalRooms) => ({\r\n type: types.SET_INITIAL_FLOW_ADDITIONAL_ROOMS,\r\n payload: {initialFlowAdditionalRooms}\r\n});\r\n\r\nexport const setInitialFlowType = (initialFlowType) => ({\r\n type: types.SET_INITIAL_FLOW_BUTTON,\r\n payload: {initialFlowType}\r\n});\r\n\r\nexport const setInitialFlowRoom = (initialFlowRoom) => ({\r\n type: types.SET_INITIAL_FLOW_ROOM,\r\n payload: {initialFlowRoom}\r\n});\r\n\r\nexport const setInitialFlowVisualizerNotAvailable = (visualizerNotAvailable) => ({\r\n type: types.SET_INITIAL_FLOW_VISUALIZER_NOT_AVAILABLE,\r\n payload: {visualizerNotAvailable}\r\n});\r\n\r\nexport const setInitialFlowFinished = (initialFlowFinished) => ({\r\n type: types.SET_INITIAL_FLOW_FINISHED,\r\n payload: {initialFlowFinished}\r\n});\r\n\r\nexport const setInitialFlowRoomLayout = (initialFlowRoomLayout) => ({\r\n type: types.SET_INITIAL_FLOW_ROOM_LAYOUT,\r\n payload: {initialFlowRoomLayout}\r\n});\r\nexport const setInitialFlowStep = (initialFlowStep) => ({\r\n type: types.SET_INITIAL_FLOW_STEP,\r\n payload: {initialFlowStep}\r\n});\r\n","import $ from 'jquery';\r\n\r\nimport JsonApi from \"./jsonApi\";\r\nimport store from \"../store\";\r\nimport {loaderEnable, loaderDisable} from \"../bvcomponents/ui/loaderView\";\r\nimport * as types from \"../actions/actionTypes\";\r\nimport Misc from \"../misc/misc\";\r\nimport Config, {IS_LIXIL_UI, IS_OFFLINE_MODE, POST_MESSAGES} from \"../config\";\r\nimport Analytics from '../analytics';\r\nimport {saveQuote} from \"./server-api\";\r\nimport {\r\n renderErrorPopup,\r\n renderAccountNotActivatedErrorPopup,\r\n renderConfirmPopup,\r\n renderMessagePopup\r\n} from \"./api-popups\";\r\nimport {ConfirmPopupTypes, QuoteRequestType, UserAction} from \"../bvcomponents/visComponents/constants\";\r\nimport {setJobId, showCheckoutLayout, toggleUserPopup} from \"../actions/actionFunctions\";\r\nimport {showQuoteSavedNotification} from \"../bvcomponents/ui/successNotification\";\r\nimport ActionTypes from \"../misc/actionTypes\";\r\nimport {setAlreadyRegisteredUserInfo, setEmployeesList} from \"../actions/userFunctions\";\r\nimport {restorePaymentInfo} from \"../actions/paymentFunctions\";\r\nimport {addGACookie} from \"../misc/backendFunctions\";\r\n\r\n\r\nexport const scheduleCustomer = (data) => {\r\n loaderEnable(\"loader.scheduleCustomerText\", \"loader.scheduleCustomerTitle\");\r\n const state = store.getState();\r\n const {serverState} = state;\r\n let {time} = data;\r\n let am = true;\r\n if (time > 1200) {\r\n am = false;\r\n time -= 1200;\r\n }\r\n const scheduleData = {\r\n scheduleEntryData: {\r\n date: data.date,\r\n time: `${time / 100}:00`,\r\n am: am,\r\n duration: 60,\r\n alert: 30,\r\n appointmentType: 'Quote'\r\n },\r\n jobId: serverState.jobId,\r\n jobIdType: 'JobQuote'\r\n };\r\n\r\n JsonApi.scheduleCustomer(scheduleData)\r\n .then(response => {\r\n console.log('Schedule answer', response);\r\n loaderDisable();\r\n store.dispatch({\r\n type: types.SHOW_SCHEDULER,\r\n payload: {show: false}\r\n })\r\n });\r\n};\r\n\r\nexport const setUserLoginResponse = (responseData,\r\n fromConfirmationDialog = false,\r\n quoteRequestType,\r\n yesNoConsultationRequest,\r\n showSchedule,\r\n checkout,\r\n userPopupType) => {\r\n console.log(responseData);\r\n // const saveQuoteAfterLogin = state.userState.saveQuoteAfterLogin;\r\n // if (!saveQuoteAfterLogin) {\r\n // loaderDisable();\r\n // }\r\n const state = store.getState();\r\n\r\n if (responseData.error) {\r\n Analytics.sendClickEvent(\"user-login-failure\");\r\n if (state.fabricatorState.isNhance) {\r\n Analytics.sendParentPostMessage(POST_MESSAGES.userLoginFalse);\r\n }\r\n const {error} = responseData;\r\n loaderDisable();\r\n if (responseData.error.indexOf('has not been activated yet') !== -1) {\r\n const userInfo = store.getState().userState.userInfo;\r\n renderAccountNotActivatedErrorPopup(error, userInfo.email);\r\n } else {\r\n renderErrorPopup(responseData.error);\r\n }\r\n if (fromConfirmationDialog) {\r\n store.dispatch(toggleUserPopup({\r\n userPopupOpened: true,\r\n userPopupType\r\n }));\r\n }\r\n return false;\r\n }\r\n\r\n const fabricatorSettings = state.fabricatorState.settings;\r\n\r\n // const docuSignObj = fabricatorSettings.docuSignAuth ? JSON.parse(fabricatorSettings.docuSignAuth) : null;\r\n // Config.setUserInfo(responseData);\r\n Analytics.sendClickEvent(\"user-login-success\");\r\n Analytics.setUserId(responseData.encodedUserId);\r\n Analytics.setExistingMixPanelPerson(responseData.email);\r\n if (state.fabricatorState.isNhance) {\r\n Analytics.sendParentPostMessage(POST_MESSAGES.userLoginTrue);\r\n }\r\n const updatedUserInfo = Misc.parseUserResponse(responseData);\r\n // const isPhoneNumberValidated = responseData.isPhoneNumberValidated || !responseData.pendingPhoneVerification;\r\n const isPhoneNumberValidated = !fabricatorSettings.twoFA || responseData.isPhoneNumberValidated || !responseData.pendingPhoneVerification;\r\n\r\n store.dispatch({\r\n type: types.TOGGLE_USER_POPUP,\r\n payload: {\r\n userPopupOpened: false,\r\n userIsLoggedIn: true,\r\n isPhoneNumberValidated,\r\n userInfo: updatedUserInfo,\r\n // email: responseData.email,\r\n encodedUserId: responseData.encodedUserId,\r\n // phoneNumber: responseData.phoneNumber,\r\n // values: responseData.values\r\n }\r\n });\r\n\r\n if (responseData.billingAddress || responseData.shippingAddress) { // update user state\r\n store.dispatch(restorePaymentInfo(Misc.parseShippingAndBillingResponse(responseData)));\r\n }\r\n\r\n if (IS_LIXIL_UI) { // we don't go below, as we already have save in the lixil logic\r\n return {...responseData, isPhoneNumberValidated: isPhoneNumberValidated || !fabricatorSettings.twoFA}\r\n }\r\n\r\n if (fabricatorSettings.twoFA && responseData.pendingPhoneVerification) {\r\n store.dispatch({\r\n type: types.TOGGLE_USER_POPUP,\r\n payload: {userPopupOpened: true}\r\n });\r\n } else {\r\n saveQuote({\r\n submit: true,\r\n quoteRequestType,\r\n yesNoConsultationRequest,\r\n fromCheckOutPage: window.location.href.includes('shoppingcart'),\r\n showContractSignOnError: true,\r\n showReceipt: false\r\n })\r\n .then((response) => {\r\n $(document).trigger(ActionTypes.USER_IS_LOGGED_IN); // click on the active item it the navigation\r\n if (response) {\r\n let responseDataBase = response;\r\n if (responseData) {\r\n responseDataBase = responseData;\r\n }\r\n const responseData = typeof responseDataBase === 'object' ? responseDataBase : JSON.parse(responseDataBase);\r\n console.log('saveQuote response:', responseData);\r\n store.dispatch(setJobId(responseData.jobId));\r\n }\r\n if (showSchedule) {\r\n loaderDisable();\r\n if (fabricatorSettings.enableCalendarForScheduling) {\r\n store.dispatch({\r\n type: types.SHOW_SCHEDULER,\r\n payload: {show: true}\r\n })\r\n } else {\r\n renderMessagePopup('userPopup.messageBox.appointmentRequested');\r\n }\r\n } else {\r\n loaderDisable();\r\n showQuoteSavedNotification(\r\n quoteRequestType === QuoteRequestType.RequestQuote\r\n ? \"successNotification.titleQuoteRequested\"\r\n : \"successNotification.titleQuoteSaved\"\r\n );\r\n // console.log('DS - login', fabricatorSettings.showPricing, docuSignObj);\r\n // if (fabricatorSettings.showPricing && docuSignObj && docuSignObj.isEnabled)\r\n // store.dispatch(showDocuSign(true));\r\n if (checkout && fabricatorSettings.checkout) {\r\n showCheckoutLayout(fabricatorSettings);\r\n }\r\n }\r\n })\r\n .catch((error) => {\r\n console.error('saveQuote error:', error);\r\n loaderDisable();\r\n })\r\n }\r\n\r\n if (showSchedule) {\r\n if (fabricatorSettings.enableCalendarForScheduling) {\r\n store.dispatch({\r\n type: types.SHOW_SCHEDULER,\r\n payload: {show: true}\r\n })\r\n } else {\r\n renderMessagePopup('userPopup.messageBox.appointmentRequested');\r\n }\r\n }\r\n}\r\n\r\nexport const userLogin = ({\r\n showConfirmationPopup = false,\r\n showSchedule = false,\r\n quoteRequestType = QuoteRequestType.RegularDesign,\r\n yesNoConsultationRequest = false,\r\n userPopupType,\r\n fromConfirmationDialog = false,\r\n checkout = false\r\n } = {}) => {\r\n if (showConfirmationPopup) {\r\n store.dispatch({\r\n type: types.TOGGLE_USER_POPUP,\r\n payload: {\r\n userPopupOpened: false\r\n }\r\n });\r\n renderConfirmPopup(ConfirmPopupTypes.ConsultationRequest, {\r\n userAction: UserAction.Login,\r\n userPopupType\r\n });\r\n return;\r\n }\r\n const state = store.getState();\r\n const userInfo = state.userState.userInfo;\r\n const showAdditionalFields = state.userState.showAdditionalFields;\r\n if (!IS_LIXIL_UI) {\r\n loaderEnable();\r\n }\r\n let data = {\r\n email: userInfo.email,\r\n password: userInfo.password,\r\n employeeId: showAdditionalFields ? +userInfo.employeeId : 0,\r\n fabricatorId: document.kvConfig.userId,\r\n }\r\n data = addGACookie(data);\r\n\r\n return JsonApi.userLogin(data)\r\n .then((response) => {\r\n return setUserLoginResponse(\r\n response.data,\r\n fromConfirmationDialog,\r\n quoteRequestType,\r\n yesNoConsultationRequest,\r\n showSchedule,\r\n checkout,\r\n userPopupType\r\n )\r\n })\r\n .catch((error) => {\r\n console.log('User login error:', error);\r\n loaderDisable();\r\n renderErrorPopup(\"Login \"+new Error(error.message || error));\r\n if (state.fabricatorState.isNhance) {\r\n Analytics.sendParentPostMessage(POST_MESSAGES.userLoginFalse);\r\n }\r\n });\r\n};\r\n\r\nconst callUserRegisterErrorPopup = (responseData,\r\n userPopupType,\r\n fromConfirmationDialog,\r\n assignQuote = false,\r\n withCheckoutLogic = false,\r\n noInternetCallBack = null,\r\n afterContractSignCallback = null,\r\n executeAfterRegisterIfUserExist = null) => {\r\n Analytics.sendClickEvent(\"user-register-failure\");\r\n\r\n if (responseData.isEmailTaken && responseData.errorUserMatch) {\r\n store.dispatch(setAlreadyRegisteredUserInfo({...responseData.errorUserMatch, assignQuote, withCheckoutLogic, userId: responseData.userId}));\r\n renderConfirmPopup(ConfirmPopupTypes.AssignQuoteOnExistingUser, {applyFunction: executeAfterRegisterIfUserExist}, true)\r\n return\r\n }\r\n\r\n renderErrorPopup(responseData.error, \"\", noInternetCallBack, withCheckoutLogic, null, afterContractSignCallback);\r\n\r\n if (fromConfirmationDialog) {\r\n store.dispatch(toggleUserPopup({\r\n userPopupOpened: true,\r\n userPopupType\r\n }));\r\n }\r\n\r\n}\r\n\r\nexport const userRegister = async ({\r\n showConfirmationPopup = false,\r\n showSchedule = false,\r\n quoteRequestType = QuoteRequestType.RegularDesign,\r\n yesNoConsultationRequest = false,\r\n userPopupType,\r\n fromConfirmationDialog = false,\r\n // checkout = false,\r\n assignQuote = false,\r\n withCheckoutLogic = false,\r\n noInternetCallBack = null,\r\n afterContractSignCallback = null,\r\n executeAfterRegisterIfUserExist = null,\r\n } = {}) => {\r\n //console.log('register', quoteRequestType);\r\n if (showConfirmationPopup) {\r\n store.dispatch({\r\n type: types.TOGGLE_USER_POPUP,\r\n payload: {\r\n userPopupOpened: false\r\n }\r\n });\r\n renderConfirmPopup(ConfirmPopupTypes.ConsultationRequest, {\r\n userAction: UserAction.Register,\r\n userPopupType,\r\n quoteRequestType\r\n });\r\n return;\r\n }\r\n\r\n const {userState, serverState, fabricatorState} = store.getState();\r\n const userInfo = userState.userInfo;\r\n // userInfo.phone = userInfo.phoneNumber;\r\n // if (!store.getState().userState.showAdditionalFields) {\r\n // userInfo.employeeId = \"\"\r\n // }\r\n if (!IS_LIXIL_UI) {\r\n loaderEnable();\r\n }\r\n let data = {\r\n email: userInfo.email,\r\n firstName: userInfo.firstName,\r\n phone: `+${userInfo.country.dialCode} ${userInfo.phoneNumber}`,\r\n agreedToTerms: userInfo.agreedToTerms,\r\n subscribeToNewsletter: userInfo.subscribeToNewsletter,\r\n isNew: true,\r\n postal: userInfo.postal,\r\n salesPersonFullName: userInfo.salesPersonFullName,\r\n salesPersonEmail: userInfo.salesPersonEmail,\r\n employeeId: +userInfo.employeeId,\r\n fabricatorId: Config.kvConfig.userId || 61986,\r\n quoteRequestType,\r\n yesNoConsultationRequest,\r\n lastName: userInfo.lastName,\r\n address1: userInfo.address1,\r\n address2: userInfo.address2,\r\n city: userInfo.city,\r\n state: userInfo.state,\r\n country: userInfo.country.iso2,\r\n preferredCommunicationMethod: userInfo.preferredCommunicationMethod,\r\n howDidYouHearAboutUs: userInfo.howDidYouHearAboutUs,\r\n phone2: userInfo.phone2,\r\n language: serverState.language,\r\n subId: document.subId && document.subId.toString ? document.subId.toString() : null,\r\n };\r\n\r\n data = addGACookie(data);\r\n\r\n if (assignQuote) {\r\n [\"lastName\", \"phone2\", \"address1\", \"address2\", \"city\", \"preferredCommunicationMethod\", \"howDidYouHearAboutUs\"]\r\n .forEach((property) => {\r\n data[property] = userInfo[property] // new fields added in new assign quote popup\r\n })\r\n }\r\n\r\n let registerResponse;\r\n\r\n try {\r\n registerResponse = await JsonApi.userRegister(data);\r\n } catch (error) {\r\n if (error && (error.message === \"Network Error\") && IS_OFFLINE_MODE) {\r\n registerResponse = {data: {error: \"Network Error\"}}\r\n }\r\n }\r\n\r\n if (!IS_LIXIL_UI) {\r\n loaderDisable();\r\n }\r\n\r\n if (registerResponse.data.error) {\r\n callUserRegisterErrorPopup(registerResponse.data, userPopupType, fromConfirmationDialog, assignQuote, withCheckoutLogic, noInternetCallBack, afterContractSignCallback, executeAfterRegisterIfUserExist);\r\n if (fabricatorState.isNhance) {\r\n Analytics.sendParentPostMessage(POST_MESSAGES.userRegisterFalse);\r\n }\r\n return;\r\n }\r\n\r\n Analytics.sendClickEvent(\"user-register-success\");\r\n // Config.setUserInfo(registerResponse.data);\r\n Analytics.setUserId(registerResponse.data.encodedUserId);\r\n Analytics.setMixPanelPerson(registerResponse.data.email, registerResponse.data.firstName, registerResponse.data.phoneNumber);\r\n if (fabricatorState.isNhance) {\r\n Analytics.sendParentPostMessage(POST_MESSAGES.userRegisterTrue);\r\n }\r\n\r\n if (assignQuote) {\r\n return registerResponse.data\r\n }\r\n const fabricatorSettings = fabricatorState.settings;\r\n\r\n if (IS_LIXIL_UI) {\r\n store.dispatch(toggleUserPopup({\r\n userIsLoggedIn: true,\r\n encodedUserId: registerResponse.data.encodedUserId,\r\n isPhoneNumberValidated: !fabricatorSettings.twoFA,\r\n }));\r\n return registerResponse.data\r\n }\r\n\r\n // const docuSignObj = fabricatorSettings.docuSignAuth ? JSON.parse(fabricatorSettings.docuSignAuth) : null;\r\n store.dispatch(toggleUserPopup({\r\n userPopupOpened: fabricatorSettings.twoFA,\r\n schedulerPending: fabricatorSettings.twoFA,\r\n userIsLoggedIn: true,\r\n // when user first register we need to check whether the fabricator requires to validate the phone number\r\n isPhoneNumberValidated: !fabricatorSettings.twoFA, // if 2FA is required we consider user is still NOT logged in\r\n ...registerResponse.data,\r\n userInfo: {\r\n email: registerResponse.data.email\r\n }\r\n }));\r\n\r\n const submit = window.location.href.includes('shoppingcart');\r\n const saveQuoteResponse = await saveQuote({\r\n submit,\r\n yesNoConsultationRequest,\r\n quoteRequestType,\r\n fromCheckOutPage: submit,\r\n showReceipt: false\r\n });\r\n\r\n if (fabricatorSettings.twoFA)\r\n return;\r\n\r\n $(document).trigger(ActionTypes.USER_IS_LOGGED_IN); // click on the active item it the navigation\r\n if (saveQuoteResponse) {\r\n let responseDataBase = saveQuoteResponse;\r\n if (saveQuoteResponse.data) {\r\n responseDataBase = saveQuoteResponse.data;\r\n }\r\n const responseData = typeof responseDataBase === 'object' ? responseDataBase : JSON.parse(responseDataBase);\r\n //console.log('saveQuote response:', responseData);\r\n store.dispatch(setJobId(responseData.jobId));\r\n }\r\n if (showSchedule) {\r\n if (fabricatorSettings.enableCalendarForScheduling) {\r\n store.dispatch({\r\n type: types.SHOW_SCHEDULER,\r\n payload: {show: true}\r\n })\r\n } else {\r\n renderMessagePopup(\"userPopup.messageBox.appointmentRequested\");\r\n }\r\n } else {\r\n // store.dispatch({\r\n // type: types.CHANGE_MESSAGE_BOX,\r\n // payload: {\r\n // visible: true,\r\n // error: false,\r\n // inline: false,\r\n // message: \"userPopup.messageBox.designSavedSuccess\",\r\n // buttons: [{\r\n // text: \"messageBox.buttonOk\",\r\n // color: \"green\",\r\n // click: () => {\r\n // store.dispatch({\r\n // type: types.CHANGE_MESSAGE_BOX,\r\n // payload: {\r\n // visible: false,\r\n // }\r\n // });\r\n //\r\n // // console.log('DS - register', fabricatorSettings.showPricing, docuSignObj);\r\n // // if (fabricatorSettings.showPricing && docuSignObj && docuSignObj.isEnabled)\r\n // // store.dispatch(showDocuSign(true));\r\n //\r\n // if (checkout && fabricatorSettings.checkout && fabricatorSettings.hasPaymentGateway) {\r\n // showCheckoutLayout(fabricatorSettings);\r\n // }\r\n // }\r\n // }]\r\n // }\r\n // });\r\n }\r\n\r\n if (saveQuoteResponse.error || saveQuoteResponse.data && saveQuoteResponse.data.error) {\r\n loaderDisable();\r\n renderErrorPopup(saveQuoteResponse.error || saveQuoteResponse.data.error, \"\", noInternetCallBack);\r\n }\r\n return null\r\n};\r\n\r\nexport const resetUserPassword = () => {\r\n const state = store.getState();\r\n const email = state.userState.userInfo.email;\r\n const language = state.serverState.language;\r\n loaderEnable();\r\n JsonApi.resetUserPassword(email, language)\r\n .then((response) => {\r\n loaderDisable();\r\n console.log('resetUserPassword response:', response);\r\n if (response.data.error) {\r\n renderErrorPopup(response.data.error);\r\n } else if (IS_LIXIL_UI) {\r\n store.dispatch({\r\n type: types.CHANGE_MESSAGE_BOX,\r\n payload: {\r\n visible: true,\r\n title: \"leadCapturePopup.forgot.successPopup.title\",\r\n message: \"leadCapturePopup.forgot.successPopup.text\",\r\n }\r\n })\r\n } else {\r\n store.dispatch({\r\n type: types.CHANGE_MESSAGE_BOX,\r\n payload: {\r\n visible: true,\r\n message: \"userPopup.messageBox.passwordHasBeenSent\",\r\n error: false,\r\n inline: false,\r\n buttons: [{\r\n text: \"messageBox.buttonOk\",\r\n color: \"blue\",\r\n click: () => {\r\n store.dispatch({\r\n type: types.CHANGE_MESSAGE_BOX,\r\n payload: {\r\n visible: false,\r\n }\r\n });\r\n }\r\n }]\r\n }\r\n });\r\n }\r\n })\r\n .catch((error) => {\r\n loaderDisable();\r\n renderErrorPopup(error);\r\n });\r\n};\r\n\r\nexport const getEmployees = (withLoader = true) => {\r\n if (withLoader) {\r\n loaderEnable();\r\n }\r\n return JsonApi.getEmployees()\r\n .then((response) => {\r\n if (withLoader) {\r\n loaderDisable();\r\n }\r\n //console.log('getEmployees response:', response);\r\n const emplList = response && response.data ? [...response.data] : [];\r\n store.dispatch(setEmployeesList(emplList));\r\n return emplList\r\n })\r\n .catch((error) => {\r\n if (withLoader) {\r\n loaderDisable();\r\n }\r\n console.log('getEmployees error:', error);\r\n return []\r\n // renderErrorPopup(error);\r\n });\r\n};\r\n\r\nexport const getCustomerById = ({customerId,\r\n showContractOnError = false,\r\n noInternetCallBack,\r\n afterContractSignCallback}) => {\r\n loaderEnable();\r\n return JsonApi.getCustomerById(customerId)\r\n .then(response => response.data)\r\n .catch((error) => {\r\n loaderDisable();\r\n renderErrorPopup(error, \"\", noInternetCallBack, showContractOnError, null, afterContractSignCallback);\r\n });\r\n};\r\n\r\nexport const generateTwoFaAuthenticationToken = () => {\r\n return JsonApi.generateAuthenticationToken()\r\n .then(response => response.data || response)\r\n .catch(error => console.log(\"Server error validateAuthentication \"+new Error(error)))\r\n};\r\n\r\nexport const validateTwoFaAuthentication = (token, authCode, phone) => {\r\n return JsonApi.validateAuthenticationRequest(token, authCode, phone)\r\n .then(response => response.data)\r\n .catch(error => console.log(\"Server error validateAuthentication \"+new Error(error)))\r\n};\r\n\r\nexport const sendAuthenticationRequest = (token, to, type) => {\r\n return JsonApi.sendAuthenticationRequest(token, to, type)\r\n .then(response => response.data)\r\n .catch(error => console.log(\"Server error sendAuthenticationRequest \"+new Error(error)))\r\n};\r\n","import $ from \"jquery\";\r\nimport eventManager from \"../../store/sqftEventManager\";\r\nimport Config from \"../../store/sqftConfig\";\r\nimport workspace from \"../workspace\";\r\nimport Cursor from \"./cursor\";\r\nimport MiteredOverlay from \"../shapes/overlays/mitered\";\r\nimport {\r\n inchesToMm,\r\n measureDistanceToInches,\r\n mmToInches,\r\n} from \"../../../../helpers/sqftHelper\";\r\nimport {iconPlusBlue} from \"../../../../assetsSQFT\";\r\nimport store from \"../../../../../../store\";\r\nimport {\r\n addMiteredSection,\r\n changeMiteredSection,\r\n deleteMiteredSection\r\n} from \"../../../../../../actions/sqftMiteredFunctions\";\r\nimport {updateSQFTCalculations} from \"../../../../../../actions/sqftFunctions\";\r\nimport {\r\n EDGE_LABELS,\r\n MITERED_OVERLAY_TYPE,\r\n RESOURCE_ATTACHED_TO_TYPE,\r\n SIDEBAR_BUTTONS_MENU, SIDEBAR_HIDDEN_BUTTONS,\r\n SIDEBAR_NAVIGATION_BUTTONS\r\n} from \"../../../../constants\";\r\nimport {setSQFTMenuOpened, setSQFTMenuOpenedLock} from \"../../../../../../actions/sqftMenuFunctions\";\r\nimport {attachResource} from \"./resourseCanas\";\r\nimport {getEdgeFeatures} from \"../../../../helpers/shapeHelper\";\r\nimport {getMiterEdgeFeature, getMiterUnderwrap} from \"../../../../helpers/featureHelper\";\r\n\r\nexport default class MiteredController {\r\n cursor;\r\n design = {\r\n imgSrc: iconPlusBlue\r\n };\r\n nodes = {\r\n miteredSectionsHTML: $('#mitered-sections'),\r\n };\r\n miteredSections = [];\r\n\r\n createCursor = () => {\r\n this.cursor = new Cursor();\r\n this.cursor.setCursorImage(this.design.imgSrc);\r\n eventManager.setCursor('mitered-select', this, true);\r\n };\r\n\r\n registerEvents = () => {\r\n eventManager.addEvent(\r\n eventManager.events.MOUSE_UP,\r\n this.onMouseUp,\r\n this,\r\n eventManager.priorities.OVERALL\r\n );\r\n };\r\n\r\n attachMiteredEdge = (seg) => {\r\n if (seg && !seg.isWithMitered() && !seg.isWithBumpout()) {\r\n //add tool\r\n attachResource(seg, null, RESOURCE_ATTACHED_TO_TYPE.mitered, null, null, '', 0, null, null, false);\r\n\r\n //add green edge\r\n const miterEdgeFeature = getMiterEdgeFeature();\r\n if (miterEdgeFeature) {\r\n const name = miterEdgeFeature.getFeatureName();\r\n attachResource(seg, null, RESOURCE_ATTACHED_TO_TYPE.edge, miterEdgeFeature.dbFeature.id, null, name);\r\n }\r\n }\r\n };\r\n\r\n attachMiteredUnderwrapEdge = (seg) => {\r\n if (seg && !seg.isWithMitered() && !seg.isWithBumpout()) {\r\n //add tool\r\n attachResource(seg, null, RESOURCE_ATTACHED_TO_TYPE.mitered, null, null, '', 0, null, null, false);\r\n\r\n //add green edge\r\n const miterEdgeFeature = getMiterUnderwrap();\r\n if (miterEdgeFeature) {\r\n const name = miterEdgeFeature.getFeatureName();\r\n attachResource(seg, null, RESOURCE_ATTACHED_TO_TYPE.edge, miterEdgeFeature.dbFeature.id, null, name);\r\n }\r\n }\r\n };\r\n\r\n onMouseUp = (mousePos) => {\r\n void mousePos;\r\n let hoverShape = workspace.getHoverShape();\r\n\r\n if (hoverShape && hoverShape.getHoverSegment) {\r\n const reduxState = store.getState();\r\n const activeButton = reduxState.sqftMenuState.activeButton;\r\n const activeSubMenuButton = reduxState.sqftMenuState.activeSubMenuButton;\r\n if (activeButton === SIDEBAR_NAVIGATION_BUTTONS.mitered || activeSubMenuButton === SIDEBAR_HIDDEN_BUTTONS.buttonMitered) {\r\n let seg = hoverShape.getHoverSegment();\r\n if (seg && seg.isWithMitered() && reduxState.sqftMenuState.activeButton === SIDEBAR_BUTTONS_MENU.delete) {\r\n seg.deleteMitered();\r\n } else if (seg && seg.isWithMitered()) {\r\n void 0;\r\n } else {\r\n this.attachMiteredEdge(seg, this.cursor.cursorImage);\r\n }\r\n }\r\n }\r\n\r\n this.cursor.checkForRestoreCursor();\r\n };\r\n\r\n addSection = (miteredSection) => {\r\n const reduxState = store.getState();\r\n store.dispatch(addMiteredSection(miteredSection));\r\n store.dispatch(setSQFTMenuOpened(SIDEBAR_NAVIGATION_BUTTONS.mitered));\r\n const updateCalculations = reduxState.sqftState.updateCalculations;\r\n store.dispatch(updateSQFTCalculations(updateCalculations + 1));\r\n };\r\n\r\n updateSection = (miteredSection) => {\r\n store.dispatch(changeMiteredSection(miteredSection));\r\n store.dispatch(setSQFTMenuOpened(SIDEBAR_NAVIGATION_BUTTONS.mitered));\r\n store.dispatch(setSQFTMenuOpenedLock(true));\r\n\r\n const reduxState = store.getState();\r\n const updateCalculations = reduxState.sqftState.updateCalculations;\r\n store.dispatch(updateSQFTCalculations(updateCalculations + 1));\r\n }\r\n\r\n deleteSection = (miteredOverlay) => {\r\n store.dispatch(deleteMiteredSection(miteredOverlay.id));\r\n };\r\n\r\n createMiteredOverlay = (line) => {\r\n const reduxState = store.getState();\r\n const miteredSections = reduxState.sqftMiteredState.miteredSections;\r\n\r\n return new MiteredOverlay(line, miteredSections.length + 1, MITERED_OVERLAY_TYPE.mitered)\r\n };\r\n\r\n destroy = (protect, revertBackAfterMouseUp) => {\r\n if (revertBackAfterMouseUp) {\r\n eventManager.removeEvent(self, eventManager.events.RENDER); //remove render only, but wait for mouse up to set cursor again\r\n this.isWaitingToRestoreCursor = true;\r\n } else {\r\n this.deregisterEvents();\r\n }\r\n //this.hide();\r\n };\r\n\r\n deregisterEvents() {\r\n eventManager.resetCursor(this);\r\n eventManager.removeEvent(this);\r\n this.cursor ? this.cursor.deregisterEvents() : null;\r\n Config.highlight.lines = false;\r\n }\r\n\r\n static getTotalArea = () => {\r\n let miteredSections = workspace.getMiteredSections();\r\n let miteredSectionsArea = 0;\r\n for (let i = 0; i < miteredSections.length; i++) {\r\n miteredSectionsArea += miteredSections[i] ? miteredSections[i].getMiteredToolTotalArea() : null;\r\n }\r\n\r\n return miteredSectionsArea;\r\n };\r\n\r\n onMeasureUnitChange = () => {\r\n let miteredSections = workspace.getMiteredSections();\r\n let miteredSectionsArea = 0;\r\n for (let i = 0; i < miteredSections.length; i++) {\r\n let segments = miteredSections[i].getSegments();\r\n\r\n segments.map((segment) => {\r\n segment.height = Config.measureUnit === \"Metric\"\r\n ? inchesToMm(segment.height)\r\n : mmToInches(segment.height);\r\n\r\n if (segment.thickness) {\r\n segment.thickness.value = Config.measureUnit === \"Metric\"\r\n ? inchesToMm(segment.thickness.value)\r\n : mmToInches(segment.thickness.value)\r\n }\r\n });\r\n\r\n miteredSections[i].heightNumberText.value = segments[0].height\r\n }\r\n\r\n return miteredSectionsArea;\r\n };\r\n\r\n getTransformedMeasureUnit = (value) => {\r\n return Config.measureUnit === \"Metric\"\r\n ? measureDistanceToInches(value).millimeters // ? distanceToMillimeters(inchesToMm(segment.length.value))\r\n : value;\r\n };\r\n\r\n getEdgesLength = () => {\r\n let additionalLength = 0;\r\n const lines = workspace.getLines();\r\n for (const line of lines) {\r\n if (line.from.getMiteredFeatureId()) {\r\n additionalLength += this.getEdgeLengthValue();\r\n }\r\n }\r\n\r\n return additionalLength\r\n }\r\n\r\n getEdgeLengthValue = () => {\r\n return Config.measureUnit === \"Imperial\"\r\n ? (2 * 33) / 40\r\n : (2 * 900) / 1000;\r\n }\r\n\r\n getExportedMiteredEdges = () => {\r\n let addedEdges = [];\r\n const lines = workspace.getLines();\r\n for (const line of lines) {\r\n const miteredFeatureId = line.from.getMiteredFeatureId();\r\n if (miteredFeatureId) {\r\n const edgeLengthValue = this.getEdgeLengthValue();\r\n const navItems = getEdgeFeatures();\r\n let edgeFeature = navItems.find(edge => edge.part.dbFeature.id === miteredFeatureId);\r\n\r\n addedEdges.push({\r\n partId: EDGE_LABELS.edge,\r\n type: EDGE_LABELS.edge,\r\n name: edgeFeature ? workspace.intl.formatMessage({id: edgeFeature.part.dbFeature.sharedFeatureName}) : \"\",\r\n featureId: miteredFeatureId,\r\n segments: 1,\r\n length: edgeLengthValue,\r\n area: edgeLengthValue\r\n });\r\n }\r\n }\r\n\r\n return addedEdges\r\n }\r\n}\r\n","import * as types from \"./actionTypes\";\r\n\r\nexport const setMiteredSections = (miteredSections) => ({\r\n type: types.SET_MITERED_SECTIONS,\r\n payload: {miteredSections}\r\n});\r\n\r\nexport const addMiteredSection = (miteredSection) => ({\r\n type: types.ADD_MITERED_SECTION,\r\n payload: miteredSection\r\n});\r\n\r\nexport const changeMiteredSection = (miteredSection) => ({\r\n type: types.CHANGE_MITERED_SECTION,\r\n payload: miteredSection\r\n});\r\n\r\nexport const deleteMiteredSection = (id) => ({\r\n type: types.DELETE_MITERED_SECTION,\r\n payload: {id}\r\n});\r\n\r\nexport const deleteAllMiteredSections = () => ({\r\n type: types.DELETE_ALL_MITERED_SECTIONS,\r\n payload: {}\r\n});\r\n","import {SHAPE_PART_ID} from \"./constants\";\r\n\r\nexport const SHAPE_HARDCODED_PART_IDS = [\r\n SHAPE_PART_ID.seamPiece,\r\n SHAPE_PART_ID.backsplashPiece,\r\n SHAPE_PART_ID.waterfallPiece,\r\n SHAPE_PART_ID.slabPlaceHolder,\r\n SHAPE_PART_ID.upper_cabinet_boxes,\r\n SHAPE_PART_ID.lower_cabinet_boxes,\r\n SHAPE_PART_ID.tall_cabinet_boxes,\r\n];\r\n\r\nexport const SHAPE_PART_IDS_VISIBLE_ONLY_IN_THE_SLAB_MODE = [\r\n SHAPE_PART_ID.seamPiece,\r\n SHAPE_PART_ID.backsplashPiece,\r\n SHAPE_PART_ID.waterfallPiece,\r\n SHAPE_PART_ID.slabPlaceHolder,\r\n];\r\n\r\nexport const SHAPE_PART_IDS_FROM_ADDITIONAL_SHAPES_LIST = [\r\n SHAPE_PART_ID.backsplashPiece,\r\n SHAPE_PART_ID.waterfallPiece,\r\n];\r\n","import {Part} from \"../part\";\r\nimport {wallsThumbnail} from \"../../../bvComponent/core/assets\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\n\r\nimport store from \"../../../../store\";\r\nimport LeftWall from \"../subparts/walls/leftWall\";\r\nimport RightWall from \"../subparts/walls/rightWall\";\r\nimport CenterWall from \"../subparts/walls/centerWall\";\r\nimport BackWall from \"../subparts/walls/backWall\";\r\nimport Ceiling from \"../subparts/walls/ceiling\";\r\nimport FrontWall from \"../subparts/walls/frontWall\";\r\nimport SplitWall from \"../subparts/walls/splitWall\";\r\nimport LeftWallSplitter from \"../subparts/walls/leftWallSplitter\";\r\nimport CeilingPanels from \"../subparts/walls/ceilingPanels\";\r\n\r\nexport default class Walls extends Part {\r\n static id = 'Walls';\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Walls';\r\n this.translateId = \"visualizer.bathroom.walls\";\r\n this.partThumbnail = wallsThumbnail;\r\n\r\n // related items\r\n this.leftWall = null;\r\n this.rightWall = null;\r\n this.centerWall = null;\r\n this.frontWall = null;\r\n this.popoutWall = null;\r\n this.backWall = null;\r\n this.ceiling = null;\r\n this.ceilingPanels = null;\r\n this.splitWall = null;\r\n this.leftWallSplitter = null;\r\n\r\n this.allWallsApplied = true;\r\n this.relatedGroupNames = [\"Backsplash\", \"Left Wall Splitter\", \"Left Wall\", \"Right Wall\", \"Center Wall\",\r\n \"Front Wall\", \"Back Wall\", \"Ceiling\", \"Ceiling Panels\"];\r\n }\r\n\r\n load(dbFeature, loadFeature = true) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Left Wall\":\r\n case \"Left Wall Crop\":\r\n relatedItemName = \"leftWall\";\r\n RelatedItemClass = LeftWall;\r\n break;\r\n case \"Right Wall\":\r\n case \"Right Wall Crop\":\r\n relatedItemName = \"rightWall\";\r\n RelatedItemClass = RightWall;\r\n break;\r\n case \"Center Wall\":\r\n relatedItemName = \"centerWall\";\r\n RelatedItemClass = CenterWall;\r\n break;\r\n case \"Front Wall\":\r\n case \"Front Wall Crop\":\r\n relatedItemName = \"frontWall\";\r\n RelatedItemClass = FrontWall;\r\n break;\r\n case \"Back Wall\":\r\n case \"Beack Wall\":\r\n relatedItemName = \"backWall\";\r\n RelatedItemClass = BackWall;\r\n break;\r\n case \"Split Wall\":\r\n relatedItemName = \"splitWall\";\r\n RelatedItemClass = SplitWall;\r\n break;\r\n case \"Left Wall Splitter\":\r\n relatedItemName = \"leftWallSplitter\";\r\n RelatedItemClass = LeftWallSplitter;\r\n break;\r\n case \"Ceiling Panels\":\r\n relatedItemName = \"ceilingPanels\";\r\n RelatedItemClass = CeilingPanels;\r\n break;\r\n case \"Ceiling\":\r\n case \"Cealing\":\r\n relatedItemName = \"ceiling\";\r\n RelatedItemClass = Ceiling;\r\n break;\r\n }\r\n return this.loadCommon(relatedItemName, RelatedItemClass, dbFeature, loadFeature)\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n subParts(withHidden = true) {\r\n return this.relatedItems\r\n .filter(item => {\r\n return this.filterRelatedItem(item, withHidden)\r\n })\r\n .map(_ => new DesignNavigationItem(_.partName, _));\r\n }\r\n\r\n handleSubPartClick() {\r\n\r\n }\r\n\r\n recoverPrevioslySelected(activeRelatedPart) {\r\n const {activeQuoteIndex} = store.getState().quotesState;\r\n this.relatedItems.forEach(relatedItem => {\r\n if (relatedItem.partId !== activeRelatedPart.partId && relatedItem.activeFeatureBeforeAllWalls) {\r\n if (relatedItem.activeFeatureBeforeAllWalls === \"placeholder\") {\r\n relatedItem.placeholderChanged = false;\r\n relatedItem.firstClick[activeQuoteIndex] = false;\r\n } else if (!relatedItem.selectedByUser) {\r\n relatedItem.activeFeatureBeforeAllWalls.clickFromAllWalls();\r\n }\r\n }\r\n });\r\n }\r\n\r\n getSplitWallType() {\r\n if (!this.splitWall) {\r\n return null\r\n }\r\n if (!this.splitWall.disabled && this.splitWall.activeFeature && this.splitWall.activeFeature.metaData[\"SplitWallType\"]\r\n && this.splitWall.activeFeature.matchesMetaForArrayOfConditions(this.splitWall.getArrayOfConditions())) {\r\n return this.splitWall.activeFeature.metaData[\"SplitWallType\"]\r\n } else {\r\n return [\"NW\", \"0\"]\r\n }\r\n }\r\n\r\n}\r\n","import debounce from \"lodash/debounce\";\r\nimport $ from 'jquery';\r\n\r\nimport {getMetadataByDimensions, scrollToDivInArea} from \"../../../misc/utils\";\r\nimport {getEventPosition, getFeatureIsLocked, isIframe} from \"../../../misc/helpers\";\r\nimport {vanityWizardFilters, showerWizardFilters, NotQCVanityDoorStylesFilters} from '../../bvComponent/core/constants';\r\nimport {\r\n CABINET_GROUP,\r\n CABINET_WIZARD_BUTTONS, COUNTERTOP_GROUP,\r\n COUNTERTOP_WIZARD_BUTTONS, LayoutAbbreviations,\r\n MODULE_CONTEXT_MENU_TYPES\r\n} from '../../kvComponent/core/constants';\r\nimport {ContentType, PartMenuType, UserPopupTypes} from \"../constants\";\r\nimport ActionTypes from \"../../../misc/actionTypes\";\r\nimport Analytics from './../../../analytics';\r\nimport {getBvGroupFeatures} from \"../../../api/server-api\";\r\nimport {loaderDisable, loaderEnable} from \"../../ui/loaderView\";\r\n\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\nimport CountertopSwitchers from \"../../kvComponent/navigation/countertopSwitchers\";\r\nimport CabinetSwitchers from \"../../kvComponent/navigation/cabinetSwitchers\";\r\nimport NavigationRequests from \"./navigationRequests\";\r\nimport {toggleUpdateDisableFeatureGroupRadio} from \"../../../actions/navigationFunctions\";\r\nimport store from \"../../../store\";\r\nimport {CABINET_GROUP_BATHROOM, COUNTERTOP_GROUP_BATHROOM} from \"../../bvSceneComponent/core/constants\";\r\nimport Config from \"../../../config\";\r\nimport {\r\n // checkForCompatabilityAlert,\r\n clickOnSimilarFeatures,\r\n getApplyToLogic,\r\n} from \"../../look/lookNavigation/lookNavigationFunctions\";\r\nimport {navFeatureCLick} from \"../../look/lookNavigation/lookFunctions\";\r\nimport {updateCanvasCount} from \"../../../actions/actionFunctions\";\r\nimport {VISUALIZER_MANAGEMENT_ACTIONS} from \"../../../misc/constants\";\r\nimport {searchProductRequest} from \"../../../api/search-api\";\r\nimport {featureCanChangeShowerSize, searchForSameNameWallsBeforeFeatureApply} from \"../../look/bathroomFunctions\";\r\nimport {getSideBarSubParts} from \"./navUtils\";\r\n// import {setLookCompatabilityAlert} from \"../../../actions/lookFunctions\";\r\n\r\nexport default class Navigation extends NavigationRequests { // this class is used for both Desktop & Mobile navigations to avoid method's duplicating\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n showNavigation: false,\r\n contentType: ContentType.None,\r\n parentNavigationItem: null, // coming from main menu, Vanity, Floor, ...\r\n childNavigationItem: null, // coming from a complex part's sub part, such as Vanity/Toilet\r\n searchText: \"\",\r\n designNavigationItems: [],\r\n contextMenuOpen: false,\r\n hoveredLayer: {},\r\n navWidth: 0,\r\n contextMenuPosition: {\r\n top: 0,\r\n left: 0\r\n },\r\n contextMenuPonyWall: false,\r\n filters: {},\r\n activeDefaultPreset: null,\r\n updateSidebarItems: false,\r\n vanityWizardGroups: vanityWizardFilters.map((filterName) => { // filterGroupsId's & their selected values\r\n return {\r\n filterName,\r\n selectedValueId: null,\r\n selectedValueName: \"\",\r\n hidden: filterName === \"Material\"\r\n }\r\n }),\r\n showerWallWizardGroups: showerWizardFilters.map((filterName) => { // filterGroupsId's & their selected values\r\n const wizardFilters = [\"SlabColor\", \"TileColor\", \"TilePattern\", \"AcrylicPattern\", \"AcrylicColor\"];\r\n return {\r\n filterName,\r\n selectedValueId: null,\r\n selectedValueName: \"\",\r\n hidden: wizardFilters.includes(filterName)\r\n }\r\n }),\r\n showerWallWizardGroupsSelected: false,\r\n showFeatureWizard: true,\r\n wizardStepIndex: 0,\r\n wizardActiveItemIsLocked: false,\r\n showFilterSelection: false\r\n };\r\n\r\n this.shouldRecoverWalls = false;\r\n this.navigationIsClosing = false;\r\n this.defaultPresetIndexToClick = null;\r\n }\r\n\r\n _componentDidMount() {\r\n const layout = getCurrentLayout();\r\n this.setState({\r\n designNavigationItems: layout.designNavigationItems(),\r\n });\r\n this.setIframeMessaging();\r\n document.getElementById(this.props.canvasId).addEventListener('click', this.bindCanvasClick);\r\n $(document).on(ActionTypes.USER_IS_LOGGED_IN, this.userHasLoggedIn);\r\n if (window.innerWidth < 480) { // workarounds for screens without the rotate icon\r\n // if (!window.rotatedCanvasTranslateIsSet) { // making canvas scroll to center\r\n // setTimeout(() => {\r\n // const $canvas = $('.canvas');\r\n // $canvas.css(\"transform\", `translateY(${window.innerWidth - $canvas.height()}px`);\r\n // window.rotatedCanvasTranslateIsSet = true;\r\n // }, 500);\r\n // }\r\n $(\".room .menu\").hide();\r\n setTimeout(() => {\r\n $(\".room .menu\").show(); // fix for menu blocking the main canvas\r\n }, 0)\r\n }\r\n\r\n }\r\n\r\n componentWillUnmount() {\r\n document.getElementById(this.props.canvasId).removeEventListener('click', this.bindCanvasClick);\r\n $(document).off(ActionTypes.USER_IS_LOGGED_IN, this.userHasLoggedIn);\r\n $(document).off('click', this.handleWrapperBlur);\r\n $(document).off(ActionTypes.OPEN_MOBILE_NAVIGATION);\r\n $(document).off(ActionTypes.CHANGE_MOBILE_MENU_CONTENT_TYPE);\r\n if (Config.isVisualizerManagement()) {\r\n window.removeEventListener(\"message\", this.messageListening);\r\n }\r\n if (this.props.toggleDesktopNavigation) {\r\n this.props.toggleDesktopNavigation(false)\r\n }\r\n if (this.props.setActiveNavigationNames) {\r\n this.props.setActiveNavigationNames(\"\", \"\")\r\n }\r\n }\r\n\r\n _componentWillReceiveProps(nextProps) {\r\n if (nextProps.visualizerTutorialStep === 2 && (this.props.visualizerTutorialStep === 1)\r\n && this.props.setVisualizerTutorialStep\r\n && this.props.showVisualizerTutorial) {\r\n this.openLayoutMenu(() => {\r\n const $scrollList = $(\".layout-list\");\r\n if (!$scrollList || !$scrollList.find(\".active\") || !$scrollList.find(\".active\").offset()) {\r\n return false\r\n }\r\n $scrollList.animate({scrollLeft: $scrollList.find(\".active\").offset().left}, 800, () => {\r\n // $(\"html, body\").animate({scrollTop: document.body.scrollHeight/4}, 500);\r\n setTimeout(() => {\r\n setTimeout(() => {\r\n this.closeNavigation();\r\n this.props.setVisualizerTutorialStep(3);\r\n this.props.showVisualizerTutorial(true);\r\n }, 300)\r\n }, 600)\r\n });\r\n });\r\n }\r\n const layout = getCurrentLayout();\r\n if(!this.state.designNavigationItems || !this.state.designNavigationItems.length) {\r\n this.setState({designNavigationItems: layout.designNavigationItems()});\r\n }\r\n }\r\n\r\n updateComponent = () => {\r\n this.forceUpdate();\r\n };\r\n\r\n userHasLoggedIn = () => { // click on current active item after unlock\r\n const layout = getCurrentLayout();\r\n if (this.props.activeFeature && this.state.showNavigation && this.state.contentType === ContentType.Design) {\r\n if (this.state.childNavigationItem) {\r\n const navItemToClick = layout.designNavigationItems(this.state.childNavigationItem, {}, \"\", true)\r\n .find(navItem => {\r\n return this.props.activeFeature.dbFeature.id === navItem.part.dbFeature.id;\r\n });\r\n if (navItemToClick) {\r\n this.handleNavigationItemClick(navItemToClick);\r\n }\r\n } else {\r\n this.handleNavigationItemClick({\r\n part: this.props.activeFeature\r\n });\r\n }\r\n this.props.refreshCB();\r\n } else if (this.state.contentType === ContentType.DisplayRoom && (this.defaultPresetIndexToClick || this.defaultPresetIndexToClick === 0)\r\n && (!this.props.fabricatorSettings.twoFA || (this.props.fabricatorSettings.twoFA && this.props.isPhoneNumberValidated))) {\r\n this.handleDefaultPresetClick(this.defaultPresetIndexToClick)\r\n }\r\n this.forceUpdate(); // update react virtualized grid for Safari mobile\r\n };\r\n\r\n setIframeMessaging = () => {\r\n if (Config.isVisualizerManagement()) {\r\n window.addEventListener(\"message\", this.messageListening);\r\n }\r\n };\r\n\r\n messageListening = (event) => {\r\n if (event.data && event.data.action === VISUALIZER_MANAGEMENT_ACTIONS.closeVisualizerNavigation) {\r\n this.closeMobileNavigationMenu();\r\n }\r\n };\r\n\r\n closeMobileNavigationMenu = () => {};\r\n\r\n triggerOpenNavigationMenu = (hoveredZone, clickedParent, activeNavigationFilter = null) => {\r\n const layout = getCurrentLayout();\r\n const designNavigationItems = layout.designNavigationItems();\r\n const menuItemToShow = clickedParent\r\n ? designNavigationItems.find(item => item.text === clickedParent)\r\n : designNavigationItems.find(item => item.text === hoveredZone);\r\n\r\n if (menuItemToShow) {\r\n this.setState({\r\n parentNavigationItem: menuItemToShow,\r\n childNavigationItem: null\r\n }, () => {\r\n\r\n if (menuItemToShow.part.menuType === PartMenuType.Simple) {\r\n this.checkIfAllFeaturesReceived(menuItemToShow, \"parentNavigationItem\");\r\n }\r\n\r\n if (menuItemToShow.part.handleClick) {\r\n menuItemToShow.part.handleClick();\r\n }\r\n // this.props.refreshCB(); // this refresh canvas (making redraw), but we need green zone to be shown! if needed - make settimeout 2 secs\r\n\r\n if (clickedParent) {\r\n const subMenuItemToShow = this.state.parentNavigationItem.part.subParts().find(item => {\r\n return item.text === hoveredZone\r\n });\r\n if (subMenuItemToShow) {\r\n this.handleSubPartClick(subMenuItemToShow, activeNavigationFilter);\r\n }\r\n }\r\n\r\n });\r\n this.props.setDefaultSelectionGroup(menuItemToShow.part.partName);\r\n }\r\n if (hoveredZone === \"Floor\") {\r\n $('html, body').animate({scrollTop: document.body.scrollHeight}, 800);\r\n } else if (hoveredZone === \"Ceiling\" || hoveredZone === \"Window\") {\r\n $('html, body').animate({scrollTop: 0}, 800);\r\n }\r\n };\r\n\r\n handleParentItemClick = (item) => {\r\n this.setState({\r\n parentNavigationItem: item,\r\n showFilterSelection: item.text === \"Floor\" && item.part.allFeaturesReceived, // show filters only if subItemPart has all features\r\n }, () => {\r\n // if (subParts[0] && (subParts[0].part.menuType !== PartMenuType.Simple)) {\r\n // this.handleSubPartClick(subParts[0])\r\n // }\r\n if (item.text === \"Walls\" || item.text === \"Shower\" || item.text === \"Bathtub\" || item.text === \"Vanity\" || item.text === \"Toilet\"\r\n || (item.menuType === PartMenuType.Complex)) {\r\n const subParts = getSideBarSubParts(this.state.parentNavigationItem.part);\r\n if (subParts.length) {\r\n this.handleSubPartClick(subParts[0])\r\n }\r\n }\r\n if ((item.text === \"Ceiling\" &&\r\n (document.kvConfig.visualizerType === \"Bathroom\" || document.kvConfig.visualizerType === \"BV\")) || item.text === \"Window\") {\r\n this.setState({\r\n childNavigationItem: null\r\n });\r\n this.checkIfAllFeaturesReceived(item, \"parentNavigationItem\");\r\n }\r\n this.scrollToDefault(item);\r\n });\r\n this.props.setDefaultSelectionGroup(item.part.partName);\r\n };\r\n\r\n handleLayoutItemClick = layoutType => {\r\n const layout = getCurrentLayout();\r\n if (document.kvConfig.visualizerType === \"Kitchen\" && layout.getCurrentLayoutAbbreviation().includes(\"I\")\r\n && !LayoutAbbreviations[layoutType].includes(\"I\")) {\r\n this.resetNavigation();\r\n }\r\n if (layout.type !== layoutType) {\r\n this.changeLayout(layoutType)\r\n }\r\n };\r\n\r\n resetNavigation = () => {\r\n this.setState({\r\n parentNavigationItem: null,\r\n childNavigationItem: null,\r\n searchText: \"\"\r\n });\r\n this.props.setActiveFeature(null);\r\n if (this.props.setActiveNavigationFilter) {\r\n this.props.setActiveNavigationFilter(CABINET_WIZARD_BUTTONS[0].buttonId);\r\n this.props.setActiveNavigationFilterStepIndex(0);\r\n }\r\n };\r\n\r\n getSearchProducts = (searchText) => {\r\n if (searchText && searchText.length > 2) {\r\n this.props.setNavigationLoading(true);\r\n const childItem = this.state.childNavigationItem ? this.state.childNavigationItem.part : this.state.parentNavigationItem.part;\r\n const promises = [searchProductRequest(childItem, searchText)];\r\n if (COUNTERTOP_GROUP.includes(childItem.partId) && document.kvConfig.visualizerType !== \"kvScene\") {\r\n // we have requests on click\r\n const layout = getCurrentLayout();\r\n COUNTERTOP_GROUP.forEach(neededPartId => {\r\n if (neededPartId !== childItem.partId) {\r\n const featureGroup = layout.getFeatureGroupByPartId(neededPartId);\r\n if (featureGroup) {\r\n promises.push(Navigation.searchFeaturesByName(featureGroup, searchText, 1000));\r\n }\r\n }\r\n });\r\n }\r\n Promise.all(promises)\r\n .then(() => {\r\n this.props.setNavigationLoading(false); // for loading & desktop update\r\n this.setState({ // for mobile update\r\n render: false,\r\n }, () => {\r\n this.setState({\r\n render: true,\r\n });\r\n });\r\n })\r\n }\r\n };\r\n\r\n searchAPIDebounced = debounce(this.getSearchProducts, 500);\r\n\r\n handleSearchInputChange = async (event) => {\r\n const searchText = event.target.value;\r\n this.setState({\r\n searchText\r\n });\r\n await this.searchAPIDebounced(searchText);\r\n };\r\n\r\n ponyWallAndLeftWallClick = (menuItem) => {\r\n const layout = getCurrentLayout();\r\n if (!this.props.fabricatorSettings.leadCapture || (this.props.fabricatorSettings.leadCapture && this.props.userIsLoggedIn)) {\r\n if (menuItem.part.partId === \"shower_body\" && (menuItem.text === \"Left Shower Wall\" || menuItem.text === \"Pony Wall\")) {\r\n const shower = layout.parts.Shower;\r\n const activeShower = shower.getActiveShowerGroup();\r\n const dimensions = getMetadataByDimensions(activeShower.showerDimensions());\r\n const wallParent = layout.parts.Walls;\r\n if (menuItem.text === \"Left Shower Wall\" && dimensions === \"Pony\" && wallParent.ponyWall.placeholderChanged) { // switch from Pony -> to Left Shower Wall\r\n const name1 = wallParent.ponyWall.activeFeature.getSplittedFeatureName();\r\n this.receiveAllFeaturesAndClickFeatureByName(wallParent, \"left_shower_wall\", name1);\r\n } else if (menuItem.text === \"Pony Wall\" && dimensions !== \"Pony\" && wallParent.wallExL.placeholderChanged) {\r\n const name1 = wallParent.wallExL.activeFeature.getSplittedFeatureName();\r\n this.receiveAllFeaturesAndClickFeatureByName(wallParent, \"pony_wall\", name1);\r\n }\r\n }\r\n }\r\n };\r\n\r\n receiveAllFeaturesAndClickFeatureByName = (parent, partId, name1) => {\r\n const exLSubPart = parent.getRelatedItems().find(relItem => relItem.partId === partId);\r\n const findAndClick = () => {\r\n const wallExLFeature = parent.wallExL.navigationSubItems().find(navItem => {\r\n return navItem.part.getSplittedFeatureName() === name1\r\n });\r\n if (wallExLFeature) {\r\n wallExLFeature.part.handleClick(true);\r\n this.props.refreshCB();\r\n }\r\n };\r\n findAndClick(); // first try without the request\r\n this.checkIfAllFeaturesReceived({part: exLSubPart}, null, findAndClick); // then receive all walls\r\n };\r\n\r\n _menuOpened = () => {\r\n if (isIframe() && window.parent) {\r\n window.parent.postMessage({\r\n action: 'menu_opened',\r\n payload: {}\r\n }, \"*\");\r\n }\r\n if (this.props.setDemoPointClicked && !this.props.visualizerTutorialIsOpened) {\r\n this.props.setDemoPointClicked()\r\n }\r\n if (this.props.toggleDesktopNavigation) {\r\n this.props.toggleDesktopNavigation(true)\r\n }\r\n if (this.props.setModuleContextMenuType) {\r\n this.props.setModuleContextMenuType(MODULE_CONTEXT_MENU_TYPES.Filters)\r\n }\r\n };\r\n\r\n renderErrorPopup(message) {\r\n this.props.changeMessageBoxState({\r\n visible: true,\r\n error: true,\r\n message,\r\n buttons: [{\r\n text: \"messageBox.buttonOk\",\r\n color: 'red',\r\n click: () => {\r\n this.props.changeMessageBoxState({visible:false});\r\n }\r\n }]\r\n });\r\n }\r\n\r\n itemClick = async (item, ignoreLocked) => {\r\n\r\n const layout = getCurrentLayout();\r\n\r\n if (item && item.text === \"Floor\") {\r\n $('html, body').animate({scrollTop: document.body.scrollHeight}, 800);\r\n } else if (item && item.text === \"Ceiling\") {\r\n $('html, body').animate({scrollTop: 0}, 800);\r\n }\r\n\r\n if (layout.visualizerType === \"bvScene\") {\r\n await searchForSameNameWallsBeforeFeatureApply(item.part);\r\n }\r\n\r\n if (layout.isNewLayout && !item.part.relatedItems) {\r\n\r\n const applyFeature = async (feature) => {\r\n\r\n if (featureCanChangeShowerSize(feature)) {\r\n await searchForSameNameWallsBeforeFeatureApply(feature);\r\n }\r\n\r\n navFeatureCLick(feature, true, ignoreLocked);\r\n\r\n const applyToLogic = getApplyToLogic(item.part);\r\n if (applyToLogic && Array.isArray(applyToLogic.currentApplyToArray) && applyToLogic.currentApplyToArray.length) {\r\n await clickOnSimilarFeatures(item.part, applyToLogic, true);\r\n }\r\n }\r\n\r\n // const compatabilityLogic = checkForCompatabilityAlert(item.part);\r\n // if (compatabilityLogic.length) {\r\n // store.dispatch(setLookCompatabilityAlert({\r\n // visible: true,\r\n // compatabilityLogic,\r\n // clickedFeature: item.part,\r\n // applyFunction: applyFeature.bind(this, item.part) // always apply features from this popup\r\n // }));\r\n // return false\r\n // }\r\n\r\n await applyFeature(item.part);\r\n\r\n } else {\r\n\r\n await item.part.handleClick(ignoreLocked);\r\n\r\n if (this.isWallItem(item.part) && item.part.getParent().getParent().allWallsApplied) {\r\n this.applyAllWalls(item.part, ignoreLocked);\r\n }\r\n if (CABINET_GROUP.includes(item.part.partId) || CABINET_GROUP_BATHROOM.includes(item.part.partId)) {\r\n const featureIsLocked = getFeatureIsLocked(item.part);\r\n CabinetSwitchers.applyAllCabinets(item.part, !featureIsLocked || ignoreLocked);\r\n } else if (COUNTERTOP_GROUP.includes(item.part.partId) || COUNTERTOP_GROUP_BATHROOM.includes(item.part.partId)) {\r\n const featureIsLocked = getFeatureIsLocked(item.part);\r\n CountertopSwitchers.applyAllCountertops(item.part, !featureIsLocked || ignoreLocked);\r\n }\r\n }\r\n\r\n if (item.part.getParent && item.part.getParent().disabled) {\r\n const itemParent = item.part.getParent();\r\n const itemIsLocked = getFeatureIsLocked(item.part, ignoreLocked);\r\n let exLAndBathtubAndSmallRoom = false;\r\n if (itemParent.partId === \"left_shower_wall\" && layout.type === 0) {\r\n const showerBody = layout.parts.Shower.showerBody;\r\n if (showerBody && showerBody.disabled) {\r\n exLAndBathtubAndSmallRoom = true\r\n }\r\n }\r\n if (itemParent.disabled && !exLAndBathtubAndSmallRoom && !itemIsLocked) {\r\n itemParent.disabled = false;\r\n itemParent.disabledClick(); // disable also related parts\r\n store.dispatch(toggleUpdateDisableFeatureGroupRadio(true));\r\n store.dispatch(toggleUpdateDisableFeatureGroupRadio(false));\r\n }\r\n }\r\n if (item.part.getParent && item.part.getParent().getParent) { // enable shower if child is clicked\r\n const parent = item.part.getParent().getParent();\r\n if (parent.partName === \"Shower\" && parent.showerBody.disabled) {\r\n parent.showerBody.disabled = false;\r\n parent.showerBody.disabledClick(); // enable also related parts\r\n }\r\n }\r\n $(window).trigger(ActionTypes.CHANGE_LAYOUT); // update canvas\r\n store.dispatch(updateCanvasCount()); // for look remove button\r\n };\r\n\r\n callMetaMathesFailedPopup = (item, nonCompatibleWith) => {\r\n // console.log('item.matchesMetaFailedArray', item.matchesMetaFailedArray);\r\n const featureIsLocked = getFeatureIsLocked(item.part);\r\n if (!featureIsLocked) {\r\n const message = {\r\n id: \"messageBox.metaDataMatchesFailed\",\r\n featureGroup: item.part.getParent().partName.toLowerCase(),\r\n featureName: item.part.getFeatureName(),\r\n nonCompatibleWith\r\n };\r\n this.props.changeMessageBoxState({\r\n visible: true,\r\n message,\r\n buttons: [{\r\n text: \"messageBox.buttonYes\",\r\n color: 'green',\r\n click: () => {\r\n item.part.handleChangeParent(nonCompatibleWith); // change parent(vanity size)\r\n item.part.handleClick(); // set active\r\n const childNavigationItem = this.state.childNavigationItem;\r\n this.setState({ // update component & navigation\r\n childNavigationItem: null,\r\n },() => {\r\n this.setState({\r\n childNavigationItem\r\n })\r\n });\r\n setTimeout(() => {\r\n scrollToDivInArea($('.feature.active'), $('.categories-list'));\r\n }, 1000);\r\n this.props.changeMessageBoxState({visible:false});\r\n }\r\n },{\r\n text: \"messageBox.buttonNo\",\r\n color: \"blue\",\r\n click: () => {\r\n this.props.changeMessageBoxState({visible:false});\r\n }\r\n }]\r\n });\r\n }\r\n };\r\n\r\n callToiletFailPopup = (clickFrom, item, ignoreLocked = false) => {\r\n const featureIsLocked = getFeatureIsLocked(item.part, ignoreLocked);\r\n if (!featureIsLocked) {\r\n const message = (clickFrom === 'toilet') ? \"messageBox.toiletMetaDataFailed\" : \"messageBox.toiletMetaDataFailedVanity\";\r\n const buttons = (clickFrom === 'toilet')\r\n ? [{\r\n text: \"messageBox.buttonOk\",\r\n color: \"blue\",\r\n click: () => {\r\n this.props.changeMessageBoxState({visible:false});\r\n }\r\n }]\r\n : [{\r\n text: \"messageBox.buttonNo\",\r\n color: \"blue\",\r\n click: () => {\r\n this.props.changeMessageBoxState({visible:false});\r\n }\r\n },{\r\n text: \"messageBox.buttonYes\",\r\n color: \"green\",\r\n click: () => {\r\n this.itemClick(item, ignoreLocked);\r\n this.props.changeMessageBoxState({visible:false});\r\n }\r\n }];\r\n this.props.changeMessageBoxState({\r\n visible: true,\r\n message,\r\n buttons\r\n });\r\n }\r\n };\r\n\r\n toggleApplyWallsCheckbox = () => {\r\n const wallParent = this.state.parentNavigationItem.part;\r\n wallParent.allWallsApplied = !wallParent.allWallsApplied;\r\n if (!wallParent.allWallsApplied && this.shouldRecoverWalls) {\r\n wallParent.recoverPrevioslySelected(this.state.childNavigationItem.part)\r\n } else if (\r\n wallParent.allWallsApplied\r\n && this.state.childNavigationItem\r\n && this.state.childNavigationItem.part\r\n && this.state.childNavigationItem.part.activeFeature\r\n && this.state.childNavigationItem.part.placeholderChanged) {\r\n this.applyAllWalls(this.state.childNavigationItem.part.activeFeature, false);\r\n }\r\n this.props.refreshCB();\r\n };\r\n\r\n rememberWallsSelection = () => { // this is set when new Wall Navigation Item is clicked\r\n const featureGroup = this.state.childNavigationItem.part;\r\n if ((this.isWallItem(featureGroup) || featureGroup.allWallsCanBeApplied)\r\n && this.state.parentNavigationItem.part.setPrevioslySelected) {\r\n this.state.parentNavigationItem.part.setPrevioslySelected(featureGroup);\r\n }\r\n this.shouldRecoverWalls = false;\r\n };\r\n\r\n applyAllWalls = (navigationItemPart, ignoreLocked) => {\r\n // console.log('navigationItem', navigationItem);\r\n const layout = getCurrentLayout();\r\n const wallParent = this.state.parentNavigationItem.part;\r\n const allWalls = wallParent.relatedItems;\r\n\r\n if (document.kvConfig.visualizerType === \"Bathroom\" || document.kvConfig.visualizerType === \"BV\") {\r\n allWalls.forEach((relatedItem) => {\r\n if (this.isWallItem(relatedItem) && (relatedItem.partId !== navigationItemPart.partId)) {\r\n const wallsPartIds = [\"right_shower_wall\", \"left_shower_wall\", \"pony_wall\"];\r\n let featuresAvailableToClick = wallsPartIds.includes(relatedItem.partId)\r\n ? relatedItem.getAvailableFeatures()\r\n : relatedItem.features; // for other walls we don't have filters\r\n const navigationItemName = navigationItemPart.dbFeature.sharedFeatureName;\r\n const neededFeature = featuresAvailableToClick.find((feature) => {\r\n const featureName = feature.dbFeature.sharedFeatureName;\r\n return navigationItemName === featureName\r\n });\r\n // console.log('neededFeature', neededFeature);\r\n neededFeature && neededFeature.clickFromAllWalls(ignoreLocked);\r\n } else if (relatedItem.partId === \"accent_wall\" && !relatedItem.placeholderChanged) {\r\n relatedItem.disabled = true;\r\n }\r\n });\r\n const vanity = layout.parts[\"Vanity\"];\r\n if (vanity.vanityBacksplash && !vanity.vanityBacksplash.placeholderChanged) {\r\n vanity.vanityBacksplash.disabled = true;\r\n }\r\n } else if (document.kvConfig.visualizerType !== \"Bathroom\") {\r\n allWalls.forEach((relatedItem) => {\r\n if (this.isWallItem(relatedItem) && (relatedItem.partId !== navigationItemPart.partId)) {\r\n const navigationItemName = navigationItemPart.dbFeature.sharedFeatureName;\r\n const neededFeature = relatedItem.features.find((feature) => {\r\n const featureName = feature.dbFeature.sharedFeatureName;\r\n return featureName === navigationItemName\r\n });\r\n // console.log('neededFeature', neededFeature);\r\n neededFeature && neededFeature.clickFromAllWalls(ignoreLocked);\r\n }\r\n });\r\n }\r\n\r\n this.shouldRecoverWalls = true;\r\n this.props.refreshCB();\r\n };\r\n\r\n removeChoosingView = (partName) => {\r\n // console.log('partName', partName);\r\n switch (partName) {\r\n case \"Vanity\":\r\n this.props.setVanityType(true);\r\n break;\r\n case \"Shower\":\r\n this.props.setShowerType(true);\r\n break;\r\n default:\r\n break;\r\n }\r\n };\r\n\r\n handleSubTypeClick = subType => { // sidebar radio button click\r\n Analytics.sendClickEvent('sub-type-clicked-' + subType);\r\n this.removeChoosingView(this.state.parentNavigationItem.part.partName);\r\n if (this.props.changeActivePartRelatedItemIndex) {\r\n this.props.changeActivePartRelatedItemIndex(0); // set first item on materials page\r\n }\r\n this.state.parentNavigationItem.part.handleSubTypeClick(subType, this.handleNavigationItemClick);\r\n const childNavigationItem = this.state.parentNavigationItem.part.setDefaultPartAfterSubTypeClick();\r\n this.setState({\r\n childNavigationItem,\r\n showFilterSelection: childNavigationItem.part.allFeaturesReceived, // show filters only if subItemPart has all features\r\n showerWallWizardGroupsSelected: false,\r\n searchText: \"\"\r\n },() => {\r\n this.setNewActiveFeature();\r\n this.rememberWallsSelection();\r\n this.checkIfAllFeaturesReceived(childNavigationItem, \"childNavigationItem\");\r\n });\r\n /*set new materials page subIndex*/\r\n this.setActivePartRelatedItemIndex(childNavigationItem);\r\n this.props.refreshCB();\r\n };\r\n\r\n setActivePartRelatedItemIndex = (childNavigationItem) => {\r\n const layout = getCurrentLayout();\r\n let nextSubPartIndex = 0;\r\n if (this.state.parentNavigationItem && !layout.qtCategories) { // we don't need to set for qtCategories\r\n const subParts = childNavigationItem.part.getParent().subParts(false);\r\n nextSubPartIndex = subParts.findIndex(currentSubPart => {\r\n return currentSubPart.part.partId === childNavigationItem.part.partId;\r\n });\r\n }\r\n setTimeout(() => {\r\n this.props.changeActivePartRelatedItemIndex(nextSubPartIndex); // setTimeout is needed cause it needs parent to be updated\r\n }, 0);\r\n };\r\n\r\n setNewActiveFeature = (subNavigationItem) => {\r\n if (!subNavigationItem) {\r\n subNavigationItem = this.state.childNavigationItem || this.state.parentNavigationItem || null;\r\n }\r\n\r\n if (subNavigationItem) {\r\n const featureToSet = ((this.props.fabricatorSettings.leadCapture && !(document.kvConfig.isBackend && document.kvConfig.jobId && document.kvConfig.canSaveQuote))\r\n && !this.props.userIsLoggedIn && subNavigationItem.part.activeLockedFeature)\r\n || ((this.props.fabricatorSettings.leadCapture && !(document.kvConfig.isBackend && document.kvConfig.jobId && document.kvConfig.canSaveQuote))\r\n && this.props.userIsLoggedIn\r\n && subNavigationItem.part.activeLockedFeature\r\n && !subNavigationItem.part.placeholderChanged)\r\n ? subNavigationItem.part.activeLockedFeature\r\n : subNavigationItem.part.activeFeature;\r\n this.props.setActiveFeature(featureToSet);\r\n }\r\n };\r\n\r\n handleDefaultPresetClick = (index, presetIsLocked) => {\r\n const layout = getCurrentLayout();\r\n Analytics.sendClickEvent('preset-selected-' + index);\r\n if (presetIsLocked) {\r\n this.defaultPresetIndexToClick = index;\r\n this.props.toggleUserPopup({\r\n userPopupOpened: true\r\n });\r\n return\r\n }\r\n this.defaultPresetIndexToClick = null;\r\n this.setState({\r\n activeDefaultPreset: index\r\n }, () => {\r\n window.requestInProcess = true;\r\n loaderEnable();\r\n const defaultPreset = this.props.bvPresets[index];\r\n console.log('defaultPreset', defaultPreset);\r\n const cabinetParent = layout.parts[\"Cabinet\"];\r\n const noCabinets = (cabinetParent && cabinetParent.topCabinet\r\n && !cabinetParent.topCabinet.allFeaturesReceived) || (cabinetParent && cabinetParent.bottomCabinet\r\n && !cabinetParent.bottomCabinet.allFeaturesReceived);\r\n if (noCabinets && (document.kvConfig.visualizerType !== \"kvScene\")) {\r\n const neededParts = [\"top_cabinet\", \"bottom_cabinet\"];\r\n const allRelated = cabinetParent.relatedItems.filter((relatedItem) => {\r\n return neededParts.includes(relatedItem.partId) && !relatedItem.allFeaturesReceived\r\n });\r\n const promises = allRelated.map((relatedItem) => {\r\n return getBvGroupFeatures(relatedItem.dbName || relatedItem.partName).then(response => {\r\n relatedItem.setGroupFeatures(Array.isArray(response) ? response : []);\r\n return response\r\n })\r\n });\r\n Promise.all(promises)\r\n .then(() => this.finishPresetLoading(layout, defaultPreset))\r\n } else {\r\n loaderEnable();\r\n this.finishPresetLoading(layout, defaultPreset);\r\n }\r\n });\r\n };\r\n\r\n finishPresetLoading = (layout, preset) => {\r\n layout.setItemsFromBvState(preset)\r\n .then(() => {\r\n window.requestInProcess = false;\r\n loaderDisable();\r\n });\r\n }\r\n\r\n handleUserLoginClick = (userPopupType = UserPopupTypes.Unlock) => {\r\n this.props.toggleUserPopup({\r\n userPopupOpened: true,\r\n userPopupType\r\n });\r\n };\r\n\r\n currentActiveItemIsLocked = (useWizard) => {\r\n\r\n const {visualizerManagement, isBackend, jobId, canSaveQuote} = document.kvConfig;\r\n const {fabricatorSettings, isPhoneNumberValidated, activeFeature, filterGroups, activeQuoteIndex} = this.props;\r\n const {showFeatureWizard, wizardActiveItemIsLocked} = this.state;\r\n\r\n if (!fabricatorSettings.leadCapture\r\n || (fabricatorSettings.leadCapture && visualizerManagement)\r\n || (fabricatorSettings.leadCapture && isPhoneNumberValidated)\r\n || (fabricatorSettings.leadCapture && (isBackend && jobId && canSaveQuote))){\r\n return false\r\n }\r\n\r\n const itemHasLockedFilters = () => {\r\n let lockedFilters = false;\r\n const filterValues = activeFeature && activeFeature.dbFeature && activeFeature.dbFeature.filterValueIDs;\r\n if (filterValues) {\r\n lockedFilters = Object.keys(filterValues).some((filterKey) => {\r\n const filterGroup = filterGroups.find(group => group.id === +filterKey);\r\n const filterValue = filterGroup && filterGroup.values && filterGroup.values.find(value => value.id === filterValues[filterKey][0]);\r\n return filterValue && filterValue.lockedInWizard\r\n });\r\n }\r\n return lockedFilters\r\n };\r\n\r\n return (\r\n activeFeature\r\n && activeFeature.getParent().firstClick[activeQuoteIndex]\r\n && activeFeature.dbFeature\r\n && !activeFeature.dbFeature.unlocked\r\n && !activeFeature.notAvailableInVisualizer\r\n && !(useWizard && showFeatureWizard)\r\n ) || (useWizard && showFeatureWizard && wizardActiveItemIsLocked) || itemHasLockedFilters()\r\n };\r\n\r\n checkedForLockedPresets = () => {\r\n // const layout_typelayout_type: 1\r\n const layout = getCurrentLayout();\r\n const fabricatorSettings = this.props.fabricatorSettings;\r\n const showSmallRoomLayout = fabricatorSettings &&\r\n (fabricatorSettings.showSmallDesignForClients\r\n || (fabricatorSettings.showSmallDesignFromDashboard && document.kvConfig.isBackend));\r\n return Array.isArray(this.props.bvPresets) && this.props.bvPresets.length\r\n ? this.props.bvPresets\r\n .filter(preset => {\r\n if (!showSmallRoomLayout && (document.kvConfig.visualizerType === \"Bathroom\"\r\n || document.kvConfig.visualizerType === \"BV\")) {\r\n return preset.layout_type !== 0\r\n }\r\n return preset\r\n })\r\n .map((preset) => {\r\n if (preset.presetUnlocked) {\r\n preset.presetIsLocked = false\r\n } else {\r\n preset.presetIsLocked = this.props.fabricatorSettings.leadCapture\r\n && !(document.kvConfig.isBackend && document.kvConfig.jobId && document.kvConfig.canSaveQuote)\r\n && !this.props.isPhoneNumberValidated && (!preset.presetUnlocked || layout.bvStateHasLockedItems(preset))\r\n }\r\n // console.log(\"preset.presetIsLocked\", preset.presetIsLocked);\r\n return preset\r\n }).sort((a, b) => a.presetIsLocked !== b.presetIsLocked ? a.presetIsLocked < b.presetIsLocked ? -1 : 1 : 0) // sort by presetIsLocked\r\n : []\r\n };\r\n\r\n closeContextMenu = () => {\r\n this.setState({\r\n contextMenuOpen: false,\r\n })\r\n };\r\n\r\n /*** WIZARD ***/\r\n\r\n exitFeatureWizard = (wizardGroups, partId) => {\r\n this.setState({\r\n wizardStepIndex: 0,\r\n showFeatureWizard: false,\r\n wizardActiveItemIsLocked: false,\r\n searchText: \"\"\r\n });\r\n this.setWizardGroups(wizardGroups, partId);\r\n };\r\n\r\n enableFeatureWizard = (wizardStepIndex) => {\r\n this.setState({\r\n wizardStepIndex,\r\n showerWallWizardGroupsSelected: wizardStepIndex !== 0\r\n }, () => {\r\n this.setState({\r\n showFeatureWizard: true,\r\n })\r\n });\r\n };\r\n\r\n setWizardStepIndex = (wizardStepIndex) => {\r\n this.setState({\r\n wizardStepIndex\r\n })\r\n };\r\n\r\n setWizardGroups = (wizardGroups, partId) => {\r\n const wizardGroupsName = this.getWizardGroupsByPartId(partId);\r\n this.setState({\r\n [wizardGroupsName]: this.state[wizardGroupsName].map((wizardGroup) => {\r\n const currentGroup = wizardGroups.find(wGroup => wGroup.filterName === wizardGroup.filterName);\r\n if (currentGroup) {\r\n wizardGroup.selectedValueId = currentGroup.selectedValueId;\r\n wizardGroup.selectedValueName = currentGroup.selectedValueName;\r\n wizardGroup.hidden = currentGroup.hidden;\r\n wizardGroup.values = currentGroup.values;\r\n }\r\n return wizardGroup\r\n })\r\n })\r\n };\r\n\r\n setWizardLockedItem = (itemIsLocked) => {\r\n this.setState({\r\n wizardActiveItemIsLocked: itemIsLocked\r\n })\r\n };\r\n\r\n resetActiveFeature = () => {\r\n this.props.setActiveFeature(null);\r\n this.setState({\r\n wizardActiveItemIsLocked: false\r\n })\r\n };\r\n\r\n resetWizardSteps = () => {\r\n this.setState({\r\n vanityWizardGroups: vanityWizardFilters.map((filterName) => { // filterGroupsId's & their selected values\r\n return {\r\n filterName,\r\n selectedValueId: null,\r\n selectedValueName: \"\",\r\n hidden: filterName === \"Material\"\r\n }\r\n }),\r\n showerWallWizardGroups: showerWizardFilters.map((filterName) => {\r\n const wizardFilters = [\"SlabColor\", \"TileColor\", \"TilePattern\", \"AcrylicPattern\", \"AcrylicColor\"];\r\n return {\r\n filterName,\r\n selectedValueId: null,\r\n selectedValueName: \"\",\r\n hidden: wizardFilters.includes(filterName)\r\n }\r\n }),\r\n showFeatureWizard: true,\r\n wizardStepIndex: 0,\r\n wizardActiveItemIsLocked: false,\r\n })\r\n };\r\n\r\n getWizardGroupsByPartId = (partId) => {\r\n switch (partId) {\r\n case \"vanity_cabinet\":\r\n return \"vanityWizardGroups\";\r\n case \"shower_interior_wall\":\r\n return \"showerWallWizardGroups\";\r\n default:\r\n return \"\";\r\n }\r\n };\r\n\r\n getFilterDisplayName = (filterName, intl = null) => {\r\n switch (filterName) {\r\n case \"DoorStyle\":\r\n return intl ? intl.formatMessage({id: \"Door Style\"}) : \"Door Style\"\r\n case \"Material\":\r\n return intl\r\n ? intl.formatMessage({id: this.state.childNavigationItem.part.partId === \"vanity_cabinet\" ? \"WoodType\" : \"Material\"})\r\n : this.state.childNavigationItem.part.partId === \"vanity_cabinet\" ? \"Wood Type\" : \"Material\";\r\n case \"AcrylicColor\":\r\n case \"DuraBathColor\":\r\n case \"SlabColor\":\r\n case \"TileColor\":\r\n return intl ? intl.formatMessage({id: \"Color\"}) : \"Color\";\r\n case \"AcrylicPattern\":\r\n return intl ? intl.formatMessage({id: \"Pattern\"}) : \"Pattern\";\r\n default:\r\n return intl ? intl.formatMessage({id: filterName}) : filterName\r\n }\r\n };\r\n\r\n removeFilterSelection = () => {\r\n this.setState({\r\n showFilterSelection: false\r\n })\r\n };\r\n\r\n toggleWizardFilterSelection = (showerWallWizardGroupsSelected) => {\r\n this.setState({\r\n showerWallWizardGroupsSelected\r\n })\r\n };\r\n\r\n setWizardFiltersFromActiveItem = (activeFeature) => {\r\n\r\n const {fabricatorSettings} = this.props;\r\n const useWizard = fabricatorSettings && (fabricatorSettings.wizardConsumers || (fabricatorSettings.wizardClients && document.kvConfig.isBackend));\r\n\r\n if (useWizard) {\r\n const currentActiveFilters = activeFeature.dbFeature.filterValueIDs;\r\n const partId = this.state.childNavigationItem.part.partId;\r\n const wizardGroupsName = this.getWizardGroupsByPartId(partId);\r\n\r\n let wizardGroups = this.state[wizardGroupsName].map((wizardGroup) => {\r\n if (partId === \"vanity_cabinet\") {\r\n const filterGroup = this.props.filterGroups.find(filterGroup => {\r\n return filterGroup.name === wizardGroup.filterName\r\n });\r\n let filterGroupValue = {};\r\n if (filterGroup && currentActiveFilters[filterGroup.id]) {\r\n const selectedFilterValueId = currentActiveFilters[filterGroup.id][0];\r\n filterGroupValue = filterGroup && filterGroup.values.find(filterGroupValue => {\r\n return filterGroupValue.id === selectedFilterValueId\r\n });\r\n }\r\n // console.log('filterGroupValue', filterGroupValue);\r\n if (wizardGroup.filterName === \"Material\") { // check for existing BV filters\r\n const doorStyleFilter = this.props.filterGroups.find(filterGroup => filterGroup.name.trim() === \"DoorStyle\");\r\n if (doorStyleFilter) {\r\n const doorStyleActiveValue = currentActiveFilters[doorStyleFilter.id];\r\n const doorStyleFilterValue = doorStyleFilter.values.find(filterObj => {\r\n return doorStyleActiveValue && filterObj.id === doorStyleActiveValue[0]\r\n });\r\n // console.log('doorStyleFilterValue', doorStyleFilterValue);\r\n wizardGroup.hidden = filterGroupValue && doorStyleFilterValue && !NotQCVanityDoorStylesFilters.includes(doorStyleFilterValue.value);\r\n }\r\n }\r\n } else if (partId === \"shower_interior_wall\") {\r\n const stepName = wizardGroup.filterName.toLowerCase();\r\n const materialFilter = this.props.filterGroups.find(filterGroup => filterGroup.name.trim() === \"Material\");\r\n if (Object.keys(currentActiveFilters).length && materialFilter && currentActiveFilters[materialFilter.id]) { // check for existing BV filters\r\n const materialValueId = currentActiveFilters[materialFilter.id][0];\r\n const materialValue = materialFilter.values.find(val => val.id === materialValueId);\r\n // console.log('materialValue.value', materialValue.value);\r\n wizardGroup.hidden = (materialValue && (\r\n (materialValue.value !== \"DuraBath\" && stepName === \"durabathcolor\")\r\n || (materialValue.value !== \"DuraBath\" && materialValue.value !== \"Tile\" && stepName === \"tilepattern\")\r\n || (materialValue.value !== \"Acrylic\" && stepName === \"acrylicpattern\")\r\n || (materialValue.value !== \"Acrylic\" && stepName === \"acryliccolor\")\r\n || (materialValue.value !== \"Tile\" && stepName === \"tilecolor\")\r\n || (materialValue.value !== \"Slab\" && stepName === \"slabcolor\")\r\n ))\r\n }\r\n }\r\n return wizardGroup\r\n });\r\n\r\n this.setState({\r\n [wizardGroupsName]: wizardGroups\r\n });\r\n }\r\n };\r\n\r\n /*** WIZARD END ***/\r\n\r\n setNavigationFilterIfTheChildWasChanged(childNavigationItemPartId, activeNavigationFilter) {\r\n if (this.props.setActiveNavigationFilter && !activeNavigationFilter) {\r\n if (childNavigationItemPartId === \"edge_profile\"\r\n || childNavigationItemPartId === \"center_island_edge\"\r\n && this.props.activeNavigationFilter !== COUNTERTOP_WIZARD_BUTTONS[3].buttonId) {\r\n this.props.setActiveNavigationFilter(COUNTERTOP_WIZARD_BUTTONS[3].buttonId);\r\n this.props.setActiveNavigationFilterStepIndex(3);\r\n } else if (childNavigationItemPartId === \"countertop\"\r\n || childNavigationItemPartId === \"center_island_countertop\"\r\n && (\r\n this.props.activeNavigationFilter !== COUNTERTOP_WIZARD_BUTTONS[0].buttonId\r\n || this.props.activeNavigationFilter !== COUNTERTOP_WIZARD_BUTTONS[1].buttonId\r\n || this.props.activeNavigationFilter !== COUNTERTOP_WIZARD_BUTTONS[2].buttonId\r\n )){\r\n this.props.setActiveNavigationFilter(COUNTERTOP_WIZARD_BUTTONS[0].buttonId);\r\n this.props.setActiveNavigationFilterStepIndex(0);\r\n } else if (childNavigationItemPartId === \"backsplash\"\r\n && !(this.props.activeNavigationFilter !== COUNTERTOP_WIZARD_BUTTONS[4].buttonId)) {\r\n this.props.setActiveNavigationFilter(COUNTERTOP_WIZARD_BUTTONS[4].buttonId);\r\n this.props.setActiveNavigationFilterStepIndex(4);\r\n }\r\n }\r\n }\r\n\r\n showPositionsPopup = (item, event) => {\r\n const itemParent = item.part.getParent ? item.part.getParent() : null;\r\n const featureIsLocked = getFeatureIsLocked(item.part);\r\n if (itemParent && !item.part.notAvailableInVisualizer && !featureIsLocked\r\n && this.props.toggleNavItemPositionModal && itemParent.showLayerPositionsModal\r\n && itemParent.showLayerPositionsModal(item.part) && event) {\r\n const eventPosition = getEventPosition(event);\r\n this.props.toggleNavItemPositionModal({\r\n popupOpened: true,\r\n popupPosition: {\r\n left: eventPosition.x,\r\n top: eventPosition.y\r\n },\r\n activePartId: item.part.partId,\r\n });\r\n $(window).trigger(ActionTypes.UPDATE_ALL_ITEMS); // update buttons\r\n return true\r\n } else if (this.props.navItemPositionModal && this.props.navItemPositionModal.popupOpened) {\r\n this.props.toggleNavItemPositionModal({\r\n popupOpened: false,\r\n });\r\n }\r\n return false\r\n }\r\n\r\n}\r\n","import {Part} from \"../part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport {countertopGroupThumbnail} from \"../assets\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\n\r\nimport Sink from \"../subparts/countertop/sink\";\r\nimport Faucet from \"../subparts/countertop/faucet\";\r\nimport Countertop from \"../subparts/countertop/countertop\";\r\nimport EdgeProfile from \"../subparts/countertop/edgeProfile\";\r\nimport Cutouts from \"../subparts/countertop/cutouts\";\r\nimport Radius from \"../subparts/countertop/radius\";\r\nimport {PLACEMENTS} from \"../../../kvComponent/core/constants\";\r\n\r\nexport default class CountertopGroup extends Part {\r\n static id = 'Countertop';\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Countertop';\r\n this.partThumbnail = countertopGroupThumbnail;\r\n this.translateId = \"visualizer.kitchen.countertop\";\r\n\r\n // related items\r\n this.sink = null;\r\n this.faucet = null;\r\n this.countertop = null;\r\n this.edgeProfile = null;\r\n this.relatedGroupNames = [\"Faucet\", \"Sink\", \"Countertop\", \"Edge Profile\", \"Cutouts\", \"Radius\"];\r\n }\r\n\r\n load(dbFeature, loadFeature = true) {\r\n let relatedItemName = \"\",\r\n shouldLoadInDifferentGroups = false,\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Sink\":\r\n case \"Farnhousesink\":\r\n if (loadFeature && dbFeature.metaData && dbFeature.metaData[\"Placement\"] && dbFeature.metaData[\"Placement\"].includes(PLACEMENTS.Island)) {\r\n break;\r\n }\r\n shouldLoadInDifferentGroups = true;\r\n relatedItemName = \"sink\";\r\n RelatedItemClass = Sink;\r\n break;\r\n case \"Faucet\":\r\n if (loadFeature && dbFeature.metaData && dbFeature.metaData[\"Placement\"] && dbFeature.metaData[\"Placement\"].includes(PLACEMENTS.Island)) {\r\n break;\r\n }\r\n shouldLoadInDifferentGroups = true;\r\n relatedItemName = \"faucet\";\r\n RelatedItemClass = Faucet;\r\n break;\r\n case \"Countertop\":\r\n relatedItemName = \"countertop\";\r\n RelatedItemClass = Countertop;\r\n break;\r\n case \"Edge Profile\":\r\n case \"Edge\":\r\n shouldLoadInDifferentGroups = true;\r\n relatedItemName = \"edgeProfile\";\r\n RelatedItemClass = EdgeProfile;\r\n break;\r\n case \"Cutouts\":\r\n case \"cutouts\":\r\n relatedItemName = \"cutouts\";\r\n RelatedItemClass = Cutouts;\r\n break;\r\n case \"Radius\":\r\n relatedItemName = \"radius\";\r\n RelatedItemClass = Radius;\r\n break;\r\n }\r\n return this.loadCommon(relatedItemName, RelatedItemClass, dbFeature, loadFeature, shouldLoadInDifferentGroups)\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n handleSubPartClick() {\r\n\r\n }\r\n\r\n subParts(withHidden = true, hideWithoutFeatures = false) {\r\n return this.getRelatedItems()\r\n .filter(item => {\r\n if (hideWithoutFeatures && (item.partId === \"cutouts\" || item.partId === \"radius\")) {\r\n return false\r\n }\r\n return this.filterRelatedItem(item, withHidden)\r\n })\r\n .map(_ => new DesignNavigationItem(_.partName, _));\r\n }\r\n\r\n setSpecificRules() {\r\n if (this.edgeProfile) {\r\n this.edgeProfile.setEdgeNotInVisualizer()\r\n }\r\n }\r\n\r\n}\r\n","import {getSaveJobData} from \"./saveJobData\";\r\nimport {postSaveJob, postScheduleAppointment} from \"../api/job-api\";\r\nimport {getSaveAppointmentData} from \"./saveAppointmentData\";\r\nimport {registerUser, updateUser} from \"../api/user\";\r\nimport {setRegisteredUserData, setUserInfo} from \"../userLogic/userActions\";\r\n\r\nexport const SET_LOADING = \"SET_LOADING\";\r\nexport const EXPAND_FOOTER_INFO = \"EXPAND_FOOTER_INFO\";\r\nexport const SET_LEAD_POPUP = \"SET_LEAD_POPUP\";\r\nexport const ALLOW_SAVING_JOB_ON_INPUT_STEP = \"ALLOW_SAVING_JOB_ON_INPUT_STEP\";\r\nexport const SET_JOB_SAVED = \"SET_JOB_SAVED\";\r\nexport const SET_FOOTER_INFO_BUTTON_TEXT = \"SET_FOOTER_INFO_BUTTON_TEXT\";\r\nexport const setLoading = (isLoading, faradayLoading = false) => ({\r\n type: SET_LOADING,\r\n payload: {isLoading, faradayLoading}\r\n});\r\nexport const expandFooterInfo = (footerInfoExpanded = false) => ({\r\n type: EXPAND_FOOTER_INFO,\r\n payload: {footerInfoExpanded}\r\n});\r\nexport const setFooterInfoButtonText = (footerInfoButtonText = \"\") => ({\r\n type: EXPAND_FOOTER_INFO,\r\n payload: {footerInfoButtonText}\r\n});\r\nexport const setLeadPopup = (leadPopup) => ({\r\n type: SET_LEAD_POPUP,\r\n payload: leadPopup\r\n});\r\n\r\nexport const setJobSaved = (jobData) => ({\r\n type: SET_JOB_SAVED,\r\n payload: jobData\r\n});\r\n\r\nexport const setAllowJobSavingOnInputStep = () => ({\r\n type: ALLOW_SAVING_JOB_ON_INPUT_STEP,\r\n});\r\n\r\nconst someUserInfoIsDifferent = (userInfo, registeredUser) => {\r\n return Object.keys(registeredUser).some(key => registeredUser[key] !== userInfo[key])\r\n}\r\n\r\nexport const saveJobAction = (isDelayedSave = false) => {\r\n return async (dispatch, getState) => {\r\n const store = getState();\r\n const {appointmentDate} = store.appointmentState;\r\n const {userInfo, registeredUser} = store.userState;\r\n\r\n if (!userInfo.isLoggedIn) {\r\n // 1) register user\r\n const registered = await registerUser(store);\r\n console.log(\"registered\", registered);\r\n if (registered && registered.data) {\r\n dispatch(setRegisteredUserData(registered.data.email, registered.data.authToken));\r\n }\r\n dispatch(setUserInfo(\"isLoggedIn\", true));\r\n } else if (someUserInfoIsDifferent(userInfo, registeredUser)) {\r\n // 1.5) update user info\r\n const updatedCustomer = await updateUser(store);\r\n if (updatedCustomer && updatedCustomer.data && updatedCustomer.data.success) {\r\n dispatch(setRegisteredUserData(store.userState.userInfo.email, updatedCustomer.data.token));\r\n }\r\n }\r\n\r\n // 2) save job\r\n // getState() needed here to have registered email\r\n const saveJobResponse = await postSaveJob(getSaveJobData(getState(), isDelayedSave));\r\n\r\n if (!saveJobResponse || !saveJobResponse.data) {\r\n console.error(\"job wasn't saved\", saveJobResponse);\r\n return\r\n }\r\n\r\n // 3) set appointment\r\n if (appointmentDate && saveJobResponse.data.jobId) { // check fab setting here if needed\r\n await postScheduleAppointment(getSaveAppointmentData(store, saveJobResponse.data.jobId));\r\n }\r\n\r\n dispatch(setJobSaved({jobId: saveJobResponse.data.jobId}));\r\n }\r\n}\r\n\r\n// if (registered.data && registered.data.isEmailTaken && registered.data.errorUserMatch) {\r\n// visitContextDispatch(visitContextAction({\r\n// popup: Object.assign({}, visitContextState.popup, {\r\n// visible: true,\r\n// text: \"This email already exists in the system. Would you like to add your quote to this customer?\",\r\n// buttons: [{\r\n// text: \"No\",\r\n// onClick: () => {\r\n// visitContextDispatch(visitContextAction({\r\n// popup: Object.assign({}, visitContextState.popup, {visible: false})\r\n// }));\r\n// }\r\n// }, {\r\n// text: \"Yes\",\r\n// onClick: () => {\r\n// // here we can take some info from already registered user\r\n// visitContextDispatch(visitContextAction({\r\n// popup: Object.assign({}, visitContextState.popup, {visible: false})\r\n// }));\r\n// visitContextDispatch(visitContextChangeFormAction(\"isLoggedIn\", true, \"contact\"));\r\n// switchToAppointmentPage();\r\n// }\r\n// }],\r\n// })\r\n// }))\r\n// return false\r\n// }\r\n","import {getNextWizardSteps} from \"./wizardLogicOld\";\r\n\r\nexport const LEAD_WIZARD_GROUP_TYPES = {\r\n group: \"group\",\r\n filter: \"filter\",\r\n custom: \"custom\",\r\n inputs: \"inputs\",\r\n contact: \"contact\",\r\n appointment: \"appointment\",\r\n review: \"review\",\r\n success: \"success\",\r\n}\r\n\r\n/**\r\n * this returns new wizard steps depending on the current selection\r\n * @param wizardActiveItem {wizardItemInterface}\r\n * @param currentStep {number}\r\n * @param wizardSelectedValues {object}\r\n * @returns {object}\r\n */\r\nexport const getLeadFormSteps = (wizardActiveItem, currentStep, wizardSelectedValues) => {\r\n const wizardSteps = getNextWizardSteps(wizardActiveItem, currentStep, wizardSelectedValues);\r\n // console.log(\"wizardSteps\", wizardSteps);\r\n let leadFormSteps = [];\r\n wizardSteps.forEach(step => {\r\n if (step.stepGroups.length && step.stepGroups[0].leadStep) {\r\n let existingLeadStepObject = leadFormSteps.find(leadStepObject => {\r\n return leadStepObject.leadStepName === step.stepGroups[0].leadStep\r\n });\r\n if (!existingLeadStepObject) {\r\n existingLeadStepObject = {\r\n leadStepName: step.stepGroups[0].leadStep,\r\n leadStepUrl: step.stepGroups[0].leadStepUrl,\r\n leadSubSteps: []\r\n }\r\n leadFormSteps.push(existingLeadStepObject);\r\n }\r\n existingLeadStepObject.leadSubSteps.push({\r\n stepIndex: step.stepIndex,\r\n wizardGroup: step.stepGroups[0], // not needed for now\r\n });\r\n }\r\n })\r\n // const leadFormSteps = wizardSteps.reduce((total, step) => {\r\n // if (step.stepGroups.length && step.stepGroups[0].leadStep && !total.includes(step.stepGroups[0].leadStep)) {\r\n // total.push(step.stepGroups[0].leadStep)\r\n // }\r\n // return total\r\n // }, []);\r\n return leadFormSteps\r\n}\r\n\r\n/**\r\n * this returns lowercased url\r\n * @param leadStepName {string}\r\n * @returns {string}\r\n */\r\nexport const getUrlLeadStepName = (leadStepName = \"\") => {\r\n if (!leadStepName) {\r\n return \"\"\r\n }\r\n return leadStepName.toLowerCase().replace(/ /g,\"-\")\r\n}\r\n","import React from \"react\";\r\nimport orderBy from \"lodash/orderBy\";\r\nimport throttle from \"lodash/throttle\";\r\nimport clone from \"lodash/clone\";\r\nimport $ from 'jquery';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport Misc from './../../misc/misc';\r\nimport ActionTypes from \"./../../misc/actionTypes\";\r\nimport {getMousePos, getTranslateX, requestAnimFrame, isTouchDevice} from \"../../misc/utils\";\r\nimport {makeHoveringLayer} from \"../../misc/imageHovering\";\r\nimport {getEventPosition, isIE} from \"../../misc/helpers\";\r\nimport PinchZoom from \"../../lib/pinch-zoom\";\r\nimport {loaderEnable, loaderDisable} from \"../ui/loaderView\";\r\nimport enhanceCanvas from \"./canvasEnhancements\";\r\nimport Config, {IS_LIXIL_UI} from \"../../config\";\r\nimport {checkForLayerParts} from \"./canvasCheckForLayerParts\";\r\nimport {hardCodelyRemovedClicking} from \"../look/lookNavigation/lookFunctions2\";\r\nimport {VISUALIZER_MANAGEMENT_ACTIONS} from \"../../misc/constants\";\r\n// import {UseFullSizeImages} from \"../../config\";\r\n\r\n// import { getHoverZonesForPreset, getHoveringZone, hoverImages } from \"./imageCanvasTouchZones\";\r\n\r\nexport default class ImageCanvasCommon extends React.Component {\r\n static propTypes = {\r\n layers: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n layoutType: PropTypes.string.isRequired,\r\n width: PropTypes.number.isRequired,\r\n height: PropTypes.number.isRequired,\r\n canvasId: PropTypes.string.isRequired,\r\n useMouseHovering: PropTypes.bool,\r\n useTouchZoom: PropTypes.bool,\r\n enableLoader: PropTypes.func,\r\n disableLoader: PropTypes.func,\r\n setShowCanvasLoader: PropTypes.func,\r\n lookCanvasClick: PropTypes.func,\r\n transform: PropTypes.string,\r\n fabricatorData: PropTypes.object,\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n this.canvas = null;\r\n this.state = {\r\n mouseMoveSet: false,\r\n dimensions: {\r\n width: props.width,\r\n height: props.height\r\n },\r\n hoverZones: {},\r\n layers: [],\r\n layersHoverings: [],\r\n // layersHoveringsCached: [],\r\n imagesRendered: [],\r\n backgroundLayers: [],\r\n backgroundImages: [],\r\n allowPropsLayers: true,\r\n };\r\n this.id = 0;\r\n this.ctx = null;\r\n this.backCtx = null;\r\n this.resizedCanvas = null;\r\n this.resizedContext = null;\r\n this.timeout = 0;\r\n this.canvas_scale = 1;\r\n this.shouldUpdateGreenZone = false;\r\n this.pinchZoom = null;\r\n this.x = 0;\r\n this.y = 0;\r\n this.delta = 0;\r\n this.statusSwipe = false;\r\n this.detectedSwipeLeft = false;\r\n this.detectedSwipeRight = false;\r\n this.currentTranslate = 0;\r\n this.navBreakPoint = 991;\r\n this.activeGreenZoneIndex = null;\r\n /*** background canvas ***/\r\n this.canvasBg = null;\r\n this.backCtxBg = null;\r\n /*** background canvas end ***/\r\n }\r\n\r\n componentDidMount() {\r\n const {width, height} = this.props;\r\n this.ctx = this.canvas.getContext('2d');\r\n const c = document.createElement('canvas');\r\n c.width = width;\r\n c.height = height;\r\n this.backCtx = c.getContext('2d');\r\n this.resizedCanvas = document.createElement(\"canvas\");\r\n this.resizedContext = this.resizedCanvas.getContext(\"2d\");\r\n\r\n /*** background canvas ***/\r\n this.canvasBg = document.createElement('canvas');\r\n this.canvasBg.width = width;\r\n this.canvasBg.height = height;\r\n this.backCtxBg = this.canvasBg.getContext('2d');\r\n this.backCtxBg.globalCompositeOperation = \"lighten\";\r\n /*** background canvas end ***/\r\n\r\n $(window).on('resize', this.handleOrientationChange);\r\n this.handleOrientationChange();\r\n $(window).on('setPinchZoom', this.createPinchZoom);\r\n if (window.setPinchZoom || IS_LIXIL_UI) {\r\n this.createPinchZoom();\r\n }\r\n $(window).on(ActionTypes.REMOVE_GREEN_ZONE_ON_CANVAS, (event, callback) => {\r\n this.draw(this.state.layers, callback);\r\n });\r\n\r\n if (Config.isVisualizerManagement()) {\r\n window.addEventListener(\"message\", (event) => {\r\n if (event.data && (event.data.action === VISUALIZER_MANAGEMENT_ACTIONS.getState\r\n || event.data.action === VISUALIZER_MANAGEMENT_ACTIONS.checkState)) {\r\n this.draw(this.state.layers)\r\n }\r\n })\r\n }\r\n if (this.props.layers.length && this.state.allowPropsLayers) {\r\n this.drawPropsLayers();\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n $(window).off('resize', this.handleOrientationChange);\r\n $(window).off('setPinchZoom', this.createPinchZoom);\r\n $(window).off(ActionTypes.GET_CANVAS_SCALE);\r\n $(window).off(ActionTypes.RESET_CANVAS);\r\n $(window).off(ActionTypes.ENABLE_PINCH_ZOOM);\r\n $(window).off(ActionTypes.DISABLE_PINCH_ZOOM);\r\n $(window).off(ActionTypes.REMOVE_GREEN_ZONE_ON_CANVAS);\r\n }\r\n\r\n drawPropsLayers = () => {\r\n this.setState({\r\n layers: this.props.layers\r\n });\r\n this.shouldUpdateGreenZone = true;\r\n this.draw(this.props.layers, this.props.useMouseHovering ? this.updateGliaCanvasImage : null);\r\n };\r\n\r\n createPinchZoom = () => {\r\n if ((Misc.isMobile() || isTouchDevice() || Config.isVisualizerManagement() || IS_LIXIL_UI) && this.props.useTouchZoom && !this.pinchZoom) {\r\n this.pinchZoom = new PinchZoom(this.canvas, {canUseUpdate: this.props.useTouchZoom});\r\n $(window).on(ActionTypes.RESET_CANVAS, () => {\r\n // $('.canvas-text').html('xxx');\r\n this.pinchZoom.reset();\r\n });\r\n $(window).on(ActionTypes.ENABLE_PINCH_ZOOM, () => {\r\n this.pinchZoom.enable();\r\n });\r\n $(window).on(ActionTypes.DISABLE_PINCH_ZOOM, () => {\r\n this.pinchZoom.disable();\r\n });\r\n if (this.props.updateLookCanvas) {\r\n this.props.updateLookCanvas();\r\n }\r\n }\r\n // const dashboardFramed = Config.isVisualizerManagement();\r\n };\r\n\r\n componentWillReceiveProps(nextProps) {\r\n const onlyLayers = nextProps.layers.filter((layer) => {\r\n return !layer.image.includes(\"/static\")\r\n });\r\n const onlyStateLayers = this.state.layers.filter((layer) => {\r\n return !layer.image.includes(\"/static\")\r\n });\r\n\r\n let needToUpdateCanvas = onlyLayers.length !== onlyStateLayers.length,\r\n i = 0;\r\n\r\n if (!needToUpdateCanvas && onlyLayers.length && onlyStateLayers.length) {\r\n for (i; i < onlyLayers.length; i++) {\r\n if (onlyLayers[i].zIndex !== onlyStateLayers[i].zIndex || onlyLayers[i].image !== onlyStateLayers[i].image) {\r\n needToUpdateCanvas = true;\r\n // console.log('break on ' + i + ' element');\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (nextProps.layers.length && this.state.allowPropsLayers) {\r\n this.setState({\r\n layers: nextProps.layers\r\n });\r\n // if (this.state.mouseMoveSet) {\r\n // this.setLayersHoverings(nextProps.layers);\r\n // }\r\n }\r\n\r\n if (needToUpdateCanvas && this.state.allowPropsLayers) {\r\n this.shouldUpdateGreenZone = true;\r\n this.draw(nextProps.layers, this.props.useMouseHovering ? this.updateGliaCanvasImage : null);\r\n }\r\n }\r\n\r\n handleOrientationChange = () => {\r\n const canvas = $(this.canvas);\r\n const canvasWidth = canvas.width();\r\n const canvasHeight = canvas.height();\r\n const fromDesktopToMobile = this.state.dimensions.width > this.navBreakPoint && canvasWidth < this.navBreakPoint;\r\n const fromMobileToDesktop = this.state.dimensions.width < this.navBreakPoint && canvasWidth > this.navBreakPoint;\r\n this.setState({\r\n dimensions: {\r\n width: canvasWidth,\r\n height: canvasHeight,\r\n layersHoverings: (fromDesktopToMobile || fromMobileToDesktop) ? [] : this.state.layersHoverings, // recreate layersHoverings\r\n }\r\n });\r\n };\r\n\r\n imageCanvasScroll = (canvasClass, removeAllClasses) => {\r\n if (!window.canvasIsDragging && this.pinchZoom) {\r\n this.pinchZoom.reset();\r\n // $('.canvas-text').html($('.canvas-text').html() + canvasClass);\r\n this.pinchZoom.imageCanvasScroll(\r\n canvasClass.toLowerCase().replace(\" \", \"-\"),\r\n removeAllClasses,\r\n this.props.layoutType,\r\n this.props.layoutScene\r\n );\r\n }\r\n };\r\n\r\n layerIsExcludedFromHover = (layer) => {\r\n const {layout} = this.props;\r\n if (Array.isArray(layout.disabledClickablePartIds) && layout.disabledClickablePartIds.includes(layer.partId)) {\r\n return true\r\n }\r\n if (hardCodelyRemovedClicking(layer.partId, layout, this.props.fabricatorData)) {\r\n return true\r\n }\r\n return layout.excludedPartIdsFromHover\r\n ? layer.partId && layout.excludedPartIdsFromHover.some(partId => partId === layer.partId || layer.partId.indexOf(partId) > -1)\r\n : layout.excludedIndexesFromHover\r\n ? layout.excludedIndexesFromHover(this.props.layoutType).includes(layer.zIndex)\r\n : false\r\n }\r\n\r\n setLayersHoverings = (layers, images, errorImages) => {\r\n\r\n let layersHoverings = this.state.layersHoverings, i;\r\n // console.log('this.state.layersHoverings-->', this.state.layersHoverings);\r\n // console.log('layers', layers);\r\n\r\n const {layout} = this.props;\r\n\r\n layers.forEach((layer, index) => {\r\n\r\n // console.log('setLayersHovering:', layer);\r\n\r\n const excludedLayer = this.layerIsExcludedFromHover(layer, layout);\r\n\r\n if (!layer.isGreenHovering && !excludedLayer) {\r\n // search for current layer zIndex\r\n const existingGreenLayerHoveringIndex = layersHoverings.findIndex((layerHovering) => {\r\n return layerHovering ? layerHovering.layer.zIndex === layer.zIndex : 0\r\n });\r\n\r\n const getHoveringLayer = () => {\r\n return makeHoveringLayer(layer, images[index], this.props.layoutType, {\r\n width: this.props.width,\r\n height: this.props.height\r\n }, this.props.fabricatorData)\r\n }\r\n\r\n // if it exist & name is different - change it(simple layer replace)\r\n if (existingGreenLayerHoveringIndex > -1) {\r\n if (layer.image !== this.state.layersHoverings[existingGreenLayerHoveringIndex].layer.image\r\n && images[index] && !errorImages.includes(images[index].src)) {\r\n const hoveringLayer = getHoveringLayer();\r\n if (hoveringLayer) {\r\n layersHoverings.splice(existingGreenLayerHoveringIndex, 1, hoveringLayer)\r\n }\r\n }\r\n } else {\r\n if (images[index] && !errorImages.includes(images[index].src)) {\r\n const hoveringLayer = getHoveringLayer();\r\n if (hoveringLayer) {\r\n layersHoverings.push(hoveringLayer) // simple push\r\n }\r\n } else {\r\n console.info(\"makeHoveringLayer failed! no image for layer\", index);\r\n }\r\n }\r\n }\r\n });\r\n\r\n for (i = 0; i < layersHoverings.length; ++i) { // go over new green layers, and remove redundant\r\n const notNeededMoreLayerIndex = layers.findIndex((layer) => {\r\n return layer.zIndex === layersHoverings[i].layer.zIndex\r\n });\r\n if (notNeededMoreLayerIndex === -1) {\r\n layersHoverings.splice(i, 1);\r\n --i; // Correct the index value\r\n }\r\n }\r\n\r\n this.setState({\r\n layersHoverings: orderBy(layersHoverings, 'layer.zIndex', layout.isNewLayout ? 'asc' : 'desc')\r\n // order by zIndex (top go last in new layouts)\r\n }, () => {\r\n this.shouldUpdateGreenZone = false;\r\n });\r\n };\r\n\r\n draw = (layers, callback) => {\r\n\r\n let cnt = 0;\r\n const images = [];\r\n\r\n // if (!window.count) {\r\n // window.count = 1;\r\n // }\r\n // console.log('draw!', window.count);\r\n // window.count++;\r\n\r\n this.id = setTimeout(() => {\r\n if (!this.id) {\r\n return;\r\n }\r\n clearTimeout(this.id);\r\n if (this.props.setShowCanvasLoader) {\r\n if (!window.requestInProcess) {\r\n this.props.setShowCanvasLoader(true)\r\n }\r\n } else if (layers.length) {\r\n this.props.enableLoader\r\n ? this.props.enableLoader()\r\n : loaderEnable(\"loader.canvasLoadingText\");\r\n }\r\n }, 500);\r\n\r\n this.backCtx.fillStyle = 'white';\r\n this.backCtx.fillRect(0, 0, this.props.width, this.props.height);\r\n // this.backCtx.clearRect(0, 0, this.props.width, this.props.height);\r\n\r\n // console.log('layers', layers);\r\n\r\n const alreadyRenderedImages = this.state.imagesRendered;\r\n const errorImages = [];\r\n\r\n // if (this.state.errorImages.length) {\r\n // layers = layers.filter(layer => !this.state.errorImages.includes(layer.image))\r\n // }\r\n\r\n layers.forEach((layer) => {\r\n const alreadyRenderedImage = alreadyRenderedImages.find((imageRendered) => {\r\n return layer.image === imageRendered.src\r\n });\r\n let image;\r\n if (layer.isGreenHovering) {\r\n image = layer.hoveringImage;\r\n } else if (alreadyRenderedImage && this.state.allowPropsLayers) {\r\n image = alreadyRenderedImage.image;\r\n if (!isIE()) { // IE11 doesn't like when someone is making empty src\r\n image.src = \"\"; // https://bugs.chromium.org/p/chromium/issues/detail?id=7731#c12\r\n }\r\n } else {\r\n image = new Image();\r\n image.crossOrigin = 'Anonymous';\r\n alreadyRenderedImages.push({\r\n image,\r\n src: layer.image\r\n });\r\n }\r\n image.layerDimensions = layer.layerDimensions || null;\r\n image.coords = layer.coords || null;\r\n images.push(image);\r\n image.onload = () => {\r\n cnt++;\r\n if (cnt === layers.length) {\r\n this.finishDraw(images, layers, alreadyRenderedImages, errorImages, callback)\r\n }\r\n };\r\n image.onerror = () => {\r\n //display error\r\n console.info('Coudn\\'t load image:', image.src);\r\n cnt++;\r\n errorImages.push(image.src);\r\n if (cnt === layers.length) {\r\n this.finishDraw(images, layers, alreadyRenderedImages, errorImages, callback);\r\n }\r\n };\r\n try {\r\n image.src = layer.image;\r\n } catch (e) {\r\n console.log(e, 'Can\\'t apply image src', layer.image);\r\n }\r\n\r\n });\r\n };\r\n\r\n getBackgroundLayers = (layers = this.state.layers) => {\r\n const {layoutType, layout} = this.props;\r\n return layers.filter((layer) => {\r\n return layout.zIndexes[layoutType] && layout.zIndexes[layoutType].Background &&\r\n Object.values(layout.zIndexes[layoutType].Background).some(zIndex => zIndex === layer.zIndex);\r\n })\r\n };\r\n\r\n finishDraw = (images, layers, alreadyRenderedImages, errorImages, callback) => {\r\n clearTimeout(this.id);\r\n this.id = 0;\r\n\r\n const {width, height} = this.props;\r\n\r\n // const fullImagesFactor = UseFullSizeImages ? 100 : 54;\r\n\r\n const backgroundLayers = this.getBackgroundLayers(layers);\r\n\r\n if (backgroundLayers.length) { // draw backgrounds first\r\n this.backCtxBg.clearRect(0, 0, width, height); // clear previous\r\n\r\n const greenImage = images.find((imageObject) => imageObject.src.includes(\"data:image\"));\r\n if (greenImage) {\r\n const layer = backgroundLayers.find(layer => layer.image === greenImage.src);\r\n if (layer && layer.zIndex !== 500) {\r\n const greenImageIndex = images.findIndex((imageObject) => imageObject.src.includes(\"data:image\"));\r\n images.splice(greenImageIndex - 1, 1); // remove regular layer, draw only green one\r\n }\r\n }\r\n\r\n images.forEach((imageObject) => {\r\n if (errorImages.includes(imageObject.src)) {\r\n return\r\n }\r\n const layer = backgroundLayers.find(layer => layer.image === imageObject.src);\r\n if (layer) {\r\n if (layer.layerDimensions) {\r\n const dim = layer.layerDimensions;\r\n // console.log('yep', dim.width, dim.height, dim.polygonArray[0][0], dim.polygonArray[0][1], dim.width, dim.height);\r\n this.backCtxBg.drawImage(imageObject, 0, 0, dim.width, dim.height, dim.polygonArray[0][0], dim.polygonArray[0][1], dim.width, dim.height);\r\n } else {\r\n // imageObject.width = width;\r\n // imageObject.height = height;\r\n this.backCtxBg.drawImage(imageObject, 0, 0, width, height);\r\n }\r\n }\r\n imageObject = null;\r\n });\r\n enhanceCanvas(this.canvasBg);\r\n this.backCtx.drawImage(this.canvasBg, 0, 0, width, height, 0, 0, width, height);\r\n }\r\n\r\n images.forEach((loadedImage) => {\r\n if (errorImages.includes(loadedImage.src)) {\r\n return\r\n }\r\n const layer = layers.find(layers => layers.image === loadedImage.src);\r\n if (layer && (!backgroundLayers.length || (layer.zIndex > backgroundLayers[backgroundLayers.length - 1].zIndex))) {\r\n if (loadedImage.layerDimensions) {\r\n const dim = loadedImage.layerDimensions;\r\n // console.log('yep', dim.width, dim.height, dim.polygonArray[0][0], dim.polygonArray[0][1], dim.width, dim.height);\r\n this.backCtx.drawImage(loadedImage, 0, 0, dim.width, dim.height, dim.polygonArray[0][0], dim.polygonArray[0][1], dim.width, dim.height);\r\n } else if (loadedImage.coords) {\r\n // loadedImage.width = loadedImage.width*fullImagesFactor/100;\r\n // loadedImage.height = loadedImage.height*fullImagesFactor/100;\r\n // const max_x = loadedImage.coords.max_x*fullImagesFactor/100;\r\n const min_x = this.props.width*loadedImage.coords.min_x;\r\n const min_y = this.props.height*loadedImage.coords.min_y;\r\n // const max_y = loadedImage.coords.max_y*fullImagesFactor/100;\r\n // const width = max_x - min_x;\r\n // const height = max_y - min_y;\r\n // console.log('width', width);\r\n // console.log('height', height);\r\n // console.log('min_x', min_x);\r\n // console.log('min_y', min_y);\r\n // console.log('max_x', max_x);\r\n // console.log('max_y', max_y);\r\n try {\r\n this.backCtx.drawImage(loadedImage, 0, 0, loadedImage.width, loadedImage.height, min_x, min_y, loadedImage.width, loadedImage.height);\r\n } catch (e) {\r\n console.log(e, 'Can\\'t draw image with coords on the canvas', loadedImage.src);\r\n }\r\n } else {\r\n try {\r\n this.backCtx.drawImage(loadedImage, 0, 0, width, height, 0, 0, width, height);\r\n } catch (e) {\r\n console.log(e, 'Can\\'t draw image on the canvas', loadedImage.src);\r\n }\r\n }\r\n }\r\n loadedImage = null;\r\n });\r\n\r\n // this.ctx.drawImage(this.backCtx.canvas, 0, 0);\r\n requestAnimFrame(this.ctx.drawImage(this.backCtx.canvas, 0, 0));\r\n\r\n if (this.props.useMouseHovering) {\r\n const isMobile = Misc.isMobile() || isTouchDevice();\r\n if (!isMobile && !isIE() && !this.state.mouseMoveSet && this.canvas) {\r\n this.setOnMouseMove();\r\n }\r\n this.setState({\r\n alreadyRenderedImages\r\n });\r\n if (this.shouldUpdateGreenZone || !this.state.layersHoverings.length) {\r\n this.setLayersHoverings(layers, images, errorImages)\r\n }\r\n }\r\n\r\n if (!window.requestInProcess) {\r\n this.props.disableLoader ? this.props.disableLoader() : loaderDisable();\r\n }\r\n\r\n // window.t1 = performance.now();\r\n // console.log(\"Call to doSomething took \" + (window.t1 - window.t0) + \" milliseconds.\");\r\n\r\n if (callback) {\r\n callback()\r\n }\r\n };\r\n\r\n getGliaImage = () => {\r\n return this.canvasImg = el} alt=\"\" id={this.props.canvasId + \"Img\"}\r\n className=\"canvas-co-image\" />\r\n };\r\n\r\n updateGliaCanvasImage = () => {\r\n // if (this.pinchZoom && this.pinchZoom.containerScrolled && layers.some(layer => layer.image.includes('data:image/png;base64'))) {\r\n // return\r\n // }\r\n if (this.resizedContext && this.canvas) {\r\n this.resizedCanvas.height = this.canvas.height / 2;\r\n this.resizedCanvas.width = this.canvas.width / 2;\r\n const backgroundCanvas = document.getElementById(\"canvasBackgrounds\");\r\n if (backgroundCanvas) {\r\n this.resizedContext.drawImage(backgroundCanvas, 0, 0, this.resizedCanvas.width, this.resizedCanvas.height);\r\n }\r\n this.resizedContext.drawImage(this.canvas, 0, 0, this.resizedCanvas.width, this.resizedCanvas.height);\r\n this.canvasImg.src = this.resizedCanvas.toDataURL(\"image/jpeg\", 0.7);\r\n }\r\n };\r\n\r\n setOnMouseMove = () => {\r\n this.setState({\r\n mouseMoveSet: true\r\n });\r\n const delayBetweenUpdates = 50;\r\n this.canvas.addEventListener('mousemove', throttle(this.setHoveredLayer, delayBetweenUpdates), false);\r\n };\r\n\r\n setHoveredLayer = (evt) => {\r\n\r\n const {layoutType, layout} = this.props;\r\n const canvas = this.canvas;\r\n let mousePos = getMousePos(evt, canvas);\r\n let hovered = false;\r\n\r\n // console.log('mousePos', mousePos);\r\n\r\n if (Misc.isMobile() || isTouchDevice() || isIE()) {\r\n if (this.props.useTouchZoom) {\r\n $(window).trigger(ActionTypes.GET_CANVAS_SCALE);\r\n }\r\n }\r\n\r\n if (mousePos && (window.innerWidth < 480)) { // rotated version\r\n let temp = mousePos.x;\r\n // noinspection JSSuspiciousNameCombination\r\n mousePos.x = mousePos.y;\r\n mousePos.y = this.canvas.offsetHeight - temp;\r\n // console.log('mousePos2', mousePos);\r\n }\r\n\r\n if (this.state.layersHoverings.length) {\r\n let i = 0;\r\n for (i; i < this.state.layersHoverings.length; i++) {\r\n const layerHovering = this.state.layersHoverings[i];\r\n if ( mousePos\r\n && layerHovering\r\n && layerHovering.layerDimensions\r\n && !this.layerIsExcludedFromHover(layerHovering.layer, layout)\r\n // && pnpoly(layerHovering.layerDimensions.polygonArray, mousePos)\r\n && layerHovering.context2D.getImageData(\r\n (((mousePos.x / this.canvas_scale) / this.state.dimensions.width * this.props.width)) - layerHovering.layerDimensions.polygonArray[0][0],\r\n (((mousePos.y / this.canvas_scale) / this.state.dimensions.height * this.props.height)) - layerHovering.layerDimensions.polygonArray[0][1],\r\n 1,\r\n 1,\r\n {willReadFrequently: true}).data[3] > 120) {\r\n hovered = true;\r\n document.hoveredLayer = layerHovering.layer;\r\n document.hoveredMousePos = mousePos;\r\n if (!isIE() && (this.activeGreenZoneIndex !== layerHovering.layer.zIndex)) {\r\n // console.log('layerHovering active = ', layerHovering);\r\n const windowHover = layerHovering.layer.zIndex === layout.zIndexes[layoutType].Window_Default;\r\n let windowLayerHovering = '';\r\n if (windowHover) {\r\n windowLayerHovering = this.state.layersHoverings.find(layersHovering => {\r\n return layersHovering.layer.zIndex === layout.zIndexes[layoutType].Window_Covering\r\n });\r\n }\r\n this.activeGreenZoneIndex = layerHovering.layer.zIndex;\r\n this.renderGreenLayer(windowHover && windowLayerHovering ? windowLayerHovering : layerHovering);\r\n }\r\n\r\n break; // break for...of loop\r\n }\r\n }\r\n }\r\n\r\n if (!hovered) {\r\n document.hoveredLayer = null;\r\n this.draw(this.state.layers); // reload all layers without hovered\r\n }\r\n\r\n };\r\n\r\n renderGreenLayerByZindex = (zIndex) => {\r\n if (!isIE()) {\r\n const neededLayerHovering = this.state.layersHoverings.find((layerHovering) => {\r\n return layerHovering.layer.zIndex === zIndex\r\n });\r\n neededLayerHovering ? this.renderGreenLayer(neededLayerHovering) : this.draw(this.state.layers)\r\n }\r\n };\r\n\r\n renderGreenLayer = (layerHovering, allLayers = false) => {\r\n let layers = clone(this.state.layers);\r\n\r\n clearTimeout(this.timeout); // timeout for updating layers\r\n\r\n const hoveredLayerIndex = layers.findIndex((layer) => {\r\n if (this.props.layout && this.props.layout.isNewLayout && layerHovering) {\r\n return (layer.zIndex === layerHovering.layer.zIndex) && (layerHovering.layer.partId === layer.partId)\r\n }\r\n return layer.zIndex === layerHovering.layer.zIndex\r\n });\r\n\r\n if (hoveredLayerIndex > -1) {\r\n const layersToRender = checkForLayerParts(this, layers, hoveredLayerIndex, layerHovering, allLayers);\r\n // console.log('layersToRender', layersToRender);\r\n this.draw(layersToRender);\r\n this.timeout = setTimeout(() => { // remove green layer\r\n this.activeGreenZoneIndex = null;\r\n if (this.canvas) {\r\n this.draw(this.state.layers);\r\n }\r\n }, 2000);\r\n }\r\n };\r\n\r\n moveStart = (event) => {\r\n const eventPosition = getEventPosition(event);\r\n const thisX = parseFloat(eventPosition.x).toFixed(2);\r\n const thisY = parseFloat(eventPosition.y).toFixed(2);\r\n setTimeout(() => {\r\n if (window.mobileMenuOpened && !window.imageCanvasScroll && !window.imageCanvasScroll2) {\r\n this.x = thisX;\r\n this.y = thisY;\r\n this.statusSwipe = true;\r\n this.detectedSwipeLeft = false;\r\n this.detectedSwipeRight = false;\r\n this.currentTranslate = getTranslateX(this.canvas);\r\n $('.canvas-text').html(this.currentTranslate);\r\n }\r\n }, 100);\r\n };\r\n\r\n move = (event) => {\r\n\r\n if (this.statusSwipe && window.mobileMenuOpened) {\r\n\r\n window.canvasIsDragging = true;\r\n\r\n const eventPosition = getEventPosition(event);\r\n\r\n let\r\n x = parseFloat(eventPosition.x).toFixed(2),\r\n y = parseFloat(eventPosition.y).toFixed(2),\r\n tX = parseFloat((x - this.x).toFixed(2)),\r\n tY = parseFloat((y - this.y).toFixed(2));\r\n\r\n if (!this.detectedSwipeRight || !this.detectedSwipeLeft) {\r\n if (Math.abs(parseFloat(tX)) >= this.delta) {\r\n if (parseFloat(tX) > this.delta) {\r\n this.detectedSwipeRight = true;\r\n } else if (parseFloat(tX) < -this.delta) {\r\n this.detectedSwipeLeft = true;\r\n }\r\n }\r\n }\r\n\r\n if ((this.detectedSwipeLeft || this.detectedSwipeRight) && Math.abs(tX) > Math.abs(tY)) {\r\n // console.log('Math.abs(tX)', Math.abs(tX));\r\n\r\n const nextPosition = Math.round((this.currentTranslate + tX)*100)/100;\r\n const percentage = this.state.dimensions.width < 680 ? 60 : 50;\r\n // const percentage = 50;\r\n const visibleCanvasWidth = (percentage / 100) * this.state.dimensions.width; // percentage of number\r\n\r\n // console.log('nextPosition', nextPosition);\r\n // $('.canvas-text').html(nextPosition);\r\n // console.log('visibleCanvasWidth', visibleCanvasWidth);\r\n\r\n if (Math.abs(nextPosition) < visibleCanvasWidth && nextPosition < 0) {\r\n const transform2d = 'translateX(' + nextPosition + 'px)';\r\n this.canvas.style.webkitTransform = transform2d;\r\n this.canvas.style.mozTransform = transform2d;\r\n this.canvas.style.msTransform = transform2d;\r\n this.canvas.style.oTransform = transform2d;\r\n this.canvas.style.transform = transform2d;\r\n }\r\n }\r\n }\r\n\r\n };\r\n\r\n moveEnd = () => {\r\n\r\n // let\r\n // x = getEventPosition(e).x,\r\n // tX = parseFloat((x - this.x).toFixed(2));\r\n\r\n this.x = 0;\r\n this.y = 0;\r\n this.statusSwipe = false;\r\n if (this.pinchZoom) {\r\n $(window).trigger(ActionTypes.CANVAS_SCALE_CHANGED, [this.pinchZoom.getScale()]);\r\n }\r\n\r\n if (this.detectedSwipeLeft || this.detectedSwipeRight) {\r\n this.currentTranslate = getTranslateX(this.canvas);\r\n this.detectedSwipeLeft = false;\r\n this.detectedSwipeRight = false;\r\n window.canvasIsDragging = false;\r\n this.pinchZoom.enable();\r\n // $(this.canvas).css({\r\n // transform: `none`\r\n // });\r\n }\r\n };\r\n\r\n render() {\r\n return (\r\n
    \r\n {/*
    */}\r\n {this.getGliaImage()}\r\n this.canvas = el}\r\n className={\"canvas-el\" + (this.props.useMouseHovering ? \" canvas-el--pointer\" : \"\")}\r\n id={this.props.canvasId}\r\n width={this.props.width}\r\n height={this.props.height}\r\n onTouchStart={this.moveStart}\r\n onTouchMove={this.move}\r\n onTouchEnd={this.moveEnd}\r\n style={{position: \"relative\"}} />\r\n
    \r\n );\r\n }\r\n}\r\n","const layouts = {\r\n Large: {\r\n Background: 100,\r\n Floor: 600,\r\n Ceiling: 200,\r\n Wall_A: 300,\r\n Wall_B: 400,\r\n Wall_C: 500,\r\n Wall_A_Accent_Mask: 700,\r\n Global_Shadow_Overlay: 800,\r\n Window_Default: 900,\r\n Window_Covering: 1000,\r\n Ceiling_Lights: 1100,\r\n Wall_Lights: 1300,\r\n Towel_Rack: 1400,\r\n Shower: {\r\n Custom60in: {\r\n Body: 2000,\r\n Floor: 2004,\r\n ShowerDrain: 2005,\r\n FloorShadow: 2006,\r\n ExtrusionWallRight: 2010,\r\n ExtrusionWallRightShadow: 2011,\r\n Wall: 2020,\r\n Wall2: 2021,\r\n WallAccent: 2022,\r\n WallAccent2: 2023,\r\n WallShadow: 2024,\r\n LargeCornerCaddie: 2025,\r\n Fixture: 2031,\r\n ShowerHead: 2032,\r\n ShowerPanCombo: 2033,\r\n LargeCornerSeat: 2034,\r\n CornerCaddie: 2035,\r\n SoapDish: 2036,\r\n SmallCornerShelf: 2038,\r\n GrabBar: 2039,\r\n ExtrusionWallLeftHalfWall: 2041,\r\n ExtrusionWallLeftShadowHalfWall: 2042,\r\n Threshold: 2043,\r\n ThresholdShadow: 2044,\r\n ShowerDoor: 2045,\r\n ShowerDoorHandle: 2046,\r\n ExtrusionWallLeft: 2047,\r\n ExtrusionWallLeftShadow: 2048,\r\n Overlay: 2050,\r\n Glass: 2060,\r\n PonyWall: 2070,\r\n PonyWallShadow: 2071,\r\n PonyWallCap: 5025,\r\n PonyWallCapShadow: 5026,\r\n PonyWallGlass: 5027,\r\n },\r\n Steam60in: {\r\n ExtrusionWallLeft: 2500,\r\n Body: {\r\n 0: 2550, // default body (no parts)\r\n 1: 2520, // Part = 1\r\n 2: 2530, // Part = 2\r\n },\r\n Fixture: 2525,\r\n Overlay: 2600\r\n },\r\n TubCombo: {\r\n WallConfiguration: 2065,\r\n Liner: 2027,\r\n ReplacementTub: 2028,\r\n WalkInTub: 2029,\r\n JettedTub: 2030,\r\n },\r\n },\r\n BathTub: {\r\n FreeStanding: {\r\n FixtureFloorMount: 3000,\r\n Base: 3005,\r\n Fixture: 3010,\r\n },\r\n Custom60in: {\r\n FixtureFloorMount: 3500,\r\n Base: 3505,\r\n Spa: 3515,\r\n Top: 3525,\r\n Fixture: 3530\r\n }\r\n },\r\n Toilet: 4000,\r\n Vanity: {\r\n Custom: {\r\n Cabinet: 5000,\r\n Handle: 5010,\r\n VanityBacksplash: 5020,\r\n CounterTop: 5030,\r\n Mirror: 5040,\r\n Faucet: 5050,\r\n Sink: 5060,\r\n },\r\n Complete: {\r\n VanityBacksplash: 5500,\r\n Faucet: 5510,\r\n Cabinet: 5520,\r\n Mirror: 5530,\r\n }\r\n }\r\n },\r\n Small: {\r\n Background: 100,\r\n Floor: 450,\r\n Ceiling: 200,\r\n Wall_A: 300,\r\n Wall_B: 400,\r\n Wall_C: 500,\r\n Wall_A_Accent_Mask: 700,\r\n Global_Shadow_Overlay: 800,\r\n Window_Default: 900,\r\n Window_Covering: 1000,\r\n Ceiling_Lights: 1100,\r\n Wall_Lights: 1300,\r\n Towel_Rack: 1400,\r\n Shower: {\r\n Custom60in: {\r\n Body: 2000,\r\n Floor: 2004,\r\n ShowerDrain: 2005,\r\n FloorShadow: 2006,\r\n ExtrusionWallRight: 2010,\r\n ExtrusionWallRightShadow: 2011,\r\n Wall: 2020,\r\n Wall2: 2021,\r\n WallAccent: 2022,\r\n WallAccent2: 2023,\r\n WallShadow: 2024,\r\n LargeCornerCaddie: 2025,\r\n Fixture: 2031,\r\n ShowerHead: 2032,\r\n ShowerPanCombo: 2033,\r\n LargeCornerSeat: 2034,\r\n CornerCaddie: 2035,\r\n SoapDish: 2036,\r\n SmallCornerShelf: 2038,\r\n GrabBar: 2039,\r\n ExtrusionWallLeftHalfWall: 2041,\r\n ExtrusionWallLeftShadowHalfWall: 2042,\r\n Threshold: 2043,\r\n ThresholdShadow: 2044,\r\n ShowerDoor: 2045,\r\n ShowerDoorHandle: 2046,\r\n ExtrusionWallLeft: 2047,\r\n ExtrusionWallLeftShadow: 2048,\r\n Overlay: 2050,\r\n Glass: 2060,\r\n PonyWall: 2070,\r\n PonyWallShadow: 2071,\r\n PonyWallCap: 5025,\r\n PonyWallCapShadow: 5026,\r\n PonyWallGlass: 5027,\r\n },\r\n Steam60in: {\r\n ExtrusionWallLeft: 2500,\r\n Body: {\r\n 0: 2550, // default body (no parts)\r\n 1: 2520, // Part = 1\r\n 2: 2530, // Part = 2\r\n },\r\n Fixture: 2525,\r\n Overlay: 2600\r\n },\r\n TubCombo: {\r\n WallConfiguration: 2065,\r\n Liner: 2027,\r\n ReplacementTub: 2028,\r\n WalkInTub: 2029,\r\n JettedTub: 2030,\r\n },\r\n },\r\n BathTub: {\r\n FreeStanding: {\r\n FixtureFloorMount: 3000,\r\n Base: 3005,\r\n Fixture: 3010,\r\n },\r\n Custom60in: {\r\n FixtureFloorMount: 3500,\r\n Base: 3505,\r\n Spa: 3515,\r\n Top: 3525,\r\n Fixture: 3530\r\n }\r\n },\r\n Toilet: 4000,\r\n Vanity: {\r\n Custom: {\r\n Cabinet: 5000,\r\n Handle: 5010,\r\n VanityBacksplash: 5020,\r\n CounterTop: 5030,\r\n Mirror: 5040,\r\n Faucet: 5050,\r\n Sink: 5060,\r\n },\r\n Complete: {\r\n VanityBacksplash: 5500,\r\n Faucet: 5510,\r\n Cabinet: 5520,\r\n Mirror: 5530,\r\n }\r\n }\r\n }\r\n};\r\n\r\nexport default {\r\n layouts,\r\n getMenuByHoveredLayer: (currentLayout, layer) => {\r\n\r\n // console.log('currentLayout', currentLayout);\r\n // console.log('layer', layer);\r\n\r\n switch (layer.zIndex) {\r\n\r\n // General\r\n case layouts[currentLayout].Floor:\r\n return {\r\n parent: \"Floor\",\r\n child: \"Floor\"\r\n };\r\n case layouts[currentLayout].Ceiling:\r\n return \"Ceiling\";\r\n case layouts[currentLayout].Toilet:\r\n return {\r\n parent: \"Toilet\",\r\n child: \"Toilet\"\r\n };\r\n case layouts[currentLayout].Window_Default:\r\n return \"Window\";\r\n\r\n // case layouts[currentLayout].Shower.Steam60in.ExtrusionWallLeft:\r\n // case layouts[currentLayout].Shower.Steam60in.Body[\"1\"]:\r\n // case layouts[currentLayout].Shower.Steam60in.Body[\"2\"]:\r\n // case layouts[currentLayout].Shower.Steam60in.Fixture:\r\n // return {\r\n // parent: \"Shower\",\r\n // child: \"Shower Body\"\r\n // };\r\n case layouts[currentLayout].Wall_A:\r\n return {\r\n parent: \"Walls\",\r\n child: \"Wall A\"\r\n };\r\n case layouts[currentLayout].Wall_C:\r\n return {\r\n parent: \"Walls\",\r\n child: \"Wall C\"\r\n };\r\n case layouts[currentLayout].Shower.Custom60in.ExtrusionWallRight:\r\n return {\r\n parent: \"Walls\",\r\n child: \"Right Shower Wall\"\r\n };\r\n case layouts[currentLayout].Vanity.Custom.Mirror:\r\n return {\r\n parent: \"Vanity\",\r\n child: \"Mirror\"\r\n };\r\n case layouts[currentLayout].Shower.Custom60in.ExtrusionWallLeft:\r\n case layouts[currentLayout].Shower.Custom60in.ExtrusionWallLeftHalfWall:\r\n case layouts[currentLayout].Shower.Custom60in.PonyWall:\r\n return \"left_wall_custom\";\r\n case layouts[currentLayout].Vanity.Custom.VanityBacksplash:\r\n case layouts[currentLayout].Wall_A_Accent_Mask:\r\n case layouts[currentLayout].Wall_B:\r\n return \"wall_b_custom\";\r\n case layouts[currentLayout].Vanity.Complete.Cabinet:\r\n case layouts[currentLayout].Vanity.Custom.Handle:\r\n case layouts[currentLayout].Vanity.Custom.CounterTop:\r\n case layouts[currentLayout].Vanity.Custom.Faucet:\r\n case layouts[currentLayout].Vanity.Custom.Sink:\r\n case layouts[currentLayout].Vanity.Custom.Cabinet:\r\n return \"vanity_custom\";\r\n\r\n case layouts[currentLayout].Shower.Custom60in.Threshold:\r\n return {\r\n parent: \"Shower\",\r\n child: \"Threshold\"\r\n };\r\n case layouts[currentLayout].Shower.Custom60in.WallAccent:\r\n case layouts[currentLayout].Shower.Custom60in.WallAccent2:\r\n return {\r\n parent: \"Shower\",\r\n child: \"Shower Walls Accent\"\r\n };\r\n case layouts[currentLayout].Shower.Custom60in.CornerCaddie:\r\n return {\r\n parent: \"Shower Accessories\",\r\n child: \"Corner Caddie\"\r\n };\r\n case layouts[currentLayout].Shower.Custom60in.LargeCornerCaddie:\r\n return {\r\n parent: \"Shower Accessories\",\r\n child: \"Large Corner Caddie\"\r\n };\r\n case layouts[currentLayout].Shower.Custom60in.LargeCornerSeat:\r\n return {\r\n parent: \"Shower Accessories\",\r\n child: \"Large Corner Seat\"\r\n };\r\n case layouts[currentLayout].Shower.Custom60in.SoapDish:\r\n return {\r\n parent: \"Shower Accessories\",\r\n child: \"Soap Dish\"\r\n };\r\n case layouts[currentLayout].Shower.Custom60in.SmallCornerShelf:\r\n return {\r\n parent: \"Shower Accessories\",\r\n child: \"Small Corner Shelf\"\r\n };\r\n case layouts[currentLayout].Shower.Custom60in.GrabBar:\r\n return {\r\n parent: \"Shower Accessories\",\r\n child: \"Grab Bar\"\r\n };\r\n case layouts[currentLayout].Shower.Custom60in.Glass:\r\n case layouts[currentLayout].Shower.Custom60in.Floor:\r\n case layouts[currentLayout].Shower.Custom60in.ShowerPanCombo:\r\n case layouts[currentLayout].Shower.Custom60in.Wall:\r\n case layouts[currentLayout].Shower.Custom60in.Wall2:\r\n case layouts[currentLayout].Shower.Custom60in.Fixture:\r\n case layouts[currentLayout].Shower.Custom60in.ShowerHead:\r\n case layouts[currentLayout].Shower.Custom60in.Body:\r\n case layouts[currentLayout].Shower.Custom60in.Overlay:\r\n case layouts[currentLayout].Shower.Custom60in.ShowerDoor:\r\n case layouts[currentLayout].Shower.Custom60in.ShowerDoorHandle:\r\n case layouts[currentLayout].Shower.Steam60in.ExtrusionWallLeft:\r\n case layouts[currentLayout].Shower.Steam60in.Body[\"1\"]:\r\n case layouts[currentLayout].Shower.Steam60in.Body[\"2\"]:\r\n case layouts[currentLayout].Shower.Steam60in.Fixture:\r\n return \"shower_custom\";\r\n // BathTub\r\n case layouts[currentLayout].BathTub.Custom60in.Top:\r\n case layouts[currentLayout].BathTub.Custom60in.Spa:\r\n case layouts[currentLayout].BathTub.Custom60in.Base:\r\n case layouts[currentLayout].BathTub.FreeStanding.Base:\r\n case layouts[currentLayout].BathTub.FreeStanding.Fixture:\r\n case layouts[currentLayout].BathTub.FreeStanding.FixtureFloorMount:\r\n case layouts[currentLayout].BathTub.Custom60in.Fixture:\r\n case layouts[currentLayout].BathTub.Custom60in.FixtureFloorMount:\r\n return \"bathtub_custom\";\r\n // BathTub\r\n case layouts[currentLayout].Shower.TubCombo.Liner:\r\n case layouts[currentLayout].Shower.TubCombo.ReplacementTub:\r\n case layouts[currentLayout].Shower.TubCombo.WalkInTub:\r\n case layouts[currentLayout].Shower.TubCombo.JettedTub:\r\n case layouts[currentLayout].Shower.TubCombo.WallConfiguration:\r\n return \"shower_combo\";\r\n // BathTub\r\n case layouts[currentLayout].Shower.Custom60in.PonyWallCap:\r\n case layouts[currentLayout].Shower.Custom60in.PonyWallGlass:\r\n return \"shower_pony_wall\";\r\n default:\r\n return \"\"\r\n }\r\n },\r\n getLayerDimensions: (zIndex, currentLayout) => {\r\n switch (zIndex) {\r\n // General\r\n case layouts[currentLayout].Floor:\r\n return {\r\n polygonArray: [[80,770],[1620,770],[1620,1080],[80,1080]],\r\n width: 1540,\r\n height: 310\r\n };\r\n case layouts[currentLayout].Ceiling:\r\n return {\r\n polygonArray: [[0,0],[1620,0],[1620,320],[0,320]],\r\n width: 1620,\r\n height: 320\r\n };\r\n case layouts[currentLayout].Toilet:\r\n return {\r\n polygonArray: [[500,640],[820,640],[820,960],[500,960]],\r\n width: 320,\r\n height: 320\r\n };\r\n case layouts[currentLayout].Window_Default:\r\n case layouts[currentLayout].Window_Covering:\r\n return {\r\n polygonArray: [[1200,240],[1400,240],[1400,780],[1200,780]],\r\n width: 200,\r\n height: 540\r\n };\r\n case layouts[currentLayout].Shower.Steam60in.ExtrusionWallLeft:\r\n case layouts[currentLayout].Shower.Steam60in.Body[\"1\"]:\r\n case layouts[currentLayout].Shower.Steam60in.Body[\"2\"]:\r\n case layouts[currentLayout].Shower.Steam60in.Fixture:\r\n case layouts[currentLayout].Shower.Custom60in.ExtrusionWallRight:\r\n case layouts[currentLayout].Shower.Custom60in.ExtrusionWallLeft:\r\n case layouts[currentLayout].Shower.Custom60in.ExtrusionWallLeftHalfWall:\r\n case layouts[currentLayout].Shower.Custom60in.PonyWall:\r\n case layouts[currentLayout].Shower.Custom60in.Threshold:\r\n case layouts[currentLayout].Shower.Custom60in.Glass:\r\n case layouts[currentLayout].Shower.Custom60in.Floor:\r\n case layouts[currentLayout].Shower.Custom60in.ShowerPanCombo:\r\n case layouts[currentLayout].Shower.Custom60in.Wall:\r\n case layouts[currentLayout].Shower.Custom60in.Wall2:\r\n case layouts[currentLayout].Shower.Custom60in.WallAccent:\r\n case layouts[currentLayout].Shower.Custom60in.WallAccent2:\r\n case layouts[currentLayout].Shower.Custom60in.Fixture:\r\n case layouts[currentLayout].Shower.Custom60in.ShowerHead:\r\n case layouts[currentLayout].Shower.Custom60in.Body:\r\n case layouts[currentLayout].Shower.Custom60in.Overlay:\r\n case layouts[currentLayout].Shower.Custom60in.ShowerDoor:\r\n case layouts[currentLayout].Shower.Custom60in.ShowerDoorHandle:\r\n case layouts[currentLayout].Shower.Custom60in.PonyWallCap:\r\n case layouts[currentLayout].Shower.Custom60in.PonyWallGlass:\r\n case layouts[currentLayout].Shower.Custom60in.SoapDish:\r\n case layouts[currentLayout].Shower.Custom60in.LargeCornerSeat:\r\n case layouts[currentLayout].Shower.Custom60in.LargeCornerCaddie:\r\n case layouts[currentLayout].Shower.Custom60in.CornerCaddie:\r\n case layouts[currentLayout].Shower.Custom60in.SmallCornerShelf:\r\n case layouts[currentLayout].Shower.Custom60in.GrabBar:\r\n case layouts[currentLayout].Shower.TubCombo.Liner:\r\n case layouts[currentLayout].Shower.TubCombo.ReplacementTub:\r\n case layouts[currentLayout].Shower.TubCombo.WalkInTub:\r\n case layouts[currentLayout].Shower.TubCombo.JettedTub:\r\n case layouts[currentLayout].Shower.TubCombo.WallConfiguration:\r\n return {\r\n polygonArray: [[570,0],[1500,0],[1540,1080],[570,1080]],\r\n width: 970,\r\n height: 1080\r\n };\r\n case layouts[currentLayout].Wall_A:\r\n return {\r\n polygonArray: [[0,0],[130,0],[130,1080],[0,1080]],\r\n width: 130,\r\n height: 1080\r\n };\r\n case layouts[currentLayout].Wall_A_Accent_Mask:\r\n return {\r\n polygonArray: [[90,120],[700,120],[700,690],[90,690]],\r\n width: 610,\r\n height: 570\r\n };\r\n case layouts[currentLayout].Wall_C:\r\n return {\r\n polygonArray: [[900,0],[1620,0],[1620,1080],[900,1080]],\r\n width: 720,\r\n height: 1080\r\n };\r\n case layouts[currentLayout].Wall_B:\r\n return {\r\n polygonArray: [[80,140],[1080,140],[1080,990],[80,990]],\r\n width: 1000,\r\n height: 850\r\n };\r\n case layouts[currentLayout].Vanity.Custom.Mirror:\r\n return {\r\n polygonArray: [[80,170],[700,170],[700,630],[80,630]],\r\n width: 620,\r\n height: 460\r\n };\r\n case layouts[currentLayout].Vanity.Custom.VanityBacksplash:\r\n return {\r\n polygonArray: [[80,580],[700,580],[700,680],[80,680]],\r\n width: 620,\r\n height: 100\r\n };\r\n case layouts[currentLayout].Vanity.Custom.CounterTop:\r\n return {\r\n polygonArray: [[80,610],[770,610],[770,710],[80,710]],\r\n width: 690,\r\n height: 100\r\n };\r\n case layouts[currentLayout].Vanity.Custom.Faucet:\r\n case layouts[currentLayout].Vanity.Custom.Sink:\r\n return {\r\n polygonArray: [[80,500],[700,500],[700,710],[80,710]],\r\n width: 620,\r\n height: 210\r\n };\r\n case layouts[currentLayout].Vanity.Complete.Cabinet:\r\n case layouts[currentLayout].Vanity.Custom.Handle:\r\n case layouts[currentLayout].Vanity.Custom.Cabinet:\r\n return {\r\n polygonArray: [[80,500],[780,500],[780,1070],[80,1070]],\r\n width: 700,\r\n height: 570\r\n };\r\n // BathTub\r\n case layouts[currentLayout].BathTub.Custom60in.Top:\r\n case layouts[currentLayout].BathTub.Custom60in.Spa:\r\n case layouts[currentLayout].BathTub.Custom60in.Base:\r\n case layouts[currentLayout].BathTub.FreeStanding.Base:\r\n case layouts[currentLayout].BathTub.FreeStanding.Fixture:\r\n case layouts[currentLayout].BathTub.FreeStanding.FixtureFloorMount:\r\n case layouts[currentLayout].BathTub.Custom60in.Fixture:\r\n case layouts[currentLayout].BathTub.Custom60in.FixtureFloorMount:\r\n return {\r\n polygonArray: [[750,580],[1620,580],[1620,1080],[750,1080]],\r\n width: 870,\r\n height: 500\r\n };\r\n default:\r\n return null\r\n }\r\n }\r\n}\r\n\r\n\r\n","import {LayoutAbbreviation, LayoutType} from \"./constants\";\r\nimport {UseFullSizeImages} from \"../../../config\";\r\n\r\nlet layouts = {};\r\nObject.keys(LayoutType).forEach(layoutName => {\r\n layouts[layoutName] = {\r\n Background: {\r\n BackgroundBG: 100,\r\n Floor: 200,\r\n LeftWall: 300,\r\n ShowerWall: 400,\r\n RightWall: 550,\r\n CenterWall: 600,\r\n },\r\n ShowerWallAccent: 1000,\r\n Accessories: {\r\n WindowBody: 1000,\r\n WindowKits: 1100,\r\n LargeCornerCaddie: 2010,\r\n LargeCornerCaddie2: 2020,\r\n Fixture: 2100,\r\n LargeCornerSeat: 3330,\r\n LargeCornerSeat2: 3340,\r\n CornerCaddie: 2410,\r\n CornerCaddie2: 2420,\r\n SoapDish: 2500,\r\n SoapDish2: 2510,\r\n SoapDish3: 2520,\r\n SmallCornerShelf: 2600,\r\n GrabBar: 3500, // more that the fixture\r\n GrabBar2: 3510,\r\n GrabBar3: 3520,\r\n CornerShelf1: 2810,\r\n CornerShelf2: 2820,\r\n CornerShelf3: 2830,\r\n CornerShelf4: 2840,\r\n CornerShelf5: 2850,\r\n CornerShelf6: 2860,\r\n ShowerPod: 2900,\r\n LargeShelf: 2905,\r\n ShampooShelf: 2902,\r\n Seats: 3320,\r\n ShowerRod: 4200,\r\n TowelBar: 4250,\r\n },\r\n Shower: {\r\n ShowerPan: 3200,\r\n ShowerPanCombo: 3300,\r\n ShowerHead: 3350,\r\n ShowerFixture: 3410,\r\n ShowerFixture2: 3420,\r\n ShowerDoorHandle: 3600,\r\n // Threshold\r\n TubCombo: {\r\n WallConfiguration: 3600,\r\n Liner: 3700,\r\n ReplacementTub: 3800,\r\n WalkInTub: 3900,\r\n JettedTub: 4000,\r\n },\r\n ShowerDoor: 4100,\r\n ShowerDoor2: 4110,\r\n },\r\n Walls: {\r\n LeftWall: 4800,\r\n CeilingPanels: 4050, // less than shower doors\r\n RightWall: 4900,\r\n },\r\n Toilet: 5000,\r\n PaperHolder: 5050,\r\n Vanity: {\r\n Cabinet: 6000,\r\n Handle: 6100,\r\n CounterTop: 6200,\r\n VanityBacksplash: 6300,\r\n Mirror: 6400,\r\n Faucet: 6500,\r\n Sink: 6600,\r\n },\r\n Globals: {\r\n ToiletPaper: 8000,\r\n ToiletPaperHolder: 8050,\r\n Towel: 8100,\r\n LightFixture: 8200,\r\n LampFixture: 8250,\r\n DecorWindow: 8300,\r\n DecorSeat: 8400,\r\n },\r\n Bathtub: {\r\n BathTubFixture: 9000,\r\n BathTubBody: 9100,\r\n }\r\n };\r\n});\r\n\r\nlayouts[\"Layout4\"].Vanity = {\r\n Cabinet: 10000,\r\n Handle: 10100,\r\n CounterTop: 10200,\r\n VanityBacksplash: 10300,\r\n Mirror: 10400,\r\n Faucet: 10500,\r\n Sink: 10600,\r\n};\r\nlayouts[\"Layout4\"].Globals.DecorWindow = 1200;\r\nlayouts[\"Layout4\"].Toilet = 15000;\r\nlayouts[\"Layout4\"].Globals.DecorSeat = 18000;\r\nlayouts[\"Layout4\"].Globals.LightFixture = 19000;\r\nlayouts[\"Layout4\"].Globals.LampFixture = 19100;\r\nlayouts[\"Layout4\"].Globals.ToiletPaperHolder = 20000;\r\nlayouts[\"Layout4\"].PaperHolder = 20000;\r\n\r\n\r\nconst getLayerDimensions = (zIndex, currentLayout) => {\r\n const fullImagesFactor = UseFullSizeImages ? 177.77 : 100;\r\n const sizeFactor = fullImagesFactor / 100;\r\n switch (zIndex) {\r\n // case layouts[currentLayout].Background.ShowerWall:\r\n // return {\r\n // polygonArray: [[sizeFactor*350,sizeFactor*50],[sizeFactor*950,sizeFactor*50],[sizeFactor*950,sizeFactor*930],[sizeFactor*350,sizeFactor*930]],\r\n // width: sizeFactor*600,\r\n // height: sizeFactor*900\r\n // };\r\n case layouts[currentLayout].Shower.ShowerFixture:\r\n case layouts[currentLayout].Shower.ShowerFixture2:\r\n case layouts[currentLayout].Shower.ShowerDoorHandle:\r\n case layouts[currentLayout].Shower.ShowerHead:\r\n case layouts[currentLayout].ShowerWallAccent:\r\n case layouts[currentLayout].Accessories.Fixture:\r\n case layouts[currentLayout].Accessories.LargeCornerSeat:\r\n case layouts[currentLayout].Accessories.LargeCornerSeat2:\r\n case layouts[currentLayout].Accessories.CornerCaddie:\r\n case layouts[currentLayout].Accessories.CornerCaddie2:\r\n case layouts[currentLayout].Accessories.SoapDish:\r\n case layouts[currentLayout].Accessories.SoapDish2:\r\n case layouts[currentLayout].Accessories.SoapDish3:\r\n case layouts[currentLayout].Accessories.SmallCornerShelf:\r\n case layouts[currentLayout].Accessories.GrabBar:\r\n case layouts[currentLayout].Accessories.GrabBar2:\r\n case layouts[currentLayout].Accessories.GrabBar3:\r\n case layouts[currentLayout].Accessories.CornerShelf1:\r\n case layouts[currentLayout].Accessories.CornerShelf2:\r\n case layouts[currentLayout].Accessories.CornerShelf3:\r\n case layouts[currentLayout].Accessories.CornerShelf4:\r\n case layouts[currentLayout].Accessories.CornerShelf5:\r\n case layouts[currentLayout].Accessories.CornerShelf6:\r\n case layouts[currentLayout].Accessories.ShowerPod:\r\n case layouts[currentLayout].Accessories.LargeShelf:\r\n case layouts[currentLayout].Accessories.Seats:\r\n case layouts[currentLayout].Accessories.ShowerRod:\r\n case layouts[currentLayout].Accessories.WindowBody:\r\n case layouts[currentLayout].Accessories.WindowKits: {\r\n switch (currentLayout) {\r\n case LayoutAbbreviation.Layout1: {\r\n return {\r\n polygonArray: [[sizeFactor*350,sizeFactor*130],[sizeFactor*950,sizeFactor*130],[sizeFactor*950,sizeFactor*930],[sizeFactor*350,sizeFactor*930]],\r\n width: sizeFactor*600,\r\n height: sizeFactor*800\r\n };\r\n }\r\n case LayoutAbbreviation.Layout4: {\r\n return {\r\n polygonArray: [[sizeFactor*560,0],[sizeFactor*1240,0],[sizeFactor*1240,sizeFactor*930],[sizeFactor*560,sizeFactor*930]],\r\n width: sizeFactor*580,\r\n height: sizeFactor*930\r\n };\r\n }\r\n }\r\n return null;\r\n }\r\n case layouts[currentLayout].Shower.ShowerDoor:\r\n case layouts[currentLayout].Shower.ShowerDoor2: {\r\n switch (currentLayout) {\r\n case LayoutAbbreviation.Layout1: {\r\n return {\r\n polygonArray: [[sizeFactor*350,0],[sizeFactor*950,0],[sizeFactor*950,sizeFactor*930],[sizeFactor*350,sizeFactor*930]],\r\n width: sizeFactor*600,\r\n height: sizeFactor*800\r\n };\r\n }\r\n case LayoutAbbreviation.Layout4: {\r\n return {\r\n polygonArray: [[sizeFactor*560,0],[sizeFactor*1240,0],[sizeFactor*1240,sizeFactor*930],[sizeFactor*560,sizeFactor*930]],\r\n width: sizeFactor*580,\r\n height: sizeFactor*930\r\n };\r\n }\r\n }\r\n return null;\r\n }\r\n case layouts[currentLayout].Accessories.LargeCornerCaddie:\r\n case layouts[currentLayout].Accessories.LargeCornerCaddie2: {\r\n switch (currentLayout) {\r\n case LayoutAbbreviation.Layout1: {\r\n return {\r\n polygonArray: [[sizeFactor*350,sizeFactor*30],[sizeFactor*950,sizeFactor*30],[sizeFactor*950,sizeFactor*930],[sizeFactor*350,sizeFactor*930]],\r\n width: sizeFactor*600,\r\n height: sizeFactor*900\r\n };\r\n }\r\n case LayoutAbbreviation.Layout4: {\r\n return {\r\n polygonArray: [[sizeFactor*560,0],[sizeFactor*1240,0],[sizeFactor*1240,sizeFactor*930],[sizeFactor*560,sizeFactor*930]],\r\n width: sizeFactor*580,\r\n height: sizeFactor*930\r\n };\r\n }\r\n }\r\n return null;\r\n }\r\n case layouts[currentLayout].Shower.Shower:\r\n case layouts[currentLayout].Shower.ShowerPanCombo: {\r\n switch (currentLayout) {\r\n case LayoutAbbreviation.Layout1: {\r\n return {\r\n polygonArray: [[sizeFactor*350,sizeFactor*730],[sizeFactor*950,sizeFactor*730],[sizeFactor*950,sizeFactor*930],[sizeFactor*350,sizeFactor*930]],\r\n width: sizeFactor*600,\r\n height: sizeFactor*200\r\n };\r\n }\r\n case LayoutAbbreviation.Layout4: {\r\n return {\r\n polygonArray: [[sizeFactor*560,sizeFactor*730],[sizeFactor*1260,sizeFactor*730],[sizeFactor*1260,sizeFactor*930],[sizeFactor*560,sizeFactor*930]],\r\n width: sizeFactor*700,\r\n height: sizeFactor*200\r\n };\r\n }\r\n }\r\n return null;\r\n }\r\n case layouts[currentLayout].Shower.TubCombo.WallConfiguration:\r\n case layouts[currentLayout].Shower.TubCombo.Liner:\r\n case layouts[currentLayout].Shower.TubCombo.JettedTub:\r\n case layouts[currentLayout].Shower.TubCombo.ReplacementTub:\r\n case layouts[currentLayout].Shower.TubCombo.WalkInTub:\r\n return {\r\n polygonArray: [[sizeFactor*300,sizeFactor*280],[sizeFactor*1000,sizeFactor*280],[sizeFactor*1000,sizeFactor*1080],[sizeFactor*300,sizeFactor*1080]],\r\n width: sizeFactor*700,\r\n height: sizeFactor*800\r\n };\r\n case layouts[currentLayout].Toilet:\r\n case layouts[currentLayout].PaperHolder: {\r\n switch (currentLayout) {\r\n case LayoutAbbreviation.Layout1: {\r\n return {\r\n polygonArray: [[sizeFactor*700,sizeFactor*500],[sizeFactor*1250,sizeFactor*500],[sizeFactor*1250,sizeFactor*1080],[sizeFactor*700,sizeFactor*1080]],\r\n width: sizeFactor*550,\r\n height: sizeFactor*580\r\n };\r\n }\r\n case LayoutAbbreviation.Layout4: {\r\n return {\r\n polygonArray: [[sizeFactor*100,sizeFactor*500],[sizeFactor*600,sizeFactor*500],[sizeFactor*600,sizeFactor*1080],[sizeFactor*100,sizeFactor*1080]],\r\n width: sizeFactor*500,\r\n height: sizeFactor*580\r\n };\r\n }\r\n }\r\n return null;\r\n }\r\n case layouts[currentLayout].Vanity.Cabinet:\r\n return {\r\n polygonArray: [[sizeFactor*920,sizeFactor*530],[sizeFactor*1920,sizeFactor*530],[sizeFactor*1920,sizeFactor*1080],[sizeFactor*920,sizeFactor*1080]],\r\n width: sizeFactor*1000,\r\n height: sizeFactor*550\r\n };\r\n case layouts[currentLayout].Vanity.CounterTop:\r\n return {\r\n polygonArray: [[sizeFactor*900,sizeFactor*500],[sizeFactor*1920,sizeFactor*500],[sizeFactor*1920,sizeFactor*1080],[sizeFactor*900,sizeFactor*1080]],\r\n width: sizeFactor*1020,\r\n height: sizeFactor*580\r\n };\r\n case layouts[currentLayout].Vanity.Faucet:\r\n case layouts[currentLayout].Vanity.Sink:\r\n case layouts[currentLayout].Vanity.VanityBacksplash: {\r\n switch (currentLayout) {\r\n case LayoutAbbreviation.Layout1: {\r\n return {\r\n polygonArray: [[sizeFactor*900,sizeFactor*400],[sizeFactor*1900,sizeFactor*400],[sizeFactor*1900,sizeFactor*830],[sizeFactor*800,sizeFactor*830]],\r\n width: sizeFactor*1000,\r\n height: sizeFactor*430\r\n };\r\n }\r\n case LayoutAbbreviation.Layout4: {\r\n return {\r\n polygonArray: [[sizeFactor*300,sizeFactor*400],[sizeFactor*730,sizeFactor*400],[sizeFactor*730,sizeFactor*930],[sizeFactor*300,sizeFactor*930]],\r\n width: sizeFactor*430,\r\n height: sizeFactor*530\r\n };\r\n }\r\n }\r\n return null;\r\n }\r\n case layouts[currentLayout].Vanity.Mirror:\r\n switch (currentLayout) {\r\n case LayoutAbbreviation.Layout1: {\r\n return {\r\n polygonArray: [[sizeFactor*1100,0],[sizeFactor*1900,0],[sizeFactor*1900,sizeFactor*640],[sizeFactor*1100,sizeFactor*640]],\r\n width: sizeFactor*800,\r\n height: sizeFactor*640\r\n };\r\n }\r\n case LayoutAbbreviation.Layout4: {\r\n return {\r\n polygonArray: [[sizeFactor*130,100],[sizeFactor*600,100],[sizeFactor*600,sizeFactor*540],[sizeFactor*130,sizeFactor*540]],\r\n width: sizeFactor*470,\r\n height: sizeFactor*440\r\n };\r\n }\r\n }\r\n return null;\r\n case layouts[currentLayout].Walls.CenterWall:\r\n case layouts[currentLayout].Background.CenterWall: {\r\n switch (currentLayout) {\r\n case LayoutAbbreviation.Layout1: {\r\n return null;\r\n }\r\n case LayoutAbbreviation.Layout4: {\r\n return {\r\n polygonArray: [[sizeFactor*360,0],[sizeFactor*760,0],[sizeFactor*760,sizeFactor*880],[sizeFactor*360,sizeFactor*880]],\r\n width: sizeFactor*400,\r\n height: sizeFactor*880\r\n };\r\n }\r\n }\r\n return null;\r\n }\r\n case layouts[currentLayout].Walls.RightWall:\r\n case layouts[currentLayout].Background.RightWall: {\r\n switch (currentLayout) {\r\n case LayoutAbbreviation.Layout1: {\r\n return {\r\n polygonArray: [[sizeFactor*750,0],[sizeFactor*1920,0],[sizeFactor*1920,sizeFactor*1080],[sizeFactor*750,sizeFactor*1080]],\r\n width: sizeFactor*1170,\r\n height: sizeFactor*1080\r\n };\r\n }\r\n case LayoutAbbreviation.Layout4: {\r\n return {\r\n polygonArray: [[sizeFactor*120,0],[sizeFactor*1920,0],[sizeFactor*1920,sizeFactor*930],[sizeFactor*120,sizeFactor*930]],\r\n width: sizeFactor*1900,\r\n height: sizeFactor*930\r\n };\r\n }\r\n }\r\n return null;\r\n }\r\n case layouts[currentLayout].Walls.LeftWall:\r\n case layouts[currentLayout].Background.LeftWall: {\r\n switch (currentLayout) {\r\n case LayoutAbbreviation.Layout1: {\r\n return {\r\n polygonArray: [[0,0],[sizeFactor*600,0],[sizeFactor*600,sizeFactor*1080],[0,sizeFactor*1080]],\r\n width: sizeFactor*600,\r\n height: sizeFactor*1080\r\n };\r\n }\r\n case LayoutAbbreviation.Layout4: {\r\n return {\r\n polygonArray: [[0,0],[sizeFactor*600,0],[sizeFactor*600,sizeFactor*1080],[0,sizeFactor*1080]],\r\n width: sizeFactor*600,\r\n height: sizeFactor*1080\r\n };\r\n }\r\n }\r\n return null;\r\n }\r\n case layouts[currentLayout].Walls.CeilingPanels:\r\n switch (currentLayout) {\r\n case LayoutAbbreviation.Layout1: {\r\n return {\r\n polygonArray: [[sizeFactor*300,0],[sizeFactor*950,0],[sizeFactor*950,sizeFactor*100],[sizeFactor*300,sizeFactor*100]],\r\n width: sizeFactor*650,\r\n height: sizeFactor*100\r\n };\r\n }\r\n case LayoutAbbreviation.Layout4: {\r\n return {\r\n polygonArray: [[sizeFactor*560,0],[sizeFactor*1240,0],[sizeFactor*1240,sizeFactor*930],[sizeFactor*560,sizeFactor*930]],\r\n width: sizeFactor*580,\r\n height: sizeFactor*930\r\n };\r\n }\r\n }\r\n return null;\r\n case layouts[currentLayout].Background.Floor: {\r\n switch (currentLayout) {\r\n case LayoutAbbreviation.Layout1: {\r\n return {\r\n polygonArray: [[sizeFactor*100,sizeFactor*800],[sizeFactor*1300,sizeFactor*800],[sizeFactor*1300,sizeFactor*1080],[sizeFactor*100,sizeFactor*1080]],\r\n width: sizeFactor*1200,\r\n height: sizeFactor*280\r\n };\r\n }\r\n case LayoutAbbreviation.Layout4: {\r\n return {\r\n polygonArray: [[0,sizeFactor*740],[sizeFactor*1920,740],[sizeFactor*1920,sizeFactor*1080],[0,sizeFactor*1080]],\r\n width: sizeFactor*1920,\r\n height: sizeFactor*340\r\n };\r\n }\r\n }\r\n return null;\r\n }\r\n case layouts[currentLayout].Background.ShowerWall:\r\n switch (currentLayout) {\r\n case LayoutAbbreviation.Layout1: {\r\n return {\r\n polygonArray: [[sizeFactor*350,0],[sizeFactor*1650,0],[sizeFactor*1650,sizeFactor*930],[sizeFactor*350,sizeFactor*930]],\r\n width: sizeFactor*1300,\r\n height: sizeFactor*930\r\n };\r\n }\r\n case LayoutAbbreviation.Layout4: {\r\n return {\r\n polygonArray: [[sizeFactor*250,0],[sizeFactor*1250,0],[sizeFactor*1250,sizeFactor*930],[sizeFactor*250,sizeFactor*930]],\r\n width: sizeFactor*1000,\r\n height: sizeFactor*930\r\n };\r\n }\r\n }\r\n return null;\r\n case layouts[currentLayout].Bathtub.BathTubBody:\r\n return {\r\n polygonArray: [[sizeFactor*800,sizeFactor*580],[sizeFactor*1920,sizeFactor*580],[sizeFactor*1920,sizeFactor*1080],[sizeFactor*800,sizeFactor*1080]],\r\n width: sizeFactor*1120,\r\n height: sizeFactor*500\r\n };\r\n case layouts[currentLayout].Bathtub.BathTubFixture:\r\n return {\r\n polygonArray: [[sizeFactor*1380,sizeFactor*370],[sizeFactor*1660,sizeFactor*370],[sizeFactor*1660,sizeFactor*1000],[sizeFactor*1380,sizeFactor*1000]],\r\n width: sizeFactor*280,\r\n height: sizeFactor*730\r\n };\r\n default:\r\n return null\r\n }\r\n};\r\n\r\nexport default {\r\n layouts,\r\n getMenuByHoveredLayer: (currentLayout, layer) => {\r\n // console.log('currentLayout', currentLayout);\r\n // console.log('layer', layer);\r\n switch (layer.zIndex) {\r\n // General\r\n case layouts[currentLayout].Ceiling:\r\n return \"Ceiling\";\r\n case layouts[currentLayout].Toilet:\r\n return {\r\n parent: \"Toilet\",\r\n child: \"Toilet\"\r\n };\r\n case layouts[currentLayout].PaperHolder:\r\n return {\r\n parent: \"Toilet\",\r\n child: \"Paper Holder\"\r\n };\r\n // case layouts[currentLayout].Shower.ExtrusionWallLeft:\r\n // case layouts[currentLayout].Shower.Body[\"1\"]:\r\n // case layouts[currentLayout].Shower.Body[\"2\"]:\r\n // case layouts[currentLayout].Shower.Fixture:\r\n // return {\r\n // parent: \"Shower\",\r\n // child: \"Shower Body\"\r\n // };\r\n case layouts[currentLayout].Wall_A:\r\n return {\r\n parent: \"Walls\",\r\n child: \"Wall A\"\r\n };\r\n case layouts[currentLayout].Wall_C:\r\n return {\r\n parent: \"Walls\",\r\n child: \"Wall C\"\r\n };\r\n case layouts[currentLayout].Vanity.Mirror:\r\n return {\r\n parent: \"Vanity\",\r\n child: \"Mirror\"\r\n };\r\n // case layouts[currentLayout].Shower.ExtrusionWallLeft:\r\n // case layouts[currentLayout].Shower.ExtrusionWallLeftHalfWall:\r\n // case layouts[currentLayout].Shower.PonyWall:\r\n // return \"left_wall_custom\";\r\n case layouts[currentLayout].Vanity.VanityBacksplash:\r\n case layouts[currentLayout].Wall_B:\r\n return \"wall_b_custom\";\r\n case layouts[currentLayout].Vanity.Handle:\r\n case layouts[currentLayout].Vanity.CounterTop:\r\n case layouts[currentLayout].Vanity.Faucet:\r\n case layouts[currentLayout].Vanity.Sink:\r\n case layouts[currentLayout].Vanity.Cabinet:\r\n return \"vanity_custom\";\r\n\r\n case layouts[currentLayout].Shower.Threshold:\r\n return {\r\n parent: \"Shower\",\r\n child: \"Threshold\"\r\n };\r\n case layouts[currentLayout].Accessories.CornerCaddie:\r\n case layouts[currentLayout].Accessories.CornerCaddie2:\r\n return {\r\n parent: \"Shower Accessories\",\r\n child: \"Corner Caddie\"\r\n };\r\n case layouts[currentLayout].Accessories.LargeCornerCaddie:\r\n case layouts[currentLayout].Accessories.LargeCornerCaddie2:\r\n return {\r\n parent: \"Shower Accessories\",\r\n child: \"Large Corner Caddie\"\r\n };\r\n case layouts[currentLayout].Accessories.LargeCornerSeat:\r\n case layouts[currentLayout].Accessories.LargeCornerSeat2:\r\n return {\r\n parent: \"Shower Accessories\",\r\n child: \"Large Corner Seat\"\r\n };\r\n case layouts[currentLayout].Accessories.SoapDish:\r\n case layouts[currentLayout].Accessories.SoapDish2:\r\n case layouts[currentLayout].Accessories.SoapDish3:\r\n return {\r\n parent: \"Shower Accessories\",\r\n child: \"Soap Dish\"\r\n };\r\n case layouts[currentLayout].Accessories.SmallCornerShelf:\r\n return {\r\n parent: \"Shower Accessories\",\r\n child: \"Small Corner Shelf\"\r\n };\r\n case layouts[currentLayout].Accessories.GrabBar:\r\n case layouts[currentLayout].Accessories.GrabBar2:\r\n case layouts[currentLayout].Accessories.GrabBar3:\r\n return {\r\n parent: \"Shower Accessories\",\r\n child: \"Grab Bar\"\r\n };\r\n case layouts[currentLayout].Accessories.CornerShelf1:\r\n case layouts[currentLayout].Accessories.CornerShelf2:\r\n case layouts[currentLayout].Accessories.CornerShelf3:\r\n case layouts[currentLayout].Accessories.CornerShelf4:\r\n case layouts[currentLayout].Accessories.CornerShelf5:\r\n case layouts[currentLayout].Accessories.CornerShelf6:\r\n return {\r\n parent: \"Shower Accessories\",\r\n child: \"Corner Shelf\"\r\n };\r\n case layouts[currentLayout].Accessories.ShowerPod:\r\n return {\r\n parent: \"Shower Accessories\",\r\n child: \"Shower Pod\"\r\n };\r\n case layouts[currentLayout].Accessories.LargeShelf:\r\n return {\r\n parent: \"Shower Accessories\",\r\n child: \"Large Shelf\"\r\n };\r\n case layouts[currentLayout].Accessories.ShampooShelf:\r\n return {\r\n parent: \"Shower Accessories\",\r\n child: \"Shampoo Shelf\"\r\n };\r\n case layouts[currentLayout].Accessories.Seats:\r\n return {\r\n parent: \"Shower Accessories\",\r\n child: \"Seats\"\r\n };\r\n case layouts[currentLayout].Accessories.ShowerRod:\r\n return {\r\n parent: \"Shower Accessories\",\r\n child: \"Shower Rod\"\r\n };\r\n case layouts[currentLayout].Accessories.TowelBar:\r\n return {\r\n parent: \"Shower Accessories\",\r\n child: \"Towel Bar\"\r\n };\r\n case layouts[currentLayout].Accessories.WindowBody:\r\n return {\r\n parent: \"Shower Accessories\",\r\n child: \"Window\"\r\n };\r\n case layouts[currentLayout].Accessories.WindowKits:\r\n return {\r\n parent: \"Shower Accessories\",\r\n child: \"Window Kits\"\r\n };\r\n case layouts[currentLayout].Walls.RightWall:\r\n case layouts[currentLayout].Background.RightWall:\r\n return {\r\n parent: \"Walls\",\r\n child: \"Right Wall\"\r\n };\r\n case layouts[currentLayout].Background.LeftWall:\r\n case layouts[currentLayout].Walls.LeftWall:\r\n return {\r\n parent: \"Walls\",\r\n child: \"Left Wall\"\r\n };\r\n case layouts[currentLayout].Background.CenterWall:\r\n case layouts[currentLayout].Walls.CenterWall:\r\n return {\r\n parent: \"Walls\",\r\n child: \"Center Wall\"\r\n };\r\n case layouts[currentLayout].Walls.CeilingPanels:\r\n return {\r\n parent: \"Walls\",\r\n child: \"Ceiling Panels\"\r\n };\r\n case layouts[currentLayout].Shower.ShowerHead:\r\n return {\r\n parent: \"Shower\",\r\n child: \"Shower Head\"\r\n };\r\n case layouts[currentLayout].Background.Floor:\r\n return {\r\n parent: \"Floor\",\r\n child: \"Floor\"\r\n };\r\n case layouts[currentLayout].Shower.Glass:\r\n case layouts[currentLayout].Shower.Floor:\r\n case layouts[currentLayout].Shower.ShowerPanCombo:\r\n case layouts[currentLayout].Background.ShowerWall:\r\n case layouts[currentLayout].Shower.Body:\r\n case layouts[currentLayout].Shower.Overlay:\r\n case layouts[currentLayout].Shower.ShowerDoor:\r\n case layouts[currentLayout].Shower.ShowerDoor2:\r\n case layouts[currentLayout].Shower.ShowerDoorHandle:\r\n case layouts[currentLayout].Shower.ExtrusionWallLeft:\r\n case layouts[currentLayout].Shower.Fixture:\r\n case layouts[currentLayout].Shower.ShowerFixture:\r\n case layouts[currentLayout].Shower.ShowerFixture2:\r\n case layouts[currentLayout].ShowerWallAccent:\r\n return \"shower_custom\";\r\n case layouts[currentLayout].Shower.TubCombo.Liner:\r\n case layouts[currentLayout].Shower.TubCombo.ReplacementTub:\r\n case layouts[currentLayout].Shower.TubCombo.WalkInTub:\r\n case layouts[currentLayout].Shower.TubCombo.JettedTub:\r\n case layouts[currentLayout].Shower.TubCombo.WallConfiguration:\r\n return \"shower_combo\";\r\n // BathTub\r\n case layouts[currentLayout].Shower.PonyWallCap:\r\n case layouts[currentLayout].Shower.PonyWallGlass:\r\n return \"shower_pony_wall\";\r\n case layouts[currentLayout].Bathtub.BathTubBody:\r\n case layouts[currentLayout].Bathtub.BathTubFixture:\r\n return \"bathtub_custom\";\r\n default:\r\n return \"\"\r\n }\r\n },\r\n getLayerDimensions\r\n}\r\n\r\n\r\n","import {Part} from \"../part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport { showerAccessoriesThumbnail } from '../../../bvComponent/core/assets';\r\nimport LargeCornerSeat from \"../subparts/showerAccessories/largeCornerSeat\";\r\nimport SoapDish from \"../subparts/showerAccessories/soapDish\";\r\nimport CornerCaddie from \"../subparts/showerAccessories/cornerCaddie\";\r\nimport LargeCornerCaddie from \"../subparts/showerAccessories/largeCornerCaddie\";\r\nimport GrabBar from \"../subparts/showerAccessories/grabBar\";\r\nimport CornerShelf from \"../subparts/showerAccessories/cornerShelf\";\r\nimport ShowerPod from \"../subparts/showerAccessories/showerPod\";\r\nimport Seats from \"../subparts/showerAccessories/seats\";\r\nimport ShowerRod from \"../subparts/showerAccessories/showerRod\";\r\nimport WindowBody from \"../subparts/showerAccessories/windowBody\";\r\nimport WindowKits from \"../subparts/showerAccessories/windowKits\";\r\nimport LargeShelf from \"../subparts/showerAccessories/largeShelf\";\r\nimport TowelBar from \"../subparts/showerAccessories/towelBar\";\r\nimport ShampooShelf from \"../subparts/showerAccessories/shampooShelf\";\r\n\r\nexport class ShowerAccessories extends Part {\r\n static id = 'Shower Accessories';\r\n\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partThumbnail = showerAccessoriesThumbnail;\r\n this.partName = 'Shower Accessories';\r\n this.translateId = \"visualizer.bathroom.accessories\";\r\n this.relatedItems = [];\r\n\r\n // related items\r\n this.soapDish = null;\r\n this.largeCornerSeat = null;\r\n this.largeCornerCaddie = null;\r\n this.cornerCaddie = null;\r\n this.smallCornerShelf = null;\r\n this.grabBar = null;\r\n this.showerPod = null;\r\n this.seats = null;\r\n this.windowBody = null;\r\n this.windowKits = null;\r\n this.largeShelf = null;\r\n this.shampooShelf = null;\r\n this.towelBar = null;\r\n\r\n //current active caddie type\r\n this.caddie_type = \"corner_shelf\";\r\n\r\n }\r\n\r\n load(dbFeature) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Soap Dish\":\r\n relatedItemName = \"soapDish\";\r\n RelatedItemClass = SoapDish;\r\n break;\r\n case \"Large Corner Seat\":\r\n relatedItemName = \"largeCornerSeat\";\r\n RelatedItemClass = LargeCornerSeat;\r\n break;\r\n case \"Large Corner Caddie\":\r\n relatedItemName = \"largeCornerCaddie\";\r\n RelatedItemClass = LargeCornerCaddie;\r\n break;\r\n case \"Corner Caddie\":\r\n relatedItemName = \"cornerCaddie\";\r\n RelatedItemClass = CornerCaddie;\r\n break;\r\n case \"Grab Bar\":\r\n relatedItemName = \"grabBar\";\r\n RelatedItemClass = GrabBar;\r\n break;\r\n case \"Shower Rod\":\r\n relatedItemName = \"showerRod\";\r\n RelatedItemClass = ShowerRod;\r\n break;\r\n case \"Corner Shelf\":\r\n case \"Small Corner Shelf\":\r\n relatedItemName = \"cornerShelf\";\r\n RelatedItemClass = CornerShelf;\r\n break;\r\n case \"Shower Pod\":\r\n case \"Storage Pod\":\r\n case \"Storage Pods\":\r\n relatedItemName = \"showerPod\";\r\n RelatedItemClass = ShowerPod;\r\n break;\r\n case \"Large Shelf\":\r\n relatedItemName = \"largeShelf\";\r\n RelatedItemClass = LargeShelf;\r\n break;\r\n case \"Shampoo Shelf\":\r\n relatedItemName = \"shampooShelf\";\r\n RelatedItemClass = ShampooShelf;\r\n break;\r\n case \"Seats\":\r\n case \"flip-Up Seat\":\r\n case \"Flip-Up Seat\":\r\n relatedItemName = \"seats\";\r\n RelatedItemClass = Seats;\r\n break;\r\n case \"Window Kit\":\r\n case \"Window Kits\": {\r\n relatedItemName = \"windowKits\";\r\n RelatedItemClass = WindowKits;\r\n break;\r\n }\r\n case \"Window\": {\r\n relatedItemName = \"decorWindow\";\r\n RelatedItemClass = WindowBody;\r\n break;\r\n }\r\n case \"Towel Bar\": {\r\n relatedItemName = \"towelBar\";\r\n RelatedItemClass = TowelBar;\r\n break;\r\n }\r\n\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n if (relatedItemName !== \"shadows\") {\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n}\r\n\r\n","export const LayoutType = {\r\n Layout1: 1,\r\n // Layout2: 2,\r\n Layout31: 31,\r\n};\r\n\r\nexport const LayoutAbbreviation = {\r\n All: \"ALL\",\r\n Layout1: \"Layout1\",\r\n // Layout2: \"Layout2\",\r\n Layout31: \"Layout31\",\r\n};\r\n\r\nexport const LayoutAbbreviations = [\r\n \"Layout1\",\r\n // \"Layout2\",\r\n \"Layout31\",\r\n];\r\nexport const LayoutAbbreviationsToRemove = [\r\n \"Layout31\",\r\n // \"Layout2\",\r\n \"Layout1\",\r\n];\r\n\r\nexport const METADATA = {\r\n ALL: \"ALL\"\r\n};\r\n\r\nexport const DECORS_MAX = 10;\r\n","import React, {useEffect, useState} from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport {injectIntl} from \"react-intl\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport IconButton from \"@mui/material/IconButton\";\r\nimport ChevronLeftIcon from \"@mui/icons-material/ChevronLeft\";\r\nimport ChevronRightIcon from \"@mui/icons-material/ChevronRight\";\r\n\r\nimport MaterialSpinner from \"../../../../ui/materialSpinner\";\r\nimport {THUMBNAIL_SIZES} from \"../../../../../misc/utils\";\r\nimport {featureThumbnailUrl} from \"../../../../../misc/helpers\";\r\nimport {baseNewImagesPath} from \"../../../../assets\";\r\nimport {featureInterface} from \"../../../../../interfaces/featureInterface\";\r\nimport Analytics, {LOOK_JOURNEY_ANALYTIC_EVENTS, PRODUCT_JOURNEY_ANALYTIC_EVENTS} from \"../../../../../analytics\";\r\nimport {LOOK_OVERLAYS} from \"../../../core/constants\";\r\nimport {IS_PRODUCT_JOURNEY} from \"../../../../../config\";\r\nimport {setLookOverlayOpened} from \"../../../../../actions/lookFunctions\";\r\n\r\nconst LookFeatureImage = (props) => {\r\n\r\n const {lookActiveFeature, intl, withoutGallery, featureIsLocked, setLookOverlayOpened} = props;\r\n const [isLoading, toggleLoader] = useState(true);\r\n const [galleryImages, setGalleryImages] = useState([]);\r\n const [activeImageIndex, setActiveImageIndex] = useState(0);\r\n\r\n useEffect(() => {\r\n let featureGalleryImages = (lookActiveFeature.dbFeature.galleryEnabled && Array.isArray(lookActiveFeature.dbFeature.galleryImages)\r\n && lookActiveFeature.dbFeature.galleryImages.length) ? lookActiveFeature.dbFeature.galleryImages : [];\r\n setGalleryImages([{\r\n url: featureThumbnailUrl(lookActiveFeature) || `${baseNewImagesPath}images/image-not-found.png`,\r\n preview: featureThumbnailUrl(lookActiveFeature, THUMBNAIL_SIZES.medium)\r\n }, // main image thumbnail\r\n ...featureGalleryImages\r\n ]);\r\n setActiveImageIndex(0);\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [lookActiveFeature]);\r\n\r\n const arrowClick = (analyticsLabel, nextIndex) => {\r\n Analytics.sendClickEvent(analyticsLabel);\r\n if (featureIsLocked) {\r\n setLookOverlayOpened(LOOK_OVERLAYS.leadCapture);\r\n return false\r\n }\r\n if (nextIndex !== activeImageIndex) {\r\n toggleLoader(true);\r\n setActiveImageIndex(nextIndex)\r\n }\r\n }\r\n\r\n const backButtonClick = () => {\r\n const analyticsLabel = IS_PRODUCT_JOURNEY\r\n ? PRODUCT_JOURNEY_ANALYTIC_EVENTS.productFeatureImageChangeLeft\r\n : LOOK_JOURNEY_ANALYTIC_EVENTS.lookFeatureImageChangeLeft;\r\n const nextIndex = galleryImages[activeImageIndex - 1] ? activeImageIndex - 1 : galleryImages.length - 1\r\n arrowClick(analyticsLabel, nextIndex)\r\n };\r\n\r\n const nextButtonClick = () => {\r\n const analyticsLabel = IS_PRODUCT_JOURNEY\r\n ? PRODUCT_JOURNEY_ANALYTIC_EVENTS.productFeatureImageChangeRight\r\n : LOOK_JOURNEY_ANALYTIC_EVENTS.lookFeatureImageChangeRight;\r\n const nextIndex = galleryImages[activeImageIndex + 1] ? activeImageIndex + 1 : 0\r\n arrowClick(analyticsLabel, nextIndex)\r\n };\r\n //\r\n // const thumbnailClick = (index) => {\r\n // props.toggleGalleryVisible(true);\r\n // props.setGalleryActiveImageIndex(index);\r\n // };\r\n\r\n // console.log(\"galleryImages\", galleryImages);\r\n const mainImageUrl = galleryImages[activeImageIndex];\r\n\r\n return (\r\n
    \r\n {withoutGallery ? null : (\r\n \r\n \r\n \r\n )}\r\n
    \r\n {isLoading || !mainImageUrl ? : null}\r\n
    \r\n {mainImageUrl ? thumbnailClick(activeImageIndex)}\r\n src={mainImageUrl.url} onLoad={() => toggleLoader(false)} alt=\"\"/> : null}\r\n
    \r\n
    \r\n {withoutGallery ? null : (\r\n \r\n \r\n \r\n )}\r\n
    \r\n )\r\n};\r\n\r\nLookFeatureImage.propTypes = {\r\n withoutGallery: PropTypes.bool,\r\n forFeature: PropTypes.shape(featureInterface),\r\n featureIsLocked: PropTypes.bool,\r\n}\r\n\r\nconst mapStateToProps = (store, ownProps) => {\r\n const {lookActiveFeature} = store.lookState;\r\n return {\r\n lookActiveFeature: ownProps.forFeature || lookActiveFeature,\r\n windowWidth: store.serverState.windowWidth,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setLookOverlayOpened\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(LookFeatureImage)\r\n);\r\n","import * as types from '../actions/actionTypes';\r\nexport const ACTIVE_ROOM_TYPE = {\r\n category: 'category',\r\n roomGroup: 'roomGroup',\r\n quote: 'quote',\r\n}\r\n\r\nconst initialState = {\r\n menuOpened: \"\",\r\n menuOpenedLock: false,\r\n activeButton: null,\r\n activeSubMenuButton: null,\r\n activeLevel3Button: null,\r\n activeRoom: null,\r\n activeRoomId: null,\r\n activeRoomIndex: null,\r\n activeRoomType: null,\r\n isFreeDrawMode: false,\r\n isWallsUpMode: true,\r\n isWallsLockMode: true,\r\n roomSwitcher: {\r\n isVisible: false\r\n },\r\n roomLayouts: [],\r\n contextMenu: {\r\n isOpened: false,\r\n activeMenu: \"\",\r\n pos: {},\r\n parent: null\r\n },\r\n contextMenuV2: {\r\n isOpened: false,\r\n menuItems: [],\r\n position: {}\r\n },\r\n systemMessage: {\r\n isOpened: false,\r\n title: \"\",\r\n text: \"\"\r\n },\r\n ar3dPopup: {\r\n isOpened: false,\r\n contentType: false\r\n },\r\n systemDeleteMessage: {\r\n isOpened: false,\r\n shape: null\r\n },\r\n sqftPopup: {\r\n title: \"\",\r\n content: \"\",\r\n isOpened: false,\r\n confirmCallback: new Function (),\r\n confirmText: \"\",\r\n cancelCallback: new Function (),\r\n cancelText: \"\"\r\n },\r\n changeValuePopups: [],\r\n validationPopups: [],\r\n shapeIdsWithMissingFeature: [],\r\n isShapeFeatureMissing: false,\r\n isITextEditing: false,\r\n isSlabPlaceholderOverlapsWithMultipleShapes: false,\r\n validationMessage: {},\r\n reCacheMenuCounter: 0,\r\n cabinetRelatedItems: [],\r\n};\r\n\r\nexport default function (state = initialState, action) {\r\n let changeValuePopups;\r\n let validationPopups;\r\n switch (action.type) {\r\n case types.SET_SQFT_MENU_OPENED:\r\n case types.SET_SQFT_MENU_LOCK:\r\n case types.SET_SQFT_MENU_ACTIVE_BUTTON:\r\n case types.SET_SQFT_ACTIVE_SUB_MENU_BUTTON:\r\n case types.SET_SQFT_ACTIVE_LEVEL3_BUTTON:\r\n case types.SET_SQFT_ACTIVE_ROOM:\r\n case types.SET_SQFT_ACTIVE_ROOM_ID:\r\n case types.SET_SQFT_ROOM_LAYOUTS:\r\n case types.SET_SQFT_ACTIVE_ROOM_TYPE:\r\n case types.SET_SQFT_ACTIVE_ROOM_INDEX:\r\n case types.SET_FREE_DRAW_MODE:\r\n case types.SET_WALLS_UP_MODE:\r\n case types.SET_WALLS_LOCK_MODE:\r\n case types.SET_SHAPE_IDS_WITH_MISSING_FEATURES:\r\n case types.SET_CHANGE_SHAPE_FEATURE_MISSING_MESSAGE:\r\n case types.SET_IS_ITEXT_EDITING:\r\n case types.SET_SLAB_PLACEHOLDER_OVERLAPS_WITH_MULTIPLE_SHAPES:\r\n case types.SET_RE_CACHE_MENU_COUNTER:\r\n case types.SET_CABINET_RELATED_ITEMS:\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n });\r\n case types.ADD_SHAPE_ID_WITH_MISSING_FEATURES:\r\n return Object.assign({}, state, {\r\n shapeIdsWithMissingFeature: [...state.shapeIdsWithMissingFeature, action.payload]\r\n });\r\n case types.SET_SQFT_ROOM_SWITCHER_VISIBLE:\r\n return Object.assign({}, state, {\r\n roomSwitcher: {...state.roomSwitcher, ...{isVisible: action.payload.isVisible}}\r\n });\r\n case types.SET_SQFT_CONTEXT_MENU:\r\n return Object.assign({}, state, {\r\n contextMenu: {...state.contextMenu, ...action.payload.contextMenu}\r\n });\r\n case types.SET_SQFT_SYSTEM_MESSAGE:\r\n return Object.assign({}, state, {\r\n systemMessage: {...state.systemMessage, ...action.payload.systemMessage}\r\n });\r\n case types.SET_SQFT_AR3D_POPUP:\r\n return Object.assign({}, state, {\r\n ar3dPopup: {...state.ar3dPopup, ...action.payload.ar3dPopup}\r\n });\r\n case types.SET_SQFT_POPUP:\r\n return Object.assign({}, state, {\r\n sqftPopup: {...state.sqftPopup, ...action.payload.sqftPopup}\r\n });\r\n case types.SET_SQFT_CONTEXT_MENU_V2:\r\n return Object.assign({}, state, {\r\n contextMenuV2: {...state.contextMenuV2, ...action.payload.contextMenuV2}\r\n });\r\n case types.SET_SQFT_SYSTEM_DELETE_MESSAGE:\r\n return Object.assign({}, state, {\r\n systemDeleteMessage: {...state.systemDeleteMessage, ...action.payload.systemDeleteMessage}\r\n });\r\n\r\n case types.SET_CHANGE_VALUE_POPUPS:\r\n state = {...state, changeValuePopups: action.payload.changeValuePopups};\r\n break;\r\n case types.ADD_CHANGE_VALUE_POPUP:\r\n return Object.assign({}, state, {\r\n changeValuePopups: [...state.changeValuePopups, action.payload]\r\n });\r\n case types.CHANGE_VALUE_POPUP:\r\n changeValuePopups = state.changeValuePopups.map((item) => {\r\n if (item.id !== action.payload.id) { return item }\r\n\r\n return {\r\n ...item,\r\n ...action.payload\r\n }\r\n })\r\n return Object.assign({}, state, {changeValuePopups: changeValuePopups });\r\n case types.DELETE_CHANGE_VALUE_POPUP:\r\n changeValuePopups = state.changeValuePopups.filter((row) => row.id !== action.payload.id);\r\n\r\n return Object.assign({}, state, {\r\n changeValuePopups: changeValuePopups\r\n });\r\n\r\n case types.SET_VALIDATION_POPUPS:\r\n state = {...state, validationPopups: action.payload.validationPopups};\r\n break;\r\n case types.ADD_VALIDATION_POPUP:\r\n return Object.assign({}, state, {\r\n validationPopups: [...state.validationPopups, action.payload]\r\n });\r\n case types.VALIDATION_POPUP:\r\n validationPopups = state.validationPopups.map((item) => {\r\n if (item.id !== action.payload.id) { return item }\r\n\r\n return {\r\n ...item,\r\n ...action.payload\r\n }\r\n })\r\n return Object.assign({}, state, {validationPopups: validationPopups });\r\n case types.DELETE_VALIDATION_POPUP:\r\n validationPopups = state.validationPopups.filter((row) => row.id !== action.payload.id);\r\n\r\n return Object.assign({}, state, {\r\n validationPopups: validationPopups\r\n });\r\n default:\r\n return state\r\n }\r\n}\r\n","import * as types from '../actions/actionTypes';\r\nimport {hardCodeIsModerno} from \"../misc/fabricatorHardcode\";\r\n\r\nexport const DEFAULT_SLAB_IMAGE_PART = 60;\r\nexport const SLAB_IMAGE_TYPES = {\r\n placeholder: \"placeholder\",\r\n upload: \"upload\"\r\n}\r\nconst isModerno = hardCodeIsModerno();\r\n\r\nconst initialState = {\r\n isShowSlabTool: false,\r\n isSlabToolVisited: false,\r\n isMeasurementVisibleInSlabMode: false,\r\n roomsWithVisitedSlabTool: [],\r\n searchText: \"\",\r\n activeSlabId: 0,\r\n selectedImage: \"\",\r\n activeStep: 1,\r\n slabImageType: null,\r\n slabImageHeight: isModerno ? 0 : 60,\r\n slabImageWidth: isModerno ? 0 : 126,\r\n slabAspectRatio: 0,\r\n croppedSlabImages: [],\r\n pricePerArea: 0,\r\n cropperData: {\r\n x: 0,\r\n y: 0,\r\n width: 0,\r\n height: 0,\r\n rotate: 0,\r\n scaleX: 0,\r\n scaleY: 0\r\n },\r\n activeSlabUrl: \"\",\r\n isSizeValidationFailed: false,\r\n isSlabPricingEnabled: true,\r\n};\r\n\r\nexport default function(state = initialState, action) {\r\n\r\n let filteredImages;\r\n switch(action.type) {\r\n case types.SHOW_SLAB_TOOL:\r\n case types.SET_SLAB_TOOL_VISITED:\r\n case types.SET_ACTIVE_SLAB_ID:\r\n case types.SET_ACTIVE_SLAB_URL:\r\n case types.SET_SQFT_SLAB_SEARCH_TEXT:\r\n case types.SET_SQFT_SLAB_ASPECT_RATIO:\r\n case types.SET_SQFT_SLAB_IMAGE_WIDTH:\r\n case types.SET_SQFT_SLAB_IMAGE_HEIGHT:\r\n case types.SET_SQFT_SLAB_ACTIVE_STEP:\r\n case types.SET_SQFT_SLAB_CROPPER_DATA:\r\n case types.SET_PRICE_PER_AREA:\r\n case types.SET_SLAB_IMAGE_TYPE:\r\n case types.SET_IS_MEASUREMENT_VISIBLE_IN_SLAB_MODE:\r\n case types.SET_IS_SIZE_VALIDATION_FAILED:\r\n case types.SET_IS_SLAB_PRICING_ENABLED:\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n });\r\n case types.SET_SQFT_CROPPED_SLAB_IMAGES:\r\n state = {...state, croppedSlabImages: action.payload.croppedSlabImages};\r\n break;\r\n case types.ADD_SQFT_CROPPED_SLAB_IMAGE:\r\n return Object.assign({}, state, {\r\n croppedSlabImages: [...state.croppedSlabImages, action.payload]\r\n });\r\n case types.ADD_ROOM_WITH_VISITED_SLAB_TOOL:\r\n if (!state.roomsWithVisitedSlabTool.includes(action.payload)) {\r\n return Object.assign({}, state, {\r\n roomsWithVisitedSlabTool: [...state.roomsWithVisitedSlabTool, action.payload]\r\n });\r\n }\r\n return state\r\n case types.DELETE_CROPPED_SLAB_IMAGE:\r\n filteredImages = state.croppedSlabImages.filter((row) => row.id !== action.payload.id);\r\n\r\n return Object.assign({}, state, {\r\n croppedSlabImages: filteredImages\r\n });\r\n\r\n }\r\n\r\n return state;\r\n}\r\n","import axios from \"axios\";\r\n\r\nexport const AxiosInstance = axios.create({\r\n baseURL: document.kvConfig.domain || \"\",\r\n // timeout: 120000,\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n }\r\n});\r\n\r\n// AxiosInstance.interceptors.response.use((response) => {\r\n// const {serverState} = store.getState();\r\n// if (!serverState.networkConnection) {\r\n// store.dispatch(setNetworkConnection(true))\r\n// }\r\n// return response;\r\n// }, (error) => {\r\n// // Do something with response error\r\n// if (error && error.toJSON && error.toJSON().message === \"Network Error\") {\r\n// store.dispatch(setNetworkConnection(false))\r\n// }\r\n// return Promise.reject(error);\r\n// });\r\n\r\nexport const leadApiGet = (url) => {\r\n return AxiosInstance.get(url)\r\n};\r\n\r\nexport const leadApiPost = (url, data, headers = null) => {\r\n return AxiosInstance.post(url, data, headers ? {headers} : null);\r\n}\r\n","export const VISIT_ROUTES = {\r\n home: \"/\",\r\n // personal: \"/personal/:activeSubStep?\",\r\n // project: \"/project/:activeSubStep?\",\r\n // contact: \"/contact\",\r\n // appointment: \"/appointment/:activeSubStep?\",\r\n wizard: \"/wizard/:wizardId?/:leadStepName?/:activeSubStep?\",\r\n contact: \"/contact\",\r\n thanks: \"/thanks\",\r\n review: \"/review\",\r\n success: \"/success\",\r\n};\r\n\r\n// export const VISIT_ROUTES = {\r\n// home: \"/:wizardId?\",\r\n// product: \"/:wizardId?/product/:activeSubStep?\",\r\n// personal: \"/:wizardId?/personal/:activeSubStep?\",\r\n// contact: \"/:wizardId?/contact\",\r\n// appointment: \"/:wizardId?/appointment/:activeSubStep?\",\r\n// review: \"/:wizardId?/review\",\r\n// success: \"/:wizardId?/success\",\r\n// };\r\n\r\nexport const VISIT_STEPS = {\r\n wizard: \"/wizard\",\r\n personal: \"/personal\",\r\n project: \"/project\",\r\n contact: \"/contact\",\r\n appointment: \"/appointment\",\r\n review: \"/review\",\r\n success: \"/success\",\r\n}\r\n\r\nexport const IS_DEV_MODE = window.location.href.indexOf('dev=1') !== -1 || document.kvConfig.devMode;\r\nexport const SKIP_CALENDAR = window.location.href.indexOf('skip=1') !== -1;\r\n","export const SET_USER_VALUE = \"SET_USER_VALUE\";\r\nexport const SET_USER_LOCATION = \"SET_USER_LOCATION\";\r\nexport const SET_USER_ERRORS = \"SET_USER_ERRORS\";\r\nexport const SET_REGISTERED_USER_DATA = \"SET_REGISTERED_USER_DATA\";\r\n\r\nexport const setUserInfo = (name, value) => ({\r\n type: SET_USER_VALUE,\r\n payload: {name, value}\r\n});\r\n\r\nexport const setUserLocation = (name, value) => ({\r\n type: SET_USER_LOCATION,\r\n payload: {name, value}\r\n});\r\n\r\nexport const setUserErrors = (name, errors = []) => ({\r\n type: SET_USER_ERRORS,\r\n payload: {name, errors}\r\n});\r\n\r\nexport const setRegisteredUserData = (registeredUserEmail, registeredUserAuthToken) => ({\r\n type: SET_REGISTERED_USER_DATA,\r\n payload: {registeredUserEmail, registeredUserAuthToken}\r\n});\r\n\r\nexport const replacePhoneToMatchMask = (phone) => {\r\n\r\n // return phone.replace(/^\\(?(\\d{3})\\)?\\s?(\\d{3})\\-?(\\d+)$/, \"($1) $2-$3\") old mask, not replacing while typing\r\n\r\n // Remove all non-digit characters\r\n let cleaned = phone.replace(/\\D/g, '');\r\n\r\n // Format as (xxx) xxx-xxxx as the user types\r\n if (cleaned.length > 0) {\r\n cleaned = `(${cleaned}`;\r\n }\r\n if (cleaned.length > 4) {\r\n cleaned = `${cleaned.slice(0, 4)}) ${cleaned.slice(4)}`;\r\n }\r\n if (cleaned.length > 9) {\r\n cleaned = `${cleaned.slice(0, 9)}-${cleaned.slice(9)}`;\r\n }\r\n\r\n // Update the input value with the formatted number\r\n return cleaned.slice(0, 14); // Maximum length is 14 including the formatting characters\r\n}\r\nexport const replaceMaskToPassPhoneOnTheBackend = (phone) => {\r\n if (!phone) {\r\n return \"\"\r\n }\r\n return phone\r\n .replace(/ /g,\"\")\r\n .replace(/-/g,\"\")\r\n .replace(/\\(/g,\"\")\r\n .replace(/\\)/g,\"\")\r\n}\r\n","import {Part} from \"../part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport {countertopGroupThumbnail} from \"../assets\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport {PLACEMENTS} from \"../constants\";\r\n\r\nimport Countertop from \"../subparts/countertop/countertop\";\r\nimport Faucet from \"../subparts/countertop/faucet\";\r\nimport Sink from \"../subparts/countertop/sink\";\r\nimport Stovetop from \"../subparts/countertop/stovetop\";\r\n\r\nimport Cutouts from \"../subparts/countertop/cutouts\";\r\nimport EdgeProfile from \"../subparts/countertop/edgeProfile\";\r\nimport Radius from \"../subparts/countertop/radius\";\r\n\r\nexport default class CountertopGroup extends Part {\r\n static id = 'Countertop';\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Countertop';\r\n this.partThumbnail = countertopGroupThumbnail;\r\n this.translateId = \"visualizer.kitchen.countertop\";\r\n\r\n // related items\r\n this.countertop = null;\r\n this.faucet = null;\r\n this.sink = null;\r\n\r\n this.edge = null;\r\n this.cutouts = null;\r\n this.radius = null;\r\n }\r\n\r\n load(dbFeature) {\r\n let relatedItemName = \"\",\r\n shouldLoadInDifferentGroups = false,\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Countertop\":\r\n relatedItemName = \"countertop\";\r\n RelatedItemClass = Countertop;\r\n break;\r\n case \"Edge Profile\":\r\n shouldLoadInDifferentGroups = true;\r\n relatedItemName = \"edge\";\r\n RelatedItemClass = EdgeProfile;\r\n break;\r\n case \"Cutouts\":\r\n relatedItemName = \"cutouts\";\r\n RelatedItemClass = Cutouts;\r\n break;\r\n case \"Radius\":\r\n relatedItemName = \"radius\";\r\n RelatedItemClass = Radius;\r\n break;\r\n case \"Faucet\":\r\n if ((dbFeature.metaData[\"Placement\"] && dbFeature.metaData[\"Placement\"].includes(PLACEMENTS.Countertop)) || !dbFeature.metaData[\"Placement\"]) {\r\n if (!dbFeature.metaData[\"Placement\"]) {\r\n shouldLoadInDifferentGroups = true;\r\n }\r\n relatedItemName = \"faucet\";\r\n RelatedItemClass = Faucet;\r\n }\r\n break;\r\n case \"Sink\":\r\n if ((dbFeature.metaData[\"Placement\"] && dbFeature.metaData[\"Placement\"].includes(PLACEMENTS.Countertop)) || !dbFeature.metaData[\"Placement\"]) {\r\n if (!dbFeature.metaData[\"Placement\"]) {\r\n shouldLoadInDifferentGroups = true;\r\n }\r\n relatedItemName = \"sink\";\r\n RelatedItemClass = Sink;\r\n }\r\n break;\r\n case \"Stovetop\":\r\n if ((dbFeature.metaData[\"Placement\"] && dbFeature.metaData[\"Placement\"].includes(PLACEMENTS.Countertop)) || !dbFeature.metaData[\"Placement\"]) {\r\n if (!dbFeature.metaData[\"Placement\"]) {\r\n shouldLoadInDifferentGroups = true;\r\n }\r\n relatedItemName = \"stovetop\";\r\n RelatedItemClass = Stovetop;\r\n }\r\n break;\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].load(dbFeature);\r\n return !shouldLoadInDifferentGroups;\r\n }\r\n return false\r\n }\r\n\r\n navigationItem() {\r\n return new DesignNavigationItem('Countertop', this);\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n handleSubPartClick() {\r\n\r\n }\r\n\r\n subParts(withHidden = true, hideWithoutFeatures = false) {\r\n return this.getRelatedItems()\r\n .filter(item => {\r\n if (hideWithoutFeatures && (item.partId === \"cutouts\" || item.partId === \"radius\")) {\r\n return false\r\n }\r\n return this.filterRelatedItem(item, withHidden)\r\n })\r\n .map(_ => new DesignNavigationItem(_.partName, _));\r\n }\r\n\r\n}\r\n","export const GROHE_POST_MESSAGES_ACTIONS = {\r\n exit: \"EXIT\",\r\n save: \"SAVE\",\r\n addToCart: \"ADDTOCART\",\r\n signIn: \"SIGNIN\",\r\n openMiniCart: \"OPENMINICART\",\r\n}\r\n\r\nexport const GROHE_ON_OPEN_ACTION = {\r\n shareFacebook: \"facebook\",\r\n shareTwitter: \"twitter\",\r\n sharePinterest: \"pinterest\",\r\n saveQuote: \"saveQuote\",\r\n}\r\n","import React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport {injectIntl} from \"react-intl\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport {\r\n getFeatureIsLocked,\r\n getFeatureUnit,\r\n getPriceWithCurrency,\r\n toFixedFeatureCost,\r\n toFixedPrice\r\n} from \"../../../../../misc/helpers\";\r\nimport {featureInterface} from \"../../../../../interfaces/featureInterface\";\r\nimport {getCurrentLayout} from \"../../../../appLayout\";\r\nimport {isVisibleForNavigation} from \"../../../../../misc/displayLogic\";\r\nimport LookFeaturePriceLocked from \"./lookFeaturePriceLocked\";\r\nimport {pricingIsLocked} from \"../../lookNavigationFunctions\";\r\nimport {getCartItemsCount} from \"../../../grohe/groheNavigation/groheFunctions\";\r\nimport MaterialSpinner from \"../../../../ui/materialSpinner\";\r\nimport FeaturePriceInput from \"../../../../selectionWindow/selectionFeatureInfo/featurePriceInput\";\r\nimport {wizardGroupInterface} from \"../../../../../interfaces/wizardItemInterface\";\r\n\r\nconst LookFeaturePrice = (props) => {\r\n\r\n const {lookFeature, quantity, fabricatorData, intl, withUnit, isBundleChild, className, listPage, mainContentPrice,\r\n isPhoneNumberValidated, showPriceAlways, wizardGroup} = props;\r\n const fabricatorSettings = fabricatorData.settings;\r\n\r\n if (!lookFeature) {\r\n return null;\r\n }\r\n\r\n const getQuote = fabricatorSettings.enableQuote && !isPhoneNumberValidated;\r\n\r\n let showPriceLocked = !showPriceAlways && getFeatureIsLocked(lookFeature);\r\n if (!showPriceLocked && listPage) {\r\n showPriceLocked = getQuote;\r\n }\r\n if (wizardGroup && wizardGroup.skipLockDontApply) {\r\n showPriceLocked = false;\r\n }\r\n const {showPrice} = pricingIsLocked();\r\n\r\n if (showPriceLocked) {\r\n if (!showPrice && listPage) {\r\n return null\r\n }\r\n let lockedText = ;\r\n // if (getQuote) { // we already have icon and locked, we dont need $,icon,locked\r\n // lockedText = (\r\n // \r\n // {fabricatorSettings.currencySign}\r\n // {lockedText}\r\n // \r\n // )\r\n // }\r\n return className ?
    {lockedText}
    : lockedText\r\n }\r\n\r\n if (!showPrice || !isVisibleForNavigation(lookFeature, true)) {\r\n return null\r\n }\r\n\r\n const layout = getCurrentLayout();\r\n if (!layout.initialized) {\r\n return \r\n }\r\n if (!listPage && !layout.partIdExistInQtCategory(lookFeature.partId, true) && !isBundleChild) {\r\n return null;\r\n }\r\n\r\n const featurePrice = +toFixedFeatureCost(lookFeature, Number.isInteger(quantity) ? quantity : 1);\r\n\r\n if (!featurePrice && !lookFeature.dbFeature.priceEditable) { // if it is zero - we are hiding the price, no need to show included\r\n return null\r\n }\r\n\r\n let unit = \"\";\r\n if (withUnit) {\r\n unit = getFeatureUnit(lookFeature, intl, fabricatorData);\r\n }\r\n\r\n if (mainContentPrice && document.kvConfig.isBackend && lookFeature.dbFeature.priceEditable) {\r\n const price = toFixedPrice(featurePrice);\r\n return \r\n }\r\n\r\n const finalText = withUnit\r\n ? `${unit}: ${getPriceWithCurrency(fabricatorSettings, toFixedPrice(featurePrice), lookFeature)}`\r\n : getPriceWithCurrency(fabricatorSettings, toFixedPrice(featurePrice), lookFeature)\r\n\r\n return className ?
    {finalText}
    : finalText\r\n\r\n};\r\n\r\nLookFeaturePrice.propTypes = {\r\n lookFeature: PropTypes.shape(featureInterface),\r\n withUnit: PropTypes.bool,\r\n quantity: PropTypes.number,\r\n className: PropTypes.string,\r\n listPage: PropTypes.bool,\r\n showPriceAlways: PropTypes.bool,\r\n mainContentPrice: PropTypes.bool,\r\n wizardGroup: PropTypes.shape(wizardGroupInterface),\r\n}\r\n\r\nconst mapStateToProps = (store, ownProps) => {\r\n const {isPhoneNumberValidated} = store.userState; // to update component when user is logged in\r\n const {cartItems} = store.cartState; // to update component when user is logged in\r\n const cartItemsLength = getCartItemsCount(cartItems, ownProps.intl, true);\r\n const {qtCategoriesLoaded} = store.qtState; // to update price after categories are loaded\r\n\r\n // we need force here to check every time count is updated, it is just for update\r\n\r\n // const featureInfoCount = ownProps.lookFeature && ownProps.lookFeature.dbFeature\r\n // && ownProps.lookFeature.dbFeature.priceEditable && ownProps.mainContentPrice\r\n // ? store.selectionState.featureInfoCount\r\n // : null;\r\n\r\n const featureInfoCount = store.selectionState.featureInfoCount;\r\n\r\n return {\r\n fabricatorData: store.fabricatorState,\r\n isPhoneNumberValidated,\r\n cartItemsLength, // we need to reload item price if quantity is changed (complex logic dependency)\r\n qtCategoriesLoadedLength: qtCategoriesLoaded.length,\r\n featureInfoCount,\r\n };\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps)(LookFeaturePrice)\r\n)\r\n","import React from \"react\";\r\nimport {connect} from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\nimport {injectIntl} from \"react-intl\";\r\n\r\nconst FeatureDescription = (props) => {\r\n\r\n const {feature, intl, fabricatorData, brief, className, textLength} = props;\r\n\r\n let desc = \"\";\r\n if ((fabricatorData.isLowes || fabricatorData.isCaesarStone) && intl.messages) {\r\n if (intl.locale === \"fr-FR\" && intl.messages[\"transDoc.description_FR.\" + feature.dbFeature.sharedFeatureName]) {\r\n desc = intl.formatMessage({id: \"transDoc.description_FR.\" + feature.dbFeature.sharedFeatureName})\r\n } else if (intl.locale === \"pl-PL\" && intl.messages[\"transDoc.customTranslateDescription_PL.\" + feature.dbFeature.sharedFeatureName]) {\r\n desc = intl.formatMessage({id: \"transDoc.customTranslateDescription_PL.\" + feature.dbFeature.sharedFeatureName})\r\n } else {\r\n desc = feature.dbFeature.description;\r\n }\r\n } else {\r\n desc = feature.dbFeature.description;\r\n }\r\n\r\n if (!desc) {\r\n return null\r\n }\r\n\r\n if (textLength && desc.length > textLength) {\r\n desc = desc.substring(0, textLength) + \"...\"\r\n } else if (brief && desc && desc.length > 200) {\r\n desc = desc.substring(0, 200) + \"...\"\r\n }\r\n\r\n return

    \r\n};\r\n\r\nFeatureDescription.propTypes = {\r\n feature: PropTypes.object.isRequired,\r\n className: PropTypes.string,\r\n brief: PropTypes.bool,\r\n textLength: PropTypes.number,\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n fabricatorData: store.fabricatorState,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(FeatureDescription)\r\n)\r\n\r\n","'use strict';\r\n\r\nObject.defineProperty(exports, \"__esModule\", {\r\n value: true\r\n});\r\n\r\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\r\n\r\nexports.showLoading = showLoading;\r\nexports.hideLoading = hideLoading;\r\nexports.resetLoading = resetLoading;\r\nexports.loadingBarReducer = loadingBarReducer;\r\n\r\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\r\n\r\nvar SHOW = exports.SHOW = 'loading-bar/SHOW';\r\nvar HIDE = exports.HIDE = 'loading-bar/HIDE';\r\nvar RESET = exports.RESET = 'loading-bar/RESET';\r\n\r\nvar DEFAULT_SCOPE = exports.DEFAULT_SCOPE = 'default';\r\n\r\nfunction showLoading() {\r\n var scope = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : DEFAULT_SCOPE;\r\n\r\n return {\r\n type: SHOW,\r\n payload: {\r\n scope: scope\r\n }\r\n };\r\n}\r\n\r\nfunction hideLoading() {\r\n var scope = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : DEFAULT_SCOPE;\r\n\r\n return {\r\n type: HIDE,\r\n payload: {\r\n scope: scope\r\n }\r\n };\r\n}\r\n\r\nfunction resetLoading() {\r\n var scope = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : DEFAULT_SCOPE;\r\n\r\n return {\r\n type: RESET,\r\n payload: {\r\n scope: scope\r\n }\r\n };\r\n}\r\n\r\nfunction loadingBarReducer() {\r\n var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\r\n var action = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\r\n\r\n var _ref = action.payload || {},\r\n _ref$scope = _ref.scope,\r\n scope = _ref$scope === undefined ? DEFAULT_SCOPE : _ref$scope;\r\n\r\n switch (action.type) {\r\n case SHOW:\r\n return _extends({}, state, _defineProperty({}, scope, (state[scope] || 0) + 1));\r\n case HIDE:\r\n return _extends({}, state, _defineProperty({}, scope, Math.max(0, (state[scope] || 1) - 1)));\r\n case RESET:\r\n return _extends({}, state, _defineProperty({}, scope, 0));\r\n default:\r\n return state;\r\n }\r\n}","import _ from 'lodash';\r\n\r\nimport workspace from \"../workspace\";\r\nimport {POINT_PROPERTY} from \"../../../../constants\";\r\nimport {\r\n getCountertopArea,\r\n //getExportedManualCalculateBacksplashes,\r\n getExportedManualCalculateCountertops,\r\n //getExportedManualCalculateEdges,\r\n getSlabImagesAreaGrouped,\r\n manualCalculationsCountertopArea\r\n} from \"../../../../helpers/sqftCalculations\";\r\nimport config from \"../../store/sqftConfig\";\r\nimport store from \"./../../../../../../store\";\r\nimport sqftImageManager from \"../../store/sqftImageManager\";\r\nimport slabWorkspace from \"../slab/slabWorkspace\";\r\nimport {loaderDisable, loaderEnable} from \"../../../../../ui/loaderView\";\r\nimport html2canvas from \"html2canvas\";\r\nimport workspaceControllers, {getControllersExportData} from \"../../store/workspaceControllers\";\r\nimport {getQtCatName} from \"../../../../helpers/sqftQuotesHelper\";\r\nimport {\r\n SHAPE_PART_IDS_FROM_ADDITIONAL_SHAPES_LIST,\r\n} from \"../../../../constantsFeature\";\r\n\r\nexport const prepareSQFTData = async () => {\r\n const state = store.getState();\r\n const roomsWithVisitedSlabTool = state.sqftSlabState.roomsWithVisitedSlabTool;\r\n const showManualCalculation = state.sqftManualCalculationState.showManualCalculation;\r\n const slabImages = state.sqftSlabState.croppedSlabImages;\r\n const measureUnit = state.sqftState.measureUnit;\r\n const miteredEdges = workspace.miteredController ? workspace.miteredController.getExportedMiteredEdges() : [];\r\n let shapesList = workspace.getShapes()\r\n .filter(shp => { return shp.export &&\r\n !SHAPE_PART_IDS_FROM_ADDITIONAL_SHAPES_LIST.includes(shp.partId)\r\n })\r\n .map(shp => shp.export())\r\n .concat(miteredEdges);\r\n\r\n const totalSQFTArea = getCountertopArea();\r\n const qtCatName = getQtCatName();\r\n\r\n let workspaceCenter = _.clone(workspace.getCenter());\r\n const sqftApplianceImages = workspace.resultImages.getCanvasApplianceImages();\r\n\r\n const sqFtSlabImage = roomsWithVisitedSlabTool.includes(qtCatName) && slabImages && slabImages.length > 0 ? workspace.resultImages.getSlabResultImage(config.defaultScaleExport) : \"\";\r\n const sqFtSlabCalcImage = roomsWithVisitedSlabTool.includes(qtCatName) ? workspace.resultImages.getSlabCalcImage(config.defaultScaleExport) : \"\";\r\n const sqftCanvasImage = await getCanvasImage(showManualCalculation);\r\n const images3D = workspaceControllers.images3d.getResources();\r\n\r\n workspace.setCenter(workspaceCenter.x * 2 , workspaceCenter.y * 2);\r\n\r\n //save images local (for dev purposes)\r\n\r\n // const link = document.createElement(\"a\");\r\n // link.href = sqFtSlabImage.replace(\"image/png\", \"image/octet-stream\");\r\n // link.download = 'slabImage' + Date.now() + '.png';\r\n // document.body.appendChild(link);\r\n // link.click();\r\n // document.body.removeChild(link);\r\n\r\n return {\r\n bumpouts: workspace.getBumpouts(),\r\n canvasImage: sqftCanvasImage,\r\n sqFtSlabImage: sqFtSlabImage,\r\n sqFtSlabCalcImage: sqFtSlabCalcImage,\r\n sqftApplianceImages: sqftApplianceImages,\r\n images3D: images3D,\r\n slabImages: sqftImageManager.getExportedSlabImages(),\r\n measureUnit: measureUnit,\r\n sinks: workspace.getSink(),\r\n radii: workspace.getPointProperty(POINT_PROPERTY.arcLength),\r\n corners: workspace.getPointProperty(POINT_PROPERTY.angle),\r\n //walls: workspace.getShapeType('wall'),\r\n totalInches: totalSQFTArea.totalArea,\r\n shapeLength: totalSQFTArea.shapeLength,\r\n objIds: workspace.getObjIds(),\r\n removedFeatures: workspaceControllers.removedFeatures.getResources(),\r\n textBoxes: workspace.textBoxManager.getExportedTextBoxes(),\r\n slabAdditionalShapesList: slabWorkspace.slabAdditionalShapes.exportData(),\r\n slabImagesTotalArea: getSlabImagesAreaGrouped(),\r\n squareFeet: showManualCalculation ? manualCalculationsCountertopArea(): totalSQFTArea.totalAreaToMeasureUnit,\r\n //edges: showManualCalculation ? getExportedManualCalculateEdges() : workspace.getShapeType('edge').concat(miteredEdges),\r\n //backsplashes: showManualCalculation ? getExportedManualCalculateBacksplashes() : workspace.getShapeType('backsplash'),\r\n countertops: showManualCalculation ? getExportedManualCalculateCountertops() : shapesList,\r\n manualCalculate: showManualCalculation,\r\n controllers: getControllersExportData(),\r\n underlayment: workspace.underlaymentController ? workspace.underlaymentController.exportData() : []\r\n }\r\n};\r\n\r\nconst getCanvasImage = async (showManualCalculation) => {\r\n if (showManualCalculation) {\r\n const manualDiv = document.querySelector(\".manual-window\");\r\n if (manualDiv) {\r\n loaderEnable(\"loader.savingQuoteText\");\r\n manualDiv.classList.add(\"manual-window--screenshot\");\r\n try {\r\n const canvasElement = await html2canvas(manualDiv);\r\n manualDiv.classList.remove(\"manual-window--screenshot\");\r\n loaderDisable();\r\n if (canvasElement && canvasElement.toDataURL) {\r\n return canvasElement.toDataURL(\"image/jpeg\", 0.7) // we don't need super quality here\r\n }\r\n } catch (e) {\r\n loaderDisable();\r\n }\r\n }\r\n }\r\n return workspace.resultImages.getCanvasImageScaled(config.defaultScaleExport);\r\n};\r\n","import point from \"../point\";\r\nimport line from \"../line\";\r\n\r\nconst Polygon = (pointsCords, clonePoint = false, canPointsBeMoved = false) => {\r\n let points = [];\r\n let lines = [];\r\n\r\n for (let pointCord of pointsCords) {\r\n let newPoint = new point(pointCord.x, pointCord.y, undefined, undefined, canPointsBeMoved)\r\n if (clonePoint && pointCord instanceof point) {\r\n newPoint.import(pointCord.export());\r\n }\r\n points.push(newPoint);\r\n }\r\n for (let i in points) {\r\n if (points[+i + 1]) {\r\n lines.push(new line(points[i], points[+i + 1]))\r\n } else {\r\n lines.push(new line(points[i], points[0]))\r\n }\r\n }\r\n\r\n return lines;\r\n};\r\n\r\nexport default Polygon\r\n","import flatMap from 'lodash/flatMap';\r\n\r\nimport store from \"./../../store\";\r\nimport * as types from \"../../actions/actionTypes\";\r\nimport LayoutCommon from \"./layoutCommon\";\r\nimport {SQFT_FEATURES} from \"../sqft/constants\";\r\nimport {getSlabsFeatureGroup} from \"../../misc/helpers\";\r\nimport {setActivePreset} from \"../../actions/actionFunctions\";\r\n// import {getBvGroupFeatures} from \"../../api/server-api\";\r\n\r\nexport default class LayoutCommonNew extends LayoutCommon {\r\n\r\n isNewLayout = true;\r\n\r\n // /**\r\n // * Returns feature\r\n // * @param neededId {number}\r\n // * @param withOtherGroups {boolean}\r\n // * @returns feature {object}\r\n // */\r\n // getFeatureById(neededId, withOtherGroups = false) {\r\n // let allFeatures = this.getAllFeatures(withOtherGroups);\r\n // for (let i = 0; i < allFeatures.length; i++) {\r\n // if (allFeatures[i].dbFeature.id === neededId) {\r\n // return allFeatures[i];\r\n // }\r\n // }\r\n // return null\r\n // }\r\n\r\n // /**\r\n // * Returns feature\r\n // * @param skuNumber {string}\r\n // * @param featureGroupPartId {string}\r\n // * @returns feature {object}\r\n // */\r\n // getFeatureBySku(skuNumber, featureGroupPartId= \"\") {\r\n // if (featureGroupPartId) {\r\n // const featureGroupFound = this.getFeatureGroupByPartId(featureGroupPartId);\r\n // if (featureGroupFound) {\r\n // for (let i = 0; i < featureGroupFound.features.length; i++) {\r\n // if (featureGroupFound.features[i].dbFeature.sku === skuNumber) {\r\n // return featureGroupFound.features[i];\r\n // }\r\n // }\r\n // }\r\n // }\r\n // let allFeatures = this.getAllFeatures();\r\n // for (let i = 0; i < allFeatures.length; i++) {\r\n // if (allFeatures[i].dbFeature.sku === skuNumber) {\r\n // return allFeatures[i];\r\n // }\r\n // }\r\n // return null\r\n // }\r\n\r\n /**\r\n * @param partId {string}\r\n * @param compressedFeature {object}\r\n * @param featuresToLoad {Array} // only if layout is changed - we need to load features to changed feature group\r\n * @return featureLoaded {featureInterface}\r\n */\r\n getFeatureFromAllLayouts = (partId, compressedFeature, featuresToLoad) => {\r\n const {dbFeatureId} = compressedFeature;\r\n const parentItems = this.getFeatures(true);\r\n let childSubPart = null;\r\n let featureLoaded = null;\r\n parentItems.forEach(parentGroup => {\r\n if (childSubPart) {\r\n return\r\n }\r\n if (partId === SQFT_FEATURES.slabs) {\r\n childSubPart = getSlabsFeatureGroup(this)\r\n } else if (parentGroup) {\r\n childSubPart = parentGroup.subParts().find(subPart => subPart.part.partId === partId);\r\n }\r\n if (childSubPart && childSubPart.part.features) {\r\n featureLoaded = childSubPart.part.getFeatureById(dbFeatureId, true);\r\n if (!featureLoaded) { // if feature isn't found in the current layout, let's find it in another layouts\r\n let allFeatures = [];\r\n Object.keys(this.layoutNames).forEach((layoutType) => {\r\n if (layoutType !== \"All\") {\r\n allFeatures = [...allFeatures, ...childSubPart.part.featuresList[layoutType]]\r\n }\r\n });\r\n featureLoaded = allFeatures.find((feature) => feature.dbFeature.id === dbFeatureId);\r\n if (!featureLoaded\r\n && (document.kvConfig.visualizerType === \"Kitchen\" || document.kvConfig.visualizerType === \"kvScene\")\r\n && this.qtCategories && this.qtCategories.some(qtCat => qtCat.qtCategoryHasBeenChanged)\r\n && featuresToLoad.length\r\n ) {\r\n // console.info(\"Cart feature is not loaded, trying in change categories:\", dbFeatureId);\r\n this.qtCategories.forEach(qtCat => {\r\n const changedSubPart = qtCat.subParts.find(subPart => subPart.part.partId === partId);\r\n if (changedSubPart) {\r\n // console.info(\"Cart feature is not loaded, found subpart:\", cartItem);\r\n const needToLoadFeature = featuresToLoad.find(dbFeature => dbFeature.id === dbFeatureId);\r\n if (needToLoadFeature) {\r\n changedSubPart.part.setGroupFeatures([needToLoadFeature], 0, false)\r\n }\r\n featureLoaded = childSubPart.part.features.find((feature) => feature.dbFeature.id === dbFeatureId);\r\n // if (featureLoaded) {\r\n // console.info(\"Cart feature is not loaded, it's ok, we found it:\", dbFeatureId, featureLoaded);\r\n // }\r\n }\r\n })\r\n }\r\n if (!featureLoaded) {\r\n if ((partId === \"slabs\") && compressedFeature && compressedFeature.partId) {\r\n const featureGroup = this.getFeatureGroupByPartId(compressedFeature.partId);\r\n if (featureGroup) {\r\n featureLoaded = featureGroup.getFeatureById(dbFeatureId, true);\r\n }\r\n }\r\n }\r\n if (!featureLoaded) {\r\n console.error(\"Cart feature is not loaded:\", partId, dbFeatureId);\r\n }\r\n }\r\n // console.log('featureLoaded', featureLoaded);\r\n }\r\n });\r\n return featureLoaded\r\n }\r\n\r\n\r\n /**\r\n *\r\n * @param bvState {object}\r\n * @param isCartAndUserStatedUpdateNeeded {boolean}\r\n * @param useNames {boolean}\r\n * @param needToChangeLayout {boolean}\r\n * @param firstLoad {boolean}\r\n * @param isFake {boolean}\r\n */\r\n setActiveFeaturesFromObject(\r\n bvState,\r\n isCartAndUserStatedUpdateNeeded = false,\r\n useNames = false,\r\n needToChangeLayout = true,\r\n firstLoad = false,\r\n isFake = false\r\n ) {\r\n if (bvState) {\r\n\r\n const layout_type = +bvState.layout_type;\r\n needToChangeLayout = needToChangeLayout && (layout_type || layout_type === 0) && (layout_type !== +this.type);\r\n\r\n if (needToChangeLayout) {\r\n this.type = layout_type;\r\n }\r\n this.scene = bvState.scene || this.scene;\r\n\r\n console.log(\"bvState===>\", bvState);\r\n console.log(\"bvState firstLoad\", firstLoad);\r\n // to avoid checks below\r\n bvState.disabled_parts = bvState.disabled_parts || [];\r\n\r\n this.getFeatures()\r\n .forEach((parentGroup) => {\r\n let relatedItems = parentGroup.getRelatedItems();\r\n relatedItems.forEach((subPart) => {\r\n const partId = subPart.partId;\r\n let previouslySelectedItem = null;\r\n subPart.selectedFeaturesHistory.some(featureName => {\r\n previouslySelectedItem = subPart.getFeatureByPartName(featureName);\r\n return previouslySelectedItem\r\n });\r\n if (bvState.hasOwnProperty(partId) || previouslySelectedItem) {\r\n if (!bvState.disabled_parts.includes(partId)) {\r\n subPart.disabled = false\r\n }\r\n if (useNames) {\r\n const matchingFeature = (partId === \"backsplash\" && bvState[\"backsplash_type\"])\r\n ? subPart.getFeatureByBacksplashType(bvState[\"backsplash_type\"], bvState[\"backsplash\"])\r\n : subPart.getFeatureByPartName(bvState[partId]);\r\n if (matchingFeature) {\r\n subPart.activeFeature = matchingFeature;\r\n } else if (previouslySelectedItem) {\r\n subPart.activeFeature = previouslySelectedItem;\r\n }\r\n } else {\r\n subPart.activeFeature = subPart.getFeatureById(bvState[partId], true) || parentGroup.getDefaultFeature();\r\n }\r\n if (subPart.layerPositions && subPart.activeFeature) {\r\n // subPart.setLayerPositions(); // enabled // we have to set vanity on its layerPosition, grohe vanities have different sku so can not be found in the code below\r\n Object.keys(subPart.layerPositions).forEach(position => {\r\n const partIdPosition = partId + \"_\" + position;\r\n if (bvState.disabled_parts.includes(partIdPosition)) {\r\n subPart.layerPositions[position] = null;\r\n } else if (bvState[partIdPosition]) {\r\n subPart.layerPositions[position] = useNames\r\n ? subPart.getMatchingPositionFeature(position, subPart.activeFeature, isFake ? this : null)\r\n : subPart.getFeatureById(bvState[partIdPosition], true)\r\n } else if (!((position !== \"C\" && subPart.activeFeature.metaData.layerPosition === \"C\") || (subPart.activeFeature.metaData.layerPosition !== \"C\" && position === \"C\"))) {\r\n subPart.layerPositions[position] = subPart.getMatchingPositionFeature(position, subPart.activeFeature, isFake ? this : null)\r\n }\r\n })\r\n // } else if (subPart.hasAdditionalParts && (subPart.activeFeatureParts == null || !subPart.activeFeatureParts.length)) {\r\n // subPart.activeFeatureParts = subPart.setActiveFeatureParts();\r\n }\r\n subPart.placeholderChanged = !!subPart.activeFeature;\r\n // const {activeQuoteIndex} = store.getState().quotesState;\r\n // subPart.firstClick = !!subPart.activeFeature;\r\n // if (subPart.firstClick) {\r\n // console.log(\"subPart.firstClick\", subPart);\r\n // }\r\n }\r\n if (bvState.disabled_parts.includes(partId)) {\r\n subPart.disabled = true\r\n }\r\n if (!subPart.activeFeature) {\r\n // we might have features uploaded only for one room layout as in case of replacement tub on american_standard_master\r\n subPart.setDefault()\r\n }\r\n if (!subPart.disabled && subPart.layerPositions && Object.values(subPart.layerPositions).every(feature => !feature)) {\r\n subPart.setLayerPositions(); // mirror cases\r\n }\r\n if (subPart.activeFeature && firstLoad) {\r\n if (!subPart.activeFeature.notAvailableInVisualizer) {\r\n subPart.activeFeature.dbFeature.unlocked = true;\r\n }\r\n if (subPart.layerPositions) {\r\n Object.keys(subPart.layerPositions).forEach(position => {\r\n if (subPart.layerPositions[position]) {\r\n subPart.layerPositions[position].dbFeature.unlocked = true;\r\n }\r\n })\r\n }\r\n if (subPart.hasAdditionalParts && subPart.activeFeatureParts && subPart.activeFeatureParts.length) {\r\n subPart.activeFeatureParts.forEach(additionalFeature => {\r\n additionalFeature.dbFeature.unlocked = true;\r\n })\r\n }\r\n }\r\n })\r\n });\r\n\r\n if (needToChangeLayout) {\r\n this.changeLayout(this.getFeatures());\r\n }\r\n\r\n if (isCartAndUserStatedUpdateNeeded) {\r\n this.setCartStateAndUserStateFromBvState(bvState);\r\n }\r\n\r\n const layoutParts = this.designNavigationItems()\r\n .filter(parentGroup => parentGroup.part.categoryEnabled)\r\n .map((parentGroup) => parentGroup.part.partName);\r\n\r\n if (!this.isFakeLayout) {\r\n store.dispatch({\r\n type: types.SET_LAYOUT_DATA_PARTS,\r\n payload: {layoutParts}\r\n });\r\n }\r\n\r\n store.dispatch({\r\n type: types.UPDATE_CANVAS_COUNT\r\n });\r\n\r\n if (bvState.id) {\r\n store.dispatch(setActivePreset(bvState.id));\r\n }\r\n\r\n }\r\n }\r\n\r\n fixFeatureMetaData(dbFeature) {\r\n // if (Array.isArray(dbFeature.metaData.CropCoords) && !dbFeature.metaData.CropCoords[1] && dbFeature.metaData.CropCoords[0]) {\r\n // dbFeature.metaData.CropCoords = dbFeature.metaData.CropCoords[0].split(\",\"); // ['0, 460, 1060, 574'] -> ['0', ' 460', ' 1060', ' 574']\r\n // }\r\n if (!Array.isArray(dbFeature.metaData.RoomLayout) || !dbFeature.metaData.RoomLayout.length) {\r\n dbFeature.metaData.RoomLayout = [\"Layout1\"];\r\n } else {\r\n // console.log(\"dbFeature.metaData.RoomLayout\", dbFeature.metaData.RoomLayout);\r\n dbFeature.metaData.RoomLayout = dbFeature.metaData.RoomLayout.map((mValue) => {\r\n if (typeof mValue !== \"string\" || !mValue.includes(\"Layout\")) {\r\n mValue = \"Layout\" + mValue\r\n }\r\n return mValue\r\n })\r\n }\r\n Object.keys(dbFeature.metaData).forEach(key => {\r\n if (Array.isArray(dbFeature.metaData[key]) && (key !== \"CropCoords\")) {\r\n dbFeature.metaData[key] = flatMap(dbFeature.metaData[key], (metaValue => {\r\n if (typeof metaValue === \"string\") {\r\n if (metaValue.includes(\", \")) {\r\n return metaValue.split(\", \")\r\n } else if (metaValue.includes(\",\")) {\r\n return metaValue.split(\",\")\r\n }\r\n }\r\n return metaValue\r\n }));\r\n if (key === \"SortPosition\") {\r\n dbFeature.metaData[\"SortPositionNum\"] = +(dbFeature.metaData[key][0])\r\n }\r\n }\r\n });\r\n return dbFeature\r\n }\r\n\r\n}\r\n\r\n","import $ from 'jquery';\r\n\r\nimport values from 'lodash/values';\r\nimport find from 'lodash/find';\r\nimport orderBy from 'lodash/orderBy';\r\nimport isEqual from \"lodash/isEqual\";\r\n\r\nimport store from \"./../../store\";\r\nimport {\r\n fixDbFeatureProperties,\r\n getArrayOfIdsFromBvState,\r\n getSlabsFeatureGroup,\r\n} from \"../../misc/helpers\";\r\nimport {baseDashboardImagesPath} from \"../assets\";\r\nimport DesignNavigationItem from \"./designNavigationItem\";\r\nimport ActionTypes from \"../../misc/actionTypes\";\r\nimport {isFeatureEnabled, isVisibleForNavigation} from \"../../misc/displayLogic\";\r\nimport * as types from \"../../actions/actionTypes\";\r\nimport {setActiveQuoteIndex, setQuotes} from \"../../actions/roomsFunctions\";\r\nimport {\r\n restoreCart,\r\n setQtCategoriesLoaded,\r\n // toggleUseFabricatorCostPrices\r\n} from \"../../actions/actionFunctions\";\r\nimport {restoreContractValues} from \"../../actions/contractsActions\";\r\nimport {getBvFeatures} from \"../../api/server-api\";\r\nimport {dbFeatureRelatedFeaturesProperties, PartMenuType} from \"./constants\";\r\nimport {changeSqftFeaturesPopup} from \"../../actions/sqftFunctions\";\r\nimport {SQFT_FEATURES} from \"../sqft/constants\";\r\nimport {getLookId} from \"../look/lookNavigation/lookFunctions2\";\r\nimport {AVAILABLE_VISUALIZER_TYPES, IS_LIXIL_UI, IS_OFFLINE_MODE} from \"../../config\";\r\n// import {getBvGroupFeatures} from \"../../api/server-api\";\r\nimport {getCommonVisualizerType} from \"../../config\";\r\nimport {getCurrentLayout, getCurrentZIndexes} from \"../appLayout\";\r\nimport {LOOK_ROOM_TYPES} from \"../look/core/constants\";\r\nimport {getCurrentRoomType} from \"../appLayout\";\r\nimport Config from \"../../config\";\r\nimport {\r\n fixFeaturesResponse,\r\n getCartItemPartIdFix,\r\n getCompressedCartItems,\r\n getFeatureGroupsProperties, setFeatureGroupsProperties\r\n} from \"../../misc/backendFunctions\";\r\nimport {\r\n getAvailableSteps,\r\n getCompressedAllWizardValues\r\n} from \"../look/lookNavigation/lookMain/lookWizard/lookWizardFunctions\";\r\nimport {restoreAllWizardSelectedValues} from \"../../actions/wizardFunctions\";\r\nimport {replaceIncorrectSymbols} from \"../../misc/misc2\";\r\nimport {requestAfterRoomChange} from \"../look/lookNavigation/lookNavigationFunctions\";\r\nimport {updateCurrentQuote} from \"../../misc/quotesFunctions\";\r\nimport {\r\n getFeatureGroupFromWizardSteps,\r\n getUpdatedWizardId\r\n} from \"../look/lookNavigation/lookMain/lookWizard/lookWizardFunctions2\";\r\nimport {updateExistingFeature} from \"./featuresFunctions\";\r\nimport {setReceiptSignature} from \"../../actions/printFunctions\";\r\n\r\nexport default class LayoutCommon {\r\n initialized = false;\r\n selectedLayoutFeatures = {};\r\n disabledClickablePartIds = [];\r\n allDbFeatures = []; // is used for creating fake layouts\r\n\r\n /**\r\n * An hash-table of parts, so we can find easily needed part by its ID\r\n * @type {Object.}\r\n */\r\n parts = {};\r\n constructor() {}\r\n\r\n hasNavItemsLength(...props) {\r\n const subPart = props[0];\r\n if ((document.kvConfig.visualizerType === \"kvScene\") && (this.type === 3) && (subPart.part.partId === \"center_island_edge\")) {\r\n return false\r\n }\r\n if (!subPart || !this.isNewLayout || (this.type === 2 && (subPart.part.partId === \"oven\"))\r\n || (subPart.part.partId === \"shower_door\")) { // not sure if we can enable it on old kitchen and bathroom\r\n // added oven because it depends on the stove and should be recalculated each time on layout 2\r\n // added shower door as we need to calculate for current showersize\r\n return this.designNavigationItems(...props).length > 0\r\n }\r\n const propName = IS_LIXIL_UI\r\n ? \"all\"\r\n : props[4] ? \"qt\" : \"vis\"; // forQuotingTool or forVisualizer\r\n if (IS_LIXIL_UI) {\r\n props[4] = \"all\"\r\n }\r\n if (!subPart.part._navItemsCount) {\r\n subPart.part._navItemsCount = {}\r\n }\r\n if (!subPart.part._navItemsCount[this.type]) {\r\n subPart.part._navItemsCount[this.type] = {}\r\n }\r\n if (subPart.part._navItemsCount[this.type][propName] > 0) {\r\n return true\r\n }\r\n if (!subPart.part.allFeaturesReceived\r\n || !Number.isInteger(subPart.part._navItemsCount[this.type][propName])\r\n || !subPart.part._navItemsCount.checkedAfterReceived\r\n || (subPart.part.nextFeaturesPageToLoadArray && subPart.part.partId === \"vanity_countertop\")) {\r\n // added vanity_countertop because of the matching feature omggg\r\n subPart.part._navItemsCount[this.type][propName] = this.designNavigationItems(...props).length\r\n }\r\n if (subPart.part.allFeaturesReceived && !subPart.part._navItemsCount.checkedAfterReceived) {\r\n // stop calling navItems func after all features received and it is calculated\r\n subPart.part._navItemsCount.checkedAfterReceived = true;\r\n }\r\n return subPart.part._navItemsCount[this.type][propName] > 0\r\n }\r\n\r\n /**\r\n * Returns the designNavigationItems for the navigation bar\r\n * @param parentItem {DesignNavigationItem} if null is supplied will return the major designNavigationItems,\r\n * otherwise the children of the given parent item\r\n * @param filters {[navigationFilterValueInterface]}\r\n * @param searchText {string}\r\n * @param forFeature {object|boolean} // for new kitchen and bathroom it is forFeature, for old - withPlaceholders\r\n * @param withQuotingToolFeatures {boolean|string}\r\n * @param filterGroups {array}\r\n * @param restOptions {object} // firstOpenedFeature = null, firstOpenedConditions = null, returnAllFeatures = false, forActiveQTCategory = \"\"\r\n * @returns {Array.}\r\n */\r\n designNavigationItems(\r\n parentItem = null,\r\n filters = [],\r\n searchText = \"\",\r\n forFeature = null,\r\n withQuotingToolFeatures = false, // could be false(visualizer only), true(quotingtool only), or \"all\" - all features\r\n filterGroups = [],\r\n restOptions= {}\r\n ) {\r\n const {forActiveQTCategory, returnAllFeatures} = restOptions;\r\n //console.log('parentItem', parentItem);\r\n if (parentItem == null) {\r\n let partsToShow = this.enabledParts();\r\n if (!this.type) { // disable window on the small room layout\r\n partsToShow = partsToShow.filter(parentGroup => parentGroup.partName !== \"Window\");\r\n }\r\n if (document.kvConfig.visualizerType === \"KV\" || document.kvConfig.visualizerType === \"Kitchen\") {\r\n // disable center island\r\n const layoutAbbreviation = this.getCurrentLayoutAbbreviation();\r\n if (!layoutAbbreviation.includes(\"I\")) {\r\n partsToShow = partsToShow.filter(parentGroup => parentGroup.partName !== \"CenterIsland\");\r\n }\r\n }\r\n return orderBy(partsToShow, ['sortOrder']).map(parentGroup => parentGroup.navigationItem());\r\n }\r\n\r\n const thirdParam = this.isNewLayout ? forFeature || parentItem.part.activeFeature : forFeature // withPlaceholders\r\n\r\n const nItems = parentItem.part.navigationSubItems(\r\n filters,\r\n searchText,\r\n thirdParam,\r\n filterGroups,\r\n restOptions\r\n )\r\n // console.log(\"nItems\", nItems);\r\n const navItems = nItems\r\n .filter(feature => {\r\n if (!feature || !feature.part) {\r\n return false\r\n }\r\n if (!this.isNewLayout && !thirdParam && feature.part.partName\r\n && (feature.part.partName.includesCI('placeholder') || feature.part.partName.includesCI('Demo Model'))) {\r\n return false // exclude placeholders;\r\n }\r\n return isVisibleForNavigation(feature.part, withQuotingToolFeatures, forActiveQTCategory)\r\n });\r\n\r\n return withQuotingToolFeatures || returnAllFeatures\r\n ? this.getNotAvailableInVisualizerFeatures(navItems, parentItem.part, filters, searchText, forActiveQTCategory)\r\n : navItems.filter(item => !item.part.notAvailableInVisualizer && isFeatureEnabled(item.part, \"visualizer\"))\r\n }\r\n\r\n setGroupsItemsCount(bvGroups) {\r\n const features = this.getFeatures(true);\r\n const groupKeys = {};\r\n Object.keys(bvGroups).map(key => {\r\n groupKeys[key.toLowerCase()] = key;\r\n });\r\n // console.log(groupKeys);\r\n features.forEach(parentGroup => {\r\n if (parentGroup.menuType === PartMenuType.Simple) {\r\n const dbName = (parentGroup.dbName || parentGroup.partName).toLowerCase();\r\n parentGroup.counts = (groupKeys[dbName] && bvGroups[groupKeys[dbName]])\r\n ? bvGroups[groupKeys[dbName]].counts\r\n : null;\r\n parentGroup.totalFeaturesCount = (groupKeys[dbName] && bvGroups[groupKeys[dbName]])\r\n ? bvGroups[groupKeys[dbName]].totalFeaturesCount\r\n : null\r\n if (IS_OFFLINE_MODE) {\r\n parentGroup.allFeaturesReceived = true;\r\n parentGroup.realFeaturesReceived = true;\r\n }\r\n } else {\r\n parentGroup.relatedItems.forEach((relatedItem) => {\r\n const dbName = (relatedItem.dbName || relatedItem.partName).toLowerCase();\r\n if (relatedItem.partId !== \"wall_configuration\") {\r\n relatedItem.counts = (groupKeys[dbName] && bvGroups[groupKeys[dbName]])\r\n ? bvGroups[groupKeys[dbName]].counts\r\n : null;\r\n }\r\n relatedItem.totalFeaturesCount = (groupKeys[dbName] && bvGroups[groupKeys[dbName]])\r\n ? bvGroups[groupKeys[dbName]].totalFeaturesCount\r\n : null;\r\n if (!relatedItem.counts && !relatedItem.partId.includes(\"decor\")) {\r\n console.log(\"no relatedItem.counts\", relatedItem)\r\n }\r\n if (IS_OFFLINE_MODE) {\r\n relatedItem.allFeaturesReceived = true;\r\n relatedItem.realFeaturesReceived = true;\r\n }\r\n })\r\n }\r\n })\r\n }\r\n\r\n getNotAvailableInVisualizerFeatures = (filteredAvailableFeatures, subPart, filters, searchText, forActiveQTCategory = \"\") => {\r\n if (subPart.getParent && subPart.getParent().partName === \"Other\") { // not in visualizer features, they don't need another check\r\n return filteredAvailableFeatures\r\n }\r\n const notInVisualizerFeaturesThatLeft = subPart.features.filter(feature => {\r\n if (feature.partName && feature.partName.includes(\"laceholder\")) {\r\n return false\r\n }\r\n const featureSplittedName = feature.getSplittedFeatureName();\r\n return feature.notAvailableInVisualizer && isVisibleForNavigation(feature, true, forActiveQTCategory)\r\n && !filteredAvailableFeatures.some(countertop => {\r\n return countertop.part.getSplittedFeatureName() === featureSplittedName\r\n })\r\n })\r\n\r\n let allNotAvailableFeatures = subPart.getFeaturesBySearchText(subPart.getFilteredFeaturesByFilters(filters, notInVisualizerFeaturesThatLeft), searchText);\r\n allNotAvailableFeatures = subPart.returnUniqueNavFeatures\r\n ? subPart.returnUniqueNavFeatures(allNotAvailableFeatures)\r\n : allNotAvailableFeatures.map(_ => new DesignNavigationItem(_.featureName, _));\r\n\r\n return [\r\n ...filteredAvailableFeatures,\r\n ...allNotAvailableFeatures\r\n ]\r\n }\r\n\r\n /**\r\n * returns enabled parts\r\n */\r\n enabledParts(withShadow) {\r\n return this.getFeatures(withShadow).filter(parentGroup => parentGroup.categoryEnabled);\r\n }\r\n\r\n async selectLayout(type, oldType, currentState = null, scene = this.scene, callBack, isFake = false) {\r\n const firstLoad = false; // change if needed\r\n const features = this.getFeatures(true); // true here cause we need backgrounds also to set default!\r\n const currentType = oldType || this.type; // 1) remember previous selection\r\n\r\n // 2) save the current state using feature names, then restore it after the layout has changed\r\n currentState = currentState || this.getActiveFeaturesAsObject(true, false, true);\r\n\r\n if (getCurrentRoomType(this) === LOOK_ROOM_TYPES.as || Config.isVisualizerManagement()) {\r\n currentState.disabled_parts = [];\r\n }\r\n\r\n // 3) save selected features to recover them after layout change back (if they were not found after current set)\r\n this.selectedLayoutFeatures[currentType] = currentState;\r\n\r\n this.type = type; // 4) apply new Layout\r\n this.scene = currentType !== type ? \"1\" : scene; // 4) apply new scene // set first scene if layout is changed\r\n currentState.scene = this.scene; // 4) apply new scene\r\n currentState.layout_type = type; // 4) apply new layout_type\r\n\r\n features.forEach(parentGroup => {\r\n parentGroup.setDefault(this); // setting default after\r\n });\r\n\r\n this.setActiveFeaturesFromObject(currentState, false, true, false, firstLoad, isFake); // 6) set the layers from previous layout\r\n this.changeLayout(this.getFeatures()); // 7) set specific rules for each part\r\n if (!isFake) {\r\n $(window).trigger(ActionTypes.CHANGE_LAYOUT); // 8) refresh canvas\r\n this.updateLocalStorage();\r\n }\r\n if (callBack) {\r\n callBack()\r\n }\r\n console.log(\"this fake\", this);\r\n return Promise.resolve()\r\n }\r\n\r\n setItemsFromBvState = async (bvState,\r\n isCartAndUserStatedUpdateNeeded= false,\r\n additionalSet = (bvState) => bvState,\r\n firstLoad = false,\r\n forVisualizer\r\n ) => {\r\n const neededDbFeatures = getArrayOfIdsFromBvState(bvState).filter(dbFeatureId => {\r\n return !this.allDbFeatures.some(feature => feature.id === dbFeatureId)\r\n });\r\n const response = neededDbFeatures.length\r\n ? await getBvFeatures(neededDbFeatures, null, false, forVisualizer)\r\n : {data: []}\r\n\r\n // console.log('getBvFeatures response->', responseFeatures);\r\n\r\n // this code is needed because we need to loadNewFeatures for already setted layout type\r\n bvState = bvState || {};\r\n const layout_type = +bvState.layout_type;\r\n const needToChangeLayout = (layout_type || layout_type === 0) && (layout_type !== +this.type);\r\n if (needToChangeLayout) {\r\n this.type = layout_type;\r\n }\r\n this.loadNewFeatures(response.data);\r\n if (typeof additionalSet === \"function\") {\r\n bvState = additionalSet(bvState);\r\n }\r\n this.setActiveFeaturesFromObject(bvState, isCartAndUserStatedUpdateNeeded, false, true, firstLoad);\r\n if (this.isNewLayout && firstLoad) {\r\n this.createCustomConfigurations();\r\n }\r\n await requestAfterRoomChange(this);\r\n $(window).trigger(ActionTypes.UPDATE_ALL_ITEMS);\r\n return response\r\n };\r\n\r\n changeLayout(features) {\r\n features.forEach(parentGroup => {\r\n parentGroup.changeLayout(this.type);\r\n parentGroup.relatedItems.forEach(ri => ri.changeLayout(this.type));\r\n });\r\n }\r\n\r\n getFeatures(withShadow = false) {\r\n return withShadow ? values(this.parts) : values(this.parts).filter(part => {\r\n return [\"Global Shadow\", \"Globals\", \"Other\", \"Background\", \"Backgrounds\"].every(groupName => part.partName !== groupName)\r\n });\r\n }\r\n\r\n fixFeatureBeforeLoad(dbFeature) {\r\n dbFeature = fixDbFeatureProperties(dbFeature);\r\n if (Array.isArray(dbFeature.metaData.RoomLayout)) {\r\n dbFeature = this.fixFeatureMetaData(dbFeature)\r\n }\r\n return dbFeature\r\n }\r\n\r\n loadNewFeatures(dbFeatures = [], forParentGroup = null, applyCustomConfigurations = true, forNextBvState = null) {\r\n //features could be also loaded directly to the part, check part.js -> setGroupFeatures method\r\n\r\n //dbFeatures can be an object! {features:[], relatedFeatures: []}\r\n const dbFeaturesArray = fixFeaturesResponse(dbFeatures);\r\n\r\n const parentGroups = this.getFeatures(true);\r\n let relatedFeatures = [];\r\n\r\n for (let i = 0; i < dbFeaturesArray.length; i++) {\r\n let dbFeature = dbFeaturesArray[i];\r\n if (!dbFeature) {\r\n continue;\r\n }\r\n dbFeatureRelatedFeaturesProperties.forEach(property => {\r\n if (Array.isArray(dbFeature[property]) && dbFeature[property].length) {\r\n dbFeature[property].forEach(relatedFeature => {\r\n if (relatedFeatures.some(relFeature => relFeature.id === relatedFeature.id)) {\r\n return\r\n }\r\n relatedFeatures.push(relatedFeature)\r\n });\r\n // console.log(\"dbFeature.relatedFeatures\", dbFeature.relatedFeatures);\r\n }\r\n })\r\n this.loadDbFeature(dbFeature, parentGroups, forParentGroup)\r\n }\r\n\r\n if (relatedFeatures.length) {\r\n for (let i = 0; i < relatedFeatures.length; i++) {\r\n this.loadDbFeature(relatedFeatures[i], parentGroups)\r\n }\r\n }\r\n\r\n if (document.kvConfig.visualizerType === \"bvLook\" && applyCustomConfigurations) {\r\n const isAsBathroomState = forNextBvState && forNextBvState.visualizerType === \"bvLook\" && forNextBvState.layout_type >= 10;\r\n this.createCustomConfigurations(isAsBathroomState);\r\n }\r\n\r\n return true\r\n }\r\n\r\n fixFeatureMetaData(dbFeature) {\r\n // it is needed only for bvScene - it has it's own method\r\n // dbFeature.metaData.RoomLayout = dbFeature.metaData.RoomLayout.map((mValue) => {\r\n // Object.values(LayoutType).map(val => val + \"\").forEach(stringNum => {\r\n // if (mValue === stringNum) {\r\n // mValue = \"Layout\" + mValue\r\n // }\r\n // })\r\n // return mValue\r\n // })\r\n return dbFeature\r\n }\r\n\r\n loadDbFeature(dbFeature, parentGroups, forParentGroup = null) {\r\n if (!dbFeature || (dbFeature.employeesOnly && !document.kvConfig.isBackend)) {\r\n return;\r\n }\r\n for (let i = 0; i < this.allDbFeatures.length; i++) {\r\n if (this.allDbFeatures[i].id === dbFeature.id) {\r\n // console.log(\"featureFound\", featureFound);\r\n updateExistingFeature(dbFeature, this.allDbFeatures[i], this);\r\n return;\r\n }\r\n }\r\n dbFeature = this.fixFeatureBeforeLoad(dbFeature);\r\n let loaded = false;\r\n if (forParentGroup && !(document.kvConfig.visualizerType === \"bvLook\" && forParentGroup.partName === \"Towel\") // they should be in separate groups\r\n && (forParentGroup.dbName === dbFeature.groupName || forParentGroup.partName === dbFeature.groupName)) {\r\n loaded = forParentGroup.load(dbFeature);\r\n }\r\n if (!loaded) {\r\n for (let i = 0; i < parentGroups.length; i++) {\r\n const parentGroup = parentGroups[i];\r\n loaded = parentGroup.load(dbFeature);\r\n if (loaded) {\r\n break;\r\n }\r\n }\r\n if (!loaded && this.parts[\"Other\"]) {\r\n this.parts[\"Other\"].load(dbFeature);\r\n }\r\n }\r\n // dbFeature.isRelatedDbFeature ? this.allDbFeatures.unshift(dbFeature) : this.allDbFeatures.push(dbFeature);\r\n this.allDbFeatures.push(dbFeature);\r\n }\r\n\r\n createCustomConfigurations(isAsBathroomState = null) {\r\n // after load callBack for each part(to set specific rules)\r\n this.getFeatures().forEach(parentGroup => {\r\n parentGroup.setSpecificRules ? parentGroup.setSpecificRules(isAsBathroomState) : null;\r\n });\r\n }\r\n\r\n setDefaultFeatures() {\r\n this.getFeatures(true).forEach(parentGroup => {\r\n parentGroup.setDefault(this);\r\n });\r\n }\r\n\r\n /**\r\n * Returns all features by text\r\n */\r\n\r\n getAllFeaturesByText(searchText) {\r\n let allFeatures = [];\r\n this.getFeatures().forEach((parentGroup) => {\r\n let subParts = parentGroup.subParts();\r\n subParts.forEach((subPart) => {\r\n allFeatures = [...allFeatures, ...subPart.part.features.filter(feature => feature.partName && feature.partName.toLowerCase().includes(searchText.toLowerCase()))]\r\n })\r\n });\r\n // console.log('allFeatures', allFeatures);\r\n return allFeatures\r\n }\r\n\r\n /**\r\n * Returns all features\r\n * @param withOtherGroups {boolean}\r\n */\r\n\r\n getAllFeatures(withOtherGroups = false) {\r\n let allFeatures = [];\r\n this.getFeatures(withOtherGroups).forEach((parentGroup) => {\r\n let subParts = parentGroup.subParts();\r\n subParts.forEach((subPart) => {\r\n allFeatures = [...allFeatures, ...subPart.part.features]\r\n })\r\n });\r\n // console.log('allFeatures', allFeatures);\r\n return allFeatures\r\n }\r\n\r\n /**\r\n * Returns feature\r\n * @param neededId {number}\r\n * @param withOtherGroups {boolean}\r\n * @returns feature {object}\r\n */\r\n getFeatureById(neededId, withOtherGroups = false) {\r\n let feature = null;\r\n this.getFeatures(withOtherGroups).forEach((parentGroup) => {\r\n if (!feature) {\r\n let subParts = parentGroup.subParts();\r\n subParts.forEach((subPart) => {\r\n if (!feature) {\r\n feature = subPart.part.getFeatureById(neededId, true);\r\n }\r\n })\r\n }\r\n });\r\n return feature\r\n }\r\n\r\n /**\r\n * Returns feature\r\n * @param skuNumber {string}\r\n * @param featureGroupPartId {string}\r\n * @param allLayouts {boolean}\r\n * @param withSharedFeatureName {boolean}\r\n * @returns feature {object}\r\n */\r\n getFeatureBySku(skuNumber, featureGroupPartId= \"\", allLayouts = false, withSharedFeatureName = false) {\r\n const propToSearch = withSharedFeatureName ? \"sharedFeatureName\" : \"sku\";\r\n if (featureGroupPartId) {\r\n const featureGroupFound = this.getFeatureGroupByPartId(featureGroupPartId);\r\n if (featureGroupFound) {\r\n if (featureGroupFound && featureGroupFound.activeFeature && featureGroupFound.activeFeature.dbFeature[propToSearch] === skuNumber) {\r\n return featureGroupFound.activeFeature\r\n }\r\n const searchFrom = featureGroupFound.getFeaturesForNavigationFrom\r\n ? featureGroupFound.getFeaturesForNavigationFrom({returnAllFeatures: allLayouts})\r\n : featureGroupFound.features;\r\n for (let i = 0; i < searchFrom.length; i++) {\r\n if (searchFrom[i].dbFeature[propToSearch] === skuNumber) {\r\n return searchFrom[i];\r\n }\r\n }\r\n }\r\n }\r\n const allParents = this.getFeatures();\r\n for (let i = 0; i < allParents.length; i++) {\r\n const subParts = allParents[i].subParts();\r\n for (let j = 0; j < subParts.length; j++) {\r\n const featureGroup = subParts[j].part;\r\n if (featureGroup.activeFeature) {\r\n if (featureGroup.activeFeature.dbFeature[propToSearch] === skuNumber) {\r\n return featureGroup.activeFeature\r\n }\r\n const features = [...featureGroup.features, ...featureGroup.featuresParts];\r\n const sameSkuFeatures = features.filter(feature => feature.dbFeature[propToSearch] === skuNumber);\r\n if (!sameSkuFeatures.length) {\r\n continue;\r\n }\r\n if (featureGroup.activeFeature.metaData[\"Side\"]) {\r\n const sameSide = sameSkuFeatures.find(feature => {\r\n return isEqual(feature.metaData[\"Side\"], featureGroup.activeFeature.metaData[\"Side\"])\r\n });\r\n if (sameSide) {\r\n return sameSide\r\n }\r\n }\r\n return sameSkuFeatures[0]\r\n } else {\r\n for (let k = 0; k < featureGroup.features.length; k++) {\r\n if (featureGroup.features[k].dbFeature[propToSearch] === skuNumber) {\r\n return featureGroup.features[k];\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return null\r\n }\r\n\r\n /**\r\n * Returns active installations\r\n */\r\n getActiveInstallations() {\r\n const {instState} = store.getState();\r\n return Object.assign({}, instState, {instOpened: false});\r\n }\r\n\r\n addCartAndUserStatesToLocalStorage(bvState) {\r\n const {cartState, userState, sqftState, bathroomVisualizerState, wizardState, fabricatorState} = store.getState();\r\n\r\n bvState.cartState = Object.assign({}, cartState, {\r\n recentlyViewedItems: [],\r\n cartItems: getCompressedCartItems(cartState.cartItems),\r\n displayLogicCartItems: getCompressedCartItems(cartState.displayLogicCartItems),\r\n });\r\n\r\n const lookId = getLookId(bathroomVisualizerState.activePreset, bathroomVisualizerState.bvPresets);\r\n bvState.userState = userState;\r\n bvState.id = bathroomVisualizerState.activePreset;\r\n bvState.lookId = lookId;\r\n bvState.useSqftCartPopup = sqftState ? sqftState.sqftFeaturesPopup.enabled : false;\r\n bvState.useFabricatorCostPrices = fabricatorState.settings.useFabricatorCostPrices;\r\n if (wizardState.wizardIsActive) {\r\n bvState.allWizardsValues = getCompressedAllWizardValues(wizardState.allWizardsValues);\r\n }\r\n bvState = getFeatureGroupsProperties(bvState, this);\r\n return bvState\r\n }\r\n\r\n /**\r\n * Returns activeFeatures object\r\n */\r\n\r\n getStonesActiveFeatures() {\r\n return this.getActiveFeatures(true).filter(activeFeature => activeFeature.cartFeature && activeFeature.cartFeature.isStoneFeature)\r\n }\r\n\r\n addDisabledPartsToLocalStorage(bvState) {\r\n const disabledPartIds = this.getDisabledFeatures();\r\n if (disabledPartIds.length) {\r\n bvState.disabled_parts = disabledPartIds;\r\n }\r\n return bvState\r\n }\r\n\r\n /**\r\n * @param useNames {boolean}\r\n * @param returnAllData {boolean}\r\n * @param returnAllFeatures {boolean}\r\n */\r\n getActiveFeaturesAsObject(useNames = false, returnAllData = true, returnAllFeatures = false) {\r\n let bvState = {};\r\n let activeFeatures = this.getActiveFeatures(returnAllFeatures, false, true);\r\n // console.log('activeFeatures', activeFeatures);\r\n activeFeatures.forEach((activeFeature) => {\r\n if (!activeFeature.cartFeature) {\r\n return\r\n }\r\n bvState[activeFeature.partId] = useNames\r\n ? activeFeature.cartFeature.getMatchingFeatureName()\r\n : activeFeature.cartFeature.dbFeature.id;\r\n });\r\n\r\n bvState.visualizerType = this.visualizerType; // to apply correct visualizer on quote open after save\r\n bvState.toolVersion = document.kvConfig.toolVersion; // to apply correct visualizer on quote open after save\r\n bvState.navigationType = document.kvConfig.navigationType; // to open in dashboard correct UI;\r\n\r\n bvState = this.addSpecificPropertiesToLocalStorage(bvState, useNames, returnAllFeatures);\r\n bvState = this.addDisabledPartsToLocalStorage(bvState);\r\n bvState.bvStateVersion = 2; //todo to test\r\n\r\n if (returnAllData) {\r\n bvState.installations = this.getActiveInstallations();\r\n bvState = this.addCartAndUserStatesToLocalStorage(bvState);\r\n }\r\n\r\n return bvState\r\n }\r\n\r\n /**\r\n * @param dbFeatureId {number}\r\n * @param featureGroup {featureGroupInterface}\r\n * @param featuresToLoad {array}\r\n * @return {featureInterface}\r\n */\r\n getLoadedFeatureById = (dbFeatureId, featureGroup, featuresToLoad = []) => {\r\n let featureLoaded = featureGroup.features.find((feature) => feature.dbFeature.id === dbFeatureId);\r\n if (!featureLoaded && featureGroup.featuresParts) {\r\n featureLoaded = featureGroup.featuresParts.find((feature) => feature.dbFeature.id === dbFeatureId);\r\n }\r\n if (!featureLoaded) { // if feature isn't found in the current layout, let's find it in another layouts\r\n let allFeatures = [];\r\n Object.keys(this.layoutNames).forEach((layoutType) => {\r\n if (layoutType !== \"All\") {\r\n allFeatures = [...allFeatures, ...featureGroup.featuresList[layoutType]]\r\n }\r\n });\r\n featureLoaded = allFeatures.find((feature) => feature.dbFeature.id === dbFeatureId);\r\n if (!featureLoaded\r\n && (document.kvConfig.visualizerType === \"Kitchen\" || document.kvConfig.visualizerType === \"kvScene\")\r\n && this.qtCategories && this.qtCategories.some(qtCat => qtCat.qtCategoryHasBeenChanged)\r\n && featuresToLoad.length\r\n ) {\r\n // console.info(\"Cart feature is not loaded, trying in change categories:\", dbFeatureId);\r\n this.qtCategories.forEach(qtCat => {\r\n const changedSubPart = qtCat.subParts.find(subPart => {\r\n return subPart.part.partId === featureGroup.partId\r\n });\r\n if (changedSubPart) {\r\n // console.info(\"Cart feature is not loaded, found subpart:\", ci);\r\n const needToLoadFeature = featuresToLoad.find(dbFeature => dbFeature.id === dbFeatureId);\r\n if (needToLoadFeature) {\r\n changedSubPart.part.setGroupFeatures([needToLoadFeature], 0, false)\r\n }\r\n featureLoaded = featureGroup.features.find((feature) => {\r\n return feature.dbFeature.id === dbFeatureId\r\n });\r\n // if (featureLoaded) {\r\n // console.info(\"Cart feature is not loaded, it's ok, we found it:\", dbFeatureId, featureLoaded);\r\n // }\r\n }\r\n })\r\n }\r\n // console.log('featureLoaded', featureLoaded);\r\n if (!featureLoaded) {\r\n console.error(\"Cart feature is not loaded:\", dbFeatureId);\r\n }\r\n }\r\n return featureLoaded\r\n }\r\n\r\n /**\r\n * Get Cart Items From BvState\r\n * @param cartItems {Array}\r\n * @param featuresToLoad {Array} // only if layout is changed - we need to load features to changed feature group\r\n * @param checkAllLayouts {boolean}\r\n * @return {Array}\r\n */\r\n getCartItemsFromBvState(cartItems = [], featuresToLoad = [], checkAllLayouts = false) {\r\n // const slabGroup = getSimilarFeatureGroup(SQFT_FEATURES.slabs, SQFT_FEATURES.slabs);\r\n // parentItems.push(slabGroup);\r\n\r\n const setCustomPrices = (feature, fromCartItem) => {\r\n if (feature && feature.dbFeature && fromCartItem && fromCartItem.cartFeature && fromCartItem.cartFeature.hasOwnProperty(\"customCost\")) {\r\n feature.dbFeature.priceWasChanged = true;\r\n feature.dbFeature.cost = fromCartItem.cartFeature.customCost;\r\n feature.dbFeature.fabricatorCost = fromCartItem.cartFeature.customCost;\r\n feature.dbFeature.price = fromCartItem.cartFeature.customPrice;\r\n }\r\n }\r\n\r\n return cartItems\r\n .map(ci => {\r\n\r\n const layout = checkAllLayouts && ci.fromVisualizerType ? getCurrentLayout(ci.fromVisualizerType) : this;\r\n if (layout.isNewLayout) {\r\n const partId = getCartItemPartIdFix(ci.partId);\r\n let cartFeature = layout.getFeatureFromAllLayouts(ci.partId, ci.cartFeature, featuresToLoad);\r\n setCustomPrices(cartFeature, ci);\r\n let newCartItem = Object.assign({}, ci, {\r\n partId,\r\n currentQuote: ci.currentQuote || 0,\r\n cartFeature: cartFeature\r\n });\r\n if (ci.relatedProductParent) {\r\n newCartItem.relatedProductParent = layout.getFeatureFromAllLayouts(ci.relatedProductParent.partId, ci.relatedProductParent, featuresToLoad);\r\n }\r\n if (ci.bundleParentId) {\r\n newCartItem.bundleParentId = ci.bundleParentId;\r\n }\r\n if (Number.isInteger(newCartItem.fromWizardId)) {\r\n newCartItem.fromWizardId = getUpdatedWizardId(newCartItem.fromVisualizerType, newCartItem.fromWizardId)\r\n }\r\n if (cartFeature && cartFeature.dbFeature) { //if we couldn't find feature then we will try to restore it from old layout\r\n return newCartItem\r\n }\r\n }\r\n\r\n const parentItems = layout.getFeatures(true);\r\n const dbFeatureId = ci.cartFeature.dbFeatureId || ci.fabFeatId || (ci.cartFeature.dbFeature ? ci.cartFeature.dbFeature.id : null); //old logic support\r\n if (!dbFeatureId) {\r\n console.log(\"NO DB FEATURE ID\", ci);\r\n }\r\n const ciFeature = ci.cartFeature; // we have to remember what has come from backend to be able to restore custom price\r\n ci.cartFeature = ci.cartFeature || {};\r\n ci.partId = getCartItemPartIdFix(ci.partId);\r\n ci.currentQuote = ci.currentQuote || 0;\r\n let childSubPart = null;\r\n parentItems.forEach(parentGroup => {\r\n if (childSubPart || !parentGroup) {\r\n return\r\n }\r\n if (ci.partId === SQFT_FEATURES.slabs) {\r\n childSubPart = getSlabsFeatureGroup(layout);\r\n childSubPart = childSubPart.part ? childSubPart.part : childSubPart\r\n } else {\r\n //changed subParts() to relatedItems because on this task QCDES-2593\r\n childSubPart = parentGroup.relatedItems.find(relItem => relItem.partId === ci.partId);\r\n }\r\n if (childSubPart && childSubPart.features) {\r\n ci.cartFeature = layout.getLoadedFeatureById(dbFeatureId, childSubPart, featuresToLoad);\r\n }\r\n });\r\n setCustomPrices(ci.cartFeature, {cartFeature: ciFeature});\r\n if (Number.isInteger(ci.fromWizardId)) {\r\n ci.fromWizardId = getUpdatedWizardId(ci.fromVisualizerType, ci.fromWizardId)\r\n }\r\n if (!ci.cartFeature || !ci.cartFeature.dbFeature) {\r\n console.error(\"cartFeature not loaded!\", ci);\r\n }\r\n return ci\r\n })\r\n .filter(ci => ci.cartFeature && ci.cartFeature.dbFeature); //prevent error's that are caused by missing feature\r\n }\r\n\r\n bvStateHasLockedItems(bvState) {\r\n return this.getFeatures().some((parentGroup) => {\r\n let partDataHasLockedItems = false;\r\n if (parentGroup.menuType === 0 && parentGroup.partName !== \"Toilet\") {\r\n const partId = parentGroup.partId;\r\n if (bvState.hasOwnProperty(partId)) {\r\n const feature = parentGroup.getFeatureById(bvState[partId]);\r\n if (feature && !feature.dbFeature.unlocked) {\r\n // console.log('found!', feature);\r\n partDataHasLockedItems = true;\r\n }\r\n }\r\n } else {\r\n let subParts = parentGroup.relatedItems;\r\n subParts.forEach((subPart) => {\r\n const partId = subPart.partId;\r\n if (bvState.hasOwnProperty(partId)) {\r\n const feature = subPart.getFeatureById(bvState[partId]);\r\n if (feature && !feature.dbFeature.unlocked) {\r\n // console.log('found!', feature, index);\r\n partDataHasLockedItems = true;\r\n }\r\n // if (partId === \"shower_body\") {\r\n // }\r\n }\r\n })\r\n }\r\n return partDataHasLockedItems\r\n });\r\n }\r\n\r\n /**\r\n * @param qtCategories {array}\r\n * @return void // creates array of featureGroups features and loads them. skips already loaded\r\n */\r\n loadFeatureGroupFeatures = (qtCategories) => {\r\n let featureGroupFeatures = [];\r\n let needToLoadFeatureGroupsFeatures = [];\r\n // qtCategories.forEach(qtCategory => {\r\n // qtCategory.featureGroups.forEach(featureGroup => {\r\n // if (featureGroup.features && featureGroup.features.length) {\r\n // featureGroup.features.forEach(dbFeature => {\r\n // if (!dbFeature.metaData) {\r\n // console.log(\"no metadata found\", dbFeature);\r\n // }\r\n // })\r\n // }\r\n // });\r\n // });\r\n const parentParts = this.getFeatures();\r\n qtCategories\r\n .filter(qtCategory => {\r\n return qtCategory.enabled && qtCategory.featureGroups.some(featureGroup => featureGroup.enabled)\r\n })\r\n .forEach(qtCategory => {\r\n qtCategory.featureGroups\r\n .filter(featureGroup => {\r\n const groupName = featureGroup.groupName.toLowerCase();\r\n for (let i = 0; i < parentParts.length; i++) {\r\n const parentPart = parentParts[i];\r\n const subPartItems = parentPart.subParts();\r\n const item = subPartItems.find(subPartItem => {\r\n const dbName = (subPartItem.part.dbName || subPartItem.part.partName).toLowerCase();\r\n return groupName === dbName\r\n });\r\n if (item) {\r\n const navItems = this.designNavigationItems(item, {}, \"\", false, true);\r\n if (!navItems.length && !needToLoadFeatureGroupsFeatures.some(sPart => sPart.part.partId === item.part.partId)) {\r\n needToLoadFeatureGroupsFeatures.push(item);\r\n }\r\n // console.log(\"features already exist:\", groupName);\r\n return false\r\n }\r\n }\r\n return true\r\n })\r\n .forEach(featureGroup => {\r\n if (featureGroup.features && featureGroup.features.length) {\r\n featureGroupFeatures = [...featureGroupFeatures, ...featureGroup.features]\r\n }\r\n });\r\n });\r\n this.loadNewFeatures(featureGroupFeatures, null, false);\r\n return needToLoadFeatureGroupsFeatures\r\n };\r\n\r\n addSubPartProperties(subPart, featureGroup, qtCategory, isComplex = false) {\r\n subPart.part.qtCategoryName = qtCategory.name;\r\n subPart.part.featureGroupVisible = featureGroup.visible;\r\n subPart.part.featureGroupEnabled = featureGroup.enabled;\r\n subPart.part.displayType = featureGroup.displayType || 3;\r\n subPart.part.featureGroupEnabled = featureGroup.enabled;\r\n subPart.part.unitText = featureGroup.unitText;\r\n subPart.hasFeatures = featureGroup.hasFeatures;\r\n if (!isComplex) {\r\n subPart.part.customGroupDisplayName = featureGroup.customDisplayName;\r\n subPart.part.description = featureGroup.description;\r\n subPart.part.customDescription = featureGroup.customDescription;\r\n subPart.part.customImageUrl = featureGroup.customImageUrl ? baseDashboardImagesPath + featureGroup.customImageUrl : \"\";\r\n if ((this.visualizerType === AVAILABLE_VISUALIZER_TYPES.kvScene)) {\r\n if (subPart.part.partId === \"center_island_sink\") {\r\n const anotherFg = this.getFeatureGroupByPartId(\"sink\");\r\n if (anotherFg) {\r\n anotherFg.customGroupDisplayName = subPart.part.customGroupDisplayName;\r\n anotherFg.description = subPart.part.description;\r\n anotherFg.customDescription = subPart.part.customDescription;\r\n anotherFg.customImageUrl = subPart.part.customImageUrl;\r\n }\r\n } else if (subPart.part.partId === \"center_island_faucet\") {\r\n const anotherFg = this.getFeatureGroupByPartId(\"faucet\");\r\n if (anotherFg) {\r\n anotherFg.customGroupDisplayName = subPart.part.customGroupDisplayName;\r\n anotherFg.description = subPart.part.description;\r\n anotherFg.customDescription = subPart.part.customDescription;\r\n anotherFg.customImageUrl = subPart.part.customImageUrl;\r\n }\r\n }\r\n }\r\n }\r\n /*** HERE WE SET SAME PROPERTIES FOR SPECIFIC QT Category ***/\r\n let qtCatProperties = {\r\n qtCategoryId: qtCategory.id,\r\n qtCategoryName: qtCategory.name,\r\n featureGroupVisible: featureGroup.visible,\r\n featureGroupEnabled: featureGroup.enabled,\r\n // hasFeatures: featureGroup.hasFeatures, // NOT SURE WHERE WE NEED THAT\r\n }\r\n if (!isComplex) {\r\n qtCatProperties.customGroupDisplayName = featureGroup.customDisplayName;\r\n qtCatProperties.description = featureGroup.description;\r\n qtCatProperties.customDescription = featureGroup.customDescription;\r\n qtCatProperties.customImageUrl = featureGroup.customImageUrl ? baseDashboardImagesPath + featureGroup.customImageUrl : \"\";\r\n }\r\n if (!subPart.part.qtCatProperties) {\r\n subPart.part.qtCatProperties = {};\r\n }\r\n subPart.part.qtCatProperties[qtCategory.name] = qtCatProperties;\r\n }\r\n\r\n get qtCategories() {\r\n //NOTA BENE !!! kitchen layout has it's own get qtCategories() method\r\n return this.qtCategoriesList\r\n }\r\n\r\n setQtCategoriesSubparts(qtCategories) {\r\n const parentParts = [...this.getFeatures(), this.parts[\"Other\"]];\r\n // console.log('parentParts', parentParts);\r\n let hasFeaturePropertyName = getCommonVisualizerType(this.visualizerType);\r\n this.qtCategoriesList = qtCategories\r\n .map(qtCategory => { //todo remove this after we push staging backend\r\n if (Array.isArray(qtCategory.featureGroups)) {\r\n qtCategory.featureGroups = qtCategory.featureGroups.map((featureGroup) => {\r\n if (this.isNewLayout) { // ignoreHasFeaturesProperty\r\n featureGroup.hasFeatures = {\r\n bathroom: true,\r\n kitchen: true,\r\n fireplace: true,\r\n laundryroom: true,\r\n }\r\n } else if (!featureGroup.hasFeatures) {\r\n featureGroup.hasFeatures = {\r\n bathroom: featureGroup.hasBVFeatures,\r\n kitchen: featureGroup.hasKVFeatures,\r\n fireplace: true,\r\n laundryroom: true,\r\n }\r\n }\r\n if (featureGroup.hasFeatures[hasFeaturePropertyName] && Array.isArray(featureGroup.features)\r\n && (featureGroup.features.length > 0 && featureGroup.features.length < 50)\r\n && !featureGroup.features.some(dbFeature => isFeatureEnabled({dbFeature}, \"quotingTool\", \"\", hasFeaturePropertyName))) {\r\n // this is a fix we need to do on the backend! if features.length is more than 50 and they all are disabled\r\n // for QuotingTool - hasFeatures.bathroom should be false!\r\n featureGroup.hasFeatures[hasFeaturePropertyName] = false\r\n }\r\n return featureGroup\r\n })\r\n }\r\n return qtCategory\r\n })\r\n .filter(qtCategory => {\r\n return qtCategory.enabled // 1) remove disabled qtCategories\r\n && Array.isArray(qtCategory.featureGroups) && qtCategory.featureGroups.some((featureGroup) => {\r\n return featureGroup.hasFeatures && featureGroup.hasFeatures[hasFeaturePropertyName] // 1) remove qtCategories without visualizerTypeFeatures\r\n })\r\n })\r\n .sort((a, b) => a.order !== b.order ? a.order < b.order ? -1 : 1 : 0) // sort by order\r\n .map((qtCategory) => {\r\n let subParts = [];\r\n qtCategory.featureGroups\r\n .filter(featureGroup => {\r\n const featureGroupName = featureGroup.groupName.toLowerCase();\r\n return featureGroupName !== \"walls\"\r\n }) // remove walls featureGroup // clone.quotesflooring.com/visualizer#/ issue\r\n .sort((a, b) => a.order !== b.order ? a.order < b.order ? -1 : 1 : 0) // sort by order\r\n .forEach(featureGroup => {\r\n let subPart = null;\r\n const featureGroupName = featureGroup.groupName.toLowerCase();\r\n // if (featureGroupName === \"walls\") {\r\n // const wallsParent = parentParts.find(parentPart => parentPart.partName === \"Walls\");\r\n // if (wallsParent) {\r\n // subParts = [...subParts, ...wallsParent.subParts().map(wallsSubPart => {\r\n // this.addSubPartProperties(wallsSubPart, featureGroup, qtCategory, false);\r\n // return wallsSubPart\r\n // })];\r\n // }\r\n // } else {\r\n //\r\n // }\r\n for (let i = 0; i < parentParts.length; i++) {\r\n const parentPart = parentParts[i];\r\n const subPartItems = parentPart.relatedItems.map(_ => new DesignNavigationItem(_.partName, _));\r\n const item = subPartItems.find(subPartItem => {\r\n if (featureGroupName === \"shower pan\" && document.kvConfig.visualizerType === \"bvScene\") {\r\n const dbName = (subPartItem.part.dbName || \"\").toLowerCase();\r\n const dbName2 = (subPartItem.part.partName || \"\").toLowerCase();\r\n return featureGroupName === dbName || featureGroupName === dbName2\r\n } else if (featureGroupName === \"vanity\" && document.kvConfig.visualizerType === \"bvLook\") {\r\n return subPartItem.part.partId === 'vanity_cabinet'\r\n }\r\n const dbName = (subPartItem.part.dbName || subPartItem.part.partName).toLowerCase();\r\n // if (featureGroupName === dbName && (this.visualizerType === AVAILABLE_VISUALIZER_TYPES.kvScene)) {\r\n // if (dbName === \"sink\" && (subPartItem.part.partId === \"center_island_sink\")) {\r\n // return false // we should show back countertop sink instead of sink on the new Kitchen\r\n // } else if (dbName === \"faucet\" && (subPartItem.part.partId === \"center_island_faucet\")) {\r\n // return false // we should show back countertop faucet instead of faucet on the new Kitchen\r\n // }\r\n // }\r\n return featureGroupName === dbName\r\n });\r\n if (item) {\r\n subPart = item;\r\n this.addSubPartProperties(subPart, featureGroup, qtCategory, false);\r\n break;\r\n }\r\n }\r\n if (!subPart) { // add it to Other group\r\n subPart = this.addNonVisualizerSubPart(featureGroup.groupName);\r\n this.addSubPartProperties(subPart, featureGroup, qtCategory, false);\r\n }\r\n subParts.push(subPart)\r\n });\r\n\r\n const self = this;\r\n\r\n const defaultSubParts = subParts.filter(subPart => {\r\n return subPart && subPart.part.featureGroupEnabled\r\n && (subPart.part.featureGroupVisible || (!subPart.part.featureGroupVisible && document.kvConfig.isBackend))\r\n && subPart.hasFeatures && subPart.hasFeatures[hasFeaturePropertyName]\r\n });\r\n\r\n return {\r\n id: qtCategory.id,\r\n name: qtCategory.name,\r\n order: qtCategory.order,\r\n bgImageUrl: qtCategory.bgImageUrl,\r\n defaultSubParts, // is used for center island replacing\r\n _subParts: defaultSubParts, // remove featureGroups that are !enabled && !visible (eye ball) && has features\r\n get subParts() {\r\n return this._subParts.filter((subPart) => {\r\n const restOptions = window.location.hash.includes(\"#/materials\") ? {forActiveQTCategory: qtCategory.name} : {};\r\n return self.hasNavItemsLength(subPart, {}, \"\", null, true, [], restOptions)\r\n });\r\n },\r\n set subParts(newSubParts) {\r\n this._subParts = newSubParts\r\n }\r\n }\r\n })\r\n .filter(qtCategory => qtCategory.defaultSubParts.length); // this filter is added in case someone added wrong featureGroup\r\n\r\n if (!this.qtCategoriesList.length) {\r\n this.qtCategoriesList = null;\r\n }\r\n\r\n if (this.qtCategoriesList) {\r\n // here we set for every subPart if it is available in the QuotingTool(exist in some qtCategory)\r\n for (let i = 0; i < parentParts.length; i++) {\r\n const parentPart = parentParts[i];\r\n const subPartItems = parentPart.subParts();\r\n subPartItems.forEach(subPartItem => {\r\n subPartItem.part.existInQtCategory = this.qtCategoriesList.some(qtCategory => {\r\n return qtCategory.subParts.some(qtCategorySubPartNavItem => {\r\n return qtCategorySubPartNavItem.part.partId === subPartItem.part.partId\r\n })\r\n });\r\n // console.log(\"subPartItem.part.existInQtCategory\", subPartItem.part.partId, subPartItem.part.existInQtCategory);\r\n });\r\n }\r\n }\r\n\r\n store.dispatch(setQtCategoriesLoaded(this.visualizerType))\r\n\r\n }\r\n\r\n /**\r\n * Returns the actual value of the filter by its group and id\r\n * @param groupId {number}\r\n * @param filterValueId {number}\r\n */\r\n static filterValue(groupId, filterValueId) {\r\n const filterGroups = store.getState().filterState.filterGroups;\r\n if (!filterGroups.length)\r\n return null;\r\n const group = find(filterGroups, {id: groupId});\r\n if (!group)\r\n return null;\r\n const valueObj = find(group.values, {id: filterValueId});\r\n return valueObj ? valueObj.value.trim() : null;\r\n }\r\n\r\n /**\r\n * Returns the actual id of the filter by its group and name(filterValue)\r\n * @param groupId {number}\r\n * @param filterValue {string}\r\n */\r\n static getfilterValueIdByValue(groupId, filterValue) {\r\n const filterGroups = store.getState().filterState.filterGroups;\r\n if (!filterGroups.length)\r\n return null;\r\n const group = find(filterGroups, {id: groupId});\r\n if (!group)\r\n return null;\r\n const valueObj = find(group.values, {value: filterValue});\r\n return valueObj ? valueObj.id : null;\r\n }\r\n\r\n /**\r\n * Returns the child subPart according to passed partId\r\n * @param partId {string}\r\n */\r\n getSubPartByPartId(partId) {\r\n const parentItems = this.getFeatures(true);\r\n for (let i = 0; i < parentItems.length; i++) {\r\n const subParts = parentItems[i].subParts();\r\n const neededSubPart = subParts.find(subPart => subPart.part.partId === partId);\r\n if (neededSubPart) {\r\n return neededSubPart\r\n }\r\n }\r\n return null\r\n }\r\n\r\n /**\r\n * stores to localStorage object, for example {vanity_cabinet:12,shower_floor:74}\r\n */\r\n async updateLocalStorage() {\r\n if (IS_LIXIL_UI && !document.kvConfig.isWordpressPlugin) {\r\n return false // we are not restoring the state from the locale storage on lixil ui, so why do we keep it there\r\n }\r\n const {activeQuoteIndex} = store.getState().quotesState;\r\n const quotes = await updateCurrentQuote(null, undefined, true);\r\n if (!document.kvConfig.jobId) {\r\n try {\r\n window.localStorage.setItem(this.localStorageKey, JSON.stringify({\r\n ...quotes[activeQuoteIndex].data,\r\n quotes,\r\n activeQuoteIndex\r\n }));\r\n // console.log(\"updated LocalStorage\", window.localStorage);\r\n } catch (ex) { console.log(\"localStorage exception\", ex); }\r\n }\r\n }\r\n\r\n setCartStateAndUserStateFromBvState(bvState, featuresToLoad = []) {\r\n const {isLixil, settings} = store.getState().fabricatorState;\r\n\r\n setFeatureGroupsProperties(bvState, this);\r\n\r\n if (bvState.cartState && Array.isArray(bvState.cartState.cartItems)) {\r\n bvState.cartState.cartItems = this.getCartItemsFromBvState(bvState.cartState.cartItems, featuresToLoad, settings.allowVisualizerSwitching);\r\n if (Array.isArray(bvState.cartState.displayLogicCartItems) && bvState.cartState.displayLogicCartItems.length) {\r\n bvState.cartState.displayLogicCartItems = this.getCartItemsFromBvState(bvState.cartState.displayLogicCartItems, featuresToLoad, settings.allowVisualizerSwitching)\r\n .filter(ci => ci.cartFeature && ci.cartFeature.dbFeature && ci.cartFeature.dbFeature.displayLogic);\r\n }\r\n if (bvState.cartState.cartItems.length) {\r\n store.dispatch(restoreCart(bvState.cartState));\r\n }\r\n if (Array.isArray(bvState.cartState.allWizardsValues) && bvState.cartState.allWizardsValues.length) {\r\n store.dispatch(restoreAllWizardSelectedValues(bvState.cartState.allWizardsValues)); // after cart state\r\n }\r\n }\r\n if (bvState.userState && (!IS_LIXIL_UI || !isLixil || bvState.userState.userInfo.email)) { // if no email passed - we don't recover anything (guest checkout issue)\r\n store.dispatch({\r\n type: types.RESTORE_USER_STATE,\r\n payload: bvState.userState\r\n });\r\n }\r\n if (bvState.installations) {\r\n store.dispatch({\r\n type: types.SET_INST_LIST,\r\n payload: bvState.installations\r\n });\r\n }\r\n if (bvState.quotes) {\r\n store.dispatch(setQuotes(bvState.quotes));\r\n store.dispatch(setActiveQuoteIndex(bvState.activeQuoteIndex || 0));\r\n }\r\n if (!bvState.useSqftCartPopup && bvState.cartState && !bvState.cartState.cartItems.some(cartItem => cartItem.sqftId)) {\r\n store.dispatch(changeSqftFeaturesPopup({\r\n enabled: false\r\n }));\r\n }\r\n if (((typeof bvState.contractSigningValues === \"object\") && Object.keys(bvState.contractSigningValues).length)\r\n || ((typeof bvState.contractsValues === \"object\") && Object.keys(bvState.contractsValues).length)) {\r\n store.dispatch(restoreContractValues(\r\n bvState.contractSigningValues,\r\n bvState.savedInvoiceNumberOfPages,\r\n bvState.needToUpdateContract,\r\n bvState.contractsValues,\r\n ));\r\n }\r\n if (bvState.receiptSignature) {\r\n store.dispatch(setReceiptSignature(bvState.receiptSignature));\r\n }\r\n // if (bvState.useFabricatorCostPrices) { // per Alan, even if we saved with the cost price - we should see the retail prices on edit\r\n // store.dispatch(toggleUseFabricatorCostPrices(true));\r\n // }\r\n }\r\n\r\n resetEverything() {\r\n this.initialized = false;\r\n this.type = this.defaultType;\r\n const features = this.getFeatures();\r\n const currentState = store.getState();\r\n const {activeQuoteIndex} = currentState.quotesState;\r\n features.forEach(parentGroup => {\r\n if (parentGroup.relatedItems && parentGroup.relatedItems.length) {\r\n parentGroup.relatedItems.forEach((subPart) => {\r\n subPart.activeFeature = null;\r\n subPart.placeholderChanged = false;\r\n subPart.firstClick[activeQuoteIndex] = false;\r\n subPart.disabled = subPart.defaultDisabled;\r\n if (Array.isArray(subPart.activeFeatureParts) && subPart.activeFeatureParts.length) {\r\n subPart.activeFeatureParts = subPart.setActiveFeatureParts();\r\n }\r\n });\r\n }\r\n parentGroup.activeFeature = null;\r\n parentGroup.placeholderChanged = false;\r\n if (!parentGroup.firstClick) {\r\n parentGroup.firstClick = {};\r\n }\r\n parentGroup.firstClick[activeQuoteIndex] = false;\r\n parentGroup.setDefault(this);\r\n });\r\n this.changeLayout(features);\r\n const bvPresets = currentState.bathroomVisualizerState.bvPresets\r\n const loadByTheDefault = bvPresets && bvPresets.find(preset => preset.loadByTheDefault);\r\n if (loadByTheDefault) {\r\n this.setActiveFeaturesFromObject(loadByTheDefault);\r\n }\r\n this.initialized = true;\r\n }\r\n\r\n /**\r\n * Returns all of the layers, based on current configuration\r\n * @param placeholdersNeeded {boolean}\r\n * @param forceReturn {boolean}\r\n */\r\n getLayers(placeholdersNeeded, forceReturn= false) {\r\n if (!this.initialized && !forceReturn) {\r\n return [];\r\n }\r\n\r\n const features = this.enabledParts(true);\r\n let res = [];\r\n\r\n // console.log('features', features);\r\n\r\n features.forEach(parentGroup => {\r\n const layers = parentGroup.setLayers(this, placeholdersNeeded); // setLayers first! then set z-index\r\n // console.log('layers', layers);\r\n\r\n parentGroup.setZIndex(this.zIndexes[this.getCurrentLayoutName()]); // set zIndexes\r\n\r\n if (layers && layers.length) {\r\n res = res.concat(layers);\r\n }\r\n });\r\n\r\n if (this.addCustomLayers) {\r\n res = this.addCustomLayers(res);\r\n }\r\n\r\n const {canvasDimensions} = store.getState().bathroomVisualizerState;\r\n\r\n const zSort = this.isNewLayout ? \"desc\" : \"asc\";\r\n\r\n res = orderBy(res, ['zIndex'], [zSort]).map(layer => {\r\n // console.log('layer', layer);\r\n let layerToReturn = {\r\n zIndex: layer.zIndex,\r\n image: layer.bgImg(!!layer.cropCoords),\r\n coords: layer.coords || null,\r\n partId: layer.partId || \"\",\r\n layerPosition: layer.layerPosition || \"\",\r\n cropCoords: layer.cropCoords || null,\r\n }\r\n if (this.isNewLayout && layer.zIndex < 50000) {\r\n const zIndexesObject = getCurrentZIndexes(this.visualizerType);\r\n layerToReturn.layerDimensions = zIndexesObject.getLayerDimensions(layer, this.getCurrentLayoutName(), canvasDimensions)\r\n }\r\n return layerToReturn\r\n });\r\n\r\n return res;\r\n }\r\n\r\n /**\r\n * Returns {array} activeFeatures objects\r\n */\r\n getActiveFeatures(returnAllFeatures, withLayerPositions = false, withDisabled = false) {\r\n let activeFeatures = [];\r\n const receiveAllFeatures = returnAllFeatures || !!(this.qtCategories && this.qtCategories.length);\r\n this.getFeatures(receiveAllFeatures).forEach((parentGroup) => {\r\n // let subParts = parentGroup.subParts().filter(subPart => !subPart.part.disabled); // we need to store every item!\r\n\r\n if (parentGroup.menuType === 0) { // old logic for BV visualizer\r\n if (!parentGroup.disabled && parentGroup.placeholderChanged && parentGroup.activeFeature) {\r\n activeFeatures.push({\r\n selectionGroup: parentGroup.partName,\r\n partId: parentGroup.partId,\r\n quantity: 0,\r\n cartFeature: parentGroup.activeFeature,\r\n featureGroup: parentGroup\r\n });\r\n }\r\n }\r\n\r\n let subItems = parentGroup.relatedItems;\r\n const excluded = [\"fridge_shadow\"];\r\n if (!returnAllFeatures) {\r\n subItems = subItems.filter(subItem => {\r\n if (document.kvConfig.visualizerType === \"Bathroom\" && subItem.partId === \"shower_body\" && subItem.features.length) { // shower_body should always be!\r\n return true\r\n }\r\n return !excluded.includes(subItem.partId) && subItem.activeFeature && subItem.activeFeature.partName\r\n && !subItem.activeFeature.partName.includes(\"laceholder\")\r\n });\r\n }\r\n subItems.forEach((subItem) => {\r\n if (withLayerPositions && subItem.layerPositions) {\r\n Object.keys(subItem.layerPositions).forEach(position => {\r\n if (subItem.layerPositions[position] || withDisabled) {\r\n activeFeatures.push({\r\n selectionGroup: parentGroup.partName,\r\n partId: subItem.partId,\r\n quantity: 0,\r\n cartFeature: subItem.layerPositions[position] || null,\r\n featureGroup: subItem,\r\n layerPosition: position,\r\n });\r\n }\r\n })\r\n } else if (subItem.activeFeature && (withDisabled || !subItem.disabled)) {\r\n activeFeatures.push({\r\n selectionGroup: parentGroup.partName,\r\n partId: subItem.partId,\r\n quantity: 0,\r\n cartFeature: subItem.activeFeature || null,\r\n featureGroup: subItem\r\n });\r\n }\r\n })\r\n });\r\n // console.log('activeFeatures', activeFeatures);\r\n const qtCategories = this.qtCategories;\r\n if (!returnAllFeatures && qtCategories && qtCategories.length) {\r\n const subPartsObject = {};\r\n activeFeatures = activeFeatures.filter(activeFeature => {\r\n return qtCategories.some((qtCategory, qtCategoryIndex) => {\r\n if (!subPartsObject[qtCategoryIndex]) {\r\n subPartsObject[qtCategoryIndex] = qtCategory.subParts; // caching here, cause subParts requires to call getNavItems\r\n }\r\n return subPartsObject[qtCategoryIndex].some(subPart => {\r\n return subPart.part.partId === activeFeature.partId\r\n })\r\n })\r\n })\r\n }\r\n return activeFeatures\r\n }\r\n\r\n getActiveNames() {\r\n const allFeatures = this.getActiveFeatures(true);\r\n const excludedGroups = [\"Background\", \"Globals\", \"Other\", \"Others\"];\r\n const resultFeatures = allFeatures\r\n .filter(featureObject => {\r\n return featureObject.cartFeature && excludedGroups.every(excludedGroupName => featureObject.selectionGroup !== excludedGroupName)\r\n })\r\n .map(featureObject => {\r\n return {\r\n featureId: featureObject.cartFeature.dbFeature.id,\r\n parentName: featureObject.selectionGroup,\r\n groupName: featureObject.cartFeature.dbFeature.groupName,\r\n featureName: featureObject.cartFeature.getFeatureName()\r\n }\r\n })\r\n // console.log(\"resultFeatures\", resultFeatures);\r\n return resultFeatures\r\n }\r\n\r\n /**\r\n *\r\n * @param bvState {object}\r\n * @param setCartAndUserState {boolean}\r\n * @param useNames {boolean}\r\n * @param needToChangeLayout {boolean}\r\n * @param firstLoad {boolean}\r\n */\r\n setActiveFeaturesFromObject(bvState, setCartAndUserState = false, useNames = false, needToChangeLayout = true, firstLoad = false) {\r\n if (bvState) {\r\n\r\n const layout_type = +bvState.layout_type;\r\n needToChangeLayout = needToChangeLayout && (layout_type || layout_type === 0) && (layout_type !== +this.type);\r\n\r\n if (needToChangeLayout) {\r\n this.type = layout_type;\r\n }\r\n\r\n\r\n console.log(\"bvState===>\", bvState);\r\n\r\n // to avoid checks below\r\n bvState.disabled_parts = bvState.disabled_parts || [];\r\n\r\n this.getFeatures()\r\n .forEach((parentGroup) => {\r\n if (parentGroup.menuType === 0) {\r\n const partId = parentGroup.partId;\r\n const hasPreviouslySavedItem = this.selectedLayoutFeatures[layout_type]\r\n && this.selectedLayoutFeatures[layout_type][partId];\r\n if (bvState.hasOwnProperty(partId) || hasPreviouslySavedItem) {\r\n if (useNames) {\r\n parentGroup.activeFeature = parentGroup.getFeatureByPartName(bvState[partId]);\r\n if (!parentGroup.activeFeature && hasPreviouslySavedItem) {\r\n parentGroup.activeFeature = parentGroup.getFeatureByPartName(hasPreviouslySavedItem);\r\n }\r\n } else {\r\n parentGroup.activeFeature = parentGroup.getFeatureById(bvState[partId])\r\n || parentGroup.getDefaultFeature();\r\n }\r\n parentGroup.placeholderChanged = !!parentGroup.activeFeature;\r\n // const {activeQuoteIndex} = store.getState().quotesState;\r\n // parentGroup.firstClick = !!parentGroup.activeFeature;\r\n }\r\n if (parentGroup.activeFeature && firstLoad && !parentGroup.activeFeature.notAvailableInVisualizer) { // Leave non in vis features locked\r\n parentGroup.activeFeature.dbFeature.unlocked = true;\r\n }\r\n if (bvState.disabled_parts.includes(partId)) {\r\n parentGroup.disabled = true\r\n }\r\n } else {\r\n let relatedItems = parentGroup.getRelatedItems();\r\n relatedItems.forEach((subPart) => {\r\n const partId = subPart.partId;\r\n let previouslySelectedItem = null;\r\n subPart.selectedFeaturesHistory.some(featureName => {\r\n previouslySelectedItem = subPart.getFeatureByPartName(featureName);\r\n return previouslySelectedItem\r\n });\r\n if (bvState.hasOwnProperty(partId) || previouslySelectedItem) {\r\n if (!bvState.disabled_parts.includes(partId)) {\r\n subPart.disabled = false\r\n }\r\n if (useNames) {\r\n const matchingFeature = subPart.getFeatureByPartName(bvState[partId]);\r\n if (matchingFeature) {\r\n subPart.activeFeature = matchingFeature;\r\n } else if (previouslySelectedItem) {\r\n subPart.activeFeature = previouslySelectedItem;\r\n }\r\n } else {\r\n subPart.activeFeature = subPart.getFeatureById(bvState[partId]) || parentGroup.getDefaultFeature();\r\n }\r\n if (subPart.layerPositions && subPart.activeFeature) {\r\n // subPart.setLayerPositions()\r\n Object.keys(subPart.layerPositions).forEach(position => {\r\n const partIdPosition = partId + \"_\" + position;\r\n if (bvState[partIdPosition]) {\r\n subPart.layerPositions[position] = useNames\r\n ? subPart.getMatchingPositionFeature(position)\r\n : subPart.getFeatureById(bvState[partIdPosition], true)\r\n }\r\n })\r\n }\r\n subPart.placeholderChanged = !!subPart.activeFeature;\r\n // const {activeQuoteIndex} = store.getState().quotesState;\r\n // subPart.firstClick = !!subPart.activeFeature;\r\n // if (subPart.firstClick) {\r\n // console.log(\"subPart.firstClick\", subPart);\r\n // }\r\n }\r\n if (subPart.activeFeature && firstLoad && !subPart.activeFeature.notAvailableInVisualizer) {\r\n subPart.activeFeature.dbFeature.unlocked = true;\r\n if (subPart.selectedFeaturesHistory) {\r\n subPart.selectedFeaturesHistory.push(subPart.activeFeature.partName)\r\n }\r\n }\r\n if (bvState.disabled_parts.includes(partId)) {\r\n subPart.disabled = true\r\n }\r\n })\r\n }\r\n });\r\n\r\n if (needToChangeLayout) {\r\n this.changeLayout(this.getFeatures());\r\n }\r\n\r\n if (setCartAndUserState) {\r\n this.setCartStateAndUserStateFromBvState(bvState);\r\n }\r\n\r\n const layoutParts = this.designNavigationItems()\r\n .filter(parentGroup => parentGroup.part.categoryEnabled)\r\n .map((parentGroup) => parentGroup.part.partName);\r\n\r\n if (!this.isFakeLayout) {\r\n store.dispatch({\r\n type: types.SET_LAYOUT_DATA_PARTS,\r\n payload: {layoutParts}\r\n });\r\n }\r\n\r\n }\r\n }\r\n\r\n /**\r\n * Sets bv features from url\r\n */\r\n parseUrl(bvState) {\r\n if (bvState.disabled_parts) {\r\n bvState.disabled_parts = bvState.disabled_parts.split(\",\");\r\n }\r\n console.log('restoring bvState from url...', bvState);\r\n return bvState\r\n }\r\n\r\n /**\r\n *\r\n * @param bvState {object}\r\n * @param useNames {boolean}\r\n * @param returnAllFeatures {boolean}\r\n * @returns bvState {object}\r\n */\r\n addSpecificPropertiesToLocalStorage(bvState, useNames = false, returnAllFeatures = false) {\r\n bvState.layout_type = this.type;\r\n bvState.scene = this.scene;\r\n if (this.isNewLayout) {\r\n bvState.bvStateVersion = 2;\r\n }\r\n this.getFeatures(returnAllFeatures).forEach((parentGroup) => {\r\n let relatedItems = parentGroup.getRelatedItems();\r\n relatedItems.forEach((subPart) => {\r\n if (subPart.layerPositions) {\r\n Object.keys(subPart.layerPositions).forEach(position => {\r\n if (subPart.layerPositions[position]) {\r\n bvState[subPart.partId + \"_\" + position] = useNames\r\n ? subPart.layerPositions[position].getSplittedFeatureName()\r\n : subPart.layerPositions[position].dbFeature.id\r\n }\r\n })\r\n }\r\n // this is used for adding these features to array of needed features form the backend on preset apply\r\n if (subPart.activeFeatureParts && subPart.activeFeatureParts.length) {\r\n subPart.activeFeatureParts.forEach((feature, featureIndex) => {\r\n bvState[subPart.partId + \"_part_\" + featureIndex] = useNames\r\n ? feature.getSplittedFeatureName()\r\n : feature.dbFeature.id\r\n })\r\n }\r\n if (subPart.partId === \"backsplash\" && subPart.getCurrentActiveFeatureType) {\r\n bvState[\"backsplash_type\"] = subPart.getCurrentActiveFeatureType();\r\n }\r\n })\r\n })\r\n // console.log('bvState', bvState);\r\n return bvState\r\n }\r\n\r\n getDisabledFeatures() {\r\n const disabledPartIds = [];\r\n this.getFeatures().forEach((parentGroup) => {\r\n if (parentGroup.menuType === 0) {\r\n if (parentGroup.disabled) {\r\n if (document.kvConfig.visualizerType === \"Bathroom\" && parentGroup.partName !== \"Toilet\") {\r\n disabledPartIds.push(parentGroup.partId);\r\n } else {\r\n disabledPartIds.push(parentGroup.partId);\r\n }\r\n }\r\n } else {\r\n parentGroup.relatedItems.forEach((subPart) => {\r\n if (subPart.disabled) {\r\n disabledPartIds.push(subPart.partId);\r\n } else if (subPart.layerPositions) {\r\n Object.keys(subPart.layerPositions).forEach(position => {\r\n if (!subPart.layerPositions[position]) {\r\n disabledPartIds.push(subPart.partId + \"_\" + position);\r\n }\r\n })\r\n }\r\n })\r\n }\r\n });\r\n // console.log('disabledPartIds', disabledPartIds);\r\n return disabledPartIds\r\n }\r\n\r\n /**\r\n * @param partId {string}\r\n * @returns featureGroup {object}\r\n */\r\n getFeatureGroupByPartId(partId) {\r\n if (!partId) {\r\n return null\r\n }\r\n let featureGroup = null;\r\n this.getFeatures(true).forEach(parentGroup => {\r\n if (featureGroup) {\r\n return\r\n }\r\n let relatedItems = parentGroup.relatedItems;\r\n relatedItems.forEach((relatedItem) => {\r\n if (featureGroup) {\r\n return\r\n }\r\n if (partId === relatedItem.partId) {\r\n featureGroup = relatedItem\r\n }\r\n })\r\n });\r\n return featureGroup\r\n }\r\n\r\n /**\r\n * @param groupName {string}\r\n * @returns featureGroup {object}\r\n */\r\n getFeatureGroupByGroupName(groupName) {\r\n if (!groupName) {\r\n return null\r\n }\r\n const strippedGroupName = replaceIncorrectSymbols(groupName || \"\").toLowerCase();\r\n let featureGroup = null;\r\n this.getFeatures(true).forEach(parentGroup => {\r\n if (featureGroup) {\r\n return\r\n }\r\n parentGroup.relatedItems.forEach((relatedItem) => {\r\n const strippedCurrentName = replaceIncorrectSymbols(relatedItem.dbName || relatedItem.partName || \"\").toLowerCase();\r\n if (strippedGroupName === strippedCurrentName\r\n || (strippedGroupName === \"vanity\" && strippedCurrentName === \"vanitie\")\r\n || (strippedGroupName === \"corner shelf\" && relatedItem.dbName === \"Small Corner Shelf\" && relatedItem.partName === \"Corner Shelf\")\r\n || (strippedGroupName === \"shower pan\"\r\n && ((relatedItem.dbName === \"Shower Pans\" && relatedItem.partName === \"Shower Pan\") || relatedItem.partName === \"ShowerPan\"))\r\n ) {\r\n featureGroup = relatedItem\r\n }\r\n })\r\n });\r\n return featureGroup\r\n }\r\n\r\n /**\r\n * @param partId {string}\r\n * @param inGeneral {boolean} // this prevents asking .subParts with asks navigation items which is redundant calculations\r\n * @returns {boolean}\r\n */\r\n partIdExistInQtCategory(partId, inGeneral = false) {\r\n if ((getCurrentRoomType(this) === LOOK_ROOM_TYPES.as) && partId === \"shower_door\" && (this.type === 3 || this.type === 6)) {\r\n return false\r\n }\r\n if (inGeneral) {\r\n return this.qtCategoriesList && this.qtCategoriesList.some(qtCat => {\r\n return qtCat.defaultSubParts && qtCat.defaultSubParts.some(sPart => sPart.part && sPart.part.partId === partId)\r\n })\r\n }\r\n return this.qtCategories && this.qtCategories.some(qtCat => {\r\n return qtCat.subParts && qtCat.subParts.some(sPart => sPart.part && sPart.part.partId === partId)\r\n })\r\n }\r\n\r\n /**\r\n * @param partId {string}\r\n * @param qtCategoryToSearch {string | null}\r\n * @param searchPartOfId {boolean | null}\r\n * @returns designNavigationItems {object}\r\n */\r\n getSubPartFromQtCategories(partId, qtCategoryToSearch = null, searchPartOfId = false) {\r\n\r\n const {wizardIsActive, wizardActiveItem, wizardSelectedValues} = store.getState().wizardState;\r\n if (wizardIsActive && wizardActiveItem) {\r\n const wizardSteps = getAvailableSteps(wizardActiveItem, wizardSelectedValues, true);\r\n return getFeatureGroupFromWizardSteps(wizardSteps, partId);\r\n }\r\n\r\n let countertopExist = null;\r\n let qtCategories = this.qtCategories;\r\n if (qtCategories) {\r\n if (qtCategoryToSearch) {\r\n qtCategories = qtCategories.filter(qtCategory => {\r\n return qtCategory.name.trim().toLowerCase() === qtCategoryToSearch.trim().toLowerCase()\r\n })\r\n //search in all qtCategories if wasn't found by qtCategoryToSearch\r\n if (qtCategories.length === 0) {\r\n qtCategories = this.qtCategories\r\n }\r\n }\r\n qtCategories.forEach(qtCategory => {\r\n if (!countertopExist) {\r\n const subParts = qtCategory.subParts;\r\n let neededSubPart;\r\n if (searchPartOfId) {\r\n neededSubPart = subParts.find(subPart => subPart.part.partId.includes(partId));\r\n } else {\r\n neededSubPart = subParts.find(subPart => subPart.part.partId === partId);\r\n }\r\n if (neededSubPart) {\r\n countertopExist = neededSubPart;\r\n }\r\n }\r\n });\r\n }\r\n return countertopExist\r\n }\r\n\r\n}\r\n\r\n","import EventManager from \"../../store/sqftEventManager\";\r\nimport CabinetShapes from \"./cabinetShapes\";\r\nimport store from \"../../../../../../store\";\r\nimport { setSQFTContextMenuV2 } from \"../../../../../../actions/sqftMenuFunctions\";\r\nimport workspace from \"../workspace\";\r\nimport { renderMeasurementsAroundSnappedShapes } from \"../slab/sqftSlabDraw\";\r\nimport CabinetShapesLayout from \"./cabinetShapesLayout\";\r\nimport { getMousePositionOnField } from \"../../../../helpers/sqftHelper\";\r\nimport { SHAPE_PART_ID } from \"../../../../constants\";\r\nimport { getCurrentLayout } from \"../../../../../appLayout\";\r\n\r\nclass CabinetWorkspace {\r\n constructor() {\r\n this.eventManager = EventManager;\r\n this.objectName = { name: 'CabinetWorkspace' };\r\n this.state = {};\r\n this.cabinetShapes = new CabinetShapes();\r\n this.cabinetShapesLayout = new CabinetShapesLayout();\r\n this.measurementPoints = [];\r\n this.__crownMoldingParams = {\r\n distance: 10\r\n };\r\n\r\n this.initCabinetEvents();\r\n }\r\n\r\n initCabinetEvents() {\r\n EventManager.addEvent(EventManager.events.CONTEXTMENU, this.onRightClick, this, EventManager.priorities.OVERLAY);\r\n EventManager.addEvent(EventManager.events.DROP, this.handleDrop, this, EventManager.priorities.OVERLAY);\r\n EventManager.addEvent(EventManager.events.DRAG_OVER, this.handleDrag, this, EventManager.priorities.OVERLAY);\r\n EventManager.addEvent(EventManager.events.RENDER, this.render, this, EventManager.priorities.OVERLAY);\r\n }\r\n\r\n render(ctx) {\r\n renderMeasurementsAroundSnappedShapes(ctx);\r\n }\r\n\r\n deregisterEvents() {\r\n EventManager.removeEvent(this);\r\n }\r\n\r\n onRightClick(mousePos, e) {\r\n store.dispatch(setSQFTContextMenuV2({\r\n isOpened: true,\r\n title: workspace.intl.formatMessage({ id: \"sqft.contextmenu.properties.title\" }),\r\n menuItems: [\r\n {\r\n title: 'Change Cabinet Style',\r\n callback: new Function()\r\n },\r\n {\r\n title: 'Generate Countertop',\r\n callback: new Function()\r\n },\r\n {\r\n title: 'Generate Backsplash',\r\n callback: new Function()\r\n },\r\n ],\r\n position: { left: mousePos.x, top: mousePos.y }\r\n }));\r\n document.addEventListener('click', this.closeContextMenu);\r\n void e;\r\n }\r\n\r\n closeContextMenu(e) {\r\n const navClick = e.target.closest('[class*=\"contextmenu2\"]');\r\n if (!navClick && !window.touchMove) {\r\n store.dispatch(setSQFTContextMenuV2({\r\n isOpened: false,\r\n title: '',\r\n menuItems: [],\r\n position: {}\r\n }));\r\n }\r\n }\r\n\r\n handleDrop(mousePos, e) {\r\n e.preventDefault();\r\n const featureId = JSON.parse(e.dataTransfer.getData('featureId'));\r\n const parentFeatureId = JSON.parse(e.dataTransfer.getData('parentFeatureId'));\r\n const partId = JSON.parse(e.dataTransfer.getData('partId'));\r\n\r\n if ([SHAPE_PART_ID.upper_cabinet_boxes, SHAPE_PART_ID.lower_cabinet_boxes, SHAPE_PART_ID.tall_cabinet_boxes,\r\n SHAPE_PART_ID.top_cabinet, SHAPE_PART_ID.bottom_cabinet, SHAPE_PART_ID.tall_cabinet\r\n ].includes(partId)) {\r\n\r\n const layout = getCurrentLayout();\r\n const feature = layout.getFeatureById(featureId, true);\r\n const parentFeature = layout.getFeatureById(parentFeatureId, true);\r\n let shapeId = null;\r\n const mousePosOnField = getMousePositionOnField(mousePos.x, mousePos.y);\r\n shapeId = this.cabinetShapes.addShape(feature, parentFeature, mousePosOnField);\r\n\r\n const shape = workspace.getShapeById(shapeId);\r\n shape.shapeAutoShuffle.handlePlaceShapeOnTheLine();\r\n }\r\n }\r\n\r\n handleDrag(mousePos, e) {\r\n e.preventDefault();\r\n // update hovered lines for rendering auto shuffle possibilities\r\n const hoveredLines = workspace.getHoveredLines();\r\n void hoveredLines;\r\n }\r\n}\r\n\r\nexport default new CabinetWorkspace();\r\n","import {baseNewImagesPath} from \"../../assets\";\r\n\r\nexport const applianceThumbnail = `${baseNewImagesPath}images/kv-icons/kv-filter-icons-stove.svg`;\r\nexport const centerIslandThumbnail = `${baseNewImagesPath}images/kv-icons/center_island_countertop.svg`;\r\nexport const countertopGroupThumbnail = `${baseNewImagesPath}images/kv-icons/vanity-countertop.svg`;\r\nexport const wallsThumbnail = `${baseNewImagesPath}images/bv_icons_new/Icons_Wall.svg`;\r\n\r\n/*layouts*/\r\nexport const LayoutThumbnails = {\r\n Layout1: `${baseNewImagesPath}images/kv-layout-thumbnails/SI.png`,\r\n Layout2: `${baseNewImagesPath}images/kv-layout-thumbnails/SNI.png`,\r\n Layout3: \"Layout3\",\r\n Layout4: \"Layout4\",\r\n Layout5: \"Layout5\",\r\n Layout6: \"Layout6\",\r\n Layout7: \"Layout7\",\r\n Layout8: \"Layout8\",\r\n Layout9: \"Layout9\",\r\n Layout10: \"Layout10\",\r\n Layout11: \"Layout11\",\r\n Layout12: \"Layout12\",\r\n Layout13: \"Layout13\",\r\n Layout14: \"Layout14\",\r\n Layout15: \"Layout15\",\r\n Layout16: \"Layout16\",\r\n Layout17: \"Layout17\",\r\n Layout18: \"Layout18\",\r\n};\r\n","import {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport {getFeatureIsLocked} from \"../../../../../misc/helpers\";\r\nimport store from \"../../../../../store\";\r\nimport {toggleNotCompatibleView} from \"../../../../../actions/selectionFunctions\";\r\nimport DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\n\r\nexport default class TubCommon extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n disabledClick() {}\r\n\r\n applyFeatureIfNotCompatible() {\r\n const showerTubComboParent = this.getParent().getParent();\r\n showerTubComboParent.setShowerTubCombo();\r\n showerTubComboParent.setActiveTub(this.partId);\r\n }\r\n\r\n handleClick(ignoreLocked) {\r\n super.handleClick(ignoreLocked);\r\n\r\n if (this.notAvailableInVisualizer || getFeatureIsLocked(this)) {\r\n return\r\n }\r\n\r\n const showerTubComboParent = this.getParent().getParent();\r\n const currentBottomTub = showerTubComboParent.bottomTub;\r\n\r\n const showNotCompatibleViewConditions = !window.location.hash.includes(\"visualizer\") &&\r\n (!showerTubComboParent.showerTubComboIsActive || (\r\n (this.partId === \"walk_in_tub\" && currentBottomTub !== \"walk_in_tub\") || (this.partId !== \"walk_in_tub\" && currentBottomTub === \"walk_in_tub\")\r\n ));\r\n\r\n if (showNotCompatibleViewConditions) {\r\n store.dispatch(toggleNotCompatibleView(true));\r\n return;\r\n }\r\n\r\n this.applyFeatureIfNotCompatible();\r\n this.featureClicked();\r\n }\r\n\r\n getArrayOfConditions() {\r\n const showerSize = this.getParent().showerSize();\r\n return [{\r\n propName: 'ShowerSize',\r\n propValue: showerSize\r\n }];\r\n }\r\n\r\n setLayers(layout) {\r\n if (this.getParent().bottomTub !== this.partId) {\r\n super.hideLayers();\r\n return;\r\n }\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\nimport {Shower} from \"../../parts/shower\";\r\nimport {LayoutAbbreviation} from \"../../constants\";\r\nimport {getMetadataByDimensions, iIncludes} from \"../../../../../misc/utils\";\r\n\r\nexport default class ExternallWall extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.visible = true;\r\n this.activeFeatureBeforeAllWalls = null;\r\n this.selectedByUser = false;\r\n this.allWallsApplied = false;\r\n this.isStoneFeature = true;\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const featuresToDisplay = super.getFeaturesBySearchText(this.getAvailableFeatures(filters), searchText);\r\n return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n getAvailableFeatures(filters) {\r\n const conditions = this.getArrayOfConditions();\r\n // console.log('condtitions', condtitions);\r\n const filteredAvailableFeatures = super.getFilteredFeaturesByFilters(filters);\r\n return super.navigationSubItemsWithFilterMultipleConditions(conditions, filteredAvailableFeatures);\r\n }\r\n\r\n setLayers(layout) {\r\n // this.wallName === \"ExtrusionWallLeft\" && console.log('this.getArrayOfConditions()', this.getArrayOfConditions());\r\n const shower = layout.parts[Shower.id];\r\n const wallParent = this.getParent();\r\n const conditions = this.getArrayOfConditions();\r\n // const layoutAbr = layout.getCurrentLayoutAbbreviation();\r\n if (this.activeFeature) {\r\n if (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature) {\r\n super.setLayers(layout)\r\n } else if (shower.isComplete()) {\r\n if (this.wallName === \"ExtrusionWallLeft\" || !shower.showerBody.activeFeature.partName.includes(\"Complete\")) {\r\n super.hideLayers();\r\n return;\r\n } else if (this.activeFeature && !this.activeFeature.matchesMetaForArrayOfConditions(conditions)) {\r\n this.setDefault(layout) // set new default layer\r\n }\r\n } else if (!this.activeFeature.matchesMetaForArrayOfConditions(conditions)) {\r\n this.setDefault(layout) // set new default layer\r\n }\r\n if (this.wallName === \"ExtrusionWallLeft\") {\r\n const activeShower = wallParent.getActiveShowerGroup();\r\n const showerDimensions = activeShower.showerDimensions();\r\n if (showerDimensions === \"Pony\") {\r\n super.hideLayers();\r\n return;\r\n }\r\n if (!shower.isComplete()) {\r\n this.setShadowFeature();\r\n }\r\n }\r\n }\r\n if (this.shadowFeature) {\r\n const layoutAbr = layout.getCurrentLayoutAbbreviation();\r\n const matchesByBindings = this.shadowFeature.dbFeature.s3Bindings.some(binding => {\r\n return binding.layout === LayoutAbbreviation.All || binding.layout === layoutAbr\r\n });\r\n if (!this.shadowFeature.matchesMetaForArrayOfConditions(this.getShadowConditions()) || !matchesByBindings) {\r\n this.setShadowFeature();\r\n }\r\n }\r\n super.setLayers(layout)\r\n }\r\n\r\n setDefault(layout) {\r\n const layoutAbr = layout.getCurrentLayoutAbbreviation();\r\n const shower = layout.parts[Shower.id];\r\n if (!shower) {\r\n console.log('Ex Wall - no Shower');\r\n return null;\r\n }\r\n if (layoutAbr === LayoutAbbreviation.Large) {\r\n if ((shower.isComplete() && this.wallName === \"ExtrusionWallLeft\")\r\n || !shower.showerBody || !shower.showerBody.activeFeature\r\n || (shower.isComplete() && !shower.showerBody.activeFeature.partName.includes(\"Complete\"))) {\r\n return null;\r\n }\r\n }\r\n const filteredFeatures = this.getAvailableFeatures();\r\n // console.log('Ex Wall - setDefault', filteredFeatures);\r\n if (!super.tryToSetTheSameFeature(filteredFeatures, null, null, true)) {\r\n let hardCodedName = '';\r\n switch (layoutAbr) {\r\n case LayoutAbbreviation.Small:\r\n hardCodedName = 'Rafter';\r\n break;\r\n case LayoutAbbreviation.Large:\r\n hardCodedName = 'Sahara Autumn Porcelain Tile';\r\n break;\r\n }\r\n const hardCodedDefault = filteredFeatures.find((feature) => {\r\n return iIncludes(feature.dbFeature.displayName, hardCodedName);\r\n });\r\n const placeholderDefault = filteredFeatures.find((feature) => {\r\n return iIncludes(feature.dbFeature.displayName, \" - placeholder\");\r\n });\r\n this.activeFeature = hardCodedDefault || filteredFeatures[0];\r\n this.placeholderFeature = placeholderDefault;\r\n this.setShadowFeature();\r\n }\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n\r\n const shower = zIndexes.Shower;\r\n const wallParent = this.getParent();\r\n\r\n if (zIndexes && this.wallName === \"ExtrusionWallLeft\") {\r\n // console.warn(`${this.wallName}: no wall, because we have a complete shower.`);\r\n if (wallParent.layout.parts[Shower.id].isComplete()) {\r\n return false;\r\n } else if (this.activeFeature) {\r\n const activeShowerGroup = wallParent.getActiveShowerGroup();\r\n const showerDimensions = getMetadataByDimensions(activeShowerGroup.showerDimensions());\r\n const zIndex = showerDimensions === \"Half\"\r\n ? shower.Custom60in[this.wallName + \"HalfWall\"]\r\n : shower.Custom60in[this.wallName];\r\n const zIndexShadow = showerDimensions === \"Half\"\r\n ? shower.Custom60in[this.wallName + \"ShadowHalfWall\"]\r\n : shower.Custom60in[this.wallName + \"Shadow\"];\r\n this.activeFeature.layer.zIndex = zIndex;\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n if (this.shadowFeature) {\r\n this.shadowFeature.layer.zIndex = zIndexShadow;\r\n }\r\n }\r\n } else {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = shower.Custom60in[this.wallName];\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = shower.Custom60in[this.wallName];\r\n }\r\n if (zIndexes && this.shadowFeature) {\r\n this.shadowFeature.layer.zIndex = shower.Custom60in[this.wallName + \"Shadow\"];\r\n }\r\n }\r\n }\r\n\r\n clickFromAllWalls(ignoreLocked) {\r\n if (!this.getParent().selectedByUser) {\r\n this.handleClick(ignoreLocked, 'all_walls')\r\n }\r\n }\r\n\r\n handleClick(ignoreLocked, clickFrom) {\r\n const parent = this.getParent();\r\n if (!parent.getParent().allWallsApplied && clickFrom !== 'all_walls') {\r\n parent.selectedByUser = true;\r\n }\r\n if (clickFrom !== 'context' && clickFrom !== 'all_walls') {\r\n const wallParent = this.getParent().getParent();\r\n const ponyWallFeature = wallParent.ponyWall && wallParent.ponyWall.features.find(feature => {\r\n return feature.partName === this.partName\r\n });\r\n if (ponyWallFeature) {\r\n ponyWallFeature.handleClick(ignoreLocked, 'context');\r\n }\r\n }\r\n super.handleClick(ignoreLocked);\r\n\r\n // if (parent.wallName === \"ExtrusionWallLeft\") {\r\n // const wallB = parent.getParent().layout.parts[\"Walls\"].part[\"wallB\"];\r\n // if (wallB.placeholderChanged && wallB.activeFeature.partName === this.partName) {\r\n // parent.selectedByUser = false;\r\n // }\r\n // } else {\r\n // const wallC = parent.getParent().layout.parts[\"Walls\"].part[\"wallC\"];\r\n // if (wallC.placeholderChanged && wallC.activeFeature.partName === this.partName) {\r\n // parent.selectedByUser = false;\r\n // }\r\n // }\r\n }\r\n\r\n // unCheckAllWalls(clickFrom) {\r\n // if (clickFrom === 'showerWall') {\r\n // this.allWallsApplied = false;\r\n // }\r\n // const tempSelectedByUser = this.selectedByUser;\r\n // if (this.activeFeatureBeforeAllWalls) {\r\n // this.activeFeatureBeforeAllWalls.handleClick();\r\n // this.activeFeatureBeforeAllWalls = null;\r\n // }\r\n // this.selectedByUser = tempSelectedByUser;\r\n // if (this.rememberToRecoverPlaceholder) {\r\n // this.placeholderChanged = false;\r\n // this.rememberToRecoverPlaceholder = false;\r\n // }\r\n // }\r\n}\r\n","import {LayoutType} from \"./constants\";\r\nimport {UseFullSizeImages} from \"../../../config\";\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\n\r\nlet layouts = {};\r\nObject.keys(LayoutType).forEach(layoutName => {\r\n layouts[layoutName] = {\r\n center_island_sink: 3100,\r\n center_island_faucet: 3200,\r\n oven: 4900,\r\n dishwasher: 5000,\r\n fridge: 5100,\r\n hood: 5200,\r\n microwave: 5300,\r\n range: 5400,\r\n decor: 11111,\r\n sink: 18000,\r\n faucet: 19000,\r\n center_island_countertop: 59000,\r\n center_island_cabinet: 60000,\r\n countertop: 61000,\r\n bottom_cabinet: 62000,\r\n top_cabinet: 63000,\r\n backsplash: 64000,\r\n center_wall: 65000,\r\n front_wall: 66000,\r\n left_wall: 67000,\r\n right_wall: 68000,\r\n kitchen_floor: 69000,\r\n background_bg: 70000,\r\n };\r\n});\r\n\r\nconst getLayerDimensions = (layer, currentLayout, canvasDimensions) => {\r\n const fullImagesFactor = UseFullSizeImages ? 177.77 : 100;\r\n const sizeFactor = fullImagesFactor / 100;\r\n const {coords} = layer;\r\n\r\n if (!coords) {\r\n return null\r\n }\r\n\r\n const COORDS_MAX = 1;\r\n // const isWallMobile = window.innerWidth <= 1024 && layer.partId.includes(\"wall\");\r\n\r\n const x1Percentage = (coords.min_x * 100) / COORDS_MAX;\r\n const x2Percentage = (coords.max_x * 100) / COORDS_MAX;\r\n const y1Percentage = (coords.min_y * 100) / COORDS_MAX;\r\n const y2Percentage = (coords.max_y * 100) / COORDS_MAX;\r\n let x1 = sizeFactor*((canvasDimensions.width * x1Percentage) / 100);\r\n let x2 = sizeFactor*((canvasDimensions.width * x2Percentage) / 100);\r\n let y1 = sizeFactor*((canvasDimensions.height * y1Percentage) / 100);\r\n let y2 = sizeFactor*((canvasDimensions.height * y2Percentage) / 100);\r\n // if (!isWallMobile) { // make layer bigger (to add some semi-transparent pixels)\r\n // x1 = x1 - 100;\r\n // x2 = x2 + 100;\r\n // y1 = y1 - 100;\r\n // y2 = y2 + 100;\r\n // }\r\n return {\r\n polygonArray: [[x1, y1], [x2, y1], [x2, y2], [x1, y2]],\r\n width: (x2 - x1),\r\n height:(y2 - y1)\r\n };\r\n};\r\n\r\nconst getMenuByHoveredLayer = (currentLayout, layer) => {\r\n const layout = getCurrentLayout();\r\n switch (layer.partId) {\r\n case \"sink\":\r\n case \"faucet\":\r\n case \"countertop\":\r\n case \"edge_profile\":\r\n return {\r\n contextMenuPartId: \"countertop_group_custom\"\r\n };\r\n case \"center_island_sink\":\r\n case \"center_island_faucet\":\r\n case \"center_island_edge\":\r\n case \"center_island_countertop\":\r\n case \"center_island_stovetop\":\r\n return {\r\n contextMenuPartId: \"center_island_custom\"\r\n };\r\n default: {\r\n const featureGroup = layout.getFeatureGroupByPartId(layer.partId);\r\n if (!featureGroup) {\r\n return \"\"\r\n }\r\n return {\r\n parent: featureGroup.getParent().partName,\r\n child: featureGroup.partName\r\n }\r\n }\r\n }\r\n};\r\n\r\nexport default {\r\n layouts,\r\n getMenuByHoveredLayer,\r\n getLayerDimensions\r\n}\r\n\r\n\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {getFeatureIsLocked} from \"../../../../../misc/helpers\";\r\nimport store from \"../../../../../store\";\r\nimport {toggleNotCompatibleView} from \"../../../../../actions/selectionFunctions\";\r\nimport {Shower} from \"../../parts/shower\";\r\n\r\nexport default class TubCommon extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n }\r\n\r\n disabledClick() {}\r\n\r\n applyFeatureIfNotCompatible() {\r\n const showerTubComboParent = this.getParent().getParent();\r\n showerTubComboParent.setShowerTubCombo();\r\n showerTubComboParent.setActiveTub(this.partId);\r\n }\r\n\r\n handleClick(ignoreLocked, clickFrom, clickLogic = null) {\r\n super.handleClick(ignoreLocked);\r\n\r\n if (this.notAvailableInVisualizer || getFeatureIsLocked(this)) {\r\n return\r\n }\r\n\r\n const showerTubComboParent = this.getParent().getParent();\r\n const currentBottomTub = showerTubComboParent.bottomTub;\r\n\r\n const showNotCompatibleViewConditions = !window.location.hash.includes(\"visualizer\") &&\r\n (!showerTubComboParent.showerTubComboIsActive || (\r\n (this.partId === \"walk_in_tub\" && currentBottomTub !== \"walk_in_tub\") || (this.partId !== \"walk_in_tub\" && currentBottomTub === \"walk_in_tub\")\r\n ));\r\n\r\n if (showNotCompatibleViewConditions && !(clickLogic && clickLogic.skipNotCompatible)) {\r\n store.dispatch(toggleNotCompatibleView(true));\r\n return;\r\n }\r\n\r\n this.applyFeatureIfNotCompatible();\r\n this.featureClicked();\r\n }\r\n\r\n getArrayOfConditions() {\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n const layout = this.getParent().layout;\r\n const showerParent = layout.parts[Shower.id];\r\n const showerSize = showerParent.showerSize();\r\n if (showerParent && showerSize) {\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerSize\r\n });\r\n }\r\n return conditions\r\n }\r\n\r\n setLayers(layout) {\r\n if (this.getParent().bottomTub !== this.partId) {\r\n super.hideLayers();\r\n return;\r\n }\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n}\r\n","import {LayoutType} from \"./constants\";\r\nimport {UseFullSizeImages} from \"../../../config\";\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\n\r\nlet layouts = {};\r\nObject.keys(LayoutType).forEach(layoutName => {\r\n layouts[layoutName] = {\r\n center_island_sink: 3100,\r\n background_bg: 70000,\r\n };\r\n});\r\n\r\nconst getLayerDimensions = (layer, currentLayout, canvasDimensions) => {\r\n const fullImagesFactor = UseFullSizeImages ? 177.77 : 100;\r\n const sizeFactor = fullImagesFactor / 100;\r\n const {coords} = layer;\r\n\r\n if (!coords) {\r\n return null\r\n }\r\n\r\n const COORDS_MAX = 1;\r\n\r\n const x1Percentage = (coords.min_x * 100) / COORDS_MAX;\r\n const x2Percentage = (coords.max_x * 100) / COORDS_MAX;\r\n const y1Percentage = (coords.min_y * 100) / COORDS_MAX;\r\n const y2Percentage = (coords.max_y * 100) / COORDS_MAX;\r\n let x1 = sizeFactor*((canvasDimensions.width * x1Percentage) / 100);\r\n let x2 = sizeFactor*((canvasDimensions.width * x2Percentage) / 100);\r\n let y1 = sizeFactor*((canvasDimensions.height * y1Percentage) / 100);\r\n let y2 = sizeFactor*((canvasDimensions.height * y2Percentage) / 100);\r\n return {\r\n polygonArray: [[x1, y1], [x2, y1], [x2, y2], [x1, y2]],\r\n width: (x2 - x1),\r\n height:(y2 - y1)\r\n };\r\n};\r\n\r\nconst getMenuByHoveredLayer = (layer) => {\r\n const layout = getCurrentLayout();\r\n const featureGroup = layout.getFeatureGroupByPartId(layer.partId);\r\n if (featureGroup) {\r\n return {\r\n parent: featureGroup.getParent().partName,\r\n child: featureGroup.partName\r\n }\r\n }\r\n return \"\"\r\n};\r\n\r\nexport default {\r\n layouts,\r\n getMenuByHoveredLayer,\r\n getLayerDimensions\r\n}\r\n\r\n\r\n","import cloneDeep from \"lodash/cloneDeep\";\r\n\r\nimport * as types from '../actions/actionTypes';\r\nimport {getCurrencyPosition, getCurrencySign} from \"../misc/helpers\";\r\nimport {MEASURE_UNITS} from \"../bvcomponents/sqft/constants\";\r\nimport {getCommonVisualizerType, IS_LIXIL_SERVERS} from \"../config\";\r\nimport * as fabricatorHardcode from \"../misc/fabricatorHardcode\";\r\nimport {IS_PRODUCT_JOURNEY} from \"../config\";\r\n\r\nconst checkMeasureUnit = (mUnit) => {\r\n return (mUnit === \"metric\" || mUnit === MEASURE_UNITS.Metric) ? MEASURE_UNITS.Metric : MEASURE_UNITS.Imperial\r\n};\r\n\r\nconst initialState = {\r\n received: false,\r\n fabricatorSubscriptions: [],\r\n settings: { // current active\r\n currency: \"USD\",\r\n currencySign: \"$\",\r\n currencyPosition: \"left\",\r\n measureUnit: null, // Imperial(default) || Metric\r\n useCategorySwitching: false,\r\n useShipperHQ: false,\r\n useFabricatorCostPrices: false,\r\n hideYourListButton: false,\r\n useMarkUpFeaturesRequests: false,\r\n },\r\n kitchenSettings: {},\r\n bathroomSettings: {},\r\n fabricatorTaxes: null,\r\n ...fabricatorHardcode.fabricatorsHardcodeObject,\r\n hidePricesFromUser: Array.isArray(document.dashboardUserPermissions) && document.dashboardUserPermissions.some(permission => {\r\n return permission.ProtectedAreaId === 9000 && permission.AccessRights === 0\r\n }),\r\n wasCreatedFromFabricator: \"\",\r\n useIMEAPI: false,\r\n useIMEAPI_PartnerId: 0,\r\n receiptSettings: {}, // \"{signIsRequired, showThumbnailsAndDescriptions, hideSignatureField, doNotFillNameAndDate}\"\r\n};\r\n\r\nconst getDashboardModeSettings = (settings) => {\r\n const dashboardProps = [\"twoFA\", \"leadCapture\", \"leadCaptureProduct\", \"clickLeadCapture\", \"enableQuote\",\r\n \"enableScheduling\", \"leadCaptureShoppingCart\", \"leadCaptureOnQuote\", \"clickLeadCaptureOnQuote\",\r\n \"showVisualizerTutorial\", \"showSqftTutorial\", \"showSlabMode\", \"useShipping\", \"sureTax\", \"hideSku\", \"showSalePrices\"];\r\n dashboardProps.forEach(property => {\r\n if (settings && settings[property] && !settings[property + \"Dashboard\"] && document.kvConfig.isBackend) {\r\n settings[property] = false // disable property in the dashboard mode if it is disabled\r\n } else if (settings && !settings[property] && settings[property + \"Dashboard\"] && document.kvConfig.isBackend) {\r\n settings[property] = true // enable simple property in dashboard mode (to simplify code)\r\n }\r\n })\r\n return settings\r\n}\r\n\r\nexport const parseFabricatorSettingsOLD = (payload) => { //todo remove this after we push staging backend\r\n const actionPayload = cloneDeep(payload); // this is needed to other reducers! Object assign doesn't deeply cloning\r\n let bathroomSettings = actionPayload.settings || {};\r\n let kitchenSettings = actionPayload.settings || {};\r\n let fireplaceSettings = actionPayload.settings || {};\r\n let laundryRoomSettings = actionPayload.settings || {};\r\n if (kitchenSettings.kitchenToggles) {\r\n Object.keys(kitchenSettings.kitchenToggles).forEach((oldKey) => {\r\n const ignoreProperties = [\"showSqftTutorial\", \"showSlabMode\"];\r\n if (!ignoreProperties.some(prop => oldKey.includes(prop))) {\r\n const newKey = oldKey.split(\"Kitchen\")[0]\r\n delete Object.assign(kitchenSettings.kitchenToggles, {[newKey]: kitchenSettings.kitchenToggles[oldKey] })[oldKey];\r\n }\r\n })\r\n kitchenSettings.kitchenToggles.checkout = kitchenSettings.kitchenToggles.checkout || kitchenSettings.kitchenToggles.checkOut; // fix for incorrect property name\r\n kitchenSettings = Object.assign({}, actionPayload.settings, kitchenSettings.kitchenToggles);\r\n delete kitchenSettings.checkOut; // we don't need to keep it not to use it in future\r\n delete kitchenSettings.kitchenToggles; // we don't need to keep it not to use it in future\r\n kitchenSettings = getDashboardModeSettings(kitchenSettings);\r\n }\r\n bathroomSettings = getDashboardModeSettings(bathroomSettings);\r\n delete bathroomSettings.kitchenToggles; // we don't need to keep it not to use it in future\r\n return {\r\n settings: (document.kvConfig.visualizerType === \"Kitchen\" || document.kvConfig.visualizerType === \"kvScene\") ? kitchenSettings : bathroomSettings, // current active\r\n kitchenSettings,\r\n bathroomSettings,\r\n fireplaceSettings,\r\n laundryRoomSettings,\r\n }\r\n}\r\n\r\nconst generalProperties = [\"deposit\", \"depositDisclaimer\", \"depositMessage\", \"docuSignAuth\", \"enableDeposit\",\r\n \"enableDisclaimer\", \"enableDocuSign\", \"hasPaymentGateway\", \"language\", \"masterContractFields\", \"masterContractFullUrl\",\r\n \"measurement\", \"useContractSigning\"];\r\n\r\nexport const parseFabricatorSettings = (payload) => {\r\n if (IS_LIXIL_SERVERS) {\r\n //todo remove this after we push backend on Lixil\r\n return parseFabricatorSettingsOLD(payload);\r\n }\r\n let settingsObject = {\r\n settings: {},\r\n kitchenSettings: {},\r\n bathroomSettings: {},\r\n fireplaceSettings: {},\r\n laundryRoomSettings: {},\r\n };\r\n if (!payload.settings.toolSettings) {\r\n return settingsObject\r\n }\r\n const actionPayload = cloneDeep(payload); // this is needed to other reducers! Object assign doesn't deeply cloning\r\n Object.keys(actionPayload.settings.toolSettings).forEach(visType => {\r\n settingsObject[visType + \"Settings\"] = Object.assign(\r\n {},\r\n getDashboardModeSettings(actionPayload.settings.toolSettings[visType]),\r\n {\r\n checkout: actionPayload.settings.toolSettings[visType].checkout ||actionPayload.settings.toolSettings[visType].checkOut // fix for incorrect property name\r\n });\r\n delete settingsObject[visType + \"Settings\"].checkOut; // we don't need to keep it not to use it in future\r\n generalProperties.forEach(property => { // here we set the same property into each room fabricator settings\r\n // to prevent all components changing to take data from fabricatorData instead of fabricatorData.settings\r\n settingsObject[visType + \"Settings\"][property] = actionPayload.settings[property];\r\n })\r\n });\r\n const currentSettingsProperty = getCommonVisualizerType() + \"Settings\";\r\n settingsObject.settings = settingsObject[currentSettingsProperty]; // current settings\r\n return settingsObject\r\n}\r\n\r\nconst getFinalSettings = (settings, stateSettings, fabricatorResponse) => {\r\n\r\n if (IS_PRODUCT_JOURNEY && window.location.href.includes(\"colonial_\")) {\r\n settings[\"leadCaptureShoppingCart\"] = false;\r\n settings[\"enableQuote\"] = false;\r\n }\r\n\r\n const isCaesarStone = fabricatorHardcode.hardCodeIsCaesarStone();\r\n const isDeStefano = fabricatorHardcode.hardCodeIsDeStefano();\r\n return Object.assign({}, stateSettings, {\r\n ...settings,\r\n leadCapture: IS_PRODUCT_JOURNEY ? settings.leadCaptureProduct : settings.leadCapture,\r\n measureUnit: checkMeasureUnit(settings.measurement),\r\n currencySign: getCurrencySign(settings.currency, (fabricatorResponse && fabricatorResponse.settings) ? fabricatorResponse.settings : settings),\r\n currencyPosition: getCurrencyPosition(settings.currency),\r\n priceWorksheetEnabled: true,\r\n enableSharing: isCaesarStone ? false : settings.enableSharing,\r\n showLanguageSelect: isCaesarStone || isDeStefano ? false : settings.showLanguageSelect,\r\n useCategorySwitching: true,\r\n allowVisualizerSwitching: fabricatorResponse.useVisualizerSwitching || window.location.href.includes(\"allowRooms\"),\r\n callForPricing: settings.callForPricing || fabricatorHardcode.hardCodeIsAgent() || fabricatorHardcode.hardCodeIsTorrco(),\r\n enableASInventorySync: (fabricatorResponse && fabricatorResponse.settings) ? fabricatorResponse.settings.enableASInventorySync : false,\r\n enableASProductSync: (fabricatorResponse && fabricatorResponse.settings) ? fabricatorResponse.settings.enableASProductSync : false,\r\n enableGInventorySync: (fabricatorResponse && fabricatorResponse.settings) ? fabricatorResponse.settings.enableGInventorySync : false,\r\n enableGProductSync: (fabricatorResponse && fabricatorResponse.settings) ? fabricatorResponse.settings.enableGProductSync : false,\r\n useTrumbleApi: (fabricatorResponse && fabricatorResponse.settings) ? fabricatorResponse.settings.useTrumbleApi : false,\r\n useShipperHQ: (fabricatorResponse && fabricatorResponse.settings) ? fabricatorResponse.settings.useShipperHQ : false,\r\n useDifferentCurrencies: (fabricatorResponse && fabricatorResponse.settings) ? fabricatorResponse.settings.useDifferentCurrencies : false,\r\n hideYourListButton: fabricatorResponse ? fabricatorResponse.hideYourListButton : false,\r\n useMarkUpFeaturesRequests: fabricatorResponse ? fabricatorResponse.useMarkUpFeaturesRequests : false,\r\n useFabricatorCostPrices: false,\r\n });\r\n}\r\n\r\nexport default function (state = initialState, action) {\r\n\r\n switch (action.type) {\r\n\r\n case types.SET_FABRICATOR_DATA: {\r\n const {settings, kitchenSettings, bathroomSettings, fireplaceSettings, laundryRoomSettings} = parseFabricatorSettings(action.payload);\r\n document.kvConfig.visualizerOnly = settings.visualizerOnly;\r\n if (document.kvConfig.isBackend && document.kvConfig.visualizerOnly) {\r\n document.kvConfig.visualizerOnly = !(settings.checkout && settings.showPricing) // if they are enabled - enable all pages\r\n }\r\n const finalSettings = getFinalSettings(settings, state.settings, action.payload);\r\n const finalKvSettings = getFinalSettings(kitchenSettings, state.settings, action.payload);\r\n const finalBvSettings = getFinalSettings(bathroomSettings, state.settings, action.payload);\r\n const finalFPSettings = getFinalSettings(fireplaceSettings, state.settings, action.payload);\r\n const finalLRSettings = getFinalSettings(laundryRoomSettings, state.settings, action.payload);\r\n\r\n console.log(\"finalSettings: \", finalSettings);\r\n // console.log(\"finalKvSettings\", finalKvSettings);\r\n // console.log(\"finalBvSettings\", finalBvSettings);\r\n return Object.assign({}, state, {\r\n received: true,\r\n ...action.payload,\r\n city: action.payload.city ? action.payload.city.trim() : \"\",\r\n ...fabricatorHardcode.fabricatorsHardcodeObject,\r\n settings: finalSettings,\r\n kitchenSettings: finalKvSettings,\r\n bathroomSettings: finalBvSettings,\r\n fireplaceSettings: finalFPSettings,\r\n laundryRoomSettings: finalLRSettings,\r\n wasCreatedFromFabricator: action.payload.wasCreatedFromFabricator,\r\n useIMEAPI: action.payload.useIMEAPI,\r\n useIMEAPI_PartnerId: action.payload.useIMEAPI_PartnerId,\r\n receiptSettings: action.payload.receiptSettings ? JSON.parse(action.payload.receiptSettings) : {\r\n showThumbnailsAndDescriptions: fabricatorHardcode.hardCodeIsFabricator(\"customfitbath\", 259554)\r\n || fabricatorHardcode.hardCodeIsAmericanStandard()\r\n },\r\n });\r\n }\r\n case types.SET_FABRICATOR_SUBSCRIPTIONS:\r\n return Object.assign({}, state, {\r\n ...action.payload,\r\n });\r\n case types.SET_FABRICATOR_TAXES:\r\n return Object.assign({}, state, {\r\n fabricatorTaxes: action.payload.fabricatorTaxes || [],\r\n });\r\n case types.SET_SQFT_MEASURE_UNIT: {\r\n return Object.assign({}, state, {\r\n settings: Object.assign({}, state.settings, {\r\n measureUnit: action.payload.measureUnit,\r\n }),\r\n kitchenSettings: Object.assign({}, state.settings, {\r\n measureUnit: action.payload.measureUnit,\r\n })\r\n });\r\n }\r\n case types.UPDATE_FABRICATOR_SETTINGS: {\r\n const currentSettingsProperty = getCommonVisualizerType() + \"Settings\";\r\n const nextSettings = state[currentSettingsProperty]; // current settings\r\n // console.log(\"nextSettings\", nextSettings);\r\n return Object.assign({}, state, {\r\n settings: Object.assign({}, state.settings, nextSettings)\r\n });\r\n }\r\n case types.TOGGLE_HIDE_ITEMS_PRICES: {\r\n return Object.assign({}, state, {\r\n hideCheckoutBreakdownCost: !state.hideCheckoutBreakdownCost\r\n });\r\n }\r\n case types.TOGGLE_USE_FABRICATOR_COST_PRICES: {\r\n const nextSettings = {useFabricatorCostPrices: action.payload.useFabricatorCostPrices}\r\n return Object.assign({}, state, {\r\n settings: Object.assign({}, state.settings, nextSettings)\r\n });\r\n }\r\n }\r\n\r\n return state;\r\n\r\n}\r\n","import * as types from '../actions/actionTypes';\r\n\r\nexport const INITIAL_FLOW_BUTTON_TYPES = {\r\n Quote: \"Quote\",\r\n Design: \"Design\",\r\n};\r\n\r\nconst initialState = {\r\n initialFlowFinished: false, // is set only once to true (to load visualizer)\r\n initialFlowAdditionalRooms: [],\r\n initialFlowType: null,\r\n initialFlowRoom: null,\r\n initialFlowRoomLayout: null,\r\n initialFlowStep: 0,\r\n visualizerNotAvailable: false\r\n};\r\n\r\nexport default function(state = initialState, action){\r\n switch (action.type) {\r\n case types.SET_INITIAL_FLOW_FINISHED:\r\n case types.SET_INITIAL_FLOW_BUTTON:\r\n case types.SET_INITIAL_FLOW_ROOM:\r\n case types.SET_INITIAL_FLOW_ROOM_LAYOUT:\r\n case types.SET_INITIAL_FLOW_STEP:\r\n case types.SET_INITIAL_FLOW_ADDITIONAL_ROOMS:\r\n case types.SET_INITIAL_FLOW_VISUALIZER_NOT_AVAILABLE:\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n });\r\n }\r\n return state;\r\n}\r\n","import React from \"react\";\r\nimport {connect} from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\nimport NavigationRequests from \"./navigation/navigationRequests\";\r\nimport {IS_LIXIL_UI} from \"../../config\";\r\nimport MaterialSpinner from \"../ui/materialSpinner\";\r\nimport {COUNTERTOP_GROUP} from \"../kvComponent/core/constants\";\r\n\r\nclass AllFeaturesChecker extends NavigationRequests {\r\n\r\n static propTypes = {\r\n subPart: PropTypes.object.isRequired,\r\n callBack: PropTypes.func,\r\n loaderOnly: PropTypes.bool,\r\n withFiltersRequest: PropTypes.bool,\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n this._filtersRequestsMade = [];\r\n }\r\n\r\n componentDidMount() {\r\n const {subPart, callBack, withFiltersRequest, filterGroups} = this.props;\r\n if (withFiltersRequest && !this._filtersRequestsMade.includes(subPart.part.partId) && COUNTERTOP_GROUP.includes(subPart.part.partId)\r\n && !subPart.part.filtersReceived) {\r\n this._filtersRequestsMade.push(subPart.part.partId);\r\n this.checkIfAllFiltersReceived(subPart.part, filterGroups)\r\n .then(() => {\r\n if (callBack) {\r\n callBack()\r\n }\r\n });\r\n }\r\n this.checkIfAllFeaturesReceived(subPart, \"\", callBack);\r\n }\r\n\r\n render() {\r\n const {loaderOnly} = this.props;\r\n if (loaderOnly) {\r\n return IS_LIXIL_UI\r\n ? \r\n :

    \r\n }\r\n\r\n return (\r\n
  • \r\n
    \r\n
  • \r\n );\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n cartItems: store.cartState.cartItems,\r\n filterGroups: store.filterState.filterGroups,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(AllFeaturesChecker);\r\n","import {createContext, useContext} from \"react\";\r\n\r\nexport const initialShopContextValues = {\r\n shopNavItems: [],\r\n shopAllNavItems: [],\r\n shopNavItemsLoaded: false,\r\n shopActiveCategory: \"\",\r\n shopActiveFeature: \"\",\r\n shopLastActiveFeature: \"\",\r\n};\r\n\r\nconst shopAction = \"CHANGE_SHOP_CONTEXT\";\r\n\r\nconst ShopContext = createContext({});\r\n\r\nexport const useShopContext = () => {\r\n return useContext(ShopContext);\r\n}\r\n\r\nexport const shopContextAction = (payload) => {\r\n return {\r\n type: shopAction,\r\n payload\r\n }\r\n}\r\n\r\nexport const shopContextReducer = (state = initialShopContextValues, action) => {\r\n switch (action.type) {\r\n case shopAction:\r\n return {...state, ...action.payload};\r\n default:\r\n return state\r\n }\r\n}\r\n\r\nexport default ShopContext;\r\n","import React from \"react\";\r\nimport {connect} from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport COLOR_THEMES from \"../../../colorThemes\";\r\n\r\n\r\nconst UiIcon = (props) => {\r\n\r\n const {activeTheme, icon, color} = props;\r\n\r\n switch (icon) {\r\n case \"checkmark\":\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n )\r\n default:\r\n return null\r\n }\r\n}\r\n\r\nUiIcon.propTypes = {\r\n icon: PropTypes.string.isRequired,\r\n color: PropTypes.string\r\n}\r\n\r\nconst mapStateToProps = store => {\r\n const {activeTheme} = store.serverState;\r\n return {\r\n activeTheme\r\n }\r\n};\r\n\r\nexport default connect(mapStateToProps)(UiIcon)\r\n","import store from \"./../../../store\";\r\nimport config from \"../components/canvas/store/sqftConfig\";\r\nimport workspace from \"../components/canvas/core/workspace\";\r\nimport {\r\n getBacksplashArea,\r\n getEdgeLength,\r\n inchesToLNFT,\r\n inchesToMm,\r\n mm2ToM2,\r\n mmToM,\r\n sqInchesToSqFoot\r\n} from \"./sqftHelper\";\r\nimport {RESOURCE_ATTACHED_TO_TYPE, SQFT_FEATURES} from \"../constants\";\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\nimport MiteredController from \"../components/canvas/core/controls/mitered\";\r\nimport sqftSlabManager from \"../components/canvas/store/sqftSlabManager\";\r\nimport sqftShapeManager from \"../components/canvas/store/sqftShapeManager\";\r\n\r\nexport function manualCalculationsCheckForChangesApplied() {\r\n return manualCalculationsCountertopArea() > 0 || manualCalculationsEdgesLength() > 0 || manualCalculationsBacksplashArea() > 0\r\n}\r\n\r\n//TODO include edges length\r\nexport function manualCalculationsCountertopArea() {\r\n const state = store.getState();\r\n\r\n let totalArea = state.sqftManualCalculationState.countertopRows.reduce((sum, row) => {\r\n if (!row.length || !row.width || isNaN(row.length) || isNaN(row.width)) {\r\n return sum\r\n }\r\n\r\n return config.measureUnit === \"Imperial\"\r\n ? sum + Math.ceil(sqInchesToSqFoot(row.length * row.width))\r\n : sum + mm2ToM2(row.length * row.width)\r\n }, 0);\r\n\r\n return Math.ceil10(totalArea, -2);\r\n}\r\n\r\nexport function manualCalculationsEdgesLength() {\r\n const state = store.getState();\r\n let totalArea = state.sqftManualCalculationState.edgeRows.reduce((sum, row) => {\r\n if (!row.length || !row.height || isNaN(row.length) || isNaN(row.height)) {\r\n return sum\r\n }\r\n\r\n return sum + manualCalculationsEdgeLength(row.selectedFeature, row.length)\r\n }, 0);\r\n\r\n return config.measureUnit === \"Imperial\" ? Math.ceil10(totalArea) : Math.ceil10(totalArea, -2);\r\n}\r\n\r\nexport function manualCalculationsEdgeLength(selectedFeature, length) {\r\n return selectedFeature.dbFeature.unit.toLowerCase() === \"each\"\r\n ? 1\r\n : config.measureUnit === \"Imperial\" ? Math.ceil10(inchesToLNFT(length)) : Math.ceil10(mmToM(length), -2);\r\n}\r\n\r\nexport function manualCalculationsBacksplashArea() {\r\n const state = store.getState();\r\n\r\n return getRowSum(state.sqftManualCalculationState.backsplashRows);\r\n}\r\nconst getRowSum = (row) => {\r\n let totalArea = row.reduce((sum, row) => {\r\n if (!row.length || !row.height || isNaN(row.length) || isNaN(row.height)) {\r\n return sum\r\n }\r\n\r\n return config.measureUnit === \"Imperial\"\r\n ? sum + Math.ceil(sqInchesToSqFoot(row.length * row.height))\r\n : sum + mm2ToM2(row.length * row.height)\r\n }, 0);\r\n\r\n return Math.ceil10(totalArea, -2);\r\n}\r\n\r\nexport function getCountertopArea() {\r\n let totalArea = 0;\r\n const shapes = sqftShapeManager.getCounterTopShapes();\r\n //console.log(\"-------------------------\",);\r\n shapes\r\n .sort((a, b) => a.id - b.id)\r\n .forEach(function(shape) {\r\n totalArea += shape.getTotalArea();\r\n });\r\n //console.log(\"-------------------------\",);\r\n //console.log(\"total sqInchesToSqFoot(totalArea)\", sqInchesToSqFoot(totalArea));\r\n return {\r\n totalAreaToMeasureUnit: config.measureUnit === \"Imperial\" ? Math.ceil(sqInchesToSqFoot(totalArea)) : mm2ToM2(totalArea),\r\n totalArea: totalArea,\r\n shapeLength: shapes.length\r\n }\r\n}\r\n\r\nexport function getEdgesArea() {\r\n let edgeCount = 0;\r\n //let edges = workspace.getShapeType('edge');\r\n const edges = workspace.getAttachedToLineResource(RESOURCE_ATTACHED_TO_TYPE.edge);\r\n\r\n for (const edge of edges) {\r\n const attachedTo = workspace.getLineOrCornerLineById(edge.attachedToId);\r\n edgeCount += getEdgeLength(attachedTo);\r\n }\r\n\r\n if (workspace.miteredController instanceof MiteredController) {\r\n edgeCount += workspace.miteredController.getEdgesLength();\r\n }\r\n\r\n return config.measureUnit === \"Imperial\" ? Math.ceil(edgeCount) : Math.ceil10(edgeCount, -2);\r\n}\r\n\r\nexport function getBacksplashTotalArea() {\r\n let backsplashesArea = 0;\r\n const state = store.getState();\r\n const attachedToLineResources = state.sqftResourceState.attachedToLine;\r\n const backsplashes = attachedToLineResources.filter(attachedToLineResources => attachedToLineResources.type === RESOURCE_ATTACHED_TO_TYPE.backsplash)\r\n for (let i = 0; i < backsplashes.length; i++) {\r\n const line = workspace.getLineOrCornerLineById(backsplashes[i].attachedToId)\r\n if (line) {\r\n backsplashesArea += getBacksplashArea(line.getBacksplashHeight(), line);\r\n }\r\n }\r\n\r\n const backsplashLabeledShapes = sqftShapeManager.getBacksplashLabeledShapes()\r\n backsplashLabeledShapes.forEach(function(shape) {\r\n if (shape.getTotalArea) {\r\n const shapeArea = shape.getTotalArea();\r\n backsplashesArea += config.measureUnit === \"Imperial\" ? Math.ceil(sqInchesToSqFoot(shapeArea)) : mm2ToM2(shapeArea)\r\n }\r\n });\r\n\r\n return config.measureUnit === \"Imperial\" ? Math.ceil10(backsplashesArea) : Math.ceil10(backsplashesArea, -2);\r\n}\r\n\r\nexport const getConvertedMultipliedValue = (length, height) => {\r\n return config.measureUnit === \"Imperial\"\r\n ? Math.ceil(sqInchesToSqFoot(length * height))\r\n : mm2ToM2(length * height)\r\n}\r\n\r\nexport const getExportedManualCalculateBacksplashes = () => {\r\n const state = store.getState();\r\n let backsplashes = [];\r\n\r\n state.sqftManualCalculationState.backsplashRows.forEach((row) => {\r\n if (!row.length || !row.height || isNaN(row.length) || isNaN(row.height)) {\r\n return\r\n }\r\n let area = getConvertedMultipliedValue(row.length, row.height);\r\n let linearFeet = Math.ceil(inchesToLNFT(row.length)); // / 12\r\n let M = mmToM(row.length);\r\n backsplashes.push({\r\n id: row.id,\r\n partId: \"backsplashes\",\r\n length: area,\r\n squareFeet: area,\r\n realLength: config.measureUnit === \"Imperial\" ? linearFeet : M,\r\n inputLength: row.length,\r\n inputHeight: row.height,\r\n });\r\n });\r\n\r\n return backsplashes;\r\n}\r\n\r\nexport const getExportedManualCalculateEdges = () => {\r\n const state = store.getState();\r\n let selectedEdges = [];\r\n\r\n state.sqftManualCalculationState.edgeRows.forEach((row) => {\r\n if (!row.length || !row.height || isNaN(row.length) || isNaN(row.height)) {\r\n return\r\n }\r\n if (!row.selectedFeature) {\r\n console.log(\"edge was not selected in manual calculations\");\r\n return\r\n }\r\n selectedEdges.push({\r\n id: row.id,\r\n featureId: row.selectedFeature.dbFeature.id,\r\n partId: \"edges\",\r\n length: manualCalculationsEdgeLength(row.selectedFeature, row.length),\r\n unit: row.selectedFeature.dbFeature.unit,\r\n inputLength: row.length,\r\n inputHeight: row.height,\r\n name: row.type,\r\n segments: 1,\r\n });\r\n });\r\n\r\n return selectedEdges;\r\n}\r\n\r\n/**\r\n * @returns string\r\n */\r\nexport const getCountertopQtCategory = () => {\r\n const layout = getCurrentLayout();\r\n const mainNeeded = \"center_island_countertop\";\r\n const oppositeNeeded = \"countertop\";\r\n let featureGroupCountertop = layout.getSubPartFromQtCategories(mainNeeded);\r\n if (!featureGroupCountertop) {\r\n return oppositeNeeded\r\n }\r\n\r\n return mainNeeded\r\n}\r\n\r\n/**\r\n * @returns countertops[]\r\n */\r\nexport const getExportedManualCalculateCountertops = () => {\r\n const state = store.getState();\r\n let countertops = [];\r\n\r\n state.sqftManualCalculationState.countertopRows.forEach((row) => {\r\n if (!row.length || !row.width || isNaN(row.length) || isNaN(row.width)) {\r\n return\r\n }\r\n countertops.push({\r\n id: row.id,\r\n partId: getCountertopQtCategory(),\r\n inputLength: row.length,\r\n inputWidth: row.width,\r\n area: getConvertedMultipliedValue(row.length, row.width)\r\n });\r\n });\r\n\r\n return countertops;\r\n}\r\n\r\n/**\r\n * This will return area for slabImages and slab placeHolder shapes\r\n * @return {Number|*|number}\r\n */\r\nexport function getSlabTotalArea() {\r\n const state = store.getState();\r\n let slabImages = state.sqftSlabState.croppedSlabImages;\r\n let slabPlaceHolderShapes = sqftSlabManager.getSlabPlaceHolderShapes();\r\n if (slabImages.length === 0 && slabPlaceHolderShapes.length === 0) {\r\n return 0\r\n }\r\n let totalArea = [...slabImages, ...slabPlaceHolderShapes].reduce((previousValue, slabImage) => {\r\n let imageSize = slabImage.getSize()\r\n previousValue += imageSize.width * imageSize.height\r\n\r\n return previousValue\r\n }, 0)\r\n\r\n return config.measureUnit === \"Imperial\" ? Math.ceil10(sqInchesToSqFoot(totalArea)) : Math.ceil10(mmToM(totalArea), -2);\r\n}\r\n\r\nexport function getSlabImagesAreaGrouped() {\r\n const state = store.getState();\r\n const slabImages = state.sqftSlabState.croppedSlabImages;\r\n const slabPlaceHolderShapes = sqftSlabManager.getSlabPlaceHolderShapes();\r\n const slabImagesAndPlaceHolders = [...slabImages, ...slabPlaceHolderShapes];\r\n\r\n let slabImagesPrepared = [];\r\n for (let movableImage of slabImagesAndPlaceHolders) {\r\n let preparedSlabImage = slabImagesPrepared.find(prepared =>\r\n prepared.featureId === movableImage.featureId\r\n );\r\n\r\n if (preparedSlabImage) {\r\n preparedSlabImage.isDisabledInPopup = preparedSlabImage.isDisabledInPopup && movableImage.isDisabledInPopup;\r\n continue;\r\n }\r\n\r\n let totalArea = getSlabSameTypeArea(movableImage.featureId, slabImagesAndPlaceHolders);\r\n let totalSlabs = getSlabSameType(movableImage.featureId, slabImagesAndPlaceHolders).length;\r\n\r\n slabImagesPrepared.push({\r\n id: movableImage.id,\r\n partId: SQFT_FEATURES.slabs,\r\n slabParentPartId: movableImage.slabParentPartId,\r\n featureId: movableImage.featureId,\r\n totalSlabs: totalSlabs,\r\n totalArea: totalArea,\r\n pricePerArea: movableImage.pricePerArea,\r\n shouldUseSlabPricing: movableImage.shouldUseSlabPricing,\r\n isDisabledInPopup: movableImage.isDisabledInPopup\r\n });\r\n }\r\n\r\n return slabImagesPrepared;\r\n}\r\n\r\nexport function getSlabSameTypeArea(featureId, croppedSlabImages) {\r\n let totalArea = croppedSlabImages\r\n .filter(croppedSlabImage => croppedSlabImage.featureId === featureId)\r\n .reduce((previousValue, slabImage) => {\r\n const imageSize = slabImage.getSize();\r\n const width = config.measureUnit === \"Imperial\" ? imageSize.width : inchesToMm(imageSize.width);\r\n const height = config.measureUnit === \"Imperial\" ? imageSize.height : inchesToMm(imageSize.height);\r\n previousValue += width * height;\r\n\r\n return previousValue\r\n }, 0)\r\n\r\n return config.measureUnit === \"Imperial\" ? Math.ceil10(sqInchesToSqFoot(totalArea)) : Math.ceil10(mm2ToM2(totalArea), -2);\r\n}\r\n\r\nexport function getSlabSameType(featureId, croppedSlabImages) {\r\n return croppedSlabImages.filter(croppedSlabImage => croppedSlabImage.featureId === featureId);\r\n}\r\n","import * as types from '../actions/actionTypes';\r\nimport {MANUAL_CALCULATION_ROW_TYPES} from \"../bvcomponents/sqft/constants\";\r\nimport sqftConfig from \"../bvcomponents/sqft/components/canvas/store/sqftConfig\";\r\n\r\nexport const DEFAULT_MANUAL_CALC_ROW = {\r\n id: \"\",\r\n length: sqftConfig.getMeasureUnitPostfix(),\r\n height: sqftConfig.getMeasureUnitPostfix(),\r\n width: sqftConfig.getMeasureUnitPostfix(),\r\n selectedFeature: \"\",\r\n isShowTypesList: false,\r\n};\r\n\r\nexport const getEdgesPlaceholder = () => {\r\n return sqftConfig.measureUnit === \"Imperial\"\r\n ? sqftConfig.edgeHeightImperial //+ sqftConfig.getMeasureUnitPostfix()\r\n : sqftConfig.edgeHeightMetric //+ sqftConfig.getMeasureUnitPostfix()\r\n}\r\n\r\nexport const getDefaultManualCalcRowEdge = () => Object.assign({}, DEFAULT_MANUAL_CALC_ROW, { height: getEdgesPlaceholder() })\r\n\r\nexport const getInitialManualCalcRows = () => {\r\n return {\r\n [MANUAL_CALCULATION_ROW_TYPES.countertopRows]: new Array(6).fill(null)\r\n .map((value, index) => ({...DEFAULT_MANUAL_CALC_ROW, id: index + 1})),\r\n [MANUAL_CALCULATION_ROW_TYPES.edgeRows]: new Array(6).fill(null)\r\n .map((value, index) => ({...getDefaultManualCalcRowEdge(), id: index + 1})),\r\n [MANUAL_CALCULATION_ROW_TYPES.backsplashRows]: new Array(6).fill(null)\r\n .map((value, index) => ({...DEFAULT_MANUAL_CALC_ROW, id: index + 1})),\r\n }\r\n}\r\n\r\nconst initialState = {\r\n showManualCalculation: false,\r\n switcherPosition: {\r\n rect: {x:0, y:0}\r\n },\r\n ...getInitialManualCalcRows()\r\n};\r\n\r\nexport default function (state = initialState, action) {\r\n let filteredRows,\r\n newRow,\r\n lastRow,\r\n lastRowId;\r\n\r\n switch (action.type) {\r\n case types.TOGGLE_SHOW_MANUAL_CALCULATION:\r\n case types.SET_SWITCHER_POSITION:\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n });\r\n case types.UPDATE_MANUAL_CALCULATION_ROWS:\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n });\r\n case types.ADD_MANUAL_CALCULATION_ROW:\r\n lastRow = state[action.payload.type][state[action.payload.type].length - 1];\r\n lastRowId = lastRow ? lastRow.id : 0;\r\n switch (action.payload.type) {\r\n case MANUAL_CALCULATION_ROW_TYPES.edgeRows:\r\n newRow = {...getDefaultManualCalcRowEdge(), id: lastRowId + 1};\r\n break;\r\n default:\r\n newRow = {...DEFAULT_MANUAL_CALC_ROW, id: lastRowId + 1};\r\n }\r\n\r\n return {\r\n ...state,\r\n [action.payload.type] : [...state[action.payload.type], newRow]\r\n };\r\n case types.DELETE_MANUAL_CALCULATION_ROW:\r\n filteredRows = state[action.payload.type].filter((row) => row.id !== action.payload.id);\r\n\r\n return Object.assign({}, state, {\r\n [action.payload.type]: filteredRows\r\n });\r\n case types.UPDATE_MANUAL_CALCULATION_ROW: {\r\n const newList = state[action.payload.type].map((item) => {\r\n if (item.id === action.payload.row.id) {\r\n\r\n return Object.assign({}, item, {\r\n ...action.payload.updatedRowValue\r\n });\r\n }\r\n\r\n return item;\r\n });\r\n return Object.assign({}, state, {\r\n [action.payload.type]: newList\r\n });\r\n }\r\n\r\n default:\r\n return state\r\n }\r\n}\r\n","import workspace from \"../workspace\";\r\nimport sqftShapeManager from \"../../store/sqftShapeManager\";\r\nimport Rectangle from \"../shapes/layouts/rectangle\";\r\nimport {CABINET_LABELS, SHAPE_PART_ID} from \"../../../../constants\";\r\nimport Polygon from \"../shapes/layouts/polygon\";\r\nimport SlabAdditionalShape from \"../slab/slabAdditionalShape\";\r\nimport {createIroningBoardShape} from \"./cabinetShapesSpecialLayouts\";\r\nimport {getCabinetDimensions, getRelatedFeatureMetadata, getSpecialShape} from \"../../../../helpers/sqft3dArHelper\";\r\n\r\nexport const SHAPE_LAYOUTS = {\r\n rectangle: \"rectangle\",\r\n upperLayoutType5: \"upperLayoutType5\",\r\n upperLayoutType2: \"upperLayoutType2\",\r\n upperLayoutType4: \"upperLayoutType4\",\r\n\r\n lowerLayoutType1: \"lowerLayoutType1\",\r\n lowerLayoutType2: \"lowerLayoutType2\",\r\n lowerLayoutType3: \"lowerLayoutType3\",\r\n lowerLayoutType4: \"lowerLayoutType4\",\r\n lowerLayoutType5: \"lowerLayoutType5\",\r\n LowerIroningBoardRight: \"LowerIroningBoardRight\",\r\n LowerIroningBoardLeft: \"LowerIroningBoardLeft\",\r\n};\r\n\r\nexport const SHAPE_UPPER_LAYOUTS = [\r\n SHAPE_LAYOUTS.upperLayoutType5,\r\n SHAPE_LAYOUTS.upperLayoutType2,\r\n SHAPE_LAYOUTS.upperLayoutType4,\r\n];\r\n\r\nexport const SHAPE_LOWER_LAYOUTS = [\r\n SHAPE_LAYOUTS.lowerLayoutType1,\r\n SHAPE_LAYOUTS.lowerLayoutType2,\r\n SHAPE_LAYOUTS.lowerLayoutType3,\r\n SHAPE_LAYOUTS.lowerLayoutType4,\r\n SHAPE_LAYOUTS.lowerLayoutType5,\r\n SHAPE_LAYOUTS.LowerIroningBoardRight,\r\n SHAPE_LAYOUTS.LowerIroningBoardLeft,\r\n];\r\nexport const SHAPE_DIAMOND_LAYOUTS = [\r\n SHAPE_LAYOUTS.lowerLayoutType4,\r\n SHAPE_LAYOUTS.lowerLayoutType5,\r\n SHAPE_LAYOUTS.upperLayoutType4,\r\n SHAPE_LAYOUTS.upperLayoutType5,\r\n];\r\n\r\nexport const SHAPE_SQUARE_LAYOUTS = [\r\n SHAPE_LAYOUTS.upperLayoutType2,\r\n SHAPE_LAYOUTS.upperLayoutType4,\r\n SHAPE_LAYOUTS.upperLayoutType5,\r\n\r\n SHAPE_LAYOUTS.lowerLayoutType1,\r\n SHAPE_LAYOUTS.lowerLayoutType2,\r\n SHAPE_LAYOUTS.lowerLayoutType4,\r\n SHAPE_LAYOUTS.lowerLayoutType5,\r\n];\r\n\r\nexport const IRONING_BOARD_DIRECTION = {\r\n left: 'left',\r\n right: 'right'\r\n}\r\n\r\n// const LAYOUT_TYPES = {\r\n// upper: SHAPE_UPPER_LAYOUTS,\r\n// lower: SHAPE_LOWER_LAYOUTS,\r\n// };\r\n\r\nclass CabinetShapes {\r\n constructor() {\r\n this.upperShapes = [];\r\n this.lowerShapes = [];\r\n this.otherShapes = [];\r\n this.additionalShapes = [];\r\n this.shapes = {\r\n /**\r\n * |‾‾‾‾|\r\n * | /\r\n * |__/\r\n */\r\n upperLayoutType5: [\r\n 'SM-DCW2436', 'SW-DCW2430', 'SM-DCW2442',\r\n 'Providence Cabinets Shaker White 27\" W, 36\" H Diagonal Corner Wall Cabinet',\r\n 'Providence Cabinets Shaker White 27\" W, 42\" H Diagonal Corner Wall Cabinet',\r\n 'SW-W1230', 'SM-W1236', 'SM-W1242',\r\n ],\r\n /**\r\n * |‾‾‾‾|\r\n * | _|\r\n * |__|\r\n */\r\n upperLayoutType2: [\r\n 'Providence Cabinets Shaker White Corner Wall Cabinet 24\"W 36\" H',\r\n 'Providence Cabinets Shaker White 24\" W, 30\" H Diagonal Corner Wall Cabinet',\r\n 'Providence Cabinets Shaker White Corner Wall Cabinet 24\"W 30\"H',\r\n 'Providence Cabinets Shaker White Corner Wall Cabinet 24\"W 42\"H',\r\n 'Providence Cabinets Shaker White Corner Wall Cabinet 24\"W 42\" H',\r\n ],\r\n /**\r\n * |‾‾‾‾‾|\r\n * | __|\r\n * |__|\r\n */\r\n lowerLayoutType1: ['SM-ERB36/BER36', 'Providence Cabinets Shaker White 33\" Lazy Susan'],\r\n /**\r\n * |‾‾‾/\r\n * | >\r\n * |/\r\n */\r\n lowerLayoutType2: ['SW-BEC24'],\r\n /**\r\n * |‾‾‾|\r\n * | |\r\n * | )\r\n */\r\n lowerLayoutType3: ['SW-BES12'],\r\n LowerIroningBoardRight: ['SW-BES12'],\r\n /**\r\n * |‾‾‾‾|\r\n * | /\r\n * |__/\r\n */\r\n lowerLayoutType4: [],\r\n };\r\n this.specialShapes = {\r\n LowerLCorner: SHAPE_LAYOUTS.lowerLayoutType1,\r\n LowerDullangle: SHAPE_LAYOUTS.lowerLayoutType2,\r\n LowerDualangle: SHAPE_LAYOUTS.lowerLayoutType2,\r\n LowerIroningBoard: SHAPE_LAYOUTS.lowerLayoutType3,\r\n LowerDimondShape: SHAPE_LAYOUTS.lowerLayoutType4,\r\n LowerDimondCorner: SHAPE_LAYOUTS.lowerLayoutType5,\r\n LowerIroningBoardRight: SHAPE_LAYOUTS.LowerIroningBoardRight,\r\n LowerIroningBoardLeft: SHAPE_LAYOUTS.LowerIroningBoardLeft,\r\n\r\n UpperDimondShape: SHAPE_LAYOUTS.upperLayoutType4,\r\n UpperDimondCorner: SHAPE_LAYOUTS.upperLayoutType5,\r\n UpperLCorner: SHAPE_LAYOUTS.upperLayoutType2,\r\n }\r\n }\r\n\r\n addShape = (feature, parentFeature, position = null) => {\r\n const dimensions = getCabinetDimensions(feature, parentFeature);\r\n if (feature.partId === CABINET_LABELS.upper_cabinet_boxes) {\r\n return this.addShapeHelper(\r\n this.upperShapes, 'square', feature.partId,\r\n this.getShapeLayout(feature, parentFeature), dimensions, position, feature, parentFeature\r\n );\r\n } else if (feature.partId === CABINET_LABELS.lower_cabinet_boxes) {\r\n return this.addShapeHelper(\r\n this.lowerShapes, 'square', feature.partId,\r\n this.getShapeLayout(feature, parentFeature), dimensions, position, feature, parentFeature\r\n );\r\n } else {\r\n return this.addShapeHelper(\r\n this.otherShapes, 'square', feature.partId,\r\n this.getShapeLayout(feature, parentFeature), dimensions, position, feature, parentFeature\r\n );\r\n }\r\n };\r\n\r\n addShapeHelper = (shapeArray, shapeType, partId, shapeLayout, dimensions, position, feature, parentFeature) => {\r\n const shapeLines = this.getShapeLines(shapeLayout, dimensions);\r\n const shapeParams = { shapeCabinet: true, canSnap: true, ...dimensions, shapeLayout };\r\n const shapeId = sqftShapeManager.addShape(shapeLines, shapeType, position, partId, null, shapeParams);\r\n const shape = workspace.getShapeById(shapeId);\r\n sqftShapeManager.setShapeFeatureId(shapeId, feature.dbFeature.id);\r\n sqftShapeManager.setShapeRelatedParentFeatureId(shapeId, parentFeature.dbFeature.id);\r\n shape.setOriginalPointsCoords(shape.getPointsCoords());\r\n shapeArray.push(shapeId);\r\n console.log(\"Feature SharedFeatureName\", feature.dbFeature.sharedFeatureName);\r\n console.log(\"Feature Metadata\", getRelatedFeatureMetadata(feature, parentFeature));\r\n return shapeId;\r\n };\r\n\r\n getShapeLayout = (feature, parentFeature) => {\r\n const thirdPartyAR3DMetaData = getRelatedFeatureMetadata(feature, parentFeature);\r\n const specialShape = getSpecialShape(thirdPartyAR3DMetaData);\r\n if (specialShape) {\r\n const specialLayoutName = specialShape.replace(/\\s/g, \"\");\r\n if (this.specialShapes[specialLayoutName]) {\r\n return this.specialShapes[specialLayoutName]\r\n }\r\n }\r\n\r\n // Hardcoded Layouts\r\n for (const layout of Object.keys(SHAPE_LAYOUTS)) {\r\n if (this.shapes[layout] && feature.dbFeature && this.shapes[layout].includes(feature.dbFeature.sharedFeatureName) ||\r\n (feature.part && this.shapes[layout].includes(feature.part.dbFeature.sharedFeatureName))) {\r\n return layout;\r\n }\r\n }\r\n\r\n return SHAPE_LAYOUTS.rectangle;\r\n };\r\n\r\n getShapeLines = (shapeLayout, { width, height, depth, diamondLength}) => {\r\n void height;\r\n let margin = diamondLength ? width - diamondLength : 0;\r\n switch (shapeLayout) {\r\n case SHAPE_LAYOUTS.lowerLayoutType1:\r\n return new Polygon(this.createPoints([\r\n { x: 0, y: 0 },\r\n { x: width, y: 0 },\r\n { x: width, y: depth },\r\n { x: depth, y: depth },\r\n { x: depth, y: width },\r\n { x: 0, y: width }\r\n ]), true, true);\r\n case SHAPE_LAYOUTS.lowerLayoutType2:\r\n return new Polygon(this.createPoints([\r\n { x: 0, y: 0 },\r\n { x: width, y: 0 },\r\n { x: width - 8, y: depth - 8 },\r\n { x: 0, y: depth }\r\n ]), true, true);\r\n case SHAPE_LAYOUTS.lowerLayoutType3:\r\n case SHAPE_LAYOUTS.LowerIroningBoardRight:\r\n return createIroningBoardShape(width, depth, width, IRONING_BOARD_DIRECTION.right);\r\n case SHAPE_LAYOUTS.LowerIroningBoardLeft:\r\n return createIroningBoardShape(width, depth, width, IRONING_BOARD_DIRECTION.left);\r\n case SHAPE_LAYOUTS.lowerLayoutType4:\r\n return new Polygon(this.createPoints([\r\n { x: margin, y: 0 },\r\n { x: width, y: 0 },\r\n { x: width, y: depth },\r\n { x: depth, y: width },\r\n { x: 0, y: width },\r\n { x: 0, y: margin }\r\n ]), true, true);\r\n case SHAPE_LAYOUTS.lowerLayoutType5:\r\n return new Polygon(this.createPoints([\r\n { x: margin, y: 0 },\r\n { x: width, y: 0 },\r\n { x: width, y: depth },\r\n { x: depth, y: depth },\r\n { x: depth, y: width },\r\n { x: 0, y: width },\r\n { x: 0, y: margin }\r\n ]), true, true);\r\n\r\n // UPPER\r\n case SHAPE_LAYOUTS.upperLayoutType4:\r\n return new Polygon(this.createPoints([\r\n { x: margin, y: 0 },\r\n { x: width, y: 0 },\r\n { x: width, y: depth },\r\n { x: depth, y: width },\r\n { x: 0, y: width },\r\n { x: 0, y: margin }\r\n ]), true, true);\r\n case SHAPE_LAYOUTS.upperLayoutType5:\r\n return new Polygon(this.createPoints([\r\n { x: margin, y: 0 },\r\n { x: width, y: 0 },\r\n { x: width, y: depth },\r\n { x: depth, y: depth },\r\n { x: depth, y: width },\r\n { x: 0, y: width },\r\n { x: 0, y: margin }\r\n ]), true, true);\r\n case SHAPE_LAYOUTS.upperLayoutType2:\r\n return new Polygon(this.createPoints([\r\n { x: 0, y: 0 },\r\n { x: width, y: 0 },\r\n { x: width, y: depth },\r\n { x: depth, y: depth },\r\n { x: depth, y: width },\r\n { x: 0, y: width }\r\n ]), true, true);\r\n default:\r\n return new Rectangle(width, depth);\r\n }\r\n };\r\n\r\n createPoints = (coords) => coords;\r\n\r\n resetUpperShapes = () => {\r\n this.upperShapes = [];\r\n };\r\n\r\n importData = (data) => {\r\n //this.resetBacksplashes();\r\n data.forEach(activeBacksplashData => {\r\n const shape = workspace.importShape(activeBacksplashData.backsplashShape);\r\n shape.deregisterEvents();\r\n const line = workspace.getLineById(activeBacksplashData.line.id);\r\n const slabAdditionalShape = new SlabAdditionalShape(line, shape.id);\r\n this.addActiveBacksplash(slabAdditionalShape);\r\n });\r\n };\r\n\r\n exportData = () => {\r\n return this.additionalShapes\r\n .filter(slab => workspace.getShapeById(slab.backsplashShapeId).partId !== SHAPE_PART_ID.seamPiece)\r\n .map(slab => ({\r\n backsplashShape: workspace.getShapeById(slab.backsplashShapeId).export(),\r\n line: slab.line.export(),\r\n }));\r\n };\r\n\r\n addActiveBacksplash = (slabAdditionalShape) => {\r\n this.additionalShapes.push(slabAdditionalShape);\r\n };\r\n\r\n findAdditionalShapeByLine = (line) => {\r\n return this.additionalShapes.find(additionalShape => additionalShape.line.id === line.id);\r\n };\r\n\r\n removeActiveBacksplashByLine = (line) => {\r\n this.additionalShapes = this.additionalShapes.filter(shape => {\r\n if (shape.line.id === line.id) {\r\n workspace.removeShapeById(shape.backsplashShapeId);\r\n return false;\r\n }\r\n return true;\r\n });\r\n };\r\n\r\n removeShapeFromList = (shapeToRemove) => {\r\n this.additionalShapes = this.additionalShapes.filter(additionalShape => additionalShape.backsplashShapeId !== shapeToRemove.id);\r\n };\r\n}\r\n\r\nexport default CabinetShapes;\r\n","import $ from 'jquery';\r\nimport PropTypes from \"prop-types\";\r\nimport 'jquery-ui/ui/core';\r\nimport 'jquery-ui/ui/widgets/draggable';\r\nimport React, {Fragment} from \"react\";\r\nimport uuid from \"uuid\";\r\n\r\nimport ActionTypes from \"./../../../misc/actionTypes\";\r\nimport KeyboardKey from \"./keyboardKey\";\r\nimport Config from \"./../../../config\"; // kioskStandAlone\r\nimport Analytics from './../../../analytics';\r\n\r\n\r\nexport default class OnScreenKeyboard extends React.Component {\r\n\r\n static propTypes = {\r\n rightSide: PropTypes.bool,\r\n inputId: PropTypes.string.isRequired,\r\n getValue: PropTypes.func,\r\n setValue: PropTypes.func.isRequired,\r\n onClose: PropTypes.func,\r\n onShow: PropTypes.func,\r\n type: PropTypes.string.isRequired,\r\n prependTo: PropTypes.string,\r\n appendTo: PropTypes.string,\r\n top: PropTypes.string,\r\n left: PropTypes.string,\r\n }\r\n\r\n constructor(props) {\r\n super(props);\r\n this.keyboardFrame = null;\r\n this.state = {\r\n value: '',\r\n hidden: true,\r\n selectionStart: 0,\r\n selectionEnd: 0,\r\n type: this.props.type || \"standard\",\r\n oskInputId: uuid.v4(),\r\n isUpperCase: false,\r\n osk: document.kvConfig.osk,\r\n parentNode: null\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n this.tryBindToParent();\r\n this.setState({parentNode: $(this.keyboardFrame).parent()}, () => {\r\n if(this.props.prependTo)\r\n $(this.keyboardFrame).detach().prependTo(this.props.prependTo);\r\n else if(this.props.appendTo)\r\n $(this.keyboardFrame).detach().appendTo(this.props.appendTo);\r\n });\r\n\r\n const $keyboardFrame = $(this.keyboardFrame);\r\n const lightbox = $keyboardFrame.parents('.lightbox-options-wrapper');\r\n if (lightbox) {\r\n lightbox.on('scroll', this.setKBPosition.bind(this, $keyboardFrame, lightbox));\r\n this.setKBPosition($keyboardFrame, lightbox);\r\n }\r\n\r\n $(document).on(ActionTypes.SHOW_NUMERIC_KBD, this.handleShowKeyboard);\r\n $(document).on(ActionTypes.OVERLAY_CLICK, this.handleShowKeyboard);\r\n $(document).on('click', this.handleOutsideClick);\r\n }\r\n\r\n componentDidUpdate() {\r\n this.tryBindToParent();\r\n const fields = this.getFields();\r\n if (!this.state.hidden) {\r\n const selStart = this.state.selectionStart,\r\n selEnd = this.state.selectionEnd;\r\n if (fields.input) {\r\n fields.input.value = this.passwordify(this.state.value);\r\n fields.$input.focus();\r\n fields.input.setSelectionRange(selStart, selEnd);\r\n }\r\n }\r\n }\r\n\r\n componentWillReceiveProps(nextProps) { // we need to update this state when parent passes new value\r\n nextProps.value && nextProps.value !== this.state.value && this.setState({\r\n value: nextProps.value\r\n });\r\n }\r\n\r\n componentWillUnmount = () => {\r\n $(this.keyboardFrame).detach().appendTo(this.state.parentNode);\r\n $('.lightbox-options-wrapper').off('scroll');\r\n $(document).off(ActionTypes.SHOW_NUMERIC_KBD, this.handleShowKeyboard);\r\n $(document).off(ActionTypes.OVERLAY_CLICK, this.handleShowKeyboard);\r\n $(document).off('click', this.handleOutsideClick);\r\n };\r\n\r\n getFields = () => {\r\n const $parent = $('#' + (this.props.inputId ? this.props.inputId : this.props.parentId)),\r\n $parentInput = (this.props.inputId ? $('#' + this.props.inputId) : $parent.find('input[type=text]:not(\".osk-input\")')),\r\n parentInput = $parent[0],\r\n $input = $('#' + this.state.oskInputId),\r\n input = $input[0];\r\n return {\r\n $input: $input,\r\n input: input,\r\n $parent: $parent,\r\n $parentInput: $parentInput,\r\n parentInput: parentInput\r\n };\r\n };\r\n\r\n tryBindToParent = () => {\r\n if (!this.state.osk) {\r\n return;\r\n }\r\n\r\n let fields = this.getFields();\r\n if (!fields || !fields.parentInput || fields.parentInput === undefined) {\r\n console.log('could not bind, fields is null');\r\n return;\r\n }\r\n\r\n //console.log('bound to parent', this.props.inputId, fields.$parentInput, fields.parentInput);\r\n $(fields.parentInput).off('focus').on('focus', this.show);\r\n $(fields.parentInput).off('click').on('click', function (e) {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n });\r\n };\r\n\r\n setKBPosition = (self, lightbox) => {\r\n if (lightbox.is(\":visible\")) {\r\n const parent = self.parent();\r\n const offset = parent.offset();\r\n self.css({\r\n top: offset.top + 60,\r\n left: offset.left + 50,\r\n position: 'fixed'\r\n });\r\n }\r\n };\r\n\r\n handleShowKeyboard = (e, data) => {\r\n if (this.state.hidden) {\r\n return;\r\n }\r\n\r\n if (!data || data.sender !== this.state.oskInputId) {\r\n this.hide();\r\n }\r\n };\r\n\r\n show = (e) => {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n const fields = this.getFields(),\r\n val = fields.$parentInput.val();\r\n //console.log('Show', fields);\r\n\r\n $(document).trigger(ActionTypes.SHOW_NUMERIC_KBD, {sender: this.state.oskInputId});\r\n $('.keyboard-main-frame, .keyboard-main-frame-extended').draggable({handle: '.keyboard-header-bar'});\r\n this.setState({value: val, hidden: false, selectionStart: val.length, selectionEnd: val.length, blockOutsideClick: true});\r\n window.setTimeout(() => {\r\n this.setState({blockOutsideClick: false});\r\n }, 500);\r\n if(this.props.onShow) {\r\n console.log('onShowShowing');\r\n this.props.onShow();\r\n }\r\n };\r\n\r\n\r\n handleOutsideClick = (e) => {\r\n if(this.state.blockOutsideClick) {\r\n return;\r\n }\r\n if($(e.target).parents('.keyboard-container').length <= 0) {\r\n this.hide();\r\n }\r\n };\r\n\r\n hide = () => {\r\n this.setState({hidden: true});\r\n setTimeout(() => {\r\n document.inputFocused = false;\r\n }, 20);\r\n if(this.props.onClose) {\r\n this.props.onClose(this.state.value);\r\n }\r\n };\r\n passwordify = (value) => {\r\n if (this.props.password) {\r\n for (let i = 0; i < value.length - 1; i++) {\r\n value = value.substring(0, i) + '*' + value.substring(i + 1);\r\n }\r\n }\r\n return value;\r\n };\r\n\r\n changeValue = (e) => {\r\n this.setState({value: e.target.value});\r\n };\r\n\r\n runKeyStroke = (key) => {\r\n document.inputFocused = true;\r\n if (key && key.length > 0) {\r\n const fields = this.getFields();\r\n let val = (this.props.getValue ? this.props.getValue() : this.state.value),\r\n start = val,\r\n end = \"\",\r\n input = fields.parentInput,\r\n $input = fields.$input,\r\n $parentInput = fields.$parentInput,\r\n selStart = (this.props.getValue ? val.length : input.selectionStart),\r\n selEnd = (this.props.getValue ? val.length : input.selectionEnd);\r\n //const ss = input.selectionStart, se = input.selectionEnd;\r\n // if (ss && ss !== selStart) {\r\n // selStart = ss;\r\n // }\r\n // if (se && se !== selEnd) {\r\n // selEnd = se;\r\n // }\r\n //console.log('>>', selStart, selEnd, key);\r\n if (selStart < val.length) {\r\n start = val.substring(0, selStart);\r\n end = val.substring(selEnd);\r\n }\r\n let inc = key.length;\r\n switch (key.toLowerCase()) {\r\n case \"backspace\":\r\n inc = -1;\r\n if (selStart < val.length) {\r\n if (selStart === selEnd) {\r\n start = start.substring(0, start.length - 1);\r\n } else {\r\n inc = 0;\r\n selEnd = selStart;\r\n }\r\n val = start + end;\r\n } else if (val.length > 0) {\r\n val = val.substring(0, val.length - 1);\r\n }\r\n break;\r\n case '|<':\r\n case '|>':\r\n if (key === '|<') {\r\n inc = -1;\r\n } else {\r\n if (selStart < selEnd) {\r\n inc = 0;\r\n selStart = selEnd;\r\n } else {\r\n inc = 1;\r\n }\r\n }\r\n break;\r\n case \"space bar\":\r\n case \"space\":\r\n val = start + \" \" + end;\r\n break;\r\n case \"caps\":\r\n case \"shift\":\r\n this.setState({isUpperCase: !this.state.isUpperCase});\r\n break;\r\n default:\r\n if (!this.state.isUpperCase) {\r\n key = key.toLowerCase();\r\n } else {\r\n key = key.toUpperCase();\r\n }\r\n val = start + key + end;\r\n selStart = start.length;\r\n selEnd = selStart;\r\n break;\r\n }\r\n //console.log('\\t>> ', selStart, selEnd, val, val.length, inc);\r\n if (selStart + inc > val.length) {\r\n selStart = val.length;\r\n selEnd = val.length;\r\n } else {\r\n selStart += inc;\r\n if (selEnd + inc > val.length) {\r\n selEnd = val.length;\r\n } else {\r\n selEnd += inc;\r\n }\r\n }\r\n if (selStart < 0) {\r\n selStart = 0;\r\n }\r\n if (selEnd < selStart) {\r\n selEnd = selStart;\r\n }\r\n\r\n this.setState({value: val, select: false}, () => {\r\n input.setSelectionRange(selStart, selEnd);\r\n if($input.length > 0)\r\n $input.focus();\r\n else\r\n $parentInput.focus();\r\n });\r\n // if ($input) {\r\n // console.log('\\t\\t>>', selStart, selEnd);\r\n // input.setSelectionRange(selStart, selEnd);\r\n // $input.val(val);\r\n // $input.focus();\r\n // }\r\n\r\n this.setParentValue(val);\r\n }\r\n };\r\n setParentValue = (value) => {\r\n Analytics.sendDataEnteredEvent('osk-update-parent-textbox');\r\n //console.log('setValue', value, this.props);\r\n if (this.props.setValue) {\r\n if (this.props.prop) {\r\n this.props.setValue(this.props.prop, value);\r\n } else {\r\n this.props.setValue(value);\r\n }\r\n }\r\n };\r\n\r\n done = () => {\r\n this.setParentValue(this.state.value);\r\n this.hide();\r\n };\r\n\r\n mouseUp = () => {\r\n const fields = this.getFields();\r\n this.setState({\r\n selectionStart: fields.input.selectionStart,\r\n selectionEnd: fields.input.selectionEnd\r\n });\r\n };\r\n\r\n render() {\r\n const visible = {\r\n display: this.state.hidden ? \"none\" : \"block\",\r\n //transition: \"all 0.5s ease-in-out\",\r\n top: this.props.top,\r\n left: this.props.left\r\n };\r\n if (this.props.type === \"numeric\") {\r\n return this.renderNumericKeyboard(visible);\r\n }\r\n\r\n const arrowKeys = {\r\n left: (Config.kioskStandAlone || location.port === '9007' || document.kvConfig.kioskMode ? '.' : '/Content/Views/quickquote-v3') + '/images/buttons/KeyboardLeftArrow.svg',\r\n right: (Config.kioskStandAlone || location.port === '9007' || document.kvConfig.kioskMode ? '.' : '/Content/Views/quickquote-v3') + '/images/buttons/KeyboardRightArrow.svg'\r\n };\r\n\r\n const mainFrameClass = \"keyboard-container \" + (this.props.type === 'email' ? 'keyboard-main-frame-extended' : 'keyboard-main-frame');\r\n\r\n return (\r\n
    this.keyboardFrame = node} onClick={(e) => e.stopPropagation()}>\r\n
    \r\n
    Drag to Move
    \r\n {this.state.hidden ? null : (\r\n
    \r\n
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \" image={arrowKeys.right}\r\n runKeyStroke={this.runKeyStroke}/>\r\n
    \r\n {this.renderEmailPanel()}\r\n
    \r\n )}\r\n
    \r\n );\r\n }\r\n\r\n renderEmailPanel = () => {\r\n if (this.props.type !== 'email') {\r\n return null;\r\n }\r\n\r\n return (\r\n
    \r\n @gmail.com\r\n @yahoo.com\r\n @hotmail.com\r\n @aol.com\r\n @msn.com\r\n @me.com\r\n @icloud.com\r\n .com\r\n .net\r\n
    \r\n );\r\n };\r\n\r\n renderNumericKeyboard = (visible) => {\r\n //
    \r\n return (\r\n\r\n
    this.keyboardFrame = node}>\r\n {this.state.hidden ? null : (\r\n \r\n
    \r\n
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n
    \r\n\r\n );\r\n //
    \r\n }\r\n}\r\n","import React, {useEffect, useRef, useState} from \"react\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\nimport {connect} from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\nimport IntlTelInput from \"react-intl-tel-input\";\r\n\r\nimport Config, {IS_QKB_UI} from './../../../config';\r\nimport Misc from \"../../../misc/misc\";\r\nimport {changeUserInfo, changeUserInfoErrors} from \"../../../actions/actionFunctions\";\r\nimport {useIsMounted} from \"../../../misc/helperHooks\";\r\nimport {getPreferredCountries} from \"../../common/twoFactorAuthView\";\r\nimport UserFieldErrors from \"../../popups/userPopup/userFieldsErrors\";\r\nimport OnScreenKeyboard from \"../../common/OnScreenKeyboard/keyboard\";\r\n\r\nconst replaceDialCode = (dialCode, inputValue) => {\r\n const dialWithPlus = \"+\" + dialCode;\r\n if (dialWithPlus.length > 1) {\r\n const charLength = dialWithPlus.length;\r\n if (dialWithPlus === inputValue.slice(0,charLength)) {\r\n inputValue = inputValue.slice(charLength);\r\n }\r\n }\r\n inputValue = inputValue.split(\" \").join(\"\").split(\"-\").join(\"\");\r\n return inputValue\r\n}\r\n\r\nconst LookUserPhoneInput = (props) => {\r\n\r\n const {property, userInfo, changeUserInfo, intl, userInfoErrors, changeUserInfoErrors, placeholder, isUserPopup,\r\n isActive, inputsValidated, fabricatorData} = props;\r\n // const isLowes = fabricatorData.isLowes;\r\n\r\n const inputRef = useRef();\r\n const [defaultValue, ] = useState(userInfo[property]);\r\n const [blurred, setBlurred] = useState(false);\r\n const [focused, setFocused] = useState(false);\r\n const [wasChanged, setWasChanged] = useState(false);\r\n const isMounted = useIsMounted();\r\n const utilsScript = Config.getScriptPath() + \"/libphonenumber.js\";\r\n\r\n // const handleInputBlur = (isValid, value, _this.selectedCountryData, fullNumber, _this.getExtension(value), e) => { // all input tel props params\r\n const handleInputBlur = (isValid, inputValue, ...rest) => {\r\n\r\n let restartInput = false;\r\n setFocused(false);\r\n\r\n const event = rest[3];\r\n if (event && event.relatedTarget && event.relatedTarget.className.includes(\"keyboard-container\")) { // blur from osk keyboard\r\n return\r\n }\r\n\r\n if (!blurred) {\r\n setBlurred(true);\r\n }\r\n const replacedValue = replaceDialCode(userInfo.country.dialCode, inputValue);\r\n if (replacedValue !== inputValue) {\r\n inputValue = replacedValue;\r\n restartInput = true;\r\n }\r\n\r\n const fullNumber = `+${userInfo.country.dialCode} ${inputValue}`;\r\n const errors = getValidationErrors(fullNumber, userInfo.country.iso2.toUpperCase());\r\n // if (!errors.length && !isValid) {\r\n // errors.push(\"assignPopup.errors.phoneIncorrect\")\r\n // }\r\n if (errors.length) {\r\n changeUserInfoErrors({\r\n [property]: errors\r\n })\r\n } else if (!errors.length && userInfoErrors[property]) {\r\n changeUserInfoErrors({\r\n [property]: errors\r\n })\r\n }\r\n // removed this formatting due to incorrect validation ex.(+447862073603)\r\n const formattedPhone = errors[property]\r\n ? Misc.getPhoneFormatted(inputValue, userInfo.country.iso2.toUpperCase())\r\n : inputValue;\r\n console.log(\"handleInputBlur formattedPhone\", formattedPhone);\r\n changeUserInfo({\r\n [property]: formattedPhone\r\n });\r\n if (restartInput && inputRef && inputRef.current && inputRef.current.setInitialState) {\r\n setTimeout(() => {\r\n inputRef.current.setFlag(userInfo.country.iso2, true);\r\n inputRef.current.setNumber(fullNumber);\r\n // inputRef.current.setInitialState();\r\n }, 0)\r\n }\r\n // console.log(\"blur number\", isValid, inputValue);\r\n };\r\n\r\n useEffect(() => {\r\n if (IS_QKB_UI) {\r\n if (isMounted() && isActive) {\r\n handleInputBlur(true, userInfo[property]);\r\n }\r\n } else if (!inputsValidated) {\r\n handleInputBlur(true, userInfo[property]);\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [inputsValidated]);\r\n\r\n const getValidationErrors = (currentValue, region) => {\r\n if (fabricatorData.isCaesarStone) {\r\n return []\r\n }\r\n region = region || \"US\";\r\n const errors = [];\r\n if (!currentValue) {\r\n errors.push(\"assignPopup.errors.phoneRequired\");\r\n return errors\r\n }\r\n if (!Misc.isPhoneNumber(currentValue, region)) {\r\n errors.push(\"assignPopup.errors.phoneIncorrect\");\r\n }\r\n return errors\r\n }\r\n\r\n const handleInputFocus = () => {\r\n setFocused(true);\r\n }\r\n\r\n /**\r\n * 5 arguments passed to this callback\r\n * @param a {boolean} // isValid\r\n * @param b {string} // newNumber\r\n * @param c {Object} // countryData\r\n * @param phoneNumber {string} // fullNumber\r\n * @param forceCarrot {boolean} // isExtension\r\n */\r\n const handleChangeNumber = (a, b, c, phoneNumber, forceCarrot = false) => {\r\n phoneNumber = phoneNumber.replace(/[^0-9\\-\\(\\)\\s]/gi, \"\");\r\n /*let prefix = `+${c.dialCode}`;\r\n phoneNumber = phoneNumber.replace(prefix, '');\r\n if(country !== \"auto\" && country.dialCode) {\r\n prefix = `+${country.dialCode}`;\r\n }\r\n if (startsWith(phoneNumber, prefix + ' ') || trim(phoneNumber).length == 0) {\r\n let hasPrefix = phoneNumber.substring(0, prefix.length) == prefix;\r\n if (hasPrefix) phoneNumber = trim(phoneNumber.substring(prefix.length));\r\n phoneNumber = `${prefix} ${phoneNumber}`;\r\n }*/\r\n if (forceCarrot) {\r\n const forceCarrotFunc = () => {\r\n let p = document.getElementById('phone');\r\n p.selectionStart = phoneNumber.length;\r\n p.selectionEnd = phoneNumber.length;\r\n }\r\n window.setTimeout(forceCarrotFunc, 10);\r\n }\r\n if (!c) {\r\n return\r\n }\r\n if ((userInfo.phoneNumber !== phoneNumber) && (userInfo.country.iso2 !== c.iso2) && isMounted()) {\r\n // console.log(\"handleChangeNumber formattedPhone\", c);\r\n // console.log(\"userInfo.phoneNumber\", userInfo.phoneNumber);\r\n // console.log(\"phoneNumber\", phoneNumber);\r\n changeUserInfo({country: c});\r\n }\r\n if (userInfoErrors[property] || blurred || !focused || !wasChanged) {\r\n const errors = getValidationErrors(`+${c.dialCode} ${b}`, c.iso2.toUpperCase());\r\n if (!errors.length || blurred) {\r\n changeUserInfoErrors({\r\n [property]: errors\r\n })\r\n }\r\n }\r\n if (!focused || !wasChanged) { // autofill\r\n const replacedValue = replaceDialCode(c.dialCode, b);\r\n if (replacedValue !== b) {\r\n b = replacedValue;\r\n const fullNumber = `+${c.dialCode} ${b}`;\r\n inputRef.current.setNumber(fullNumber);\r\n }\r\n changeUserInfo({\r\n [property]: b\r\n });\r\n console.log(\"change number when it is not focused\", b, phoneNumber);\r\n }\r\n if (!wasChanged) {\r\n setWasChanged(true);\r\n }\r\n };\r\n\r\n const handleChangeFlag = (currentNumber, selectedCountryData) => {\r\n /*const matches = currentNumber.match(/(\\+\\d{1,4}\\s)/gi);\r\n currentNumber = currentNumber.replace(/\\+\\d{1,4}\\s/gi, '');\r\n\r\n const numberSplitted = currentNumber.split(\"+\"+selectedCountryData.dialCode);\r\n const number = numberSplitted[numberSplitted.length - 1] || \"\";\r\n\r\n currentNumber = (matches && matches.length > 1)\r\n ? `${matches[1]}${currentNumber}`\r\n : `+${selectedCountryData.dialCode} ${number}`;*/\r\n\r\n if (!isActive) {\r\n return // return here because when user came from log in - it was updating userinfo country and was setting empty currentNumber\r\n }\r\n\r\n let newUserInfo = {};\r\n if (currentNumber !== userInfo.phoneNumber) {\r\n newUserInfo.phoneNumber = currentNumber\r\n }\r\n if (selectedCountryData && selectedCountryData.iso2) {\r\n newUserInfo.country = selectedCountryData\r\n }\r\n if (Object.keys(newUserInfo).length) {\r\n // console.log(\"handleChangeFlag!!\", newUserInfo);\r\n changeUserInfo(newUserInfo);\r\n }\r\n if ((userInfoErrors[property] || blurred) && (selectedCountryData && selectedCountryData.iso2)) {\r\n const fullNumber = `+${selectedCountryData.dialCode} ${currentNumber}`;\r\n const errors = getValidationErrors(fullNumber, selectedCountryData.iso2.toUpperCase());\r\n if (!errors.length) {\r\n changeUserInfoErrors({\r\n [property]: errors\r\n })\r\n }\r\n }\r\n };\r\n\r\n const errorsExist = Array.isArray(userInfoErrors[property]) && userInfoErrors[property].length;\r\n\r\n const renderScreenKeyboard = () => {\r\n if (!document.kvConfig.osk) {\r\n return null\r\n }\r\n const keyboardNumberClick = (value) => {\r\n // console.log(\"keyboardNumberChange\", value);\r\n // console.log(\"inputRef\", inputRef);\r\n if (value && value.includes(\".\")) { // phone number can't include dots\r\n return\r\n }\r\n changeUserInfo({ // 1) set redux value\r\n [property]: value\r\n });\r\n // handleChangeNumber(true, value, userInfo.country, value, true); // 2) change flag? not sure if we need this on number click\r\n if (inputRef && inputRef.current) { // 3) set input value by passing fake event\r\n inputRef.current.handleInputChange({\r\n target: {\r\n selectionStart: value.length,\r\n target: inputRef.current.tel,\r\n value,\r\n }\r\n });\r\n }\r\n }\r\n return userInfo.phoneNumber}\r\n setValue={keyboardNumberClick}\r\n onClose={(v) => {\r\n if (!blurred) {\r\n handleInputBlur(true, v)\r\n }\r\n }}\r\n left=\"100%\"\r\n top=\"-57px\"\r\n type=\"numeric\"/>\r\n }\r\n\r\n const IntlInputComponent = (\r\n \r\n )\r\n\r\n if (IS_QKB_UI) {\r\n return (\r\n
    \r\n {IntlInputComponent}\r\n {fabricatorData.isCaesarStone || (isUserPopup && !errorsExist) ? null : *}\r\n \r\n {renderScreenKeyboard()}\r\n
    \r\n )\r\n }\r\n\r\n return (\r\n
    \r\n
    \r\n {IntlInputComponent}\r\n
    \r\n \r\n *\r\n \r\n
    \r\n
    \r\n {errorsExist ? (\r\n

    \r\n \r\n

    \r\n ) : null}\r\n {renderScreenKeyboard()}\r\n
    \r\n )\r\n};\r\n\r\nLookUserPhoneInput.propTypes = {\r\n property: PropTypes.string.isRequired,\r\n inputsValidated: PropTypes.bool.isRequired,\r\n shrink: PropTypes.bool,\r\n restartPhoneInput: PropTypes.func,\r\n placeholder: PropTypes.string,\r\n isUserPopup: PropTypes.bool,\r\n isActive: PropTypes.bool,\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const {userInfo, userInfoErrors} = store.userState;\r\n return {\r\n userInfo,\r\n userInfoErrors,\r\n fabricatorData: store.fabricatorState\r\n // assignQuotePopupSearchText: store.assignQuoteState.assignQuotePopupSearchText\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n changeUserInfo,\r\n changeUserInfoErrors\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(LookUserPhoneInput)\r\n)\r\n","import React, {Fragment} from 'react';\r\n\r\nimport {DISCOUNT_MAIN_TYPES, DISCOUNT_MODES, DISCOUNT_TYPES} from \"./discounstInterface\";\r\nimport {\r\n getPriceWithCurrency,\r\n getQuotePriceWithDiscounts, getQuotePriceWithTaxes,\r\n getTotalPrice,\r\n sortByOrder,\r\n toFixedPrice\r\n} from \"../../misc/helpers\";\r\nimport {\r\n getCustomDepositAmount,\r\n getDiscountsForSection,\r\n getSubTotalPrice,\r\n shouldDisplayDiscount\r\n} from \"./discountFunctions\";\r\nimport TextInput from \"../ui/textInput\";\r\n\r\nexport default class DiscountCommon extends React.Component {\r\n\r\n handleDiscountSelectClick = () => {\r\n if (this.isDiscountDisabled()) {\r\n return false\r\n }\r\n const currentDiscount = this.props.discount;\r\n currentDiscount.selected = !currentDiscount.selected;\r\n this.updateDiscount(currentDiscount);\r\n };\r\n\r\n setDiscountProperty = (property, value) => {\r\n const currentDiscount = this.props.discount;\r\n currentDiscount[property] = value;\r\n this.updateDiscount(currentDiscount);\r\n };\r\n\r\n updateDiscount = (currentDiscount) => {\r\n this.props.setDiscountSections(this.props.discountSections.map((discountSection) => {\r\n if (discountSection.order === this.props.discountSection.order) {\r\n discountSection.discounts.map(discount => {\r\n if (currentDiscount.order === discount.order) {\r\n return currentDiscount\r\n }\r\n return discount\r\n });\r\n if (currentDiscount.selected && currentDiscount.mode === DISCOUNT_MODES.or && !currentDiscount.isSubTotal) {\r\n discountSection.discounts = discountSection.discounts.map(discount => {\r\n if ((currentDiscount.order !== discount.order) && (discount.mode === DISCOUNT_MODES.or) && !discount.isSubTotal) {\r\n discount.selected = false\r\n }\r\n return discount\r\n });\r\n }\r\n }\r\n return discountSection\r\n }));\r\n };\r\n\r\n getGrandTotal = (withoutDiscount = null) => {\r\n const totalPrice = getTotalPrice(null, false);\r\n return getQuotePriceWithDiscounts(totalPrice, withoutDiscount ? [withoutDiscount] : []);\r\n }\r\n\r\n isDiscountDisabled = (forDiscount = this.props.discount) => {\r\n const {discountSection, customAddedDiscounts} = this.props;\r\n const discount = forDiscount;\r\n if (discount.selected) {\r\n return false\r\n }\r\n const grandTotal = this.getGrandTotal();\r\n const discountAmount = discount.type === DISCOUNT_TYPES.price ? discount.amount : grandTotal * discount.amount / 100;\r\n let disabled = (grandTotal - discountAmount) < 0;\r\n if (disabled && discount.mode === DISCOUNT_MODES.or) {\r\n const allDiscounts = sortByOrder(getDiscountsForSection(discountSection, customAddedDiscounts));\r\n if (allDiscounts.some(currentDiscount => {\r\n return (currentDiscount.order !== discount.order) // take othere discounts from this section\r\n && (currentDiscount.mode === DISCOUNT_MODES.or) // with OR mode\r\n && shouldDisplayDiscount(currentDiscount) // already selected\r\n && (this.getGrandTotal(currentDiscount) - discountAmount) > 0\r\n // price without this discount minus current discount amount still more than 0\r\n })) {\r\n disabled = false\r\n }\r\n }\r\n return disabled\r\n }\r\n\r\n getDiscountPercentageAmount = () => {\r\n const grandTotal = getSubTotalPrice(this.props.discountSections, this.props.discountSection, this.props.discount, true, this.props.customAddedDiscounts);\r\n const priceTaken = grandTotal * this.props.discount.amount / 100 // for ex. 25% from 2700 = 625\r\n return toFixedPrice(Math.trunc(priceTaken * 100) / 100);\r\n };\r\n\r\n setAmountValue = (value) => {\r\n // console.log(\"value\", value);\r\n if ((this.props.discount.discountType === DISCOUNT_MAIN_TYPES.deposit) && (this.props.discount.type === DISCOUNT_TYPES.percent)) {\r\n this.setDiscountProperty(\"type\", DISCOUNT_TYPES.price);\r\n }\r\n this.setDiscountProperty(\"amount\", +value)\r\n };\r\n\r\n getMaxDiscountValue = () => {\r\n return (this.props.discount.type === DISCOUNT_TYPES.percent) ? 100 : this.getGrandTotal(this.props.discount)\r\n }\r\n\r\n getDiscountAmount = () => {\r\n const {discount, fabricatorSettings} = this.props;\r\n return discount.type === DISCOUNT_TYPES.price\r\n ? \"-\" + getPriceWithCurrency(fabricatorSettings, discount.amount)\r\n : \"-\" + getPriceWithCurrency(fabricatorSettings, this.getDiscountPercentageAmount())\r\n }\r\n\r\n getInputValue = () => {\r\n const {discount, fabricatorSettings, discountSections} = this.props;\r\n if (!discount.amount) {\r\n return \"0\"\r\n }\r\n if (discount.discountType === DISCOUNT_MAIN_TYPES.deposit) {\r\n if (discount.type === DISCOUNT_TYPES.price) {\r\n return getPriceWithCurrency(fabricatorSettings, toFixedPrice(discount.amount))\r\n }\r\n const totalPrice = getTotalPrice();\r\n const grandTotal = getQuotePriceWithTaxes(totalPrice);\r\n const customDepositAmount = getCustomDepositAmount(discountSections, grandTotal);\r\n return getPriceWithCurrency(fabricatorSettings, customDepositAmount);\r\n }\r\n // return \"-\" + (discount.type === DISCOUNT_TYPES.price) // we can't have percentages free fill discounts\r\n // ? fabricatorSettings.currencySign + discount.amount\r\n // : discount.amount + \"%\"\r\n return \"-\" + getPriceWithCurrency(fabricatorSettings, toFixedPrice(discount.amount))\r\n }\r\n\r\n renderAmountInput = () => {\r\n const {discount, fabricatorData} = this.props;\r\n const isDiscount = discount.discountType === DISCOUNT_MAIN_TYPES.deposit;\r\n return discount.selected || isDiscount ? (\r\n \r\n {/**/}\r\n {/* -{discount.type === DISCOUNT_TYPES.percent ? \"%\" : fabricatorData.settings.currencySign}*/}\r\n {/**/}\r\n \r\n {/*{discount.type === DISCOUNT_TYPES.percent*/}\r\n {/* ? {this.getDiscountAmount()}*/}\r\n {/* : null}*/}\r\n \r\n ) : null\r\n }\r\n\r\n}\r\n","export const getFeatureUnit = (cartFeature, fabricatorData, printContext, locale, quantity) => {\r\n const dbFeature = cartFeature.dbFeature;\r\n if ((fabricatorData.isLowes || fabricatorData.isCaesarStone) && locale === \"fr-FR\" && printContext.messages[\"transDoc.units_FR.\" + dbFeature.sharedFeatureName]) {\r\n if ((printContext.messages[\"transDoc.units_FR.\" + dbFeature.sharedFeatureName] === \"pieds carrés\") && dbFeature.unit === \"Each\") {\r\n return \"unité\"\r\n }\r\n return printContext.messages[\"transDoc.units_FR.\" + dbFeature.sharedFeatureName]\r\n }\r\n if (dbFeature.unit) {\r\n let lowercasedUnit = dbFeature.unit.toLowerCase();\r\n return lowercasedUnit === \"each\" || lowercasedUnit === \"unit\"\r\n ? quantity === 1\r\n ? printContext.messages[\"quotingTool.featureInfo.defaultQuantity\"]\r\n : printContext.messages[\"quotingTool.featureInfo.defaultQuantityMultiple\"]\r\n : dbFeature.unit\r\n }\r\n if (cartFeature.isStoneFeature) {\r\n return printContext.messages[\"shoppingCart.fetureInCartDefaultQuantitySQFT\"]\r\n }\r\n return printContext.messages[\"shoppingCart.fetureInCartDefaultQuantity\"]\r\n};\r\n\r\nexport const getCartItemName = (cartFeature, fabricatorData, printContext, locale) => {\r\n const dbFeature = cartFeature.dbFeature;\r\n if (fabricatorData.isLowes || fabricatorData.isCaesarStone) {\r\n if (locale === \"fr-FR\" && printContext.messages[\"transDoc.customDisplayName_FR.\"+ dbFeature.sharedFeatureName]) {\r\n return printContext.messages[\"transDoc.customDisplayName_FR.\"+ dbFeature.sharedFeatureName]\r\n } else if (locale === \"pl-PL\" && printContext.messages[\"transDoc.customTranslateName_PL.\"+ dbFeature.sharedFeatureName]) {\r\n return printContext.messages[\"transDoc.customTranslateName_PL.\"+ dbFeature.sharedFeatureName]\r\n }\r\n }\r\n\r\n if ((dbFeature.sharedFeatureName === \"additionalCartItem.minimumCharge\")) {\r\n if (fabricatorData.isCaesarStone) {\r\n return `${printContext.messages[dbFeature.sharedFeatureName]} (${cartFeature.fromFeatureName})`\r\n }\r\n return printContext.messages[dbFeature.sharedFeatureName]\r\n }\r\n\r\n if (!cartFeature.getFeatureName) {\r\n return cartFeature._customDisplayName || cartFeature.customDisplayName || \"\"\r\n }\r\n\r\n return cartFeature.getFeatureName()\r\n};\r\n","import {getFilterGroupValue, getFilterGroupValues} from \"../../../misc/utils\";\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\nimport {getTotalPrice, toFixedFeatureCost, toFixedPrice} from \"../../../misc/helpers\";\r\nimport {isProd} from \"../../../misc/fabricatorHardcode\";\r\n\r\nexport const SIMILAR_FILTER_GROUP_NAME = \"Collection\";\r\n\r\n/**\r\n * @param cartItem {object}\r\n * @param filterGroups {array}\r\n * @returns {array} // [featureCollectionInterface] or null\r\n */\r\nexport const getFeaturesCollectionsList = (cartItem, filterGroups) => {\r\n\r\n if (!cartItem || !cartItem.cartFeature || !cartItem.partId.includes(\"countertop\") || isProd() || !filterGroups.length) {\r\n return null\r\n }\r\n\r\n const parent = cartItem.cartFeature.getParent ? cartItem.cartFeature.getParent() : null;\r\n if (!parent) {\r\n return null\r\n }\r\n\r\n const filterGroup = filterGroups.find(fGroup => fGroup.name === SIMILAR_FILTER_GROUP_NAME);\r\n if (!filterGroup) {\r\n return null\r\n }\r\n\r\n const cartFeatureFilters = getFilterGroupValues(cartItem.cartFeature, filterGroup) || [];\r\n\r\n let featuresCollectionsList = [];\r\n\r\n const layout = getCurrentLayout();\r\n const navFeatures = layout.designNavigationItems({part: parent}, {}, \"\", false, true);\r\n for (let i = 0; i < navFeatures.length; i++) {\r\n const navFeature = navFeatures[i];\r\n const featureFilters = getFilterGroupValues(navFeature.part, filterGroup);\r\n if (Array.isArray(featureFilters)) {\r\n featureFilters.forEach(filterValueId => {\r\n if (!cartFeatureFilters.some(cartFeatureFilter => cartFeatureFilter === filterValueId)) {\r\n let collectionObject = featuresCollectionsList.find(colObject => colObject.id === filterValueId);\r\n if (collectionObject) {\r\n collectionObject.features.push(navFeature.part)\r\n } else {\r\n collectionObject = {id: filterValueId, features: [navFeature.part]};\r\n featuresCollectionsList.push(collectionObject);\r\n }\r\n }\r\n })\r\n }\r\n }\r\n\r\n featuresCollectionsList = featuresCollectionsList.sort((a, b) => a.id - b.id); // sort by collection id\r\n console.log(\"featuresCollectionsList\", featuresCollectionsList);\r\n\r\n return featuresCollectionsList\r\n\r\n}\r\n\r\n/**\r\n * @param cartItem {cartItemInterface}\r\n * @param addedCountertops {[cartItemInterface]}\r\n * @param featureCollection {object}\r\n * @param totalCountertopsQuantity {number}\r\n * @param quoteIndex {number}\r\n * @param filterGroups {array}\r\n * @returns {similarItemObjectInterface} // or null\r\n */\r\nexport const getSimilarItemInfoObject = (\r\n cartItem,\r\n addedCountertops,\r\n featureCollection,\r\n totalCountertopsQuantity,\r\n quoteIndex,\r\n filterGroups,\r\n) => {\r\n let feature = null;\r\n const fromCartItemName = cartItem.cartFeature.getSplittedFeatureName();\r\n // console.log(\"fromCartItemName\", fromCartItemName);\r\n if (fromCartItemName) {\r\n // if (\r\n // (fromCartItemName.includes(\"2cm\") && addedCountertops.some(cItem => cItem.cartFeature && cItem.cartFeature.getSplittedFeatureName().includes(\"3cm\")))\r\n // || (fromCartItemName.includes(\"3cm\") && addedCountertops.some(cItem => cItem.cartFeature && cItem.cartFeature.getSplittedFeatureName().includes(\"2cm\")))\r\n // ) {\r\n // feature = featureCollection.features.find(currentFeature => [\"2cm\", \"3cm\"].some(inName => currentFeature.getSplittedFeatureName().includes(inName)))\r\n // } else\r\n if (fromCartItemName.includes(\"2cm\")) {\r\n feature = featureCollection.features.find(currentFeature => currentFeature.getSplittedFeatureName().includes(\"2cm\"))\r\n } else if (fromCartItemName.includes(\"3cm\")) {\r\n feature = featureCollection.features.find(currentFeature => currentFeature.getSplittedFeatureName().includes(\"3cm\"))\r\n }\r\n }\r\n if (!feature) {\r\n feature = featureCollection.features[0]; // take first collection feature\r\n }\r\n\r\n const totalPrice = +toFixedFeatureCost(feature, totalCountertopsQuantity, \"\");\r\n\r\n const countertopTotalPrice = +toFixedFeatureCost(cartItem.cartFeature, totalCountertopsQuantity, \"\");\r\n\r\n let subTotalPrice = getTotalPrice(quoteIndex, false).materialPrice;\r\n subTotalPrice = toFixedPrice(subTotalPrice - countertopTotalPrice + totalPrice);\r\n\r\n const filterGroup = filterGroups.find(fGroup => fGroup.name === SIMILAR_FILTER_GROUP_NAME);\r\n const filterGroupValue = getFilterGroupValue(featureCollection.id, filterGroup);\r\n if (!filterGroupValue || !filterGroupValue.displayText) {\r\n return null\r\n }\r\n const filterValueName = filterGroupValue.displayText.replace(\" \" + SIMILAR_FILTER_GROUP_NAME, \"\");\r\n\r\n return {\r\n filterValueName,\r\n feature,\r\n subTotalPrice,\r\n }\r\n}\r\n","import vert from '!raw-loader!./vertex.glsl';\r\nimport frag from '!raw-loader!./fragment.glsl';\r\n\r\nfunction loadTexture(gl, oc) {\r\n const texture = gl.createTexture();\r\n gl.bindTexture(gl.TEXTURE_2D, texture);\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\r\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, oc); // This is the important line!\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\r\n gl.bindTexture(gl.TEXTURE_2D, null);\r\n return texture;\r\n}\r\n\r\nfunction setArrays(gl, prog) {\r\n let vertex_buffer = gl.createBuffer();\r\n const vertices = [-1.0, -1.0, 1.0, -1.0, -1.0, 1.0,\r\n 1.0, 1.0, 1.0, -1.0, -1.0, 1.0,\r\n ];\r\n gl.bindBuffer(gl.ARRAY_BUFFER, vertex_buffer);\r\n gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(vertices), gl.STATIC_DRAW);\r\n let coord = gl.getAttribLocation(prog, \"coords\");\r\n gl.vertexAttribPointer(coord, 2, gl.FLOAT, false, 0, 0);\r\n gl.enableVertexAttribArray(coord);\r\n return [coord, vertex_buffer];\r\n}\r\n\r\nfunction prepareWebGL(gl, width, height) {\r\n let vertSh = gl.createShader(gl.VERTEX_SHADER);\r\n gl.shaderSource(vertSh, vert);\r\n gl.compileShader(vertSh);\r\n let fragSh = gl.createShader(gl.FRAGMENT_SHADER);\r\n gl.shaderSource(fragSh, frag);\r\n gl.compileShader(fragSh);\r\n let prog = gl.createProgram();\r\n gl.attachShader(prog, vertSh);\r\n gl.attachShader(prog, fragSh);\r\n gl.linkProgram(prog);\r\n gl.useProgram(prog);\r\n gl.viewport(0,0, width, height);\r\n return prog;\r\n}\r\n\r\nlet webglCanvas = document.createElement(\"canvas\");\r\n\r\nconst enhanceCanvas = (canvasElement, useNewCanvas = false) => {\r\n\r\n let wgl = useNewCanvas ? document.createElement('canvas') : webglCanvas;\r\n\r\n if (!wgl.gl || useNewCanvas) {\r\n wgl.width = canvasElement.width;\r\n wgl.height = canvasElement.height;\r\n wgl.gl = wgl.getContext(\"webgl\");\r\n wgl.prog = prepareWebGL(wgl.gl, canvasElement.width, canvasElement.height);\r\n setArrays(wgl.gl, wgl.prog);\r\n const uSampler = wgl.gl.getUniformLocation(wgl.prog, 'uSampler');\r\n wgl.gl.uniform1i(uSampler, 0);\r\n }\r\n\r\n let gl = wgl.gl;\r\n const texture = loadTexture(gl, canvasElement);\r\n let ctx = canvasElement.getContext('2d');\r\n\r\n // render\r\n gl.activeTexture(gl.TEXTURE0);\r\n gl.bindTexture(gl.TEXTURE_2D, texture);\r\n gl.clearColor(0.0, 0.0, 0.0, 1.0);\r\n gl.clear(gl.COLOR_BUFFER_BIT);\r\n gl.drawArrays(gl.TRIANGLES, 0, 6);\r\n ctx.drawImage(wgl, 0, 0, wgl.width, wgl.height, 0, 0, canvasElement.width, canvasElement.height);\r\n // render end\r\n\r\n}\r\n\r\nexport default enhanceCanvas\r\n","/**\r\n * Moves an element to a new position with a specified speed and returns a Promise that resolves when the animation is complete.\r\n * @param {HTMLElement} element - The element to move.\r\n * @param {number} newX - The new X-coordinate of the element.\r\n * @param {number} newY - The new Y-coordinate of the element.\r\n * @param {number} speed - The speed in pixels per second.\r\n * @returns {Promise} A Promise that resolves when the animation is complete.\r\n */\r\nimport {distanceToInches, parseImperialFractionToDecimal} from \"./sqftHelper\";\r\nimport EventManager from \"../components/canvas/store/sqftEventManager\";\r\nimport sqftConfig from \"../components/canvas/store/sqftConfig\";\r\nimport {MEASURE_UNITS} from \"../constants\";\r\n\r\nexport const moveElement = (element, newX, newY, speed) => {\r\n return new Promise(resolve => {\r\n // Get the current coordinates of the element\r\n const oldX = element.offsetLeft;\r\n const oldY = element.offsetTop;\r\n\r\n // Calculate the distance between the old and new coordinates\r\n const distanceX = newX - oldX;\r\n const distanceY = newY - oldY;\r\n\r\n // Calculate the duration of the animation based on the speed\r\n const duration = Math.sqrt(distanceX ** 2 + distanceY ** 2) / speed;\r\n\r\n // Set the element to the initial position\r\n element.style.position = \"absolute\";\r\n element.style.left = oldX + \"px\";\r\n element.style.top = oldY + \"px\";\r\n\r\n // Animate the element to the new position\r\n const startTime = performance.now();\r\n function animate(currentTime) {\r\n const elapsedTime = currentTime - startTime;\r\n const progress = Math.min(elapsedTime / duration, 1);\r\n const x = oldX + distanceX * progress;\r\n const y = oldY + distanceY * progress;\r\n element.style.left = x + \"px\";\r\n element.style.top = y + \"px\";\r\n if (progress < 1) {\r\n requestAnimationFrame(animate);\r\n } else {\r\n resolve(); // Animation complete, resolve the Promise\r\n }\r\n }\r\n requestAnimationFrame(animate);\r\n });\r\n}\r\n\r\nexport const delay = (time) => {\r\n return new Promise(resolve => setTimeout(resolve, time));\r\n}\r\n\r\nexport function createAdjustableInput({\r\n position = { x: 0, y: 0 },\r\n initialValue = \"\",\r\n min = 1,\r\n max = 1000,\r\n orientation = \"horizontal\",\r\n onChange = () => {},\r\n onClose = () => {},\r\n step = 1,\r\n longPressInterval = 50,\r\n longPressDelay = 200,\r\n }) {\r\n const objectName = { name: 'lineInput' }; // Unique identifier for EventManager\r\n let isClosed = false; // Flag to prevent duplicate close calls\r\n\r\n const inputWrapper = document.createElement(\"div\"); // Wrapper for input and buttons\r\n inputWrapper.className = \"line-input\";\r\n inputWrapper.style.position = \"absolute\";\r\n inputWrapper.style.left = `${position.x}px`;\r\n inputWrapper.style.top = `${position.y}px`;\r\n\r\n // Set orientation class\r\n if (orientation === \"horizontal\") {\r\n inputWrapper.classList.add(\"line-input-horizontal\");\r\n } else if (orientation === \"vertical\") {\r\n inputWrapper.classList.add(\"line-input-vertical\");\r\n }\r\n\r\n // Create input field\r\n const input = document.createElement(\"input\");\r\n input.type = \"text\";\r\n input.className = \"line-input-field\";\r\n input.setAttribute(\"min\", min.toString());\r\n input.setAttribute(\"max\", max.toString());\r\n input.value = initialValue;\r\n\r\n // Adjust input value within [min, max] bounds and trigger onChange\r\n const adjustInputValue = (step) => {\r\n let currentValue = parseImperialFractionToDecimal(input.value);\r\n currentValue += step;\r\n currentValue = Math.max(min, Math.min(currentValue, max)); // Ensure within bounds\r\n input.value = currentValue;\r\n onChange(currentValue);\r\n input.dispatchEvent(new Event(\"change\")); // Trigger change event for UI updates\r\n\r\n if (sqftConfig.measureUnit === MEASURE_UNITS.Imperial) {\r\n input.value = distanceToInches(currentValue).replace(\"\\\"\", \"\");\r\n } else {\r\n input.value = currentValue;\r\n }\r\n };\r\n\r\n let longPressTimeout;\r\n let delayTimeout;\r\n const startLongPress = (step) => {\r\n adjustInputValue(step);\r\n delayTimeout = setTimeout(() => {\r\n longPressTimeout = setInterval(() => adjustInputValue(step), longPressInterval);\r\n }, longPressDelay);\r\n };\r\n const stopLongPress = () => {\r\n clearInterval(longPressTimeout);\r\n clearTimeout(delayTimeout);\r\n input.focus();\r\n };\r\n\r\n // Create increment button with long press functionality\r\n const incrementButton = document.createElement(\"button\");\r\n incrementButton.className = \"increment-button\";\r\n incrementButton.textContent = \"▲\";\r\n incrementButton.onmousedown = () => startLongPress(step);\r\n incrementButton.onmouseup = stopLongPress;\r\n incrementButton.onmouseleave = stopLongPress;\r\n\r\n // Create decrement button with long press functionality\r\n const decrementButton = document.createElement(\"button\");\r\n decrementButton.className = \"decrement-button\";\r\n decrementButton.textContent = \"▼\";\r\n decrementButton.onmousedown = () => startLongPress(-step);\r\n decrementButton.onmouseup = stopLongPress;\r\n decrementButton.onmouseleave = stopLongPress;\r\n\r\n // Append elements to wrapper\r\n inputWrapper.appendChild(input);\r\n inputWrapper.appendChild(incrementButton);\r\n inputWrapper.appendChild(decrementButton);\r\n\r\n // Use onchange instead of input for final validation after user finishes typing\r\n input.onchange = (event) => {\r\n let value = parseImperialFractionToDecimal(event.target.value);\r\n value = Math.max(min, Math.min(value, max)); // Ensure within bounds\r\n input.value = value;\r\n onChange(value);\r\n };\r\n\r\n // Close input when pressing Enter or if blurred outside of increment/decrement buttons\r\n const closeInput = () => {\r\n if (isClosed) return; // Prevent duplicate calls\r\n isClosed = true;\r\n\r\n onClose();\r\n inputWrapper.remove();\r\n EventManager.removeEvent(objectName);\r\n document.removeEventListener(\"mousedown\", handleOutsideClick);\r\n };\r\n\r\n input.addEventListener(\"keydown\", (event) => {\r\n if (event.key === \"Enter\") {\r\n input.blur(); // Explicitly trigger blur to ensure onchange fires\r\n closeInput();\r\n }\r\n });\r\n\r\n const handleOutsideClick = (event) => {\r\n if (!inputWrapper.contains(event.target)) {\r\n closeInput();\r\n }\r\n };\r\n\r\n // Add event to close input on MOUSE_DOWN outside, unless the input is focused\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_DOWN,\r\n closeInput,\r\n objectName,\r\n EventManager.priorities.OVERALL\r\n );\r\n document.addEventListener(\"mousedown\", handleOutsideClick);\r\n\r\n return inputWrapper;\r\n}\r\n","import {SHAPE_PART_ID, SHAPE_TYPE} from \"../constants\";\r\nimport sqftShapeManager from \"../components/canvas/store/sqftShapeManager\";\r\nimport Polygon from \"../components/canvas/core/shapes/layouts/polygon\";\r\nimport {getAreaByShoelaceFormula} from \"./sqftHelper\";\r\nimport Wall from \"../components/canvas/core/shapes/wall\";\r\nimport workspaceControllers from \"../components/canvas/store/workspaceControllers\";\r\n\r\nexport const enableFreeDrawMode = () => {\r\n\r\n}\r\n\r\nexport const disableFreeDrawMode = () => {\r\n\r\n}\r\n\r\n/**\r\n * @param pointCords array\r\n * @param partId string\r\n * @param isClonePointRequired boolean\r\n * @param historyPosition\r\n * @param canPointsBeMoved\r\n * @param fromLayout\r\n * @param shapeParams\r\n * @param shapeCreationParams\r\n */\r\nexport const createShapeFromPoints = (\r\n pointCords,\r\n partId = SHAPE_PART_ID.seamPiece,\r\n isClonePointRequired = false,\r\n historyPosition = null,\r\n canPointsBeMoved = false,\r\n fromLayout = null,\r\n shapeParams = {},\r\n shapeCreationParams = {}\r\n) => {\r\n let polygonLines = new Polygon(pointCords, isClonePointRequired, canPointsBeMoved);\r\n let polygonArea = getAreaByShoelaceFormula(polygonLines);\r\n if (polygonArea < 0) {\r\n //create counterclockwise shape\r\n polygonLines = new Polygon(pointCords.reverse(), isClonePointRequired, canPointsBeMoved);\r\n polygonArea = getAreaByShoelaceFormula(polygonLines);\r\n }\r\n\r\n if (shapeCreationParams.minimumShapeArea && polygonArea < shapeCreationParams.minimumShapeArea) {\r\n console.log(\"polygon area is too small\");\r\n console.log(\"polygon area\", polygonArea);\r\n console.log(\"minimum polygon Area\", shapeCreationParams.minimumShapeArea);\r\n return null\r\n }\r\n if (shapeCreationParams.maximumShapeArea && polygonArea > shapeCreationParams.maximumShapeArea) {\r\n console.log(\"polygon area is too big\");\r\n console.log(\"polygon area\", polygonArea);\r\n console.log(\"maximum shape area\", shapeCreationParams.maximumShapeArea);\r\n return null\r\n }\r\n if (shapeCreationParams.maximumLineDistance) {\r\n for (const polygonLine of polygonLines) {\r\n if (polygonLine.getLineDistance() > shapeCreationParams.maximumLineDistance) {\r\n console.log(\"polygon line is too big\");\r\n console.log(\"polygon line distance\", polygonLine.getLineDistance());\r\n console.log(\"maximum line Distance\", shapeCreationParams.maximumLineDistance);\r\n return null\r\n }\r\n }\r\n }\r\n\r\n return sqftShapeManager.addShape(\r\n polygonLines, SHAPE_TYPE.polygon, historyPosition, partId, fromLayout, shapeParams\r\n );\r\n};\r\n\r\n/**\r\n *\r\n * @param points {array}\r\n * @param centerPoint {object}\r\n * @param lockedAngleStep\r\n */\r\nexport const createWallFromPointsV2 = (points, centerPoint, lockedAngleStep) => {\r\n const wall = new Wall(points, centerPoint, lockedAngleStep);\r\n workspaceControllers.walls.addResource(wall);\r\n return wall\r\n}\r\n\r\n/**\r\n *\r\n * @param points array\r\n */\r\nexport const createShapeFromCorePoints = (points) => {\r\n void points;\r\n}\r\n\r\n/**\r\n *\r\n * @param points array\r\n */\r\nexport const createPolygonFromCorePoints = (points) => {\r\n void points;\r\n //return new SQFTShapeFigure(points);\r\n}\r\n","import config from \"../../../../store/sqftConfig\";\r\nimport {isIE} from \"../../../../../../helpers/sqftHelper\";\r\n\r\nexport default class DrawImage {\r\n\r\n static renderImage = (svgImageId, ctx, x, y, width, height, isCentered = true, isScale = true) => {\r\n let scale = config.scale;\r\n let svg = document.getElementById(svgImageId);\r\n if (!svg) {\r\n console.error(\"svg with id not found\", svgImageId);\r\n return\r\n }\r\n let img = new Image(),\r\n xml = new XMLSerializer().serializeToString(svg), // get svg data\r\n svg64 = btoa(xml); // make it base64\r\n let posX = x;\r\n let posY = y;\r\n let svgImageDataURI = \"\";\r\n\r\n img.src = 'data:image/svg+xml;base64,' + svg64; // set it as the source of the img element\r\n if (isScale) {\r\n width = width / config.scale * config.defaultScale;\r\n height = height / config.scale * config.defaultScale;\r\n }\r\n if (isCentered) {\r\n posX -= width / 2 ;\r\n posY -= height / 2;\r\n }\r\n\r\n if (isIE()) {\r\n svgImageDataURI = atob(this.getSrc(img).replace(/data:image\\/svg\\+xml;base64,/, ''));\r\n }\r\n if (!isIE()) {\r\n ctx.drawImage(img, posX, posY , width * scale, height * scale);\r\n } else if(svgImageDataURI) {\r\n ctx.drawSvg(svgImageDataURI, posX, posY + 1, 0, 0);\r\n }\r\n };\r\n\r\n // static isIE() {\r\n // return(/Trident/i).test(window.navigator.appVersion);\r\n // }\r\n\r\n static getSrc(htmlImg) {\r\n if(htmlImg) {\r\n let src = htmlImg.getAttribute('src');\r\n if(src) {\r\n return src;\r\n }\r\n src = htmlImg.getAttribute(\"style\");\r\n if(src) {\r\n return src.replace(/background-image: url\\(\"\\/api\\/SqFtCalc\\/GetImage\\?url=/g, \"\").replace(/\"\\);/g, \"\");\r\n }\r\n }\r\n return \"\";\r\n }\r\n}\r\n","import {getClosestPoint, getIntersectCords, getMousePositionOnField} from \"../../../../../../helpers/sqftHelper\";\r\nimport store from \"../../../../../../../../store\";\r\n\r\nexport const getHorizontalLineIntersectionPoints = (mousePos, shape, lines = shape.getLines()) => {\r\n const mousePosOnFiled = getMousePositionOnField(mousePos.x, mousePos.y);\r\n const serverState = store.getState().serverState;\r\n const pos = shape.getPosition();\r\n\r\n const mousePosOnShape = {x: mousePosOnFiled.x - pos.x, y: mousePosOnFiled.y - pos.y};\r\n let verticalLinePoint1 = {x: -serverState.windowWidth, y: Math.round10(mousePosOnShape.y, -1)};\r\n let verticalLinePoint2 = {x: serverState.windowWidth, y: Math.round10(mousePosOnShape.y, -1)};\r\n let [intersectionXPointAndLine1, intersectionXPointAndLine2] = getClosestIntersectionPoints(\r\n lines, verticalLinePoint1, verticalLinePoint2, mousePosOnShape\r\n );\r\n\r\n if (intersectionXPointAndLine1 && intersectionXPointAndLine2) {\r\n intersectionXPointAndLine1.intersectionCords = {x: Math.round10(intersectionXPointAndLine1.intersectionCords.x, -1), y: Math.round10(mousePosOnFiled.y - pos.y, -1)};\r\n intersectionXPointAndLine2.intersectionCords = {x: Math.round10(intersectionXPointAndLine2.intersectionCords.x, -1), y: Math.round10(mousePosOnFiled.y - pos.y, -1)};\r\n\r\n return [intersectionXPointAndLine1, intersectionXPointAndLine2]\r\n }\r\n\r\n return []\r\n}\r\n\r\nexport const getVerticalLineIntersectionPoints = (mousePos, shape, lines = shape.getLines()) => {\r\n const mousePosOnFiled = getMousePositionOnField(mousePos.x, mousePos.y);\r\n const serverState = store.getState().serverState;\r\n const pos = shape.getPosition();\r\n\r\n const mousePosOnShape = {x: mousePosOnFiled.x - pos.x, y: mousePosOnFiled.y - pos.y};\r\n //let verticalLinePoint1 = {x: -serverState.windowWidth, y: mousePosOnShape.y};\r\n //let verticalLinePoint2 = {x: serverState.windowWidth, y: mousePosOnShape.y};\r\n\r\n let verticalLinePoint1 = {x: Math.round10(mousePosOnFiled.x - pos.x, -1), y: -serverState.windowHeight};\r\n let verticalLinePoint2 = {x: Math.round10(mousePosOnFiled.x - pos.x, -1), y: serverState.windowHeight};\r\n // let verticalLinePoint1 = {x: Math.ceil10(mousePosOnFiled.x - pos.x, 2), y: -serverState.windowHeight};\r\n // let verticalLinePoint2 = {x: Math.ceil10(mousePosOnFiled.x - pos.x, 2), y: serverState.windowHeight};\r\n\r\n let [intersectionPointAndLine1, intersectionPointAndLine2] = getClosestIntersectionPoints(\r\n lines, verticalLinePoint1, verticalLinePoint2, mousePosOnShape\r\n );\r\n\r\n if (intersectionPointAndLine1 && intersectionPointAndLine2) {\r\n intersectionPointAndLine1.intersectionCords = {x: Math.round10(mousePosOnFiled.x - pos.x, -1), y: Math.round10(intersectionPointAndLine1.intersectionCords.y, -1)};\r\n intersectionPointAndLine2.intersectionCords = {x: Math.round10(mousePosOnFiled.x - pos.x, -1), y: Math.round10(intersectionPointAndLine2.intersectionCords.y, -1)};\r\n // let intersectionPoint1 = {x: Math.ceil10(mousePosOnFiled.x - pos.x, 2), y: intersectionXPoint1.y};\r\n // let intersectionPoint2 = {x: Math.ceil10(mousePosOnFiled.x - pos.x, 2), y: intersectionXPoint2.y};\r\n\r\n return [intersectionPointAndLine1, intersectionPointAndLine2]\r\n }\r\n\r\n return []\r\n}\r\n\r\n/**\r\n * Return only two closest points from the array of intersectionPointsAndLines\r\n * @param {*} lines\r\n * @param {*} intersectionPoint1\r\n * @param {*} intersectionPoint2\r\n * @param {*} closestPont\r\n * @return {array} [{intersectionPoint, line}]\r\n */\r\nexport const getClosestIntersectionPoints = (lines, intersectionPoint1, intersectionPoint2, closestPont) => {\r\n let intersectionPointsAndLines = getIntersectionPointsAndLines(lines, intersectionPoint1, intersectionPoint2)\r\n if (intersectionPointsAndLines.length >= 1) {\r\n let intersectionPoints = intersectionPointsAndLines.map(pointAndLine => pointAndLine.intersectionCords);\r\n let closestPont1 = getClosestPoint(closestPont, intersectionPoints);\r\n let intersectionPointsAndLinesWithout1Point = intersectionPointsAndLines.filter(pointAndLine => pointAndLine.intersectionCords !== closestPont1);\r\n intersectionPoints = intersectionPointsAndLinesWithout1Point.map(pointAndLine => pointAndLine.intersectionCords);\r\n\r\n let closestPont2 = getClosestPoint(closestPont, intersectionPoints);\r\n\r\n return intersectionPointsAndLines.filter(pointAndLine => {\r\n return pointAndLine.intersectionCords === closestPont1 || pointAndLine.intersectionCords === closestPont2\r\n });\r\n }\r\n\r\n return intersectionPointsAndLines\r\n}\r\n\r\n/**\r\n * Return all intersectionsPointsAndLines between lines and two coords\r\n * @param {*} lines\r\n * @param {*} intersectionPoint1\r\n * @param {*} intersectionPoint2\r\n * @return {array} [{intersectionPoint, line}]\r\n */\r\nexport const getIntersectionPointsAndLines = (lines, intersectionPoint1, intersectionPoint2) => {\r\n let intersectionPoints = [];\r\n\r\n lines.forEach((line) => {\r\n let intersectionCords = getIntersectCords(\r\n Math.round10(line.from.x, -1), Math.round10(line.from.y, -1),\r\n Math.round10(line.to.x, -1), Math.round10(line.to.y, -1),\r\n Math.round10(intersectionPoint1.x, -1), Math.round10(intersectionPoint1.y, -1),\r\n Math.round10(intersectionPoint2.x, -1), Math.round10(intersectionPoint2.y, -1),\r\n false\r\n );\r\n if (intersectionCords) {\r\n intersectionPoints.push({intersectionCords, line});\r\n }\r\n });\r\n\r\n return intersectionPoints\r\n}\r\n\r\n/**\r\n *\r\n * @param circleX {int}\r\n * @param circleY {int}\r\n * @param circleRadius {int}\r\n * @param lineX1 {int}\r\n * @param lineY1 {int}\r\n * @param lineX2 {int}\r\n * @param lineY2 {int}\r\n * @return {null|{y1: *, x1: *, y2: *, x2: *}|{x: *, y: *}}\r\n */\r\nexport const getCircleLineIntersection = (circleX, circleY, circleRadius, lineX1, lineY1, lineX2, lineY2) => {\r\n const dx = lineX2 - lineX1;\r\n const dy = lineY2 - lineY1;\r\n const a = dx * dx + dy * dy;\r\n const b = 2 * (dx * (lineX1 - circleX) + dy * (lineY1 - circleY));\r\n const c = circleX * circleX + circleY * circleY + lineX1 * lineX1 + lineY1 * lineY1\r\n - 2 * (circleX * lineX1 + circleY * lineY1) - circleRadius * circleRadius;\r\n const delta = b * b - 4 * a * c;\r\n\r\n if (delta < 0) {\r\n return null; // no intersection\r\n } else if (delta === 0) {\r\n // the line is tangent to the circle\r\n const t = -b / (2 * a);\r\n const intersectionX = lineX1 + t * dx;\r\n const intersectionY = lineY1 + t * dy;\r\n return { x: intersectionX, y: intersectionY };\r\n } else {\r\n // the line intersects the circle at two points\r\n const t1 = (-b + Math.sqrt(delta)) / (2 * a);\r\n const t2 = (-b - Math.sqrt(delta)) / (2 * a);\r\n const intersection1X = lineX1 + t1 * dx;\r\n const intersection1Y = lineY1 + t1 * dy;\r\n const intersection2X = lineX1 + t2 * dx;\r\n const intersection2Y = lineY1 + t2 * dy;\r\n return { x1: intersection1X, y1: intersection1Y, x2: intersection2X, y2: intersection2Y };\r\n }\r\n}\r\n","import {\r\n getMidPoint,\r\n getPointOnTheLine,\r\n} from \"../../../helpers/sqftHelper\";\r\nimport COLOR_THEMES from \"../../../../../colorThemes\";\r\nimport sqftConfig from \"../store/sqftConfig\";\r\n\r\nexport default class RenderCabinets {\r\n\r\n /**\r\n * @param points {[{x:int, y:int}]}\r\n * @param distance {int}\r\n * @return {[DiagonalPointsForTheSquareInterface]}\r\n */\r\n static getDiagonalPointsForTheSquare = (points, distance) => {\r\n let returnPoints = [];\r\n for (const pointIndex in points) {\r\n if (points.hasOwnProperty(pointIndex)) {\r\n const len = points.length;\r\n const current = points[+pointIndex];\r\n const previous = points[(+pointIndex + len - 1) % len];\r\n const next = points[(+pointIndex + 1) % len];\r\n\r\n const linePoint1 = getPointOnTheLine(current, previous, distance);\r\n const linePoint2 = getPointOnTheLine(current, next, distance);\r\n const diagonalPoint = getMidPoint(linePoint1, linePoint2);\r\n\r\n returnPoints.push({\r\n currentPoint: current,\r\n diagonalPoint: diagonalPoint\r\n });\r\n }\r\n }\r\n\r\n return returnPoints\r\n }\r\n\r\n /**\r\n * @param points {[{x:int, y:int}]}\r\n * @param distance {int}\r\n * @param linePointsIds {[]}\r\n * @return {[DiagonalPointsForTheSquareInterface]}\r\n */\r\n static getDiagonalPointsForTheLine = (points, distance, linePointsIds) => {\r\n const diagonalSquarePoint = RenderCabinets.getDiagonalPointsForTheSquare(points, distance);\r\n\r\n return diagonalSquarePoint.filter(squarePoint => {\r\n return linePointsIds.some(linePointId => {\r\n return linePointId === squarePoint.currentPoint.id\r\n });\r\n })\r\n }\r\n\r\n static renderCrownMolding = (ctx, crownMoldingPoints) => {\r\n //render diagonal lines\r\n ctx.beginPath();\r\n ctx.moveTo(crownMoldingPoints[0].diagonalPoint.x, crownMoldingPoints[0].diagonalPoint.y);\r\n for (const crownMoldingPoint of crownMoldingPoints) {\r\n ctx.lineWidth = 2;\r\n ctx.lineTo(crownMoldingPoint.diagonalPoint.x, crownMoldingPoint.diagonalPoint.y);\r\n }\r\n ctx.lineTo(crownMoldingPoints[0].diagonalPoint.x, crownMoldingPoints[0].diagonalPoint.y);\r\n ctx.stroke();\r\n ctx.closePath();\r\n\r\n //render border\r\n for (const crownMoldingPoint of crownMoldingPoints) {\r\n ctx.beginPath();\r\n ctx.lineWidth = 2;\r\n ctx.moveTo(crownMoldingPoint.currentPoint.x, crownMoldingPoint.currentPoint.y);\r\n ctx.lineTo(crownMoldingPoint.diagonalPoint.x, crownMoldingPoint.diagonalPoint.y);\r\n ctx.closePath();\r\n ctx.stroke();\r\n }\r\n }\r\n\r\n static renderEndCap = (ctx, line) => {\r\n //render thick line\r\n const fromPointField = line.from.getPointField();\r\n const toPointField = line.to.getPointField();\r\n ctx.beginPath();\r\n ctx.moveTo(fromPointField.x, fromPointField.y);\r\n ctx.lineWidth = 6;\r\n ctx.strokeStyle = COLOR_THEMES[sqftConfig.activeTheme].primary_hover;\r\n ctx.lineTo(toPointField.x, toPointField.y);\r\n ctx.stroke();\r\n ctx.closePath();\r\n }\r\n}\r\n","import uuid from \"uuid\";\r\nimport $ from \"jquery\";\r\n\r\nimport COLOR_THEMES from \"../../../store/colorThemes\";\r\nimport Config from \"../../../store/sqftConfig\";\r\nimport {\r\n getAngleBetweenTwoPoints,\r\n getMidPoint, getMinInArray, getParallelPoints,\r\n getPointDistance, getPointField, getSectionPartPoint, isDisabledInPopupWithParents,\r\n measureDistanceToInches, numToLetter,\r\n orientation\r\n} from \"../../../../../helpers/sqftHelper\";\r\nimport point from \"../point\";\r\nimport EventManager from \"../../../store/sqftEventManager\";\r\nimport workspace from \"../../workspace\";\r\n//import TranslatesProvider from \"../../../../../translatesProvider\";\r\nimport MiteredSegment from \"../shapeParts/mitered/miteredSegment\";\r\nimport NumberText from \"../../workspace/text/numberText\";\r\nimport DrawImage from \"../../workspace/textBox/draw/drawImage\";\r\nimport store from \"../../../../../../../store\";\r\nimport sqftConfig from \"../../../store/sqftConfig\";\r\nimport {\r\n isDisabledInPopupShouldBeHidden, MITERED_OVERLAY_TYPE,\r\n SIDEBAR_BUTTONS_MENU,\r\n SIDEBAR_NAVIGATION_BUTTONS\r\n} from \"../../../../../constants\";\r\nimport RenderFigures from \"../../../helpers/renderFigures\";\r\nimport sqftSlabManager from \"../../../store/sqftSlabManager\";\r\nimport {getQtCatName} from \"../../../../../helpers/sqftQuotesHelper\";\r\n\r\nexport default class MiteredOverlay {\r\n id;\r\n sectionIndex;\r\n line;\r\n self = this;\r\n qtCatName = null;\r\n featureId = null;\r\n type = null; //mitered || underlayment\r\n state = {\r\n mousePos: {},\r\n mouseDown: false,\r\n mouseDownPosition: null,\r\n isHoveringPoint: false,\r\n hoveredPoint: null,\r\n isHoveredOverText: false,\r\n hoveredText: {\r\n area:[],\r\n midPoint: {x: 0, y: 0},\r\n pointsDistance: 0,\r\n points: {point1: null, point2: null},\r\n orientation: 0\r\n },\r\n midPoint: {\r\n x: 0,\r\n y: 0,\r\n },\r\n height: 1.5,\r\n heightMetric: 40,\r\n thickness: 4,\r\n thicknessMetric: 40,\r\n maxSegmentPriority: 0\r\n };\r\n design = {\r\n //initialSize: 30,\r\n minMiteredSize: 1,\r\n measurementMargin: 30, //11,\r\n dragPointMargin: 28,\r\n rulerMargin: 33,\r\n heightMargin: 60,\r\n sectionIndexMargin: 95,\r\n sectionArrowWidth: 30,\r\n letterMargin: 18,\r\n thicknessMargin: -18,\r\n movePointOffset: 15,\r\n lineTextColor: COLOR_THEMES[Config.activeTheme].primary,\r\n fontColor: COLOR_THEMES[Config.activeTheme].primary,\r\n deleteFillStyle: \"#e77f8d\", //\"rgba(253,2,33, 0.5)\",\r\n fontFamily: 'playbold',\r\n fontHeight: 16\r\n };\r\n miteredPoints = []; // array of points\r\n _segments = []; // array of MiteredSegments\r\n miteredTextParameters = []; //array of objects\r\n heightNumberText = {}; //array of objects\r\n\r\n constructor(line, sectionIndex, type) {\r\n this.line = line;\r\n this.sectionIndex = sectionIndex;\r\n this.type = type;\r\n this.id = uuid();\r\n this.qtCatName = getQtCatName();\r\n }\r\n\r\n setMiteredPoints = (value) => { this.miteredPoints = value; }\r\n getSegments = () => { return this._segments; }\r\n getParent = () => { return this.line; }\r\n setSegments = (value) => { this._segments = value; }\r\n setFeatureId = (value) => { this.featureId = value; }\r\n\r\n movePointInOrStop = (point1, axis, diff, biggestLineCord, smallestLineCord, stopPointLeft, stopPointRight, moveStopPoints) => {\r\n //stop on other move points\r\n let smallestPointStopped = null;\r\n let biggestPointStopped = null;\r\n if (point1[axis] - diff < stopPointLeft[axis]) {\r\n smallestLineCord = stopPointLeft[axis] + this.design.minMiteredSize;\r\n smallestPointStopped = stopPointLeft;\r\n if(moveStopPoints) {\r\n let lengthDiff = point1[axis] - stopPointLeft[axis] - diff;\r\n this.movePoint(-lengthDiff, point1[axis] - diff, stopPointLeft, true);\r\n this.moveMeasurements(stopPointLeft);\r\n smallestLineCord = stopPointLeft[axis];\r\n }\r\n } else if (point1[axis] - diff > stopPointRight[axis]) {\r\n biggestLineCord = stopPointRight[axis] - this.design.minMiteredSize;\r\n biggestPointStopped = stopPointRight;\r\n if(moveStopPoints) {\r\n let lengthDiff = point1[axis] - stopPointRight[axis] - diff;\r\n this.movePoint(-lengthDiff, lengthDiff, stopPointRight, true);\r\n this.moveMeasurements(stopPointRight);\r\n biggestLineCord = stopPointRight[axis];\r\n }\r\n }\r\n\r\n // keep inside line\r\n if (point1[axis] - diff >= biggestLineCord) {\r\n point1[axis] = biggestLineCord;\r\n } else if (point1[axis] - diff <= smallestLineCord) {\r\n point1[axis] = smallestLineCord;\r\n } else {\r\n point1[axis] -= diff;\r\n }\r\n\r\n return [smallestPointStopped, biggestPointStopped]\r\n };\r\n\r\n getMousePosPointDiff = (diff, point, mousePos, sameOrientation = false) => {\r\n if(Config.measureUnit === \"Metric\") {\r\n let offset = 0;\r\n switch(this.line.getOrientation()) {\r\n case orientation.HORIZONTAL:\r\n offset = sameOrientation ? mousePos.x - point.getPointField().x : mousePos.y - point.getPointField().y;\r\n break;\r\n case orientation.VERTICAL:\r\n offset = sameOrientation? mousePos.y - point.getPointField().y : mousePos.x - point.getPointField().x;\r\n break;\r\n case orientation.NORTHWEST:\r\n case orientation.SOUTHEAST:\r\n break;\r\n case orientation.NORTHEAST:\r\n case orientation.SOUTHWEST:\r\n break;\r\n }\r\n if(!(-this.design.movePointOffset / 2 > offset || offset > 3 * this.design.movePointOffset)) {\r\n diff = diff / Config.millimetersMultiplier;\r\n }\r\n }\r\n\r\n return diff\r\n };\r\n\r\n getPoints = () => { return this.miteredPoints; };\r\n getMiteredTextParameter = () => { return this.miteredTextParameters; };\r\n isMiteredPointMoving = () => { return this.state.mouseDown};\r\n\r\n destroy = (protect) => {\r\n if(!protect) {\r\n EventManager.removeEvent(this);\r\n this.miteredPoints.forEach((point) => point.destroy());\r\n this._segments.forEach((segment) => {\r\n segment.length.destroy();\r\n if (segment.thickness) {\r\n segment.thickness.destroy();\r\n }\r\n });\r\n this.heightNumberText.destroy();\r\n\r\n if (this.type === MITERED_OVERLAY_TYPE.mitered) {\r\n workspace.miteredController.deleteSection(this);\r\n } else if (this.type === MITERED_OVERLAY_TYPE.underlayment) {\r\n workspace.underlaymentController.deleteSection(this);\r\n }\r\n }\r\n };\r\n\r\n init = (importData = null) => {\r\n if (this.line.overlay) {\r\n this.line.overlay.destroy();\r\n }\r\n if(!importData) {\r\n this.preparePoints(false);\r\n }\r\n this.prepareMeasurements(importData);\r\n this.prepareHeight(importData);\r\n this.initEvents();\r\n\r\n //points\r\n this.miteredPoints.forEach((point, index) => {\r\n if (index === 0 || index === this.miteredPoints.length - 1) {\r\n this.initPoint(point, 'blank');\r\n } else {\r\n this.initPoint(point, 'white-circle');\r\n }\r\n });\r\n\r\n // todo fix bumpout rotation and remove this\r\n $('.button--angle').addClass('button--disabled');\r\n /////////////////////////////////////////\r\n };\r\n initEvents = () => {\r\n EventManager.addEvent(\r\n EventManager.events.RENDER,\r\n this.render,\r\n this,\r\n EventManager.priorities.SEGMENT\r\n );\r\n //todo priority\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_MOVE,\r\n this.onMouseMove,\r\n this,\r\n EventManager.priorities.SEGMENT\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_DOWN,\r\n this.onMouseDown,\r\n this,\r\n EventManager.priorities.SEGMENT\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_UP,\r\n this.onMouseUp,\r\n this,\r\n EventManager.priorities.SEGMENT\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_LEAVE,\r\n this.onMouseLeave,\r\n this,\r\n EventManager.priorities.OVERALL\r\n );\r\n };\r\n deregisterEvents = () => {\r\n EventManager.removeEvent(this);\r\n this.heightNumberText.deregisterEvents();\r\n for (let segment of this._segments ) {\r\n segment.length.deregisterEvents();\r\n if (segment.thickness) {\r\n segment.thickness.deregisterEvents();\r\n }\r\n }\r\n };\r\n reInitEvents = () => {\r\n this.initEvents();\r\n this.heightNumberText.reInitEvents();\r\n for (let segment of this._segments ) {\r\n segment.length.reInitEvents();\r\n if (segment.thickness) {\r\n segment.thickness.reInitEvents();\r\n }\r\n }\r\n };\r\n\r\n getMiteredTotalArea = () => {\r\n let totalArea = 0,\r\n lineLength = Config.measureUnit === \"Metric\" ? this.line.getLineLengthMm() : this.line.getLineLength(),\r\n height = Config.measureUnit === \"Metric\" ? this.state.heightMetric : this.state.height;\r\n //segmentsLength = 0,\r\n //minThicknessToCount = Config.measureUnit === \"Metric\" ? 40 : 1;\r\n\r\n // for (let segment of this._segments) {\r\n // if (segment instanceof MiteredSegment) {\r\n // if(segment.thickness.value >= minThicknessToCount ) {\r\n // let segmentLength = Config.measureUnit === \"Metric\"\r\n // ? inchesToMm(segment.length.value)\r\n // : this.line.addDecimalToLength(measureDistanceToInches(segment.length.value));\r\n //\r\n // segmentsLength += +segment.thickness.value + +segmentLength\r\n // }\r\n // }\r\n // }\r\n\r\n //totalArea = height * (lineLength + segmentsLength);\r\n totalArea = height * (lineLength);\r\n\r\n return totalArea;\r\n };\r\n\r\n export = () => {\r\n return {\r\n miteredPoints : this.miteredPoints.map((point) => {\r\n return point.export();\r\n }),\r\n state: this.state,\r\n _segments: this._segments.map((segment) => {\r\n return segment.exportSegment()\r\n }),\r\n }\r\n };\r\n\r\n import = (line, importMitered) => {\r\n for (const importPoint of importMitered.miteredPoints) {\r\n const preparePoint = new point();\r\n preparePoint.import(importPoint);\r\n\r\n this.miteredPoints.push(preparePoint);\r\n }\r\n this.state = importMitered.state;\r\n this.state = importMitered.state;\r\n };\r\n\r\n preparePoints = (shouldAddTwoPointsInTheMiddle = false) => {\r\n let point33 = getSectionPartPoint(this.line.from, this.line.to, 2),\r\n point66 = getSectionPartPoint(this.line.from, this.line.to, 1/2);\r\n let [fromPointWithIndent, toPointWithIndent] = this.line.getLinePointsWithoutCorners();\r\n const miteredPoints = [\r\n new point(fromPointWithIndent.x, fromPointWithIndent.y),\r\n ...(shouldAddTwoPointsInTheMiddle ? [new point(point33.x, point33.y), new point(point66.x, point66.y)] : []),\r\n new point(toPointWithIndent.x, toPointWithIndent.y)\r\n ];\r\n\r\n this.setMiteredPoints(miteredPoints);\r\n };\r\n\r\n prepareMeasurements = (importData = null) => {\r\n this.miteredPoints.forEach((point, index) => {\r\n let next = index + 1;\r\n if(this.miteredPoints[next]) {\r\n this.addMeasurementBetweenPoints(point, this.miteredPoints[next], importData ? importData._segments[index] : null);\r\n }\r\n });\r\n };\r\n\r\n prepareHeight = (importData = null) => {\r\n const midPoint = getMidPoint(this.line.from, this.line.to),\r\n lineDirection = this.line.getLineDirection(),\r\n fontHeight = this.design.fontHeight;\r\n\r\n let xMarginHeight = 0,\r\n yMarginHeight = -this.design.heightMargin - fontHeight,\r\n angle = getAngleBetweenTwoPoints(this.line.from, this.line.to);\r\n\r\n switch (lineDirection.orientation) {\r\n case \"horizontal\": {\r\n if (lineDirection.newDirection === \"west\") {\r\n angle += 180\r\n yMarginHeight = this.design.heightMargin + fontHeight;\r\n }\r\n break;\r\n }\r\n case \"vertical\": {\r\n break;\r\n }\r\n // todo rotation\r\n case \"NORTHWEST\": { break;}\r\n case \"NORTHEAST\": { break;}\r\n case \"SOUTHWEST\": { break;}\r\n case \"SOUTHEAST\": { break;}\r\n default:\r\n break;\r\n }\r\n\r\n let posHeight = {\r\n // betweenPoints: {\r\n // pointFrom: this.line.from,\r\n // pointTo: this.line.to\r\n // },\r\n x: midPoint.x,\r\n y: midPoint.y,\r\n xOffset: xMarginHeight,\r\n yOffset: yMarginHeight,\r\n orientation: this.line.getLineDirectionV2(),\r\n angle: angle\r\n };\r\n let design = {\r\n valuePrefix: workspace.intl.formatMessage({id: \"sqft.navigation.mitered.height\"}) + \": \",\r\n };\r\n\r\n let heightValue = importData\r\n ? importData._segments[0]\r\n ? importData._segments[0].height\r\n : null\r\n : Config.measureUnit === \"Metric\" ? this.state.heightMetric : this.state.height;\r\n\r\n this.heightNumberText = new NumberText(heightValue, posHeight, design, this, this.setSegmentHeightFromNumberValue);\r\n };\r\n\r\n updateMinMaxPoints = () => {\r\n let [fromPointWithIndent, toPointWithIndent] = this.line.getLinePointsWithoutCorners();\r\n // Minimum and maximum values for limiting points\r\n const minX = Math.min(fromPointWithIndent.x, toPointWithIndent.x);\r\n const minY = Math.min(fromPointWithIndent.y, toPointWithIndent.y);\r\n const maxX = Math.max(fromPointWithIndent.x, toPointWithIndent.x);\r\n const maxY = Math.max(fromPointWithIndent.y, toPointWithIndent.y);\r\n\r\n // Limiting points within specified boundaries\r\n for (const miteredPoint of this.miteredPoints) {\r\n miteredPoint.x = Math.max(minX, Math.min(maxX, miteredPoint.x));\r\n miteredPoint.y = Math.max(minY, Math.min(maxY, miteredPoint.y));\r\n }\r\n\r\n // Move the nearest points to the specified minimum and maximum values\r\n let startPoint = this.miteredPoints[0],\r\n endPoint = this.miteredPoints[this.miteredPoints.length - 1];\r\n\r\n startPoint.x = fromPointWithIndent.x;\r\n startPoint.y = fromPointWithIndent.y;\r\n endPoint.x = toPointWithIndent.x;\r\n endPoint.y = toPointWithIndent.y;\r\n\r\n this.updateSegmentsLength();\r\n this.updateSegmentThicknessPos();\r\n }\r\n\r\n addMeasurementBetweenPoints = (point1, point2, importSegment = null) => {\r\n let angle = getAngleBetweenTwoPoints(this.line.from, this.line.to);\r\n const midPoint = getMidPoint(point1, point2),\r\n lineDirection = this.line.getLineDirection(),\r\n fontHeight = this.design.fontHeight,\r\n // distance = Config.measureUnit === \"Metric\"\r\n // ? distanceToMillimeters(getPointDistance(point1, point2))\r\n // : getPointDistance(point1, point2)\r\n\r\n distance = getPointDistance(point1, point2),\r\n point1Index = this.miteredPoints.indexOf(point1),\r\n point2Index = this.miteredPoints.indexOf(point2);\r\n\r\n void point2Index;\r\n let yOffset = -this.design.measurementMargin - fontHeight,\r\n xOffset = 0;\r\n // thicknessXOffsetValue = 0,\r\n // xMarginLine = 0,\r\n // yMarginLine = 0,\r\n // thicknessYOffsetValue = 0;\r\n\r\n switch (lineDirection.orientation) {\r\n case \"horizontal\": {\r\n if (lineDirection.newDirection === \"west\") {\r\n angle += 180\r\n yOffset = this.design.heightMargin - fontHeight;\r\n }\r\n //yOffset = lineDirection.newDirection === \"west\" ? this.design.measurementMargin + fontHeight : -this.design.measurementMargin -fontHeight;\r\n\r\n // yMarginLine = (lineDirection.newDirection === \"west\" ? this.design.thicknessMargin : -this.design.thicknessMargin);\r\n //\r\n // thicknessXOffsetValue = (lineDirection.newDirection === \"east\" ? 15 : 15);\r\n // thicknessYOffsetValue = (lineDirection.newDirection === \"east\" ? 16 : -14);\r\n break;\r\n }\r\n case \"vertical\": {\r\n //xOffset = (lineDirection.newDirection === \"south\" ? this.design.measurementMargin + 10 : -this.design.measurementMargin - 10);\r\n\r\n // xMarginLine = (lineDirection.newDirection === \"south\" ? this.design.thicknessMargin: -this.design.thicknessMargin);\r\n //\r\n // thicknessXOffsetValue = (lineDirection.newDirection === \"north\" ? 35 : -16);\r\n // thicknessYOffsetValue = (lineDirection.newDirection === \"north\" ? 5 : 6);\r\n break;\r\n }\r\n //TODO rotation\r\n case \"NORTHWEST\": { break; }\r\n case \"NORTHEAST\": { break; }\r\n case \"SOUTHWEST\": { break; }\r\n case \"SOUTHEAST\": { break; }\r\n default: break;\r\n }\r\n\r\n let pos = {\r\n x: midPoint.x,\r\n y: midPoint.y,\r\n xOffset: xOffset,\r\n yOffset: yOffset,\r\n orientation: this.line.getLineDirectionV2(),\r\n angle: angle,\r\n };\r\n\r\n // let posThickness = {\r\n // x: midPoint.x,\r\n // y: midPoint.y,\r\n // xOffset: thicknessXOffsetValue + xMarginLine,\r\n // yOffset: thicknessYOffsetValue + yMarginLine,\r\n // orientation: this.line.getLineDirectionV2()\r\n // };\r\n\r\n let design = {\r\n isLength: true\r\n };\r\n\r\n let lengthText = new NumberText(distance, pos, design, this, this.setSegmentLengthFromNumberValue);\r\n let height = importSegment\r\n ? importSegment.height && importSegment.height\r\n : Config.measureUnit === \"Metric\" ? this.state.heightMetric : this.state.height;\r\n // let thicknessValue = importSegment && importSegment.thickness\r\n // ? importSegment.thickness\r\n // : Config.measureUnit === \"Metric\" ? this.state.thicknessMetric : this.state.thickness;\r\n //let thickness = new NumberText(thicknessValue, posThickness, {}, this, this.setSegmentThicknessFromNumberValue);\r\n let segment = new MiteredSegment(lengthText, height, null);\r\n // todo logic combining miteredPoints and segments\r\n this._segments.splice(point1Index, 0, segment);\r\n };\r\n\r\n getPointDistance(point, pos) {\r\n let pointField = point.getPointField();\r\n\r\n return Math.sqrt(Math.pow(pointField.x - pos.x, 2) + Math.pow(pointField.y - pos.y, 2))\r\n }\r\n\r\n getMaxLength = () => {\r\n return Config.measureUnit === \"Metric\"\r\n ? measureDistanceToInches(this.line.getLineLength()).millimeters // ? distanceToMillimeters(inchesToMm(segment.length.value))\r\n : this.line.getLineLength();\r\n }\r\n\r\n getPointBetweenCords = (mousePos) => {\r\n const closest = this.miteredPoints.reduce((a, b) => {\r\n return this.getPointDistance(a, mousePos) < this.getPointDistance(b, mousePos) ? a : b\r\n });\r\n const closestIndex = this.miteredPoints.indexOf(closest);\r\n let secondPoint = null;\r\n let isPrev = false;\r\n let lineDirection = this.line.getLineDirection();\r\n\r\n if(!this.miteredPoints[closestIndex + 1]) {\r\n secondPoint = this.miteredPoints[closestIndex - 1];\r\n isPrev = true;\r\n } else if(!this.miteredPoints[closestIndex - 1]) {\r\n secondPoint = this.miteredPoints[closestIndex + 1];\r\n isPrev = false;\r\n } else {\r\n let prevPoint = this.miteredPoints[closestIndex - 1];\r\n let nextPoint = this.miteredPoints[closestIndex + 1];\r\n let closestPointField = closest.getPointField();\r\n\r\n // todo logic\r\n //isPrev = this.getPointDistance(prevPoint, mousePos) < this.getPointDistance(nextPoint, mousePos);\r\n switch (lineDirection.orientation) {\r\n case \"horizontal\": {\r\n isPrev = lineDirection.newDirection === \"east\" ? mousePos.x < closestPointField.x : mousePos.x > closestPointField.x;\r\n break;\r\n }\r\n case \"vertical\": {\r\n isPrev = lineDirection.newDirection === \"north\" ? mousePos.y > closestPointField.y : mousePos.y < closestPointField.y;\r\n break;\r\n }\r\n //TODO rotation\r\n case \"NORTHWEST\": { break; }\r\n case \"NORTHEAST\": { break; }\r\n case \"SOUTHWEST\": { break; }\r\n case \"SOUTHEAST\": { break; }\r\n default: break;\r\n }\r\n\r\n secondPoint = isPrev ? prevPoint : nextPoint;\r\n }\r\n\r\n return [closest, secondPoint, isPrev];\r\n };\r\n\r\n addPointBetweenPoints = (closest, secondPoint, isPrev) => {\r\n const midPoint = getMidPoint(closest, secondPoint);\r\n const newPoint = new point(midPoint.x, midPoint.y);\r\n this.initPoint(newPoint);\r\n const closestIndex = this.miteredPoints.indexOf(closest);\r\n\r\n this.miteredPoints.splice(isPrev ? closestIndex : closestIndex + 1, 0, newPoint);\r\n\r\n return newPoint;\r\n };\r\n\r\n getSegmentBetweenPoints = (point1, point2) => {\r\n const point1Index = this.miteredPoints.indexOf(point1);\r\n const point2Index = this.miteredPoints.indexOf(point2);\r\n\r\n return this._segments[point2Index > point1Index ? point1Index : point2Index];\r\n };\r\n\r\n getSegmentPointsBySegment = (segment) => {\r\n const segmentIndex = this._segments.indexOf(segment);\r\n\r\n return [this.miteredPoints[segmentIndex], this.miteredPoints[segmentIndex + 1]];\r\n };\r\n\r\n removeMeasurementBetweenPoints = (closest, secondPoint, isPrev) => {\r\n const closestIndex = this.miteredPoints.indexOf(closest);\r\n const removeIndex = isPrev ? closestIndex - 2: closestIndex + 2;\r\n\r\n this._segments[removeIndex].length.destroy();\r\n if (this._segments[removeIndex].thickness) {\r\n this._segments[removeIndex].thickness.destroy();\r\n }\r\n this._segments.splice(removeIndex, 1);\r\n };\r\n\r\n deletePoint = (point) => {\r\n const pointIndex = this.miteredPoints.indexOf(point);\r\n\r\n //add new segment\r\n this.addMeasurementBetweenPoints(this.miteredPoints[pointIndex -1], this.miteredPoints[pointIndex +1]);\r\n\r\n //remove previous and next segment\r\n this._segments[pointIndex ].length.destroy();\r\n this._segments[pointIndex +1].length.destroy();\r\n if (this._segments[pointIndex].thickness) {\r\n this._segments[pointIndex].thickness.destroy();\r\n }\r\n if (this._segments[pointIndex + 1].thickness) {\r\n this._segments[pointIndex + 1].thickness.destroy();\r\n }\r\n this._segments.splice(pointIndex, 1);\r\n this._segments.splice(pointIndex, 1);\r\n\r\n //remove point\r\n this.miteredPoints.splice(pointIndex, 1);\r\n\r\n point.destroy();\r\n };\r\n\r\n resetHoveredPoint = () => {\r\n this.state.hoveredPoint = null;\r\n this.state.mouseDown = false;\r\n };\r\n\r\n\r\n moveMeasurements = (point) => {\r\n const pointIndex = this.miteredPoints.indexOf(point);\r\n\r\n // let length = Config.measureUnit === \"Metric\"\r\n // ? inchesToMm(getPointDistance(point, this.miteredPoints[pointIndex + 1 ]))\r\n // : getPointDistance(point, this.miteredPoints[pointIndex + 1 ]);\r\n //\r\n // let length2 = Config.measureUnit === \"Metric\"\r\n // ? inchesToMm(getPointDistance(point, this.miteredPoints[pointIndex - 1 ]))\r\n // : getPointDistance(point, this.miteredPoints[pointIndex - 1 ]);\r\n\r\n //move left and right measurements if they exist\r\n if (this.miteredPoints[pointIndex - 1 ]) {\r\n const midPoint2 = getMidPoint(point, this.miteredPoints[pointIndex - 1 ]);\r\n let length2 = getPointDistance(point, this.miteredPoints[pointIndex - 1 ]);\r\n this._segments[pointIndex - 1].length.pos.x = midPoint2.x;\r\n this._segments[pointIndex - 1].length.pos.y = midPoint2.y;\r\n this._segments[pointIndex - 1].length.value = length2;\r\n if (this._segments[pointIndex - 1].thickness) {\r\n this._segments[pointIndex - 1].thickness.pos.x = midPoint2.x;\r\n this._segments[pointIndex - 1].thickness.pos.y = midPoint2.y;\r\n }\r\n }\r\n if (this.miteredPoints[pointIndex + 1 ]) {\r\n const midPoint = getMidPoint(point, this.miteredPoints[pointIndex + 1 ]);\r\n let length = getPointDistance(point, this.miteredPoints[pointIndex + 1 ]);\r\n this._segments[pointIndex].length.pos.x = midPoint.x;\r\n this._segments[pointIndex].length.pos.y = midPoint.y;\r\n this._segments[pointIndex].length.value = length;\r\n if (this._segments[pointIndex].thickness) {\r\n this._segments[pointIndex].thickness.pos.x = midPoint.x;\r\n this._segments[pointIndex].thickness.pos.y = midPoint.y;\r\n }\r\n }\r\n };\r\n\r\n initPoint = (point, layout = 'white-circle') => {\r\n point.init(this);\r\n point.layout = layout;\r\n };\r\n\r\n getOffset = () => {\r\n return this.line.getOffset();\r\n };\r\n\r\n moveMitered = (xDiff = 0, yDiff = 0) => {\r\n for (let miteredPoint of this.miteredPoints ) {\r\n miteredPoint.x -= xDiff;\r\n miteredPoint.y -= yDiff;\r\n }\r\n this.heightNumberText.pos.x -= xDiff;\r\n this.heightNumberText.pos.y -= yDiff;\r\n for (let segment of this._segments ) {\r\n segment.length.pos.x -= xDiff;\r\n segment.length.pos.y -= yDiff;\r\n if (segment.thickness) {\r\n segment.thickness.pos.x -= xDiff;\r\n segment.thickness.pos.y -= yDiff;\r\n }\r\n }\r\n };\r\n\r\n setNewLineWidth = () => {\r\n this.updateCornerPoints();\r\n this.updateSectionHeightPos();\r\n this.updateSegmentsLength();\r\n this.updateSegmentThicknessPos();\r\n };\r\n\r\n updateCornerPoints = () => {\r\n this.miteredPoints[0].x = this.line.from.x\r\n this.miteredPoints[0].y = this.line.from.y\r\n this.miteredPoints[this.miteredPoints.length - 1].x = this.line.to.x\r\n this.miteredPoints[this.miteredPoints.length - 1].y = this.line.to.y\r\n };\r\n\r\n updateSectionHeightPos = () => {\r\n const midPoint = getMidPoint(this.line.from, this.line.to);\r\n this.heightNumberText.pos.x = midPoint.x;\r\n this.heightNumberText.pos.y = midPoint.y;\r\n };\r\n\r\n updateSegmentsLength = () => {\r\n for (let segmentIndex in this._segments ) {\r\n if (this._segments.hasOwnProperty(segmentIndex)) {\r\n const midPoint = getMidPoint(this.miteredPoints[+segmentIndex], this.miteredPoints[+segmentIndex + 1]);\r\n let length = getPointDistance(this.miteredPoints[+segmentIndex], this.miteredPoints[+segmentIndex + 1]);\r\n this._segments[+segmentIndex].length.pos.x = midPoint.x;\r\n this._segments[+segmentIndex].length.pos.y = midPoint.y;\r\n this._segments[+segmentIndex].length.value = length;\r\n this.setSegmentLength(length, this._segments[segmentIndex], this);\r\n }\r\n }\r\n };\r\n\r\n updateSegmentThicknessPos = () => {\r\n for (let segmentIndex in this._segments ) {\r\n if (this._segments.hasOwnProperty(segmentIndex) && this.miteredPoints[+segmentIndex + 1]) {\r\n const midPoint = getMidPoint(this.miteredPoints[+segmentIndex], this.miteredPoints[+segmentIndex + 1]);\r\n if (this._segments[+segmentIndex].thickness) {\r\n this._segments[+segmentIndex].thickness.pos.x = midPoint.x;\r\n this._segments[+segmentIndex].thickness.pos.y = midPoint.y;\r\n }\r\n }\r\n }\r\n };\r\n\r\n setSegmentLengthFromNumberValue = (value, numberText) => {\r\n value = Math.round10(+value / Config.getMeasureMultiplier(), -3);\r\n let miteredSection = numberText.parent;\r\n let miteredSegments = miteredSection.getSegments();\r\n let miteredSegment = miteredSegments.find(seg => seg.length === numberText);\r\n\r\n this.setSegmentLength(value, miteredSegment, miteredSection);\r\n };\r\n\r\n setSegmentLength = (value, segment, miteredSection) => {\r\n //update segment and maxSegment priority\r\n segment.setPriority(++this.state.maxSegmentPriority);\r\n this.resizeMiteredSegment(value, segment);\r\n\r\n // we need to recreate slab shape so we delete existing it\r\n sqftSlabManager.deleteSlabBacksplashByLine(this.line);\r\n if (this.type === MITERED_OVERLAY_TYPE.mitered) {\r\n workspace.miteredController.updateSection(miteredSection);\r\n } else if (this.type === MITERED_OVERLAY_TYPE.underlayment) {\r\n workspace.underlaymentController.updateSection(miteredSection);\r\n }\r\n };\r\n\r\n setSegmentHeightFromNumberValue = (value, numberText) => {\r\n const newValue = +value\r\n let miteredSection = numberText.parent;\r\n this.setSegmentHeight(newValue, miteredSection);\r\n };\r\n\r\n setSegmentHeight = (newValue, miteredSection) => {\r\n let segments = miteredSection.getSegments();\r\n sqftConfig.measureUnit === \"Metric\"\r\n ? miteredSection.state.heightMetric = newValue\r\n : miteredSection.state.height = newValue;\r\n\r\n miteredSection.heightNumberText.value = newValue;\r\n segments.map((segment) => {\r\n segment.height = newValue\r\n });\r\n\r\n // we need to recreate slab shape so we delete existing it\r\n sqftSlabManager.deleteSlabBacksplashByLine(this.line);\r\n if (this.type === MITERED_OVERLAY_TYPE.mitered) {\r\n workspace.miteredController.updateSection(miteredSection);\r\n } else if (this.type === MITERED_OVERLAY_TYPE.underlayment) {\r\n workspace.underlaymentController.updateSection(miteredSection);\r\n }\r\n }\r\n\r\n setSegmentThicknessFromNumberValue = (value, numberText) => {\r\n const newValue = +value\r\n let miteredSection = numberText.parent;\r\n let miteredSegments = miteredSection.getSegments();\r\n let miteredSegment = miteredSegments.find(seg => seg.thickness === numberText);\r\n\r\n this.setSegmentThickness(newValue, miteredSegment, miteredSection);\r\n if (this.type === MITERED_OVERLAY_TYPE.mitered) {\r\n workspace.miteredController.updateSection(miteredSection);\r\n } else if (this.type === MITERED_OVERLAY_TYPE.underlayment) {\r\n workspace.underlaymentController.updateSection(miteredSection);\r\n }\r\n };\r\n\r\n setSegmentThickness = (newValue, miteredSegment, miteredSection) => {\r\n sqftConfig.measureUnit === \"Metric\"\r\n ? miteredSection.state.thicknessMetric = newValue\r\n : miteredSection.state.thickness = newValue;\r\n miteredSegment.thickness.value = newValue;\r\n\r\n if (this.type === MITERED_OVERLAY_TYPE.mitered) {\r\n workspace.miteredController.updateSection(miteredSection);\r\n } else if (this.type === MITERED_OVERLAY_TYPE.underlayment) {\r\n workspace.underlaymentController.updateSection(miteredSection);\r\n }\r\n }\r\n\r\n getSegmentByNumberText = (numberText) => {\r\n let segmentIndex = this._segments.map(seg => seg.length).indexOf(numberText);\r\n\r\n return this._segments[segmentIndex];\r\n };\r\n\r\n getResizedSegmentsWithoutPriority = (segment) => {\r\n let segmentIndex = this._segments.indexOf(segment);\r\n let closestLeft = this._segments[segmentIndex -1 ]\r\n ? this._segments[segmentIndex -1 ].priority === 0\r\n : null;\r\n let closestRight = this._segments[segmentIndex +1 ]\r\n ? this._segments[segmentIndex +1 ].priority === 0\r\n : null;\r\n\r\n return {closestLeft, closestRight};\r\n };\r\n\r\n getResizedSegmentsFreeSpace = (segment) => {\r\n let segmentIndex = this._segments.indexOf(segment);\r\n let closestLeft = this._segments[segmentIndex -1 ];\r\n let closestRight = this._segments[segmentIndex +1 ];\r\n\r\n return {closestLeft, closestRight};\r\n };\r\n\r\n getResizedSegmentsByPriority = (segment) => {\r\n let segmentIndex = this._segments.indexOf(segment);\r\n let minPrevSegment = null;\r\n let minNextSegment = null;\r\n if(this._segments[segmentIndex -1 ]) {\r\n let prevSegments = this._segments.slice(0, segmentIndex);\r\n minPrevSegment = getMinInArray(prevSegments, 'priority');\r\n }\r\n if(this._segments[segmentIndex +1 ]) {\r\n let nextSegments = this._segments.slice(segmentIndex + 1);\r\n minNextSegment = getMinInArray(nextSegments.reverse(), 'priority'); // reverse array to get closest element\r\n }\r\n\r\n return {minPrevSegment, minNextSegment};\r\n };\r\n\r\n movePointWithMouse = (mousePos, point1) => {\r\n let scale = workspace.getScale();\r\n let xDiff = (this.state.mouseDownPosition.x - mousePos.x) / scale;\r\n let yDiff = (this.state.mouseDownPosition.y - mousePos.y) / scale;\r\n\r\n //debugger\r\n yDiff = this.getMousePosPointDiff(yDiff, point1, mousePos, true);\r\n xDiff = this.getMousePosPointDiff(xDiff, point1, mousePos, true);\r\n\r\n this.movePoint(xDiff, yDiff, point1);\r\n this.moveMeasurements(point1);\r\n\r\n this.state.mouseDownPosition.y = mousePos.y;\r\n this.state.mouseDownPosition.x = mousePos.x;\r\n };\r\n\r\n // first resize free space then segments without and with priority\r\n resizeMiteredSegment = (value, segment) => {\r\n if (!this.resizeMiteredSegmentFreeSpace(value, segment)){\r\n if (!this.resizeMiteredSegmentWithoutPriority(value, segment)) {\r\n this.resizeMiteredSegmentWithPriority(value, segment);\r\n }\r\n }\r\n };\r\n\r\n resizeMiteredSegmentWithPriority = (value, segment) => {\r\n let yDiff = 0,\r\n xDiff = 0,\r\n lineDirection = this.line.getLineDirection(),\r\n {minPrevSegment, minNextSegment} = this.getResizedSegmentsByPriority(segment),\r\n segmentIndex = this._segments.indexOf(segment),\r\n minNextSegmentIndex = this._segments.indexOf(minNextSegment),\r\n minPrevSegmentIndex = this._segments.indexOf(minPrevSegment),\r\n\r\n [segmentPoint1, segmentPoint2] = this.getSegmentPointsBySegment(segment),\r\n pointDistance = getPointDistance(segmentPoint1, segmentPoint2);\r\n\r\n // move only to one side with lowest priority\r\n if (minPrevSegment ? minPrevSegment.priority : 0 > minNextSegment ? minNextSegment.priority : 0) {\r\n minPrevSegment = null\r\n } else if(minPrevSegment ? minPrevSegment.priority : 0 < minNextSegment ? minNextSegment.priority : 0) {\r\n minNextSegment = null\r\n }\r\n\r\n let moveAllNextPoints = (xDiff, yDiff) => {\r\n let index = segmentIndex;\r\n while(minNextSegmentIndex > index) {\r\n let [segmentBetweenPoint1, segmentBetweenPoint2] = this.getSegmentPointsBySegment(this._segments[index]);\r\n this.movePoint(xDiff, yDiff, segmentBetweenPoint2, true);\r\n this.moveMeasurements(segmentBetweenPoint2);\r\n index++\r\n\r\n void segmentBetweenPoint1;\r\n }\r\n };\r\n\r\n let moveAllPrevPoints = (xDiff, yDiff) => {\r\n let index = segmentIndex;\r\n while(minPrevSegmentIndex < index) {\r\n let [segmentBetweenPoint1, segmentBetweenPoint2] = this.getSegmentPointsBySegment(this._segments[index]);\r\n this.movePoint(xDiff, yDiff, segmentBetweenPoint1, true);\r\n this.moveMeasurements(segmentBetweenPoint1);\r\n index--\r\n\r\n void segmentBetweenPoint2;\r\n }\r\n };\r\n switch(this.line.getOrientation()) {\r\n case orientation.HORIZONTAL:\r\n if (minPrevSegment && minNextSegment) {\r\n xDiff = lineDirection.newDirection === \"east\" ? value - pointDistance: -value + pointDistance;\r\n moveAllPrevPoints(xDiff / 2);\r\n\r\n xDiff = lineDirection.newDirection === \"east\" ? -value + pointDistance: value - pointDistance;\r\n moveAllNextPoints(xDiff / 2);\r\n } else if(minPrevSegment && !minNextSegment) {\r\n xDiff = lineDirection.newDirection === \"east\" ? value - pointDistance: -value + pointDistance;\r\n moveAllPrevPoints(xDiff);\r\n } else if(!minPrevSegment && minNextSegment) {\r\n xDiff = lineDirection.newDirection === \"east\" ? -value + pointDistance: value - pointDistance;\r\n moveAllNextPoints(xDiff);\r\n }\r\n\r\n break;\r\n case orientation.VERTICAL:\r\n if (minPrevSegment && minNextSegment) {\r\n yDiff = lineDirection.newDirection === \"east\" ? value - pointDistance : -value + pointDistance;\r\n moveAllPrevPoints(xDiff, yDiff / 2);\r\n\r\n yDiff = lineDirection.newDirection === \"east\" ? -value + pointDistance: value - pointDistance;\r\n moveAllNextPoints(xDiff, yDiff / 2);\r\n } else if(minPrevSegment && !minNextSegment) {\r\n yDiff = lineDirection.newDirection === \"east\" ? value - pointDistance : -value + pointDistance;\r\n moveAllPrevPoints(xDiff, yDiff);\r\n } else if(!minPrevSegment && minNextSegment) {\r\n yDiff = lineDirection.newDirection === \"east\" ? -value + pointDistance: value - pointDistance;\r\n moveAllNextPoints(xDiff, yDiff);\r\n }\r\n break;\r\n case orientation.NORTHWEST:\r\n case orientation.SOUTHEAST:\r\n break;\r\n case orientation.NORTHEAST:\r\n case orientation.SOUTHWEST:\r\n break;\r\n }\r\n };\r\n\r\n resizeMiteredSegmentWithoutPriority = (value, segment) => {\r\n let {closestLeft, closestRight} = this.getResizedSegmentsWithoutPriority(segment);\r\n //resize segments only if they are without priority\r\n if(!closestLeft && !closestRight) {\r\n return false\r\n }\r\n\r\n let yDiff = 0,\r\n xDiff = 0,\r\n lineDirection = this.line.getLineDirection(),\r\n [segmentPoint1, segmentPoint2] = this.getSegmentPointsBySegment(segment),\r\n pointDistance = getPointDistance(segmentPoint1, segmentPoint2);\r\n\r\n switch(this.line.getOrientation()) {\r\n case orientation.HORIZONTAL:\r\n if(closestLeft && closestRight) {\r\n xDiff = lineDirection.newDirection === \"east\" ? value - pointDistance: -value + pointDistance;\r\n this.movePoint(xDiff / 2, yDiff, segmentPoint1, true);\r\n this.moveMeasurements(segmentPoint1);\r\n\r\n xDiff = lineDirection.newDirection === \"east\" ? -value + pointDistance: value - pointDistance;\r\n this.movePoint(xDiff / 2, yDiff, segmentPoint2, true);\r\n this.moveMeasurements(segmentPoint2);\r\n\r\n } else if(closestLeft && !closestRight) {\r\n xDiff = lineDirection.newDirection === \"east\" ? value - pointDistance: -value + pointDistance;\r\n this.movePoint(xDiff, yDiff, segmentPoint1, true);\r\n this.moveMeasurements(segmentPoint1);\r\n\r\n } else if(!closestLeft && closestRight) {\r\n xDiff = lineDirection.newDirection === \"east\" ? -value + pointDistance: value - pointDistance;\r\n this.movePoint(xDiff, yDiff, segmentPoint2, true);\r\n this.moveMeasurements(segmentPoint2);\r\n }\r\n\r\n break;\r\n case orientation.VERTICAL:\r\n if(closestLeft && closestRight) {\r\n yDiff = lineDirection.newDirection === \"north\" ? -value + pointDistance: value - pointDistance;\r\n this.movePoint(xDiff / 2, yDiff, segmentPoint1, true);\r\n this.moveMeasurements(segmentPoint1);\r\n\r\n yDiff = lineDirection.newDirection === \"north\" ? value - pointDistance : -value + pointDistance;\r\n this.movePoint(xDiff / 2, yDiff, segmentPoint2, true);\r\n this.moveMeasurements(segmentPoint2);\r\n\r\n } else if(closestLeft && !closestRight) {\r\n yDiff = lineDirection.newDirection === \"north\" ? -value + pointDistance: value - pointDistance;\r\n this.movePoint(xDiff, yDiff, segmentPoint1, true);\r\n this.moveMeasurements(segmentPoint1);\r\n\r\n } else if(!closestLeft && closestRight) {\r\n yDiff = lineDirection.newDirection === \"north\" ? value - pointDistance : -value + pointDistance;\r\n this.movePoint(xDiff, yDiff, segmentPoint2, true);\r\n this.moveMeasurements(segmentPoint2);\r\n }\r\n break;\r\n case orientation.NORTHWEST:\r\n case orientation.SOUTHEAST:\r\n break;\r\n case orientation.NORTHEAST:\r\n case orientation.SOUTHWEST:\r\n break;\r\n }\r\n\r\n return true\r\n };\r\n\r\n resizeMiteredSegmentFreeSpace = (value, segment) => {\r\n let {closestLeft, closestRight} = this.getResizedSegmentsFreeSpace(segment);\r\n //if segments exist skip resizing\r\n if (!closestLeft || !closestRight) {\r\n let yDiff = 0,\r\n xDiff = 0,\r\n lineDirection = this.line.getLineDirection(),\r\n [segmentPoint1, segmentPoint2] = this.getSegmentPointsBySegment(segment),\r\n [smallestLinePoint, biggestLinePoint] = this.line.getLinePointsWithoutCorners(),\r\n pointDistance = getPointDistance(segmentPoint1, segmentPoint2);\r\n\r\n // todo move skip into function\r\n switch(this.line.getOrientation()) {\r\n case orientation.HORIZONTAL:\r\n if(!closestLeft && closestRight) {\r\n xDiff = lineDirection.newDirection === \"east\" ? value - pointDistance: -value + pointDistance;\r\n // skip if there is no whitespace\r\n if(lineDirection.newDirection === \"east\" ){\r\n if(segmentPoint1.x - xDiff <= smallestLinePoint.x || segmentPoint1.x === smallestLinePoint.x){\r\n return false\r\n } else if(Math.round(segmentPoint1.x) === smallestLinePoint.x){\r\n segmentPoint1.x = smallestLinePoint.x;\r\n return false\r\n }\r\n } else {\r\n if(segmentPoint1.x - xDiff >= biggestLinePoint.x || segmentPoint1.x === biggestLinePoint.x){\r\n return false\r\n } else if(Math.round(segmentPoint1.x) === biggestLinePoint.x){\r\n segmentPoint1.x = biggestLinePoint.x;\r\n return false\r\n }\r\n }\r\n this.movePoint(xDiff, yDiff, segmentPoint1, true);\r\n this.moveMeasurements(segmentPoint1);\r\n\r\n } else if(closestLeft && !closestRight) {\r\n xDiff = lineDirection.newDirection === \"east\" ? -value + pointDistance: value - pointDistance;\r\n if(lineDirection.newDirection === \"east\" ){\r\n if(segmentPoint2.x - xDiff >= biggestLinePoint.x){\r\n return false\r\n } else if(Math.round(segmentPoint2.x) === biggestLinePoint.x){\r\n segmentPoint2.x = biggestLinePoint.x;\r\n return false\r\n }\r\n } else {\r\n if(segmentPoint2.x - xDiff <= smallestLinePoint.x){\r\n return false\r\n } else if(Math.round(segmentPoint2.x) === smallestLinePoint.x){\r\n segmentPoint2.x = smallestLinePoint.x;\r\n return false\r\n }\r\n }\r\n this.movePoint(xDiff, yDiff, segmentPoint2, true);\r\n this.moveMeasurements(segmentPoint2);\r\n }\r\n\r\n break;\r\n case orientation.VERTICAL:\r\n if(!closestLeft && closestRight) {\r\n yDiff = lineDirection.newDirection === \"north\" ? -value + pointDistance: value - pointDistance;\r\n // skip if there is no whitespace\r\n if(lineDirection.newDirection === \"north\" ){\r\n if(segmentPoint1.y - yDiff >= biggestLinePoint.y){\r\n return false\r\n } else if(Math.round(segmentPoint1.y) === biggestLinePoint.y){\r\n segmentPoint1.y = biggestLinePoint.y;\r\n return false\r\n }\r\n } else {\r\n if(segmentPoint1.y - yDiff <= smallestLinePoint.y){\r\n return false\r\n } else if(Math.round(segmentPoint1.y) === smallestLinePoint.y){\r\n segmentPoint1.y = smallestLinePoint.y;\r\n return false\r\n }\r\n }\r\n this.movePoint(xDiff, yDiff, segmentPoint1, true);\r\n this.moveMeasurements(segmentPoint1);\r\n\r\n } else if(closestLeft && !closestRight) {\r\n yDiff = lineDirection.newDirection === \"north\" ? value - pointDistance : -value + pointDistance;\r\n // skip if there is no whitespace and fix round position\r\n if(lineDirection.newDirection === \"north\" ){\r\n if(segmentPoint2.y - yDiff <= smallestLinePoint.y){\r\n return false\r\n } else if(Math.round(segmentPoint2.y) === smallestLinePoint.y){\r\n segmentPoint2.y = smallestLinePoint.y;\r\n return false\r\n }\r\n } else {\r\n if(segmentPoint2.y - yDiff >= biggestLinePoint.y){\r\n return false\r\n } else if(Math.round(segmentPoint2.y) === biggestLinePoint.y){\r\n segmentPoint2.y = biggestLinePoint.y;\r\n return false\r\n }\r\n }\r\n this.movePoint(xDiff, yDiff, segmentPoint2, true);\r\n this.moveMeasurements(segmentPoint2);\r\n }\r\n break;\r\n case orientation.NORTHWEST:\r\n case orientation.SOUTHEAST:\r\n break;\r\n case orientation.NORTHEAST:\r\n case orientation.SOUTHWEST:\r\n break;\r\n }\r\n }\r\n\r\n return false\r\n };\r\n\r\n /**\r\n * @deprecated\r\n */\r\n getLeftRightStopPoint = (point1) => {\r\n let o = this.line.getOrientation(),\r\n lineDirection = this.line.getLineDirection(),\r\n toCornerLength = this.line.to.getArcLength() || this.line.get45CornerLegDistance(),\r\n prevLine = this.line.getParent().getPrevLine(this.line),\r\n fromCornerLength = prevLine.to.getArcLength() || prevLine.get45CornerLegDistance(),\r\n toCornerMargin = 0,\r\n fromCornerMargin = 0,\r\n axis = null,\r\n index = this.miteredPoints.indexOf(point1),\r\n stopPointLeft = null,\r\n stopPointRight = null,\r\n biggestLinePoint = null,\r\n smallestLinePoint = null;\r\n\r\n if (o === orientation.VERTICAL) {\r\n toCornerMargin = lineDirection.newDirection === \"north\" ? -fromCornerLength : -toCornerLength;\r\n fromCornerMargin = lineDirection.newDirection === \"north\" ? +toCornerLength : +fromCornerLength;\r\n biggestLinePoint = this.line.getBiggestYPoint().y + toCornerMargin;\r\n smallestLinePoint = this.line.getSmallestYPoint().y + fromCornerMargin;\r\n axis = y;\r\n } else if(o === orientation.HORIZONTAL) {\r\n toCornerMargin = lineDirection.newDirection === \"east\" ? -toCornerLength : -fromCornerLength;\r\n fromCornerMargin = lineDirection.newDirection === \"east\" ? +fromCornerLength : +toCornerLength;\r\n biggestLinePoint = this.line.getBiggestXPoint().x + toCornerMargin;\r\n smallestLinePoint = this.line.getSmallestXPoint().x + fromCornerMargin;\r\n axis = x;\r\n } else {\r\n //todo\r\n }\r\n\r\n void axis; void biggestLinePoint; void smallestLinePoint;\r\n void index; void stopPointLeft; void stopPointRight;\r\n };\r\n\r\n movePoint = (xDiff, yDiff, point1, moveStopPoints = false) => {\r\n let o = this.line.getOrientation(),\r\n lineDirection = this.line.getLineDirection(),\r\n // toCornerLength = this.line.to.getArcLength() || this.line.get45CornerLegDistance(),\r\n // prevLine = this.line.getParent().getPrevLine(this.line),\r\n // fromCornerLength = prevLine.to.getArcLength() || prevLine.get45CornerLegDistance(),\r\n pointIndex = this.miteredPoints.indexOf(point1),\r\n //toCornerMargin = 0,\r\n //fromCornerMargin = 0,\r\n stopPointLeft = null,\r\n stopPointRight = null,\r\n smallestPointStopped = null,\r\n biggestPointStopped = null,\r\n biggestLinePoint = null,\r\n smallestLinePoint = null\r\n ;\r\n\r\n //do'nt move first and las point\r\n if (pointIndex === 0 || pointIndex === this.miteredPoints.length - 1) {\r\n return []\r\n }\r\n\r\n if (o === orientation.VERTICAL) {\r\n //line biggest and smallest points\r\n biggestLinePoint = Object.assign({}, this.line.getBiggestYPoint().pos);\r\n smallestLinePoint = Object.assign({}, this.line.getSmallestYPoint().pos);\r\n // stop point on overline move\r\n if (lineDirection.newDirection === \"north\" ) {\r\n //toCornerMargin = -fromCornerLength;\r\n //fromCornerMargin = +toCornerLength;\r\n //biggestLinePoint.y += toCornerMargin;\r\n //smallestLinePoint.y += fromCornerMargin;\r\n stopPointLeft = this.miteredPoints[pointIndex + 1] ? this.miteredPoints[pointIndex + 1] : smallestLinePoint;\r\n stopPointRight = this.miteredPoints[pointIndex - 1] ? this.miteredPoints[pointIndex - 1] : biggestLinePoint;\r\n } else {\r\n //toCornerMargin = -toCornerLength;\r\n //fromCornerMargin = +fromCornerLength;\r\n //biggestLinePoint.y += toCornerMargin;\r\n //smallestLinePoint.y += fromCornerMargin;\r\n stopPointLeft = this.miteredPoints[pointIndex - 1] ? this.miteredPoints[pointIndex - 1] : smallestLinePoint;\r\n stopPointRight = this.miteredPoints[pointIndex + 1] ? this.miteredPoints[pointIndex + 1] : biggestLinePoint;\r\n }\r\n\r\n [smallestPointStopped, biggestPointStopped] = this.movePointInOrStop(\r\n point1, 'y', yDiff,\r\n biggestLinePoint.y,\r\n smallestLinePoint.y,\r\n stopPointLeft,\r\n stopPointRight,\r\n moveStopPoints\r\n );\r\n } else if (o === orientation.HORIZONTAL) {\r\n //line biggest and smallest points\r\n biggestLinePoint = Object.assign({}, this.line.getBiggestXPoint().pos);\r\n smallestLinePoint = Object.assign({}, this.line.getSmallestXPoint().pos);\r\n // stop point on overline move if it is not mitered then it should'nt go overline\r\n if (lineDirection.newDirection === \"east\" ) {\r\n //toCornerMargin = -toCornerLength;\r\n //fromCornerMargin = +fromCornerLength;\r\n //biggestLinePoint.x += toCornerMargin;\r\n //smallestLinePoint.x += fromCornerMargin;\r\n stopPointLeft = this.miteredPoints[pointIndex - 1] ? this.miteredPoints[pointIndex - 1] : smallestLinePoint;\r\n stopPointRight = this.miteredPoints[pointIndex + 1] ? this.miteredPoints[pointIndex + 1] : biggestLinePoint;\r\n } else {\r\n //toCornerMargin = -fromCornerLength;\r\n //fromCornerMargin = +toCornerLength;\r\n //biggestLinePoint.x += toCornerMargin;\r\n //smallestLinePoint.x += fromCornerMargin;\r\n stopPointLeft = this.miteredPoints[pointIndex + 1] ? this.miteredPoints[pointIndex + 1] : smallestLinePoint;\r\n stopPointRight = this.miteredPoints[pointIndex - 1] ? this.miteredPoints[pointIndex - 1] : biggestLinePoint;\r\n }\r\n // stop point on overline move\r\n [smallestPointStopped, biggestPointStopped] = this.movePointInOrStop(\r\n point1, 'x', xDiff,\r\n biggestLinePoint.x,\r\n smallestLinePoint.x,\r\n stopPointLeft,\r\n stopPointRight,\r\n moveStopPoints\r\n );\r\n } else {\r\n //todo rotation\r\n // const nextLine = parent.getNextLine(self);\r\n // const prevLine = parent.getPrevLine(self);\r\n // moveDiagonalLine(self, nextLine, prevLine, this.state.movePointDistance, yDiff, o);\r\n // this.state.mouseDownPosition = mousePos;\r\n }\r\n\r\n return [smallestPointStopped, biggestPointStopped]\r\n // self.from = lockPointToCanvas(self.from); // removed locking because of this issue http://jira.mozidev.com/browse/QC-802\r\n // self.to = lockPointToCanvas(self.to);\r\n };\r\n\r\n render = (ctx) => {\r\n if (isDisabledInPopupShouldBeHidden() && isDisabledInPopupWithParents(this)) {\r\n return\r\n }\r\n this.renderTopBlueLine(ctx);\r\n this.renderRuler(ctx);\r\n this.renderLetter(ctx);\r\n //this.renderThickness(ctx);\r\n this.renderHeight(ctx);\r\n this.renderSectionIndex(ctx);\r\n // this.renderMeasurements(ctx);\r\n };\r\n\r\n //blue line between middle points\r\n renderTopBlueLine = (ctx) => {\r\n let renderFrom = this.line.calculateRenderPosition(this.miteredPoints[0]),\r\n renderTo = this.line.calculateRenderPosition(this.miteredPoints[this.miteredPoints.length - 1]);\r\n\r\n ctx.beginPath();\r\n ctx.moveTo(renderFrom.x, renderFrom.y);\r\n ctx.lineTo(renderTo.x, renderTo.y);\r\n ctx.lineWidth = 8;\r\n if(EventManager.getCursor().indexOf(\"delete\") >= 0 && this.line.isHovering() && !this.state.isHoveringPoint) {\r\n ctx.strokeStyle = this.design.deleteFillStyle;\r\n } else {\r\n ctx.strokeStyle = this.design.lineTextColor;\r\n }\r\n ctx.stroke();\r\n ctx.closePath();\r\n };\r\n\r\n renderRuler = (ctx) => {\r\n const pointsToRender = this.miteredPoints.map((point) => {\r\n return this.line.calculateRenderPosition(point);\r\n });\r\n\r\n ctx.beginPath();\r\n pointsToRender.forEach((point, index) => {\r\n let next = index + 1;\r\n if (pointsToRender[next]) {\r\n const [parallelPointFrom, parallelPointTo] = getParallelPoints(point, pointsToRender[next], -this.design.rulerMargin);\r\n this.drawArrow( ctx,\r\n parallelPointFrom.x,\r\n parallelPointFrom.y,\r\n parallelPointTo.x,\r\n parallelPointTo.y\r\n );\r\n }\r\n });\r\n\r\n ctx.lineWidth = 1;\r\n ctx.strokeStyle = this.design.lineTextColor;\r\n ctx.stroke();\r\n ctx.closePath();\r\n };\r\n\r\n // text is rendered from number text\r\n renderHeight = (ctx) => {\r\n let [fromPointWithIndent, toPointWithIndent] = this.line.getLinePointsWithoutCorners(),\r\n renderFrom = getPointField(fromPointWithIndent.x, fromPointWithIndent.y, this),\r\n renderTo = getPointField(toPointWithIndent.x, toPointWithIndent.y, this);\r\n\r\n ctx.beginPath();\r\n\r\n const [parallelPointFrom, parallelPointTo] = getParallelPoints(renderFrom, renderTo, -this.design.heightMargin);\r\n this.drawFlatArrow( ctx,\r\n parallelPointFrom.x,\r\n parallelPointFrom.y,\r\n parallelPointTo.x,\r\n parallelPointTo.y\r\n );\r\n\r\n ctx.lineWidth = 1;\r\n ctx.strokeStyle = this.design.lineTextColor;\r\n ctx.stroke();\r\n ctx.closePath();\r\n };\r\n\r\n renderLetter = (ctx) => {\r\n let fontHeight = this.design.fontHeight,\r\n font = fontHeight + \"px \" + this.design.fontFamily;\r\n\r\n ctx.beginPath();\r\n ctx.font = font;\r\n ctx.textAlign = \"center\";\r\n ctx.fillStyle = this.design.fontColor;\r\n\r\n const pointsToRender = this.miteredPoints.map((point) => {\r\n return this.line.calculateRenderPosition(point);\r\n });\r\n\r\n pointsToRender.forEach((point, index) => {\r\n let next = index + 1;\r\n if (pointsToRender[next]) {\r\n const [parallelPointFrom, parallelPointTo] = getParallelPoints(point, pointsToRender[next], -this.design.letterMargin);\r\n let letter = numToLetter(next);\r\n let midPoint = getMidPoint(parallelPointFrom, parallelPointTo);\r\n let mText = ctx.measureText(letter);\r\n ctx.wrapText(letter, midPoint.x, midPoint.y, mText, fontHeight);\r\n }\r\n });\r\n\r\n ctx.lineWidth = 1;\r\n ctx.strokeStyle = this.design.lineTextColor;\r\n ctx.stroke();\r\n ctx.closePath();\r\n };\r\n\r\n renderThickness = (ctx) => {\r\n let lineDirection = this.line.getLineDirection(),\r\n fontHeight = this.design.fontHeight,\r\n font = fontHeight + \"px \" + this.design.fontFamily,\r\n xMarginLine = 0,\r\n yMarginLine = 0,\r\n xMarginImage = 0,\r\n yMarginImage = 0,\r\n xMarginValue = 0,\r\n yMarginValue = 0,\r\n pointField = {};\r\n void xMarginValue;\r\n void yMarginValue;\r\n\r\n switch (lineDirection.orientation) {\r\n case \"horizontal\": {\r\n yMarginLine = (lineDirection.newDirection === \"west\" ? this.design.thicknessMargin : -this.design.thicknessMargin);\r\n\r\n xMarginImage = (lineDirection.newDirection === \"east\" ? -20 : -20);\r\n yMarginImage = (lineDirection.newDirection === \"east\" ? 0 : -30);\r\n\r\n xMarginValue = (lineDirection.newDirection === \"east\" ? 15 : 15);\r\n yMarginValue = (lineDirection.newDirection === \"east\" ? 16 : -14);\r\n\r\n break;\r\n }\r\n case \"vertical\": {\r\n xMarginLine = (lineDirection.newDirection === \"south\" ? this.design.thicknessMargin: -this.design.thicknessMargin);\r\n\r\n xMarginImage = (lineDirection.newDirection === \"north\" ? 0 : -50);\r\n yMarginImage = (lineDirection.newDirection === \"north\" ? -10 : -10);\r\n\r\n xMarginValue = (lineDirection.newDirection === \"north\" ? 35 : -16);\r\n yMarginValue = (lineDirection.newDirection === \"north\" ? 5 : 6);\r\n break;\r\n }\r\n // todo rotation\r\n case \"NORTHWEST\": { break;}\r\n case \"NORTHEAST\": { break;}\r\n case \"SOUTHWEST\": { break;}\r\n case \"SOUTHEAST\": { break;}\r\n default:\r\n break;\r\n }\r\n\r\n ctx.beginPath();\r\n ctx.font = font;\r\n ctx.textAlign = \"center\";\r\n ctx.fillStyle = this.design.fontColor;\r\n\r\n this.miteredPoints.forEach((point, index) => {\r\n let next = index + 1;\r\n if(this.miteredPoints[next]) {\r\n let midPoint = getMidPoint(\r\n this.line.calculateRenderPosition(point),\r\n this.line.calculateRenderPosition(this.miteredPoints[next])\r\n );\r\n let segment = this.getSegmentBetweenPoints(point, this.miteredPoints[next]);\r\n let thicknessValue = segment.thickness.value;\r\n let mText = ctx.measureText(thicknessValue.toString());\r\n\r\n void mText;\r\n //debugger\r\n pointField.x = midPoint.x + xMarginLine;\r\n pointField.y = midPoint.y + yMarginLine;\r\n\r\n // blue line\r\n ctx.moveTo(pointField.x, pointField.y);\r\n ctx.lineTo(pointField.x - xMarginLine, pointField.y - yMarginLine);\r\n\r\n // thickness image\r\n DrawImage.renderImage('thickness', ctx,\r\n pointField.x + xMarginImage,\r\n pointField.y + yMarginImage,\r\n 8,\r\n 8,\r\n true,\r\n true\r\n );\r\n\r\n // thickness value rendered from NumberText\r\n // ctx.wrapText(\r\n // thicknessValue.toString(),\r\n // pointField.x + xMarginValue,\r\n // pointField.y + yMarginValue,\r\n // mText,\r\n // fontHeight\r\n // );\r\n }\r\n });\r\n\r\n ctx.lineWidth = 1;\r\n ctx.strokeStyle = this.design.lineTextColor;\r\n ctx.stroke();\r\n ctx.closePath();\r\n };\r\n\r\n renderSectionIndexOld = (ctx) => {\r\n let lineDirection = this.line.getLineDirection(),\r\n renderTo = this.line.calculateRenderPosition(this.line.to),\r\n renderFrom = this.line.calculateRenderPosition(this.line.from),\r\n fontHeight = this.design.fontHeight - 3,\r\n font = fontHeight + \"px \" + this.design.fontFamily,\r\n xMargin = 0,\r\n yMargin = 0,\r\n xOffset = 15,\r\n yOffset = 15,\r\n xWidth = 0,\r\n yWidth = 0,\r\n xMarginValue = 0,\r\n yMarginValue = 0,\r\n renderPos;\r\n\r\n const scale = Config.scale;\r\n let text = ('0' + this.sectionIndex).slice(-2);\r\n let mText = ctx.measureText(text);\r\n\r\n void xMargin;\r\n void yMargin;\r\n void scale;\r\n ctx.beginPath();\r\n ctx.font = font;\r\n ctx.textAlign = \"center\";\r\n ctx.fillStyle = this.design.fontColor;\r\n\r\n switch (lineDirection.orientation) {\r\n case \"horizontal\": {\r\n //measurement arrow offset\r\n yWidth = -this.design.sectionArrowWidth / 2;\r\n yMargin = (lineDirection.newDirection === \"east\" ? -this.design.sectionArrowWidth : this.design.sectionArrowWidth);\r\n yOffset = 0;\r\n\r\n // text and value\r\n xMarginValue = (lineDirection.newDirection === \"east\" ? -this.design.sectionIndexMargin: -this.design.sectionIndexMargin);\r\n renderPos = (lineDirection.newDirection === \"east\" ? renderFrom: renderTo);\r\n\r\n //render double circle\r\n RenderFigures.renderDoubleCircle(ctx, {x: renderPos.x + xMarginValue, y: renderPos.y + yMarginValue }, 12, 2);\r\n\r\n //render value\r\n ctx.save();\r\n ctx.translate(renderPos.x + xMarginValue, renderPos.y + yMarginValue);\r\n ctx.rotate(-Math.PI / 2);\r\n ctx.fillStyle = \"#fff\";\r\n ctx.wrapText(text, 2, 4, mText, fontHeight); // (text, x, y - additional offset\r\n ctx.restore();\r\n break;\r\n }\r\n case \"vertical\": {\r\n //measurement arrow offset\r\n xWidth = -this.design.sectionArrowWidth / 2;\r\n xMargin = (lineDirection.newDirection === \"north\" ? -this.design.sectionIndexMargin: this.design.sectionIndexMargin);\r\n xOffset = 0;\r\n\r\n // text and value\r\n yMarginValue = (lineDirection.newDirection === \"north\" ? -this.design.sectionIndexMargin : -this.design.sectionIndexMargin);\r\n renderPos = (lineDirection.newDirection === \"north\" ? renderTo: renderFrom);\r\n\r\n //render double circle\r\n RenderFigures.renderDoubleCircle(ctx,\r\n {x: renderPos.x + xMarginValue, y: renderPos.y + yMarginValue },\r\n 12,\r\n 2\r\n );\r\n\r\n //render value\r\n ctx.fillStyle = \"#fff\";\r\n // (text, +1, +4 - additional number offset\r\n ctx.wrapText(text, renderPos.x + xMarginValue + 1, renderPos.y + yMarginValue + 4, mText, fontHeight);\r\n break;\r\n }\r\n // todo rotation\r\n case \"NORTHWEST\": { break;}\r\n case \"NORTHEAST\": { break;}\r\n case \"SOUTHWEST\": { break;}\r\n case \"SOUTHEAST\": { break;}\r\n default:\r\n break;\r\n }\r\n\r\n //render measurement arrow\r\n this.drawFlatArrow( ctx,\r\n renderPos.x + xMarginValue - xWidth + xOffset,\r\n renderPos.y + yMarginValue - yWidth + yOffset,\r\n renderPos.x + xMarginValue + xWidth + xOffset,\r\n renderPos.y + yMarginValue + yWidth + yOffset\r\n );\r\n\r\n ctx.lineWidth = 1;\r\n ctx.strokeStyle = this.design.lineTextColor;\r\n ctx.stroke();\r\n ctx.closePath();\r\n };\r\n\r\n renderSectionIndex = (ctx) => {\r\n let lineDirection = this.line.getLineDirection(),\r\n midPoint = getMidPoint(this.line.to, this.line.from),\r\n fontHeight = this.design.fontHeight - 3,\r\n font = fontHeight + \"px \" + this.design.fontFamily,\r\n xMarginValue = 0,\r\n yMarginValue = 0,\r\n renderPos = this.line.calculateRenderPosition({\r\n pos: {x: midPoint.x, y: midPoint.y}\r\n });\r\n\r\n const scale = Config.scale;\r\n void scale;\r\n\r\n let text = ('0' + this.sectionIndex).slice(-2);\r\n let mText = ctx.measureText(text);\r\n\r\n ctx.beginPath();\r\n ctx.font = font;\r\n ctx.textAlign = \"center\";\r\n ctx.fillStyle = this.design.fontColor;\r\n\r\n switch (lineDirection.orientation) {\r\n case \"horizontal\": {\r\n // text and value\r\n yMarginValue = (lineDirection.newDirection === \"east\" ? -this.design.sectionIndexMargin: this.design.sectionIndexMargin);\r\n\r\n //render double circle\r\n RenderFigures.renderDoubleCircle(ctx, {x: renderPos.x + xMarginValue, y: renderPos.y + yMarginValue }, 12, 2);\r\n\r\n //render value\r\n ctx.fillStyle = \"#fff\";\r\n // (text, +1, +4 - additional number offset\r\n ctx.wrapText(text, renderPos.x + xMarginValue + 1, renderPos.y + yMarginValue + 4, mText, fontHeight);\r\n break;\r\n }\r\n case \"vertical\": {\r\n // text and value\r\n xMarginValue = (lineDirection.newDirection === \"north\" ? -this.design.sectionIndexMargin : this.design.sectionIndexMargin + fontHeight);\r\n\r\n //render double circle\r\n RenderFigures.renderDoubleCircle(ctx, {x: renderPos.x + xMarginValue, y: renderPos.y + yMarginValue }, 12, 2);\r\n\r\n //render value\r\n ctx.save();\r\n ctx.translate(renderPos.x + xMarginValue, renderPos.y + yMarginValue);\r\n ctx.rotate(-Math.PI / 2);\r\n ctx.fillStyle = \"#fff\";\r\n ctx.wrapText(text, 2, 4, mText, fontHeight); // (text, x, y - additional offset\r\n ctx.restore();\r\n break;\r\n }\r\n // todo rotation\r\n case \"NORTHWEST\": { break;}\r\n case \"NORTHEAST\": { break;}\r\n case \"SOUTHWEST\": { break;}\r\n case \"SOUTHEAST\": { break;}\r\n default:\r\n break;\r\n }\r\n\r\n ctx.lineWidth = 1;\r\n ctx.strokeStyle = this.design.lineTextColor;\r\n ctx.stroke();\r\n ctx.closePath();\r\n };\r\n\r\n drawArrow = (context, fromX, fromY, toX, toY) => {\r\n let headLen = 10, // length of head in pixels\r\n dx = toX - fromX,\r\n dy = toY - fromY,\r\n angle = Math.atan2(dy, dx);\r\n\r\n context.moveTo(fromX, fromY);\r\n context.lineTo(toX, toY);\r\n context.lineTo(toX - headLen * Math.cos(angle - Math.PI / 6), toY - headLen * Math.sin(angle - Math.PI / 6));\r\n context.moveTo(toX, toY);\r\n context.lineTo(toX - headLen * Math.cos(angle + Math.PI / 6), toY - headLen * Math.sin(angle + Math.PI / 6));\r\n\r\n context.moveTo(fromX, fromY);\r\n context.lineTo(fromX + headLen * Math.cos(angle - Math.PI / 6), fromY + headLen * Math.sin(angle - Math.PI / 6));\r\n context.moveTo(fromX, fromY);\r\n context.lineTo(fromX + headLen * Math.cos(angle + Math.PI / 6), fromY + headLen * Math.sin(angle + Math.PI / 6));\r\n };\r\n\r\n drawFlatArrow = (context, fromX, fromY, toX, toY) => {\r\n let headLen = 5, // length of head in pixels\r\n dx = toX - fromX,\r\n dy = toY - fromY,\r\n angle = Math.atan2(dy, dx);\r\n\r\n context.moveTo(fromX, fromY);\r\n context.lineTo(toX, toY);\r\n context.lineTo(toX - headLen * Math.cos(angle - Math.PI / 2), toY - headLen * Math.sin(angle - Math.PI / 2));\r\n context.moveTo(toX, toY);\r\n context.lineTo(toX - headLen * Math.cos(angle + Math.PI / 2), toY - headLen * Math.sin(angle + Math.PI / 2));\r\n\r\n context.moveTo(fromX, fromY);\r\n context.lineTo(fromX + headLen * Math.cos(angle - Math.PI / 2), fromY + headLen * Math.sin(angle - Math.PI / 2));\r\n context.moveTo(fromX, fromY);\r\n context.lineTo(fromX + headLen * Math.cos(angle + Math.PI / 2), fromY + headLen * Math.sin(angle + Math.PI / 2));\r\n };\r\n\r\n onMouseMove = (mousePos, e) => {\r\n void e;\r\n for (const point of this.miteredPoints) {\r\n if(this.isMouseOverPoint(mousePos, point)) {\r\n if (this.state.mouseDown) {\r\n this.movePointWithMouse(mousePos, point);\r\n if (this.type === MITERED_OVERLAY_TYPE.mitered) {\r\n workspace.miteredController.updateSection(this);\r\n } else if (this.type === MITERED_OVERLAY_TYPE.underlayment) {\r\n workspace.underlaymentController.updateSection(this);\r\n }\r\n }\r\n\r\n return this.state.mouseDown;\r\n }\r\n }\r\n };\r\n\r\n isMouseOverPoint = (mousePos, point) => {\r\n this.state.isHoveringPoint = !!point.isOverPointField();\r\n // console.log(\"point\", point.id);\r\n // console.log(\"this.state.hoveredPoint\", this.state.hoveredPoint.id);\r\n // console.log(\"mousePos\", this.state.isHoveringPoint);\r\n return this.state.isHoveringPoint || this.state.mouseDown && this.state.hoveredPoint && point.id === this.state.hoveredPoint.id;\r\n };\r\n\r\n onMouseUp = (mousePos, e) => {\r\n void mousePos;\r\n void e;\r\n if(this.state.mouseDown) {\r\n this.state.mouseDown = false;\r\n this.state.mouseDownPosition = null;\r\n }\r\n };\r\n\r\n onMouseDown = (mousePos, e) => {\r\n void e;\r\n const reduxState = store.getState();\r\n const menuOpened = reduxState.sqftMenuState.menuOpened;\r\n const activeButton = reduxState.sqftMenuState.activeButton;\r\n\r\n if (activeButton === SIDEBAR_NAVIGATION_BUTTONS.edge\r\n || activeButton === SIDEBAR_BUTTONS_MENU.delete\r\n ) {\r\n //do nothing if we want to remove or add edge\r\n } else if (this.state.isHoveringPoint) {\r\n this.state.mouseDown = true;\r\n // this.state.movePointDistance = getPointDistance(this.from, this.to);\r\n //todo move point\r\n this.state.mouseDownPosition = mousePos;\r\n for (const point in this.miteredPoints) {\r\n if (this.miteredPoints[point].isOverPointField(mousePos)) {\r\n this.state.hoveredPoint = this.miteredPoints[point]\r\n }\r\n }\r\n\r\n return true;\r\n } else if (this.line.isHovering() && menuOpened === SIDEBAR_NAVIGATION_BUTTONS.mitered) {\r\n //console.log('line is hovering');\r\n let [closest, secondPoint, isPrev] = this.getPointBetweenCords(mousePos);\r\n let newPoint = this.addPointBetweenPoints(closest, secondPoint, isPrev);\r\n if (isPrev) {\r\n this.addMeasurementBetweenPoints(newPoint, secondPoint);\r\n this.addMeasurementBetweenPoints(closest, newPoint);\r\n } else {\r\n this.addMeasurementBetweenPoints(closest, newPoint);\r\n this.addMeasurementBetweenPoints(newPoint, secondPoint);\r\n }\r\n this.removeMeasurementBetweenPoints(closest, secondPoint, isPrev);\r\n\r\n workspace.miteredController.updateSection(this);\r\n return true;\r\n }\r\n\r\n return false;\r\n };\r\n\r\n onMouseLeave = () => {\r\n this.state.isHoveringPoint = false;\r\n this.state.mouseDown = false;\r\n this.state.hoveredPoint = null;\r\n }\r\n}\r\n","import workspace from \"../../core/workspace\";\r\nimport store from \"./../../../../../../store\";\r\nimport SlabWorkspace from \"./slabWorkspace\";\r\nimport {getPointField} from \"../../../../helpers/sqftHelper\";\r\nimport sqftShape from \"../shapes/sqftShape\";\r\nimport {isDisabledInPopupShouldBeHidden, SHAPE_PART_ID, SQFT_MODE} from \"../../../../constants\";\r\nimport config from \"../../store/sqftConfig\";\r\nimport workspaceControllers from \"../../store/workspaceControllers\";\r\nimport RenderFigures from \"../../helpers/renderFigures\";\r\nimport RenderParts from \"../../helpers/renderParts\";\r\n\r\nexport const renderSlabRightPart = (ctx, isFullRender = false) => {\r\n let slabState = store.getState().sqftSlabState;\r\n let croppedImages = slabState.croppedSlabImages;\r\n let scale = workspace.getScale();\r\n let slabWorkspacePos = SlabWorkspace.getCenter();\r\n let shapes = workspace.getShapes();\r\n\r\n //this will render shapes without rotation\r\n shapes.forEach((shape) => {\r\n if (!(shape instanceof sqftShape)\r\n || shape.rotatedDegreesSlab !== 0\r\n || (isDisabledInPopupShouldBeHidden() && shape.isDisabledInPopup)\r\n || shape.partId === SHAPE_PART_ID.slabPlaceHolder\r\n ) {\r\n return\r\n }\r\n let pos = shape.getRegularPosition();\r\n //let posSlab = shape.shapeSlab.__absolutePos ? shape.getSlabAbsolutePosition() : shape.getSlabPosition();\r\n let posSlab = shape.shapeSlab.getPosition();\r\n let shapeRegularPointField = getPointField(pos.x, pos.y, workspace);\r\n let shapeSlabPointField = getPointField(posSlab.x, posSlab.y, SlabWorkspace);\r\n\r\n let staticOffset = {\r\n x: shapeRegularPointField.x - slabWorkspacePos.x + ctx.canvas.width / 2,\r\n y: shapeRegularPointField.y - slabWorkspacePos.y\r\n };\r\n ctx.save();\r\n !isFullRender ? clearSlabLeftPart(ctx) : null;\r\n\r\n //render borders only for core shapes\r\n ctx.beginPath();\r\n if (shape.partId === SHAPE_PART_ID.seamPiece) {\r\n shape.shapeSlab.renderLinesWithoutStroke(ctx, staticOffset, SQFT_MODE.regular);\r\n ctx.lineWidth = 0;\r\n ctx.strokeStyle = 'rgba(0,0,0,0.0)';\r\n } else {\r\n shape.shapeSlab.renderLinesWithoutStroke(ctx, staticOffset, SQFT_MODE.regular);\r\n //if (isFullRender) {\r\n // console.log(\"scale\", scale);\r\n // console.log(\"ctx.canvas.width / 2\", ctx.canvas.width / 2);\r\n // console.log(\"pos\", pos);\r\n // console.log(\"slabWorkspacePos2\", slabWorkspacePos);\r\n // console.log(\"offset = workspace.getOffset();\", workspace.getOffset());\r\n // console.log(\"shapeRegularPointField\", shapeRegularPointField);\r\n // console.log(\"staticOffset\", staticOffset);\r\n //}\r\n }\r\n ctx.closePath();\r\n ctx.stroke();\r\n\r\n //do not clip shapes with seam (clip only children)\r\n if (shape.isWithShapePieces()) {\r\n ctx.restore();\r\n return\r\n }\r\n ctx.clip();\r\n for (let slabIndex in croppedImages) {\r\n let movableImage = croppedImages[slabIndex];\r\n const movableImagePosition = movableImage.getPosition();\r\n let movableImagePointField = getPointField(movableImagePosition.x, movableImagePosition.y, SlabWorkspace);\r\n let movableImageSize = movableImage.getSize();\r\n\r\n // ctx.translate(\r\n // staticOffset.x + (movableImagePointField.x - shapeSlabPointField.x),\r\n // staticOffset.y + (movableImagePointField.y - shapeSlabPointField.y)\r\n // );\r\n // console.log(\"movableImagePosition\", movableImagePosition);\r\n // console.log(\"movableImage pos\", movableImage.pos);\r\n // console.log(\"posSlab\", posSlab);\r\n // console.log(\"pos\", pos);\r\n // console.log(\"shapeRegularPointField\", shapeRegularPointField);\r\n // console.log(\"movableImagePointField\", movableImagePointField);\r\n // console.log(\"shapeSlabPointField\", shapeSlabPointField);\r\n\r\n // debugger // eslint-disable-line no-debugger\r\n // ctx.rotate(90 * Math.PI / 180);\r\n\r\n ctx.drawImage(\r\n movableImage.getImage(),\r\n //shape.pos.x * scale, shape.pos.y * scale,\r\n ctx.canvas.width / 2 + (movableImagePointField.x - shapeSlabPointField.x + shapeRegularPointField.x) - slabWorkspacePos.x,\r\n (movableImagePointField.y - shapeSlabPointField.y + shapeRegularPointField.y) - slabWorkspacePos.y,\r\n movableImageSize.width * scale,\r\n movableImageSize.height * scale\r\n );\r\n }\r\n ctx.restore();\r\n });\r\n\r\n //this will render shapes with rotation ( it is translate point field to shape center and rotate it with images)\r\n shapes.forEach((shape) => {\r\n if (!(shape instanceof sqftShape)\r\n || shape.rotatedDegreesSlab === 0\r\n || (isDisabledInPopupShouldBeHidden() && shape.isDisabledInPopup)\r\n || shape.partId === SHAPE_PART_ID.slabPlaceHolder\r\n ) {\r\n return\r\n }\r\n let pos = shape.getRegularPosition();\r\n let posSlab = shape.shapeSlab.getPosition();\r\n let shapeRegularPointField = getPointField(pos.x, pos.y, workspace);\r\n let shapeSlabPointField = getPointField(posSlab.x, posSlab.y, SlabWorkspace);\r\n\r\n let staticOffset = {\r\n x: shapeRegularPointField.x - slabWorkspacePos.x + ctx.canvas.width / 2,\r\n y: shapeRegularPointField.y - slabWorkspacePos.y\r\n };\r\n\r\n let shapeCenter = shape.getCenter();\r\n //todo check if this can be used instead of shapeCenter()\r\n //let shapeCenterSlab = ShapeHelper.getCenterPoint(points, true);\r\n //void shapeCenterSlab;\r\n\r\n let shapeCenterOffset = {x: 0, y: 0};\r\n shapeCenterOffset.x = shapeCenter.x * scale\r\n shapeCenterOffset.y = shapeCenter.y * scale\r\n\r\n //console.log(\"pos\", pos);\r\n //console.log(\"shapeRegularPointField\", shapeRegularPointField);\r\n //console.log(\"shapeSlabPointField\", shapeSlabPointField);\r\n //console.log(\"shapeCenter\", shapeCenter);\r\n //console.log(\"staticOffset\", staticOffset);\r\n //console.log(\"shapeCenterOffset\", shapeCenterOffset);\r\n ctx.save();\r\n !isFullRender ? clearSlabLeftPart(ctx) : null;\r\n ctx.translate(staticOffset.x + shapeCenterOffset.x, staticOffset.y + shapeCenterOffset.y);\r\n ctx.rotate(shape.rotatedDegreesSlab * Math.PI / 180);\r\n //render borders only for core shapes\r\n ctx.beginPath();\r\n if (shape.partId === SHAPE_PART_ID.seamPiece) {\r\n shape.shapeSlab.renderLinesWithoutStroke(ctx, {x: -shapeCenterOffset.x, y: -shapeCenterOffset.y}, SQFT_MODE.slab);\r\n ctx.lineWidth = 0;\r\n ctx.strokeStyle = 'rgba(0,0,0,0.0)';\r\n //ctx.lineWidth = 3; //test mode\r\n //ctx.strokeStyle = 'rgba(0,0,0)'; //test mode\r\n } else {\r\n shape.shapeSlab.renderLinesWithoutStroke(ctx, {x: -shapeCenterOffset.x, y: -shapeCenterOffset.y}, SQFT_MODE.slab);\r\n }\r\n ctx.closePath();\r\n ctx.stroke();\r\n\r\n //do not clip shapes with seam (clip only children)\r\n if (shape.isWithShapePieces()) {\r\n ctx.restore();\r\n return\r\n }\r\n ctx.clip();\r\n for (let slabIndex in croppedImages) {\r\n let movableImage = croppedImages[slabIndex];\r\n const movableImagePosition = movableImage.getPosition();\r\n let movableImagePointField = getPointField(movableImagePosition.x, movableImagePosition.y, SlabWorkspace);\r\n let movableImageSize = movableImage.getSize();\r\n\r\n ctx.drawImage(\r\n movableImage.getImage(),\r\n -shapeCenterOffset.x + (movableImagePointField.x - shapeSlabPointField.x),\r\n -shapeCenterOffset.y + (movableImagePointField.y - shapeSlabPointField.y),\r\n movableImageSize.width * scale,\r\n movableImageSize.height * scale\r\n // ctx.canvas.width / 2 + (movableImagePointField.x - shapeSlabPointField.x + shapeRegularPointField.x) - slabWorkspacePos.x,\r\n // (movableImagePointField.y - shapeSlabPointField.y + shapeRegularPointField.y) - slabWorkspacePos.y,\r\n // movableImage.pos.x * scale,\r\n // movableImage.pos.y * scale,\r\n );\r\n }\r\n ctx.restore();\r\n renderDevMode(ctx, shape);\r\n });\r\n};\r\n\r\nconst clearSlabLeftPart = (ctx) => {\r\n ctx.beginPath();\r\n ctx.rect(ctx.canvas.width / 2, 0, ctx.canvas.width, ctx.canvas.height);\r\n ctx.closePath();\r\n ctx.stroke();\r\n ctx.clip();\r\n}\r\n\r\nexport const renderSlabWorkspace = (ctx) => {\r\n drawSlabRightPart(ctx);\r\n drawSlabMidDivider(ctx);\r\n};\r\n\r\nconst drawSlabMidDivider = (ctx) => {\r\n ctx.beginPath();\r\n ctx.strokeStyle = '#d5d5d5';\r\n ctx.lineWidth = 1;\r\n ctx.moveTo(SlabWorkspace.getRightPartWidth(ctx), 0);\r\n ctx.lineTo(SlabWorkspace.getRightPartWidth(ctx), ctx.canvas.height);\r\n ctx.stroke();\r\n};\r\n\r\nconst drawSlabRightPart = (ctx) => {\r\n ctx.fillStyle = '#ffffff';\r\n ctx.rect(SlabWorkspace.getRightPartWidth(ctx), 0, ctx.canvas.width, ctx.canvas.height);\r\n ctx.fill();\r\n};\r\n\r\nconst renderDevMode = (ctx, shape) => {\r\n if (config.isDevMode()) {\r\n // render pos\r\n ctx.save();\r\n ctx.beginPath();\r\n let pf = getPointField(shape.pos.x, shape.pos.y);\r\n ctx.arc(pf.x, pf.y, 5, 0, 2 * Math.PI);\r\n ctx.stroke();\r\n ctx.closePath();\r\n\r\n //render shape center\r\n ctx.beginPath();\r\n let shapeCenter = shape.getCenter();\r\n const pos = getPointField(shapeCenter.x, shapeCenter.y, this);\r\n ctx.arc(pos.x, pos.y, 12, 0, 2 * Math.PI);\r\n\r\n ctx.stroke();\r\n ctx.closePath();\r\n ctx.restore();\r\n }\r\n}\r\n\r\nexport const renderMeasurementsAroundSnappedShapes = (ctx) => {\r\n for (const snappedShapeGroup of workspaceControllers.snappedShapeGroups.getResources()) {\r\n const shapes = workspaceControllers.snappedShapeGroups.getSnappedShapes(snappedShapeGroup);\r\n if (shapes.length > 1) { //we will render only shape group if it has two shapes\r\n const measurementPoints = workspaceControllers.snappedShapeGroups.getMeasurementPoints(snappedShapeGroup);\r\n renderMeasurementArrows(ctx, measurementPoints);\r\n renderMeasurementLength(ctx, measurementPoints);\r\n //console.log(\"measurementPoints\", measurementPoints);\r\n\r\n //this is for the test purposes\r\n // const measurementPoints2 = sqftShapeManager.getShapesContourPointsPointField(shapes);\r\n // console.log(\"measurementPoints2\", measurementPoints2);\r\n // renderMeasurementArrows(ctx, measurementPoints2);\r\n // renderMeasurementLength(ctx, measurementPoints2);\r\n }\r\n }\r\n}\r\n\r\nexport const renderMeasurementArrows = (ctx, measurementPoints) => {\r\n RenderFigures.drawArrowsAroundPoints(ctx, measurementPoints);\r\n}\r\n\r\nexport const renderMeasurementLength = (ctx, measurementPoints) => {\r\n RenderParts.drawMeasurementAroundPoints(ctx, measurementPoints);\r\n}\r\n","class SlabAdditionalShape {\r\n line;\r\n backsplashShapeId;\r\n\r\n constructor(line, backsplashShapeId) {\r\n this.line = line;\r\n this.backsplashShapeId = backsplashShapeId;\r\n }\r\n}\r\n\r\nexport default SlabAdditionalShape;\r\n","import store from \"../../../../../store\";\r\nimport {changeResource, deleteAllResources} from \"../../../../../actions/sqftResourceFunctions\";\r\nimport {deleteAllMiteredSections} from \"../../../../../actions/sqftMiteredFunctions\";\r\nimport workspace from \"../core/workspace\";\r\nimport {RESOURCE_TYPE} from \"../../../constants\";\r\n\r\nconst sqftResourcesManager = {\r\n deleteAllResources: () => {\r\n store.dispatch(deleteAllResources());\r\n },\r\n deleteAllMiteredSections: () => {\r\n const reduxState = store.getState();\r\n const miteredSections = reduxState.sqftMiteredState.miteredSections;\r\n if (miteredSections.length) {\r\n store.dispatch(deleteAllMiteredSections());\r\n }\r\n },\r\n getAttachedToLineResource: (line) => {\r\n return workspace.getAttachedTo(line)\r\n },\r\n updateAttachedToLineResource: (attachedToResource) => {\r\n store.dispatch(changeResource(RESOURCE_TYPE.attachedToLine, attachedToResource));\r\n },\r\n getLineByAttachedItemId: (id) => {\r\n const state = store.getState();\r\n const attachedToLineResources = state.sqftResourceState.attachedToLine;\r\n const attachedItem = attachedToLineResources.find(attachedToLine => attachedToLine.id === id);\r\n if (attachedItem) {\r\n return workspace.getLineById(attachedItem.attachedToId);\r\n }\r\n },\r\n deleteAttachedItemById: (id) => {\r\n const line = sqftResourcesManager.getLineByAttachedItemId(id);\r\n\r\n if (line) {\r\n line.deleteAttachedItem();\r\n }\r\n }\r\n}\r\n\r\nexport default sqftResourcesManager\r\n","import workspace from \"../../workspace\";\r\n\r\nclass ShapeAbsolute {\r\n __shape;\r\n __intersectionPoints = [];\r\n __minLengthToIntersectionPoints;\r\n __absolutePos = null;\r\n __snappedWithShape = null;\r\n __snappedShapeGroup = null;\r\n\r\n constructor(shape) {\r\n this.__shape = shape;\r\n }\r\n setParentId(parentId) {\r\n this.__shape.shapeParent = parentId\r\n }\r\n setRotationDegreesSlab(rotationDegrees) {\r\n this.__shape.rotatedDegreesSlab = rotationDegrees\r\n }\r\n setAbsolutePos = (pos) => {\r\n this.__absolutePos = pos;\r\n };\r\n getAbsolutePosition = () => {\r\n return this.__absolutePos;\r\n };\r\n getIntersectionPoints = () => { return this.__intersectionPoints; };\r\n setIntersectionsPoints = (points) => { this.__intersectionPoints = points; };\r\n\r\n setSnappedWithShape = (shape) => { this.__snappedWithShape = shape}\r\n getSnappedWithShape = () => { return this.__snappedWithShape }\r\n\r\n setSnappedShapeGroup = (shapeGroup) => { this.__snappedShapeGroup = shapeGroup}\r\n getSnappedShapeGroup = () => { return this.__snappedShapeGroup }\r\n\r\n setMinLengthToIntersectionPoints = (length) => {\r\n this.__minLengthToIntersectionPoints = length;\r\n };\r\n\r\n import = (data) => {\r\n if (data.snappedWithShape && data.snappedWithShape.id) {\r\n const snappedWithShape = workspace.getShapeById(data.snappedWithShape.id);\r\n this.setSnappedWithShape(snappedWithShape);\r\n }\r\n\r\n this.setAbsolutePos(data ? data.absolutePosition : null);\r\n this.setIntersectionsPoints(data ? data.intersectionPoints : null);\r\n this.setSnappedShapeGroup(data ? data.snappedShapeGroup : null);\r\n }\r\n export = () => {\r\n const snappedWithShape = this.getSnappedWithShape();\r\n\r\n return {\r\n absolutePosition: this.getAbsolutePosition(),\r\n intersectionPoints: this.getIntersectionPoints(),\r\n snappedWithShape: snappedWithShape ? snappedWithShape.id : null,\r\n snappedShapeGroup: this.getSnappedShapeGroup(),\r\n }\r\n }\r\n}\r\n\r\nexport default ShapeAbsolute\r\n","import {getPointBetweenPoints, getPointDistance, orientation} from \"../helpers/sqftHelper\";\r\n\r\nconst setLinePoints = (movingLine, newFrom, newTo) => {\r\n movingLine.from.x = newFrom.x;\r\n movingLine.from.y = newFrom.y;\r\n movingLine.to.x = newTo.x;\r\n movingLine.to.y = newTo.y;\r\n};\r\n\r\n/**\r\n * Given a three lines detects moving points and sets correct new points X and Y values.\r\n * @param {Object} movingLine current moving line\r\n * @param {Object} nextLine\r\n * @param {Object} prevLine\r\n * @param {number} baseLineDistance -state value, that is overwritten on each mouseDown event\r\n * @param {number} yDiff Y difference of mouse move\r\n * @param {number} lineOrientation movingLine orientation\r\n */\r\nexport default function (\r\n movingLine,\r\n nextLine,\r\n prevLine,\r\n baseLineDistance,\r\n yDiff,\r\n lineOrientation\r\n) {\r\n let newFrom = {}, newTo = {}, diff;\r\n\r\n // 1) move line\r\n switch(lineOrientation) {\r\n case orientation.SOUTHEAST:\r\n case orientation.NORTHEAST:\r\n diff = -yDiff;\r\n break;\r\n case orientation.SOUTHWEST:\r\n case orientation.NORTHWEST:\r\n diff = yDiff;\r\n break;\r\n }\r\n newFrom = getPointBetweenPoints(movingLine.from, prevLine.from, diff);\r\n newTo = getPointBetweenPoints(movingLine.to, nextLine.to, diff);\r\n setLinePoints(movingLine, newFrom, newTo);\r\n const pointDistance2 = getPointDistance(newFrom, newTo);\r\n\r\n // 2) fix points corrections\r\n if (baseLineDistance !== pointDistance2) {\r\n switch(lineOrientation) {\r\n case orientation.SOUTHWEST:\r\n if (pointDistance2 < baseLineDistance) {\r\n const delta = (baseLineDistance - pointDistance2) / 4; //for ex. 26 - 25.4 = 0.6\r\n newFrom = {x: movingLine.from.x + delta, y: movingLine.from.y - delta};\r\n newTo = {x: movingLine.to.x - delta, y: movingLine.to.y + delta};\r\n } else {\r\n const delta = (pointDistance2 - baseLineDistance) / 4; //for ex. 26 - 25.4 = 0.6\r\n newFrom = {x: movingLine.from.x - delta, y: movingLine.from.y + delta};\r\n newTo = {x: movingLine.to.x + delta, y: movingLine.to.y - delta};\r\n }\r\n break;\r\n case orientation.SOUTHEAST:\r\n if (pointDistance2 < baseLineDistance) {\r\n const delta = (baseLineDistance - pointDistance2) / 4; //for ex. 26 - 25.4 = 0.6\r\n newFrom = {x: movingLine.from.x - delta, y: movingLine.from.y - delta};\r\n newTo = {x: movingLine.to.x + delta, y: movingLine.to.y + delta};\r\n } else {\r\n const delta = (pointDistance2 - baseLineDistance) / 4; //for ex. 26 - 25.4 = 0.6\r\n newFrom = {x: movingLine.from.x + delta, y: movingLine.from.y + delta};\r\n newTo = {x: movingLine.to.x - delta, y: movingLine.to.y - delta};\r\n }\r\n break;\r\n case orientation.NORTHEAST:\r\n if (pointDistance2 < baseLineDistance) {\r\n const delta = (baseLineDistance - pointDistance2) / 4; //for ex. 26 - 25.4 = 0.6\r\n newFrom = {x: movingLine.from.x - delta, y: movingLine.from.y + delta};\r\n newTo = {x: movingLine.to.x + delta, y: movingLine.to.y - delta};\r\n } else {\r\n const delta = (pointDistance2 - baseLineDistance) / 4; //for ex. 26 - 25.4 = 0.6\r\n newFrom = {x: movingLine.from.x + delta, y: movingLine.from.y - delta};\r\n newTo = {x: movingLine.to.x - delta, y: movingLine.to.y + delta};\r\n }\r\n break;\r\n case orientation.NORTHWEST:\r\n if (pointDistance2 < baseLineDistance) {\r\n const delta = (baseLineDistance - pointDistance2) / 4; //for ex. 26 - 25.4 = 0.6\r\n newFrom = {x: movingLine.from.x + delta, y: movingLine.from.y + delta};\r\n newTo = {x: movingLine.to.x - delta, y: movingLine.to.y - delta};\r\n } else {\r\n const delta = (pointDistance2 - baseLineDistance) / 4; //for ex. 26 - 25.4 = 0.6\r\n newFrom = {x: movingLine.from.x - delta, y: movingLine.from.y - delta};\r\n newTo = {x: movingLine.to.x + delta, y: movingLine.to.y + delta};\r\n }\r\n break;\r\n default:\r\n break;\r\n }\r\n setLinePoints(movingLine, newFrom, newTo);\r\n }\r\n}\r\n","import {getPointOnTheLine} from \"../../../../../helpers/sqftHelper\";\r\n\r\nexport const mathRound = (value) => Math.round(value * 100) / 100;\r\n\r\nfunction horizontalEastLineExpand(prevLine, nextLine, diff) {\r\n prevLine.from.x = mathRound(prevLine.from.x - diff/2);\r\n prevLine.to.x = mathRound(prevLine.to.x - diff/2);\r\n nextLine.from.x = mathRound(nextLine.from.x + diff/2);\r\n nextLine.to.x = mathRound(nextLine.to.x + diff/2);\r\n if(prevLine.isWithBumpout()) {\r\n prevLine.bumpoutOverlay.moveBumpout(diff / 2, 0);\r\n }\r\n if(nextLine.isWithBumpout()) {\r\n nextLine.bumpoutOverlay.moveBumpout(-diff / 2, 0);\r\n }\r\n if(prevLine.isWithMitered()) {\r\n prevLine.miteredOverlay.moveMitered(diff / 2, 0);\r\n }\r\n if(nextLine.isWithMitered()) {\r\n nextLine.miteredOverlay.moveMitered(-diff / 2, 0);\r\n }\r\n}\r\nfunction horizontalWestLineExpand(prevLine, nextLine, diff) {\r\n prevLine.from.x = mathRound(prevLine.from.x + diff/2);\r\n prevLine.to.x = mathRound(prevLine.to.x + diff/2);\r\n nextLine.from.x = mathRound(nextLine.from.x - diff/2);\r\n nextLine.to.x = mathRound(nextLine.to.x - diff/2);\r\n if(prevLine.isWithBumpout()) {\r\n prevLine.bumpoutOverlay.moveBumpout(-diff / 2, 0);\r\n }\r\n if(nextLine.isWithBumpout()) {\r\n nextLine.bumpoutOverlay.moveBumpout(diff / 2, 0);\r\n }\r\n if(prevLine.isWithBumpout()) {\r\n prevLine.miteredOverlay.moveMitered(-diff / 2, 0);\r\n }\r\n if(nextLine.isWithBumpout()) {\r\n nextLine.miteredOverlay.moveMitered(diff / 2, 0);\r\n }\r\n}\r\nfunction verticalSouthLineExpand(prevLine, nextLine, diff) {\r\n prevLine.from.y = mathRound(prevLine.from.y - diff/2);\r\n prevLine.to.y = mathRound(prevLine.to.y - diff/2);\r\n nextLine.from.y = mathRound(nextLine.from.y + diff/2);\r\n nextLine.to.y = mathRound(nextLine.to.y + diff/2);\r\n if(prevLine.isWithBumpout()) {\r\n prevLine.bumpoutOverlay.moveBumpout(0, diff / 2);\r\n }\r\n if(nextLine.isWithBumpout()) {\r\n nextLine.bumpoutOverlay.moveBumpout(0,-diff / 2);\r\n }\r\n}\r\nfunction verticalNorthLineExpand(prevLine, nextLine, diff) {\r\n prevLine.from.y = mathRound(prevLine.from.y + diff/2);\r\n prevLine.to.y = mathRound(prevLine.to.y + diff/2);\r\n nextLine.from.y = mathRound(nextLine.from.y - diff/2);\r\n nextLine.to.y = mathRound(nextLine.to.y - diff/2);\r\n if(prevLine.isWithBumpout()) {\r\n prevLine.bumpoutOverlay.moveBumpout(0,-diff / 2);\r\n }\r\n if(nextLine.isWithBumpout()) {\r\n nextLine.bumpoutOverlay.moveBumpout(0,diff / 2);\r\n }\r\n}\r\nexport default function(line, diff, isWallsLockMode) {\r\n // console.log(\"line\", line, diff);\r\n const lineDirection = line.getLineDirection();\r\n const shape = line.getParent();\r\n const prevLine = shape.getPrevLine(line);\r\n const nextLine = shape.getNextLine(line);\r\n switch (shape.shapeType) {\r\n case \"square\":\r\n if (lineDirection.orientation === \"horizontal\") {\r\n if (lineDirection.newDirection === \"east\") {\r\n horizontalEastLineExpand(prevLine, nextLine, diff);\r\n } else if (lineDirection.newDirection === \"west\") {\r\n horizontalWestLineExpand(prevLine, nextLine, diff);\r\n }\r\n } else if (lineDirection.orientation === \"vertical\") {\r\n if (lineDirection.newDirection === \"south\") {\r\n verticalSouthLineExpand(prevLine, nextLine, diff);\r\n } else if (lineDirection.newDirection === \"north\") {\r\n verticalNorthLineExpand(prevLine, nextLine, diff);\r\n }\r\n }\r\n break;\r\n case \"wideangle\": {\r\n const rotatedDegrees = line.getParent().rotatedDegrees;\r\n if (lineDirection.orientation === \"horizontal\") {\r\n if (lineDirection.newDirection === \"east\") {\r\n if (rotatedDegrees === 180 || rotatedDegrees === 270) {\r\n prevLine.from.x = mathRound(prevLine.from.x - diff);\r\n prevLine.to.x = mathRound(prevLine.to.x - diff);\r\n } else {\r\n nextLine.from.x = mathRound(nextLine.from.x + diff);\r\n nextLine.to.x = mathRound(nextLine.to.x + diff);\r\n }\r\n } else if (lineDirection.newDirection === \"west\") {\r\n const nextLineDirection = nextLine.getLineDirection();\r\n if (nextLineDirection.newDirection === \"north\") {\r\n if (rotatedDegrees === 90) {\r\n prevLine.from.x = mathRound(prevLine.from.x + diff);\r\n prevLine.to.x = mathRound(prevLine.to.x + diff);\r\n } else if (rotatedDegrees === 180 || rotatedDegrees === 270) {\r\n nextLine.from.x = mathRound(nextLine.from.x - diff);\r\n nextLine.to.x = mathRound(nextLine.to.x - diff);\r\n } else {\r\n horizontalWestLineExpand(prevLine, nextLine, diff);\r\n }\r\n } else {\r\n prevLine.from.x = mathRound(prevLine.from.x + diff);\r\n prevLine.to.x = mathRound(prevLine.to.x + diff);\r\n }\r\n }\r\n } else if (lineDirection.orientation === \"vertical\") {\r\n if (lineDirection.newDirection === \"south\") {\r\n const prevLineDirection = prevLine.getLineDirection();\r\n if (prevLineDirection.newDirection === \"west\") {\r\n nextLine.from.y = mathRound(nextLine.from.y + diff);\r\n nextLine.to.y = mathRound(nextLine.to.y + diff);\r\n } else {\r\n if (rotatedDegrees === 90 || rotatedDegrees === 180) {\r\n prevLine.from.y = mathRound(prevLine.from.y - diff);\r\n prevLine.to.y = mathRound(prevLine.to.y - diff);\r\n } else if (rotatedDegrees === 270) {\r\n nextLine.from.y = mathRound(nextLine.from.y + diff);\r\n nextLine.to.y = mathRound(nextLine.to.y + diff);\r\n } else {\r\n verticalSouthLineExpand(prevLine, nextLine, diff);\r\n }\r\n }\r\n } else if (lineDirection.newDirection === \"north\") {\r\n if (rotatedDegrees === 90 || rotatedDegrees === 180) {\r\n nextLine.from.y = mathRound(nextLine.from.y - diff);\r\n nextLine.to.y = mathRound(nextLine.to.y - diff);\r\n } else {\r\n prevLine.from.y = mathRound(prevLine.from.y + diff);\r\n prevLine.to.y = mathRound(prevLine.to.y + diff);\r\n }\r\n }\r\n } else {\r\n const pointOnTheLineFrom = getPointOnTheLine(line.from, line.to, diff / 2);\r\n const pointOnTheLineTo = getPointOnTheLine(line.to, line.from, diff / 2);\r\n line.to.x = pointOnTheLineTo.x;\r\n line.to.y = pointOnTheLineTo.y;\r\n line.from.x = pointOnTheLineFrom.x;\r\n line.from.y = pointOnTheLineFrom.y;\r\n }\r\n break;\r\n }\r\n case \"horseshoe\": {\r\n const rotatedDegrees = line.getParent().rotatedDegrees;\r\n const prevLineDirection = prevLine.getLineDirection();\r\n const nextLineDirection = nextLine.getLineDirection();\r\n\r\n console.log(\"-------------------------------\");\r\n console.log(\"line\", line);\r\n console.log(\"diff\", diff);\r\n console.log(\"shape.shapeType\", shape.shapeType);\r\n console.log(\"lineDirection.orientation\", lineDirection.orientation);\r\n console.log(\"lineDirection.newDirection\", lineDirection.newDirection);\r\n console.log(\"prevLineDirection.newDirection\", prevLineDirection.newDirection);\r\n console.log(\"nextLineDirection.newDirection\", nextLineDirection.newDirection);\r\n console.log(\"rotatedDegrees\", rotatedDegrees);\r\n if (lineDirection.orientation === \"horizontal\") {\r\n if (lineDirection.newDirection === \"east\") {\r\n if (prevLineDirection.newDirection === \"north\") {\r\n if (rotatedDegrees === 90) {\r\n nextLine.from.x = mathRound(nextLine.from.x + diff);\r\n nextLine.to.x = mathRound(nextLine.to.x + diff);\r\n } else if (rotatedDegrees === 180) {\r\n horizontalEastLineExpand(prevLine, nextLine, diff);\r\n } else if (rotatedDegrees === 270) {\r\n prevLine.from.x = mathRound(prevLine.from.x - diff);\r\n prevLine.to.x = mathRound(prevLine.to.x - diff);\r\n } else {\r\n horizontalEastLineExpand(prevLine, nextLine, diff);\r\n horizontalWestLineExpand(...line.getPairedLines(), diff);\r\n }\r\n } else if (rotatedDegrees === 90) {\r\n nextLine.from.x = mathRound(nextLine.from.x + diff);\r\n nextLine.to.x = mathRound(nextLine.to.x + diff);\r\n } else {\r\n horizontalEastLineExpand(prevLine, nextLine, diff);\r\n horizontalWestLineExpand(...line.getPairedLines(), diff);\r\n }\r\n } else if (lineDirection.newDirection === \"west\") {\r\n if (prevLineDirection.newDirection === \"south\") {\r\n if (rotatedDegrees === 90) {\r\n prevLine.from.x = mathRound(prevLine.from.x + diff);\r\n prevLine.to.x = mathRound(prevLine.to.x + diff);\r\n } else if (rotatedDegrees === 180) {\r\n horizontalWestLineExpand(prevLine, nextLine, diff);\r\n horizontalEastLineExpand(...line.getPairedLines(), diff);\r\n } else if (rotatedDegrees === 270) {\r\n nextLine.from.x = mathRound(nextLine.from.x - diff);\r\n nextLine.to.x = mathRound(nextLine.to.x - diff);\r\n } else {\r\n horizontalWestLineExpand(prevLine, nextLine, diff);\r\n }\r\n } else if (rotatedDegrees === 270) {\r\n nextLine.from.x = mathRound(nextLine.from.x - diff);\r\n nextLine.to.x = mathRound(nextLine.to.x - diff);\r\n } else {\r\n horizontalWestLineExpand(prevLine, nextLine, diff);\r\n horizontalEastLineExpand(...line.getPairedLines(), diff);\r\n }\r\n }\r\n } else if (lineDirection.orientation === \"vertical\") {\r\n if (lineDirection.newDirection === \"south\") {\r\n if (rotatedDegrees === 180) {\r\n prevLine.from.y = mathRound(prevLine.from.y - diff);\r\n prevLine.to.y = mathRound(prevLine.to.y - diff);\r\n } else {\r\n if (nextLineDirection.newDirection === \"west\") {\r\n if (rotatedDegrees === 270) {\r\n verticalSouthLineExpand(prevLine, nextLine, diff);\r\n verticalNorthLineExpand(...line.getPairedLines(), diff);\r\n } else {\r\n nextLine.from.y = mathRound(nextLine.from.y + diff);\r\n nextLine.to.y = mathRound(nextLine.to.y + diff);\r\n }\r\n } else {\r\n verticalSouthLineExpand(prevLine, nextLine, diff);\r\n verticalNorthLineExpand(...line.getPairedLines(), diff);\r\n }\r\n }\r\n } else if (lineDirection.newDirection === \"north\") {\r\n if (prevLineDirection.newDirection === \"west\") {\r\n if (rotatedDegrees === 90) {\r\n verticalNorthLineExpand(prevLine, nextLine, diff);\r\n verticalSouthLineExpand(...line.getPairedLines(), diff);\r\n } else if (rotatedDegrees === 180) {\r\n nextLine.from.y = mathRound(nextLine.from.y - diff);\r\n nextLine.to.y = mathRound(nextLine.to.y - diff);\r\n } else {\r\n prevLine.from.y = mathRound(prevLine.from.y + diff);\r\n prevLine.to.y = mathRound(prevLine.to.y + diff);\r\n }\r\n } else if (rotatedDegrees === 180) {\r\n nextLine.from.y = mathRound(nextLine.from.y - diff);\r\n nextLine.to.y = mathRound(nextLine.to.y - diff);\r\n } else {\r\n verticalNorthLineExpand(prevLine, nextLine, diff);\r\n verticalSouthLineExpand(...line.getPairedLines(), diff);\r\n }\r\n }\r\n } else {\r\n const pointOnTheLineFrom = getPointOnTheLine(line.from, line.to, diff / 2);\r\n const pointOnTheLineTo = getPointOnTheLine(line.to, line.from, diff / 2);\r\n line.to.x = pointOnTheLineTo.x;\r\n line.to.y = pointOnTheLineTo.y;\r\n line.from.x = pointOnTheLineFrom.x;\r\n line.from.y = pointOnTheLineFrom.y;\r\n }\r\n break;\r\n }\r\n default: {\r\n if (isWallsLockMode) {\r\n const prevPrevLine = shape.getPrevLine(prevLine);\r\n const nextNextLine = shape.getNextLine(nextLine);\r\n const prevPrevLineDirection = prevPrevLine.getLineDirection();\r\n const nextNextLineDirection = nextNextLine.getLineDirection();\r\n\r\n const pointOnTheLineFrom = getPointOnTheLine(line.from, line.to, diff / 2);\r\n const pointOnTheLineTo = getPointOnTheLine(line.to, line.from, diff / 2);\r\n const deltaX = pointOnTheLineFrom.x - line.from.x;\r\n const deltaY = pointOnTheLineFrom.y - line.from.y;\r\n\r\n //move line point\r\n line.to.x = pointOnTheLineTo.x;\r\n line.to.y = pointOnTheLineTo.y;\r\n line.from.x = pointOnTheLineFrom.x;\r\n line.from.y = pointOnTheLineFrom.y;\r\n\r\n //move prevLine point\r\n prevLine.from.x += deltaX;\r\n prevLine.from.y += deltaY;\r\n // return prevLine coordinate back to its axis if the line was\r\n if (prevPrevLineDirection.orientation === \"horizontal\") {\r\n prevLine.from.y -= deltaY;\r\n }\r\n if (prevPrevLineDirection.orientation === \"vertical\") {\r\n prevLine.from.x -= deltaX;\r\n }\r\n\r\n // move nextLine point\r\n nextLine.to.x -= deltaX;\r\n nextLine.to.y -= deltaY;\r\n // return nextLine coordinate back to its axis if the line was\r\n if (nextNextLineDirection.orientation === \"horizontal\") {\r\n nextLine.to.y += deltaY;\r\n }\r\n if (nextNextLineDirection.orientation === \"vertical\") {\r\n nextLine.to.x += deltaX;\r\n }\r\n\r\n } else {\r\n const pointOnTheLineFrom = getPointOnTheLine(line.from, line.to, diff / 2);\r\n const pointOnTheLineTo = getPointOnTheLine(line.to, line.from, diff / 2);\r\n line.to.x = pointOnTheLineTo.x;\r\n line.to.y = pointOnTheLineTo.y;\r\n line.from.x = pointOnTheLineFrom.x;\r\n line.from.y = pointOnTheLineFrom.y;\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport const getMaxResizeWidth = (line) => {\r\n const shape = line.getParent();\r\n switch (shape.shapeType) {\r\n case \"square\":\r\n case \"wideangle\":\r\n default:\r\n break;\r\n case \"horseshoe\":\r\n // const prevLineDirection = prevLine.getLineDirection();\r\n // const nextLineDirection = nextLine.getLineDirection();\r\n // const rotatedDegrees = line.getParent().rotatedDegrees;\r\n // if (lineDirection.orientation === \"horizontal\") {\r\n // if (lineDirection.newDirection === \"east\") {\r\n // if (prevLineDirection.orientation === \"vertical\" && prevLineDirection.newDirection === \"south\"\r\n // && nextLineDirection.orientation === \"vertical\" && nextLineDirection.newDirection === \"north\"\r\n // //&& rotatedDegrees !== 180\r\n // ) {\r\n // const maxRightX = shape.getNextLine(nextLine).to.x;\r\n // const maxLeftX = shape.getPrevLine(prevLine).from.x;\r\n // return maxRightX - maxLeftX - 2; // 1 per each line, line can't be 0\r\n // }\r\n // } else if (lineDirection.newDirection === \"west\") {\r\n // if (prevLineDirection.orientation === \"vertical\" && prevLineDirection.newDirection === \"north\"\r\n // && nextLineDirection.orientation === \"vertical\" && nextLineDirection.newDirection === \"south\"\r\n // //&& rotatedDegrees !== 0\r\n // ) {\r\n // const maxRightX = shape.getPrevLine(prevLine).from.x;\r\n // const maxLeftX = shape.getNextLine(nextLine).to.x;\r\n // return maxRightX - maxLeftX - 2; // 1 per each line, line can't be 0\r\n // }\r\n // }\r\n // } else if (lineDirection.orientation === \"vertical\") {\r\n // if (lineDirection.newDirection === \"south\") {\r\n // if (prevLineDirection.orientation === \"horizontal\" && prevLineDirection.newDirection === \"west\"\r\n // && nextLineDirection.orientation === \"horizontal\" && nextLineDirection.newDirection === \"east\"\r\n // //&& rotatedDegrees !== 90\r\n // ) {\r\n // const maxTopY = shape.getPrevLine(prevLine).from.y;\r\n // const maxBottomY = shape.getNextLine(nextLine).to.y;\r\n // return maxBottomY - maxTopY - 2; // 1 per each line, line can't be 0\r\n // }\r\n // } else if (lineDirection.newDirection === \"north\") {\r\n // if (prevLineDirection.orientation === \"horizontal\" && prevLineDirection.newDirection === \"east\"\r\n // && nextLineDirection.orientation === \"horizontal\" && nextLineDirection.newDirection === \"west\"\r\n // // && rotatedDegrees !== 270\r\n // ) {\r\n // const maxTopY = shape.getNextLine(nextLine).to.y;\r\n // const maxBottomY = shape.getPrevLine(prevLine).from.y;\r\n // return maxBottomY - maxTopY - 2; // 1 per each line, line can't be 0\r\n // }\r\n // }\r\n // }\r\n break;\r\n }\r\n return \"9999\";\r\n};\r\n","import point from \"../point\";\r\nimport line from \"../line\";\r\nimport config from \"../../../store/sqftConfig\";\r\n\r\nconst RECTANGLE_WIDTH = 150;\r\nconst RECTANGLE_HEIGHT = 26;\r\nconst RECTANGLE_HEIGHT_METRIC = 23.62;\r\n\r\nexport default function(rectangleWidth = RECTANGLE_WIDTH, rectangleHeight = 0) {\r\n let points;\r\n if (rectangleHeight === 0) {\r\n rectangleHeight = config.measureUnit === \"Imperial\" ? RECTANGLE_HEIGHT : RECTANGLE_HEIGHT_METRIC;\r\n }\r\n\r\n points = [\r\n new point(0, 0, \"lefttop\"),\r\n new point(rectangleWidth, 0, \"righttop\"),\r\n new point(rectangleWidth, rectangleHeight, \"rightbottom\"),\r\n new point(0, rectangleHeight, \"leftbottom\")\r\n ];\r\n\r\n return [\r\n new line(points[0], points[1]),\r\n new line(points[1], points[2]),\r\n new line(points[2], points[3]),\r\n new line(points[3], points[0])\r\n ];\r\n}\r\n","import Label from \"../../shapes/overlays/label\";\r\nimport {getShapeFeatureId} from \"../../../../../helpers/featureHelper\";\r\n\r\nconst SHAPE_LABELS = ['center_island_countertop', 'countertop'];\r\nexport const updateShape = (partId, shape, wizardGroup = null) => {\r\n shape.setPartId(partId);\r\n shape.setFeatureId(getShapeFeatureId(partId));\r\n if (!SHAPE_LABELS.includes(partId)) {\r\n shape.setType(partId);\r\n } else {\r\n shape.setType(undefined);\r\n }\r\n if (wizardGroup) {\r\n shape.setProperty(\"fromWizardGroupId\", wizardGroup.id);\r\n }\r\n};\r\n\r\nexport const initLabel = (labelText, partId, shape) => {\r\n let firstShapeLine = shape.getLines()[0];\r\n\r\n if(firstShapeLine.labelOverlay !== null) {\r\n firstShapeLine.labelOverlay.setLabelText(labelText);\r\n } else {\r\n firstShapeLine.labelOverlay = new Label();\r\n firstShapeLine.labelOverlay.init(firstShapeLine, labelText, partId);\r\n }\r\n};\r\n\r\nexport const initTitle = (labelText, partId, shape) => {\r\n let thirdShapeLine = shape.getLines()[2];\r\n thirdShapeLine.titleOverlay = new Label({\r\n labelTextColor: 'rgba(165, 174, 183, 0.66)',\r\n isTitle: true,\r\n lineOffset: 20\r\n });\r\n thirdShapeLine.titleOverlay.init(thirdShapeLine, labelText, partId);\r\n};\r\n","import EventManager from \"../store/sqftEventManager\";\r\nimport PointV2, {CORE_POINT_LAYOUTS} from \"../core/shapes/pointV2\";\r\nimport workspace from \"../core/workspace\";\r\nimport sqftConfig from \"../store/sqftConfig\";\r\nimport {\r\n getAngleRelativeToTheHorizontalAxis,\r\n getMousePositionOnField,\r\n getPointDistance\r\n} from \"../../../helpers/sqftHelper\";\r\n\r\n/**\r\n * @return {PointV2}\r\n */\r\nexport const getFreeDrawPoint = (pos) => {\r\n let pointState = {\r\n priority: EventManager.priorities.BOX_POINT,\r\n movable: true,\r\n isCentered: true,\r\n isResizedByPoint: false,\r\n isScaledByPoint: false,\r\n isVisibleOnHover: false\r\n };\r\n let pointDesign = {\r\n radius: 10,\r\n lineWidth: 1,\r\n layout: CORE_POINT_LAYOUTS.black\r\n };\r\n let wPos = workspace.getPosition();\r\n let scale = sqftConfig.scale;\r\n let offset = {\r\n x: (pos.x + wPos.x) / scale,\r\n y: (pos.y + wPos.y) / scale\r\n };\r\n\r\n return new PointV2(offset.x, offset.y, workspace, pointState, pointDesign);\r\n}\r\n\r\nexport const getLockedPoint = (existingPoint, pos, lockedAngleStep) => {\r\n const newPoint = getFreeDrawPoint(pos);\r\n const lockedPosition = getLockPointPos(existingPoint, lockedAngleStep);\r\n const lockedPositionOnField = getMousePositionOnField(lockedPosition.x, lockedPosition.y);\r\n newPoint.setPosition(lockedPositionOnField);\r\n\r\n return newPoint\r\n}\r\n\r\n/**\r\n * works only for 90 deg angle\r\n * @param pointV2\r\n * @param angleStep\r\n * @param mousePos\r\n * @return {{x: int, y: int}}\r\n */\r\nexport const getLockPointPos = (pointV2, angleStep = 90, mousePos = EventManager.LastKnownMousePos) => {\r\n const pointV2PointField = pointV2.getPointField();\r\n\r\n let rotateToMouseAngle = getAngleRelativeToTheHorizontalAxis(mousePos, pointV2PointField);\r\n let lineLength = getPointDistance(pointV2PointField, mousePos);\r\n const closestAngle = Math.round(rotateToMouseAngle / angleStep) * angleStep;\r\n const angleRad = (closestAngle * Math.PI) / 180;\r\n\r\n return {\r\n x: pointV2PointField.x + lineLength * Math.cos(angleRad),\r\n y: pointV2PointField.y + lineLength * Math.sin(angleRad)\r\n };\r\n};\r\n","import uuid from \"uuid\";\r\nimport _ from 'lodash';\r\n\r\nimport {pnpolyArray} from \"../../../../../lib/pnpoly\";\r\nimport {\r\n getParallelPoints,\r\n getPointBetweenPoints, getPointOnTheLine, isInnerCorner,\r\n measureDistanceToInches\r\n} from \"../../../../../helpers/sqftHelper\";\r\nimport sqftConfig from \"../../../store/sqftConfig\";\r\nimport store from \"../../../../../../../store\";\r\nimport {deleteResourceAttachedTo} from \"../../../../../../../actions/sqftResourceFunctions\";\r\nimport {RESOURCE_TYPE} from \"../../../../../constants\";\r\nimport workspace from \"../../workspace\";\r\nimport MiteredController from \"../../controls/mitered\";\r\nimport {addMiteredSection} from \"../../../../../../../actions/sqftMiteredFunctions\";\r\n\r\nexport default class LineCorner {\r\n\r\n line;\r\n id;\r\n _state = {\r\n mouseDown: false,\r\n isHovering: false,\r\n isCornerLineHovering: false,\r\n withEdge: false,\r\n withBacksplash: false,\r\n withWall: false,\r\n withId: null,\r\n backsplashHeight: null,\r\n isWithMitered: false,\r\n };\r\n attachedShape = null;\r\n miteredOverlay = null;\r\n design = {\r\n additionalOutlineHoverWidth: 3,\r\n };\r\n\r\n constructor(line) {\r\n this.line = line;\r\n this.id = uuid.v4(); //line.id;\r\n }\r\n\r\n get state() {\r\n return this._state;\r\n }\r\n\r\n set state(value) {\r\n this._state = value;\r\n }\r\n\r\n isWithMitered = () => {\r\n return this.state.isWithMitered\r\n }\r\n\r\n getAttachedShape() {\r\n return this.attachedShape;\r\n }\r\n\r\n getAttachedItems() {\r\n let isAnyItemsAttached = false;\r\n for (const attachedItemKey in this._state.attachedItems) {\r\n if (this._state.attachedItems[attachedItemKey]) {\r\n isAnyItemsAttached = true\r\n }\r\n }\r\n return this._state.withEdge\r\n || this._state.withBacksplash\r\n || this._state.withWall\r\n || this._state.withId\r\n || isAnyItemsAttached\r\n }\r\n\r\n deleteAttachedItem = () => {\r\n this.state.withEdge = false;\r\n this.state.withBacksplash = false;\r\n this.state.withWall = false;\r\n this.state.withId = null;\r\n this.state.attachedShape = null;\r\n store.dispatch(deleteResourceAttachedTo(RESOURCE_TYPE.attachedToLine, this));\r\n //this.state.overlay.removeLineText(); // todo\r\n };\r\n\r\n getLength(){\r\n return this.line.to.angle\r\n }\r\n\r\n getLineLength() {\r\n return this.line.addDecimalToLength(measureDistanceToInches(this.line.to.angle));\r\n }\r\n\r\n getLineLengthMm() {\r\n return measureDistanceToInches(this.line.to.angle).millimeters;\r\n }\r\n\r\n getParent() {\r\n return this.line.getParent()\r\n }\r\n\r\n addEdgeToCornerLine = (edgeName, id) => {\r\n this.state.withEdge = true;\r\n this.state.withBacksplash = false;\r\n this.state.withWall = false;\r\n this.state.withId = id;\r\n\r\n //self.overlay.renderEdgeText(edgeName); //todo\r\n };\r\n\r\n addBacksplashToCornerLine = (backsplashName, type, featureId, backsplashHeight) => {\r\n if (type === \"wall\") {\r\n this.state.withWall = true;\r\n this.state.withBacksplash = false;\r\n } else {\r\n this.state.withBacksplash = true;\r\n this.state.withWall = false;\r\n }\r\n this.state.withEdge = false;\r\n this.state.withId = featureId;\r\n this.state.backsplashHeight = backsplashHeight;\r\n //self.overlay.renderBacksplashText(backsplashName, type); //todo\r\n };\r\n\r\n getBacksplashHeight = () => {\r\n return this.state.backsplashHeight\r\n }\r\n\r\n addMiteredToCornerLine = () => {\r\n for (const attachedItemKey in state.attachedItems) {\r\n this.state.attachedItems[attachedItemKey] = false\r\n }\r\n if (!this.state.isWithMitered) {\r\n this.deleteAttachedItem();\r\n //if (this.getOrientation() === orientation.VERTICAL || this.getOrientation() === orientation.HORIZONTAL) {\r\n this.state.isWithMitered = true;\r\n if (workspace.miteredController === null) {\r\n workspace.miteredController = new MiteredController();\r\n }\r\n this.miteredOverlay = workspace.miteredController.createMiteredOverlay(this);\r\n this.miteredOverlay.init();\r\n\r\n return this.miteredOverlay;\r\n }\r\n\r\n return this.miteredOverlay\r\n };\r\n\r\n updateCornerHoverState(mousePos){\r\n this.state.isHovering = false;\r\n this.state.isCornerLineHovering = false;\r\n\r\n if(this.line.to.angle > 0 && this.isMouseOverAngle(mousePos)) {\r\n //console.log('mouse over outline angle');\r\n this.state.isHovering = true;\r\n }\r\n\r\n if(this.line.to.angle > 0 && this.isMouseOverCornerLine(mousePos)) {\r\n //console.log('mouse over angle purple line');\r\n this.state.isCornerLineHovering = true;\r\n }\r\n }\r\n\r\n export() {\r\n return {\r\n id: this.id,\r\n _state: _.clone(this._state),\r\n miteredOverlay: this.miteredOverlay ? this.miteredOverlay.export() : null,\r\n }\r\n }\r\n\r\n import(data) {\r\n this.id = data.id;\r\n this._state = data._state;\r\n if (data.miteredOverlay) {\r\n //addMiteredToLine\r\n if (workspace.miteredController === null) {\r\n workspace.miteredController = new MiteredController();\r\n }\r\n this.miteredOverlay = workspace.miteredController.createMiteredOverlay(this);\r\n this.miteredOverlay.import(this, data.mitered);\r\n this.state.isWithMitered = true;\r\n store.dispatch(addMiteredSection(this.miteredOverlay));\r\n }\r\n }\r\n\r\n isMouseOverAngle(mousePos) {\r\n //console.log('state.angleLinePoints', state.angleLinePoints);\r\n let field = this.getOutlineAngleLineField();\r\n let isHovering = pnpolyArray(field, mousePos)\r\n || pnpolyArray([field[0], field[2], field[1], field[3]], mousePos);\r\n\r\n return isHovering || this.state.mouseDown;\r\n }\r\n\r\n isMouseOverCornerLine(mousePos) {\r\n let field = this.getAngleLineField();\r\n let isHovering = pnpolyArray(field, mousePos)\r\n || pnpolyArray([field[0], field[2], field[1], field[3]], mousePos);\r\n\r\n return isHovering || this.state.mouseDown ;\r\n }\r\n\r\n getAngleLineField() {\r\n const angleLinePoints = this.getAnglePoints();\r\n const design = this.line.getDesign();\r\n let lineField;\r\n\r\n if( angleLinePoints.cordCornerFrom === undefined ) {\r\n return {}\r\n }\r\n\r\n let outlineMargin = design.outlineWidth + this.design.additionalOutlineHoverWidth;\r\n\r\n // line /\r\n if(angleLinePoints.cordCornerFrom.y < angleLinePoints.cordCornerTo.y && angleLinePoints.cordCornerFrom.x > angleLinePoints.cordCornerTo.x\r\n || angleLinePoints.cordCornerFrom.y > angleLinePoints.cordCornerTo.y && angleLinePoints.cordCornerFrom.x < angleLinePoints.cordCornerTo.x\r\n ){\r\n lineField = [\r\n [angleLinePoints.cordCornerFrom.x + outlineMargin, angleLinePoints.cordCornerFrom.y + outlineMargin],\r\n [angleLinePoints.cordCornerTo.x + outlineMargin, angleLinePoints.cordCornerTo.y + outlineMargin],\r\n [angleLinePoints.cordCornerFrom.x - outlineMargin, angleLinePoints.cordCornerFrom.y - outlineMargin],\r\n [angleLinePoints.cordCornerTo.x - outlineMargin, angleLinePoints.cordCornerTo.y - outlineMargin],\r\n ];\r\n // line \\\r\n } else {\r\n lineField = [\r\n [angleLinePoints.cordCornerTo.x + outlineMargin, angleLinePoints.cordCornerTo.y - outlineMargin],\r\n [angleLinePoints.cordCornerFrom.x + outlineMargin, angleLinePoints.cordCornerFrom.y - outlineMargin],\r\n [angleLinePoints.cordCornerTo.x - outlineMargin, angleLinePoints.cordCornerTo.y + outlineMargin],\r\n [angleLinePoints.cordCornerFrom.x - outlineMargin, angleLinePoints.cordCornerFrom.y + outlineMargin],\r\n ];\r\n }\r\n\r\n return lineField\r\n }\r\n\r\n getOutlineAngleLineField() {\r\n const angleLinePoints = this.getAnglePoints();\r\n const design = this.line.getDesign();\r\n let lineField;\r\n\r\n if( angleLinePoints.cord1 === undefined ) {\r\n return {}\r\n }\r\n\r\n let outlineMargin = design.outlineWidth + this.design.additionalOutlineHoverWidth;\r\n\r\n // line /\r\n if(angleLinePoints.cord2.y < angleLinePoints.cord3.y && angleLinePoints.cord2.x > angleLinePoints.cord3.x\r\n || angleLinePoints.cord2.y > angleLinePoints.cord3.y && angleLinePoints.cord2.x < angleLinePoints.cord3.x\r\n ){\r\n lineField = [\r\n [angleLinePoints.cord2.x + outlineMargin, angleLinePoints.cord2.y + outlineMargin],\r\n [angleLinePoints.cord3.x + outlineMargin, angleLinePoints.cord3.y + outlineMargin],\r\n [angleLinePoints.cord2.x - outlineMargin, angleLinePoints.cord2.y - outlineMargin],\r\n [angleLinePoints.cord3.x - outlineMargin, angleLinePoints.cord3.y - outlineMargin],\r\n ];\r\n // line \\\r\n } else {\r\n lineField = [\r\n [angleLinePoints.cord3.x + outlineMargin, angleLinePoints.cord3.y - outlineMargin],\r\n [angleLinePoints.cord2.x + outlineMargin, angleLinePoints.cord2.y - outlineMargin],\r\n [angleLinePoints.cord3.x - outlineMargin, angleLinePoints.cord3.y + outlineMargin],\r\n [angleLinePoints.cord2.x - outlineMargin, angleLinePoints.cord2.y + outlineMargin],\r\n ];\r\n }\r\n\r\n return lineField\r\n }\r\n\r\n getAnglePoints() {\r\n const lineDirection = this.line.getParent().getAngleDirection(this.line),\r\n renderTo = this.line.calculateRenderPosition(this.line.to),\r\n renderFrom = this.line.calculateRenderPosition(this.line.from),\r\n nextLine = this.line.getParent().getNextLine(this.line),\r\n nextLineRenderTo = nextLine.calculateRenderPosition(nextLine.to),\r\n design = this.line.getDesign();\r\n\r\n let angleLinePoints = {};\r\n\r\n switch (lineDirection.orientation) {\r\n case \"horizontal\":\r\n case \"vertical\":\r\n case \"NORTHWEST\":\r\n case \"NORTHEAST\":\r\n case \"SOUTHWEST\":\r\n case \"SOUTHEAST\": {\r\n nextLine.setLinePoints();\r\n if (this.line.drawLineTo === undefined || this.line.drawLineFrom === undefined) {\r\n this.line.setLinePoints();\r\n }\r\n\r\n const cord1 = this.line.drawLineTo;\r\n const cord4 = getPointOnTheLine(nextLine.drawLineFrom, nextLine.drawLineTo, design.outlineMargin); // +design.outlineMargin is to prevent overlapping\r\n\r\n // purple corner line\r\n // const renderTo = this.line.calculateRenderPosition(this.line.to);\r\n // const renderFrom = this.line.calculateRenderPosition(this.line.from);\r\n // const radiusMultiplier = Math.sqrt( Math.pow(this.getLength(), 2) * 2) * sqftConfig.scale;\r\n // const nextLineRenderTo = this.line.calculateRenderPosition(nextLine.to);\r\n\r\n const radiusMultiplier = Math.sqrt( Math.pow(this.line.to.angle, 2) * 2);\r\n const radius = radiusMultiplier * sqftConfig.scale;\r\n const isLineCornerInner = isInnerCorner(this.line.getParent(), renderFrom, renderTo, nextLineRenderTo);\r\n const pointIndent = isLineCornerInner ? 4 : -4;\r\n const pointOnTheBlueLine = getPointBetweenPoints(renderTo, renderFrom, radius / 2 + pointIndent);\r\n const pointOnTheBlueNextLine = getPointBetweenPoints(renderTo, nextLineRenderTo, radius / 2 + pointIndent);\r\n const [cord2] = getParallelPoints(renderFrom, pointOnTheBlueLine,-design.outlineMargin);\r\n const [cord3] = getParallelPoints(nextLineRenderTo, pointOnTheBlueNextLine, design.outlineMargin);\r\n\r\n const cordCornerIndent = isLineCornerInner && this.line.to.angle < design.outlineMargin\r\n ? 0\r\n : -3;\r\n const cordCornerFrom = getPointOnTheLine(cord2, cord3, cordCornerIndent * sqftConfig.scale); // set offset from corner\r\n const cordCornerTo = getPointOnTheLine(cord3, cord2, cordCornerIndent * sqftConfig.scale); // set offset from corner\r\n // v2\r\n //let [cordCornerTo, cordCornerFrom] = getParallelPoints(pointOnTheBlueLine, pointOnTheBlueNextLine, -9);\r\n\r\n angleLinePoints = {\r\n cord1: {\r\n x: cord1.x,\r\n y: cord1.y\r\n },\r\n cord2: {\r\n x: cord2.x,\r\n y: cord2.y\r\n },\r\n cord3: {\r\n x: cord3.x,\r\n y: cord3.y\r\n },\r\n cord4: {\r\n x: cord4.x,\r\n y: cord4.y\r\n },\r\n cordCornerFrom: {\r\n x: cordCornerFrom.x,\r\n y: cordCornerFrom.y\r\n },\r\n cordCornerTo: {\r\n x: cordCornerTo.x,\r\n y: cordCornerTo.y\r\n }\r\n };\r\n break;\r\n }\r\n default:\r\n break;\r\n }\r\n //wtf?\r\n angleLinePoints.cord2.width = sqftConfig.fieldWidth;\r\n angleLinePoints.cord3.width = sqftConfig.fieldWidth;\r\n angleLinePoints.cord2.height = sqftConfig.fieldWidth;\r\n angleLinePoints.cord3.height = sqftConfig.fieldWidth;\r\n\r\n return angleLinePoints;\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { connect } from \"react-redux\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nclass UiSelect extends Component {\r\n\r\n static propTypes = {\r\n type: PropTypes.number,\r\n selectItems: PropTypes.array.isRequired,\r\n itemClick: PropTypes.func,\r\n valueText: PropTypes.oneOfType([PropTypes.object, PropTypes.string]),\r\n value: PropTypes.any,\r\n withCheckboxes: PropTypes.bool,\r\n className: PropTypes.string,\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n toggle: false,\r\n };\r\n }\r\n\r\n componentWillUnmount() {\r\n window.removeEventListener('click', this.handleWrapperBlur);\r\n }\r\n\r\n handleToggleDropdown = () => {\r\n this.setState({\r\n toggle: !this.state.toggle\r\n }, () => {\r\n setTimeout(() => {\r\n this.state.toggle\r\n ? window.addEventListener('click', this.handleWrapperBlur)\r\n : window.removeEventListener('click', this.handleWrapperBlur)\r\n }, 0)\r\n })\r\n };\r\n\r\n handleItemClick = (selectItem) => {\r\n this.handleToggleDropdown();\r\n this.props.itemClick(selectItem);\r\n };\r\n\r\n handleWrapperBlur = (e) => {\r\n const disallowClasses = [\".ui-checkbox, .ui-checkbox__label\", \".ui-select2__dropdown\",\r\n \".ui-select2__dropdown-back\", \".ui-select2__dropdown-list-item\", \".ui-select__dropdown\",\r\n \".ui-select__dropdown-back\", \".ui-select__dropdown-list-item\"];\r\n if (this.state.toggle && !disallowClasses.some(cls => e.target.closest(cls))) {\r\n this.handleToggleDropdown();\r\n }\r\n };\r\n\r\n getSelectText = (itemText) => {\r\n switch (itemText) {\r\n case \"4in\":\r\n case \"6in\":\r\n case \"18in\":\r\n case \"Full\":\r\n return \r\n default:\r\n return itemText\r\n }\r\n };\r\n\r\n render() {\r\n\r\n const baseClass = this.props.type === 1 ? \"ui-select\" : \"ui-select\"+this.props.type;\r\n const dropDownStyles = this.state.toggle\r\n ? { height: this.props.selectItems.length * (this.props.withCheckboxes ? 40 : 34)}\r\n : {};\r\n\r\n return (\r\n
    \r\n
    \r\n {this.props.valueText}\r\n {this.props.value ? (\r\n {this.getSelectText(this.props.value)}\r\n ) : null}\r\n
    \r\n
    \r\n
      \r\n {this.props.children || this.props.selectItems.map((selectItem, index) => {\r\n return (\r\n
    • this.handleItemClick(selectItem)}\r\n className={baseClass+\"__dropdown-list-item\"}>\r\n {this.getSelectText(selectItem.text || selectItem)}\r\n
    • \r\n )\r\n })}\r\n
    \r\n
    \r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n windowWidth: store.serverState.windowWidth,\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, {\r\n})(UiSelect);\r\n","import invert from 'lodash/invert';\r\nimport snakeCase from 'lodash/snakeCase';\r\n\r\nimport LayoutCommonNew from \"../../visComponents/layoutCommonNew\";\r\n\r\nimport {LayoutType, LayoutAbbreviation, METADATA, ShowerHeadTypes} from \"./constants\";\r\nimport zIndexes from \"./zIndex\";\r\n\r\nimport Other from \"./parts/other\";\r\nimport NonVisualizerSubPart from \"./subparts/nonVisualizerSubPart\";\r\nimport DesignNavigationItem from \"../../visComponents/designNavigationItem\";\r\nimport Background from \"./parts/background\";\r\nimport {ShowerAccessories} from \"./parts/showerAccessories\";\r\nimport {Toilet} from \"./parts/toilet\";\r\nimport {WindowParent} from \"./parts/windowParent\";\r\nimport Floor from \"./parts/floor\";\r\nimport Walls from \"./parts/walls\";\r\nimport {Shower} from \"./parts/shower\";\r\nimport {Vanity} from \"./parts/vanity\";\r\nimport {ShowerTubCombo} from \"./parts/showerTubCombo\";\r\nimport Globals from \"./parts/globals\";\r\nimport {Bathtub} from \"./parts/bathtub\";\r\nimport {AVAILABLE_VISUALIZER_TYPES} from \"../../../config\";\r\nimport {Accessories} from \"./parts/accessories\";\r\n\r\nexport class Layout extends LayoutCommonNew {\r\n\r\n /**\r\n * @type {int}\r\n */\r\n defaultType = LayoutType.Layout1;\r\n type = this.defaultType;\r\n scene = \"1\";\r\n visualizerType = AVAILABLE_VISUALIZER_TYPES.bvLook;\r\n localStorageKey = \"bvLookState\";\r\n layersBinding = \"BathroomV5\";\r\n layoutNames = LayoutAbbreviation;\r\n layoutTypes = LayoutType;\r\n zIndexes = zIndexes.layouts;\r\n excludedPartIdsFromHover = [\"background_bg\", \"walls_ceiling\", \"front_wall_crop\", \"left_wall_crop\",\r\n \"right_wall_crop\", \"shower_wall_mirror\", \"window_body\", \"shower_screen\", \"skirting_board\"];\r\n checkMorePointsPartIds = [\"vanity_faucet\", \"vanity_sink\", \"shower_fixture\", \"bathtub_fixture\", \"towel_bar\",\r\n \"robe_hook\", \"towel_ring\", \"soap_dish\", \"corner_shelf\"];\r\n\r\n constructor(props) {\r\n super(props);\r\n this.parts[Background.id] = new Background();\r\n this.parts[Walls.id] = new Walls();\r\n this.parts[Vanity.id] = new Vanity();\r\n this.parts[Shower.id] = new Shower();\r\n this.parts[ShowerTubCombo.id] = new ShowerTubCombo();\r\n this.parts[ShowerAccessories.id] = new ShowerAccessories();\r\n this.parts[Accessories.id] = new Accessories();\r\n this.parts[Bathtub.id] = new Bathtub();\r\n this.parts[Toilet.id] = new Toilet();\r\n this.parts[Floor.id] = new Floor();\r\n this.parts[WindowParent.id] = new WindowParent();\r\n // this.parts[Ceiling.id] = new Ceiling();\r\n this.parts[Globals.id] = new Globals();\r\n this.parts[Other.id] = new Other();\r\n Object.values(this.parts).forEach(part => part.layout = this);\r\n }\r\n\r\n fixFeatureMetaData(dbFeature) {\r\n dbFeature.metaData.RoomLayout = dbFeature.metaData.RoomLayout.map((mValue) => {\r\n mValue = (mValue || \"\").replace(\"Look \", \"\").replace(\"Layout\", \"\");\r\n if (+mValue >= 10) {\r\n if (document.kvConfig.userId === 140067) {\r\n mValue = (+mValue - 10) + \"\"\r\n } else {\r\n dbFeature.isFromAsRoom = true;\r\n }\r\n }\r\n if (!mValue.includes(\"Layout\")) {\r\n mValue = \"Layout\" + mValue\r\n }\r\n return mValue\r\n });\r\n // [\"ShowerSize\", \"SplitWallType\"].forEach(metaName => { // splitWallType should not use 0 as all\r\n [\"ShowerSize\"].forEach(metaName => {\r\n if (Array.isArray(dbFeature.metaData[metaName])) {\r\n if (dbFeature.metaData[metaName].includes(\"0\")) {\r\n dbFeature.metaData[metaName] = [METADATA.ALL]\r\n } else if (dbFeature.metaData[metaName].includes(\"30\")) {\r\n dbFeature.metaData[metaName] = dbFeature.metaData[metaName].map(metaValue => {\r\n if (metaValue === \"30\") { // we have 30 and 36, but they should be the same. we decided to make all 36 as the shower body\r\n return \"36\"\r\n }\r\n return metaValue\r\n })\r\n }\r\n }\r\n });\r\n if (Array.isArray(dbFeature.metaData[\"Side\"]) && dbFeature.metaData[\"Side\"].length) {\r\n dbFeature.metaData.layerPosition = dbFeature.metaData[\"Side\"][0]\r\n }\r\n Object.keys(dbFeature.metaData).forEach(key => {\r\n if (Array.isArray(dbFeature.metaData[key]) && (key !== \"CropCoords\")) {\r\n dbFeature.metaData[key] = dbFeature.metaData[key].flatMap(metaValue => {\r\n if (typeof metaValue === \"string\") {\r\n if (metaValue.includes(\", \")) {\r\n return metaValue.split(\", \")\r\n } else if (metaValue.includes(\",\")) {\r\n return metaValue.split(\",\")\r\n }\r\n }\r\n return metaValue\r\n })\r\n }\r\n });\r\n return dbFeature\r\n }\r\n\r\n getCurrentLayoutName(type = this.type) {\r\n return invert(LayoutType)[type];\r\n }\r\n\r\n getCurrentLayoutAbbreviation() {\r\n return LayoutAbbreviation[this.getCurrentLayoutName()]\r\n }\r\n\r\n addNonVisualizerSubPart(featureGroupName){\r\n const otherParent = this.parts[Other.id];\r\n const partId = snakeCase(featureGroupName);\r\n let relatedItem = otherParent.relatedItems.find(relatedItem => relatedItem.partId === partId);\r\n if (!relatedItem) {\r\n relatedItem = new NonVisualizerSubPart(true, partId, featureGroupName);\r\n relatedItem.getParent = () => otherParent;\r\n otherParent.relatedItems.push(relatedItem);\r\n }\r\n return new DesignNavigationItem(relatedItem.partName, relatedItem)\r\n }\r\n\r\n addSpecificPropertiesToLocalStorage(bvState, useNames, returnAllFeatures= false) {\r\n const shower = this.parts[Shower.id];\r\n const showerTubCombo = this.parts[ShowerTubCombo.id];\r\n bvState[\"shower_head_type\"] = shower ? shower[\"shower_head_type\"] : \"\";\r\n bvState[\"shower_hand_type\"] = shower ? shower[\"shower_hand_type\"] : \"\";\r\n const vanityParent = this.parts[Vanity.id];\r\n bvState[\"vanity_type\"] = vanityParent ? vanityParent[\"vanity_type\"] : \"\";\r\n bvState.shower_tub_combo_is_active = shower.showerTubComboIsActive();\r\n bvState.bottom_tub = showerTubCombo.bottomTub;\r\n bvState.shower_floor_is_active = shower.showerFloorIsActive;\r\n return super.addSpecificPropertiesToLocalStorage(bvState, useNames, returnAllFeatures)\r\n }\r\n\r\n setActiveFeaturesFromObject(bvState, isCartAndUserStatedUpdateNeeded, useNames,\r\n needToChangeLayout, firstLoad, isFake) {\r\n const shower = this.parts[Shower.id];\r\n const showerTubCombo = this.parts[ShowerTubCombo.id];\r\n\r\n if (shower && bvState && bvState[\"shower_head_type\"]) {\r\n if (bvState[\"shower_head_type\"] === ShowerHeadTypes.shower_arm && !bvState[\"shower_arm\"] && bvState[\"shower_fixture\"]) {\r\n bvState[\"shower_head_type\"] = ShowerHeadTypes.shower_fixture; // fix for existing logic\r\n }\r\n shower.setShowerHeadType(bvState[\"shower_head_type\"]);\r\n }\r\n if (shower && bvState && bvState[\"shower_hand_type\"]) {\r\n shower.setShowerHandType(bvState[\"shower_hand_type\"]);\r\n }\r\n const vanityParent = this.parts[Vanity.id];\r\n vanityParent[\"vanity_type\"] = bvState[\"vanity_type\"]; // set it in any case! for standalone sink we are disabling vanity_type\r\n if (bvState[\"shower_tub_combo_is_active\"]) {\r\n showerTubCombo.setShowerTubCombo();\r\n if (bvState.bottom_tub) {\r\n showerTubCombo.bottomTub = bvState.bottom_tub\r\n }\r\n } else if (showerTubCombo.showerTubComboIsActive) {\r\n showerTubCombo.showerTubComboIsActive = false\r\n }\r\n if (bvState[\"shower_floor_is_active\"]) {\r\n shower.showerFloorIsActive = bvState[\"shower_floor_is_active\"];\r\n }\r\n return super.setActiveFeaturesFromObject(bvState, isCartAndUserStatedUpdateNeeded, useNames, needToChangeLayout, firstLoad, isFake)\r\n }\r\n\r\n}\r\n","import {Part} from \"../part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport { showerAccessoriesThumbnail } from '../../../bvComponent/core/assets';\r\nimport LargeCornerSeat from \"../subparts/showerAccessories/largeCornerSeat\";\r\nimport SoapDish from \"../subparts/showerAccessories/soapDish\";\r\nimport CornerCaddie from \"../subparts/showerAccessories/cornerCaddie\";\r\nimport LargeCornerCaddie from \"../subparts/showerAccessories/largeCornerCaddie\";\r\nimport GrabBar from \"../subparts/showerAccessories/grabBar\";\r\nimport CornerShelf from \"../subparts/showerAccessories/cornerShelf\";\r\nimport ShowerPod from \"../subparts/showerAccessories/showerPod\";\r\nimport Seats from \"../subparts/showerAccessories/seats\";\r\nimport ShowerRod from \"../subparts/showerAccessories/showerRod\";\r\nimport ToiletBrush from \"../subparts/showerAccessories/toiletBrush\";\r\nimport PaperHolder from \"../subparts/showerAccessories/paperHolder\";\r\nimport RobeHook from \"../subparts/showerAccessories/robeHook\";\r\nimport TowelBar from \"../subparts/showerAccessories/towelBar\";\r\nimport TowelRing from \"../subparts/showerAccessories/towelRing\";\r\nimport GlassHolder from \"../subparts/showerAccessories/glassHolder\";\r\nimport TowelRack from \"../subparts/showerAccessories/towelRack\";\r\nimport Wainscoting from \"../subparts/showerAccessories/wainscoting\";\r\nimport Towel from \"../subparts/showerAccessories/towel\";\r\nimport TowelTowelRing from \"../subparts/showerAccessories/towelTowelRing\";\r\nimport TowelTowelBar from \"../subparts/showerAccessories/towelTowelBar\";\r\nimport TowelTowelHook from \"../subparts/showerAccessories/towelTowelHook\";\r\n\r\nexport class ShowerAccessories extends Part {\r\n static id = 'Shower Accessories';\r\n\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partThumbnail = showerAccessoriesThumbnail;\r\n this.partName = 'Shower Accessories';\r\n this.translateId = \"visualizer.bathroom.accessories\";\r\n this.relatedItems = [];\r\n\r\n // related items\r\n this.soapDish = null;\r\n this.largeCornerSeat = null;\r\n this.largeCornerCaddie = null;\r\n this.cornerCaddie = null;\r\n this.smallCornerShelf = null;\r\n this.grabBar = null;\r\n this.showerPod = null;\r\n this.seats = null;\r\n this.showerRod = null;\r\n this.robeHook = null;\r\n this.paperHolder = null;\r\n this.toiletBrush = null;\r\n this.towelBar = null;\r\n this.towel = null;\r\n this.towelTowelRing = null;\r\n this.towelTowelBar = null;\r\n this.towelTowelHook = null;\r\n\r\n //current active caddie type\r\n this.caddie_type = \"corner_shelf\";\r\n this.relatedGroupNames = [\"Soap Dish\", \"Large Corner Seat\", \"Large Corner Caddie\", \"Corner Caddie\", \"Grab Bar\",\r\n \"Robe Hook\", \"Paper Holder\", \"Toilet Brush\", \"Shower Rod\", \"Corner Shelf\", \"Shower Pod\", \"Seats\", \"Towel Bar\",\r\n \"Towel Rack\", \"Towel Ring\", \"Glass Holder\", \"Wainscoting\"];\r\n }\r\n load(dbFeature, loadFeature = true) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Soap Dish\":\r\n relatedItemName = \"soapDish\";\r\n RelatedItemClass = SoapDish;\r\n break;\r\n case \"Large Corner Seat\":\r\n relatedItemName = \"largeCornerSeat\";\r\n RelatedItemClass = LargeCornerSeat;\r\n break;\r\n case \"Large Corner Caddie\":\r\n relatedItemName = \"largeCornerCaddie\";\r\n RelatedItemClass = LargeCornerCaddie;\r\n break;\r\n case \"Corner Caddie\":\r\n relatedItemName = \"cornerCaddie\";\r\n RelatedItemClass = CornerCaddie;\r\n break;\r\n case \"Grab Bar\":\r\n relatedItemName = \"grabBar\";\r\n RelatedItemClass = GrabBar;\r\n break;\r\n case \"Robe Hook\":\r\n relatedItemName = \"robeHook\";\r\n RelatedItemClass = RobeHook;\r\n break;\r\n case \"Paper Holder\":\r\n relatedItemName = \"paperHolder\";\r\n RelatedItemClass = PaperHolder;\r\n break;\r\n case \"Toilet Brush\":\r\n relatedItemName = \"toiletBrush\";\r\n RelatedItemClass = ToiletBrush;\r\n break;\r\n case \"Shower Rod\":\r\n relatedItemName = \"showerRod\";\r\n RelatedItemClass = ShowerRod;\r\n break;\r\n case \"Corner Shelf\":\r\n case \"Small Corner Shelf\":\r\n relatedItemName = \"cornerShelf\";\r\n RelatedItemClass = CornerShelf;\r\n break;\r\n case \"Shower Pod\":\r\n case \"Storage Pod\":\r\n case \"Storage Pods\":\r\n relatedItemName = \"showerPod\";\r\n RelatedItemClass = ShowerPod;\r\n break;\r\n case \"Seats\":\r\n case \"flip-Up Seat\":\r\n case \"Flip-Up Seat\":\r\n relatedItemName = \"seats\";\r\n RelatedItemClass = Seats;\r\n break;\r\n case \"Towel Bar\":\r\n relatedItemName = \"towelBar\";\r\n RelatedItemClass = TowelBar;\r\n break;\r\n case \"Towel Rack\":\r\n relatedItemName = \"towelRack\";\r\n RelatedItemClass = TowelRack;\r\n break;\r\n case \"Towel Ring\":\r\n relatedItemName = \"towelRing\";\r\n RelatedItemClass = TowelRing;\r\n break;\r\n case \"Towel\":\r\n case \"towel\":\r\n case \"Towels\": {\r\n if (dbFeature.metaData && Array.isArray(dbFeature.metaData[\"MountPosition\"]) && dbFeature.metaData[\"MountPosition\"].length) {\r\n if (dbFeature.metaData[\"MountPosition\"][0] === \"TowelRing\") {\r\n relatedItemName = \"towelTowelRing\";\r\n RelatedItemClass = TowelTowelRing;\r\n } else if (dbFeature.metaData[\"MountPosition\"][0] === \"TowelBar\" || dbFeature.metaData[\"MountPosition\"][0] === \"TowelTowelBar\") {\r\n relatedItemName = \"towelTowelBar\";\r\n RelatedItemClass = TowelTowelBar;\r\n } else if (dbFeature.metaData[\"MountPosition\"][0] === \"TowelHook\") {\r\n relatedItemName = \"towelTowelHook\";\r\n RelatedItemClass = TowelTowelHook;\r\n } else {\r\n relatedItemName = \"towel\";\r\n RelatedItemClass = Towel;\r\n }\r\n } else {\r\n relatedItemName = \"towel\";\r\n RelatedItemClass = Towel;\r\n }\r\n break;\r\n }\r\n case \"Glass Holder\":\r\n relatedItemName = \"glassHolder\";\r\n RelatedItemClass = GlassHolder;\r\n break;\r\n case \"Wainscoting\":\r\n relatedItemName = \"wainscoting\";\r\n RelatedItemClass = Wainscoting;\r\n break;\r\n\r\n }\r\n return this.loadCommon(relatedItemName, RelatedItemClass, dbFeature, loadFeature)\r\n }\r\n\r\n}\r\n\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {METADATA} from \"../../constants\";\r\nimport {Shower} from \"../../parts/shower\";\r\n\r\nexport default class EnclosureCommon extends IntermediatePart {\r\n\r\n constructor(props) {\r\n super(props);\r\n }\r\n\r\n load(dbFeature) {\r\n if (!dbFeature.metaData[\"BathType\"]) {\r\n dbFeature.metaData[\"BathType\"] = [METADATA.BathtubWithEnclosures]; // remove enclosure top and bottom\r\n }\r\n return super.load(dbFeature);\r\n }\r\n\r\n disabledClick() {\r\n const bathParent = this.getParent();\r\n if (bathParent[\"bathTubBody\"]) {\r\n bathParent[\"bathTubBody\"].disabled = this.disabled || !bathParent[\"bathTubBody\"].canBeEnabled(); // true or check if it can be enabled;\r\n }\r\n [\"enclosureTop\", \"enclosureBottom\"].forEach(relName => {\r\n if (bathParent[relName] && (bathParent[relName].partId !== this.partId)) {\r\n bathParent[relName].disabled = this.disabled;\r\n }\r\n })\r\n }\r\n\r\n setLayers(layout) {\r\n if (this.partId === \"skirting_board\") {\r\n return super.setLayers(layout);\r\n }\r\n const bathtubParent = this.getParent();\r\n if (!bathtubParent || !bathtubParent.bathTubBody || !bathtubParent.bathTubBody.activeFeature\r\n || !bathtubParent.bathTubBody.activeFeature.metaData[\"BathType\"]\r\n || !bathtubParent.bathTubBody.activeFeature.metaData[\"BathType\"].includes(METADATA.BathtubWithEnclosures)) {\r\n super.hideLayers();\r\n return;\r\n }\r\n super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n const bathtubParent = this.getParent();\r\n conditions.push({\r\n propName: \"BathType\",\r\n propValue: bathtubParent && bathtubParent.bathTubBody && bathtubParent.bathTubBody.activeFeature\r\n ? bathtubParent.bathTubBody.activeFeature.metaData[\"BathType\"]\r\n : METADATA.BathtubWithoutEnclosures // remove Enclosure Top\r\n });\r\n if (this.partId === \"skirting_board\") {\r\n const layout = bathtubParent.layout;\r\n const showerParent = layout.parts[Shower.id];\r\n const showerSize = showerParent.showerSize();\r\n if (showerParent && showerSize) {\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerSize\r\n });\r\n }\r\n }\r\n return conditions\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {getCurrentRoomType} from \"../../../../appLayout\";\r\nimport {LOOK_ROOM_TYPES, VANITY_TYPES} from \"../../constants\";\r\n\r\nexport default class VanityCommon extends IntermediatePart {\r\n\r\n constructor(props) {\r\n super(props);\r\n }\r\n\r\n getArrayOfConditions() {\r\n const vanityParent = this.getParent();\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n let vanitySize = vanityParent.counterTopSize(this);\r\n if (this.partId === \"vanity_mirror\") {\r\n const currentVanityTypeFeatureGroup = vanityParent.relatedItems.find(relItem => relItem.partId === vanityParent.vanity_type);\r\n if (currentVanityTypeFeatureGroup && currentVanityTypeFeatureGroup.layerPositions) {\r\n if (vanitySize === \"24\" || (Array.isArray(vanitySize) && vanitySize.includes(\"24\"))) {\r\n if (currentVanityTypeFeatureGroup.layerPositions[\"L\"] && currentVanityTypeFeatureGroup.layerPositions[\"R\"]) {\r\n conditions.push({\r\n propName: \"MirrorShape\",\r\n propValue: \"24D\"\r\n });\r\n } else if (currentVanityTypeFeatureGroup.layerPositions[\"C\"]) {\r\n conditions.push({\r\n propName: \"MirrorShape\",\r\n propValue: \"24S\"\r\n });\r\n }\r\n }\r\n }\r\n }\r\n if (this.partId === \"vanity_backsplash\") {\r\n const activeSideMeta = vanityParent.getActiveMatchingMetaFromRelatedItem(vanityParent.vanity_type, \"Side\");\r\n if (activeSideMeta && activeSideMeta.includes(\"C\")) {\r\n conditions.push({\r\n propName: \"Side\",\r\n propValue: activeSideMeta\r\n });\r\n }\r\n }\r\n if (vanitySize && (getCurrentRoomType() === LOOK_ROOM_TYPES.as)\r\n && !(this.partId === \"vanity_countertop\" && vanityParent.vanity_type !== VANITY_TYPES.vanity_cabinet)) {\r\n conditions.push({\r\n propName: \"VanitySize\",\r\n propValue: vanitySize\r\n })\r\n }\r\n return conditions\r\n }\r\n\r\n}\r\n","export const VISUALIZER_MANAGEMENT_ACTIONS = {\r\n getState: \"getState\",\r\n checkState: \"checkState\",\r\n setState: \"setState\",\r\n visualizerIsLoaded: \"visualizerIsLoaded\",\r\n closeVisualizerNavigation: \"closeVisualizerNavigation\",\r\n visualizerIsSaved: \"visualizerIsSaved\",\r\n}\r\n","import {getBvGroupFeatures} from \"./server-api\";\r\nimport {getCurrentLayout} from \"../bvcomponents/appLayout\";\r\n\r\nlet axiosController;\r\n\r\n/**\r\n * renderErrorPopup can display retry connection and sign contract buttons\r\n * @param featureGroup {object}\r\n * @param searchText {string}\r\n * @param setShowLoader {function}\r\n */\r\nexport const searchProductRequest = async (featureGroup, searchText, setShowLoader = () => {}) => {\r\n if (!searchText || !featureGroup || featureGroup.getRealFeaturesReceivedProperty()\r\n || (Array.isArray(featureGroup.alreadyRequestedFeatureNames) && featureGroup.alreadyRequestedFeatureNames.includes(searchText))\r\n ) {\r\n return false\r\n }\r\n setShowLoader(true);\r\n if (axiosController) {\r\n axiosController.abort();\r\n }\r\n if (AbortController) {\r\n axiosController = new AbortController();\r\n }\r\n const dbName = featureGroup.dbName || featureGroup.partName;\r\n const pageSize = 9999;\r\n if (document.kvConfig.visualizerType === \"bvLook\") {\r\n const layout = getCurrentLayout();\r\n const wallParent = layout.parts[\"Walls\"];\r\n if (featureGroup.additionalPartPartId && wallParent && wallParent.relatedItems.some(relItem => relItem.partId === featureGroup.partId)) {\r\n const cropResponse = await getBvGroupFeatures(dbName + \" Crop\", 0, pageSize, [], searchText, null, axiosController);\r\n if (Array.isArray(cropResponse)) {\r\n featureGroup.setGroupFeatures(cropResponse, pageSize, false, \"\", null, true, false);\r\n }\r\n }\r\n }\r\n const response = await getBvGroupFeatures(dbName, 0, pageSize, [], searchText, null, axiosController)\r\n if (response) {\r\n featureGroup.setGroupFeatures(response, pageSize, false, \"\", null, true);\r\n }\r\n if (!featureGroup.alreadyRequestedFeatureNames) {\r\n featureGroup.alreadyRequestedFeatureNames = [];\r\n }\r\n featureGroup.alreadyRequestedFeatureNames.push(searchText);\r\n setShowLoader(false);\r\n return response ? response.data : []\r\n}\r\n","import flatten from \"lodash/flatten\";\r\n\r\nimport {loaderDisable, loaderEnable} from \"../bvcomponents/ui/loaderView\";\r\nimport {getCurrentLayout} from \"../bvcomponents/appLayout\";\r\nimport {getBathroomVisualizerData, getBvGroupFeatures, getBvGroups, getQtCategories} from \"../api/server-api\";\r\nimport Config from \"../config\";\r\nimport store from \"../store\";\r\nimport {setWizardIsActive} from \"../actions/wizardFunctions\";\r\nimport {addVisualizersLoaded, updateCanvasCount} from \"../actions/actionFunctions\";\r\nimport {getParsedWizardList} from \"../bvcomponents/look/lookNavigation/lookMain/lookWizard/lookWizardFunctions2\";\r\n\r\nexport const loadAdditionalVisualizerGroups = async (visualizerType) => {\r\n switch (visualizerType) {\r\n case \"bvLook\": {\r\n const additionalFeatures = await Promise.all([\r\n getBvGroupFeatures(\"Decor\", 0, 2000, [], \"\", \"\", null, false, visualizerType),\r\n getBvGroupFeatures(\"Attachment\", 0, 2000, [], \"\", \"\", null, false, visualizerType),\r\n getBvGroupFeatures(\"Towel\", 0, 2000, [], \"\", \"\", null, false, visualizerType),\r\n ]);\r\n // console.log(\"additionalFeatures\", flatten(additionalFeatures));\r\n return flatten(additionalFeatures)\r\n }\r\n // to do add here Kitchen ? not sure\r\n default:\r\n return []\r\n }\r\n}\r\n\r\nexport const parseWizardResponse = (mainResponse, qtCategoriesResponse, visualizerType = null) => {\r\n const useWizard = (Array.isArray(qtCategoriesResponse) && qtCategoriesResponse.some(qtCat => qtCat.useWizard))\r\n // || !Array.isArray(qtCategoriesResponse) || !qtCategoriesResponse.length)\r\n && mainResponse && (mainResponse.wizardData || mainResponse.wizardDataV2)\r\n && getParsedWizardList(mainResponse, true).length > 0;\r\n store.dispatch(setWizardIsActive(useWizard, visualizerType));\r\n}\r\n\r\nconst loadVisualizer = async (visualizerType) => {\r\n try {\r\n window.requestInProcess = true;\r\n loaderEnable();\r\n const layout = getCurrentLayout(visualizerType);\r\n const mainResponse = await Promise.all([\r\n getBathroomVisualizerData(30, true, visualizerType),\r\n getQtCategories(layout.getCurrentLayoutAbbreviation(), visualizerType)\r\n ]);\r\n if (Config.isDevMode()) {\r\n console.log('loadVisualizer mainResponse-->', mainResponse);\r\n }\r\n const groupsResponse = await getBvGroups(visualizerType);\r\n if (Config.isDevMode()) {\r\n console.log('loadVisualizer groupsResponse-->', groupsResponse);\r\n }\r\n const additionalFeatures = await loadAdditionalVisualizerGroups(visualizerType);\r\n layout.loadNewFeatures(Object.assign({}, mainResponse[0], {\r\n features: [...mainResponse[0].features, ...additionalFeatures]\r\n }));\r\n layout.setGroupsItemsCount(groupsResponse.data);\r\n // if (qtCategories.length) { //todo the most painful part // reactivate needed\r\n // this.loadQtCategoriesFeatures(qtCategories); // load features from feature groups\r\n // }\r\n layout.createCustomConfigurations();\r\n layout.setGroupsItemsCount(groupsResponse.data); // not sure why we need it two items but ok, let it be\r\n layout.setDefaultFeatures();\r\n if (Array.isArray(mainResponse[1]) && mainResponse[1].length) {\r\n layout.setQtCategoriesSubparts(mainResponse[1]); // set QtCategories subParts(wait until defaults are set)\r\n // this.loadQtCategoriesFeatures(qtCategories); // load features from feature groups second time!!\r\n // after qtCategories are set (because we need partIdExistInQtCategory logic)\r\n }\r\n parseWizardResponse(mainResponse[0], mainResponse[1], visualizerType);\r\n // const needToLoadDefaultPreset = !document.kvConfig.jobId; // we should apply saved preset, we don't need the default one\r\n const needToLoadDefaultPreset = true; // we should apply this preset because if it's the first time - then it should apply\r\n if (needToLoadDefaultPreset && Array.isArray(mainResponse[0].defaults)) {\r\n const roomPreset = mainResponse[0].defaults.find(preset => preset.loadByTheDefault);\r\n if (roomPreset) {\r\n const layout_type = +roomPreset.layout_type;\r\n const needToChangeLayout = (layout_type || layout_type === 0) && (layout_type !== +layout.type);\r\n if (needToChangeLayout) {\r\n // await this.changeLayout(layout_type, true)\r\n }\r\n await layout.setItemsFromBvState(\r\n roomPreset, false, (bvState) => bvState, true, visualizerType\r\n )\r\n }\r\n }\r\n\r\n layout.initialized = true;\r\n console.log(\"new layout initialized\", layout);\r\n window.requestInProcess = false;\r\n store.dispatch(addVisualizersLoaded(layout.visualizerType));\r\n store.dispatch(updateCanvasCount());\r\n\r\n return true\r\n\r\n } catch (error) {\r\n loaderDisable();\r\n console.log(\"error\", error);\r\n return false\r\n }\r\n}\r\n\r\nexport default loadVisualizer\r\n","import React from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport { connect } from \"react-redux\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport MenuItem from '@mui/material/MenuItem';\r\nimport MenuList from '@mui/material/MenuList';\r\nimport ListItemIcon from '@mui/material/ListItemIcon';\r\nimport SvgIcon from \"@mui/material/SvgIcon\";\r\nimport TwitterIcon from '@mui/icons-material/Twitter';\r\n\r\nimport {LookShareIcons} from \"../../../../common/icons\";\r\nimport {setLookOverlayOpened, setLookReturnAction} from \"../../../../../actions/lookFunctions\";\r\nimport {LOOK_OVERLAYS} from \"../../../core/constants\";\r\nimport {saveQuoteAndShare} from \"../../lookFunctions2\";\r\nimport Analytics, {LOOK_JOURNEY_ANALYTIC_EVENTS} from \"../../../../../analytics\";\r\nimport {pricingIsLocked} from \"../../lookNavigationFunctions\";\r\n\r\nexport const SHARE_BUTTONS = {\r\n facebook: \"facebook\",\r\n pinterest: \"pinterest\",\r\n twitter: \"twitter\",\r\n}\r\n\r\nexport const getShareConfig = ({height, width}) => {\r\n const left = window.outerWidth / 2 + (window.screenX || window.screenLeft || 0) - width / 2;\r\n const top = window.outerHeight / 2 + (window.screenY || window.screenTop || 0) - height / 2;\r\n const config = {\r\n height: height,\r\n width: width,\r\n left: left,\r\n top: top,\r\n location: 'no',\r\n toolbar: 'no',\r\n status: 'no',\r\n directories: 'no',\r\n menubar: 'no',\r\n scrollbars: 'yes',\r\n resizable: 'no',\r\n centerscreen: 'yes',\r\n chrome: 'yes'\r\n }\r\n return Object.keys(config).map(key => key + '=' + config[key]).join(', ');\r\n};\r\n\r\nconst LookSideBarShareButtons = (props) => {\r\n\r\n const {handleClose, userIsLoggedIn, propsShareUrl, setLookOverlayOpened, setLookReturnAction} = props;\r\n\r\n const shareClickButton = (buttonKey) => {\r\n switch (buttonKey) {\r\n case SHARE_BUTTONS.facebook:\r\n Analytics.sendClickEvent(LOOK_JOURNEY_ANALYTIC_EVENTS.lookSidebarFacebook);\r\n break;\r\n case SHARE_BUTTONS.twitter:\r\n Analytics.sendClickEvent(LOOK_JOURNEY_ANALYTIC_EVENTS.lookSidebarTwitter);\r\n break;\r\n case SHARE_BUTTONS.pinterest:\r\n Analytics.sendClickEvent(LOOK_JOURNEY_ANALYTIC_EVENTS.lookSidebarPinterest);\r\n break;\r\n default:\r\n break;\r\n }\r\n if (!userIsLoggedIn) {\r\n const {isLixil} = pricingIsLocked();\r\n if (isLixil) {\r\n setLookOverlayOpened(LOOK_OVERLAYS.questionShare);\r\n setLookReturnAction(buttonKey);\r\n } else {\r\n setLookOverlayOpened(LOOK_OVERLAYS.leadCapture, buttonKey);\r\n }\r\n return false;\r\n }\r\n\r\n handleClose();\r\n // if (jobId) {\r\n // shareLogic(buttonKey)\r\n // } else {\r\n saveQuoteAndShare(buttonKey, propsShareUrl);\r\n // }\r\n }\r\n\r\n return (\r\n \r\n {Object.keys(SHARE_BUTTONS).map(buttonKey => {\r\n const icon = (buttonKey === \"twitter\") ? : {LookShareIcons[buttonKey]};\r\n return (\r\n shareClickButton(buttonKey)}>\r\n {icon}\r\n \r\n \r\n )\r\n })}\r\n \r\n )\r\n};\r\n\r\nLookSideBarShareButtons.propTypes = {\r\n handleClose: PropTypes.func.isRequired,\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {userIsLoggedIn} = store.userState;\r\n const {shareUrl} = store.serverState;\r\n return {\r\n userIsLoggedIn,\r\n propsShareUrl: shareUrl,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setLookOverlayOpened,\r\n setLookReturnAction,\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(LookSideBarShareButtons)\r\n","import orderBy from \"lodash/orderBy\";\r\nimport {Part} from \"../part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport {cabinetThumbnail} from \"../../../kvComponent/core/assets\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\n\r\nimport Handle from \"../subparts/cabinet/handle\";\r\nimport TopCabinet from \"../subparts/cabinet/topCabinet\";\r\nimport TallCabinet from \"../subparts/cabinet/tallCabinet\";\r\nimport CrownMolding from \"../subparts/cabinet/crownMolding\";\r\nimport BottomCabinet from \"../subparts/cabinet/bottomCabinet\";\r\nimport {setActiveFeaturesBeforeAllWalls} from \"../../../look/lookNavigation/lookNavigationFunctions\";\r\nimport {CABINET_GROUP} from \"../../../kvComponent/core/constants\";\r\nimport BottomHandle from \"../subparts/cabinet/bottomHandle\";\r\nimport TopHandle from \"../subparts/cabinet/topHandle\";\r\nimport DoorHandle from \"../subparts/cabinet/doorHandle\";\r\nimport DrawerHandle from \"../subparts/cabinet/drawerHandle\";\r\n\r\nexport default class Cabinet extends Part {\r\n static id = 'Cabinet';\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Cabinet';\r\n this.partThumbnail = cabinetThumbnail;\r\n this.partThumbnailSize = \"70%\";\r\n this.translateId = \"visualizer.kitchen.cabinet\";\r\n\r\n // related items\r\n this.handle = null;\r\n this.bottomHandle = null;\r\n this.topHandle = null;\r\n this.topCabinet = null;\r\n this.doorHandle = null;\r\n this.drawerHandle = null;\r\n this.crownMolding = null;\r\n this.relatedGroupNames = [\"Handle\", \"Bottom Handle\", \"Top Handle\", \"Bottom Cabinet\", \"Top Cabinet\", \"Crown Molding\",\r\n \"Door Handle\", \"Drawer Handle\"];\r\n }\r\n\r\n load(dbFeature, loadFeature = true) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Handle\":\r\n relatedItemName = \"handle\";\r\n RelatedItemClass = Handle;\r\n break;\r\n case \"Top Handle\":\r\n relatedItemName = \"topHandle\";\r\n RelatedItemClass = TopHandle;\r\n break;\r\n case \"Bottom Handle\":\r\n relatedItemName = \"bottomHandle\";\r\n RelatedItemClass = BottomHandle;\r\n break;\r\n case \"Bottom Cabinet\":\r\n relatedItemName = \"bottomCabinet\";\r\n RelatedItemClass = BottomCabinet;\r\n break;\r\n case \"Top Cabinet\":\r\n relatedItemName = \"topCabinet\";\r\n RelatedItemClass = TopCabinet;\r\n break;\r\n case \"Tall Cabinet\":\r\n relatedItemName = \"tallCabinet\";\r\n RelatedItemClass = TallCabinet;\r\n break;\r\n case \"Crown Molding\":\r\n relatedItemName = \"crownMolding\";\r\n RelatedItemClass = CrownMolding;\r\n break;\r\n case \"Door Handle\":\r\n relatedItemName = \"doorHandle\";\r\n RelatedItemClass = DoorHandle;\r\n break;\r\n case \"Drawer Handle\":\r\n relatedItemName = \"drawerHandle\";\r\n RelatedItemClass = DrawerHandle;\r\n break;\r\n }\r\n return this.loadCommon(relatedItemName, RelatedItemClass, dbFeature, loadFeature)\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n getRelatedItems() {\r\n return orderBy(this.relatedItems, 'layerPriority');\r\n }\r\n\r\n subParts(withHidden = true, hideWithoutFeatures = false) {\r\n return this.getRelatedItems()\r\n .filter(item => this.filterRelatedItem(item, withHidden))\r\n .filter(item => {\r\n if ((item.partId === \"crown_molding\" || item.partId === \"top_handle\") && hideWithoutFeatures && item.allFeaturesReceived) {\r\n return item.navigationSubItems({}, \"\").length\r\n }\r\n return item\r\n })\r\n .map(_ => new DesignNavigationItem(_.partName, _));\r\n }\r\n\r\n handleSubPartClick() {\r\n\r\n }\r\n\r\n getTopCabinetType() {\r\n if (this.topCabinet && this.topCabinet.activeFeature) {\r\n if (this.topCabinet.activeFeature.dbFeature.metaData[\"Cabinet\"]) {\r\n return this.topCabinet.activeFeature.dbFeature.metaData[\"Cabinet\"][0]\r\n } else {\r\n // console.log(\"no topCabinet metaData!\", this.topCabinet.activeFeature);\r\n return \"\"\r\n }\r\n }\r\n return \"\"\r\n }\r\n\r\n // getTopCabinetLayout() {\r\n //\r\n // if (this.topCabinet && this.topCabinet.activeFeature) {\r\n // if (this.topCabinet.activeFeature.dbFeature.metaData[\"Cabinet\"]) {\r\n // return this.topCabinet.activeFeature.dbFeature.metaData[\"Cabinet\"][0]\r\n // } else {\r\n // // console.log(\"no topCabinet metaData!\", this.topCabinet.activeFeature);\r\n // return \"\"\r\n // }\r\n // }\r\n // return \"ALL\"\r\n // }\r\n\r\n getBottomCabinetType() {\r\n if (this.bottomCabinet && this.bottomCabinet.activeFeature) {\r\n if (this.bottomCabinet.activeFeature.dbFeature.metaData[\"Cabinet\"]) {\r\n return this.bottomCabinet.activeFeature.dbFeature.metaData[\"Cabinet\"][0]\r\n } else {\r\n // console.log(\"no bottomCabinet metaData!\", this.bottomCabinet.activeFeature);\r\n return \"\"\r\n }\r\n }\r\n return \"\"\r\n }\r\n\r\n getTopCabinetApplianceType() {\r\n if (this.topCabinet && this.topCabinet.activeFeature) {\r\n if (this.topCabinet.activeFeature.dbFeature.metaData[\"Appliance\"]) {\r\n return this.topCabinet.activeFeature.dbFeature.metaData[\"Appliance\"][0]\r\n } else {\r\n // console.log(\"no Appliance metaData!\", this.topCabinet.activeFeature);\r\n return \"Hood\"\r\n }\r\n }\r\n return \"Hood\"\r\n }\r\n\r\n getTopCabinetShadowLayout() {\r\n if (this.topCabinet && this.topCabinet.activeFeature && this.topCabinet.activeFeature.dbFeature.metaData[\"CabinetLayout\"]) {\r\n return this.topCabinet.activeFeature.dbFeature.metaData[\"CabinetLayout\"][0]\r\n }\r\n return \"\"\r\n }\r\n\r\n getBottomCabinetApplianceType() {\r\n if (this.bottomCabinet && this.bottomCabinet.activeFeature) {\r\n if (this.bottomCabinet.activeFeature.dbFeature.metaData[\"Appliance\"]) {\r\n return this.bottomCabinet.activeFeature.dbFeature.metaData[\"Appliance\"][0]\r\n } else {\r\n // console.log(\"no Appliance metaData!\", this.bottomCabinet.activeFeature);\r\n return \"Range\"\r\n }\r\n }\r\n return \"Range\"\r\n }\r\n\r\n setPrevioslySelected() {\r\n setActiveFeaturesBeforeAllWalls(CABINET_GROUP);\r\n }\r\n\r\n}\r\n","\r\nimport {postSignInAuth} from \"../api/lixil-api\";\r\n\r\n// export const SET_APP_JWT_TOKEN = \"SET_APP_JWT_TOKEN\";\r\n//\r\n// export const setAppJwtToken = (jwtToken) => ({\r\n// type: SET_APP_JWT_TOKEN,\r\n// payload: {jwtToken}\r\n// });\r\n\r\nexport const setLixilAuthorizationToken = () => {\r\n return async (dispatch, getState) => {\r\n\r\n const {useLixilCalendar} = getState().fabricatorState;\r\n if (!useLixilCalendar) {\r\n return\r\n }\r\n const postAuthResponse = await postSignInAuth();\r\n console.log(\"postAuthResponse\", postAuthResponse);\r\n // if (postAuthResponse && postAuthResponse.data && postAuthResponse.data.data && postAuthResponse.data.data.jwtToken) {\r\n // dispatch(setAppJwtToken(postAuthResponse.data.data.jwtToken)); // just in case, we don't need it anymore\r\n // }\r\n return false\r\n }\r\n}\r\n\r\nexport const LIXIL_PRODUCT_TYPES = {\r\n srBathing: \"SR BATHING\",\r\n bathRemodel: \"Bath Remodel\",\r\n}\r\n\r\nconst lixilTermsText = \"By clicking “Let's Review” above, I consent to receive from American Standard and any party on its behalf at any time emails, telemarketing calls using an autodialer, artificial voices or pre-recordings and SMS text messages, which could result in wireless charges, at the number provided above. I understand that consent is not a condition of purchase. I also agree to the Terms of Use and Privacy policy, which are also linked at the bottom of this page.\";\r\n\r\nexport const getLixilCampaignInfo = (store) => {\r\n\r\n const {wizardState, appointmentState, globalState} = store;\r\n\r\n // const isShowerRemodel = wizardState.wizardSelectedValues\r\n // && wizardState.wizardSelectedValues[1]\r\n // && wizardState.wizardSelectedValues[1].selectedFeature && (\r\n // (wizardState.wizardSelectedValues[1].selectedFeature.customDisplayName === \"Replace Shower\")\r\n // || (wizardState.wizardSelectedValues[1].selectedFeature.sharedFeatureName === \"Replace Shower\")\r\n // || (\r\n // (wizardState.wizardActiveItem && (wizardState.wizardActiveItem.id === 2)) && (\r\n // (wizardState.wizardSelectedValues[1].selectedFeature.customDisplayName === \"Convert Tub to A Shower\")\r\n // || (wizardState.wizardSelectedValues[1].selectedFeature.sharedFeatureName === \"Convert Tub to A Shower\")\r\n // )\r\n // )\r\n // );\r\n\r\n const textWithUpdatedButton = globalState.footerInfoButtonText\r\n ? lixilTermsText.replace(\"Let's Review\", globalState.footerInfoButtonText)\r\n : lixilTermsText;\r\n\r\n const isSrBathing = wizardState.wizardActiveItem && (wizardState.wizardActiveItem.id === 2);\r\n\r\n const addressIsNotSupported = appointmentState && appointmentState.appointmentsNotAvailable;\r\n\r\n if (isSrBathing) {\r\n return {\r\n \"Campaign\": \"SOCIAL\",\r\n \"SubID\": addressIsNotSupported ? \"8087\" : \"8077\",\r\n \"PubID\": addressIsNotSupported ? \"SB-Social-OnlineForm-NoAppt\" : \"Social-SB-OnlineApptForm\",\r\n \"DNIS\": \"855-254-7620\",\r\n \"Product\": LIXIL_PRODUCT_TYPES.srBathing,\r\n \"terms_stc\": textWithUpdatedButton,\r\n \"promoter_id_stc\": addressIsNotSupported ? \"\" : \"3846\",\r\n }\r\n }\r\n return {\r\n \"Campaign\": \"SOCIAL\",\r\n \"SubID\": addressIsNotSupported ? \"8088\" : \"8079\",\r\n \"PubID\": addressIsNotSupported ? \"BR-Social-OnlineForm-NoAppt\" : \"BR-Social-OnlineApptForm\",\r\n \"DNIS\": \"855-254-7623\",\r\n \"Product\": LIXIL_PRODUCT_TYPES.bathRemodel,\r\n \"terms_stc\": textWithUpdatedButton,\r\n \"promoter_id_stc\": addressIsNotSupported ? \"\" : \"3846\",\r\n }\r\n}\r\n","import * as types from \"./appointmentActions\";\r\n\r\nexport const defaultTimeValue = \"Select time...\";\r\n\r\nconst initialState = {\r\n appointmentDate: \"\",\r\n appointmentTime: defaultTimeValue,\r\n appointmentTimeSlot: defaultTimeValue,\r\n timeStepIsActive: false,\r\n availableAppointmentDates: [],\r\n salesRepID: \"\", // lixil reponse sales id\r\n appointmentsNotAvailable: true, // lixil faraday reponse not available for this address\r\n};\r\n\r\nexport default function(state = initialState, action) {\r\n\r\n switch(action.type) {\r\n\r\n case types.SET_APPOINTMENT_DATE:\r\n return {...state, appointmentDate: action.payload, appointmentTime: defaultTimeValue, appointmentTimeSlot: defaultTimeValue}\r\n case types.SET_APPOINTMENT_TIME:\r\n return {...state,\r\n appointmentTime: action.payload.time,\r\n appointmentTimeSlot: action.payload.timeSlot\r\n }\r\n case types.SET_APPOINTMENT_TIME_STEP_ACTIVE:\r\n return {...state, timeStepIsActive: action.payload}\r\n case types.SET_AVAILABLE_APPOINTMENTS:\r\n case types.SET_SALES_REP_ID:\r\n case types.SET_APPOINTMENTS_NOT_AVAILABLE:\r\n return {...state, ...action.payload}\r\n\r\n }\r\n\r\n return state;\r\n\r\n}\r\n","import {LEAD_WIZARD_GROUP_TYPES} from \"./wizardLogic\";\r\n\r\n/**\r\n * @param dbFeature {dbFeatureInterface}\r\n * @param wizardGroup {wizardGroupInterface}\r\n * @returns {boolean}\r\n */\r\nexport const featureIsExcluded = (dbFeature, wizardGroup) => {\r\n const {sku, featureDefinitionID, customDisplayName, matchingName} = dbFeature;\r\n if (wizardGroup.useIncluded && wizardGroup.featuresIncluded) {\r\n return !wizardGroup.featuresIncluded.some(includedFeature => {\r\n return (includedFeature.sharedFeatureName && (includedFeature.sharedFeatureName === matchingName))\r\n || (includedFeature.featureDefinitionId === featureDefinitionID)\r\n || (!includedFeature.sharedFeatureName && (includedFeature.name === customDisplayName))\r\n || (includedFeature.sku && sku && (includedFeature.sku === sku))\r\n })\r\n }\r\n return false\r\n}\r\n\r\n/**\r\n * returns current wizard step section items\r\n * @param features {featureInterface}\r\n * @param wizardGroup {wizardGroupInterface}\r\n * @returns {array}\r\n */\r\nexport const getFilteredNavItems = (features, wizardGroup) => {\r\n return features.filter(feature => !featureIsExcluded(feature, wizardGroup))\r\n};\r\n\r\n/**\r\n * returns current wizard step section items\r\n * @param wizardActiveItem {wizardItemInterface}\r\n * @param wizardActiveStep {number}\r\n * @param wizardSelectedValues {object}\r\n * @param prevStepGroups {[wizardGroupInterface]}\r\n * @param additionalWizardValuesToCheck {object}\r\n * @returns {array}\r\n */\r\nexport const getCurrentGroups = (wizardActiveItem,\r\n wizardActiveStep,\r\n wizardSelectedValues,\r\n prevStepGroups = [],\r\n additionalWizardValuesToCheck= null) => {\r\n if (!wizardActiveItem || wizardActiveStep < 0) {\r\n return []\r\n }\r\n const stepStr = \"\" + wizardActiveStep;\r\n\r\n if (wizardActiveStep === 0) {\r\n return getCurrentGroupsFromSource(stepStr, wizardActiveItem)\r\n }\r\n\r\n const selectedPrevStep = wizardSelectedValues[wizardActiveStep - 1];\r\n if (!selectedPrevStep || !selectedPrevStep.wizardGroup) {\r\n if (prevStepGroups.length && prevStepGroups[0].id) {\r\n if (additionalWizardValuesToCheck) { // here we check also previously selected values to make steps similar to prev choices\r\n let foundPreviouslySelectedGroup = null;\r\n if (prevStepGroups.every(wg => wg.nodeType === \"custom\")) {\r\n Object.keys(additionalWizardValuesToCheck).forEach(key => {\r\n if ((key > Object.keys(wizardSelectedValues).length)\r\n && !additionalWizardValuesToCheck[key].partId\r\n && additionalWizardValuesToCheck[key].wizardGroup) {\r\n prevStepGroups.forEach(wg => {\r\n if (wg.id === additionalWizardValuesToCheck[key].wizardGroup.id) {\r\n foundPreviouslySelectedGroup = wg;\r\n }\r\n });\r\n }\r\n });\r\n } else {\r\n // here we can add simple feature group, but no need for now\r\n }\r\n if (foundPreviouslySelectedGroup) {\r\n return getCurrentGroupsFromSource(foundPreviouslySelectedGroup.id, wizardActiveItem)\r\n }\r\n }\r\n return getCurrentGroupsFromSource(prevStepGroups[0].id, wizardActiveItem)\r\n }\r\n // console.log(\"Previous step is not selected! Check selected values --> \", wizardSelectedValues);\r\n return []\r\n }\r\n\r\n if (selectedPrevStep && selectedPrevStep.wizardGroup && selectedPrevStep.wizardGroup.mergedGroups && selectedPrevStep.selectedFeature) {\r\n const wizardGroupWithSelectedFeature = selectedPrevStep.wizardGroup.mergedGroups.find(wizGroup => {\r\n return !featureIsExcluded(selectedPrevStep.selectedFeature, wizGroup)\r\n });\r\n if (wizardGroupWithSelectedFeature) {\r\n return getCurrentGroupsFromSource(wizardGroupWithSelectedFeature.id, wizardActiveItem);\r\n }\r\n }\r\n\r\n // const prevStepStr = \"\" + (wizardActiveStep - 1);\r\n // const prevGroups = getCurrentGroupsFromSource(prevStepStr, wizardActiveItem);\r\n // if (prevGroups.length > 1 && wizardActiveStep > 0) {\r\n // return [selectedPrevStep.wizardGroup]\r\n // }\r\n\r\n return getCurrentGroupsFromSource(selectedPrevStep.wizardGroup.id, wizardActiveItem);\r\n}\r\n\r\n/**\r\n * returns current wizard step section items\r\n * @param source {string}\r\n * @param wizardActiveItem {wizardItemInterface}\r\n * @returns array {[wizardGroupInterface]}\r\n */\r\nexport const getCurrentGroupsFromSource = (source, wizardActiveItem) => {\r\n if (!wizardActiveItem) {\r\n return []\r\n }\r\n const siblingGroups = wizardActiveItem.wizardGroups.filter(wizGroup => {\r\n return wizardActiveItem.wizardEdges.some(wizEdge => wizEdge.source === source && wizEdge.target === wizGroup.id && wizGroup.enabled)\r\n });\r\n // console.log(\"siblingGroups\", siblingGroups);\r\n const areSameSiblingGroups = siblingGroups.length > 1 && siblingGroups.every(siblingGroup => {\r\n return (siblingGroup.nodeType === LEAD_WIZARD_GROUP_TYPES.group) && (siblingGroup.groupName === siblingGroups[0].groupName)\r\n });\r\n if (areSameSiblingGroups) {\r\n // console.log(\"areSameSiblingGroups\", areSameSiblingGroups);\r\n\r\n if (siblingGroups.every(wizardGroup => wizardGroup.useIncluded && wizardGroup.featuresIncluded)) { // new logic\r\n const featuresIncluded = siblingGroups.reduce((total, wizardGroup) => {\r\n wizardGroup.featuresIncluded.forEach(included => {\r\n if (!total.some(exclObj => (exclObj.featureDefinitionId === included.featureDefinitionId))) {\r\n total.push(included)\r\n }\r\n })\r\n return total\r\n }, []);\r\n const newGroup = Object.assign({}, siblingGroups[0], {\r\n mergedGroups: siblingGroups,\r\n featuresExcluded: [], // not sure if we need it\r\n featuresIncluded\r\n })\r\n return [newGroup]\r\n }\r\n\r\n const allFeaturesExcluded = siblingGroups.reduce((total, wizardGroup) => {\r\n wizardGroup.featuresExcluded.forEach(excluded => {\r\n if (!excluded) {\r\n return\r\n }\r\n if (typeof excluded === \"object\") { // new logic for excluded\r\n if (!total.some(exclObj => (typeof exclObj === \"object\") && (exclObj.featureDefinitionId === excluded.featureDefinitionId))) {\r\n total.push(excluded)\r\n }\r\n } else if (!total.includes(excluded)) {\r\n total.push(excluded)\r\n }\r\n })\r\n return total\r\n }, []);\r\n const featuresExcluded = allFeaturesExcluded.filter(exclFeature => {\r\n return siblingGroups.every(siblingGroup => {\r\n if (typeof exclFeature === \"object\") {\r\n return siblingGroup.featuresExcluded.some(exclObj => (typeof exclObj === \"object\") && (exclObj.featureDefinitionId === exclFeature.featureDefinitionId))\r\n }\r\n return siblingGroup.featuresExcluded.includes(exclFeature)\r\n })\r\n })\r\n const newGroup = Object.assign({}, siblingGroups[0], {\r\n mergedGroups: siblingGroups,\r\n featuresExcluded\r\n })\r\n return [newGroup]\r\n }\r\n return siblingGroups\r\n}\r\n\r\n/**\r\n * returns current wizard step section items\r\n * @param wizardActiveItem {wizardItemInterface}\r\n * @param wizardSelectedValues {object}\r\n * @param returnAllSteps {boolean}\r\n * @param additionalWizardValuesToCheck {object}\r\n * @returns {array}\r\n */\r\nexport const getAvailableSteps = (wizardActiveItem, wizardSelectedValues, returnAllSteps, additionalWizardValuesToCheck = null) => {\r\n if (!wizardActiveItem || !wizardActiveItem.wizardGroups || !wizardActiveItem.wizardEdges) {\r\n return []\r\n }\r\n\r\n const maxWizardSteps = 50;\r\n\r\n let stepsArray = [{\r\n stepIndex: 0,\r\n stepGroups: getCurrentGroupsFromSource(\"0\", wizardActiveItem),\r\n }];\r\n\r\n for (let i = 1; i <= maxWizardSteps; i++) {\r\n const prevStepGroups = returnAllSteps && stepsArray[i - 1] ? stepsArray[i - 1].stepGroups : [];\r\n const currentGroups = getCurrentGroups(wizardActiveItem, i, wizardSelectedValues, prevStepGroups, additionalWizardValuesToCheck)\r\n if (!currentGroups.length) {\r\n break;\r\n }\r\n stepsArray.push({\r\n stepIndex: i,\r\n stepGroups: currentGroups\r\n })\r\n }\r\n\r\n return stepsArray\r\n}\r\n\r\n\r\n/**\r\n * this returns new wizard steps depending on the current selection\r\n * @param wizardActiveItem {wizardItemInterface}\r\n * @param currentStep {number}\r\n * @param allWizardSelectedValues {object}\r\n * @returns {object}\r\n */\r\nexport const getNextWizardSteps = (wizardActiveItem, currentStep, allWizardSelectedValues) => {\r\n// const oldWizardSteps = getAvailableSteps(wizardActiveItem, oldWizardSelectedValues, true);\r\n\r\n let newValues = {};\r\n Object.keys(allWizardSelectedValues).forEach(key => {\r\n if (+key <= currentStep) {\r\n newValues[key] = allWizardSelectedValues[key] // here we create values object just until the current selected value\r\n }\r\n });\r\n\r\n const afterCurrentSelectionWizardSteps = getAvailableSteps(wizardActiveItem, newValues, true, allWizardSelectedValues);\r\n const allWizardSteps = getAvailableSteps(wizardActiveItem, allWizardSelectedValues, true);\r\n\r\n const nextStep = currentStep + 1;\r\n\r\n if (\r\n afterCurrentSelectionWizardSteps[nextStep] && allWizardSteps[nextStep]\r\n && afterCurrentSelectionWizardSteps[nextStep].stepGroups.every((wizardGroup, wizardGroupIndex) => {\r\n return allWizardSteps[nextStep].stepGroups[wizardGroupIndex] && wizardGroup.id === allWizardSteps[nextStep].stepGroups[wizardGroupIndex].id\r\n }) && (allWizardSelectedValues[nextStep] && allWizardSelectedValues[nextStep].wizardGroup\r\n && afterCurrentSelectionWizardSteps[nextStep].stepGroups.some(wizG => allWizardSelectedValues[nextStep].wizardGroup.id === wizG.id))\r\n ) {\r\n return allWizardSteps // keep it, as we didn't change the flow\r\n }\r\n\r\n return afterCurrentSelectionWizardSteps // use new ones, as the flow was changed\r\n\r\n}\r\n\r\n\r\n/**\r\n * this returns conflicting with the current selections steps\r\n * @param allWizardSelectedValues {object}\r\n * @param actionPayload {object} // {wizardActiveItem, quoteIndex}\r\n * @returns {array}\r\n */\r\nexport const getConflictingWizardSteps = (allWizardSelectedValues, actionPayload) => {\r\n\r\n const {wizardActiveItem} = actionPayload;\r\n\r\n const currentStep = +Object.keys(actionPayload.wizardSelectedValues)[0];\r\n\r\n let conflictingWizardSteps = [];\r\n const newWizardSteps = getNextWizardSteps(wizardActiveItem, currentStep, allWizardSelectedValues);\r\n\r\n Object.keys(allWizardSelectedValues).forEach(stepIndex => {\r\n if (allWizardSelectedValues[stepIndex] && allWizardSelectedValues[stepIndex].wizardGroup && (!newWizardSteps[stepIndex]\r\n || !newWizardSteps[stepIndex].stepGroups.some(wizardGroup => wizardGroup.id === allWizardSelectedValues[stepIndex].wizardGroup.id))) {\r\n conflictingWizardSteps.push({\r\n stepIndex,\r\n wizardGroupId: allWizardSelectedValues[stepIndex].wizardGroup.id,\r\n });\r\n }\r\n })\r\n\r\n // console.log(\"newWizardSteps\", newWizardSteps);\r\n // console.log(\"allWizardSelectedValues\", allWizardSelectedValues);\r\n // console.log(\"conflictingWizardSteps\", conflictingWizardSteps);\r\n\r\n return conflictingWizardSteps\r\n}\r\n\r\n\r\nexport const getUpdatedAllWizardValues = (state, quoteIndex, wizardItemId, wizardSelectedValues) => {\r\n const newWizObject = {\r\n quoteIndex,\r\n wizardItemId,\r\n lastVisitedStep: state.wizardActiveStep,\r\n wizardSelectedValues: Object.assign({}, wizardSelectedValues)\r\n };\r\n const existingIndex = state.allWizardsValues.findIndex(wizSelObject => {\r\n return wizSelObject.wizardItemId === newWizObject.wizardItemId && wizSelObject.quoteIndex === newWizObject.quoteIndex\r\n });\r\n existingIndex > -1\r\n ? state.allWizardsValues.splice(existingIndex, 1, newWizObject)\r\n : state.allWizardsValues.push(newWizObject);\r\n\r\n state.allWizardsValues = state.allWizardsValues.map(wizObject => {\r\n if (wizObject.quoteIndex === quoteIndex) {\r\n wizObject.isLastActiveWizard = wizObject.wizardItemId === wizardItemId // to return back and force correctly\r\n }\r\n return wizObject\r\n });\r\n\r\n return [...state.allWizardsValues]\r\n}\r\n","import values from 'lodash/values';\r\nimport invert from 'lodash/invert';\r\nimport snakeCase from 'lodash/snakeCase';\r\n\r\nimport {Bathtub} from \"./parts/bathtub\";\r\nimport FloorNew from \"./parts/floorNew\";\r\nimport {Vanity} from \"./parts/vanity\";\r\nimport {Window} from \"./parts/window\";\r\nimport {Ceiling} from \"./parts/ceiling\";\r\nimport {Toilet} from \"./parts/toilet\";\r\nimport {Shower} from \"./parts/shower\";\r\nimport {ShowerTubCombo} from \"./parts/showerTubCombo\";\r\nimport GlobalShadow from \"./parts/globalShadow\";\r\nimport {Wall} from \"./parts/wall\";\r\nimport ExternallWall from \"./subparts/wall/externallWall\";\r\nimport Layer from \"../../visComponents/layer\";\r\nimport Z from './parts/zIndex';\r\nimport {LayoutType, LayoutAbbreviation, bathTubTypeToString, ShowerComboTubType}\r\n from \"./constants\";\r\n\r\nimport {\r\n largeLayoutShadow,\r\n smallLayoutShadow,\r\n shower30inWallShadow,\r\n LayoutThumbnails\r\n} from './assets';\r\nimport LayoutCommon from \"../../visComponents/layoutCommon\";\r\nimport Other from \"./parts/other\";\r\nimport NonVisualizerSubPart from \"./subparts/nonVisualizerSubPart\";\r\nimport DesignNavigationItem from \"../../visComponents/designNavigationItem\";\r\nimport {ShowerAccessories} from \"./parts/showerAccessories\";\r\nimport store from \"../../../store\";\r\nimport {AVAILABLE_VISUALIZER_TYPES} from \"../../../config\";\r\n\r\nexport class Layout extends LayoutCommon {\r\n\r\n /**\r\n * @type {int}\r\n */\r\n defaultType = LayoutType.Large;\r\n type = this.defaultType;\r\n localStorageKey = \"bvState\";\r\n layersBinding = \"Bathroom\";\r\n visualizerType = AVAILABLE_VISUALIZER_TYPES.Bathroom;\r\n layoutNames = LayoutAbbreviation;\r\n layoutTypes = LayoutType;\r\n layoutThumbnails = LayoutThumbnails;\r\n zIndexes = Z.layouts;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.parts[Vanity.id] = new Vanity();\r\n this.parts[Shower.id] = new Shower();\r\n this.parts[ShowerTubCombo.id] = new ShowerTubCombo();\r\n this.parts[ShowerAccessories.id] = new ShowerAccessories();\r\n this.parts[Bathtub.id] = new Bathtub();\r\n this.parts[Toilet.id] = new Toilet();\r\n this.parts[Wall.id] = new Wall(); // wall should render it's layers only after vanity & shower\r\n this.parts[FloorNew.id] = new FloorNew();\r\n this.parts[Ceiling.id] = new Ceiling();\r\n this.parts[Window.id] = new Window();\r\n this.parts[GlobalShadow.id] = new GlobalShadow();\r\n this.parts[Other.id] = new Other();\r\n\r\n values(this.parts).forEach(part => part.layout = this);\r\n }\r\n\r\n resetEverything() {\r\n const features = this.getFeatures();\r\n const {activeQuoteIndex} = store.getState().quotesState;\r\n features.forEach(parentGroup => {\r\n if (parentGroup instanceof Shower) {\r\n parentGroup.activeSubType_ = \"Custom\";\r\n } else if (parentGroup instanceof ShowerTubCombo) {\r\n parentGroup.showerTubComboIsActive = false;\r\n parentGroup.bottomTub = ShowerComboTubType.bathtub_liner;\r\n }\r\n parentGroup.setDefault(this);\r\n parentGroup.placeholderChanged = false;\r\n parentGroup.firstClick[activeQuoteIndex] = false;\r\n // if (parentGroup instanceof Shower && parentGroup.showerBody.featuresParts) {\r\n // parentGroup.showerBody.featuresParts = {};\r\n // }\r\n if (parentGroup.relatedItems && parentGroup.relatedItems.length) {\r\n parentGroup.relatedItems.forEach((subPart) => {\r\n if (subPart.partId !== 'shower_body') {\r\n subPart.placeholderChanged = false;\r\n subPart.firstClick[activeQuoteIndex] = false;\r\n }\r\n subPart.disabled = subPart.defaultDisabled;\r\n if (Array.isArray(subPart.activeFeatureParts) && subPart.activeFeatureParts.length) {\r\n subPart.activeFeatureParts = subPart.setActiveFeatureParts();\r\n }\r\n if (subPart instanceof ExternallWall) {\r\n subPart.selectedByUser = false\r\n }\r\n });\r\n }\r\n });\r\n this.changeLayout(features);\r\n }\r\n\r\n getCurrentLayoutName(type = this.type) {\r\n return invert(LayoutType)[type];\r\n }\r\n\r\n getCurrentLayoutAbbreviation() {\r\n return LayoutAbbreviation[this.getCurrentLayoutName()]\r\n }\r\n\r\n addCustomLayers = (res) => {\r\n // add global shadow\r\n const globalShadowParent = this.parts[GlobalShadow.id]; // if no global shadow uploaded - take the hardcoded one\r\n if (!globalShadowParent.categoryEnabled || (globalShadowParent.activeFeature\r\n && (!globalShadowParent.activeFeature.layer || !globalShadowParent.activeFeature.layer.src))) {\r\n if (this.type === LayoutType.Large) {\r\n res.push(new Layer(\"bv\", Z.layouts.Large.Global_Shadow_Overlay, largeLayoutShadow, false));\r\n } else if (this.type === LayoutType.Small) {\r\n res.push(new Layer(\"bv\", Z.layouts.Small.Global_Shadow_Overlay, smallLayoutShadow, false));\r\n }\r\n }\r\n\r\n // add right ex wall shadow for complete showers\r\n const shower = this.parts[Shower.id];\r\n if (shower.showerSize() === \"30in\" && shower.activeSubType_ === \"Complete\" && !shower.showerTubComboIsActive() && this.type === LayoutType.Large) {\r\n res.push(new Layer(\"bv\", Z.layouts.Large.Shower.Custom60in.ExtrusionWallRightShadow, shower30inWallShadow, false));\r\n }\r\n return res\r\n }\r\n\r\n /**\r\n * Sets bv features from url\r\n */\r\n\r\n parseUrl(bvState) {\r\n if (bvState.disabled_parts) {\r\n bvState.disabled_parts = bvState.disabled_parts.split(\",\");\r\n }\r\n if (bvState.shower_floor_is_active) {\r\n bvState.shower_floor_is_active = bvState.shower_floor_is_active === \"true\"\r\n }\r\n if (bvState.shower_tub_combo_is_active) {\r\n bvState.shower_tub_combo_is_active = bvState.shower_tub_combo_is_active === \"true\"\r\n }\r\n if (bvState.shower_interior_wall_accent_parts) {\r\n bvState.shower_interior_wall_accent_parts = Number.isInteger(bvState.shower_interior_wall_accent_parts)\r\n ? [bvState.shower_interior_wall_accent_parts]\r\n : bvState.shower_interior_wall_accent_parts.split(\",\")\r\n }\r\n if (bvState.shower_interior_wall_parts) {\r\n bvState.shower_interior_wall_parts = Number.isInteger(bvState.shower_interior_wall_parts)\r\n ? [bvState.shower_interior_wall_parts]\r\n : bvState.shower_interior_wall_parts.split(\",\")\r\n }\r\n if (bvState.left_shower_wall_type) {\r\n switch (bvState.left_shower_wall_type) {\r\n case 30:\r\n case \"30\":\r\n case \"30X8\":\r\n bvState.left_shower_wall_type = \"30X8\";\r\n break;\r\n case 15:\r\n case \"15\":\r\n case \"15X4\":\r\n bvState.left_shower_wall_type = \"15X4\";\r\n break;\r\n case \"Pony\":\r\n bvState.left_shower_wall_type = \"Pony\";\r\n break;\r\n }\r\n }\r\n if (bvState[\"caddie_type\"] && this.parts[ShowerAccessories.id]) {\r\n this.parts[ShowerAccessories.id].caddie_type = bvState[\"caddie_type\"];\r\n }\r\n return bvState\r\n // console.log('restoring bvState from url...', bvState);\r\n }\r\n\r\n /**\r\n *\r\n * @param bvState {object}\r\n * @param setCartAndUserState {boolean}\r\n * @param useNames {boolean}\r\n * @param needToChangeLayout {boolean}\r\n * @param firstLoad {boolean}\r\n */\r\n setActiveFeaturesFromObject(bvState, setCartAndUserState = false, useNames = false, needToChangeLayout = true, firstLoad = false) {\r\n if (bvState) {\r\n\r\n const layout_type = +bvState.layout_type;\r\n needToChangeLayout = needToChangeLayout && (layout_type || layout_type === 0) && (layout_type !== +this.type);\r\n\r\n if (needToChangeLayout) {\r\n this.type = layout_type;\r\n }\r\n\r\n const vanity = this.parts[Vanity.id];\r\n const shower = this.parts[Shower.id];\r\n const showerTubCombo = this.parts[ShowerTubCombo.id];\r\n // const bathtub = this.parts[Bathtub.id];\r\n\r\n // to avoid checks below\r\n bvState.disabled_parts = bvState.disabled_parts || [];\r\n\r\n // const {activeQuoteIndex} = store.getState().quotesState;\r\n\r\n this.getFeatures()\r\n .forEach((parentGroup) => {\r\n if (parentGroup.menuType === 0 && parentGroup.partName !== \"Toilet\") {\r\n const partId = parentGroup.partId;\r\n const hasPreviouslySavedItem = this.selectedLayoutFeatures[layout_type]\r\n && this.selectedLayoutFeatures[layout_type][partId];\r\n if (bvState.hasOwnProperty(partId) || hasPreviouslySavedItem) {\r\n if (useNames) {\r\n parentGroup.activeFeature = parentGroup.getFeatureByPartName(bvState[partId]);\r\n if (!parentGroup.activeFeature && hasPreviouslySavedItem) {\r\n parentGroup.activeFeature = parentGroup.getFeatureByPartName(hasPreviouslySavedItem);\r\n }\r\n } else {\r\n parentGroup.activeFeature = parentGroup.getFeatureById(bvState[partId])\r\n || parentGroup.getDefaultFeature();\r\n }\r\n parentGroup.placeholderChanged = !!parentGroup.activeFeature;\r\n // parentGroup.firstClick[activeQuoteIndex] = !!parentGroup.activeFeature; // this makes steps selected! removed\r\n }\r\n if (parentGroup.activeFeature && firstLoad && !parentGroup.activeFeature.notAvailableInVisualizer) { // Leave non in vis features locked\r\n parentGroup.activeFeature.dbFeature.unlocked = true;\r\n }\r\n parentGroup.disabled = bvState.disabled_parts.includes(partId)\r\n } else {\r\n let subParts = parentGroup.relatedItems;\r\n subParts.forEach((subPart) => {\r\n const partId = subPart.partId;\r\n const hasPreviouslySavedItem = this.selectedLayoutFeatures[layout_type]\r\n && this.selectedLayoutFeatures[layout_type][partId];\r\n if (bvState.hasOwnProperty(partId) || hasPreviouslySavedItem) {\r\n if (useNames) {\r\n subPart.activeFeature = subPart.getFeatureByPartName(bvState[partId]);\r\n if (!subPart.activeFeature && hasPreviouslySavedItem) {\r\n subPart.activeFeature = subPart.getFeatureByPartName(hasPreviouslySavedItem);\r\n }\r\n } else {\r\n subPart.activeFeature = subPart.getFeatureById(bvState[partId]) || parentGroup.getDefaultFeature();\r\n }\r\n subPart.placeholderChanged = !!subPart.activeFeature;\r\n // subPart.firstClick[activeQuoteIndex] = !!subPart.activeFeature // this makes steps selected! removed\r\n if (partId === \"shower_body\") {\r\n subPart.showerBodySelectedByUser = true\r\n }\r\n }\r\n if (subPart.activeFeature && firstLoad && !subPart.activeFeature.notAvailableInVisualizer) {\r\n subPart.activeFeature.dbFeature.unlocked = true;\r\n }\r\n if (firstLoad) {\r\n subPart.placeholderChanged = true;\r\n }\r\n subPart.disabled = bvState.disabled_parts.includes(partId);\r\n })\r\n }\r\n });\r\n\r\n const partPredicate = (part, value) => useNames ? part.partName === value : +part.dbFeature.id === +value;\r\n Object.keys(bvState)\r\n .forEach((bvStateKey) => {\r\n if (bvStateKey === \"vanity_type\") {\r\n vanity.activeSubType_ = bvState.vanity_type.charAt(0).toUpperCase() + bvState.vanity_type.substr(1);\r\n }\r\n if (bvStateKey === \"shower_type\") {\r\n shower.activeSubType_ = bvState.shower_type.charAt(0).toUpperCase() + bvState.shower_type.substr(1);\r\n if (bvState.shower_type === \"complete\" && bvState.shower_parts.length) {\r\n shower.showerBody.activeFeatureParts = bvState.shower_parts.map(shower_part_id => {\r\n return shower.showerBody.featuresParts.find(_ => partPredicate(_, shower_part_id));\r\n });\r\n }\r\n }\r\n if (bvStateKey === \"shower_interior_wall_parts\") {\r\n if (bvState.shower_interior_wall_parts.length && shower.showerInteriorWall) {\r\n shower.showerInteriorWall.activeFeatureParts = bvState.shower_interior_wall_parts\r\n .map((shower_accent_wall_part_id) => {\r\n let accordingPart = shower.showerInteriorWall.featuresParts.find(_ => partPredicate(_, shower_accent_wall_part_id));\r\n if (!accordingPart) {\r\n const showerFeature = shower.showerInteriorWall.features.find(_ => partPredicate(_, bvState.shower_interior_wall));\r\n if (showerFeature) {\r\n const availableParts = shower.showerInteriorWall.setActiveFeatureParts(showerFeature);\r\n if (availableParts.length) {\r\n accordingPart = availableParts[0]\r\n }\r\n }\r\n }\r\n return accordingPart;\r\n });\r\n }\r\n }\r\n if (bvStateKey === \"shower_interior_wall_accent_parts\") {\r\n if (bvState.shower_interior_wall_accent_parts.length && shower.showerInteriorWallAccent) {\r\n shower.showerInteriorWallAccent.activeFeatureParts = bvState.shower_interior_wall_accent_parts\r\n .map((shower_accent_wall_part_id) => {\r\n return shower.showerInteriorWallAccent.featuresParts.find(_ => partPredicate(_, shower_accent_wall_part_id));\r\n });\r\n }\r\n }\r\n if (bvStateKey === \"shower_floor_is_active\") {\r\n shower.showerFloorIsActive = bvState[bvStateKey];\r\n }\r\n if (bvStateKey === \"shower_tub_combo_is_active\") {\r\n showerTubCombo.showerTubComboIsActive = bvState[bvStateKey];\r\n if (bvState[bvStateKey] && bvState.bottom_tub) {\r\n showerTubCombo.bottomTub = bvState.bottom_tub\r\n }\r\n if (bvState[bvStateKey] && bvState.left_shower_wall_type) {\r\n showerTubCombo.leftShowerWallType = bvState.left_shower_wall_type\r\n }\r\n }\r\n });\r\n\r\n if (needToChangeLayout) {\r\n this.changeLayout(this.getFeatures());\r\n }\r\n\r\n if (setCartAndUserState) {\r\n this.setCartStateAndUserStateFromBvState(bvState);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n *\r\n * @param bvState {object}\r\n * @param useNames {boolean}\r\n * @returns bvState {object}\r\n */\r\n addSpecificPropertiesToLocalStorage(bvState, useNames = false) {\r\n\r\n const bathTub = this.parts[Bathtub.id];\r\n const shower = this.parts[Shower.id];\r\n const showerTubCombo = this.parts[ShowerTubCombo.id];\r\n\r\n bvState.layout_type = this.type;\r\n\r\n Object.keys(bvState).forEach((bvStateKey) => {\r\n // console.log('bvStateKey', bvStateKey);\r\n if (bvStateKey === 'bathtub') {\r\n bvState.bathtub_type = bathTubTypeToString(bathTub.activeSubType_).toLowerCase();\r\n }\r\n if (bvStateKey === 'shower_body') {\r\n bvState.shower_type = shower.activeSubType_.toLowerCase();\r\n bvState.shower_floor_is_active = shower.showerFloorIsActive;\r\n if (bvState.shower_type === \"complete\") {\r\n bvState.shower_parts = shower.showerBody.activeFeatureParts\r\n .filter(activeFeaturePart => activeFeaturePart)\r\n .map(activeFeaturePart => {\r\n return useNames ? activeFeaturePart.partName : activeFeaturePart.dbFeature.id\r\n });\r\n }\r\n bvState.shower_tub_combo_is_active = shower.showerTubComboIsActive();\r\n if (bvState.shower_tub_combo_is_active) {\r\n bvState.bottom_tub = showerTubCombo.bottomTub;\r\n bvState.left_shower_wall_type = showerTubCombo.leftShowerWallType;\r\n }\r\n }\r\n if (bvStateKey === 'shower_interior_wall') {\r\n bvState.shower_interior_wall_parts = shower.showerInteriorWall.activeFeatureParts\r\n .filter(activeFeaturePart => activeFeaturePart)\r\n .map(activeFeaturePart => {\r\n return useNames ? activeFeaturePart.partName : activeFeaturePart.dbFeature.id\r\n });\r\n }\r\n if (bvStateKey === 'shower_interior_wall_accent') {\r\n bvState.shower_interior_wall_accent_parts = shower.showerInteriorWallAccent.activeFeatureParts\r\n .filter(activeFeaturePart => activeFeaturePart && activeFeaturePart.dbFeature)\r\n .map(activeFeaturePart => {\r\n return useNames ? activeFeaturePart.partName : activeFeaturePart.dbFeature.id\r\n });\r\n }\r\n if (bvStateKey === 'vanity') {\r\n bvState.vanity_type = this.parts[Vanity.id].activeSubType_.toLowerCase();\r\n }\r\n });\r\n // console.log('bvState', bvState);\r\n if (bvState[\"pony_wall\"]) {\r\n if (!bvState[\"pony_wall_glass\"] && shower.ponyWallGlass\r\n && shower.ponyWallGlass.activeFeature && shower.ponyWallGlass.activeFeature.dbFeature.id) {\r\n const feature = shower.ponyWallGlass.activeFeature;\r\n bvState[\"pony_wall_glass\"] = useNames ? feature.partName : feature.dbFeature.id\r\n }\r\n }\r\n if (bvState[\"large_corner_caddie\"] || bvState[\"corner_caddie\"] || bvState[\"small_corner_shelf\"]) {\r\n const showerAccessoriesParent = this.parts[ShowerAccessories.id];\r\n if (showerAccessoriesParent) {\r\n bvState.caddie_type = this.parts[ShowerAccessories.id].caddie_type;\r\n }\r\n }\r\n return bvState\r\n }\r\n\r\n addNonVisualizerSubPart(featureGroupName){\r\n const otherParent = this.parts[Other.id];\r\n const partId = snakeCase(featureGroupName);\r\n let relatedItem = otherParent.relatedItems.find(relatedItem => relatedItem.partId === partId);\r\n if (!relatedItem) {\r\n relatedItem = new NonVisualizerSubPart(true, partId, featureGroupName);\r\n relatedItem.getParent = () => otherParent;\r\n otherParent.relatedItems.push(relatedItem);\r\n }\r\n return new DesignNavigationItem(relatedItem.partName, relatedItem)\r\n }\r\n\r\n excludedIndexesFromHover = (layoutType) => {\r\n return [\r\n this.zIndexes[layoutType].Global_Shadow_Overlay, // exclude Global Shadow\r\n this.zIndexes[layoutType].Window_Covering, // exclude Window Coverings\r\n this.zIndexes[layoutType].Ceiling_Lights, // exclude Ceiling_Lights\r\n // this.zIndexes[layoutType].Shower.Custom60in.Wall, // exclude Shower Wall\r\n this.zIndexes[layoutType].Shower.Custom60in.Glass, // exclude Shower Glass\r\n // && layerHovering.layer.zIndex !== Z.this.zIndexes[layoutType].Shower.Custom60in.ExtrusionWallRight // exclude Shower ExtrusionWallRight\r\n // && layerHovering.layer.zIndex !== Z.this.zIndexes[layoutType].Shower.Custom60in.ExtrusionWallLeft // exclude Shower ExtrusionWallLeft\r\n this.zIndexes[layoutType].Shower.Custom60in.Overlay, // exclude Shower Overlay\r\n this.zIndexes[layoutType].Shower.Steam60in.Overlay, // exclude Shower Overlay\r\n this.zIndexes[layoutType].Shower.Custom60in.ExtrusionWallRightShadow, // exclude Right Shower Wall Shadow\r\n this.zIndexes[layoutType].Shower.Custom60in.ExtrusionWallLeftShadow, // exclude Left Shower Wall Shadow\r\n this.zIndexes[layoutType].Shower.Custom60in.ExtrusionWallLeftShadowHalfWall, // exclude Left Shower Wall Shadow\r\n this.zIndexes[layoutType].Shower.Custom60in.ShowerDrain, // exclude Shower Drain\r\n this.zIndexes[layoutType].Shower.Custom60in.PonyWallCapShadow, // exclude Pony Wall Cap Shadow\r\n this.zIndexes[layoutType].Shower.Custom60in.WallShadow, // exclude Shower Interior shadow\r\n this.zIndexes[layoutType].Shower.Custom60in.PonyWallShadow, // exclude Pony Wall Overlay\r\n this.zIndexes[layoutType].Shower.Custom60in.ThresholdShadow, // exclude ThresholdShadow\r\n this.zIndexes[layoutType].Shower.Custom60in.FloorShadow, // exclude ThresholdShadow\r\n ]\r\n }\r\n\r\n}\r\n","import React, {Component} from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {connect} from \"react-redux\";\r\nimport {setNavigationViewType} from \"../../../../actions/navigationFunctions\";\r\n\r\nclass SelectionMobileViewSwitchers extends Component {\r\n\r\n static propTypes = {\r\n switchers: PropTypes.arrayOf(PropTypes.number).isRequired,\r\n };\r\n\r\n render() {\r\n return (\r\n
    \r\n {this.props.switchers.includes(2) ? (\r\n \r\n ) : null}\r\n {this.props.switchers.includes(3) ? (\r\n \r\n ) : null}\r\n {this.props.switchers.includes(4) ? (\r\n \r\n ) : null}\r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => ({\r\n navigationViewType: store.navigationState.navigationViewType,\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n setNavigationViewType\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(SelectionMobileViewSwitchers);","import React, {useCallback} from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\nimport $ from \"jquery\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\n\r\nimport IconButton from \"@mui/material/IconButton\";\r\nimport Button from \"@mui/material/Button\";\r\nimport DeleteIcon from \"@mui/icons-material/Delete\";\r\nimport DeleteForeverIcon from \"@mui/icons-material/DeleteForever\";\r\nimport FormControlLabel from '@mui/material/FormControlLabel';\r\nimport Switch from '@mui/material/Switch';\r\n\r\nimport {checkIfFeatureDisabled, navFeatureCLick} from \"../lookFunctions\";\r\nimport {updateCanvasCount} from \"../../../../actions/actionFunctions\";\r\nimport {featureInterface} from \"../../../../interfaces/featureInterface\";\r\nimport {disableFeature, enableRelatedFeature} from \"../lookFunctions2\";\r\nimport {setLookOverlayOpened, setLookStylePopup} from \"../../../../actions/lookFunctions\";\r\nimport {LOOK_OVERLAYS} from \"../../core/constants\";\r\nimport {IS_LIXIL_UI, IS_PRODUCT_JOURNEY, IS_QKB_UI} from \"../../../../config\";\r\n\r\nimport {getCurrentLayout} from \"../../../appLayout\";\r\nimport Analytics, {LOOK_JOURNEY_ANALYTIC_EVENTS, PRODUCT_JOURNEY_ANALYTIC_EVENTS} from \"../../../../analytics\";\r\nimport {getFeatureIsLocked} from \"../../../../misc/helpers\";\r\nimport WithUpdateLookCartItem from \"../../hocs/withUpdateLookCartItem\";\r\nimport ActionTypes from \"../../../../misc/actionTypes\";\r\n\r\nconst LookFeatureRemoveButton = (props) => {\r\n\r\n const {lookFeature, updateCanvasCount, isIcon, isList, isToggle, intl, setLookOverlayOpened, setLookStylePopup,\r\n text, updateLookCartItem, refreshItems} = props;\r\n\r\n const parent = lookFeature.getParent();\r\n const alreadyDisabled = checkIfFeatureDisabled(lookFeature, parent);\r\n const featureIsLocked = getFeatureIsLocked(lookFeature);\r\n\r\n const updateForOldUI = useCallback(() => {\r\n if (!IS_QKB_UI) {\r\n return\r\n }\r\n $(window).trigger(ActionTypes.CHANGE_LAYOUT); // update canvas\r\n if (refreshItems) {\r\n refreshItems();// update navigation (non compatible)\r\n }\r\n }, [refreshItems]);\r\n\r\n const deleteButtonClick = async () => {\r\n if (alreadyDisabled) {\r\n return false\r\n }\r\n\r\n if (IS_LIXIL_UI) {\r\n const featureLabel = Analytics.getSkuForAnalytics(lookFeature);\r\n Analytics.sendClickEvent(IS_PRODUCT_JOURNEY\r\n ? PRODUCT_JOURNEY_ANALYTIC_EVENTS.productFeatureRemove + featureLabel\r\n : LOOK_JOURNEY_ANALYTIC_EVENTS.lookFeatureRemove + featureLabel\r\n );\r\n\r\n if (featureIsLocked) {\r\n setLookOverlayOpened(LOOK_OVERLAYS.leadCapture);\r\n return false\r\n }\r\n }\r\n\r\n const layout = getCurrentLayout();\r\n if (document.kvConfig.visualizerType === \"bvLook\") {\r\n switch (lookFeature.partId) {\r\n case \"vanity_faucet\":\r\n case \"vanity_sink\": {\r\n if (IS_PRODUCT_JOURNEY) {\r\n if (lookFeature.partId === \"vanity_sink\") {\r\n const relatedFeatureGroup = layout.getFeatureGroupByPartId(\"vanity_faucet\");\r\n if (relatedFeatureGroup && !relatedFeatureGroup.disabled && relatedFeatureGroup.activeFeature\r\n && (!relatedFeatureGroup.activeFeature.metaData[\"MountType\"] || !relatedFeatureGroup.activeFeature.metaData[\"MountType\"].includes('U'))) {\r\n // Turning off the faucet should not turn off the sink or countertop, but turning of the sink should turn off the faucet (*unless it’s a wall mount faucet)\r\n disableFeature(relatedFeatureGroup.activeFeature, updateLookCartItem);\r\n }\r\n }\r\n break;\r\n }\r\n const parent = layout.getSubPartByPartId(lookFeature.partId === \"vanity_faucet\" ? \"vanity_sink\" : \"vanity_faucet\");\r\n if (IS_LIXIL_UI && parent && lookFeature.metaData[\"layerPosition\"] && parent.part.layerPositions[lookFeature.metaData.layerPosition]) {\r\n setLookOverlayOpened(LOOK_OVERLAYS.styleRemoveFeature);\r\n // setLookRemovePopup({\r\n // fromFeature: lookFeature\r\n // });\r\n setLookStylePopup({\r\n notMatchingFeatures: [parent.part.layerPositions[lookFeature.metaData.layerPosition]]\r\n });\r\n return false\r\n }\r\n break;\r\n }\r\n case \"toilet\": {\r\n [\"toilet_brush\", \"paper_holder\"].forEach(partId => {\r\n const relatedFeatureGroup = layout.getFeatureGroupByPartId(partId);\r\n if (relatedFeatureGroup && !relatedFeatureGroup.disabled && relatedFeatureGroup.activeFeature) {\r\n disableFeature(relatedFeatureGroup.activeFeature, updateLookCartItem);\r\n }\r\n })\r\n break;\r\n }\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n await disableFeature(lookFeature, updateLookCartItem);\r\n updateCanvasCount(); // update canvas and self component\r\n updateForOldUI(); // update canvas with jquery ommmg\r\n };\r\n\r\n const turnOnClick = () => {\r\n const featureLabel = Analytics.getSkuForAnalytics(lookFeature);\r\n Analytics.sendClickEvent(IS_PRODUCT_JOURNEY\r\n ? PRODUCT_JOURNEY_ANALYTIC_EVENTS.productFeatureEnable + featureLabel\r\n : LOOK_JOURNEY_ANALYTIC_EVENTS.lookFeatureEnable + featureLabel\r\n );\r\n\r\n if (parent.disabled) {\r\n parent.disabled = false;\r\n parent.disabledClick();\r\n }\r\n navFeatureCLick(lookFeature);\r\n enableRelatedFeature(lookFeature, null, null);\r\n updateCanvasCount(); // update canvas and self component\r\n updateForOldUI(); // update canvas with jquery ommmg\r\n }\r\n\r\n if (isIcon) {\r\n return (\r\n \r\n \r\n \r\n )\r\n }\r\n\r\n if (isToggle) {\r\n return (\r\n \r\n }\r\n label={intl.formatMessage({id: text || \"grohe.mobile.feature.enableButton\"})}\r\n />\r\n )\r\n }\r\n\r\n return (\r\n \r\n )\r\n};\r\n\r\nLookFeatureRemoveButton.propTypes = {\r\n lookFeature: PropTypes.shape(featureInterface),\r\n updateLookCartItem: PropTypes.func.isRequired,\r\n isList: PropTypes.bool,\r\n isIcon: PropTypes.bool,\r\n isToggle: PropTypes.bool,\r\n text: PropTypes.string,\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {canvasCount} = store.bathroomVisualizerState;\r\n const {isPhoneNumberValidated} = store.userState; // to update component when user is logged in\r\n\r\n return {\r\n canvasCount,\r\n isPhoneNumberValidated,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setLookOverlayOpened,\r\n // setLookRemovePopup,\r\n setLookStylePopup,\r\n updateCanvasCount,\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)((props) => {\r\n return (\r\n \r\n {(updateLookCartItem) => }\r\n \r\n )\r\n })\r\n)\r\n","import React, { Component } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {connect} from \"react-redux\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport Button from \"@mui/material/Button\";\r\n\r\nimport Analytics from './../../analytics';\r\nimport UiSelect from \"../ui/select\";\r\nimport {BACKSPLASH_TYPES} from \"../kvComponent/core/constants\";\r\nimport {KVSCENE_BACKSPLASH_TYPES} from \"../kvSceneComponent/core/constants\";\r\nimport {getCurrentLayout} from \"../appLayout\";\r\nimport {\r\n setActiveFeature,\r\n toggleSelectionFeatureInfo,\r\n toggleShowDescriptionCover,\r\n updateCanvasCount\r\n} from \"../../actions/actionFunctions\";\r\nimport WithClickCount from \"../look/hocs/withClickCount\";\r\nimport {loaderDisable, loaderEnable} from \"../ui/loaderView\";\r\nimport Navigation from \"../visComponents/navigation/navigation\";\r\nimport {setLookActiveFeature} from \"../../actions/lookFunctions\";\r\nimport {featureInterface} from \"../../interfaces/featureInterface\";\r\n\r\nclass BacksplashSelect extends Component {\r\n\r\n static propTypes = {\r\n // activePart: PropTypes.object.isRequired // Backsplash\r\n updateParent: PropTypes.func,\r\n useButtons: PropTypes.bool,\r\n activeFeature: PropTypes.shape(featureInterface),\r\n };\r\n\r\n handleBacksplashItemClick = async (type, maxClickCountReached) => {\r\n Analytics.sendClickEvent(\"backsplash-type-selected-\" + type);\r\n if (maxClickCountReached && maxClickCountReached()) {\r\n return false\r\n }\r\n const backsplashSubPart = this.getBacksplashPart();\r\n const currentActiveName = backsplashSubPart.activeFeature ? backsplashSubPart.activeFeature.getCountertopGroupsSplittedFeatureName() : \"\";\r\n let featureToClick = backsplashSubPart.getFeatureByBacksplashType(type);\r\n // console.log(\"featureToClick\", featureToClick);\r\n if (featureToClick && currentActiveName && (featureToClick.getCountertopGroupsSplittedFeatureName() !== currentActiveName)) {\r\n loaderEnable();\r\n await Navigation.searchFeaturesByName(backsplashSubPart, currentActiveName);\r\n loaderDisable();\r\n featureToClick = backsplashSubPart.getFeatureByBacksplashType(type);\r\n // console.log(\"featureToClick2\", featureToClick);\r\n }\r\n console.log(\"featureToClick\", featureToClick);\r\n if (featureToClick) {\r\n featureToClick.handleClick();\r\n this.props.setActiveFeature(featureToClick);\r\n // this.props.toggleShowDescriptionCover(false);\r\n this.forceUpdate();\r\n if (this.props.updateParent) {\r\n this.props.updateParent(featureToClick);\r\n }\r\n this.props.updateCanvasCount();\r\n }\r\n if (this.props.useButtons) {\r\n this.props.setLookActiveFeature(featureToClick);\r\n }\r\n };\r\n\r\n getBacksplashPart = () => {\r\n const layout = getCurrentLayout();\r\n const wallsParent = layout.parts[\"Walls\"];\r\n return wallsParent.relatedItems.find(relItem => relItem.partId === \"backsplash\");\r\n };\r\n\r\n getValueText = () => {\r\n if (this.props.bvOpened) { // visualizer\r\n return \r\n } else {\r\n if (this.props.windowWidth < 1160) {\r\n return \r\n } else if (this.props.windowWidth < 1600) {\r\n return \r\n } else {\r\n return \r\n }\r\n }\r\n };\r\n\r\n getBackplashTypes = () => {\r\n if (document.kvConfig.visualizerType === \"Kitchen\") {\r\n return BACKSPLASH_TYPES\r\n }\r\n if (this.props.fabricatorData.isEncore) {\r\n const backsplashSubPart = this.getBacksplashPart();\r\n if (backsplashSubPart) {\r\n return KVSCENE_BACKSPLASH_TYPES.filter(type => {\r\n return !!backsplashSubPart.getFeatureByBacksplashType(type, \"\", true)\r\n })\r\n }\r\n }\r\n return KVSCENE_BACKSPLASH_TYPES\r\n };\r\n\r\n renderButtons = (currentType) => {\r\n return (\r\n \r\n {(maxClickCountReached) => (\r\n
    \r\n \r\n \r\n \r\n
    \r\n {this.getBackplashTypes().map(backsplashType => {\r\n const isActive = currentType === backsplashType;\r\n return (\r\n \r\n )\r\n })}\r\n
    \r\n
    \r\n )}\r\n
    \r\n )\r\n };\r\n\r\n render() {\r\n const backsplashSubPart = this.getBacksplashPart();\r\n const currentType = backsplashSubPart.getCurrentActiveFeatureType();\r\n if (this.props.useButtons) {\r\n return this.renderButtons(currentType)\r\n }\r\n // console.log(\"backsplashSubPart\", );\r\n return (\r\n \r\n )\r\n }\r\n}\r\n\r\n\r\nconst mapStateToProps = (store, ownProps) => {\r\n const {lookActiveFeature} = store.lookState;\r\n const fabricatorData = store.fabricatorState;\r\n const {canvasCount} = store.bathroomVisualizerState;\r\n return {\r\n bvOpened: store.bathroomVisualizerState.bvOpened,\r\n windowWidth: store.serverState.windowWidth,\r\n lookActiveFeature: ownProps.activeFeature || lookActiveFeature, // update active button\r\n fabricatorData, // update active button\r\n canvasCount,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n toggleSelectionFeatureInfo,\r\n setActiveFeature,\r\n toggleShowDescriptionCover,\r\n updateCanvasCount,\r\n setLookActiveFeature,\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(BacksplashSelect)\r\n","import {MODULE_CONTEXT_MENU_DIRECTIONS} from \"../../constants\";\r\n\r\nexport const topCabinetModuleSystem = [\r\n [\"18_18_25\", \"18_18_26\"],\r\n [\"18_36_4\", \"18_36_5\"],\r\n [\"36_36_1\"],\r\n [\"18_36_4\", \"18_18_26\", \"18_18_28\"],\r\n [\"18_36_4\", \"18_36_5\"],\r\n [\"18_18_25\", \"18_18_26\"],\r\n [\"18_36_4\", \"18_36_5\"],\r\n [\"36_36_1\"]\r\n];\r\n\r\nexport const bottomCabinetModuleSystem = [\r\n [],\r\n [\"36_12_41\", \"36_24_10\"],\r\n [\"24_12_44\", \"12_36_8\", \"24_12_46\", \"24_12_48\"],\r\n [\"12_36_6\", \"24_36_3\"],\r\n [\"12_36_6\", \"24_12_45\", \"24_24_18\"],\r\n [\"36_36_1\"],\r\n [\"36_12_41\", \"36_24_10\"],\r\n [\"36_12_41\", \"36_12_42\", \"36_12_43\"]\r\n];\r\n\r\nexport const getModuleCombinations = (moduleContextMenuModulePart, direction = MODULE_CONTEXT_MENU_DIRECTIONS.Vertical) => {\r\n // width-height-id\r\n switch (moduleContextMenuModulePart) {\r\n case \"1\":\r\n switch (direction) {\r\n case MODULE_CONTEXT_MENU_DIRECTIONS.Vertical:\r\n return [\"12_36_6-12_36_7-12_36_8\", \"18_36_4-18_36_5\", \"24_36_2-12_36_8\", \"12_36_6-24_36_3\"];\r\n case MODULE_CONTEXT_MENU_DIRECTIONS.Horizontal:\r\n return [\"36_12_41-36_12_42-36_12_43\", \"36_18_19-36_18_20\", \"36_24_9-36_12_43\", \"36_12_41-36_24_10\"];\r\n default:\r\n return []\r\n }\r\n case \"2\":\r\n switch (direction) {\r\n case MODULE_CONTEXT_MENU_DIRECTIONS.Vertical:\r\n return [\"12_36_6-12_36_7\"];\r\n case MODULE_CONTEXT_MENU_DIRECTIONS.Horizontal:\r\n return [\"24_24_15-24_12_48\", \"24_24_17-24_12_44\", \"24_18_21-24_18_23\", \"24_12_44-24_12_46-24_12_48\"];\r\n default:\r\n return []\r\n }\r\n case \"3\":\r\n switch (direction) {\r\n case MODULE_CONTEXT_MENU_DIRECTIONS.Vertical:\r\n return [\"12_36_7-12_36_8\"];\r\n case MODULE_CONTEXT_MENU_DIRECTIONS.Horizontal:\r\n return [\"24_24_16-24_12_49\", \"24_24_18-24_12_45\", \"24_18_22-24_18_24\", \"24_12_45-24_12_47-24_12_49\"];\r\n default:\r\n return []\r\n }\r\n case \"4\":\r\n return [\"18_24_11-18_12_54\", \"18_24_13-18_12_50\", \"18_18_25-18_18_27\", \"18_12_50-18_12_52-18_12_54\"];\r\n case \"5\":\r\n return [\"18_24_12-18_12_55\", \"18_24_14-18_12_51\", \"18_18_26-18_18_28\", \"18_12_51-18_12_53-18_12_55\"];\r\n case \"6\": // left 18\r\n return [\"12_18_29-12_18_32\", \"12_24_35-12_12_62\", \"12_24_38-12_12_56\", \"12_12_56-12_12_59-12_12_62\"];\r\n case \"7\": // center 18\r\n return [\"12_18_30-12_18_33\", \"12_24_36-12_12_63\", \"12_24_39-12_12_57\", \"12_12_57-12_12_60-12_12_63\"];\r\n case \"8\": // right 18\r\n return [\"12_18_31-12_18_34\", \"12_24_37-12_12_64\", \"12_24_40-12_12_58\", \"12_12_58-12_12_61-12_12_64\"];\r\n case \"9\":\r\n switch (direction) {\r\n case MODULE_CONTEXT_MENU_DIRECTIONS.Vertical:\r\n return [\"18_24_11-18_24_12\", \"24_24_15-12_24_37\", \"24_24_16-12_24_35\", \"12_24_35-12_24_36-12_24_37\"];\r\n case MODULE_CONTEXT_MENU_DIRECTIONS.Horizontal:\r\n return [\"36_12_41-36_12_42\"];\r\n default:\r\n return []\r\n }\r\n case \"10\":\r\n switch (direction) {\r\n case MODULE_CONTEXT_MENU_DIRECTIONS.Vertical:\r\n return [\"18_24_13-18_24_14\", \"24_24_17-12_24_40\", \"24_24_18-12_24_38\", \"12_24_38-12_24_39-12_24_40\"];\r\n case MODULE_CONTEXT_MENU_DIRECTIONS.Horizontal:\r\n return [\"36_12_42-36_12_43\"];\r\n default:\r\n return []\r\n }\r\n case \"11\":\r\n return [\"18_12_50-18_12_52\"];\r\n case \"12\":\r\n return [\"18_12_51-18_12_53\"];\r\n case \"13\":\r\n return [\"18_12_52-18_12_54\"];\r\n case \"14\":\r\n return [\"18_12_53-18_12_55\"];\r\n case \"15\":\r\n return [\"12_24_35-12_24_36\", \"24_12_44-24_12_46\"];\r\n case \"16\":\r\n return [\"12_24_36-12_24_37\", \"24_12_45-24_12_47\"];\r\n case \"17\":\r\n return [\"12_24_38-12_24_39\", \"24_12_46-24_12_48\"];\r\n case \"18\":\r\n return [\"12_24_39-12_24_40\", \"24_12_47-24_12_49\"];\r\n case \"19\":\r\n return [\"24_18_21-12_18_31\", \"24_18_22-12_18_29\", \"18_18_25-18_18_26\", \"12_18_29-12_18_30-12_18_31\"];\r\n case \"20\":\r\n return [\"24_18_23-12_18_34\", \"24_18_24-12_18_32\", \"18_18_27-18_18_28\", \"12_18_32-12_18_33-12_18_34\"];\r\n case \"21\":\r\n return [\"12_18_29-12_18_30\"];\r\n case \"22\":\r\n return [\"12_18_30-12_18_31\"];\r\n case \"23\":\r\n return [\"12_18_32-12_18_33\"];\r\n case \"24\":\r\n return [\"12_18_33-12_18_34\"];\r\n case \"35\":\r\n return [\"12_12_56-12_12_59\"];\r\n case \"36\":\r\n return [\"12_12_57-12_12_60\"];\r\n case \"37\":\r\n return [\"12_12_58-12_12_61\"];\r\n case \"38\":\r\n return [\"12_12_59-12_12_62\"];\r\n case \"39\":\r\n return [\"12_12_60-12_12_63\"];\r\n case \"40\":\r\n return [\"12_12_61-12_12_64\"];\r\n case \"41\":\r\n return [\"24_12_44-12_12_58\", \"24_12_45-12_12_56\", \"12_12_56-12_12_57-12_12_58\"];\r\n case \"42\":\r\n return [\"24_12_46-12_12_61\", \"24_12_47-12_12_59\", \"12_12_59-12_12_60-12_12_61\"];\r\n case \"43\":\r\n return [\"24_12_48-12_12_64\", \"24_12_49-12_12_62\", \"12_12_62-12_12_63-12_12_64\"];\r\n case \"44\":\r\n return [\"12_12_56-12_12_57\"];\r\n case \"45\":\r\n return [\"12_12_57-12_12_58\"];\r\n case \"46\":\r\n return [\"12_12_59-12_12_60\"];\r\n case \"47\":\r\n return [\"12_12_60-12_12_61\"];\r\n case \"48\":\r\n return [\"12_12_62-12_12_63\"];\r\n case \"49\":\r\n return [\"12_12_63-12_12_64\"];\r\n case \"50\":\r\n case \"51\":\r\n case \"52\":\r\n case \"53\":\r\n case \"54\":\r\n case \"55\":\r\n case \"56\":\r\n case \"57\":\r\n case \"58\":\r\n case \"59\":\r\n case \"60\":\r\n case \"61\":\r\n case \"62\":\r\n case \"63\":\r\n case \"64\": // no where to split more!\r\n default:\r\n return []\r\n }\r\n};","import {Part} from \"../part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport {applianceThumbnail} from \"../assets\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport {PLACEMENTS} from \"../constants\";\r\n\r\nimport Fridge from \"../subparts/appliances/fridge\";\r\nimport FridgeShadow from \"../subparts/appliances/fridgeShadow\";\r\nimport Hood from \"../subparts/appliances/hood\";\r\nimport Dishwasher from \"../subparts/appliances/dishwasher\";\r\nimport Microwave from \"../subparts/appliances/microwave\";\r\nimport Range from \"../subparts/appliances/range\";\r\n\r\nexport default class Appliance extends Part {\r\n static id = 'Appliances';\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Appliances';\r\n this.partThumbnail = applianceThumbnail;\r\n this.partThumbnailSize = \"70%\";\r\n this.translateId = \"visualizer.kitchen.appliance\";\r\n\r\n // related items\r\n this.fridge = null;\r\n this.fridgeShadow = null;\r\n this.hood = null;\r\n this.microwave = null;\r\n this.range = null;\r\n this.dishwasher = null;\r\n }\r\n\r\n load(dbFeature) {\r\n let relatedItemName = \"\",\r\n shouldLoadInDifferentGroups = false,\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Fridge\":\r\n relatedItemName = \"fridge\";\r\n RelatedItemClass = Fridge;\r\n break;\r\n case \"Fridge Shadow\":\r\n relatedItemName = \"fridgeShadow\";\r\n RelatedItemClass = FridgeShadow;\r\n break;\r\n case \"Hood\":\r\n relatedItemName = \"hood\";\r\n RelatedItemClass = Hood;\r\n break;\r\n case \"Dishwasher\":\r\n relatedItemName = \"dishwasher\";\r\n RelatedItemClass = Dishwasher;\r\n break;\r\n case \"Microwave\":\r\n relatedItemName = \"microwave\";\r\n RelatedItemClass = Microwave;\r\n break;\r\n case \"Range\":\r\n // we still need to keep NotInVisualizer Ranges here\r\n if ((dbFeature.metaData[\"Placement\"] && dbFeature.metaData[\"Placement\"].includes(PLACEMENTS.Countertop)) || !dbFeature.metaData[\"Placement\"]) {\r\n if (!dbFeature.metaData[\"Placement\"]) {\r\n shouldLoadInDifferentGroups = true;\r\n }\r\n relatedItemName = \"range\";\r\n RelatedItemClass = Range;\r\n }\r\n break;\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].load(dbFeature);\r\n return !shouldLoadInDifferentGroups;\r\n }\r\n return false\r\n }\r\n\r\n navigationItem() {\r\n return new DesignNavigationItem('Appliance', this);\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n handleSubPartClick() {\r\n\r\n }\r\n\r\n}\r\n","import {Part} from \"../part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport {centerIslandThumbnail} from \"../assets\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport {PLACEMENTS} from \"../constants\";\r\n\r\nimport Cabinet from \"../subparts/centerIsland/cabinet\";\r\nimport Countertop from \"../subparts/centerIsland/countertop\";\r\nimport Chairs from \"../subparts/centerIsland/chairs\";\r\nimport Faucet from \"../subparts/centerIsland/faucet\";\r\nimport Sink from \"../subparts/centerIsland/sink\";\r\nimport Handle from \"../subparts/centerIsland/handle\";\r\nimport CenterIslandShadow from \"../subparts/centerIsland/centerIslandshadow\";\r\nimport Stovetop from \"../subparts/centerIsland/stovetop\";\r\nimport Range from \"../subparts/centerIsland/range\";\r\nimport Edge from \"../subparts/centerIsland/edge\";\r\nimport ChairsShadow from \"../subparts/centerIsland/chairsShadow\";\r\n\r\nexport default class CenterIsland extends Part {\r\n static id = 'CenterIsland';\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'CenterIsland';\r\n this.partThumbnail = centerIslandThumbnail;\r\n this.translateId = \"visualizer.kitchen.center_island\";\r\n\r\n // related items\r\n this.cabinet = null;\r\n this.countertop = null;\r\n this.chairs = null;\r\n this.edge = null;\r\n this.faucet = null;\r\n this.sink = null;\r\n this.range = null;\r\n this.centerIslandshadow = null;\r\n }\r\n\r\n load(dbFeature) {\r\n let relatedItemName = \"\",\r\n shouldLoadInDifferentGroups = false,\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Center Island\":\r\n relatedItemName = \"cabinet\";\r\n RelatedItemClass = Cabinet;\r\n break;\r\n case \"Center Island Countertop\":\r\n relatedItemName = \"countertop\";\r\n RelatedItemClass = Countertop;\r\n break;\r\n case \"Center Island Handle\":\r\n relatedItemName = \"handle\";\r\n RelatedItemClass = Handle;\r\n break;\r\n case \"Chair Shadow\":\r\n relatedItemName = \"chairsShadow\";\r\n RelatedItemClass = ChairsShadow;\r\n break;\r\n case \"Chair\":\r\n relatedItemName = \"chairs\";\r\n RelatedItemClass = Chairs;\r\n break;\r\n case \"Center Island Shadow\":\r\n relatedItemName = \"centerIslandshadow\";\r\n RelatedItemClass = CenterIslandShadow;\r\n break;\r\n case \"Faucet\":\r\n if ((dbFeature.metaData[\"Placement\"] && dbFeature.metaData[\"Placement\"].includes(PLACEMENTS.Island)) || !dbFeature.metaData[\"Placement\"]) {\r\n if (!dbFeature.metaData[\"Placement\"]) {\r\n shouldLoadInDifferentGroups = true;\r\n }\r\n relatedItemName = \"faucet\";\r\n RelatedItemClass = Faucet;\r\n }\r\n break;\r\n case \"Sink\":\r\n if ((dbFeature.metaData[\"Placement\"] && dbFeature.metaData[\"Placement\"].includes(PLACEMENTS.Island)) || !dbFeature.metaData[\"Placement\"]) {\r\n if (!dbFeature.metaData[\"Placement\"]) {\r\n shouldLoadInDifferentGroups = true;\r\n }\r\n relatedItemName = \"sink\";\r\n RelatedItemClass = Sink;\r\n }\r\n break;\r\n case \"Stovetop\":\r\n if ((dbFeature.metaData[\"Placement\"] && dbFeature.metaData[\"Placement\"].includes(PLACEMENTS.Island)) || !dbFeature.metaData[\"Placement\"]) {\r\n if (!dbFeature.metaData[\"Placement\"]) {\r\n shouldLoadInDifferentGroups = true;\r\n }\r\n relatedItemName = \"stovetop\";\r\n RelatedItemClass = Stovetop;\r\n }\r\n break;\r\n case \"Range\":\r\n if ((dbFeature.metaData[\"Placement\"] && dbFeature.metaData[\"Placement\"].includes(PLACEMENTS.Island)) || !dbFeature.metaData[\"Placement\"]) {\r\n if (!dbFeature.metaData[\"Placement\"]) {\r\n shouldLoadInDifferentGroups = true;\r\n }\r\n relatedItemName = \"range\";\r\n RelatedItemClass = Range;\r\n }\r\n break;\r\n case \"Edge Profile\":\r\n shouldLoadInDifferentGroups = true;\r\n relatedItemName = \"edge\";\r\n RelatedItemClass = Edge;\r\n break;\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].load(dbFeature);\r\n return !shouldLoadInDifferentGroups;\r\n }\r\n return false\r\n }\r\n\r\n navigationItem() {\r\n return new DesignNavigationItem('Center Island', this);\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n subParts(withHidden = true) {\r\n return this.relatedItems\r\n .filter(item => {\r\n if (item.partId === \"center_island_handle\") {\r\n item.visible = item.features.filter(f => f.matchesMetaForArrayOfConditions(item.getArrayOfConditions())).length;\r\n }\r\n return this.filterRelatedItem(item, withHidden)\r\n })\r\n .map(_ => new DesignNavigationItem(_.partName, _));\r\n }\r\n\r\n handleSubPartClick() {\r\n\r\n }\r\n\r\n getCabinetType() {\r\n return this.cabinet && this.cabinet.activeFeature\r\n ? this.cabinet.activeFeature.dbFeature.metaData[\"Cabinet\"]\r\n : \"\"\r\n }\r\n\r\n getChairType() {\r\n return this.chairs && this.chairs.activeFeature\r\n ? this.chairs.activeFeature.dbFeature.metaData[\"Chair\"]\r\n : \"\"\r\n }\r\n\r\n}\r\n","import React, {Component} from 'react';\r\nimport {connect} from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport Analytics from './../../analytics';\r\nimport UserLoginButton from './../ui/userLoginButton';\r\nimport {toggleUserPopup, changeMessageBoxState, showSchedulerPopup} from \"../../actions/actionFunctions\";\r\nimport {loaderDisable, loaderEnable} from \"../ui/loaderView\";\r\nimport {saveQuote} from \"../../api/server-api\";\r\nimport {QuoteRequestType, UserPopupTypes} from \"../visComponents/constants\";\r\nimport {renderMessagePopup} from \"../../api/api-popups\";\r\n\r\nclass ScheduleButton extends Component {\r\n\r\n static propTypes = {\r\n buttonLayoutId: PropTypes.oneOf([\"mobileButton\", \"designButtonMenu\", \"mobileNavigationMenu\"]).isRequired,\r\n scheduleButtonOnClick: PropTypes.func\r\n };\r\n\r\n handleScheduleButtonClick = () => {\r\n if (this.props.scheduleButtonOnClick) {\r\n this.props.scheduleButtonOnClick(); // close design button list, etc.\r\n }\r\n const fabricatorSettings = this.props.fabricatorSettings;\r\n Analytics.sendClickEvent(this.getAnalyticsEvent());\r\n if (!this.props.isPhoneNumberValidated) {\r\n UserLoginButton.handleLoginClick({\r\n ...this.props,\r\n userPopupType: UserPopupTypes.Schedule\r\n });\r\n return;\r\n }\r\n if (fabricatorSettings.enableCalendarForScheduling) {\r\n this.props.showSchedulerPopup(true)\r\n } else {\r\n loaderEnable(\"loader.appointmentText\", \"loader.appointmentTitle\");\r\n saveQuote({submit: true, quoteRequestType: QuoteRequestType.ScheduleAnAppointment})\r\n .then(() => {\r\n loaderDisable();\r\n renderMessagePopup(\"userPopup.messageBox.appointmentRequested\");\r\n });\r\n }\r\n };\r\n\r\n getAnalyticsEvent = () => {\r\n switch (this.props.buttonLayoutId) {\r\n case \"mobileButton\":\r\n default:\r\n return \"schedule-appointment-main-button\";\r\n case \"designButtonMenu\":\r\n return \"design-buttons-schedule-button\";\r\n case \"mobileNavigationMenu\":\r\n return \"menu-option-clicked-design-consultation\";\r\n }\r\n };\r\n\r\n getSchedulingButton =() => {\r\n switch (this.props.buttonLayoutId) {\r\n case \"mobileButton\":\r\n default:\r\n return (\r\n \r\n );\r\n case \"designButtonMenu\":\r\n return (\r\n
  • \r\n \r\n
  • \r\n );\r\n case \"mobileNavigationMenu\":\r\n return (\r\n
  • \r\n )\r\n }\r\n };\r\n\r\n render() {\r\n return this.props.fabricatorSettings.enableScheduling ? this.getSchedulingButton() : null\r\n }\r\n\r\n}\r\nconst mapStateToProps = (store) => ({\r\n userIsLoggedIn: store.userState.userIsLoggedIn,\r\n isPhoneNumberValidated: store.userState.isPhoneNumberValidated,\r\n fabricatorSettings: store.fabricatorState.settings\r\n});\r\nexport default connect(mapStateToProps, {\r\n toggleUserPopup,\r\n changeMessageBoxState,\r\n showSchedulerPopup\r\n})(ScheduleButton);\r\n","import values from 'lodash/values';\r\nimport invert from 'lodash/invert';\r\nimport snakeCase from 'lodash/snakeCase';\r\n\r\nimport LayoutCommon from \"../../visComponents/layoutCommon\";\r\n\r\nimport {LayoutType, LayoutAbbreviation} from \"./constants\";\r\nimport zIndexes from \"./zIndex\";\r\n\r\nimport Other from \"./parts/other\";\r\nimport NonVisualizerSubPart from \"./subparts/nonVisualizerSubPart\";\r\nimport DesignNavigationItem from \"../../visComponents/designNavigationItem\";\r\nimport Background from \"./parts/background\";\r\nimport {ShowerAccessories} from \"./parts/showerAccessories\";\r\nimport {Toilet} from \"./parts/toilet\";\r\n// import {WindowParent} from \"./parts/windowParent\";\r\nimport Floor from \"./parts/floor\";\r\nimport Walls from \"./parts/walls\";\r\nimport {Shower} from \"./parts/shower\";\r\nimport {Vanity} from \"./parts/vanity\";\r\nimport {ShowerTubCombo} from \"./parts/showerTubCombo\";\r\nimport Globals from \"./parts/globals\";\r\nimport {Bathtub} from \"./parts/bathtub\";\r\nimport {AVAILABLE_VISUALIZER_TYPES, IS_BATHROOM_OLD_BV_SCENE} from \"../../../config\";\r\n\r\nexport class Layout extends LayoutCommon {\r\n\r\n /**\r\n * @type {int}\r\n */\r\n defaultType = LayoutType.Layout1;\r\n type = this.defaultType;\r\n scene = \"1\";\r\n visualizerType = AVAILABLE_VISUALIZER_TYPES.bvScene;\r\n localStorageKey = \"bvSceneState\";\r\n layersBinding = IS_BATHROOM_OLD_BV_SCENE ? \"Bathroom\" : \"BathroomV5\";\r\n layoutNames = LayoutAbbreviation;\r\n layoutTypes = LayoutType;\r\n zIndexes = zIndexes.layouts;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.parts[Background.id] = new Background();\r\n this.parts[Walls.id] = new Walls();\r\n this.parts[Vanity.id] = new Vanity();\r\n this.parts[Shower.id] = new Shower();\r\n this.parts[ShowerTubCombo.id] = new ShowerTubCombo();\r\n this.parts[ShowerAccessories.id] = new ShowerAccessories();\r\n this.parts[Bathtub.id] = new Bathtub();\r\n this.parts[Toilet.id] = new Toilet();\r\n this.parts[Floor.id] = new Floor();\r\n // this.parts[WindowParent.id] = new WindowParent();\r\n // this.parts[Ceiling.id] = new Ceiling();\r\n this.parts[Globals.id] = new Globals();\r\n this.parts[Other.id] = new Other();\r\n values(this.parts).forEach(part => part.layout = this);\r\n }\r\n\r\n fixFeatureMetaData(dbFeature) {\r\n dbFeature.metaData.RoomLayout = dbFeature.metaData.RoomLayout.map((mValue) => {\r\n Object.values(LayoutType).map(val => val + \"\").forEach(stringNum => {\r\n if (mValue === stringNum) {\r\n mValue = \"Layout\" + mValue\r\n }\r\n })\r\n return mValue\r\n })\r\n return dbFeature\r\n }\r\n\r\n getCurrentLayoutName(type = this.type) {\r\n return invert(LayoutType)[type];\r\n }\r\n\r\n getCurrentLayoutAbbreviation() {\r\n return LayoutAbbreviation[this.getCurrentLayoutName()]\r\n }\r\n\r\n addNonVisualizerSubPart(featureGroupName){\r\n const otherParent = this.parts[Other.id];\r\n const partId = snakeCase(featureGroupName);\r\n let relatedItem = otherParent.relatedItems.find(relatedItem => relatedItem.partId === partId);\r\n if (!relatedItem) {\r\n relatedItem = new NonVisualizerSubPart(true, partId, featureGroupName);\r\n relatedItem.getParent = () => otherParent;\r\n otherParent.relatedItems.push(relatedItem);\r\n }\r\n return new DesignNavigationItem(relatedItem.partName, relatedItem)\r\n }\r\n\r\n excludedIndexesFromHover = (layoutType) => {\r\n return [\r\n this.zIndexes[layoutType].Background.BackgroundBG, // exclude Globals\r\n ...Object.keys(this.zIndexes[layoutType].Globals).map(key => this.zIndexes[layoutType].Globals[key])\r\n ]\r\n }\r\n\r\n}\r\n","import {COUNTERTOP_GROUP} from \"../../../../kvComponent/core/constants\";\r\nimport {COUNTERTOP_GROUP_BATHROOM} from \"../../../core/constants\";\r\nimport {filterCartItems, sortCartItemsForListPage} from \"../../../lookNavigation/lookFunctions2\";\r\n\r\n/**\r\n * @param cartItem {cartItemInterface}\r\n * @param property {string}\r\n * @returns {number|string}\r\n */\r\nexport const getCartItemShippingCost = (cartItem, property = \"shippingCost\") => {\r\n if (property !== \"shippingCost\") {\r\n return cartItem[property] || cartItem.cartFeature.dbFeature[property]\r\n }\r\n return (typeof cartItem.shippingCost === \"number\")\r\n ? cartItem.shippingCost\r\n : (typeof cartItem.cartFeature.dbFeature.shippingCost === \"number\")\r\n ? cartItem.cartFeature.dbFeature.shippingCost\r\n : 0\r\n}\r\n\r\n/**\r\n * returns array of deliveries\r\n * @param cartItems {[cartItemInterface]}\r\n * @returns {array}\r\n */\r\nexport const createDeliverySections = (cartItems) => {\r\n\r\n const cartItemsToInclude = filterCartItems(cartItems, true, true);\r\n const cartItemsList = sortCartItemsForListPage(cartItemsToInclude);\r\n\r\n let deliveries = [];\r\n cartItemsList.forEach(cartItem => {\r\n const cartItemShippingCost = getCartItemShippingCost(cartItem) || 0;\r\n const cartItemShippingName = getCartItemShippingCost(cartItem, \"shippingName\") || \"Free\";\r\n const cartItemShippingTime = getCartItemShippingCost(cartItem, \"shippingTime\") || \"-\";\r\n const cartItemShippingCode = getCartItemShippingCost(cartItem, \"shippingCode\") || \"-\";\r\n const existingDelivery = deliveries.find(delivery => {\r\n return delivery.price === cartItemShippingCost && delivery.name === cartItemShippingName\r\n });\r\n if (existingDelivery) {\r\n existingDelivery.cartItems.push(cartItem.id)\r\n } else {\r\n deliveries.push({\r\n price: cartItemShippingCost,\r\n name: cartItemShippingName,\r\n time: cartItemShippingTime,\r\n code: cartItemShippingCode,\r\n cartItems: [cartItem.id],\r\n // activeDeliveryIndex: deliveries.length,\r\n })\r\n }\r\n })\r\n return deliveries\r\n}\r\n\r\nexport const setCartItemsShipping = (cartItems, shippingOptions = []) => {\r\n return cartItems.map(cartItem => {\r\n if (!cartItem.cartFeature || !cartItem.cartFeature.dbFeature) {\r\n return cartItem // no need to add a delivery\r\n }\r\n const shippingForItem = shippingOptions.find(shippingObject => shippingObject.dbFeatureId === cartItem.cartFeature.dbFeature.id);\r\n if (shippingForItem && shippingForItem.options && shippingForItem.options.length) {\r\n if (cartItem.shippingName && shippingForItem.options.some(option => option.title === cartItem.shippingName)) {\r\n return cartItem // already assigned, we already have been here\r\n }\r\n const firstOption = shippingForItem.options[0];\r\n return Object.assign({}, cartItem, {\r\n shippingCost: Math.trunc(firstOption.cost * 100) / 100,\r\n shippingName: firstOption.title,\r\n shippingTime: firstOption.delivery,\r\n shippingCode: firstOption.code,\r\n })\r\n } else if (cartItem.shippingName) {\r\n return cartItem // already assigned, we already have been here\r\n } else if (cartItem.cartFeature.dbFeature.shippingCost || cartItem.cartFeature.dbFeature.shippingName) {\r\n return Object.assign({}, cartItem, {\r\n shippingCost: cartItem.cartFeature.dbFeature.shippingCost || 0,\r\n shippingName: getCartItemShippingCost(cartItem, \"shippingName\") || \"Free\",\r\n shippingTime: getCartItemShippingCost(cartItem, \"shippingTime\") || \"-\",\r\n shippingCode: getCartItemShippingCost(cartItem, \"shippingCode\") || \"-\",\r\n })\r\n } else {\r\n return Object.assign({}, cartItem, {\r\n shippingCost: 0,\r\n shippingName: \"Free\",\r\n shippingTime: \"-\",\r\n shippingCode: \"-\",\r\n })\r\n }\r\n })\r\n}\r\n\r\nconst area2Codes = [\"MN\", \"WI\", \"MI\", \"NY\", \"VT\", \"NH\", \"ME\", \"MA\", \"RI\", \"CT\", \"NJ\"];\r\nconst area3Codes = [\"WA\", \"OR\", \"CA\", \"AZ\", \"NV\", \"ID\", \"MT\", \"WY\", \"UT\", \"NM\", \"CO\", \"SD\", \"ND\"];\r\n\r\nconst getAreaCost = (postalCode) => {\r\n if (area3Codes.includes(postalCode)) {\r\n return 295\r\n } else if (area2Codes.includes(postalCode)) {\r\n return 245\r\n }\r\n return 225\r\n}\r\n\r\n/**\r\n * @param deliveryCost {number}\r\n * @param cartItems {{cartItemInterface}}\r\n * @param storeState {object}\r\n * @returns {number}\r\n */\r\nexport const getCafeCountertopsDeliveryCost = (deliveryCost = 0, cartItems, storeState) => {\r\n let materialsQuantity = cartItems.reduce(((totalQuantity, cartItem) => {\r\n if (COUNTERTOP_GROUP.includes(cartItem.partId) || COUNTERTOP_GROUP_BATHROOM.includes(cartItem.partId)) {\r\n totalQuantity = totalQuantity + cartItem.quantity;\r\n }\r\n return totalQuantity\r\n }), 0)\r\n if (materialsQuantity === 0) {\r\n return deliveryCost\r\n }\r\n if (materialsQuantity < 10) {\r\n deliveryCost = deliveryCost + (95 * 2)\r\n } else if (materialsQuantity < 25) {\r\n const {stateShort, state} = storeState.paymentState.shippingAddress;\r\n const postalCode = stateShort || (state || \"\").slice(0, 2) || storeState.userState.userInfo.stateShort || (storeState.userState.userInfo.state || \"\").slice(0, 2);\r\n deliveryCost = deliveryCost + (getAreaCost(postalCode) * 2)\r\n } else {\r\n deliveryCost = deliveryCost + ((materialsQuantity * 6) * 2) // $6/sqft of material\r\n }\r\n return deliveryCost\r\n}\r\n","//INITIAL FLOW\r\nimport * as types from \"./actionTypes\";\r\n\r\nexport const setShowUnlockCalculations = (showUnlockCalculations) => ({\r\n type: types.SET_SHOW_UNLOCK_CALCULATIONS,\r\n payload: {showUnlockCalculations}\r\n});\r\n\r\nexport const setUnlockCalculationsStep = (unlockCalculationsStep) => ({\r\n type: types.SET_UNLOCK_CALCULATIONS_STEP,\r\n payload: {unlockCalculationsStep}\r\n});\r\n\r\nexport const showUnlockCalculationsCartItems = (showCartItems) => ({\r\n type: types.SHOW_UNLOCK_CALCULATIONS_CART_ITEM,\r\n payload: {showCartItems}\r\n});\r\n\r\nexport const showUnlockCalculationsTotalItems = (showTotalItems) => ({\r\n type: types.SHOW_UNLOCK_CALCULATIONS_TOTAL_ITEM,\r\n payload: {showTotalItems}\r\n});\r\n\r\nexport const setShowUnlockCalculationsTutorial = (showUnlockCalculationsTutorial) => ({\r\n type: types.SHOW_UNLOCK_CALCULATIONS_TUTORIAL,\r\n payload: {showUnlockCalculationsTutorial}\r\n});\r\n\r\nexport const setUnlockCalculationsTutorialStep = (unlockCalculationsTutorialStep) => ({\r\n type: types.SET_UNLOCK_CALCULATIONS_TUTORIAL_STEP,\r\n payload: {unlockCalculationsTutorialStep}\r\n});\r\n\r\nexport const setUnlockCalculationsTutorialFinished = (unlockCalculationsTutorialIsFinished) => ({\r\n type: types.SET_UNLOCK_CALCULATIONS_TUTORIAL_FINISHED,\r\n payload: {unlockCalculationsTutorialIsFinished}\r\n});\r\n","import React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\n// import SvgIcon from \"@mui/material/SvgIcon\";\r\nimport Grow from '@mui/material/Grow';\r\nimport Popper from '@mui/material/Popper';\r\n// import Button from \"@mui/material/Button\";\r\n// import ChevronRightIcon from \"@mui/icons-material/ChevronRight\";\r\n\r\n// import {setLookIntroStep, setLookOverlayOpened} from \"../../../../actions/lookFunctions\";\r\n// import {setLocalStorageItem} from \"../lookFunctions\";\r\n// import {LOOK_INTRO_STEPS} from \"../../core/constants\";\r\n// import {LookIconNavigate} from \"../../../common/icons\";\r\n\r\nconst LookIntroPopper = (props) => {\r\n\r\n const {introStep, anchorRef, currentStep, placement, toolTipText = \"\", className, roomIdeasButtonTranslate} = props;\r\n\r\n // const nextButtonClick = () => {\r\n // if (currentStep === LOOK_INTRO_STEPS.review) {\r\n // setLookIntroStep(introStep + 2); // go to exit, skip rooms\r\n // } else if (currentStep === LOOK_INTRO_STEPS.exit) { // exit button - finish\r\n // setLookOverlayOpened(\"\");\r\n // setLookIntroStep(LOOK_INTRO_STEPS.disabled);\r\n // setLocalStorageItem(LOCAL_STORAGE_KEYS.introVisited, true);\r\n // } else {\r\n // setLookIntroStep(introStep + 1);\r\n // }\r\n // };\r\n\r\n return (\r\n \r\n {({ TransitionProps }) => (\r\n \r\n
    \r\n \r\n {/**/}\r\n {/* */}\r\n {/**/}\r\n \r\n \r\n {/*{lastMobileSteps ? null : (*/}\r\n {/* */}\r\n {/*)}*/}\r\n
    \r\n \r\n )}\r\n
    \r\n )\r\n};\r\n\r\nLookIntroPopper.propTypes = {\r\n // anchorRef: PropTypes.oneOfType([\r\n // PropTypes.func,\r\n // PropTypes.shape({ current: PropTypes.elementType })\r\n // ]).isRequired,\r\n anchorRef: PropTypes.object.isRequired,\r\n currentStep: PropTypes.number.isRequired,\r\n placement: PropTypes.string,\r\n toolTipText: PropTypes.string,\r\n roomIdeasButtonTranslate: PropTypes.string,\r\n className: PropTypes.string,\r\n}\r\n\r\nLookIntroPopper.defaultProps = {\r\n placement: \"right\"\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {introStep} = store.lookState;\r\n // const {isMobile} = store.serverState;\r\n return {\r\n introStep,\r\n // isMobile,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n // setLookIntroStep,\r\n // setLookOverlayOpened,\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(LookIntroPopper)\r\n","import React from \"react\";\r\n\r\nexport const initialContext = {\r\n activeContract: null,\r\n globalContractPage: 1, // pager\r\n activeContractPage: 1, // for current doc\r\n selectedContracts: [],\r\n totalPages: 1,\r\n receiptUrl: \"\", //blobUrl\r\n receiptPages: 0, // if 0 - contracts will start from 1\r\n receiptLayout: null, // for receipt sign\r\n // doc props\r\n showPage: false,\r\n pageRendered: false,\r\n selectedFieldIndex: -1,\r\n}\r\n\r\nconst ContractsContext = React.createContext(initialContext)\r\nexport default ContractsContext;\r\n","import flatMap from 'lodash/flatMap';\r\nimport find from 'lodash/find';\r\nimport some from 'lodash/some';\r\nimport findIndex from 'lodash/findIndex';\r\nimport cloneDeep from 'lodash/cloneDeep';\r\n\r\nimport * as types from '../actions/actionTypes';\r\n//import instList from '../bvcomponents/installation/instHardCode';\r\n\r\nconst initialState = {\r\n instOpened: false,\r\n instList: [],\r\n defaultInstallations: [],\r\n};\r\n\r\nlet __installations = [];\r\n\r\nexport default function (state = initialState, action) {\r\n\r\n switch (action.type) {\r\n case types.ADD_TO_CART:\r\n return __tryAddToInstallation(state, action.payload.cartItems);\r\n case types.REMOVE_FROM_CART:\r\n return __tryRemoveFromInstallations(state, action.payload.cartItem);\r\n case types.TOGGLE_INST_OPENED:\r\n case types.SET_INST_LIST:\r\n case types.SET_DEFAULT_INST_LIST:\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n });\r\n case types.REMOVE_INSTALLATION_SERVICE_FROM_CART:\r\n return __toggleInstallationServiceUsage(state, action.payload);\r\n }\r\n\r\n return state;\r\n\r\n}\r\n\r\nexport function getInstallationsTotalCost(instList) {\r\n let cost = 0;\r\n flatMap(instList, group => group.services)\r\n .forEach(s => {\r\n if (s.selected) {\r\n cost += getInstallationCost(s);\r\n }\r\n });\r\n\r\n return cost;\r\n}\r\n\r\nexport function getInstallationCost(installationService) {\r\n return installationService.hourly * installationService.price;\r\n}\r\n\r\nfunction __toggleInstallationServiceUsage(state, {installationService}) {\r\n const {instList} = state;\r\n for (let i = 0; i < instList.length; i++){\r\n for (let j = 0; j < instList[i].services.length; j++) {\r\n const service = instList[i].services[j];\r\n if ((service.fabricatorFeature_id === installationService.fabricatorFeature_id)\r\n && (service.fabricatorInstallation_id === installationService.fabricatorInstallation_id)){\r\n service.selected = !service.selected;\r\n return {...state, instList: cloneDeep(instList)};\r\n }\r\n }\r\n }\r\n\r\n return state;\r\n}\r\n\r\nfunction __tryAddToInstallation(state, cartItems) {\r\n let hasChanges = false;\r\n const {instList} = state;\r\n\r\n cartItems.filter(cartItem => cartItem.quantity).forEach(cartItem => {\r\n const ID = cartItem.cartFeature.dbFeature.id;\r\n const allInstallations = __getInstallations(state.defaultInstallations);\r\n const installations = allInstallations.filter(inst => {\r\n return inst && (inst.fabricatorFeature_id === ID)\r\n });\r\n\r\n if (installations.length) {\r\n let instGroup = find(instList, {title: cartItem.selectionGroup});\r\n if (!instGroup) {\r\n instGroup = {\r\n title: cartItem.selectionGroup,\r\n services: [],\r\n description: 'Do you wand to add installation for ' + cartItem.selectionGroup,\r\n enabled: false\r\n };\r\n instList.push(instGroup);\r\n }\r\n\r\n installations.forEach(installation => {\r\n const service = some(instGroup.services, {\r\n // fabricatorFeature_id: id, // removed this check cause they are different, but we need to remove duplicates\r\n fabricatorInstallation_id: installation.fabricatorInstallation_id\r\n });\r\n if (!service) {\r\n const selected = installation.autoAddWithProduct;\r\n instGroup.services.push({\r\n fabricatorFeature_id: cartItem.cartFeature.dbFeature.id,\r\n title: installation.installationName,\r\n hourly: installation.defaultQuantity || 1,\r\n price: installation.price,\r\n description: installation.description,\r\n fabricatorInstallation_id: installation.fabricatorInstallation_id,\r\n selected,\r\n autoAddWithProduct: installation.autoAddWithProduct,\r\n defaultQuantity: installation.defaultQuantity,\r\n hideQuantity: installation.hideQuantity,\r\n unit: installation.unit\r\n });\r\n if (selected) {\r\n instGroup.enabled = true;\r\n }\r\n hasChanges = true;\r\n }\r\n });\r\n }\r\n });\r\n\r\n return hasChanges ? {...state, instList: cloneDeep(instList)} : state;\r\n}\r\n\r\nfunction __tryRemoveFromInstallations(state, cartItem) {\r\n const {instList} = state;\r\n const ID = cartItem.cartFeature.dbFeature.id;\r\n const allInstallations = __getInstallations(state.defaultInstallations);\r\n const installations = allInstallations.filter(inst => {\r\n return inst.fabricatorFeature_id === ID\r\n });\r\n if (installations.length) {\r\n installations.forEach(installation => {\r\n let instGroupIdx = findIndex(instList, {title: cartItem.selectionGroup});\r\n if (instGroupIdx !== -1) {\r\n const serviceIdx = findIndex(instList[instGroupIdx].services, {\r\n fabricatorFeature_id: cartItem.cartFeature.dbFeature.id,\r\n fabricatorInstallation_id: installation.fabricatorInstallation_id\r\n });\r\n if (serviceIdx !== -1) {\r\n instList[instGroupIdx].services.splice(serviceIdx, 1);\r\n if (!instList[instGroupIdx].services.length) {\r\n // remove group as well\r\n instList.splice(instGroupIdx, 1);\r\n return {...state, instList: cloneDeep(instList)};\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n return {...state, instList: cloneDeep(instList)};\r\n}\r\n\r\nfunction __getInstallations(defaultInstallations) {\r\n if (defaultInstallations && defaultInstallations.length && __installations && !__installations.length) {\r\n __installations = flatMap(defaultInstallations, i => i.installations);\r\n __installations = __installations.filter(i => {\r\n return i && (i.autoAddWithProduct || i.customerAdd || (i.employeesOnly && document.kvConfig.isBackend));\r\n })\r\n }\r\n\r\n return __installations;\r\n}\r\n\r\n","export const GROHE_CONFIG = {\r\n sidebarWidth: {\r\n desktop: 306.5,\r\n mobile: 360,\r\n },\r\n similarProductsWidth: {\r\n desktop: 307.5,\r\n // mobile: 360,\r\n },\r\n mainBarWidth: {\r\n desktop: 412,\r\n }\r\n};\r\n","import 'whatwg-fetch';\r\n\r\nconst shouldUseKvConfigDomain = document.location.hostname === 'localhost'\r\n || document.location.hostname.includes(\"192.168\")\r\n || window.location.href.includes(\"testprod\")\r\n || document.kvConfig.isWordpressPlugin;\r\n\r\nexport const HOST_NAME = document.kvConfig.domain && shouldUseKvConfigDomain\r\n ? document.kvConfig.domain : \"\";\r\n\r\nexport function handleHttpError(response) {\r\n if (response.status === 400) { // bad request\r\n return response.json()\r\n .then(json => {\r\n checkApiError(json);\r\n //console.log(400, json);\r\n return Promise.resolve({__error__: true});\r\n });\r\n }\r\n\r\n if (!response.ok) {\r\n return response.json()\r\n .then(json => Promise.reject(json ? json.message : response.statusMessage));\r\n }\r\n\r\n return response;\r\n}\r\n\r\nfunction checkApiError(response) {\r\n let errorMessage = response.error || response.errorMessage\r\n || (response.errors && Array.isArray(response.errors) ? response.errors.join(',') : null);\r\n if (!errorMessage) {\r\n return;\r\n }\r\n\r\n //dispatch({type: ActionTypes.HTTP_ERROR, payload: errorMessage});\r\n}\r\n\r\nexport function getResponse(response) {\r\n if (!response)\r\n return null;\r\n if (response.json)\r\n return response.json();\r\n return response;\r\n}\r\n\r\n\r\nexport const get = (url) => {\r\n return fetch(HOST_NAME + url, {\r\n // return fetch('http://localhost:3000/localdata', {\r\n headers: {\r\n 'Accept': 'application/json'\r\n }\r\n })\r\n .then(handleHttpError)\r\n .then(response => getResponse(response))\r\n .catch(reason => Promise.reject(reason));\r\n};\r\n\r\nexport const post = (url, data, { signal, domain } = {}) => {\r\n const isFormData = Object.prototype.toString.call(data) === '[object FormData]';\r\n const headers = {\r\n 'Accept': 'application/json'\r\n };\r\n if (!isFormData) {\r\n headers['Content-Type'] = 'application/json';\r\n }\r\n\r\n return fetch(domain ? domain + url : HOST_NAME + url, {\r\n method: 'post',\r\n body: isFormData ? data : JSON.stringify(data),\r\n headers: new Headers(headers),\r\n signal: signal,\r\n })\r\n .then(handleHttpError)\r\n .then(response => getResponse(response))\r\n .catch(reason => {\r\n if (reason.name === 'AbortError') {\r\n console.log('Fetch aborted');\r\n } else {\r\n return Promise.reject(reason);\r\n }\r\n });\r\n};\r\n","// do not use imports in this file!! we are trying to keep lead form bundle js clean\r\n\r\nimport {getCommonVisualizerType} from \"../../../../../config\";\r\nimport {getCurrentLayout} from \"../../../../appLayout\";\r\nimport {getFeatureFromTheBackendBySku} from \"../../../../../api/look-api\";\r\n\r\nexport const fixStringEncoding = (string) => {\r\n return string && (typeof string === \"string\")\r\n ? string\r\n .replace(\"â€�\", \"”\")\r\n .replace(\"”\", \"”\")\r\n .replace(\"’\", \"’\")\r\n .replace(\"
\", \" \")\r\n .replace(\"
\", \"\") // not sure what it is\r\n : string\r\n}\r\n\r\nexport const fixWizardItem = (wizardItem, wizardItemIndex, forLeadForm = false, newVisualizerType) => {\r\n wizardItem.wizardNodes = []; // we don't use them in the visualizer! why do we keep them then\r\n Object.keys(wizardItem).forEach(property => {\r\n if (typeof wizardItem[property] === \"string\") {\r\n wizardItem[property] = fixStringEncoding(wizardItem[property]);\r\n }\r\n });\r\n if (!wizardItem.name) {\r\n wizardItem.name = \"wizard\" + (wizardItemIndex > 0 ? \"-\" + wizardItemIndex + 1 : \"\");\r\n }\r\n const currentVisType = getCommonVisualizerType(newVisualizerType);\r\n if (wizardItem.wizardGroups) {\r\n wizardItem.wizardGroups = wizardItem.wizardGroups.filter(wizGroup => {\r\n if (!wizGroup.enabled || (wizGroup.hideForCustomers && !document.kvConfig.isBackend)) {\r\n return false\r\n }\r\n if (wizardItem.visualizer === \"all\") {\r\n return (wizGroup.groupName === \"Room\") || !Array.isArray(wizGroup.visibleInVisualizers)\r\n || !wizGroup.visibleInVisualizers.length || wizGroup.visibleInVisualizers.includes(currentVisType)\r\n }\r\n return true\r\n }).map(wizGroup => {\r\n if (forLeadForm) {\r\n //getUrlLeadStepName\r\n wizGroup.leadStepUrl = wizGroup.leadStep\r\n ? wizGroup.leadStep.toLowerCase().replace(/ /g,\"-\")\r\n : \"project\"\r\n }\r\n if (wizGroup.nodeType === \"inputs\" && Array.isArray(wizGroup.inputFields)) {\r\n wizGroup.inputFields = wizGroup.inputFields.filter(inputObject => inputObject.checked)\r\n }\r\n Object.keys(wizGroup).forEach(property => {\r\n if (typeof wizGroup[property] === \"string\") {\r\n wizGroup[property] = fixStringEncoding(wizGroup[property]);\r\n }\r\n });\r\n [\"featuresIncluded\", \"featuresExcluded\"].forEach(property => {\r\n if (Array.isArray(wizGroup[property]) && wizGroup[property].length) {\r\n wizGroup[property] = wizGroup[property].map(excluded => {\r\n if (excluded && (typeof excluded === \"object\") && excluded.sharedFeatureName) {\r\n excluded.sharedFeatureName = excluded.sharedFeatureName\r\n .trim()\r\n .toLowerCase()\r\n .replace('room - ', '')\r\n }\r\n return excluded\r\n })\r\n }\r\n });\r\n return wizGroup\r\n })\r\n }\r\n return wizardItem\r\n}\r\n\r\nexport const getWizardFeatureAsync = async (feature, groupName) => {\r\n const layout = getCurrentLayout();\r\n const featureGroup = layout.getFeatureGroupByGroupName(groupName);\r\n if (featureGroup) {\r\n const nameToCompare = feature.sharedFeatureName; //lowercased already\r\n if (featureGroup.activeFeature && featureGroup.activeFeature.getLowerCasedSharedFeatureName() === nameToCompare) {\r\n return featureGroup.activeFeature\r\n }\r\n const navItems = layout.designNavigationItems({part: featureGroup}, null, \"\", false, \"all\");\r\n for (let i = 0; i < navItems.length; i++) {\r\n if (navItems[i].part.getLowerCasedSharedFeatureName() === nameToCompare) {\r\n return navItems[i].part;\r\n }\r\n }\r\n }\r\n return await getFeatureFromTheBackendBySku(feature.sku || feature.sharedFeatureName, featureGroup ? featureGroup.partId : \"\");\r\n}\r\n","import workspace from \"./workspace\";\r\nimport sqftShape from \"./shapes/sqftShape\";\r\n//todo sqft-react\r\n// import {setDataToQt} from \"../postMessage\";\r\n\r\nexport default new function() {\r\n\r\n var _self = this;\r\n\r\n this.store = {\r\n shapes: [],\r\n cfg: {},\r\n exportData: null\r\n };\r\n\r\n this.init = function() {\r\n // $('#saveHistory').click(_self.rememberShapes);\r\n // $('#restoreHistory').click(_self.restoreShapesFromHistory);\r\n // $('#consoleShapesFromHistory').click(_self.consoleShapesFromHistory);\r\n window.clearHistory = function() {\r\n this.store.shapes = [];\r\n this.store.exportData = null;\r\n }\r\n };\r\n // this.addEvent = function(eventName, eventData) {\r\n // switch (eventName) {\r\n // case \"newShape\":\r\n // _self.store.shapes.push(eventData);\r\n // break;\r\n // }\r\n // };\r\n this.getHistoryStore = function () {\r\n return _self.store\r\n };\r\n this.rememberShapes = function() {\r\n _self.store.shapes = [];\r\n workspace.getShapes().forEach(function (shape) {\r\n if (!shape.attachedToShape && shape.type !== \"appliances\" && shape.getLines) {\r\n shape.lines = [];\r\n shape.getLines().forEach(function (line) {\r\n line.historyPointFeatures = line.getPointsFeatures();\r\n shape.lines.push(line);\r\n });\r\n }\r\n shape.historyPosition = shape.pos;\r\n _self.store.shapes.push(shape);\r\n });\r\n // console.log('saved', _self.store.shapes);\r\n _self.store.exportData = window.exportData;\r\n };\r\n this.rememberConfig = function(cfg) {\r\n _self.store.cfg = cfg;\r\n };\r\n this.restoreShapesFromHistory = function() {\r\n // console.log('_self.store.shapes', _self.store.shapes);\r\n workspace.removeAllShapes();\r\n _self.store.shapes.forEach(function (newShape) {\r\n if (newShape.lines) {\r\n workspace.addShape(newShape.lines, newShape.shapeType, newShape.historyPosition, newShape.partId, newShape.layoutName);\r\n } else {\r\n workspace.addImage(\r\n newShape.historyProps.image,\r\n newShape.historyProps.width,\r\n newShape.historyProps.height,\r\n newShape.historyProps.attachedTo,\r\n newShape.historyProps.hoverShape,\r\n newShape.historyProps.type,\r\n newShape.historyProps.subType,\r\n newShape.historyProps.historyCallBack,\r\n newShape.historyPosition\r\n );\r\n }\r\n });\r\n _self.store.shapes.forEach(function (newShape) { // go again through all attached shapes and render lines text\r\n if (!newShape.lines) {\r\n newShape.historyProps.historyCallBack()\r\n }\r\n });\r\n // console.log('setted!', workspace.getShapes());\r\n Object.assign(_self.store.exportData, _self.store.cfg);\r\n setDataToQt(_self.store.exportData, true);\r\n setTimeout(function () {\r\n _self.store.exportData = window.exportData;\r\n }, 0);\r\n };\r\n // this.consoleShapesFromHistory = function() {\r\n // console.log('_self.store.shapes', _self.store.shapes);\r\n // };\r\n this.checkForChangesApplied = function () { // this is called after cancel click\r\n // console.log('_self.store.exportData', _self.store.exportData);\r\n // console.log('window.exportData',window.exportData);\r\n let currentShapes = workspace.getShapes();\r\n\r\n //if (_self.store.exportData && (JSON.stringify(_self.store.exportData) !== JSON.stringify(window.exportData))) {\r\n // return true; // check for exportData\r\n //}\r\n\r\n if (currentShapes.length !== _self.store.shapes.length) {\r\n return true; // check for appliances, etc.\r\n }\r\n\r\n let shapesChanged = false;\r\n\r\n workspace.getShapes().forEach(function (shape) { // go through each shape && check for its changes\r\n //if (!shape.attachedToShape && shape.type !== \"appliances\") {\r\n if (shape instanceof sqftShape) {\r\n\r\n var historyShape = _self.store.shapes.find(function (historyShapetoFind) {\r\n return historyShapetoFind.id === shape.id\r\n });\r\n\r\n if (!historyShape) {\r\n shapesChanged = true\r\n }\r\n\r\n shape.getLines().forEach(function (line, index) {\r\n if (historyShape && historyShape.lines && historyShape.lines[index] && JSON.stringify(line.getPointsFeatures()) !== JSON.stringify(historyShape.lines[index].historyPointFeatures)) {\r\n shapesChanged = true\r\n }\r\n });\r\n }\r\n });\r\n\r\n return shapesChanged || false\r\n }\r\n};\r\n","import {\r\n ALLOWED_LABEL_NAV_ITEMS, COUNTERTOP_LABELS,\r\n FEATURES_WITH_0_VALUE_FOR_THE_SLABS,\r\n MEASURE_UNITS,\r\n SHAPE_PART_ID,\r\n SQFT_FEATURES\r\n} from \"../../sqft/constants\";\r\nimport {\r\n FEATURE_STONE,\r\n getFeatureType,\r\n getFeatureUnit,\r\n getSlabUnit,\r\n calculateStoneCost,\r\n getRoomName, getSlabsFeatureGroup\r\n} from \"../../../misc/helpers\";\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\nimport store from \"../../../store\";\r\nimport sqftShapeManager from \"../../sqft/components/canvas/store/sqftShapeManager\";\r\nimport workspace from \"../../sqft/components/canvas/core/workspace\";\r\nimport {getCommonVisualizerType} from \"../../../config\";\r\nimport {getNavItemsFromTheWizard, getWizardGroupsFromTheWizard} from \"../../sqft/helpers/sqftHelperUi\";\r\n//import {isFeatureUnitUseEach} from \"../../sqft/helpers/featureHelper\";\r\n\r\n/**\r\n * @param parentKey {string}\r\n * @param partId {string}\r\n * @param quoteIndex {number || null}\r\n * @returns featureGroup {object}\r\n */\r\nexport const getSimilarFeatureGroup = (parentKey, partId, quoteIndex = null) => {\r\n const state = store.getState();\r\n const quotes = state.quotesState.quotes;\r\n let room;\r\n let qtCategoryName;\r\n if (quoteIndex !== null && quotes[quoteIndex].room) {\r\n const activeQuote = quotes[quoteIndex];\r\n room = activeQuote.room;\r\n qtCategoryName = quotes[quoteIndex].qtCatName ? quotes[quoteIndex].qtCatName : getRoomNameInQuote(quoteIndex);\r\n }\r\n const layout = getCurrentLayout(room);\r\n if (!layout) {\r\n return null\r\n }\r\n\r\n let featureGroup = null;\r\n let neededPartId = partId;\r\n switch (parentKey) {\r\n case \"backsplashes\": {\r\n const isBathroom = getCommonVisualizerType() === \"bathroom\";\r\n featureGroup = layout.getSubPartFromQtCategories(\"backsplash\", qtCategoryName, true);\r\n if (!featureGroup && isBathroom) {\r\n featureGroup = layout.getSubPartFromQtCategories(SQFT_FEATURES.vanity_backsplash, qtCategoryName);\r\n }\r\n neededPartId = isBathroom ? SQFT_FEATURES.vanity_backsplash : \"backsplash\";\r\n break;\r\n }\r\n case \"edges\": {\r\n const mainNeeded = parentKey === \"center_island_countertop\" ? \"center_island_edge\" : \"edge_profile\";\r\n const oppositeNeeded = mainNeeded === \"center_island_edge\" ? \"edge_profile\" : \"center_island_edge\";\r\n featureGroup = layout.getSubPartFromQtCategories(mainNeeded, qtCategoryName);\r\n if (!featureGroup) {\r\n featureGroup = layout.getSubPartFromQtCategories(oppositeNeeded, qtCategoryName);\r\n }\r\n neededPartId = mainNeeded;\r\n break;\r\n }\r\n case SQFT_FEATURES.slabs: {\r\n featureGroup = getSlabsFeatureGroup();\r\n // let countertopsCategory = layout.qtCategories.find(qtCategory => {\r\n // return qtCategory.name === \"Countertops\" || qtCategory.name === \"Countertop\"\r\n // });\r\n //countertopsCategory = countertopsCategory === undefined ? layout.qtCategories[0] : countertopsCategory;\r\n\r\n //let subParts = countertopsCategory.subParts;\r\n //const subPartSlab = subParts.find(designNavigationItem => designNavigationItem.part.partId === SQFT_FEATURES.slabs);\r\n //if (!subPartSlab) {\r\n //subParts.splice(2, 0, featureGroup);\r\n //countertopsCategory.subParts = subParts;\r\n //}\r\n\r\n break;\r\n }\r\n case \"countertop\":\r\n case \"center_island_countertop\": {\r\n const oppositeNeeded = partId === \"center_island_countertop\" ? \"countertop\" : \"center_island_countertop\";\r\n featureGroup = layout.getSubPartFromQtCategories(partId, qtCategoryName);\r\n if (!featureGroup) {\r\n featureGroup = layout.getSubPartFromQtCategories(oppositeNeeded, qtCategoryName);\r\n }\r\n break;\r\n }\r\n case \"corners\": {\r\n featureGroup = layout.getSubPartFromQtCategories(partId, qtCategoryName);\r\n if (!featureGroup) {\r\n featureGroup = layout.getSubPartFromQtCategories('radius', qtCategoryName);\r\n }\r\n break;\r\n }\r\n default:\r\n featureGroup = layout.getSubPartFromQtCategories(partId, qtCategoryName);\r\n break;\r\n }\r\n if (!featureGroup) {\r\n const foundGroup = layout.getFeatureGroupByPartId(neededPartId);\r\n if (foundGroup) {\r\n featureGroup = {part: foundGroup}\r\n }\r\n }\r\n return featureGroup\r\n};\r\n\r\n/**\r\n * @returns {string}\r\n */\r\nexport const getRoomNameInQuote = (quoteIndex) => {\r\n const state = store.getState();\r\n const {quotes} = state.quotesState;\r\n const fabricatorData = state.fabricatorState;\r\n const cartItems = state.cartState.cartItems;\r\n const intl = workspace.intl;\r\n\r\n return getRoomName(quoteIndex, cartItems, quotes, intl.messages, intl.locale, fabricatorData);\r\n}\r\n\r\n/**\r\n * @param {{}} parentsList\r\n * @returns {boolean}\r\n */\r\nexport const isRecalculateSlabNeeded = (parentsList) => {\r\n const useStonePricing = Object.keys(parentsList).some(parentKey => {\r\n if (!parentsList[parentKey] || !parentsList[parentKey].features) {\r\n return false\r\n }\r\n return parentsList[parentKey].features.some((sqftFeature) => {\r\n if (sqftFeature.feature && (FEATURE_STONE === getFeatureType(sqftFeature.feature.dbFeature))) { // dbFeature stone pricing algorithms related\r\n const {serverState, fabricatorState, cartState} = store.getState();\r\n // here we are checking if we should calculate algorithm or not\r\n // (if not - it should be counted as a regular feature, so it should be no grouping and included logic then)\r\n const stoneCost = calculateStoneCost(\r\n sqftFeature.feature.dbFeature,\r\n sqftFeature.initialQuantity,\r\n serverState.stonePricing,\r\n fabricatorState.stoneSupplier,\r\n false,\r\n fabricatorState.settings,\r\n cartState,\r\n );\r\n return !!stoneCost;\r\n }\r\n return false\r\n })\r\n })\r\n const useSlabImagePricing = parentsList.slabs.features.length > 0;\r\n\r\n return useStonePricing || useSlabImagePricing\r\n}\r\n\r\n/**\r\n * @param parentList {object}\r\n * @param firstOpen {boolean}\r\n * @returns sqftFeatures {object}\r\n */\r\nexport const recalculateSlabs = (parentList, firstOpen = false) => {\r\n const state = store.getState();\r\n const fabricatorSettings = state.fabricatorState.settings;\r\n let updatedParentList;\r\n if (fabricatorSettings.useCategorySwitching) {\r\n updatedParentList = splitPriceBetweenSlabsMaterial(parentList); // will divide total price between shapes\r\n } else {\r\n updatedParentList = setPriceIntoSingleFeature(parentList, firstOpen); // will display included price\r\n }\r\n\r\n return updatedParentList;\r\n};\r\n\r\n/**\r\n * @param sqftFeatures {object}\r\n * @param firstOpen {boolean}\r\n * @returns sqftFeatures {object}\r\n */\r\nexport const setPriceIntoSingleFeature = (sqftFeatures, firstOpen = false) => {\r\n let commonSharedFeatureNames = getCommonSharedFeatureNames(sqftFeatures); // {sharedName: \"\", totalQuantity: 0, biggestFeature, sqftFeatures: []}\r\n if (commonSharedFeatureNames.length) { // 2) set each feature new fake quantity\r\n commonSharedFeatureNames.forEach(sharedObject => {\r\n sharedObject.sqftFeatures.forEach(sqftFeature => {\r\n const {fabricatorState} = store.getState();\r\n if (fabricatorState.isCaesarStone) {\r\n if (firstOpen) {\r\n if (sharedObject.biggestFeature && (sqftFeature.sqftId === sharedObject.biggestFeature.sqftId)) {\r\n sqftFeature.sortOrder = 1;\r\n } else {\r\n sqftFeature.sortOrder = 0;\r\n }\r\n }\r\n } else {\r\n //QCDES-1507 calculates slab algorithm pricing\r\n sqftFeature.displayFakeQuantity = sqftFeature.initialQuantity; // removed for CAESARSTONE, don't know about the others\r\n if (sharedObject.biggestFeature && (sqftFeature.sqftId === sharedObject.biggestFeature.sqftId)) {\r\n sqftFeature.quantity = sharedObject.totalQuantity; // removed for CAESARSTONE, don't know about the others\r\n if (firstOpen) {\r\n sqftFeature.sortOrder = 1;\r\n }\r\n sqftFeature.isBiggestFeature = true;\r\n } else {\r\n // removed for CAESARSTONE, don't know about the others\r\n sqftFeature.quantityRounded = 0;\r\n sqftFeature.quantity = 0;\r\n sqftFeature.isQuantityAddedToBiggestFeature = true;\r\n if (firstOpen) {\r\n sqftFeature.sortOrder = 0;\r\n }\r\n }\r\n }\r\n });\r\n });\r\n if (firstOpen) {\r\n sqftFeatures = sortSqftFeatures(sqftFeatures);\r\n }\r\n }\r\n console.log(\"commonSharedFeatureNames\", commonSharedFeatureNames);\r\n return sqftFeatures\r\n};\r\n\r\nconst createSqftFeaturesObj = () => {\r\n let sqftFeaturesObj = {};\r\n for (const availablePartIdsKey in SQFT_FEATURES) {\r\n sqftFeaturesObj[availablePartIdsKey] = {\r\n subPart: null,\r\n features: []\r\n }\r\n }\r\n\r\n return sqftFeaturesObj;\r\n}\r\n\r\n/**\r\n * @param sqftFeatures {object}\r\n * @param firstOpen {boolean}\r\n * @returns sqftFeatures {object}\r\n */\r\nexport const splitPriceBetweenSlabsMaterial = (sqftFeatures, firstOpen = false) => {\r\n let commonSharedFeatureNames = getCommonSharedFeatureNames(sqftFeatures);\r\n if (commonSharedFeatureNames.length) {\r\n commonSharedFeatureNames.forEach(sharedObject => {\r\n sharedObject = sortSharedObject(sharedObject, firstOpen);\r\n updateSharedObjectWithGroupQuantity(sharedObject);\r\n });\r\n if (firstOpen) {\r\n sqftFeatures = sortSqftFeatures(sqftFeatures);\r\n }\r\n }\r\n console.log(\"commonSharedFeatureNames\", commonSharedFeatureNames);\r\n return sqftFeatures\r\n};\r\n\r\nconst sortSqftFeatures = (sqftFeatures) => {\r\n Object.keys(sqftFeatures).forEach(parentKey => {\r\n if (sqftFeatures[parentKey]\r\n && sqftFeatures[parentKey].features\r\n && parentKey !== \"edges\"\r\n ) {\r\n sqftFeatures[parentKey].features = sqftFeatures[parentKey].features.sort((a, b) => b.sortOrder - a.sortOrder);\r\n }\r\n })\r\n\r\n return sqftFeatures\r\n}\r\n/**\r\n * @return array of objects [{sharedName: string, totalQuantity: number, biggestFeature: feature, sqftFeatures: []}]\r\n */\r\nconst getCommonSharedFeatureNames = (sqftFeatures) => {\r\n let commonSharedFeatureNames = [];\r\n Object.keys(sqftFeatures).forEach(parentKey => { // 1) create common objects and find the biggest feature\r\n if (sqftFeatures[parentKey]\r\n && sqftFeatures[parentKey].features\r\n && parentKey !== \"edges\"\r\n && parentKey !== \"slabs\"\r\n ) {\r\n sqftFeatures[parentKey].features.forEach(sqftFeature => {\r\n if (sqftFeature.feature && Array.isArray(sqftFeature.feature.dbFeature.stonePricingId)\r\n && sqftFeature.feature.dbFeature.stonePricingId.length) {\r\n const alreadyAdded = commonSharedFeatureNames.find(sharedObject => {\r\n return sharedObject.sharedName === sqftFeature.feature.dbFeature.sharedFeatureName\r\n });\r\n if (!alreadyAdded) {\r\n commonSharedFeatureNames.push({\r\n sharedName: sqftFeature.feature.dbFeature.sharedFeatureName,\r\n totalQuantity: sqftFeature.disabled ? 0 : sqftFeature.initialQuantity,\r\n sqftFeatures: [sqftFeature],\r\n biggestFeature: sqftFeature.disabled ? null : sqftFeature,\r\n })\r\n } else {\r\n alreadyAdded.sqftFeatures.push(sqftFeature);\r\n if (!sqftFeature.disabled) {\r\n alreadyAdded.totalQuantity += sqftFeature.initialQuantity;\r\n if (!alreadyAdded.biggestFeature) {\r\n alreadyAdded.biggestFeature = sqftFeature;\r\n } else if (sqftFeature.feature.partId === \"countertop\") {\r\n if (alreadyAdded.biggestFeature.partId !== \"countertop\" || (alreadyAdded.biggestFeature.initialQuantity < sqftFeature.initialQuantity)) {\r\n alreadyAdded.biggestFeature = sqftFeature;\r\n }\r\n } else if (sqftFeature.feature.partId === \"center_island_countertop\") {\r\n if ((alreadyAdded.biggestFeature.partId !== \"countertop\" && alreadyAdded.biggestFeature.partId !== \"center_island_countertop\")\r\n || (alreadyAdded.biggestFeature.partId === \"center_island_countertop\" && alreadyAdded.biggestFeature.initialQuantity < sqftFeature.initialQuantity)) {\r\n alreadyAdded.biggestFeature = sqftFeature;\r\n }\r\n } else if ((alreadyAdded.biggestFeature.partId !== \"countertop\") && (alreadyAdded.biggestFeature.partId !== \"center_island_countertop\")\r\n && alreadyAdded.biggestFeature.initialQuantity < sqftFeature.initialQuantity) { // backsplash\r\n alreadyAdded.biggestFeature = sqftFeature;\r\n }\r\n }\r\n }\r\n }\r\n })\r\n }\r\n });\r\n\r\n return commonSharedFeatureNames\r\n}\r\n/**\r\n * set group price foreach sqftFeature inside sharedObject\r\n * @param sharedObject {object}\r\n * @returns sharedObject {object}\r\n */\r\nconst updateSharedObjectWithGroupQuantity = (sharedObject) => {\r\n const quantityPerFeature = sharedObject.totalQuantity / sharedObject.sqftFeatures.length;\r\n sharedObject.sqftFeatures.forEach(sqftFeature => {\r\n const {fabricatorState} = store.getState();\r\n if (!fabricatorState.isCaesarStone) {\r\n sqftFeature.group = {\r\n quantityPerFeature: quantityPerFeature,\r\n totalFeaturesInGroup: sharedObject.sqftFeatures.filter(sqftFeature => !sqftFeature.disabled).length,\r\n totalQuantity: sharedObject.totalQuantity,\r\n }\r\n }\r\n });\r\n\r\n return sharedObject\r\n}\r\n\r\n/**\r\n * Returns sorted sharedObject\r\n * @param sharedObject {object}\r\n * @param firstOpen {boolean}\r\n * @returns sharedObject {object}\r\n */\r\nconst sortSharedObject = (sharedObject, firstOpen) => {\r\n sharedObject.sqftFeatures.forEach(sqftFeature => {\r\n if (firstOpen) {\r\n if (sharedObject.biggestFeature && (sqftFeature.sqftId === sharedObject.biggestFeature.sqftId)) {\r\n sqftFeature.sortOrder = 1;\r\n } else {\r\n sqftFeature.sortOrder = 0;\r\n }\r\n }\r\n });\r\n\r\n return sharedObject\r\n}\r\n\r\n/**\r\n * Returns needed for popup data\r\n * @param sqftPassedData {object} // it has sqftCalcData - data that comes from sqft\r\n * @param previouslyAddedSqftFeatures {object}\r\n * @param intl {object} // react intl instance\r\n * @param fabricatorData {object}\r\n * @param cartItems {array}\r\n * @param sqftFromFeature {object}\r\n * @param quoteIndex {number}\r\n * @param visualizerType {string}\r\n * @param stonePricing {object}\r\n * @returns sqftFeatures {object}\r\n */\r\nexport function getParsedSqftData (\r\n sqftPassedData,\r\n previouslyAddedSqftFeatures,\r\n intl,\r\n fabricatorData,\r\n cartItems,\r\n sqftFromFeature,\r\n quoteIndex,\r\n visualizerType,\r\n stonePricing,\r\n) {\r\n let sqftFeatures = createSqftFeaturesObj();\r\n\r\n if (!sqftPassedData || !sqftPassedData.countertops) {\r\n return sqftFeatures\r\n }\r\n\r\n const layout = getCurrentLayout(visualizerType);\r\n // const firstEdge = sqftPassedData.countertops ? sqftPassedData.countertops.filter(shape => shape.type === \"edge\")[0] : null\r\n // if (firstEdge) {\r\n // const featureGroup = getSimilarFeatureGroup(\"edges\", firstEdge.partId);\r\n // if (featureGroup) {\r\n // let navRequests = NavigationRequests();\r\n // await navRequests.checkIfAllFeaturesReceived(featureGroup, \"\", null)\r\n // }\r\n // }\r\n let isFromCartFeatureAdded = false;\r\n let feature = null;\r\n\r\n const state = store.getState();\r\n const isSlabPricingEnabled = state.sqftSlabState.isSlabPricingEnabled;\r\n\r\n Object.keys(sqftFeatures).forEach(parentKey => {\r\n const isCountertop = parentKey === \"countertop\" || parentKey === \"center_island_countertop\";\r\n let featuresPassed = [];\r\n\r\n // Skip adding slab features if slab pricing is disabled;\r\n if (parentKey === SQFT_FEATURES.slabs && !isSlabPricingEnabled) {\r\n return;\r\n }\r\n if (isCountertop) {\r\n featuresPassed = prepareCountertopFeaturesPassed(sqftPassedData, layout, parentKey);\r\n } else if (parentKey === SQFT_FEATURES.slabs) {\r\n featuresPassed = prepareSlabFeaturesPassed(sqftPassedData.slabImagesTotalArea);\r\n } else if (parentKey === SQFT_FEATURES.edges || parentKey === SQFT_FEATURES.backsplashes) {\r\n let shapeType;\r\n switch (parentKey) {\r\n case \"edges\":\r\n shapeType = \"edge\";\r\n break;\r\n case \"backsplashes\":\r\n shapeType = \"backsplash\"\r\n break;\r\n default:\r\n shapeType = parentKey\r\n break;\r\n }\r\n\r\n if (sqftPassedData.manualCalculate) {\r\n featuresPassed = prepareEdgesAndBacksplashesManual(sqftPassedData, shapeType, featuresPassed);\r\n } else {\r\n featuresPassed = prepareEdgesAndBacksplashes(sqftPassedData, shapeType, featuresPassed);\r\n }\r\n\r\n // console.log(\"featuresPassed edges\", featuresPassed);\r\n // } else {\r\n // featuresPassed = sqftPassedData[parentKey]\r\n } else if (parentKey === SQFT_FEATURES.crown_molding) {\r\n featuresPassed = prepareCrownMoldings(sqftPassedData, parentKey);\r\n } else if (parentKey === SQFT_FEATURES.handle && sqftPassedData.controllers && sqftPassedData.controllers.handles) {\r\n featuresPassed = prepareHandles(sqftPassedData.controllers.handles, parentKey);\r\n } else if (Object.values(ALLOWED_LABEL_NAV_ITEMS).includes(parentKey)) {\r\n featuresPassed = prepareOtherCountertops(sqftPassedData.countertops, parentKey);\r\n } else if (parentKey === SQFT_FEATURES.radius) {\r\n featuresPassed = prepareRadius(sqftPassedData.radii, parentKey);\r\n } else if (parentKey === SQFT_FEATURES.corners) {\r\n featuresPassed = prepareCorners(sqftPassedData.corners, parentKey);\r\n } else if (parentKey === SQFT_FEATURES.underlayment && sqftPassedData.underlayment && sqftPassedData.underlayment.sections) {\r\n featuresPassed = prepareUnderlayment(sqftPassedData.underlayment.sections, parentKey);\r\n } else if (parentKey === SQFT_FEATURES.bumpouts && sqftPassedData.bumpouts) {\r\n featuresPassed = sqftPassedData.bumpouts\r\n }\r\n\r\n if (featuresPassed && featuresPassed.length) {\r\n featuresPassed.forEach(featurePassed => {\r\n const featureGroup = getSimilarFeatureGroup(parentKey, featurePassed.partId, quoteIndex);\r\n let isSqftFromFeature = false;\r\n let fromWizardGroupId = \"\";\r\n if (featureGroup) {\r\n if (!sqftFeatures[parentKey].subPart) {\r\n sqftFeatures[parentKey].subPart = featureGroup;\r\n }\r\n const quantity = getQuantityFromCalculator(parentKey, featurePassed, sqftPassedData);\r\n const displayFakePrice = getFakePriceFromCalculator(parentKey, featurePassed, sqftPassedData, cartItems, quoteIndex);\r\n //const displayFakeQuantity = getFakeQuantityFromCalculator(parentKey, featurePassed, sqftPassedData);\r\n [feature, isSqftFromFeature, isFromCartFeatureAdded, fromWizardGroupId] = getFeatureFromSQFT(\r\n featurePassed,\r\n previouslyAddedSqftFeatures,\r\n featureGroup,\r\n parentKey,\r\n quoteIndex,\r\n isCountertop,\r\n sqftFromFeature,\r\n cartItems,\r\n layout,\r\n isFromCartFeatureAdded,\r\n );\r\n\r\n let displayFakeQuantity = parentKey === SQFT_FEATURES.slabs ? featurePassed.totalSlabs : null;\r\n let displayFakeFeatureGroupName = parentKey === SQFT_FEATURES.slabs ? SQFT_FEATURES.slabs : null;\r\n const featureToCheckUnit = feature || featureGroup.part.features[0];\r\n const featureUnit = featureToCheckUnit ? getFeatureUnit(featureToCheckUnit, intl, fabricatorData, quantity) : \"\";\r\n const unit = parentKey === SQFT_FEATURES.slabs ? getSlabUnit(featurePassed.totalSlabs, intl) : featureUnit;\r\n\r\n sqftShapeManager.setShapeFeature(featurePassed.id, feature);\r\n sqftFeatures[parentKey].features.push({\r\n disabled: featurePassed.isDisabledInPopup || false, //previouslyAddedSqftFeature ? previouslyAddedSqftFeature.disabled : false,\r\n feature,\r\n displayFakeFeatureGroupName,\r\n partId: featurePassed.partId,\r\n unit,\r\n subPart: featureGroup,\r\n //quantity: isFeatureUnitUseEach(feature) ? 1 : quantity,\r\n quantity: quantity,\r\n quantityRounded: Math.ceil(quantity),\r\n displayFakeQuantity: displayFakeQuantity,\r\n displayFakePrice,\r\n initialQuantity: quantity,\r\n sqftId: featurePassed.id,\r\n qtCatName: featurePassed.qtCatName,\r\n isSqftFromFeature,\r\n fromWizardGroupId,\r\n shouldShowEyeBall: featurePassed.shouldShowEyeBall !== undefined ? featurePassed.shouldShowEyeBall : true,\r\n shouldUseSlabPricing: featurePassed.shouldUseSlabPricing,\r\n })\r\n } else {\r\n console.log(\"No feature group added to the QuotingTool\", parentKey, featurePassed.partId);\r\n }\r\n });\r\n }\r\n });\r\n\r\n if (isSlabPricingEnabled && isRecalculateSlabNeeded(sqftFeatures)) {\r\n sqftFeatures = recalculateSlabs(sqftFeatures, true);\r\n console.log(\"stonePricing\", stonePricing);\r\n console.log(\"fabricatorData.pricingPreset\", fabricatorData.pricingPreset);\r\n }\r\n\r\n console.log(\"sqftFeatures\", sqftFeatures);\r\n return sqftFeatures\r\n}\r\n\r\n/**\r\n * Returns prepared slabFeatures that comes from sqft\r\n * @param slabImagesGrouped {object} // data that comes from sqft\r\n * @returns featuresPassed [array]\r\n */\r\nconst prepareSlabFeaturesPassed = (slabImagesGrouped) => {\r\n let featuresPassed = [];\r\n slabImagesGrouped\r\n .forEach(slabImagesGroup => {\r\n const quantity = Math.ceil(slabImagesGroup.totalArea);\r\n featuresPassed.push(Object.assign({...slabImagesGroup}, {\r\n partId: SQFT_FEATURES.slabs,\r\n squareFeet: quantity,\r\n pricePerArea: slabImagesGroup.pricePerArea,\r\n shouldUseSlabPricing: slabImagesGroup.shouldUseSlabPricing,\r\n }));\r\n });\r\n\r\n return featuresPassed;\r\n}\r\n\r\n/**\r\n * Returns prepared countertops that comes from sqft\r\n * @param sqftPassedData {object} // data that comes from sqft\r\n * @param layout {object} // layout\r\n * @param parentKey {string} // parentKey\r\n * @returns featuresPassed [array]\r\n */\r\nconst prepareCountertopFeaturesPassed = (sqftPassedData, layout, parentKey) => {\r\n const countertopExist = layout.getSubPartFromQtCategories(\"countertop\");\r\n const centerIslandExist = layout.getSubPartFromQtCategories(\"center_island_countertop\");\r\n let featuresPassed = []\r\n if (sqftPassedData.manualCalculate) {\r\n featuresPassed = sqftPassedData.countertops\r\n .filter(manCountertopObject => manCountertopObject.partId === parentKey)\r\n .map(manCountertopObject => {\r\n return {\r\n id: manCountertopObject.id,\r\n squareFeet: manCountertopObject.area,\r\n partId: manCountertopObject.partId\r\n }\r\n })\r\n } else if (sqftPassedData.countertops && sqftPassedData.countertops.length) {\r\n featuresPassed = sqftPassedData.countertops.filter(shape => {\r\n if (shape.partId === \"countertop\" || shape.partId === \"center_island_countertop\") {\r\n if (countertopExist && !centerIslandExist) {\r\n shape.partId = countertopExist.part.partId;\r\n } else if (centerIslandExist && !countertopExist) {\r\n shape.partId = centerIslandExist.part.partId;\r\n }\r\n }\r\n\r\n return shape.shapeType && (shape.partId === parentKey)\r\n && ![\"backsplash\", SHAPE_PART_ID.seamPiece, SHAPE_PART_ID.slabPlaceHolder].includes(shape.type)\r\n })\r\n }\r\n\r\n return featuresPassed;\r\n}\r\n\r\n/**\r\n * Returns other prepared countertops that comes from sqft\r\n * @param sqftPassedDataCountertops {object} // data that comes from sqft\r\n * @param parentKey {string} // parentKey\r\n * @returns featuresPassed [array]\r\n */\r\nconst prepareOtherCountertops = (sqftPassedDataCountertops, parentKey) => {\r\n return sqftPassedDataCountertops\r\n .filter(manCountertopObject => manCountertopObject.partId === parentKey)\r\n .map(manCountertopObject => {\r\n return {\r\n id: manCountertopObject.id,\r\n squareFeet: manCountertopObject.squareFeet,\r\n partId: manCountertopObject.partId,\r\n qtCatName: manCountertopObject.qtCatName,\r\n featureId: manCountertopObject.featureId,\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Returns other prepared radius's that comes from sqft\r\n * @param sqftPassedDataRadius {object} // data that comes from sqft\r\n * @returns featuresPassed [array]\r\n */\r\nconst prepareRadius = (sqftPassedDataRadius) => {\r\n return sqftPassedDataRadius\r\n .filter(radiusObject => radiusObject.featureId !== null)\r\n .map(radiusObject => {\r\n return {\r\n id: radiusObject.id,\r\n qtCatName: radiusObject.qtCatName,\r\n partId: SQFT_FEATURES.radius,\r\n featureId: radiusObject.featureId,\r\n quantity: 1\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Returns other prepared Handlers that comes from sqft\r\n * @param sqftPassedDataHandler {object} // data that comes from sqft\r\n * @param parentKey {string}\r\n * @returns featuresPassed [array]\r\n */\r\nconst prepareHandles = (sqftPassedDataHandler, parentKey) => {\r\n return sqftPassedDataHandler\r\n .filter(handlerObject => handlerObject.featureId !== null)\r\n .map(radiusObject => {\r\n return {\r\n id: radiusObject.id,\r\n qtCatName: radiusObject.qtCatName,\r\n partId: parentKey,\r\n featureId: radiusObject.featureId,\r\n quantity: 1\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Returns other prepared corner's that comes from sqft\r\n * @param sqftPassedDataRadius {object} // data that comes from sqft\r\n * @returns featuresPassed [array]\r\n */\r\nconst prepareCorners = (sqftPassedDataRadius) => {\r\n return sqftPassedDataRadius\r\n .filter(radiusObject => radiusObject.featureId !== null)\r\n .map(radiusObject => {\r\n return {\r\n id: radiusObject.id,\r\n qtCatName: radiusObject.qtCatName,\r\n partId: SQFT_FEATURES.corners,\r\n featureId: radiusObject.featureId,\r\n quantity: 1\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Returns other prepared corner's that comes from sqft\r\n * @param sqftPassedDataUnderlayment {object} // data that comes from sqft\r\n * @returns featuresPassed [array]\r\n */\r\nconst prepareUnderlayment = (sqftPassedDataUnderlayment) => {\r\n return sqftPassedDataUnderlayment\r\n //.filter(passedData => passedData.featureId !== null)\r\n .map(passedData => {\r\n return {\r\n id: passedData.id,\r\n partId: SQFT_FEATURES.underlayment,\r\n featureId: passedData.featureId,\r\n qtCatName: passedData.qtCatName,\r\n quantity: passedData.quantity\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Parse quantity from sqft // todo rewrite and remove this\r\n * @param parentKey {object} // data that comes from sqft\r\n * @param featurePassed {object} // data that comes from sqft\r\n * @param sqftPassedData {object} // data that comes from sqft\r\n * @returns featuresPassed [array]\r\n */\r\nconst getQuantityFromCalculator = (parentKey, featurePassed, sqftPassedData) => {\r\n let quantity;\r\n switch (parentKey) {\r\n case \"edges\":\r\n case \"backsplashes\":\r\n case SQFT_FEATURES.crown_molding:\r\n quantity = sqftPassedData.measureUnit === MEASURE_UNITS.Metric\r\n ? +(+(featurePassed.length).toFixed(3)).toFixed(2)\r\n : featurePassed.length\r\n break\r\n case SQFT_FEATURES.radius:\r\n case SQFT_FEATURES.corners:\r\n case SQFT_FEATURES.handle:\r\n case SQFT_FEATURES.underlayment:\r\n quantity = featurePassed.quantity;\r\n break\r\n case \"countertop\":\r\n case \"center_island_countertop\":\r\n case \"slabs\":\r\n quantity = featurePassed.squareFeet;\r\n break\r\n default:\r\n if (Object.keys(COUNTERTOP_LABELS).includes(parentKey)) {\r\n quantity = featurePassed.squareFeet;\r\n } else {\r\n quantity = featurePassed.quantity ? featurePassed.quantity : featurePassed.squareFeet;\r\n }\r\n }\r\n\r\n return quantity\r\n}\r\n\r\n/**\r\n * Prepare Edges and Backsplashes from sqft\r\n * @param sqftPassedData {object} // data that comes from sqft\r\n * @param shapeType {string}\r\n * @param featuresPassed {array}\r\n * @returns featuresPassed [array]\r\n */\r\nconst prepareEdgesAndBacksplashes = (sqftPassedData, shapeType, featuresPassed) => {\r\n sqftPassedData.countertops\r\n .filter(shape => shape.type === shapeType)\r\n .forEach(edge => {\r\n const length = edge.length || edge.squareFeet;\r\n featuresPassed.push(Object.assign(\r\n edge, {\r\n partId: edge.partId || shapeType,\r\n fromWizardGroupId: edge.fromWizardGroupId, //todo[Anton] this one is not passing here\r\n length: length,\r\n qtCatName: edge.qtCatName,\r\n featureId: edge.backsplashFeatureId ? edge.backsplashFeatureId : edge.featureId,\r\n shouldShowEyeBall: edge.shouldShowEyeBall !== undefined ? edge.shouldShowEyeBall : true,\r\n }));\r\n });\r\n\r\n return featuresPassed\r\n}\r\n\r\n/**\r\n * Prepare CrownMoldings from sqft\r\n * @param sqftPassedData {object} // data that comes from sqft\r\n * @param shapeType {string}\r\n * @returns featuresPassed [array]\r\n */\r\nconst prepareCrownMoldings = (sqftPassedData, shapeType) => {\r\n const featuresPassed = [];\r\n sqftPassedData.countertops\r\n .filter(shape => shape.type === shapeType)\r\n .forEach(crownMolding => {\r\n const length = crownMolding.length || crownMolding.squareFeet;\r\n featuresPassed.push(Object.assign(\r\n crownMolding, {\r\n partId: crownMolding.partId || shapeType,\r\n length: length,\r\n qtCatName: crownMolding.qtCatName,\r\n }));\r\n });\r\n\r\n return featuresPassed\r\n}\r\n\r\n/**\r\n * Prepare Edges and Backsplashes from sqft\r\n * @param sqftPassedData {object} // data that comes from sqft\r\n * @param shapeType {string}\r\n * @param featuresPassed {array}\r\n * @returns featuresPassed [array]\r\n */\r\nconst prepareEdgesAndBacksplashesManual = (sqftPassedData, shapeType, featuresPassed) => {\r\n let sqftData = [];\r\n switch (shapeType) {\r\n case \"edge\":\r\n sqftData = sqftPassedData.edges;\r\n break\r\n case \"backsplash\":\r\n sqftData = sqftPassedData.backsplashes;\r\n break\r\n }\r\n sqftData\r\n .forEach(edge => {\r\n const edgeLength = edge.length;\r\n const alreadyAdded = featuresPassed.find(addedEdge => {\r\n return addedEdge.attachedToParentId && (addedEdge.featureId === edge.featureId)\r\n });\r\n if (alreadyAdded) {\r\n alreadyAdded.length += edgeLength;\r\n } else {\r\n featuresPassed.push(Object.assign(edge, {featureId: edge.featureId, partId: edge.partId, length: edgeLength}));\r\n }\r\n });\r\n\r\n return featuresPassed\r\n}\r\n\r\n/**\r\n * //todo it is better to rewrite this fake price logic and calculate the price right in the cart\r\n * Get fake price for display\r\n * @param parentKey {object} // data that comes from sqft\r\n * @param featurePassed {object} // data that comes from sqft\r\n * @param sqftPassedData {object} // data that comes from sqft\r\n * @param cartItems\r\n * @param quoteIndex\r\n * @returns featuresPassed [array]\r\n */\r\nconst getFakePriceFromCalculator = (parentKey, featurePassed, sqftPassedData, cartItems, quoteIndex) => {\r\n let fakePrice ;\r\n /** If the number of slabs is greater than one, set the price of all other materials to zero, as only the cost of slabs will be calculated. */\r\n if (FEATURES_WITH_0_VALUE_FOR_THE_SLABS[parentKey]) {\r\n const slabAlreadyInTheCart = cartItems.find(cartItem => {\r\n return (cartItem.sqftId) && (cartItem.partId === SQFT_FEATURES.slabs) && (cartItem.currentQuote === quoteIndex)\r\n })\r\n if (sqftPassedData.slabImagesTotalArea.length > 0 || slabAlreadyInTheCart) {\r\n const activeSlabsExist = sqftPassedData.slabImagesTotalArea.some(slabImageAreaGroup => !slabImageAreaGroup.isDisabledInPopup);\r\n if (activeSlabsExist) {\r\n fakePrice = 0;\r\n }\r\n }\r\n /** Applying the hardcoded price for slabs, which was set in the slab popup. */\r\n } else if (parentKey === SQFT_FEATURES.slabs) {\r\n if (featurePassed.pricePerArea) {\r\n fakePrice = parseFloat(featurePassed.pricePerArea) * getQuantityFromCalculator(parentKey, featurePassed, sqftPassedData);\r\n }\r\n }\r\n\r\n return fakePrice\r\n}\r\n\r\n/**\r\n * Returns parse sqft passed feature id and returns feature or null\r\n * @param featurePassed {object} // data that comes from sqft\r\n * @param parentKey {string} //\r\n * @param featureGroup {object} featureGroup\r\n * @param layout {object}\r\n * @returns feature {object}\r\n */\r\nconst getFeatureFromCalculatorPassedId = (featurePassed, parentKey, featureGroup, layout) => {\r\n let feature = null;\r\n let idToFind = null;\r\n switch (parentKey) {\r\n case \"edges\":\r\n case \"backsplashes\":\r\n case \"countertop\":\r\n case \"center_island_countertop\":\r\n case \"slabs\":\r\n case SHAPE_PART_ID.slabPlaceHolder:\r\n idToFind = +featurePassed.featureId;\r\n break\r\n default:\r\n idToFind = featurePassed.featureId ? featurePassed.featureId: null;\r\n }\r\n if (idToFind) {\r\n feature = layout.getFeatureById(idToFind, true);\r\n if (!feature && featurePassed.slabParentPartId) {\r\n const slabParentFeatureGroup = layout.getFeatureGroupByPartId(featurePassed.slabParentPartId);\r\n if (slabParentFeatureGroup) {\r\n feature = slabParentFeatureGroup.getFeatureById(featurePassed.featureId, true);\r\n }\r\n }\r\n if (!feature && featurePassed.partId) {\r\n const slabParentFeatureGroup = layout.getFeatureGroupByPartId(featurePassed.partId);\r\n if (slabParentFeatureGroup) {\r\n feature = slabParentFeatureGroup.getFeatureById(featurePassed.featureId, true);\r\n }\r\n }\r\n // const navFeatures = getNavItems(featureGroup);//layout.designNavigationItems(featureGroup, {}, \"\", false, true);\r\n //\r\n // const navFeature = navFeatures.find(navItem => navItem.part.dbFeature.id === idToFind);\r\n // if (navFeature) {\r\n // feature = navFeature.part;\r\n // } else if (parentKey === \"slabs\") {\r\n // feature = layout.getFeatureById(idToFind);\r\n // } else if (parentKey === \"top_cabinet\" || parentKey === \"bottom_cabinet\") {\r\n // feature = layout.getFeatureById(idToFind, true);\r\n // }\r\n }\r\n\r\n return feature;\r\n}\r\n\r\n/**\r\n * Returns parse sqft passed feature id and returns feature or null\r\n * @param featurePassed {object} // data that comes from sqft\r\n // * @param previouslyAddedSqftFeatures {object} //\r\n * @param previouslyAddedSqftFeatures\r\n * @param featureGroup {object} //\r\n * @param parentKey {string} //\r\n * @param activeQuoteIndex {number} //\r\n * @param isCountertop {boolean} //\r\n * @param sqftFromFeature {object} //\r\n * @param cartItems {object} //\r\n * @param layout {object} //\r\n * @param isFromCartFeatureAdded {boolean} //\r\n * @returns feature {object}\r\n */\r\nconst getFeatureFromSQFT = (\r\n featurePassed,\r\n previouslyAddedSqftFeatures,\r\n featureGroup,\r\n parentKey,\r\n activeQuoteIndex,\r\n isCountertop,\r\n sqftFromFeature,\r\n cartItems,\r\n layout,\r\n isFromCartFeatureAdded,\r\n) => {\r\n let isSqftFromFeature = false;\r\n const previouslyAddedSqftFeature = previouslyAddedSqftFeatures.find(existing => {\r\n return featurePassed.id && (existing.sqftId === featurePassed.id) && (existing.currentQuote === activeQuoteIndex)\r\n });\r\n let feature = getFeatureFromCalculatorPassedId(featurePassed, parentKey, featureGroup, layout);\r\n\r\n if (cartItems.length && !feature) {\r\n const alreadyAdded = cartItems.find(cartItem => {\r\n return (cartItem.sqftId) && (cartItem.sqftId === featurePassed.id) && (cartItem.currentQuote === activeQuoteIndex)\r\n })\r\n const hasSamePartIdWithCartFeature = alreadyAdded && featureGroup.part.partId === alreadyAdded.cartFeature.partId\r\n if (hasSamePartIdWithCartFeature) {\r\n feature = alreadyAdded.cartFeature;\r\n }\r\n }\r\n\r\n const hasSamePartIdWithPreviouslyAddedFeature = previouslyAddedSqftFeature && previouslyAddedSqftFeature.partId === featureGroup.part.partId\r\n if (!feature && hasSamePartIdWithPreviouslyAddedFeature) {\r\n feature = previouslyAddedSqftFeature.feature;\r\n }\r\n if (!feature && (isCountertop || parentKey === \"backsplashes\") && sqftFromFeature\r\n && (sqftFromFeature.cartFeature.partId === featureGroup.part.partId)) {\r\n feature = sqftFromFeature.cartFeature;\r\n if (!isFromCartFeatureAdded) {\r\n isSqftFromFeature = true;\r\n }\r\n isFromCartFeatureAdded = true;\r\n }\r\n\r\n const state = store.getState();\r\n const {wizardActiveItem, wizardIsActive} = state.wizardState;\r\n\r\n let fromWizardGroupId = featurePassed.fromWizardGroupId;\r\n\r\n if (!fromWizardGroupId && wizardIsActive && wizardActiveItem) {\r\n const featureGroup = layout.getFeatureGroupByPartId(featurePassed.partId);\r\n if (featureGroup) {\r\n const wizardSteps = getWizardGroupsFromTheWizard(featureGroup.dbName || featureGroup.partName);\r\n if (wizardSteps.length) {\r\n // we don't set it to featurePassed, as we need to have all navItems in the dropdown, here we just find\r\n // at least something from the wizard\r\n fromWizardGroupId = wizardSteps[0].stepGroups[0].id;\r\n }\r\n }\r\n }\r\n\r\n const allNavItems = fromWizardGroupId\r\n ? getNavItemsFromTheWizard(featureGroup, \"\", {}, fromWizardGroupId)\r\n : layout.designNavigationItems(featureGroup, {}, \"\", false, true);\r\n\r\n // console.log(\"allNavItems\", allNavItems);\r\n\r\n if (!feature && sqftFromFeature && (\r\n ((parentKey === \"backsplashes\") && sqftFromFeature.cartFeature.partId.includes(\"countertop\"))\r\n || (isCountertop && sqftFromFeature.cartFeature.partId.includes(\"backsplash\"))\r\n || (isCountertop && sqftFromFeature.cartFeature.partId.includes(\"countertop\")\r\n && featureGroup.part.partId !== sqftFromFeature.cartFeature.partId) // case if 2 countertops\r\n )) {\r\n const name1 = sqftFromFeature.cartFeature.getSplittedFeatureName();\r\n const navItem = allNavItems.find(navItem => {\r\n return navItem.part.getSplittedFeatureName() === name1;\r\n });\r\n if (navItem) {\r\n feature = navItem.part;\r\n }\r\n }\r\n if (!feature && featureGroup.part.activeFeature && (!fromWizardGroupId || allNavItems.some(navItem => {\r\n return navItem.part.dbFeature.sharedFeatureName === featureGroup.part.activeFeature.dbFeature.sharedFeatureName\r\n }))) {\r\n feature = featureGroup.part.activeFeature;\r\n }\r\n if (!feature && featurePassed.featureId) {\r\n // we added a real feature with id - go and find it - cases when we load feature from different visualizer\r\n const allNavItems2 = layout.designNavigationItems(featureGroup, {}, \"\", false, \"all\", [], {returnAllFeatures: true});\r\n const foundNavItem = allNavItems2.find(nItem => nItem.part.dbFeature.id === featurePassed.featureId);\r\n if (foundNavItem) {\r\n feature = foundNavItem.part;\r\n }\r\n }\r\n if (!feature && allNavItems.length) {\r\n feature = allNavItems[0].part;\r\n }\r\n\r\n return [feature, isSqftFromFeature, isFromCartFeatureAdded, featurePassed.fromWizardGroupId];\r\n}\r\n","import {connect} from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\nimport {injectIntl} from \"react-intl\";\r\n\r\nconst QtCategoryName = (props) => {\r\n\r\n const {qtCategoryName, intl, fabricatorData} = props;\r\n\r\n return getQtCategoryName(qtCategoryName, intl, fabricatorData)\r\n};\r\n\r\nQtCategoryName.propTypes = {\r\n qtCategoryName: PropTypes.string,\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n fabricatorData: store.fabricatorState,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(QtCategoryName)\r\n)\r\n\r\nexport const getQtCategoryName = (qtCategoryName, intl, fabricatorData) => {\r\n if ((fabricatorData.isLowes || fabricatorData.isCaesarStone) && intl.messages) {\r\n if (intl.locale === \"fr-FR\" && intl.messages[\"transDoc.customDisplayName_FR.\" + qtCategoryName]) {\r\n return intl.formatMessage({id: \"transDoc.customDisplayName_FR.\" + qtCategoryName})\r\n } else if (intl.locale === \"pl-PL\" && intl.messages[\"transDoc.customTranslateName_PL.\" + qtCategoryName]) {\r\n return intl.formatMessage({id: \"transDoc.customTranslateName_PL.\" + qtCategoryName})\r\n }\r\n }\r\n\r\n return qtCategoryName\r\n}\r\n","//********* FILTERS *********//\r\nimport * as types from \"./actionTypes\";\r\n\r\nexport const setAvailableFilterValues = (availableFilterValues) => ({\r\n type: types.SET_AVAILABLE_FILTER_VALUES,\r\n payload: {availableFilterValues}\r\n});\r\n\r\nexport const updateFiltersCount = () => ({\r\n type: types.UPDATE_FILTERS_COUNT\r\n})\r\n","import workspace from \"../workspace\";\r\n//import Point from \"../shapes/point\";\r\nimport EventManager from \"../../store/sqftEventManager\";\r\nimport sqftConfig from \"../../store/sqftConfig\";\r\nimport {\r\n getIntersectCordsBetweenLines,\r\n getMidPoint,\r\n getMousePositionOnField,\r\n getPointDistance,\r\n getPointOnTheLine, inchesToMm, mmToInches, parseImperialFractionToDecimal,\r\n} from \"../../../../helpers/sqftHelper\";\r\nimport ShapeHelper, {getCountertopPartNames, getLineLengthNumberText} from \"../../../../helpers/shapeHelper\";\r\nimport Config from \"../../store/sqftConfig\";\r\nimport {createShapeFromPoints, createWallFromPointsV2} from \"../../../../helpers/freeDrawHelper\";\r\nimport NumberText from \"../workspace/text/numberText\";\r\nimport store from \"../../../../../../store\";\r\nimport {setSQFTActiveButton, setSQFTMenuOpened} from \"../../../../../../actions/sqftMenuFunctions\";\r\nimport config from \"../../store/sqftConfig\";\r\nimport RenderFreeDraw from \"../../helpers/renderFreeDraw\";\r\nimport COLOR_THEMES, {COLORS} from \"../../../../../../colorThemes\";\r\nimport {FREE_DRAW_TYPE, MEASURE_UNITS, SIDEBAR_NAVIGATION_CABINET_BUTTONS} from \"../../../../constants\";\r\nimport {getWallLockedPoint, getWallPoint} from \"../../helpers/wallHelper\";\r\nimport {getFreeDrawPoint, getLockedPoint, getLockPointPos} from \"../../helpers/freeDrawHelper\";\r\nimport sqftEventManager from \"../../store/sqftEventManager\";\r\nimport {\r\n isBackspaceKeyCode,\r\n isDeleteKeyCode,\r\n isLengthKeyCode,\r\n} from \"../../../../helpers/keyboardHelper\";\r\n\r\nconst MIN_DISTANCE_BETWEEN_POINTS = 1\r\n\r\nconst FreeDraw = function() {\r\n let state = {\r\n isDrawFinished: false,\r\n addedPoints: [],\r\n dimensions: [],\r\n dimensionToMouse: null,\r\n drawLineToMouse: false,\r\n lineWidth: 2,\r\n lineColor: COLOR_THEMES[sqftConfig.activeTheme].primary,\r\n outlineColor: COLOR_THEMES[sqftConfig.activeTheme].primary,\r\n minLineLength: 15,\r\n drawType: FREE_DRAW_TYPE.shape,\r\n useLockedPoints: true,\r\n currentNumericInput: \"\",\r\n lockedAngleStep: 45\r\n };\r\n\r\n this.clickedBackSplashButton = null;\r\n this.arcLength = 0;\r\n this.angle = 0;\r\n this.getState = () => state\r\n\r\n const onMouseMove = (mousePos, e) => {\r\n void e;\r\n\r\n if (state.addedPoints.length > 0) {\r\n state.drawLineToMouse = true;\r\n\r\n if (!state.dimensionToMouse) {\r\n this.createDimensionToMouse();\r\n }\r\n this.updateMeasurementToMousePosition(mousePos);\r\n }\r\n\r\n if (state.currentNumericInput.length >= 1 ) {\r\n state.currentNumericInput = \"\";\r\n }\r\n }\r\n\r\n const onKeyDown = (code, e) => {\r\n if (window.lineInputFocused) {\r\n return false;\r\n }\r\n\r\n if (isLengthKeyCode(e)) {\r\n const newValue = state.currentNumericInput + e.key;\r\n\r\n if (newValue !== null) {\r\n state.currentNumericInput = newValue;\r\n state.dimensionToMouse.value = newValue;\r\n }\r\n console.log(\"currentNumericInput\", state.currentNumericInput);\r\n return true;\r\n }\r\n\r\n if (isBackspaceKeyCode(e) || isDeleteKeyCode(e)) {\r\n state.currentNumericInput = state.currentNumericInput.slice(0, -1);\r\n state.dimensionToMouse.value = sqftConfig.measureUnit === MEASURE_UNITS.Metric\r\n ? mmToInches(state.currentNumericInput)\r\n : state.currentNumericInput;\r\n console.log(\"currentNumericInput\", state.currentNumericInput);\r\n return true;\r\n }\r\n\r\n if (code === EventManager.keyCode.ENTER || code === EventManager.keyCode.NumpadEnter) {\r\n if (state.addedPoints.length > 0 && state.currentNumericInput) {\r\n this.createPointFromCurrentNumericInput();\r\n } else {\r\n state.isDrawFinished = true;\r\n this.drawFinish();\r\n }\r\n }\r\n\r\n return true;\r\n };\r\n\r\n const onMouseDown = (mousePos) => {\r\n // var hoverPoint = workspace.getHoverPoint();\r\n // var hoverShape = workspace.getHoverShape();\r\n // if (hoverPoint || hoverShape) {\r\n // return true; // return true; // block all mouse-down events // we need dragging workspace\r\n // }\r\n state.currentNumericInput = \"\";\r\n const reduxState = store.getState();\r\n const activeButton = reduxState.sqftMenuState.activeButton;\r\n //todo pointV2 priority should be higher\r\n // const hoverPoint = workspace.getHoverPointV2();\r\n // const wall = WallsManager.getWallByPoint(hoverPoint);\r\n if (activeButton === SIDEBAR_NAVIGATION_CABINET_BUTTONS.wall) {\r\n this.drawWall(mousePos);\r\n return true;\r\n }\r\n };\r\n\r\n const onMouseUp = (mousePos) => {\r\n void mousePos;\r\n\r\n // this.checkForRestoreCursor();\r\n //\r\n // var hoverPoint = workspace.getHoverPoint();\r\n // var hoverShape = workspace.getHoverShape();\r\n // if (hoverPoint && !hoverPoint.angleIsChanged) {\r\n //\r\n // if (this.arcLength) {\r\n // hoverPoint.arcLength = this.arcLength;\r\n // hoverPoint.angle = 0;\r\n // } else if (this.angle) {\r\n // hoverPoint.angle = this.angle;\r\n // hoverPoint.arcLength = 0;\r\n // }\r\n // return true;\r\n // } else if (hoverShape) {\r\n // Menu.openMenu();\r\n // return true; // if click on shape, block reseting cursor, because we still need it http://jira.mozidev.com/browse/QC-956\r\n // }/* else {\r\n // deregisterEvents();\r\n // elements.designDefault.click();\r\n // }*/\r\n };\r\n\r\n this.createPointFromCurrentNumericInput = () => {\r\n const mousePos = sqftEventManager.getMousePos();\r\n const lastPoint = state.addedPoints[state.addedPoints.length - 1];\r\n let distance = parseImperialFractionToDecimal(state.currentNumericInput);\r\n distance = config.measureUnit === \"Imperial\" ? distance : mmToInches(distance);\r\n let newPoint;\r\n if (state.useLockedPoints && this.isPointExist()) {\r\n newPoint = getLockedPoint(lastPoint, mousePos, state.lockedAngleStep);\r\n } else {\r\n newPoint = getFreeDrawPoint(mousePos);\r\n }\r\n\r\n //we take full distance and subtract existing point distance from it.\r\n const segmentLength = getPointDistance(newPoint, lastPoint);\r\n const newCordsAtDistance = getPointOnTheLine(newPoint, lastPoint, distance - segmentLength);\r\n newPoint.setPosition(newCordsAtDistance);\r\n this.drawStart(mousePos, newPoint);\r\n }\r\n\r\n this.updateMeasurementToMousePosition = (mousePos) => {\r\n if (state.addedPoints.length > 0) {\r\n const mPosOnField = getMousePositionOnField(mousePos.x, mousePos.y);\r\n const lastPoint = state.addedPoints[state.addedPoints.length - 1];\r\n const distance = getPointDistance(mPosOnField, lastPoint);\r\n const reduxState = store.getState();\r\n const isWallsLockMode = reduxState.sqftMenuState.isWallsLockMode;\r\n const activeButton = reduxState.sqftMenuState.activeButton;\r\n let midPoint;\r\n\r\n if (isWallsLockMode && activeButton === SIDEBAR_NAVIGATION_CABINET_BUTTONS.wall) {\r\n const lockedPointPos = getLockPointPos(lastPoint);\r\n const lockPointOnField = getMousePositionOnField(lockedPointPos.x, lockedPointPos.y);\r\n midPoint = getMidPoint(lockPointOnField, lastPoint);\r\n state.dimensionToMouse.pos.betweenPoints.pointTo = lockPointOnField\r\n } else {\r\n if (state.useLockedPoints) {\r\n const lockedPointPos = getLockPointPos(lastPoint, state.lockedAngleStep);\r\n const lockPointOnField = getMousePositionOnField(lockedPointPos.x, lockedPointPos.y);\r\n midPoint = getMidPoint(lockPointOnField, lastPoint);\r\n } else {\r\n midPoint = getMidPoint(mPosOnField, lastPoint);\r\n }\r\n\r\n state.dimensionToMouse.pos.betweenPoints.pointTo = getMousePositionOnField(mousePos.x, mousePos.y);\r\n }\r\n state.dimensionToMouse.pos.betweenPoints.pointFrom = lastPoint;\r\n state.dimensionToMouse.pos.x = midPoint.x;\r\n state.dimensionToMouse.pos.y = midPoint.y;\r\n state.dimensionToMouse.value = sqftConfig.measureUnit === MEASURE_UNITS.Metric ? inchesToMm(distance) : distance;\r\n\r\n // console.log(\"state.dimensionToMouse\", state.dimensionToMouse);\r\n // debugger // eslint-disable-line no-debugger\r\n }\r\n }\r\n\r\n this.init = function() {\r\n if (!state.isInited) {\r\n state.isInited = true;\r\n this.createDimensionToMouse();\r\n this.registerEvents();\r\n }\r\n };\r\n\r\n this.createDimensionToMouse = () => {\r\n state.dimensionToMouse = new NumberText(\r\n 0,\r\n {x: 0, y: 0},\r\n {shouldRenderFrameBorder: true, isLength: false},\r\n workspace,\r\n Function(),\r\n true\r\n );\r\n }\r\n\r\n this.registerEvents = () => {\r\n EventManager.addEvent(\r\n EventManager.events.RENDER,\r\n this.render,\r\n this,\r\n EventManager.priorities.SHAPE\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_DOWN,\r\n onMouseDown,\r\n this,\r\n EventManager.priorities.WALL\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_MOVE,\r\n onMouseMove,\r\n this,\r\n EventManager.priorities.IMAGE\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_UP,\r\n onMouseUp,\r\n this,\r\n EventManager.priorities.OVERALL\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.KEYDOWN,\r\n onKeyDown,\r\n this,\r\n EventManager.priorities.OVERALL\r\n );\r\n };\r\n\r\n this.hide = function(e) {\r\n if (e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n }\r\n };\r\n\r\n this.deregisterEvents = () => {\r\n EventManager.resetCursor(this);\r\n EventManager.removeEvent(this);\r\n state.isInited = false\r\n }\r\n\r\n this.destroy = (protect, revertBackAfterMouseUp) => {\r\n if (revertBackAfterMouseUp) {\r\n EventManager.removeEvent(this, EventManager.events.RENDER);\r\n this.isWaitingToRestoreCursor = true;\r\n } else {\r\n this.deregisterEvents();\r\n }\r\n this.hide();\r\n };\r\n\r\n const checkIfFirstPointHovered = () => {\r\n return state.addedPoints.length > 2 && state.addedPoints[0].modelCorePoint.mixins.movable.isHovering();\r\n }\r\n // const checkIfLastPointHovered = () => {\r\n // return state.addedPoints.length > 2 && state.addedPoints[state.addedPoints.length - 1].modelCorePoint.mixins.movable.isHovering();\r\n // }\r\n const checkIfThisIsSecondPoint = () => {\r\n return state.addedPoints.length === 1;\r\n }\r\n\r\n this.isPointExist = () => {\r\n return state.addedPoints.length >= 1;\r\n }\r\n\r\n this.isFitDistanceWithLastPoint = (point) => {\r\n if (state.addedPoints.length < 1) {\r\n return true\r\n }\r\n const distance = getPointDistance(point, state.addedPoints[state.addedPoints.length - 1]);\r\n\r\n return distance > MIN_DISTANCE_BETWEEN_POINTS\r\n }\r\n this.isMousePosFitDistanceWithLastPoint = (mousePos) => {\r\n const mousePosOnField = getMousePositionOnField(mousePos.x, mousePos.y);\r\n return this.isFitDistanceWithLastPoint(mousePosOnField);\r\n }\r\n this.isFitDistanceWithLastPoint = (point) => {\r\n if (state.addedPoints.length < 1) {\r\n return true\r\n }\r\n const distance = getPointDistance(point, state.addedPoints[state.addedPoints.length - 1]);\r\n\r\n return distance > MIN_DISTANCE_BETWEEN_POINTS\r\n }\r\n\r\n this.initDraw = (useLockedPoints) => {\r\n state.useLockedPoints = useLockedPoints\r\n }\r\n\r\n this.drawShape = (mousePos) => {\r\n if (checkIfFirstPointHovered()) {\r\n this.drawFinish();\r\n return;\r\n }\r\n\r\n let point;\r\n if (state.useLockedPoints && this.isPointExist()) {\r\n const lastPoint = state.addedPoints[state.addedPoints.length - 1];\r\n point = getLockedPoint(lastPoint, mousePos, state.lockedAngleStep);\r\n } else {\r\n point = getFreeDrawPoint(mousePos);\r\n }\r\n\r\n this.drawStart(mousePos, point);\r\n }\r\n\r\n this.drawWall = (mousePos) => {\r\n state.lineWidth = 10;\r\n state.lineColor = COLORS.gray;\r\n state.outlineColor = COLORS.gray4;\r\n state.drawType = FREE_DRAW_TYPE.wall\r\n if (checkIfThisIsSecondPoint()) {\r\n const wallPointLocked = getWallLockedPoint(state.addedPoints[0], mousePos, state.lockedAngleStep);\r\n this.drawStart(mousePos, wallPointLocked);\r\n this.drawFinish();\r\n } else {\r\n const wallPoint = getWallPoint(mousePos);\r\n this.drawStart(mousePos, wallPoint);\r\n }\r\n };\r\n\r\n this.drawStart = (mousePos, pointV2) => {\r\n if (state.isDrawFinished || !this.isMousePosFitDistanceWithLastPoint(mousePos)) {\r\n return\r\n }\r\n\r\n if (state.addedPoints.length > 0) {\r\n this.addLineDimensions(pointV2);\r\n }\r\n state.addedPoints.push(pointV2);\r\n state.dimensionToMouse ? state.dimensionToMouse.destroy() : null;\r\n state.dimensionToMouse = null;\r\n };\r\n\r\n this.addLineDimensions = (pointTo) => {\r\n //const prevPoint = state.addedPoints[state.addedPoints.length - 2];\r\n const pointFrom = state.addedPoints[state.addedPoints.length - 1];\r\n const numberText = getLineLengthNumberText(pointFrom, pointTo, workspace, this.setSegmentLengthFromNumberValue);//new NumberText(thicknessValue, posThickness, {}, this, this.setSegmentThicknessFromNumberValue);\r\n\r\n state.dimensions.push(numberText);\r\n };\r\n\r\n this.setSegmentLengthFromNumberValue = (value, numberText) => {\r\n value = Math.round10(+value / Config.getMeasureMultiplier(), -3);\r\n let miteredSection = numberText.parent;\r\n let miteredSegments = miteredSection.getSegments();\r\n let miteredSegment = miteredSegments.find(seg => seg.length === numberText);\r\n\r\n this.setSegmentLength(value, miteredSegment, miteredSection);\r\n };\r\n\r\n this.resetState = (shouldResetPoints = true) => {\r\n state.isDrawFinished = false;\r\n state.currentNumericInput = \"\";\r\n if (shouldResetPoints) {\r\n for (const addedPoint of state.addedPoints) {\r\n addedPoint.destroy();\r\n }\r\n }\r\n for (const dimension of state.dimensions) {\r\n dimension.destroy();\r\n }\r\n if (state.dimensionToMouse) {\r\n state.dimensionToMouse.destroy();\r\n }\r\n\r\n state.addedPoints = [];\r\n state.dimensions = [];\r\n };\r\n\r\n this.drawFinish = () => {\r\n //this.addLineDimensions(state.addedPoints[0], state.addedPoints[1]);\r\n //const reduxState = store.getState();\r\n //const activeButton = reduxState.sqftMenuState.activeButton;\r\n if (state.addedPoints.length > 2 || state.drawType === FREE_DRAW_TYPE.wall && state.addedPoints.length === 2) {\r\n const shapeCenter = ShapeHelper.getCenterPoint(state.addedPoints);\r\n let preparedPoints = [];\r\n switch (state.drawType) {\r\n case FREE_DRAW_TYPE.wall:\r\n this.createWall(state.addedPoints, shapeCenter);\r\n break;\r\n case FREE_DRAW_TYPE.shape:\r\n if (state.useLockedPoints) {\r\n this.changeFirstPointCoordinatesToCreate45or90DegAngleWithTheLastPoint();\r\n }\r\n for (const addedPoint of state.addedPoints) {\r\n addedPoint.x -= shapeCenter.x;\r\n addedPoint.y -= shapeCenter.y;\r\n preparedPoints.push(addedPoint);\r\n }\r\n\r\n this.createShape(preparedPoints, shapeCenter);\r\n store.dispatch(setSQFTMenuOpened(\"\"));\r\n store.dispatch(setSQFTActiveButton(\"\"));\r\n config.workspace.menuItemActive = \"\";\r\n this.deregisterEvents();\r\n break;\r\n }\r\n\r\n state.dimensionToMouse ? state.dimensionToMouse.destroy() : null;\r\n state.dimensionToMouse = null;\r\n }\r\n\r\n this.resetState(!(state.drawType === FREE_DRAW_TYPE.wall));\r\n // this.deregisterEvents();\r\n //\r\n // if (activeButton === SIDEBAR_NAVIGATION_CABINET_BUTTONS.wall) {\r\n // this.init();\r\n // }\r\n };\r\n\r\n this.changeFirstPointCoordinatesToCreate45or90DegAngleWithTheLastPoint = () => {\r\n if (state.addedPoints.length >= 2) {\r\n const firstPoint = state.addedPoints[0];\r\n const secondPoint = state.addedPoints[1];\r\n const lastPoint = state.addedPoints[state.addedPoints.length - 1];\r\n //const penultimatePoint = state.addedPoints[state.addedPoints.length - 2];\r\n const lockPointPos = getLockPointPos(lastPoint, state.lockedAngleStep, firstPoint.getPointField());\r\n const intersectionPoint = getIntersectCordsBetweenLines(\r\n firstPoint.getPointField(),\r\n secondPoint.getPointField(),\r\n lastPoint.getPointField(),\r\n lockPointPos,\r\n true,\r\n true\r\n );\r\n\r\n if (intersectionPoint) {\r\n const intersectionPointOnField = getMousePositionOnField(intersectionPoint.x, intersectionPoint.y);\r\n state.addedPoints[0].setPosition(intersectionPointOnField);\r\n }\r\n }\r\n }\r\n\r\n this.createShape = (preparedPoints, shapeCenter) => {\r\n const [countertopPartName] = getCountertopPartNames();\r\n const shapeId = createShapeFromPoints(\r\n preparedPoints,\r\n countertopPartName,\r\n false,\r\n shapeCenter,\r\n true,\r\n null,\r\n {},\r\n {\r\n minimumShapeArea: 25,\r\n maximumShapeArea: 100000,\r\n maximumLineDistance: 1000,\r\n }\r\n );\r\n void shapeId;\r\n }\r\n\r\n this.createWall = (preparedPoints, centerPoint) => {\r\n createWallFromPointsV2(preparedPoints, centerPoint, state.lockedAngleStep);\r\n }\r\n\r\n this.getOffset = function() {\r\n // //return {x: 0, y: 0};\r\n // var scale = sqftConfig.scale;\r\n // var workspacePos = workspace.getOffset();\r\n // debugger\r\n // if (parent) {\r\n // var _pos = parent.getPosition();\r\n // // if (sqftConfig.workspace.snapToGrid){\r\n // // _pos = parent.getSnappedPosition();\r\n // // }\r\n // var offset = {\r\n // x: workspacePos.x + (_pos.x * scale),\r\n // y: workspacePos.y + (_pos.y * scale)\r\n // }\r\n // } else {\r\n // return {x: 0, y: 0};\r\n // }\r\n // return offset;\r\n };\r\n this.render = (ctx) => RenderFreeDraw.render(ctx, this.getState())\r\n\r\n};\r\n\r\nexport default new FreeDraw()\r\n","import {AxiosInstance, leadApiGet, leadApiPost} from \"./api\";\r\nimport {IS_DEV_MODE} from \"../constants\";\r\n\r\nconst baseUrl = IS_DEV_MODE\r\n ? \"https://calendar.staging.labs.lixil.com\"\r\n : \"https://calendar.prod.labs.lixil.com\";\r\n\r\nconst postAuthData = {\r\n \"password\": \"QC@123\",\r\n \"username\": \"QC\"\r\n}\r\n\r\nexport const postSignInAuth = async () => {\r\n // return await leadApiPost(\"https://calendar.prod.labs.lixil.com/v1/sign-in\", postData);\r\n const postAuthResponse = await leadApiPost(baseUrl + \"/v1/sign-in\", postAuthData);\r\n if (postAuthResponse && postAuthResponse.data && postAuthResponse.data.data && postAuthResponse.data.data.jwtToken) {\r\n // dispatch(setAppJwtToken(postAuthResponse.data.data.jwtToken)); // just in case, we don't need it anymore\r\n AxiosInstance.defaults.headers.post['Authorization'] = postAuthResponse.data.data.jwtToken;\r\n AxiosInstance.defaults.headers.get['Authorization'] = postAuthResponse.data.data.jwtToken;\r\n }\r\n // console.log(\"AxiosInstance\", AxiosInstance);\r\n return postAuthResponse\r\n}\r\n\r\nconst withSignInRetryRequest = async (request) => {\r\n let mainResponse;\r\n\r\n const retryFunction = async () => {\r\n console.log(\"session expired, trying one more time...\", );\r\n // delete AxiosInstance.defaults.headers.post['Authorization']; // prevent status 400 bad request\r\n // delete AxiosInstance.defaults.headers.get['Authorization']; // prevent status 400 bad request\r\n await postSignInAuth();\r\n return await request();\r\n }\r\n\r\n try {\r\n mainResponse = await request();\r\n if (mainResponse && mainResponse.status === 401) {\r\n mainResponse = await retryFunction();\r\n }\r\n return mainResponse\r\n } catch (error) {\r\n if ((typeof error === \"object\") && error.response && (error.response.status === 401)) {\r\n mainResponse = await retryFunction();\r\n return mainResponse\r\n }\r\n console.log(\"response error\", error);\r\n return new Error(error)\r\n }\r\n}\r\n\r\n\r\nexport const checkLixilPostalCode = async (zipCode) => {\r\n try {\r\n const url = `${baseUrl}/availability/${zipCode}`;\r\n const request = leadApiGet.bind(this, url);\r\n const mainResponse = await withSignInRetryRequest(request);\r\n return mainResponse && mainResponse.data && mainResponse.data.serviceAvailable\r\n } catch (error) {\r\n console.log(\"availability/postalCode error\", error);\r\n return false\r\n }\r\n}\r\n\r\nexport const postLixilCalendar = async (postCalendarData) => {\r\n try {\r\n const url = `${baseUrl}/availability/calendar`;\r\n const request = leadApiPost.bind(this, url, postCalendarData);\r\n return await withSignInRetryRequest(request);\r\n } catch (error) {\r\n console.log(\"availability/calendar error\", error);\r\n return false\r\n }\r\n}\r\n\r\nexport const postLixilGetSalesRep = async (postData) => {\r\n try {\r\n const url = `${baseUrl}/availability/getSalesRep`;\r\n const request = leadApiPost.bind(this, url, postData);\r\n return await withSignInRetryRequest(request);\r\n } catch (error) {\r\n console.log(\"availability/getSalesRep error\", error);\r\n return false\r\n }\r\n}\r\n","import React from 'react';\r\nimport * as uuid from \"uuid\";\r\n\r\nimport NavigationItem from \"./navigationItem\";\r\nimport {UserPopupTypes} from \"../constants\";\r\nimport {getFeatureCost, getFeatureIsLocked, isIE} from \"../../../misc/helpers\";\r\nimport Walls from \"../../kvComponent/core/parts/walls\";\r\nimport Cabinet from \"../../kvComponent/core/parts/cabinet\";\r\nimport CountertopGroup from \"../../kvComponent/core/parts/countertopGroup\";\r\nimport CenterIsland from \"../../kvComponent/core/parts/centerIsland\";\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\nimport {getBvGroupFeatures} from \"../../../api/server-api\";\r\nimport LoadingBar from '../../../lib/react-redux-loading-bar';\r\nimport CommonFeatureItemsMethods from \"../commonFeatureItemsMethods\";\r\nimport {checkIfNeedToReceiveFeaturesIfFiltersApplied} from \"../../../misc/filtersFunctions\";\r\nimport {\r\n displayMaterialsWizardGroupAsFeature,\r\n getMissingWizardFeatures\r\n} from \"../../look/lookNavigation/lookMain/lookWizard/lookWizardFunctions\";\r\nimport {getAdditionalFeaturesOnScroll} from \"../../../api/look-api\";\r\nimport Config from \"../../../config\";\r\n\r\nexport default class NavigationItemsList extends CommonFeatureItemsMethods { // this class is used for both Desktop & Mobile navigations to avoid method's duplicating\r\n\r\n constructor(props) {\r\n window.itemClickCount = window.itemClickCount || 0;\r\n window.allowClickLeadCapturePopup = true;\r\n super(props);\r\n }\r\n\r\n componentDidMount() {\r\n this.reorderItems(this.props);\r\n const childItem = this.props.childItem && this.props.childItem.part;\r\n if (childItem && childItem.partId.includes(\"countertop\") && this.props.selectedFilters.length && !this.props.activeNavigationFilter) {\r\n const checkPassed = checkIfNeedToReceiveFeaturesIfFiltersApplied(this.props.selectedFilters, childItem);\r\n if (checkPassed) {\r\n this.getFeaturesFromBackendWithFilters(childItem, checkPassed.arrayOfNeededFiltersToReceive, 1);\r\n }\r\n }\r\n }\r\n\r\n itemClick = (item, featureIsLocked, event) => {\r\n const fabricatorSettings = this.props.fabricatorData.settings;\r\n if( !this.props.userIsLoggedIn && fabricatorSettings.clickLeadCapture && (++window.itemClickCount >= fabricatorSettings.clickLeadCount) && window.allowClickLeadCapturePopup) {\r\n this.handleUserLoginClick(UserPopupTypes.NewDesign);\r\n return;\r\n }\r\n this.props.onItemClick(item, false, featureIsLocked, event);\r\n this.forceUpdate();\r\n };\r\n\r\n getActiveFeatureName = (uniquePartNamesArray, parentId, childName, isCabinet = false) => {\r\n const layout = getCurrentLayout();\r\n const parent = layout.parts[parentId];\r\n const activeFeature = parent && parent[childName] && parent[childName].activeFeature;\r\n if (activeFeature) {\r\n uniquePartNamesArray.unshift(activeFeature.getSplittedFeatureName(isCabinet))\r\n }\r\n return uniquePartNamesArray\r\n };\r\n\r\n getSelectedWallIndexes = (childItem, features, selectedFirstItemIndex) => {\r\n if (this.props.isWizard && this.props.currentGroups && displayMaterialsWizardGroupAsFeature(this.props.currentGroups)) {\r\n return []\r\n }\r\n const layout = getCurrentLayout();\r\n let otherSelectedWallsIndexes = [];\r\n let uniquePartNamesArray = [];\r\n const kitchenCabinetPartIds = [\"top_cabinet\", \"bottom_cabinet\", \"center_island_cabinet\"];\r\n if (childItem && childItem.part && childItem.part.isStoneFeature) {\r\n uniquePartNamesArray = layout.getStonesActiveFeatures().map((activeFeature) => {\r\n return activeFeature.cartFeature.getSplittedFeatureName()\r\n });\r\n switch (childItem.part.partId) {\r\n case \"backsplash\": {\r\n const parentItem = childItem.part.getParent();\r\n const rightWall = parentItem && parentItem.rightWall;\r\n if (rightWall && rightWall.activeFeature) {\r\n uniquePartNamesArray.unshift(rightWall.activeFeature.getSplittedFeatureName())\r\n }\r\n uniquePartNamesArray = this.getActiveFeatureName(uniquePartNamesArray, CenterIsland.id, \"countertop\");\r\n uniquePartNamesArray = this.getActiveFeatureName(uniquePartNamesArray, CountertopGroup.id, \"countertop\");\r\n break;\r\n }\r\n case \"countertop\": {\r\n uniquePartNamesArray = this.getActiveFeatureName(uniquePartNamesArray, Walls.id, \"backsplash\");\r\n uniquePartNamesArray = this.getActiveFeatureName(uniquePartNamesArray, CenterIsland.id, \"countertop\");\r\n break;\r\n }\r\n case \"center_island_countertop\": {\r\n uniquePartNamesArray = this.getActiveFeatureName(uniquePartNamesArray, Walls.id, \"backsplash\");\r\n uniquePartNamesArray = this.getActiveFeatureName(uniquePartNamesArray, CountertopGroup.id, \"countertop\");\r\n break;\r\n }\r\n default:\r\n break;\r\n }\r\n } else if (childItem && childItem.part && (kitchenCabinetPartIds.includes(childItem.part.partId))) {\r\n switch (childItem.part.partId) {\r\n case \"top_cabinet\": {\r\n uniquePartNamesArray = this.getActiveFeatureName(uniquePartNamesArray, CenterIsland.id, \"cabinet\");\r\n uniquePartNamesArray = this.getActiveFeatureName(uniquePartNamesArray, Cabinet.id, \"bottomCabinet\", true);\r\n break;\r\n }\r\n case \"bottom_cabinet\": {\r\n uniquePartNamesArray = this.getActiveFeatureName(uniquePartNamesArray, CenterIsland.id, \"cabinet\");\r\n uniquePartNamesArray = this.getActiveFeatureName(uniquePartNamesArray, Cabinet.id, \"topCabinet\", true);\r\n break;\r\n }\r\n case \"center_island_cabinet\": {\r\n uniquePartNamesArray = this.getActiveFeatureName(uniquePartNamesArray, Cabinet.id, \"topCabinet\", true);\r\n uniquePartNamesArray = this.getActiveFeatureName(uniquePartNamesArray, Cabinet.id, \"bottomCabinet\", true);\r\n break;\r\n }\r\n }\r\n }\r\n // console.log(\"uniquePartNamesArray\", uniquePartNamesArray);\r\n if (uniquePartNamesArray.length) {\r\n uniquePartNamesArray = isIE()\r\n ? uniquePartNamesArray.reduce(function(a,b){if(a.indexOf(b)<0)a.push(b);return a;},[])\r\n : [...uniquePartNamesArray.reduce((p,c) => p.set(c,true),new Map()).keys()]; //remove duplicates\r\n // console.log('uniquePartNamesArray', uniquePartNamesArray);\r\n uniquePartNamesArray.forEach((uniquePartName) => {\r\n let foundIndex = features.findIndex(feature => feature.part && (feature.part.getSplittedFeatureName() === uniquePartName));\r\n if (foundIndex < 0) {\r\n foundIndex = features.findIndex(feature => {\r\n if (!feature.part) {\r\n return false\r\n }\r\n if (childItem.part.partId === \"backsplash\") {\r\n // example: countertop - \"Dymo White 12X24 Glossy\", backsplash - \"Dymo White 12X24 Glossy 4in l\"\r\n return feature.part.partName.includes(uniquePartName)\r\n }\r\n return feature.part.partName === uniquePartName\r\n });\r\n }\r\n if (foundIndex > -1 && selectedFirstItemIndex !== foundIndex) {\r\n otherSelectedWallsIndexes.push(foundIndex);\r\n }\r\n });\r\n }\r\n // console.log(\"otherSelectedWallsIndexes\", otherSelectedWallsIndexes);\r\n return otherSelectedWallsIndexes\r\n };\r\n\r\n getLockedFeature = (activeFeature) => {\r\n const filterValues = activeFeature.part.dbFeature && activeFeature.part.dbFeature.filterValueIDs;\r\n if (filterValues) {\r\n return Object.keys(filterValues).some((filterKey) => {\r\n const filterGroup = this.props.filterGroups.find(group => group.id === +filterKey);\r\n const filterValue = filterGroup && filterGroup.values && filterGroup.values.find(value => value.id === filterValues[filterKey][0]);\r\n return filterValue && filterValue.lockedInWizard\r\n });\r\n }\r\n return false\r\n };\r\n\r\n getActiveItemIndex = (props) => {\r\n const showPlaceHolders = document.bvConfig ? document.bvConfig.showPlaceholders : false;\r\n let isActiveItemIndex = null;\r\n if (props.childItem && props.childItem.part.activeFeature) {\r\n isActiveItemIndex = props.features.findIndex((item) => {\r\n if(item && item.part)\r\n return props.childItem.part.activeFeatureId(showPlaceHolders) === item.part.id()\r\n })\r\n } else if (props.parentItem.part.activeFeature) {\r\n isActiveItemIndex = props.features.findIndex((item) => {\r\n if(item && item.part)\r\n return props.parentItem.part.activeFeatureId(showPlaceHolders) === item.part.id()\r\n })\r\n }\r\n return isActiveItemIndex\r\n };\r\n\r\n getReorderedItems = (indexesToReplace, props, selectedExist = false, isQuotingTool = false) => {\r\n let reOrderedFeatures = props.features;\r\n const featuresToPlaceFirst = indexesToReplace.map(index => reOrderedFeatures[index]).reverse();\r\n const sorted = this.getSortedFeatures(reOrderedFeatures, selectedExist, isQuotingTool);\r\n featuresToPlaceFirst.forEach((navItemToReplace) => {\r\n const currentIndex = sorted.findIndex(navItem => navItem.part.dbFeature.id === navItemToReplace.part.dbFeature.id)\r\n if (currentIndex > -1) {\r\n sorted.splice(currentIndex, 1);\r\n sorted.splice(0, 0, navItemToReplace);\r\n }\r\n });\r\n // console.log(\"sorted\", sorted);\r\n return sorted\r\n };\r\n\r\n checkForSelectedAccessories = (activeFeature, selected) => {\r\n const accessories = [\"large_corner_caddie\", \"corner_caddie\", \"small_corner_shelf\", \"large_corner_seat\"];\r\n if (accessories.includes(activeFeature.partId)) {\r\n if (activeFeature.partId === \"large_corner_seat\") {\r\n if (activeFeature.getParent().getParent().caddie_type === \"large_corner_caddie\") {\r\n selected = false\r\n }\r\n } else if (activeFeature.getParent().getParent().caddie_type !== activeFeature.partId) {\r\n selected = false\r\n }\r\n }\r\n return selected\r\n };\r\n\r\n getFeaturePropertyToSort = (navItem, property) => {\r\n if (property === \"name\") {\r\n return navItem.part.getFeatureName()\r\n }\r\n if (property === \"SortPositionNum\") {\r\n return navItem.part.metaData[property] || 99999;\r\n }\r\n return navItem.part[property];\r\n }\r\n\r\n getNavItemsSortedByProperty = (navItems, property, property2) => {\r\n const order = \"asc\";\r\n // console.log(\"navItems - navItems\", navItems);\r\n navItems = navItems.sort((a,b) => {\r\n let prop1 = this.getFeaturePropertyToSort(a, property);\r\n let prop2 = this.getFeaturePropertyToSort(b, property);\r\n let prop3 = this.getFeaturePropertyToSort(a, property2);\r\n let prop4 = this.getFeaturePropertyToSort(b, property2);\r\n return order === \"asc\"\r\n ? (prop1 > prop2) ? 1 : (prop1 < prop2) ? -1 : (prop3 > prop4) ? 1 : (prop3 < prop4) ? -1 : 0\r\n : (prop1 < prop2) ? 1 : (prop1 > prop2) ? -1 : (prop3 < prop4) ? 1 : (prop3 > prop4) ? -1 : 0\r\n })\r\n // console.log(\"navItems\", navItems);\r\n return navItems\r\n };\r\n\r\n getSortedFeatures = (features, selectedExist = false, isQuotingTool = false) => {\r\n if (this.props.isWizard && this.props.currentGroups && displayMaterialsWizardGroupAsFeature(this.props.currentGroups)) {\r\n return features\r\n }\r\n const {fabricatorData} = this.props;\r\n const fabricatorSettings = fabricatorData.settings;\r\n let newFeatures = [...features.filter(feature => feature && feature.part && feature.part.dbFeature)];\r\n let selectedFeature = null;\r\n if (selectedExist && (!isQuotingTool || (newFeatures[0] && this.checkIfFeatureSelected(newFeatures[0].part, newFeatures[0].part.getParent())))) {\r\n selectedFeature = newFeatures[0];\r\n newFeatures.splice(0, 1);\r\n }\r\n if ((fabricatorSettings.leadCapture && !(document.kvConfig.isBackend && document.kvConfig.jobId && document.kvConfig.canSaveQuote)) && !this.props.isPhoneNumberValidated) {\r\n const unLockedFeatures = newFeatures\r\n .filter(navItem => !getFeatureIsLocked(navItem.part))\r\n .map(navItem => {\r\n navItem.part.featurePrice = getFeatureCost(navItem.part, 1);\r\n return navItem\r\n })\r\n const lockedFeatures = newFeatures\r\n .filter(navItem => getFeatureIsLocked(navItem.part))\r\n .map(navItem => {\r\n navItem.part.featurePrice = getFeatureCost(navItem.part, 1);\r\n return navItem\r\n })\r\n newFeatures = fabricatorSettings.showPricing ? [\r\n ...this.getNavItemsSortedByProperty(unLockedFeatures, \"featurePrice\", \"name\"),\r\n ...this.getNavItemsSortedByProperty(lockedFeatures, \"featurePrice\", \"name\")\r\n ] : [...unLockedFeatures, ...lockedFeatures];\r\n } else if (fabricatorSettings.showPricing && !fabricatorData.hideCheckoutBreakdownCost && !fabricatorData.hidePricesFromUser) {\r\n newFeatures = newFeatures.map(navItem => {\r\n navItem.part.featurePrice = getFeatureCost(navItem.part, 1);\r\n return navItem\r\n })\r\n newFeatures = this.getNavItemsSortedByProperty(newFeatures, \"featurePrice\", \"name\")\r\n } else {\r\n const propertyToSort = newFeatures.some(navItem => navItem.part.metaData[\"SortPositionNum\"]) ? \"SortPositionNum\" : \"name\";\r\n newFeatures = this.getNavItemsSortedByProperty(newFeatures, propertyToSort, \"\");\r\n if (!isQuotingTool && newFeatures.some(navItem => navItem.part.useMatchesFailedNavigation)) {\r\n newFeatures = this.getNavItemsSortedByProperty(newFeatures, \"matchesMetaFailed\");\r\n }\r\n }\r\n if (isQuotingTool) {\r\n // newFeatures = this.getNavItemsSortedByProperty(newFeatures, \"notAvailableInVisualizer\", \"_customDisplayName\")\r\n const inVisFeatures = newFeatures.filter(navFeature => !navFeature.part.notAvailableInVisualizer);\r\n const notInVisFeatures = newFeatures.filter(navFeature => navFeature.part.notAvailableInVisualizer);\r\n newFeatures = [\r\n ...inVisFeatures,\r\n // ...this.getNavItemsSortedByProperty(notInVisFeatures, \"featurePrice\", \"name\")\r\n ...notInVisFeatures\r\n ];\r\n }\r\n if (selectedExist && selectedFeature) {\r\n newFeatures.unshift(selectedFeature)\r\n }\r\n return newFeatures\r\n };\r\n\r\n getNavItemsList = (isMobile) => {\r\n const fabricatorSettings = this.props.fabricatorData.settings;\r\n const showPlaceHolders = document.bvConfig ? document.bvConfig.showPlaceholders : false;\r\n const elements = [];\r\n\r\n const features = this.state.reorderedFeatures.filter(feature => feature);\r\n // console.log('features', features);\r\n\r\n for (let i = 0; i < features.length; i++ ) {\r\n const currentFeature = features[i];\r\n const currentParent = this.props.childItem || this.props.parentItem;\r\n\r\n let isActive = false;\r\n if (((fabricatorSettings.leadCapture && !(document.kvConfig.isBackend && document.kvConfig.jobId && document.kvConfig.canSaveQuote)) && !this.props.isPhoneNumberValidated)\r\n || (showPlaceHolders && currentParent.part.placeholderFeature && !currentParent.part.placeholderChanged)) {\r\n isActive = currentFeature && this.props.activeFeature && currentParent\r\n && currentParent.part.firstClick[this.props.activeQuoteIndex]\r\n && this.props.activeFeature.dbFeature.id === currentFeature.part.id();\r\n } else {\r\n isActive = currentFeature && this.props.activeFeature && this.props.activeFeature.dbFeature.id === currentFeature.part.id();\r\n }\r\n\r\n if (isActive) {\r\n isActive = this.checkForSelectedAccessories(this.props.activeFeature, isActive);\r\n }\r\n\r\n let isPulsating = false;\r\n if ((fabricatorSettings.leadCapture && !(document.kvConfig.isBackend && document.kvConfig.jobId && document.kvConfig.canSaveQuote)) && !this.props.isPhoneNumberValidated\r\n && currentFeature && currentFeature.part.dbFeature.unlocked\r\n && (!this.props.activeFeature || (this.props.childItem && (!this.props.childItem.part.firstClick[this.props.activeQuoteIndex] || !this.props.activeFeature.dbFeature.unlocked)))) {\r\n isPulsating = true\r\n }\r\n\r\n let currentFeatureCartItemsCount = 0;\r\n const currentFeatureId = currentFeature && currentFeature.part.dbFeature.id;\r\n const matchingCartItem = this.props.cartItems.find((cartItem) => {\r\n return currentFeatureId === (cartItem.cartFeature.dbFeature && cartItem.cartFeature.dbFeature.id)\r\n && (cartItem.currentQuote === this.props.activeQuoteIndex);\r\n });\r\n if (matchingCartItem) {\r\n currentFeatureCartItemsCount = matchingCartItem.quantity\r\n }\r\n\r\n elements.push(\r\n this.switchToFeatureInfo(\r\n currentFeature, \"nav-item-info-clicked\", \"visualizer\"\r\n )}\r\n fabricatorData={this.props.fabricatorData}\r\n largeThumbnail={!isMobile && (this.props.navigationViewType === 2)}\r\n currentFeatureCartItemsCount={currentFeatureCartItemsCount}\r\n existInQtCategory={this.props.existInQtCategory}\r\n />\r\n );\r\n }\r\n\r\n return elements\r\n\r\n };\r\n\r\n getLoadingFeatures = () => (\r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n );\r\n\r\n // onDesktopNavigationScroll = ({clientHeight, clientWidth, scrollHeight, scrollLeft, scrollTop, scrollWidth}) => {\r\n onDesktopNavigationScroll = ({clientWidth, scrollLeft, scrollWidth}) => {\r\n // console.log(\"clientHeight\", clientHeight);\r\n // console.log(\"clientWidth\", clientWidth);\r\n // console.log(\"scrollHeight\", scrollHeight);\r\n // console.log(\"scrollLeft\", scrollLeft);\r\n // console.log(\"scrollTop\", scrollTop);\r\n // console.log(\"scrollWidth\", scrollWidth);\r\n // console.log(\"=================\");\r\n if ((scrollWidth - Math.ceil(scrollLeft) === clientWidth) || (scrollWidth - Math.floor(scrollLeft) === clientWidth)) {\r\n this.getNewFeaturesOnScroll(scrollLeft);\r\n }\r\n };\r\n\r\n onMobileNavigationScroll = ({clientHeight, scrollHeight, scrollTop}) => {\r\n if ((scrollHeight - Math.ceil(scrollTop) === clientHeight) || (scrollHeight - Math.floor(scrollTop) === clientHeight)) {\r\n this.getNewFeaturesOnScroll(scrollTop)\r\n }\r\n };\r\n\r\n getFeaturesFromBackendWithFilters = (childItem, counterTopFiltersIdsReceived, finalScrollPosition = 1, existingFilterObject = null) => {\r\n const filterObject = existingFilterObject || {\r\n uuid: uuid.v4(),\r\n filterIds: counterTopFiltersIdsReceived, // array of arrays, ex. [[56],[1122,1313]] etc.\r\n featuresReceived: 0,\r\n page: 0\r\n };\r\n if (!existingFilterObject) {\r\n childItem.filterIdsReceived.push(filterObject);\r\n }\r\n\r\n const featuresCountToReceive = 5000;\r\n\r\n if (!this.featureReceivingStarted) {\r\n this.setState({\r\n additionalFeaturesLoading: true\r\n });\r\n this.featureReceivingStarted = true;\r\n getBvGroupFeatures(\r\n childItem.dbName || childItem.partName,\r\n filterObject.page,\r\n featuresCountToReceive,\r\n counterTopFiltersIdsReceived\r\n )\r\n .then((response) => {\r\n if (response && response.length) {\r\n console.log(\"response.data with filters\", response);\r\n childItem.setGroupFeatures(response, featuresCountToReceive, false);\r\n childItem.filterIdsReceived = childItem.filterIdsReceived.map((filtersReceivedObject) => {\r\n if (filtersReceivedObject.uuid === filterObject.uuid) {\r\n filtersReceivedObject.featuresReceived += response.length;\r\n if (response.length < featuresCountToReceive) {\r\n filtersReceivedObject.allFeaturesWithFiltersReceived = true;\r\n } else {\r\n filtersReceivedObject.page++;\r\n }\r\n }\r\n return filtersReceivedObject\r\n });\r\n }\r\n this.finishScrollRequest(finalScrollPosition);\r\n });\r\n }\r\n };\r\n\r\n finishScrollRequest = (finalScrollPosition, shouldUpdateNavItems = true) => {\r\n this.setState({\r\n additionalFeaturesLoading: false\r\n }, () => {\r\n if (shouldUpdateNavItems) {\r\n this.needToUpdate = finalScrollPosition;\r\n this.props.parentUpdate();\r\n }\r\n this.featureReceivingStarted = false;\r\n });\r\n }\r\n\r\n getNewFeaturesOnScroll = async (finalScrollPosition, parentItemPassed = null) => {\r\n\r\n const {useNewWizardFeaturesRequestsLogic, wizardGroup, currentParent} = this.props;\r\n\r\n if (useNewWizardFeaturesRequestsLogic) {\r\n if (this.featureReceivingStarted || currentParent.requestInProgress) {\r\n return;\r\n }\r\n this.featureReceivingStarted = true;\r\n this.setState({\r\n additionalFeaturesLoading: true\r\n });\r\n getMissingWizardFeatures(this.state.reorderedFeatures, wizardGroup, currentParent)\r\n .then(shouldUpdateNavItems => this.finishScrollRequest(finalScrollPosition, shouldUpdateNavItems));\r\n return;\r\n }\r\n\r\n const parentItem = parentItemPassed || this.props.childItem || this.props.parentItem;\r\n if (!parentItem.part) {\r\n return\r\n }\r\n if (this.props.selectedFilters.length) {\r\n const checkPassed = checkIfNeedToReceiveFeaturesIfFiltersApplied(this.props.selectedFilters, parentItem.part, true);\r\n console.log(\"checkPassed\", checkPassed);\r\n if (checkPassed) {\r\n this.getFeaturesFromBackendWithFilters(parentItem.part, checkPassed.filterIds, finalScrollPosition, checkPassed);\r\n }\r\n return\r\n }\r\n if (!parentItem.part.getRealFeaturesReceivedProperty() && !this.featureReceivingStarted) {\r\n this.featureReceivingStarted = true;\r\n this.setState({\r\n additionalFeaturesLoading: true\r\n });\r\n\r\n const additionalFeaturesOnScroll = await getAdditionalFeaturesOnScroll(parentItem.part);\r\n if (Config.isDevMode()) {\r\n console.log(\"additionalFeaturesOnScroll\", additionalFeaturesOnScroll);\r\n }\r\n\r\n this.finishScrollRequest(finalScrollPosition);\r\n }\r\n };\r\n\r\n}\r\n","import {Component} from 'react';\r\nimport $ from \"jquery\";\r\n\r\nimport Analytics from \"../../analytics\";\r\nimport {getCurrentLayout} from \"../appLayout\";\r\nimport {changeQTRoutePath, changeRoutePath} from \"../../misc/changeRoutePath\";\r\nimport store from \"../../store\";\r\nimport {featureIsMatchingQtCatName} from \"../../misc/categorySwitchingFunctions\";\r\nimport {showWizardInsteadOfQT} from \"../look/lookNavigation/lookMain/lookWizard/lookWizardFunctions\";\r\nimport {switchToWizardItem} from \"../qkbPages/materialsWizard/useChangeWizardStepRoute\";\r\n\r\nexport default class CommonFeatureItemsMethods extends Component {\r\n\r\n // this method is NOT used by SelectionMainList, only visualizers desktop & mobile navigations\r\n switchToFeatureInfo = (feature, analyticsLabel, setCameFromPage = \"shoppingcart\", scrollToRelatedFeatureId = null, fromCartItem = null) => {\r\n\r\n Analytics.sendClickEvent(analyticsLabel);\r\n const featureInfo = feature.part || feature;\r\n const featureParent = featureInfo.getParent();\r\n const selectionGroup = featureParent.getParent ? featureParent.getParent().partName : featureParent.partName;\r\n const {fabricatorState, wizardState} = store.getState();\r\n const {wizardList, wizardIsActive} = wizardState;\r\n\r\n const visType = fabricatorState.settings.allowVisualizerSwitching && fromCartItem && fromCartItem.fromVisualizerType\r\n ? fromCartItem.fromVisualizerType\r\n : document.kvConfig.visualizerType;\r\n const layout = getCurrentLayout(visType);\r\n\r\n const setCommonStuff = () => {\r\n this.props.toggleSelectionWindow(true, selectionGroup);\r\n this.props.toggleSelectionFeatureInfo(featureInfo, true);\r\n if (setCameFromPage === \"visualizer\") {\r\n this.props.toggleBathroomVisualizerOpen(false);\r\n }\r\n this.props.setCameFromPage(setCameFromPage);\r\n }\r\n\r\n if (showWizardInsteadOfQT(wizardList, wizardIsActive)) {\r\n if (fromCartItem && fromCartItem.fromWizardId) {\r\n const wizardItem = wizardList.find(wizItem => wizItem.id === fromCartItem.fromWizardId);\r\n if (wizardItem) {\r\n setCommonStuff();\r\n switchToWizardItem(wizardItem, fromCartItem.fromWizardStep, fromCartItem.currentQuote, fromCartItem.fromWizardGroupId);\r\n return;\r\n }\r\n }\r\n const wizardItem = wizardList[0];\r\n if (wizardItem) {\r\n setCommonStuff();\r\n switchToWizardItem(wizardItem);\r\n }\r\n return\r\n }\r\n\r\n let nextCatName = \"\";\r\n\r\n // /* set new index*/\r\n let nextSubPartIndex = 0;\r\n if (featureParent.getParent) {\r\n if (layout.qtCategories\r\n && fabricatorState.settings.useCategorySwitching\r\n && layout.qtCategories.filter(qtCat => qtCat.subParts.some(subPart => subPart.part.partId === featureInfo.partId)).length > 1\r\n && fromCartItem\r\n && layout.qtCategories.find(qtCategory => featureIsMatchingQtCatName(fromCartItem.cartFeature, qtCategory.name, true))) {\r\n const neededCat = layout.qtCategories.find(qtCategory => featureIsMatchingQtCatName(fromCartItem.cartFeature, qtCategory.name, true));\r\n nextCatName = neededCat.name;\r\n nextSubPartIndex = neededCat.subParts.findIndex(subPart => subPart.part.partId === featureInfo.partId);\r\n } else if (layout.qtCategories && fromCartItem && fromCartItem.fromQtCategory\r\n && layout.qtCategories.find(qtCategory => qtCategory.name === fromCartItem.fromQtCategory)) {\r\n nextCatName = fromCartItem.fromQtCategory;\r\n this.props.setQtActiveCategory(fromCartItem.fromQtCategory);\r\n const qtActiveCategory = layout.qtCategories.find(qtCategory => qtCategory.name === fromCartItem.fromQtCategory);\r\n nextSubPartIndex = qtActiveCategory.subParts.findIndex(subPart => {\r\n return (subPart.part.dbName === featureParent.partName) || (subPart.part.partName === featureParent.partName)\r\n });\r\n if ((!nextSubPartIndex || nextSubPartIndex < 0) && qtActiveCategory.qtCategoryHasBeenChanged) {\r\n [\"countertop\", \"edge\", \"faucet\", \"sink\", \"stovetop\"].forEach(partId => {\r\n if (featureParent.partId.includes(partId)) {\r\n nextSubPartIndex = qtActiveCategory.subParts.findIndex(subPart => subPart.part.partId.includes(partId));\r\n }\r\n })\r\n }\r\n } else if (layout.qtCategories && featureParent.qtCategoryName) {\r\n this.props.setQtActiveCategory(featureParent.qtCategoryName);\r\n const qtActiveCategory = layout.qtCategories.find(qtCategory => qtCategory.name === featureParent.qtCategoryName);\r\n nextSubPartIndex = qtActiveCategory.subParts.findIndex(subPart => {\r\n return (subPart.part.dbName === featureParent.partName) || (subPart.part.partName === featureParent.partName)\r\n });\r\n if ((!nextSubPartIndex || nextSubPartIndex < 0) && qtActiveCategory.qtCategoryHasBeenChanged) {\r\n [\"countertop\", \"edge\", \"faucet\", \"sink\", \"stovetop\"].forEach(partId => {\r\n if (featureParent.partId.includes(partId)) {\r\n nextSubPartIndex = qtActiveCategory.subParts.findIndex(subPart => subPart.part.partId.includes(partId));\r\n }\r\n })\r\n }\r\n } else {\r\n const subParts = featureParent.getParent().subParts(false); // we don't need not visible subParts on the materials page\r\n const featureParentName = featureParent.partName.replace(/ /g,\"-\").toLowerCase();\r\n nextSubPartIndex = subParts.findIndex(subPartItem => {\r\n return subPartItem.part.partName.replace(/ /g,\"-\").toLowerCase() === featureParentName\r\n });\r\n }\r\n }\r\n\r\n if (!nextSubPartIndex || nextSubPartIndex < 0) {\r\n nextSubPartIndex = 0;\r\n }\r\n\r\n this.props.changeActivePartRelatedItemIndex(nextSubPartIndex);\r\n setCommonStuff();\r\n if (!window.location.href.includes('materials')) {\r\n if (layout.qtCategories && nextCatName) {\r\n changeQTRoutePath(nextCatName, nextSubPartIndex);\r\n } else if (layout.qtCategories && featureParent.qtCategoryName) {\r\n changeQTRoutePath(featureParent.qtCategoryName, nextSubPartIndex);\r\n } else {\r\n changeRoutePath(featureParent.getParent ? featureParent.getParent() : featureParent, nextSubPartIndex)\r\n }\r\n }\r\n if (scrollToRelatedFeatureId) {\r\n setTimeout(() => {\r\n const $scrollableDiv = $(\".selection-main__info-scrollable\");\r\n const scrollToArea = document.querySelector(\".prod-associated\");\r\n const scrollToDiv = document.querySelector('[data-feature-id=\"'+scrollToRelatedFeatureId+'\"]');\r\n if ($scrollableDiv && scrollToArea && scrollToDiv) {\r\n const scrollTop = scrollToArea.offsetTop + scrollToDiv.offsetTop;\r\n // console.log(\"scrolling to div\", scrollTop);\r\n $scrollableDiv.animate({scrollTop}, 800);\r\n }\r\n }, 0);\r\n }\r\n };\r\n\r\n}\r\n","import React from 'react';\r\nimport {connect} from 'react-redux';\r\nimport PropTypes from 'prop-types';\r\nimport {getEventPosition} from \"../../../../misc/helpers\";\r\n\r\nclass BodySwipable extends React.Component {\r\n\r\n static propTypes = {\r\n className: PropTypes.string,\r\n scrollableSelector: PropTypes.string.isRequired,\r\n children: PropTypes.any.isRequired,\r\n }\r\n\r\n static defaultProps = {\r\n className: \"\",\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n // this.swipableElement = null;\r\n this.scrollableElement = null;\r\n this._isMounted = false;\r\n this.currentScrollLeft = 0;\r\n this.x = 0;\r\n this.y = 0;\r\n this.delta = 0;\r\n this.swipeActive = false;\r\n this.detectedSwipeLeft = false;\r\n this.detectedSwipeRight = false;\r\n this.state = {\r\n swipeActive: false\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n this._isMounted = true;\r\n this.scrollableElement = this.getScrolllableElement();\r\n }\r\n componentWillUnmount() {\r\n this._isMounted = false;\r\n }\r\n getScrolllableElement = () => {\r\n return this.props.scrollableRef && this.props.scrollableRef.current\r\n ? this.props.scrollableRef.current\r\n : document.querySelector(this.props.scrollableSelector);\r\n }\r\n\r\n handleOnMouseDown = (event) => {\r\n const {x, y} = getEventPosition(event);\r\n setTimeout(() => {\r\n if (!this._isMounted) {\r\n return false\r\n }\r\n this.x = x;\r\n this.y = y;\r\n this.swipeActive = true;\r\n this.detectedSwipeLeft = false;\r\n this.detectedSwipeRight = false;\r\n this.setState({\r\n swipeActive: true\r\n });\r\n if (!this.scrollableElement) {\r\n this.scrollableElement = this.getScrolllableElement();\r\n }\r\n this.currentScrollLeft = this.scrollableElement.scrollLeft;\r\n }, 0);\r\n };\r\n\r\n handleOnMouseMove = (event) => {\r\n if (this.swipeActive) {\r\n const {x, y} = getEventPosition(event);\r\n const tX = parseFloat((x - this.x).toFixed(2));\r\n const tY = parseFloat((y - this.y).toFixed(2));\r\n // console.log('tX', tX);\r\n\r\n if (!this.detectedSwipeRight || !this.detectedSwipeLeft) {\r\n if (Math.abs(parseFloat(tX)) >= this.delta) {\r\n if (parseFloat(tX) > this.delta) {\r\n this.detectedSwipeRight = true;\r\n } else if (parseFloat(tX) < -this.delta) {\r\n this.detectedSwipeLeft = true;\r\n }\r\n }\r\n }\r\n\r\n if ((this.detectedSwipeLeft || this.detectedSwipeRight) && Math.abs(tX) > Math.abs(tY)) {\r\n // console.log(\"this.detectedSwipeLeft\", this.detectedSwipeLeft);\r\n // console.log(\"this.detectedSwipeRight\", this.detectedSwipeRight);\r\n // console.log('Math.abs(tX)', Math.abs(tX));\r\n const scrollLeft = this.detectedSwipeLeft\r\n ? this.currentScrollLeft + Math.abs(tX)\r\n : this.currentScrollLeft - Math.abs(tX);\r\n // this.$scrollableElement.animate({scrollLeft}, 500);\r\n this.scrollableElement.scrollLeft = scrollLeft;\r\n }\r\n }\r\n };\r\n\r\n handleOnMouseUp = () => {\r\n setTimeout(() => {\r\n if (!this._isMounted) {\r\n return false\r\n }\r\n this.x = 0;\r\n this.y = 0;\r\n this.swipeActive = false;\r\n this.detectedSwipeLeft = false;\r\n this.detectedSwipeRight = false;\r\n this.setState({\r\n swipeActive: false\r\n })\r\n }, 0)\r\n };\r\n\r\n render() {\r\n // const disallowSwipe = this.$scrollableElement && this.$scrollableElement[0] &&\r\n // (this.$scrollableElement[0].scrollWidth < this.$scrollableElement[0].clientWidth);\r\n if (this.props.isMobile) {\r\n return
    {this.props.children}
    \r\n }\r\n return (\r\n this.swipableElement = node}\r\n className={this.props.className + \" swipable\" + (this.state.swipeActive ? \" swipable--active\" : \"\")}\r\n onMouseDown={this.handleOnMouseDown}\r\n onMouseMove={this.handleOnMouseMove}\r\n onMouseLeave={this.handleOnMouseUp}\r\n onMouseUp={this.handleOnMouseUp}>\r\n {this.props.children}\r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n navigationLoadingActive: store.navigationState.navigationLoadingActive,\r\n isMobile: store.serverState.isMobile,\r\n }\r\n};\r\n\r\nconst mapDispatchToProps = {};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(BodySwipable);\r\n","import React, {useEffect, useState} from \"react\"\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport {getImagePromiseFromLayout} from \"../../misc/getCanvasImageFromLayout\";\r\nimport LoadingSpinner from \"../ui/loadingSpinner\";\r\nimport {useIsMounted} from \"../../misc/helperHooks\";\r\nimport {createFakeLayout} from \"../appLayout\";\r\n\r\nconst LayoutNavigationItem = (props) => {\r\n\r\n const {keyType, layout, handleLayoutItemClick, isMobile, imageOnly} = props;\r\n const type = layout.layoutTypes[keyType];\r\n const [thumbnailUrl, setThumbnailUrl] = useState(\r\n layout.layoutThumbnails && layout.layoutThumbnails[keyType] ? layout.layoutThumbnails[keyType] : \"\"\r\n );\r\n const isMounted = useIsMounted();\r\n\r\n useEffect(() => {\r\n if (!thumbnailUrl) {\r\n const getLayoutThumbnail = async () => {\r\n const fakeLayout = layout.type === type ? layout : createFakeLayout(layout, keyType, layout.scene);\r\n if (layout.type !== type) {\r\n const currentState = layout.getActiveFeaturesAsObject(true, false, true); // get current selected features\r\n await fakeLayout.selectLayout(type, layout.type, currentState, layout.scene, null, true);\r\n }\r\n getImagePromiseFromLayout(fakeLayout)\r\n .then(response => {\r\n // console.log(\"response\", response);\r\n if (isMounted()) {\r\n setThumbnailUrl(response);\r\n }\r\n })\r\n\r\n }\r\n getLayoutThumbnail();\r\n }\r\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n if (imageOnly) {\r\n return \"item.type\"/\r\n }\r\n\r\n if (isMobile) {\r\n const layoutItemWidth = (window.innerWidth / 4 - 10);\r\n const persentageOfWidth = layoutItemWidth * 100 / 720;\r\n const height = 405 * persentageOfWidth / 100;\r\n\r\n return (\r\n
  • handleLayoutItemClick(type)}\r\n >\r\n
    \r\n {thumbnailUrl ? \"item.type\"/ : }\r\n
    \r\n
  • \r\n )\r\n }\r\n\r\n return (\r\n
  • handleLayoutItemClick ? handleLayoutItemClick(type) : null}\r\n style={{backgroundImage: `url(${thumbnailUrl})`}}>\r\n {thumbnailUrl ? null : }\r\n
  • \r\n );\r\n}\r\n\r\nLayoutNavigationItem.propTypes = {\r\n keyType: PropTypes.string.isRequired,\r\n layout: PropTypes.object.isRequired,\r\n handleLayoutItemClick: PropTypes.func,\r\n isMobile: PropTypes.bool,\r\n imageOnly: PropTypes.bool,\r\n}\r\n\r\nexport default LayoutNavigationItem\r\n","import React, {Component} from 'react';\r\nimport {connect} from \"react-redux\";\r\nimport PropTypes from 'prop-types';\r\nimport $ from \"jquery\";\r\nimport {\r\n // FacebookShareButton,\r\n TwitterShareButton,\r\n // PinterestShareButton,\r\n} from 'react-share';\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport ActionTypes from \"../../misc/actionTypes\";\r\nimport Analytics from './../../analytics';\r\nimport UserLoginButton from './../ui/userLoginButton';\r\nimport {shareImageRebath, shareImage} from \"../bvComponent/core/assets\";\r\nimport SaveButton from \"./saveButton\";\r\nimport {toggleUserPopup} from \"../../actions/actionFunctions\";\r\nimport Config from \"../../config\";\r\n\r\nexport class ShareButton extends Component {\r\n\r\n static propTypes = {\r\n renderList: PropTypes.bool\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n shareListOpened: false,\r\n };\r\n this.clickShareAfterLogin = null;\r\n this.elements = {\r\n email: React.createRef(),\r\n facebook: React.createRef(),\r\n twitter: React.createRef(),\r\n pinterest: React.createRef(),\r\n }\r\n }\r\n\r\n componentDidMount() {\r\n $(document).on(ActionTypes.USER_IS_LOGGED_IN, async () => { // click on current active item after unlock\r\n if (this.clickShareAfterLogin) {\r\n console.log('this.clickShareAfterLogin', this.clickShareAfterLogin);\r\n const shareButton = this.elements[this.clickShareAfterLogin];\r\n if (shareButton) {\r\n shareButton.current.click();\r\n }\r\n this.clickShareAfterLogin = null;\r\n }\r\n });\r\n $(window).on(ActionTypes.USER_POPUP_CLOSED, () => { // reset saved\r\n if (this.clickShareAfterLogin) {\r\n this.clickShareAfterLogin = null;\r\n }\r\n });\r\n }\r\n\r\n componentWillReceiveProps(nextProps) {\r\n if (nextProps.visualizerTutorialStep === 3 && this.props.visualizerTutorialStep === 2) {\r\n this.toggleShareList();\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n $(document).off(ActionTypes.USER_IS_LOGGED_IN);\r\n $(window).off(ActionTypes.USER_POPUP_CLOSED);\r\n }\r\n\r\n renderImage = () => {\r\n // const canvas = document.getElementById(this.props.canvasId);\r\n // const imageUrl = canvas.toDataURL();\r\n const imageUrl = this.props.fabricatorData.isRebath\r\n ? encodeURIComponent(shareImageRebath)\r\n : encodeURIComponent(shareImage[document.kvConfig.visualizerType]);\r\n Analytics.sendClickEvent('share-button-pinterest');\r\n window.open(`//pinterest.com/pin/create/button/?url=${encodeURIComponent(this.props.shareUrl)}&media=${imageUrl}`, '_blank')\r\n };\r\n\r\n handleWrapperBlur = (e) => {\r\n if (!e.target.closest('.share-list__item .mobilebutton') && !e.target.closest('.share') && !this.clickShareAfterLogin) {\r\n this.toggleShareList();\r\n }\r\n };\r\n\r\n toggleShareList = () => {\r\n Analytics.sendClickEvent(this.state.shareListOpened ? 'share-list-toggle-closed' : 'share-list-toggle-opened');\r\n this.setState({\r\n shareListOpened: !this.state.shareListOpened\r\n }, () => {\r\n if (this.state.shareListOpened) {\r\n document.addEventListener('click', this.handleWrapperBlur);\r\n } else {\r\n document.removeEventListener('click', this.handleWrapperBlur);\r\n }\r\n })\r\n };\r\n\r\n checkForLoggedIn = (e) => {\r\n Analytics.sendClickEvent('share-button-' + e.target.dataset.share);\r\n if (!UserLoginButton.handleLoginClick({...this.props})) {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n this.clickShareAfterLogin = e.target.closest(this.props.renderList ? \".menu-dropdown__list-item\" : \".mobilebutton\").dataset.share;\r\n return false;\r\n }\r\n return true;\r\n };\r\n\r\n faceBookButtonClick = (event) => {\r\n if (this.checkForLoggedIn(event)) {\r\n // const fbUrl = (Config.isMobile() || this.props.windowWidth < 991)\r\n // ? \"https://m.facebook.com/sharer/sharer.php?u=\"\r\n // : \"https://www.facebook.com/sharer/sharer.php?&p[url]=\";\r\n const fbUrl = \"https://facebook.com/sharer/sharer.php?u=\";\r\n const qfUrl = location.protocol + \"//\" + _.takeRight(window.location.hostname.split('.'), 2).join('.') + \"/url?u=\";\r\n const shareUrlSplitted = this.props.shareUrl.split(\".com\")\r\n if (Config.isDevMode()) {\r\n console.log(\"this.props.shareUrl\", this.props.shareUrl);\r\n console.log(\"shareUrlSplitted\", shareUrlSplitted);\r\n }\r\n window.open(\r\n fbUrl + qfUrl + shareUrlSplitted[0] + \".com\" + encodeURIComponent(shareUrlSplitted[1]),\r\n 'facebook-share-dialog',\r\n 'width=630,height=420'\r\n );\r\n\r\n // 'https://www.facebook.com/dialog/share?\\n' +\r\n // ' app_id=402959133605207&display=page&href='+this.props.shareUrl +\r\n // ' app_id=402959133605207&display=page&href=https%3A%2F%2Ffacebook.com%2Fdocs%2F&redirect_uri=https%3A%2F%2Fdevelopers.facebook.com%2Ftools%2Fexplorer',\r\n\r\n return false;\r\n }\r\n };\r\n\r\n getShareButtons = () => {\r\n const dashboardFramed = Config.isVisualizerManagement();\r\n const allPagesEnabled = !document.kvConfig.visualizerOnly;\r\n return (\r\n
      \r\n
    • \r\n \r\n email\r\n \r\n
    • \r\n
    • \r\n \r\n {/**/}\r\n {/**/}\r\n {/**/}\r\n
    • \r\n
    • \r\n \r\n
    • \r\n
    • \r\n \r\n \r\n \r\n
    • \r\n {this.props.windowWidth >= 991 || dashboardFramed\r\n || (this.props.fabricatorData.checkout && this.props.goToCart && allPagesEnabled) ? null : (\r\n
    • \r\n \r\n
    • \r\n )}\r\n {/*
    • */}\r\n {/**/}\r\n {/*
    • */}\r\n
    \r\n )\r\n };\r\n\r\n getShareList = () => {\r\n return (\r\n
      \r\n
    • \r\n Email\r\n
    • \r\n
    • \r\n facebook\r\n
    • \r\n
    • \r\n pinterest\r\n
    • \r\n \r\n
    • \r\n Twitter\r\n
    • \r\n
      \r\n {/*
    • */}\r\n {/*Houzz
    • */}\r\n
    \r\n )\r\n };\r\n\r\n render() {\r\n return (\r\n
    \r\n \r\n {this.props.renderList ? this.getShareList() : this.getShareButtons()}\r\n
    \r\n )\r\n }\r\n\r\n}\r\nconst mapStateToProps = (store) => ({\r\n fabricatorData: store.fabricatorState,\r\n windowWidth: store.serverState.windowWidth,\r\n visualizerTutorialStep: store.tutorialState.visualizerTutorialStep,\r\n isPhoneNumberValidated: store.userState.isPhoneNumberValidated,\r\n userIsLoggedIn: store.userState.userIsLoggedIn,\r\n shareUrl: store.serverState.shareUrl,\r\n});\r\nexport default connect(mapStateToProps, {\r\n toggleUserPopup\r\n})(ShareButton);\r\n","import React from \"react\";\r\nimport {connect} from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\nimport {setMaterialsAgentTutorialFinished, showMaterialsAgentTutorial} from \"../../actions/tutorialFunctions\";\r\nimport WithPingPilotCheck from \"../look/hocs/withPingPilotCheck\";\r\n\r\nconst PingPilotButton = (props) => {\r\n\r\n const {design, showMaterialsAgentTutorial, setMaterialsAgentTutorialFinished, materialsAgentTutorialIsOpened,\r\n materialsAgentTutorialFinished, pingButton} = props;\r\n\r\n const pingButtonClick = () => {\r\n pingButton.click();\r\n if (materialsAgentTutorialIsOpened) {\r\n showMaterialsAgentTutorial(false);\r\n }\r\n if (!materialsAgentTutorialFinished) {\r\n setMaterialsAgentTutorialFinished(true);\r\n }\r\n }\r\n\r\n if (design === \"mainButton\") {\r\n return (\r\n \r\n )\r\n }\r\n\r\n return (\r\n \r\n \r\n
    \r\n ) : null}\r\n \r\n \r\n \r\n {/**/}\r\n
    \r\n ) : null}\r\n {this.props.fabricatorData.received ? (\r\n
    \r\n {hideLogo ? null : \"logo\"}\r\n
    \r\n ) : null}\r\n {this.props.fabricatorData.received && !this.props.hideTopButtons ? (\r\n
    \r\n {fabricatorSettings.enableSharing ? : null }\r\n \r\n \r\n {this.props.mobileNav && this.props.mobileNav.length\r\n ? \r\n : initialFlowIsRunning\r\n ? null\r\n : \r\n }\r\n {/*{(fabricatorSettings.leadCaptureOnQuote && !initialFlowIsRunning && !(document.kvConfig.isBackend && document.kvConfig.jobId && document.kvConfig.canSaveQuote)) ? : null}*/}\r\n {fabricatorSettings.showPricing && !initialFlowIsRunning ? : null}\r\n {/*{true*/}\r\n {/* ? */}\r\n {/* : null}*/}\r\n {showInstallations && isShoppingCartPage && !initialFlowIsRunning ? : null}\r\n {isShoppingCartPage && !initialFlowIsRunning ? : null}\r\n
    \r\n ) : null}\r\n
    \r\n
    \r\n
      \r\n {this.renderSubNav(this.props.mobileNav)}\r\n
    \r\n
    \r\n
    \r\n )\r\n }\r\n\r\n renderSubNav = (nav) => {\r\n var _nav = sortBy(nav, n => n.displayOrder);\r\n return _nav.map(n => (\r\n
  • \r\n {n.name}\r\n
  • \r\n ));\r\n }\r\n}\r\n\r\nconst DesktopHeaderWithRouter = withRouter(props => );\r\n\r\nconst mapStateToProps = (store) => {\r\n const {selectionState, cartState, instState} = store;\r\n return {\r\n selectionGroup: selectionState.selectionGroup,\r\n selectionFeatureInfo: selectionState.selectionFeatureInfo,\r\n selectionInfoQuantity: selectionState.selectionInfoQuantity,\r\n cartItems: cartState.cartItems,\r\n instList: instState.instList,\r\n mobileNav: store.navigationState.mobileNav,\r\n fabricatorData: store.fabricatorState,\r\n initialFlowStep: store.initialFlowState.initialFlowStep,\r\n showUnlockCalculations: store.unlockCalculationsState.showUnlockCalculations,\r\n unlockCalculationsStep: store.unlockCalculationsState.unlockCalculationsStep,\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, {\r\n toggleUserPopup,\r\n changeStateToQuote\r\n})(DesktopHeaderWithRouter);\r\n","import React, {useEffect, useState} from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport {setLookActiveFeature, updateNavigationCount} from \"../../../../../actions/lookFunctions\";\r\nimport {getFeatureOptions, getOptionStyles, navFeatureCLick} from \"../../lookFunctions\";\r\nimport {updateCanvasCount} from \"../../../../../actions/actionFunctions\";\r\nimport {allowCheckForCollection} from \"../../../grohe/groheNavigation/groheFunctions\";\r\nimport Config, {IS_PRODUCT_JOURNEY} from \"../../../../../config\";\r\n\r\nimport WithClickCount from \"../../../hocs/withClickCount\";\r\nimport Analytics, {LOOK_JOURNEY_ANALYTIC_EVENTS, PRODUCT_JOURNEY_ANALYTIC_EVENTS} from \"../../../../../analytics\";\r\nimport {enableRelatedFeature} from \"../../lookFunctions2\";\r\nimport PropTypes from \"prop-types\";\r\nimport {setWizardSelectedValues} from \"../../../../../actions/wizardFunctions\";\r\nimport {wizardGroupInterface} from \"../../../../../interfaces/wizardItemInterface\";\r\nimport {featureInterface} from \"../../../../../interfaces/featureInterface\";\r\nimport WithUpdateLookCartItem from \"../../../hocs/withUpdateLookCartItem\";\r\nimport {getColorFilterValue} from \"../../../../../misc/filtersFunctions\";\r\n\r\nconst LookFeatureOptions = (props) => {\r\n\r\n const {lookActiveFeature, filterGroups, setLookActiveFeature, lookActiveFeatureCustomName, updateCanvasCount,\r\n lookActiveFeatureCollection, lookActiveFeatureMatchingFeature, lookActiveFeatureMountType, lookActiveFeatureMountHoles,\r\n lookActiveFeatureLixilSubCategory, isWizard, wizardActiveStep, wizardGroup, setWizardSelectedValues, fabricatorData,\r\n updateNavigationCount, navigationCount, lookActiveFeaturePositionInList} = props;\r\n const [availableOptions, setAvailableOptions] = useState([]);\r\n\r\n const checkCollectionName = lookActiveFeature && !allowCheckForCollection(lookActiveFeature) ? \"\" : lookActiveFeatureCollection;\r\n\r\n useEffect(() => {\r\n if (fabricatorData.isEncore) {\r\n return\r\n }\r\n const colorOptions = getFeatureOptions(lookActiveFeature, filterGroups, \"Color\");\r\n setAvailableOptions(colorOptions || [])\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [lookActiveFeatureCustomName, checkCollectionName, lookActiveFeatureMatchingFeature,\r\n lookActiveFeatureMountType, lookActiveFeatureLixilSubCategory, lookActiveFeatureMountHoles, navigationCount]);\r\n\r\n if (!availableOptions.length || fabricatorData.isEncore) {\r\n return null\r\n }\r\n\r\n const activeFilterGroupValue = getColorFilterValue(lookActiveFeature, filterGroups)\r\n\r\n const optionsButtonClick = (option, maxClickCountReached, updateLookCartItem) => {\r\n\r\n const featureLabel = Analytics.getSkuForAnalytics(lookActiveFeature);\r\n const analyticsLabel = IS_PRODUCT_JOURNEY\r\n ? PRODUCT_JOURNEY_ANALYTIC_EVENTS.productFeatureOptions + featureLabel\r\n : LOOK_JOURNEY_ANALYTIC_EVENTS.lookFeatureOptions + featureLabel;\r\n Analytics.sendClickEvent(analyticsLabel);\r\n\r\n if (maxClickCountReached()) { // fabricator settings click lead capture\r\n return false;\r\n }\r\n\r\n if (Config.isDevMode()) {\r\n console.log(\"option.feature\", option.feature);\r\n }\r\n\r\n if (isWizard) {\r\n setWizardSelectedValues({\r\n [wizardActiveStep]: {\r\n wizardGroup,\r\n selectedFeature: option.feature,\r\n partId: option.feature.partId\r\n }\r\n });\r\n }\r\n\r\n setLookActiveFeature(option.feature, lookActiveFeaturePositionInList);\r\n navFeatureCLick(option.feature);\r\n enableRelatedFeature(option.feature);\r\n updateLookCartItem(option.feature);\r\n updateNavigationCount();\r\n updateCanvasCount();\r\n };\r\n\r\n return (\r\n
    \r\n \r\n :\r\n {/*{IS_PRODUCT_JOURNEY ? \":\" : null}*/}\r\n {/*{activeFilterGroupValue && (IS_PRODUCT_JOURNEY) ? (*/}\r\n \r\n {activeFilterGroupValue ? (activeFilterGroupValue.displayText || activeFilterGroupValue.value).replace(\"GROHE \", \"\") : null}\r\n \r\n {/*) : null}*/}\r\n \r\n {/*{activeFilterGroupValue && !IS_PRODUCT_JOURNEY ? (*/}\r\n {/* */}\r\n {/* ({activeFilterGroupValue.displayText.replace(\"GROHE \", \"\")})*/}\r\n {/* */}\r\n {/*) : null}*/}\r\n \r\n {(maxClickCountReached) => (\r\n \r\n {(updateLookCartItem) => (\r\n
      \r\n {availableOptions.map(option => {\r\n const isActive = activeFilterGroupValue && (option.colorValue.id === activeFilterGroupValue.id);\r\n const styles = getOptionStyles(option.colorValue);\r\n return (\r\n
    • optionsButtonClick(option, maxClickCountReached, updateLookCartItem)}\r\n style={styles}/>\r\n )\r\n })}\r\n
    \r\n )}\r\n
    \r\n )}\r\n
    \r\n
    \r\n\r\n )\r\n};\r\n\r\nLookFeatureOptions.propTypes = {\r\n isWizard: PropTypes.bool,\r\n wizardGroup: PropTypes.shape(wizardGroupInterface),\r\n activeFeature: PropTypes.shape(featureInterface),\r\n}\r\n\r\nconst mapStateToProps = (store, ownProps) => {\r\n const {navigationCount, lookActiveFeaturePositionInList} = store.lookState;\r\n const storeActiveFeature = store.lookState.lookActiveFeature;\r\n const {filterGroups} = store.filterState;\r\n const {wizardActiveStep} = store.wizardState;\r\n const lookActiveFeature = ownProps.activeFeature || storeActiveFeature;\r\n const fabricatorData = store.fabricatorState;\r\n\r\n return {\r\n lookActiveFeature,\r\n lookActiveFeaturePositionInList,\r\n filterGroups,\r\n wizardActiveStep,\r\n lookActiveFeatureCustomName: lookActiveFeature ? lookActiveFeature.getMatchingOptionsName() : null,\r\n lookActiveFeatureMountHoles: lookActiveFeature && lookActiveFeature.partId === \"vanity_sink\"\r\n && Array.isArray(lookActiveFeature.dbFeature.metaData[\"MountHoles\"])\r\n ? lookActiveFeature.dbFeature.metaData[\"MountHoles\"].join(\",\") : null,\r\n lookActiveFeatureLixilSubCategory: lookActiveFeature ? lookActiveFeature.dbFeature.lixilProductSubCategory : null,\r\n lookActiveFeatureMatchingFeature: lookActiveFeature && Array.isArray(lookActiveFeature.dbFeature.metaData[\"MatchingFeature\"])\r\n ? lookActiveFeature.dbFeature.metaData[\"MatchingFeature\"].join(\",\")\r\n : null,\r\n lookActiveFeatureMountType: lookActiveFeature && Array.isArray(lookActiveFeature.dbFeature.metaData[\"MountType\"])\r\n ? lookActiveFeature.dbFeature.metaData[\"MountType\"].join(\",\")\r\n : null,\r\n lookActiveFeatureCollection: lookActiveFeature ? lookActiveFeature.getCollectionName(filterGroups) : null,\r\n navigationCount, // to update options after all features received\r\n fabricatorData,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setLookActiveFeature,\r\n updateCanvasCount,\r\n setWizardSelectedValues,\r\n updateNavigationCount,\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(LookFeatureOptions)\r\n","import React, {Fragment} from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport GroheFeatureOptionsType from \"./groheFeatureOptionsType\";\r\nimport {VANITY_TYPES} from \"../../../core/constants\";\r\nimport GroheFeatureOptionsShelfSide from \"./groheFeatureOptionsShelfSide\";\r\nimport GroheFeatureOptionsSide from \"./groheFeatureOptionsSide\";\r\nimport GroheFeatureOptionsShowerPan from \"./groheFeatureOptionsShowerPan\";\r\nimport BacksplashSelect from \"../../../../selectionWindow/backsplashSelect\";\r\nimport {wizardGroupInterface} from \"../../../../../interfaces/wizardItemInterface\";\r\nimport {setWizardSelectedValues} from \"../../../../../actions/wizardFunctions\";\r\nimport GroheFeatureOptionsCabinetSide from \"./groheFeatureOptionsCabinetSide\";\r\nimport {featureInterface} from \"../../../../../interfaces/featureInterface\";\r\nimport GroheFeatureOptionsBodySpray from \"./groheFeatureOptionsBodySpray\";\r\nimport WithUpdateLookCartItem from \"../../../hocs/withUpdateLookCartItem\";\r\nimport GroheFeatureOptionsSlatWall from \"./groheFeatureOptionsSlatWall\";\r\n\r\nconst GroheFeatureOptions = (props) => {\r\n\r\n const {lookActiveFeature, isWizard, wizardGroup, setWizardSelectedValues, wizardActiveStep, isLixil,\r\n groheActiveFeatureQuantity, updateLookCartItem} = props;\r\n\r\n if (!lookActiveFeature) {\r\n return null\r\n }\r\n\r\n const wizardOptionClick = (optionFeature) => {\r\n if (!isWizard || !optionFeature) {\r\n return\r\n }\r\n setWizardSelectedValues({\r\n [wizardActiveStep]: {\r\n wizardGroup,\r\n selectedFeature: optionFeature,\r\n partId: optionFeature.partId,\r\n quantity: groheActiveFeatureQuantity,\r\n }\r\n });\r\n updateLookCartItem();\r\n }\r\n\r\n return (\r\n \r\n \r\n {lookActiveFeature.partId === \"vanity_cabinet\" && !(isLixil && isWizard) ? : null}\r\n \r\n {Object.keys(VANITY_TYPES).includes(lookActiveFeature.partId) ? : null}\r\n {lookActiveFeature.partId === \"vanity_sink\" && !(isLixil && isWizard) ? : null}\r\n {lookActiveFeature.partId === \"corner_shelf\" || (lookActiveFeature.partId === \"body_spray\" && !isWizard)\r\n ? \r\n : null}\r\n {lookActiveFeature.partId === \"shower_pan_combo\" ? : null}\r\n {/*{lookActiveFeature.partId === \"shower_head\" ? : null}*/}\r\n {lookActiveFeature.partId === \"backsplash\" ? : null}\r\n {lookActiveFeature.partId === \"body_spray\" && isWizard\r\n ? \r\n : null}\r\n {lookActiveFeature.partId === \"slat_wall\"\r\n ? \r\n : null}\r\n \r\n )\r\n};\r\n\r\nGroheFeatureOptions.propTypes = {\r\n isWizard: PropTypes.bool,\r\n wizardGroup: PropTypes.shape(wizardGroupInterface),\r\n activeFeature: PropTypes.shape(featureInterface),\r\n}\r\n\r\nconst mapStateToProps = (store, ownProps) => {\r\n const {lookActiveFeature} = store.lookState;\r\n const {wizardActiveStep} = store.wizardState;\r\n const {isLixil} = store.fabricatorState;\r\n const {groheActiveFeatureQuantity} = store.groheState;\r\n\r\n return {\r\n lookActiveFeature: ownProps.activeFeature || lookActiveFeature,\r\n wizardActiveStep,\r\n isLixil,\r\n groheActiveFeatureQuantity,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setWizardSelectedValues,\r\n}\r\n\r\nexport default (\r\n connect(mapStateToProps, mapDispatchToProps)((props) => {\r\n return (\r\n \r\n {(updateLookCartItem) => }\r\n \r\n )\r\n })\r\n)\r\n","'use strict';\r\n\r\nObject.defineProperty(exports, \"__esModule\", {\r\n value: true\r\n});\r\nexports.default = exports.LoadingBar = exports.TERMINATING_ANIMATION_DURATION = exports.ANIMATION_DURATION = exports.PROGRESS_INCREASE = exports.MAX_PROGRESS = exports.UPDATE_TIME = undefined;\r\n\r\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\r\n\r\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\r\n\r\nvar _react = require('react');\r\n\r\nvar _react2 = _interopRequireDefault(_react);\r\n\r\nvar _reactLifecyclesCompat = require('react-lifecycles-compat');\r\n\r\nvar _propTypes = require('prop-types');\r\n\r\nvar _reactRedux = require('react-redux');\r\n\r\nvar _loading_bar_ducks = require('./loading_bar_ducks');\r\n\r\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\r\n\r\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\r\n\r\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\r\n\r\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\r\n\r\nvar UPDATE_TIME = exports.UPDATE_TIME = 200;\r\nvar MAX_PROGRESS = exports.MAX_PROGRESS = 100;\r\nvar PROGRESS_INCREASE = exports.PROGRESS_INCREASE = 3;\r\nvar ANIMATION_DURATION = exports.ANIMATION_DURATION = UPDATE_TIME * 4;\r\nvar TERMINATING_ANIMATION_DURATION = exports.TERMINATING_ANIMATION_DURATION = UPDATE_TIME / 2;\r\n\r\nvar initialState = {\r\n percent: 0,\r\n status: 'hidden'\r\n};\r\n\r\nvar LoadingBar = function (_Component) {\r\n _inherits(LoadingBar, _Component);\r\n\r\n function LoadingBar() {\r\n var _ref;\r\n\r\n var _temp, _this, _ret;\r\n\r\n _classCallCheck(this, LoadingBar);\r\n\r\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\r\n args[_key] = arguments[_key];\r\n }\r\n\r\n return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = LoadingBar.__proto__ || Object.getPrototypeOf(LoadingBar)).call.apply(_ref, [this].concat(args))), _this), _this.state = _extends({}, initialState), _this.reset = function () {\r\n _this.terminatingAnimationTimeoutId = null;\r\n _this.setState(initialState);\r\n }, _this.newPercent = function (percent, progressIncrease) {\r\n // Use cosine as a smoothing function\r\n // It could be any function to slow down progress near the ending 100%\r\n var smoothedProgressIncrease = progressIncrease * Math.cos(percent * (Math.PI / 2 / 100));\r\n\r\n return percent + smoothedProgressIncrease;\r\n }, _this.simulateProgress = function () {\r\n _this.setState(function (prevState, _ref2) {\r\n var maxProgress = _ref2.maxProgress,\r\n progressIncrease = _ref2.progressIncrease;\r\n var percent = prevState.percent;\r\n\r\n var newPercent = _this.newPercent(percent, progressIncrease);\r\n\r\n if (newPercent <= maxProgress) {\r\n percent = newPercent;\r\n }\r\n\r\n return { percent: percent };\r\n });\r\n }, _temp), _possibleConstructorReturn(_this, _ret);\r\n }\r\n\r\n _createClass(LoadingBar, [{\r\n key: 'componentDidMount',\r\n value: function componentDidMount() {\r\n if (this.state.status === 'starting') {\r\n this.start();\r\n }\r\n }\r\n }, {\r\n key: 'componentDidUpdate',\r\n value: function componentDidUpdate(prevProps, prevState) {\r\n if (prevState.status !== this.state.status) {\r\n if (this.state.status === 'starting') {\r\n this.start();\r\n }\r\n\r\n if (this.state.status === 'stopping') {\r\n this.stop();\r\n }\r\n }\r\n }\r\n }, {\r\n key: 'componentWillUnmount',\r\n value: function componentWillUnmount() {\r\n clearInterval(this.progressIntervalId);\r\n clearTimeout(this.terminatingAnimationTimeoutId);\r\n }\r\n }, {\r\n key: 'start',\r\n value: function start() {\r\n this.progressIntervalId = setInterval(this.simulateProgress, this.props.updateTime);\r\n this.setState({ status: 'running' });\r\n }\r\n }, {\r\n key: 'stop',\r\n value: function stop() {\r\n clearInterval(this.progressIntervalId);\r\n this.progressIntervalId = null;\r\n\r\n var terminatingAnimationDuration = this.isShown() || this.props.showFastActions ? TERMINATING_ANIMATION_DURATION : 0;\r\n\r\n this.terminatingAnimationTimeoutId = setTimeout(this.reset, terminatingAnimationDuration);\r\n\r\n this.setState({ percent: 100 });\r\n }\r\n }, {\r\n key: 'isShown',\r\n value: function isShown() {\r\n return this.state.percent > 0 && this.state.percent <= 100;\r\n }\r\n }, {\r\n key: 'buildStyle',\r\n value: function buildStyle() {\r\n var animationDuration = this.state.status === 'stopping' ? TERMINATING_ANIMATION_DURATION : ANIMATION_DURATION;\r\n\r\n var style = {\r\n opacity: '1',\r\n transform: 'scaleX(' + this.state.percent / 100 + ')',\r\n transformOrigin: 'left',\r\n transition: 'transform ' + animationDuration + 'ms linear',\r\n width: '100%',\r\n willChange: 'transform, opacity'\r\n\r\n // Use default styling if there's no CSS class applied\r\n };if (!this.props.className) {\r\n style.height = '3px';\r\n style.backgroundColor = 'red';\r\n style.position = 'absolute';\r\n }\r\n\r\n if (this.isShown()) {\r\n style.opacity = '1';\r\n } else {\r\n style.opacity = '0';\r\n }\r\n\r\n return _extends({}, style, this.props.style);\r\n }\r\n }, {\r\n key: 'render',\r\n value: function render() {\r\n if (this.state.status === 'hidden') {\r\n return _react2.default.createElement('div', null);\r\n } else if (this.props.renderComponent) {\r\n return this.props.renderComponent(Math.round(this.state.percent))\r\n }\r\n\r\n return _react2.default.createElement(\r\n 'div',\r\n { className: this.props.className },\r\n Math.round(this.state.percent)\r\n );\r\n }\r\n }], [{\r\n key: 'shouldStart',\r\n value: function shouldStart(props, state) {\r\n return props.loading > 0 && ['hidden', 'stopping'].indexOf(state.status) >= 0;\r\n }\r\n }, {\r\n key: 'shouldStop',\r\n value: function shouldStop(props, state) {\r\n return props.loading === 0 && ['starting', 'running'].indexOf(state.status) >= 0;\r\n }\r\n }, {\r\n key: 'getDerivedStateFromProps',\r\n value: function getDerivedStateFromProps(nextProps, prevState) {\r\n if (LoadingBar.shouldStart(nextProps, prevState)) {\r\n return { status: 'starting' };\r\n }\r\n\r\n if (LoadingBar.shouldStop(nextProps, prevState)) {\r\n return { status: 'stopping' };\r\n }\r\n\r\n return null;\r\n }\r\n }]);\r\n\r\n return LoadingBar;\r\n}(_react.Component);\r\n\r\nLoadingBar.propTypes = {\r\n className: _propTypes.string,\r\n loading: _propTypes.number,\r\n maxProgress: _propTypes.number,\r\n progressIncrease: _propTypes.number,\r\n showFastActions: _propTypes.bool,\r\n updateTime: _propTypes.number,\r\n scope: _propTypes.string,\r\n style: _propTypes.object,\r\n renderComponent: _propTypes.func\r\n};\r\nLoadingBar.defaultProps = {\r\n className: '',\r\n loading: 0,\r\n maxProgress: MAX_PROGRESS,\r\n progressIncrease: PROGRESS_INCREASE,\r\n showFastActions: false,\r\n style: {},\r\n updateTime: UPDATE_TIME,\r\n scope: _loading_bar_ducks.DEFAULT_SCOPE,\r\n renderComponent: null,\r\n};\r\n\r\n\r\nvar mapStateToProps = function mapStateToProps(state, ownProps) {\r\n return {\r\n loading: state.loadingBar[ownProps.scope || _loading_bar_ducks.DEFAULT_SCOPE]\r\n };\r\n};\r\n\r\n(0, _reactLifecyclesCompat.polyfill)(LoadingBar);\r\nvar ConnectedLoadingBar = (0, _reactRedux.connect)(mapStateToProps)(LoadingBar);\r\n\r\nexports.LoadingBar = LoadingBar;\r\nexports.default = ConnectedLoadingBar;\r\n","import React, {useContext} from \"react\";\r\nimport {Text, View} from '@react-pdf/renderer';\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport PrintDocumentInfoFabricator from \"./printDocumentInfoFabricator\";\r\nimport {PrintDocumentContext} from \"./printDocumentContext\";\r\n\r\nexport const getAddressFromObject = (userInfo) => {\r\n let displayAddress = \"\";\r\n [userInfo.city, userInfo.state, userInfo.postal].forEach(addressPart => { // 1) city 2) provence 3) postal\r\n if (addressPart) {\r\n if (displayAddress) {\r\n displayAddress += \", \"\r\n }\r\n displayAddress += addressPart\r\n }\r\n });\r\n return displayAddress\r\n}\r\n\r\nconst PrintDocumentInfo = (props) => {\r\n const {styles, userInfo, fabricatorData, assignQuotePopupCustomer, employeeSelected} = props;\r\n const customerName = assignQuotePopupCustomer\r\n ? assignQuotePopupCustomer.fullName\r\n : userInfo.firstName + (userInfo.lastName ? (\" \" + userInfo.lastName) : \"\")\r\n const customerEmail = assignQuotePopupCustomer ? assignQuotePopupCustomer.email : userInfo.email || \"\"\r\n const customerPhone = userInfo.phoneNumber\r\n ? userInfo.country && !userInfo.phoneNumber.includes(`+${userInfo.country.dialCode} `)\r\n ? `+${userInfo.country.dialCode} ${userInfo.phoneNumber}`\r\n : userInfo.phoneNumber\r\n : \"\";\r\n const customerAddress = getAddressFromObject(userInfo);\r\n const customerHasShippingAddress = userInfo.shipping && ([\"address1\", \"city\", \"postal\"].some(key => {\r\n return userInfo.shipping[key] && (userInfo[key] !== userInfo.shipping[key])\r\n }));\r\n let shippingAddress = \"\";\r\n if (customerHasShippingAddress) {\r\n shippingAddress = getAddressFromObject(userInfo.shipping);\r\n }\r\n const threeColumns = (employeeSelected || (customerHasShippingAddress && !fabricatorData.isCaesarStone))\r\n && !fabricatorData.isAmericanStandard;\r\n const printContext = useContext(PrintDocumentContext);\r\n\r\n return (\r\n \r\n \r\n {printContext.messages[\"receipt.mainInfo.customerInformation\"]}\r\n {customerName}\r\n {userInfo.address1 ? {userInfo.address1} : null}\r\n {customerAddress ? {customerAddress} : null}\r\n {customerEmail}\r\n {customerPhone}\r\n \r\n {threeColumns ? (\r\n \r\n {!fabricatorData.isCaesarStone && (shippingAddress || userInfo.shipping.address1)\r\n ? {printContext.messages[\"receipt.mainInfo.billingAddress\"]}\r\n : null}\r\n {!fabricatorData.isCaesarStone && userInfo.shipping.address1\r\n ? {userInfo.shipping.address1}\r\n : null}\r\n {!fabricatorData.isCaesarStone && shippingAddress\r\n ? {shippingAddress}\r\n : null}\r\n {employeeSelected ? (\r\n \r\n {printContext.messages[\"receipt.mainInfo.salesPerson\"]}\r\n \r\n ) : null}\r\n {employeeSelected ? {employeeSelected.fullName} : null}\r\n \r\n ) : null}\r\n \r\n \r\n )\r\n};\r\n\r\nPrintDocumentInfo.propTypes = {\r\n userInfo: PropTypes.object.isRequired,\r\n fabricatorData: PropTypes.object.isRequired,\r\n assignQuotePopupCustomer: PropTypes.object,\r\n styles: PropTypes.object.isRequired,\r\n};\r\n\r\nexport default PrintDocumentInfo\r\n","import React, {Fragment, useContext} from \"react\";\r\nimport {View, Text, Image} from \"@react-pdf/renderer\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport {\r\n detectComplexLaborCartItem,\r\n getPriceWithCurrency,\r\n getTotalPrice,\r\n toFixedFeatureCost,\r\n toFixedPrice\r\n} from \"../../../misc/helpers\";\r\nimport {PrintDocumentContext} from \"./printDocumentContext\";\r\nimport {getCartItemName, getFeatureUnit} from \"./printDocumentFunctions\";\r\nimport {cartItemInterface} from \"../../shoppingCart/cartItemInterface\";\r\nimport {getPriceWithIncluded, getShowPrice} from \"../../../misc/priceFunctions\";\r\nimport PrintDocumentBodyBundledCartItems from \"./printDocumentBodyBundledCartItems\";\r\nimport {SQFT_FEATURES} from \"../../sqft/constants\";\r\n\r\nconst PrintDocumentBodyCartItem = (props) => {\r\n const {styles, cartItem, fabricatorData, locale, cartItems, sqftSlabState, cartItemsThumbnails} = props;\r\n\r\n const fabricatorSettings = fabricatorData.settings;\r\n const isComplexMultipliedUsed = detectComplexLaborCartItem(cartItem) && getTotalPrice().multipliedCostUsed;\r\n //const shouldUseSlabPricing = cartItem.shouldUseSlabPricing; // calculate shouldUseSlabPricing per cItem:\r\n const shouldUseSlabPricing = cartItem.partId === SQFT_FEATURES.slabs && sqftSlabState.isSlabPricingEnabled; // calculate shouldUseSlabPricing globally\r\n const priceTotal = isComplexMultipliedUsed || cartItem.displayFakePrice === 0\r\n ? null\r\n : toFixedFeatureCost(cartItem.cartFeature, cartItem.quantity, cartItem.fromQtCategory, true, cartItem, shouldUseSlabPricing, cartItem.currentQuote);\r\n const printContext = useContext(PrintDocumentContext);\r\n\r\n const getFeatureQuantity = () => {\r\n return printContext.messages[\"receipt.content.featureQuantity\"] || \"\"\r\n };\r\n\r\n const getPrice = () => {\r\n const showPrice = getShowPrice(fabricatorData);\r\n if (!showPrice) {\r\n return null\r\n }\r\n return getPriceWithIncluded(priceTotal, cartItem.cartFeature, fabricatorData, printContext.messages)\r\n };\r\n\r\n const featurePrice = toFixedFeatureCost(cartItem.cartFeature, 1, cartItem.fromQtCategory, false, null, shouldUseSlabPricing, cartItem.currentQuote);\r\n const price = getPrice();\r\n const hideUnitPrice = (cartItem.partId === \"room\" && !featurePrice) || !price;\r\n const isMinimumCharge = cartItem.isMinimumCharge && !cartItem.isMinimumChargeItems;\r\n const displayFake = cartItem.displayFakeQuantity && (typeof cartItem.displayFakeQuantity === \"number\") && (cartItem.displayFakeQuantity > 0);\r\n\r\n const bundleProducts = cartItems ? cartItems.filter(cItem => {\r\n return cItem.bundleParentId && (cItem.bundleParentId === cartItem.id)\r\n }) : [];\r\n\r\n const withThumbnail = fabricatorData.receiptSettings && fabricatorData.receiptSettings.showThumbnailsAndDescriptions\r\n && cartItemsThumbnails\r\n && cartItemsThumbnails[cartItem.id];\r\n\r\n if (withThumbnail) {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {getCartItemName(cartItem.cartFeature, fabricatorData, printContext, locale)}\r\n \r\n {cartItem.cartFeature.dbFeature.sku && !fabricatorSettings.hideSku ? (\r\n \r\n {`${printContext.messages[\"receipt.content.featureSKU\"]}: ${cartItem.cartFeature.dbFeature.sku}`}\r\n \r\n ) : null}\r\n {cartItem.cartFeature.dbFeature.description ? (\r\n \r\n {cartItem.cartFeature.dbFeature.description}\r\n \r\n ) : null}\r\n \r\n {isMinimumCharge\r\n ? null\r\n : (\r\n \r\n {`${getFeatureQuantity()}: ${toFixedPrice(displayFake ? cartItem.displayFakeQuantity : cartItem.quantity)}`}\r\n \r\n )}\r\n \r\n {hideUnitPrice || isMinimumCharge\r\n ? null\r\n : `${getFeatureUnit(cartItem.cartFeature, fabricatorData, printContext, locale, cartItem.quantity)}: ${getPriceWithCurrency(fabricatorSettings, featurePrice, cartItem.cartFeature)}`}\r\n \r\n {price}\r\n \r\n {cartItem.noteText ? {cartItem.noteText} : null}\r\n \r\n \r\n {bundleProducts.length ? : null}\r\n \r\n )\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n {getCartItemName(cartItem.cartFeature, fabricatorData, printContext, locale)}\r\n \r\n \r\n {cartItem.cartFeature.dbFeature.sku && !fabricatorSettings.hideSku ? (\r\n \r\n {`${printContext.messages[\"receipt.content.featureSKU\"]}: ${cartItem.cartFeature.dbFeature.sku}`}\r\n \r\n ) : null}\r\n {isMinimumCharge\r\n ? null\r\n : (\r\n \r\n {`${getFeatureQuantity()}: ${toFixedPrice(displayFake ? cartItem.displayFakeQuantity : cartItem.quantity)}`}\r\n \r\n )}\r\n \r\n {hideUnitPrice || isMinimumCharge\r\n ? null\r\n : `${getFeatureUnit(cartItem.cartFeature, fabricatorData, printContext, locale, cartItem.quantity)}: ${getPriceWithCurrency(fabricatorSettings, featurePrice, cartItem.cartFeature)}`}\r\n \r\n {price}\r\n \r\n {cartItem.noteText ? {cartItem.noteText} : null}\r\n \r\n \r\n {bundleProducts.length ? : null}\r\n \r\n\r\n )\r\n};\r\n\r\nPrintDocumentBodyCartItem.propTypes = {\r\n cartItem: PropTypes.shape(cartItemInterface),\r\n fabricatorData: PropTypes.object.isRequired,\r\n locale: PropTypes.string.isRequired,\r\n styles: PropTypes.object.isRequired,\r\n};\r\n\r\nexport default PrintDocumentBodyCartItem\r\n\r\n","import PropTypes from \"prop-types\";\r\n\r\nexport const filterGroupInterface = {\r\n id: PropTypes.number.isRequired,\r\n name: PropTypes.string,\r\n type: PropTypes.string,\r\n values: PropTypes.array,\r\n visualType: PropTypes.string,\r\n}\r\n\r\nexport const filterValueInterface = {\r\n id: PropTypes.number.isRequired,\r\n additionalImages: PropTypes.oneOfType([PropTypes.string, PropTypes.array]),\r\n displayText: PropTypes.string,\r\n filterGroup_id: PropTypes.number,\r\n icon: PropTypes.string,\r\n lockedInWizard: PropTypes.bool,\r\n value: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,\r\n}\r\n\r\nexport const navigationFilterValueInterface = {\r\n filterId: PropTypes.number.isRequired,\r\n filterGroupId: PropTypes.number.isRequired,\r\n}\r\n","import EventManager from \"../../../store/sqftEventManager\";\r\nimport workspace from \"../../workspace\";\r\nimport config from \"../../../store/sqftConfig\";\r\nimport {getMousePositionOnField} from \"../../../../../helpers/sqftHelper\";\r\nimport {pnpolyArray} from \"../../../../../lib/pnpoly\";\r\n\r\nexport default class Movable {\r\n\r\n state = {\r\n hoveringOnlyShape: false,\r\n mouseDown: false,\r\n mouseDownWithChildren: false,\r\n mouseDownPosition: null,\r\n hovering: false,\r\n hoveringWithChildren: false,\r\n handlerHold: null\r\n };\r\n _posX;\r\n _posY;\r\n _width;\r\n _height;\r\n isResizedByPoint = false;\r\n priority;\r\n parent;\r\n grandParent;\r\n moveCallback = null;\r\n mouseUpCallback = null;\r\n mouseDownCallback = null;\r\n\r\n constructor(posX,\r\n posY,\r\n width,\r\n height,\r\n priority = EventManager.priorities.IMAGE,\r\n parent = null,\r\n grandParent = null,\r\n moveCallback = null,\r\n mouseUpCallback = null,\r\n mouseDownCallback = null\r\n ) {\r\n this.priority = priority;\r\n this.parent = parent;\r\n this.grandParent = grandParent;\r\n this.moveCallback = moveCallback;\r\n this.mouseUpCallback = mouseUpCallback;\r\n this.mouseDownCallback = mouseDownCallback;\r\n\r\n this.initEvents();\r\n this._posX = posX;\r\n this._posY = posY;\r\n this._width = width;\r\n this._height = height;\r\n }\r\n\r\n get posX() {\r\n return this._posX;\r\n }\r\n\r\n set posX(value) {\r\n this._posX = value;\r\n }\r\n\r\n get posY() {\r\n return this._posY;\r\n }\r\n\r\n set posY(value) {\r\n this._posY = value;\r\n }\r\n\r\n get width() {\r\n return this._width;\r\n }\r\n\r\n set width(value) {\r\n this._width = value;\r\n }\r\n\r\n get height() {\r\n return this._height;\r\n }\r\n\r\n set height(value) {\r\n this._height = value;\r\n }\r\n\r\n initEvents() {\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_MOVE,\r\n this.onMouseMove.bind(this),\r\n this,\r\n this.priority\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_DOWN,\r\n this.onMouseDown.bind(this),\r\n this,\r\n this.priority\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_UP,\r\n this.onMouseUp.bind(this),\r\n this,\r\n this.priority\r\n );\r\n }\r\n\r\n deregisterEvents() {\r\n EventManager.removeEvent(this);\r\n }\r\n\r\n reInitEvents = () => {\r\n this.initEvents();\r\n }\r\n\r\n onMouseMove(mousePos, e) {\r\n if (e.terminate && !this.state.mouseDown) {\r\n this.setHoveringOnlyShape(false);\r\n\r\n return this.setHovering(false);\r\n }\r\n\r\n if (this.state.mouseDown) {\r\n EventManager.setCursor('move', this, true);\r\n if (this.moveCallback) {\r\n this.moveCallback(mousePos, this);\r\n } else {\r\n this.movePosition(mousePos);\r\n }\r\n }\r\n\r\n if (this.isMouseOverArea(mousePos)) {\r\n this.setHovering(true);\r\n\r\n EventManager.setCursor('move', this);\r\n return this.state.mouseDown;\r\n }\r\n if (this.parent.points !== undefined) { // todo this should be children not points\r\n for (const point in this.parent.points) {\r\n if (this.parent.points.hasOwnProperty(point)) {\r\n if (this.parent.points[point].modelCorePoint.mixins.movable.state.hovering) {\r\n this.setHoveringWithChildren(true);\r\n\r\n return this.state.hoveringWithChildren\r\n }\r\n }\r\n }\r\n }\r\n\r\n this.setHovering(false);\r\n this.setHoveringWithChildren(false);\r\n EventManager.resetCursor(this);\r\n\r\n return false;\r\n }\r\n\r\n onMouseUp(mousePos) {\r\n EventManager.releaseStealLock(self);\r\n this.state.mouseDown = false;\r\n this.state.mouseDownPosition = null;\r\n if (this.mouseUpCallback) {\r\n this.mouseUpCallback(mousePos, this);\r\n }\r\n }\r\n\r\n onMouseDown(mousePos, e) {\r\n void e;\r\n if (this.isHovering()) {\r\n //if (EventManager.getCursor().indexOf(\"move\") >= 0) {\r\n this.state.mouseDown = true;\r\n this.state.mouseDownPosition = mousePos;\r\n //}\r\n if (this.mouseDownCallback) {\r\n this.mouseDownCallback(mousePos, this);\r\n }\r\n return true;\r\n }\r\n return false;\r\n }\r\n isHovering () { return this.state.hovering === true; }\r\n setHoveringOnlyShape(value) { this.state.hoveringOnlyShape = value; return value; }\r\n setHovering(value) { this.state.hovering = value; return value; }\r\n setHoveringWithChildren(value) { this.state.hoveringWithChildren = value; return value; }\r\n\r\n movePosition(mousePos) {\r\n let scale = workspace.getScale();\r\n let xDiff = (this.state.mouseDownPosition.x - mousePos.x) / scale;\r\n let yDiff = (this.state.mouseDownPosition.y - mousePos.y) / scale;\r\n\r\n this.state.mouseDownPosition.x = mousePos.x;\r\n this.state.mouseDownPosition.y = mousePos.y;\r\n\r\n //todo this should be outside of the class\r\n if (this.parent.params.isResizedByPoint) {\r\n // 0 point\r\n // this.grandParent.posX -= xDiff;\r\n // this.grandParent.posY -= yDiff;\r\n\r\n //3 point\r\n // this.grandParent.posX -= xDiff;\r\n // this.grandParent.mixin.movable.width += xDiff;\r\n // this.posX -= xDiff;\r\n\r\n //4 point\r\n if (this.grandParent.width - xDiff >= this.grandParent.design.minimumWidth) {\r\n this.grandParent.width -= xDiff;\r\n this.grandParent.mixin.movable.width -= xDiff;\r\n this.posX -= xDiff;\r\n\r\n // change p7 x cord\r\n // todo grandParent setter\r\n this.grandParent.points.p7.modelCorePoint.mixins.movable.posX -= xDiff;\r\n\r\n // update textarea width\r\n // todo get from the parent class\r\n\r\n let textarea = document.querySelector('.i-text');\r\n if (textarea) {\r\n let width = textarea.offsetWidth;\r\n width -= xDiff * 4;\r\n textarea.style.width = width + 'px';\r\n }\r\n }\r\n } else if (this.parent.params.isScaledByPoint) {\r\n // 7 point (scaled)\r\n if (this.grandParent.height - (xDiff + yDiff) / 2 >= this.grandParent.design.minimumHeight\r\n && this.grandParent.width - (xDiff + yDiff) / 2 >= this.grandParent.design.minimumWidth\r\n ) {\r\n this.grandParent.width -= (xDiff + yDiff) / 2;\r\n this.grandParent.height -= (xDiff + yDiff) / 2;\r\n this.grandParent.mixin.movable.width -= (xDiff + yDiff) / 2;\r\n this.grandParent.mixin.movable.height -= (xDiff + yDiff) / 2;\r\n\r\n this.posX -= (xDiff + yDiff) / 2;\r\n this.posY -= (xDiff + yDiff) / 2;\r\n\r\n //change point 4 x cord\r\n //todo grandParent setter\r\n this.grandParent.points.p4.modelCorePoint.mixins.movable.posX -= (xDiff + yDiff) / 2;\r\n }\r\n } else {\r\n this.posX -= xDiff;\r\n this.posY -= yDiff;\r\n }\r\n }\r\n\r\n isMouseOverArea (mousePos) {\r\n let offset = this.grandParent && this.grandParent.getPosition && this.grandParent.isLastParent !== true\r\n ? this.grandParent.getPosition()\r\n : {x: 0, y: 0};\r\n\r\n let pointsArray;\r\n\r\n if (this.parent.design !== undefined && this.parent.design.layout === \"resize\") { // centered cords for points\r\n pointsArray = [\r\n [this.posX + offset.x - this.parent.design.radius / 2, this.posY + offset.y - this.parent.design.radius / 2],\r\n [this.posX + offset.x + this.parent.design.radius / 2, this.posY + offset.y - this.parent.design.radius / 2],\r\n [this.posX + offset.x + this.parent.design.radius / 2, this.posY + offset.y + this.parent.design.radius / 2],\r\n [this.posX + offset.x - this.parent.design.radius / 2, this.posY + offset.y + this.parent.design.radius / 2],\r\n ];\r\n } else if (this.parent.params && this.parent.params.isCenteredByY) { // centered cords for points\r\n pointsArray = [\r\n [this.posX + offset.x, this.posY + offset.y - this.parent.design.radius / 2],\r\n [this.posX + this.width + offset.x, this.posY + offset.y - this.parent.design.radius / 2],\r\n [this.posX + this.width + offset.x, this.posY + this.height + offset.y - this.parent.design.radius / 2],\r\n [this.posX + offset.x, this.posY + this.height + offset.y - this.parent.design.radius / 2],\r\n ];\r\n } else if (this.parent.params && this.parent.params.isCentered) { // centered cords for points\r\n pointsArray = [\r\n [this.posX + offset.x - this.width / 2, this.posY + offset.y - this.height / 2],\r\n [this.posX + offset.x + this.width / 2, this.posY + offset.y - this.height / 2],\r\n [this.posX + offset.x + this.width / 2, this.posY + offset.y + this.height / 2],\r\n [this.posX + offset.x - this.width / 2, this.posY + offset.y + this.height / 2],\r\n ];\r\n } else {\r\n pointsArray = [\r\n [this.posX + offset.x, this.posY + offset.y],\r\n [this.posX + this.width + offset.x, this.posY + offset.y],\r\n [this.posX + this.width + offset.x, this.posY + this.height + offset.y],\r\n [this.posX + offset.x, this.posY + this.height + offset.y],\r\n ];\r\n }\r\n\r\n let posOnField = getMousePositionOnField(mousePos.x, mousePos.y);\r\n\r\n return pnpolyArray(pointsArray, posOnField);\r\n }\r\n\r\n isMouseOverAreaByMousePOs (mousePos) {\r\n let scale = config.scale;\r\n let pointsArray = [\r\n [this.posX, this.posY],\r\n [this.posX + this.width * scale, this.posY],\r\n [this.posX + this.width * scale, this.posY + this.height * scale],\r\n [this.posX, this.posY + this.height * scale],\r\n ];\r\n\r\n return pnpolyArray(pointsArray, mousePos);\r\n }\r\n}\r\n","import eventManager from \"../../store/sqftEventManager\";\r\nimport config from \"../../store/sqftConfig\";\r\nimport $ from \"jquery\";\r\n\r\nexport default class Cursor {\r\n cursorName = null;\r\n addedImages = [];\r\n\r\n registerEvents = () => {\r\n eventManager.addEvent(\r\n eventManager.events.RENDER,\r\n this.renderCursor,\r\n this,\r\n eventManager.priorities.OVERALL\r\n );\r\n eventManager.addEvent(\r\n eventManager.events.MOUSE_UP,\r\n this.onMouseUp,\r\n this,\r\n eventManager.priorities.OVERALL\r\n );\r\n };\r\n\r\n onMouseUp = () => {\r\n this.checkForRestoreCursor();\r\n };\r\n\r\n setCursorImage = (imgSrc) => {\r\n const alreadyAddedImage = this.addedImages.find(image => image.dataset.id === this.clickedEdgeButton.attr(\"data-id\"));\r\n if (alreadyAddedImage) {\r\n this.cursorImage = { image: alreadyAddedImage, width: alreadyAddedImage.width, height: alreadyAddedImage.height };\r\n eventManager.setCursor('edge-select', this, true);\r\n this.registerEvents();\r\n } else {\r\n this.addCursorImage(imgSrc);\r\n }\r\n };\r\n\r\n addCursorImage = (imgSrc) => {\r\n let item = this.clickedBackSplashButton, // remember it to restore after moving canvas cursor switch\r\n bounds = 18,\r\n imgWidth = bounds,\r\n imgHeight = bounds;\r\n void item;\r\n\r\n let domImg = document.createElement('img');\r\n domImg.crossOrigin = \"Anonymous\";\r\n domImg.dataset.name = \"cursor\";\r\n\r\n let $img = $(domImg);\r\n $img.css({\r\n position: 'absolute',\r\n width: '1px',\r\n height: '1px'\r\n });\r\n // $img.attr({\r\n // 'data-id': item.attr('data-id'),\r\n // 'data-name': item.attr('data-name').trim(),\r\n // 'data-name-metric': item.attr('data-name-metric').trim(),\r\n // });\r\n let imgOnLoad = () => {\r\n let bounds = 18, ratio;\r\n if (imgWidth > imgHeight) {\r\n ratio = imgHeight / imgWidth;\r\n imgWidth = bounds;\r\n imgHeight = bounds * ratio;\r\n } else {\r\n ratio = imgWidth / imgHeight;\r\n imgHeight = bounds;\r\n imgWidth = bounds * ratio;\r\n }\r\n eventManager.setCursor('edge-select', this, true);\r\n this.cursorImage = { image: domImg, width: imgWidth, height: imgHeight };\r\n this.registerEvents(); // only after image is load!\r\n };\r\n $img.on('load', imgOnLoad);\r\n $img.appendTo($('body'));\r\n\r\n config.highlight.type = 'backsplash';\r\n //todo\r\n $img.attr('src', imgSrc);\r\n\r\n // config.highlight.id = item.attr('data-id');\r\n };\r\n\r\n checkForRestoreCursor = () => {\r\n if (this.isWaitingToRestoreCursor) {\r\n this.isWaitingToRestoreCursor = false;\r\n eventManager.removeEvent(this, eventManager.events.MOUSE_UP); //remove mouse up, it will be added in setCursorImage\r\n\r\n //todo\r\n // this.setHighlighting();\r\n this.setCursorImage();\r\n }\r\n };\r\n\r\n renderCursor = function(ctx) {\r\n if(this.cursorImage.image && ($(window).width() > 768)) {\r\n let mPos = eventManager.LastKnownMousePos;\r\n if(mPos) {\r\n ctx.drawImage(this.cursorImage.image, mPos.x + 10, mPos.y + 10, 18, 18);\r\n }\r\n }\r\n };\r\n\r\n destroy = (protect, revertBackAfterMouseUp) => {\r\n if (revertBackAfterMouseUp) {\r\n //remove render only, but wait for mouse up to set cursor again\r\n //eventManager.removeEvent(this, eventManager.events.RENDER);\r\n\r\n //full remove event\r\n this.deregisterEvents();\r\n this.cursorImage = null;\r\n this.isWaitingToRestoreCursor = true;\r\n } else {\r\n this.deregisterEvents();\r\n this.cursorImage = null\r\n }\r\n this.hide();\r\n };\r\n\r\n hide = function(e) {\r\n if(e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n }\r\n //Menu.hideSideBarContent(); // hide sidebar menu\r\n };\r\n\r\n deregisterEvents = () => {\r\n eventManager.resetCursor(this);\r\n eventManager.removeEvent(this);\r\n config.highlight.lines = false;\r\n }\r\n}\r\n","import $ from 'jquery';\r\nimport _ from 'lodash';\r\n\r\nimport eventManager from \"../../store/sqftEventManager\";\r\nimport config from \"../../store/sqftConfig\";\r\nimport workspace from \"../workspace\";\r\nimport {inchesToMm} from \"../../../../helpers/sqftHelper\";\r\nimport SqftStore from \"../../store/sqftStore\";\r\nimport {iconplusPurple} from \"../../../../assetsSQFT\";\r\nimport sqftShapeManager from \"../../store/sqftShapeManager\";\r\n//import TranslatesProvider from \"./../../translatesProvider\";\r\n\r\nexport default new function() {\r\n //private variables\r\n var self = this,\r\n //cursorImage = null,\r\n elements = {\r\n navRadius: $('#nav_radius'),\r\n overlay: $('#radius-overlay'),\r\n arcButtons: $('.lightbox-option-rectangular[data-arc]'),\r\n angleButtons: $('.lightbox-option-rectangular[data-angle]'),\r\n designDefault: $('#design-default'),\r\n closeButton: $('#radius-overlay .lightbox-cancel-button'),\r\n cornerContainer: $('#corner'),\r\n radiusContainer: $('#radius'),\r\n measure: $('[data-measure]')\r\n },\r\n maxRadius = 18,\r\n corners = 60;\r\n\r\n this.clickedBackSplashButton = null;\r\n this.cursorImage = null;\r\n this.isWaitingToRestoreCursor = false;\r\n\r\n //public variables\r\n this.arcLength = 0;\r\n this.angle = 0;\r\n //private events\r\n\r\n this.angleButton_onClick = function() {\r\n self.deregisterEvents();\r\n SqftStore.radius.arcLength = 0;\r\n SqftStore.radius.angle = $(this).attr('data-angle');\r\n self.handleButtonClick($(this));\r\n $('.lightbox-option-selected').removeClass('lightbox-option-selected');\r\n $(this).addClass('lightbox-option-selected');\r\n };\r\n this.arcButton_onClick = function() {\r\n this.deregisterEvents();\r\n SqftStore.radius.angle = 0;\r\n SqftStore.radius.arcLength = $(this).attr('data-arc');\r\n self.handleButtonClick($(this));\r\n $('.lightbox-option-selected').removeClass('lightbox-option-selected');\r\n $(this).addClass('lightbox-option-selected');\r\n };\r\n\r\n this.handleButtonClick = function(item) {\r\n\r\n self.setHighlighting();\r\n self.clickedEdgeButton = item;\r\n self.setCursorImage();\r\n\r\n if (window.innerWidth < 991 && !config.tutorialIsRunning) {\r\n //Menu.hideSideBarContent(); // hide sidebar menu\r\n }\r\n\r\n // elements.overlay.hide();\r\n };\r\n\r\n this.deregisterEvents = function() {\r\n eventManager.resetCursor(self);\r\n eventManager.removeEvent(self);\r\n elements.navRadius.removeClass('steps-scope-config-button-selected');\r\n // QCDES-1139 fix\r\n //SqftStore.radius.arcLength = 0;\r\n //SqftStore.radius.angle = 0;\r\n config.highlight.points = false;\r\n };\r\n\r\n function createRadiusElements() {\r\n let html = '';\r\n for (let i = 1; i <= maxRadius; i++) {\r\n html +=\r\n ('
    \\n' +\r\n '
    \\n' +\r\n ' \\n' +\r\n '
    ' +\r\n ' '+ i +'\" ' +\r\n ' '+ TranslatesProvider.translate(\"sqft.navigation.radius.radiusItem\") + '' +\r\n '
    \\n' +\r\n '
    ');\r\n }\r\n elements.radiusContainer.html(html);\r\n elements.arcButtons = $('.lightbox-option-rectangular[data-arc]');\r\n }\r\n\r\n function createCornerElements() {\r\n let html = '';\r\n for (let i = 3; i <= corners; i += 3) {\r\n html += ('
    \\n' +\r\n '
    \\n' +\r\n ' \\n' +\r\n ' \\n' +\r\n '
    \\n' +\r\n '
    '+ i +'\"
    \\n' +\r\n '
    ');\r\n }\r\n elements.cornerContainer.html(html);\r\n elements.angleButtons = $('.lightbox-option-rectangular[data-angle]');\r\n }\r\n this.onMeasureUnitChange = () => {\r\n //nodes.buttons.radius\r\n elements.arcButtons.each(function () {\r\n switch(config.measureUnit) {\r\n case \"Metric\":\r\n $(this).find('[data-value=\"radius\"]').html(inchesToMm(+this.dataset.arc) + config.getMeasureUnitPostfix());\r\n break;\r\n case \"Imperial\":\r\n default:\r\n $(this).find('[data-value=\"radius\"]').html(+this.dataset.arc + config.getMeasureUnitPostfix());\r\n }\r\n });\r\n\r\n // nodes.buttons.corner\r\n elements.angleButtons.each(function () {\r\n switch(config.measureUnit) {\r\n case \"Metric\":\r\n $(this).find('[data-value=\"corner\"]').html(inchesToMm(+this.dataset.angle) + config.getMeasureUnitPostfix());\r\n break;\r\n case \"Imperial\":\r\n default:\r\n $(this).find('[data-value=\"corner\"]').html(+this.dataset.angle + config.getMeasureUnitPostfix());\r\n }\r\n });\r\n\r\n elements.measure.each(function () {\r\n switch(config.measureUnit) {\r\n case \"Metric\":\r\n $(this).html($(this).data('metric'));\r\n break;\r\n case \"Imperial\":\r\n default:\r\n $(this).html($(this).data('imperial'));\r\n }\r\n });\r\n };\r\n\r\n this.setCursorImage = function () {\r\n var item = self.clickedEdgeButton, // remember it to restore after moving canvas cursor switch\r\n bounds = 18,\r\n imgWidth = bounds,\r\n imgHeight = bounds;\r\n\r\n var domImg = document.createElement('img');\r\n domImg.crossOrigin = \"Anonymous\";\r\n\r\n var $img = $(domImg);\r\n $img.css({\r\n position: 'absolute',\r\n width: '1px',\r\n height: '1px'\r\n });\r\n $img.attr({\r\n 'data-id': item//.attr('data-id')\r\n });\r\n $img.on('load', function() {\r\n setImage(domImg);\r\n });\r\n $img.appendTo($('body'));\r\n $img.attr('src', iconplusPurple);\r\n\r\n function setImage(domImg) {\r\n var bounds = 18;\r\n let ratio;\r\n if(imgWidth > imgHeight) {\r\n ratio = imgHeight / imgWidth;\r\n imgWidth = bounds;\r\n imgHeight = bounds * ratio;\r\n } else {\r\n ratio = imgWidth / imgHeight;\r\n imgHeight = bounds;\r\n imgWidth = bounds * ratio;\r\n }\r\n eventManager.setCursor('edge-select', self, true);\r\n self.cursorImage = { image: domImg, width: imgWidth, height: imgHeight };\r\n self.registerEvents();\r\n }\r\n };\r\n\r\n this.setHighlighting = function () {\r\n eventManager.stealCursor(true); // remove all other cursors\r\n workspace.setAllowEdges(false); // removing sizing lines\r\n workspace.setAllowBumpoutEdges(false); // removing bumpout lines\r\n workspace.setAllowMiteredEdges(false); // removing mitered lines\r\n config.highlight.lines = false; // disable lines highlighting\r\n config.highlight.type = ''; // disable lines highlighting\r\n config.highlight.id = null; // disable lines highlighting\r\n };\r\n\r\n this.registerEvents = function() {\r\n eventManager.setCursor('radius-select', self, true);\r\n config.highlight.points = true;\r\n eventManager.addEvent(\r\n eventManager.events.RENDER,\r\n self.renderCursor,\r\n self,\r\n eventManager.priorities.OVERALL\r\n );\r\n eventManager.addEvent(\r\n eventManager.events.MOUSE_DOWN,\r\n self.onMouseDown,\r\n self,\r\n eventManager.priorities.OVERALL\r\n );\r\n eventManager.addEvent(\r\n eventManager.events.MOUSE_UP,\r\n self.onMouseUp,\r\n self,\r\n eventManager.priorities.OVERALL\r\n );\r\n };\r\n this.onMouseDown = function() {\r\n let hoverPoint = workspace.getHoverPoint();\r\n //let hoverShape = workspace.getHoverShape();\r\n let hoverMiteredPoint = workspace.getHoverMiteredPoint();\r\n\r\n //update hoverPoint from miteredHoverPoint\r\n if(hoverMiteredPoint) {\r\n let miteredOverlay = hoverMiteredPoint.getParent();\r\n if(\r\n miteredOverlay && miteredOverlay.line && miteredOverlay.line.to\r\n && (miteredOverlay.line.to.isOverPointField()\r\n || miteredOverlay.line.from.isOverPointField())\r\n ){\r\n hoverPoint = miteredOverlay.line.to.isOverPointField() || miteredOverlay.line.from.isOverPointField()\r\n }\r\n }\r\n\r\n if (hoverPoint) {\r\n return true; // return true; // block all mouse-down events // we need dragging workspace\r\n }\r\n };\r\n this.checkForRestoreCursor = function() {\r\n if (self.isWaitingToRestoreCursor) {\r\n self.isWaitingToRestoreCursor = false;\r\n eventManager.removeEvent(self, eventManager.events.MOUSE_UP); //remove mouse up, it will be added in setCursorImage\r\n self.setHighlighting();\r\n self.setCursorImage();\r\n }\r\n };\r\n this.onMouseUp = function(mousePos) {\r\n void mousePos;\r\n self.checkForRestoreCursor();\r\n\r\n let hoverPoint = workspace.getHoverPoint(),\r\n hoverShape = workspace.getHoverShape(),\r\n hoverSegmentCorner;\r\n\r\n //click on purple line\r\n if (hoverShape) {\r\n hoverSegmentCorner = hoverShape.getHoverSegmentCorner();\r\n if (hoverSegmentCorner) {\r\n hoverPoint = hoverSegmentCorner.line.to\r\n }\r\n }\r\n\r\n if (hoverPoint && !hoverPoint.angleIsChanged && hoverPoint.isFitSize()) {\r\n if (SqftStore.radius.arcLength) {\r\n hoverPoint.arcLength = SqftStore.radius.arcLength;\r\n hoverPoint.featureId = _.clone(SqftStore.radius.featureId);\r\n hoverPoint.angle = 0;\r\n\r\n } else if (SqftStore.radius.angle) {\r\n hoverPoint.angle = SqftStore.radius.angle;\r\n hoverPoint.featureId = _.clone(SqftStore.radius.featureId);\r\n hoverPoint.arcLength = 0;\r\n }\r\n //update mitered points\r\n sqftShapeManager.updateMinMaxMiteredPoints(hoverShape);\r\n //reset seam shape changes in the slab mode\r\n sqftShapeManager.resetShapeChangesInTheSlabMode(hoverShape);\r\n //update hoverMiteredPoint position\r\n let hoverMiteredPoint = workspace.getHoverMiteredPoint();\r\n if (hoverMiteredPoint) {\r\n hoverMiteredPoint.getParent().movePoint(0, 0, hoverMiteredPoint);\r\n hoverMiteredPoint.getParent().moveMeasurements(hoverMiteredPoint);\r\n //todo sqft-react\r\n //Menu.miteredController.updateInfo();\r\n }\r\n return false;\r\n } else if (hoverShape) {\r\n //Menu.openMenu();\r\n //return true; // if click on shape, block reseting cursor, because we still need it http://jira.mozidev.com/browse/QC-956\r\n }/* else {\r\n deregisterEvents();\r\n elements.designDefault.click();\r\n }*/\r\n\r\n };\r\n this.destroy = function(protect, revertBackAfterMouseUp) {\r\n if (revertBackAfterMouseUp) {\r\n eventManager.removeEvent(self, eventManager.events.RENDER); //remove render only, but wait for mouse up to set cursor again\r\n this.isWaitingToRestoreCursor = true;\r\n } else {\r\n this.deregisterEvents();\r\n }\r\n this.hide();\r\n };\r\n this.hide = function(e) {\r\n if(e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n }\r\n //Menu.hideSideBarContent(); // hide sidebar menu\r\n };\r\n\r\n //public functions\r\n this.init = function() {\r\n // elements.navRadius.click(navRadius_onClick);\r\n createRadiusElements();\r\n createCornerElements();\r\n\r\n elements.arcButtons.click(self.arcButton_onClick);\r\n elements.angleButtons.click(self.angleButton_onClick);\r\n };\r\n\r\n this.renderCursor = function(ctx) {\r\n // if((this.arcLength > 0) && ($(window).width() > 768)) {\r\n // var mPos = eventManager.LastKnownMousePos;\r\n // if(mPos) {\r\n // ctx.save();\r\n // ctx.font = \"18px \" + config.activeFontBold;\r\n // ctx.fillStyle = \"#B263A8\";\r\n // ctx.fillText(\"r\" + new Fraction(this.arcLength) + \"\\\"\", mPos.x + (12 * config.scale), mPos.y + 9);\r\n // ctx.restore();\r\n // }\r\n // }\r\n if(self.cursorImage && self.cursorImage.image && (this.arcLength > 0 || this.angle > 0) && ($(window).width() > 768)) {\r\n var mPos = eventManager.LastKnownMousePos;\r\n if(mPos) {\r\n ctx.drawImage(self.cursorImage.image, mPos.x + 10, mPos.y + 10, self.cursorImage.width, self.cursorImage.height);\r\n }\r\n }\r\n };\r\n};\r\n","import cloneDeep from \"lodash/cloneDeep\";\r\n\r\nimport EventManager from \"../../../store/sqftEventManager\";\r\nimport config from \"../../../store/sqftConfig\";\r\nimport {\r\n getPointDistance,\r\n measureDistanceToInches,\r\n getFontsize, getAngleBetweenTwoPoints, getParallelPoints, getPointField\r\n} from \"../../../../../helpers/sqftHelper\";\r\nimport {pnpolyArray} from \"../../../../../lib/pnpoly\";\r\nimport store from \"../../../../../../../store\";\r\nimport {setSQFTContextMenu} from \"../../../../../../../actions/sqftMenuFunctions\";\r\nimport {iconGreenClip} from \"../../../../../assetsSQFT\";\r\nimport sqftShape from \"../sqftShape\";\r\nimport {SIDEBAR_BUTTONS_MENU} from \"../../../../../constants\";\r\nimport {COLOR} from \"../../../store/colorThemes\";\r\n\r\nexport default function(initialState = {}) {\r\n let self = this,\r\n state = {\r\n ...{\r\n labelText: '',\r\n labelTextColor: '#3e3e3e',\r\n textWidth: 0,\r\n isHovered: false,\r\n imageSrc: iconGreenClip,\r\n lineOffset: 13,\r\n flagMargin: 2,\r\n partId: undefined,\r\n isTitle: false,\r\n midPoint: {\r\n x: 0,\r\n y: 0\r\n }\r\n },\r\n ...initialState\r\n },\r\n line = null,\r\n shape = null;\r\n\r\n const svgCache = {};\r\n\r\n function setLine(value) { line = value; }\r\n function setShape(value) { shape = value; }\r\n function getMidPoint(from, to) {\r\n return {\r\n x: from.x + (to.x - from.x)/2,\r\n y: from.y + (to.y - from.y)/2\r\n };\r\n }\r\n function onMouseMove(mousePos, e) {\r\n void e;\r\n const {isHovered, orientation} = isMouseOverText(mousePos);\r\n state.isHovered = isHovered;\r\n if (state.isHovered) {\r\n if (EventManager.getCursor().indexOf(\"move\") >= 0) {\r\n EventManager.stealCursor(true);\r\n EventManager.setCursor((orientation === \"horizontal\") ? \"text\" : \"text-vertical\", self);\r\n }\r\n } else {\r\n EventManager.resetCursor(self);\r\n }\r\n }\r\n function onMouseDown(mousePos, e) {\r\n if (state.isHovered) {\r\n const reduxState = store.getState();\r\n const activeButton = reduxState.sqftMenuState.activeButton;\r\n\r\n //Delete label\r\n if (activeButton !== SIDEBAR_BUTTONS_MENU.delete) {\r\n void e;\r\n window.lineInputFocused = false;\r\n EventManager.stealCursor();\r\n EventManager.resetCursor(self);\r\n\r\n store.dispatch(setSQFTContextMenu({isOpened: true, activeMenu: \"labels\", pos: mousePos, parent: shape}));\r\n }\r\n\r\n return true\r\n }\r\n }\r\n function isMouseOverText(mousePos) {\r\n const lineDirection = line.getLineDirection();\r\n let pointsArray = [];\r\n let lineOffset = [];\r\n if (lineDirection.orientation === \"horizontal\") {\r\n lineOffset = lineDirection.newDirection === \"west\" ? -state.lineOffset : state.lineOffset;\r\n pointsArray = [\r\n [state.midPoint.x - state.textWidth/2 - 10, state.midPoint.y - 15 + lineOffset],\r\n [state.midPoint.x + state.textWidth/2 + 10, state.midPoint.y - 15 + lineOffset],\r\n [state.midPoint.x + state.textWidth/2 + 10, state.midPoint.y + 10 + lineOffset],\r\n [state.midPoint.x - state.textWidth/2 - 10, state.midPoint.y + 10 + lineOffset],\r\n ]\r\n // pointsArray.forEach(p => {\r\n // var tempPoint = new point(p[0], p[1]);\r\n // tempPoint.init(line);\r\n // tempPoint.layout = 'white-circle';\r\n // debugger\r\n // })\r\n } else if (lineDirection.orientation === \"vertical\") {\r\n if (lineDirection.newDirection === \"south\") {\r\n pointsArray = [\r\n [state.midPoint.x + 40, state.midPoint.y - state.textWidth/2 - 10],\r\n [state.midPoint.x + 15, state.midPoint.y - state.textWidth/2 - 10],\r\n [state.midPoint.x + 15, state.midPoint.y + state.textWidth/2 - 5],\r\n [state.midPoint.x + 40, state.midPoint.y + state.textWidth/2 - 5],\r\n ];\r\n } else if (lineDirection.newDirection === \"north\") {\r\n pointsArray = [\r\n [state.midPoint.x - 40, state.midPoint.y - state.textWidth/2 - 10],\r\n [state.midPoint.x - 15, state.midPoint.y - state.textWidth/2 - 10],\r\n [state.midPoint.x - 15, state.midPoint.y + state.textWidth/2 - 5],\r\n [state.midPoint.x - 40, state.midPoint.y + state.textWidth/2 - 5],\r\n ];\r\n }\r\n } else {\r\n // todo rotation hover\r\n }\r\n return {isHovered: pnpolyArray(pointsArray, mousePos), orientation: lineDirection.orientation};\r\n }\r\n\r\n this.getState = () => { return state }\r\n this.isHovered = () => { return state.isHovered }\r\n this.destroy = function(protect) {\r\n if(!protect) {\r\n EventManager.removeEvent(self);\r\n }\r\n };\r\n this.getParent = () => {\r\n return line\r\n }\r\n this.setLabelText = (value) => {\r\n state.labelText = value;\r\n };\r\n this.setPartId = (value) => {\r\n state.partId = value;\r\n };\r\n this.import = function(data) {\r\n state = data.state;\r\n };\r\n this.export = function() {\r\n return { state: cloneDeep(state) }\r\n };\r\n this.init = function(line, text, partId) {\r\n setLine(line);\r\n //todo sqft-react\r\n setShape(line.getParent());\r\n void shape;\r\n\r\n this.setPartId(partId);\r\n this.setLabelText(text);\r\n this.initEvents(!state.isTitle);\r\n };\r\n this.initEvents = (editable = true) => {\r\n EventManager.addEvent(\r\n EventManager.events.RENDER,\r\n this.render,\r\n this,\r\n EventManager.priorities.SHAPE_LABEL\r\n );\r\n if (editable) {\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_MOVE,\r\n onMouseMove,\r\n this,\r\n EventManager.priorities.SHAPE_LABEL\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_DOWN,\r\n onMouseDown,\r\n this,\r\n EventManager.priorities.SHAPE_LABEL\r\n );\r\n }\r\n }\r\n this.deregisterEvents = () => {\r\n EventManager.removeEvent(this);\r\n };\r\n this.reInitEvents = () => {\r\n this.initEvents(!state.isTitle);\r\n };\r\n this.deregisterPartEvents = () => {\r\n EventManager.removeEvent(this);\r\n };\r\n this.reInitPartEvents = () => {\r\n this.initEvents(!state.isTitle);\r\n };\r\n this.getLineLength = function () {\r\n var distance = getPointDistance(line.from, line.to);\r\n return measureDistanceToInches(distance);\r\n };\r\n this.isIE = function() {\r\n return(/Trident/i).test(window.navigator.appVersion);\r\n };\r\n this.getSrc = function(img) {\r\n if(img) {\r\n let src = img.getAttribute('src');\r\n if(src) {\r\n return src;\r\n }\r\n src = img.getAttribute(\"style\");\r\n if(src) {\r\n return src.replace(/background-image: url\\(\"\\/api\\/SqFtCalc\\/GetImage\\?url=/g, \"\").replace(/\"\\);/g, \"\");\r\n }\r\n }\r\n return \"\";\r\n };\r\n\r\n this.renderImage = (ctx, x, y) => {\r\n if (state.isTitle) return;\r\n\r\n let scale = config.scale;\r\n let size = { width: 5, height: 5 };\r\n let posX = x - size.width * scale;\r\n let posY = y - size.height * scale;\r\n\r\n if (svgCache['iconGreenClip']) {\r\n let img = svgCache['iconGreenClip'];\r\n ctx.drawImage(img, posX, posY, size.width * scale, size.height * scale);\r\n } else {\r\n let img = new Image();\r\n let svg = document.getElementById('icon-label-flag');\r\n\r\n if (svg) {\r\n let xml = new XMLSerializer().serializeToString(svg);\r\n let svg64 = btoa(xml);\r\n\r\n img.src = 'data:image/svg+xml;base64,' + svg64;\r\n\r\n img.onload = () => {\r\n svgCache['iconGreenClip'] = img;\r\n ctx.drawImage(img, posX, posY, size.width * scale, size.height * scale);\r\n };\r\n\r\n img.onerror = () => {\r\n console.warn(\"Failed to load SVG image, using fallback.\");\r\n // ctx.fillStyle = '#FF0000'; // Фолбек в виде красного квадрата\r\n // ctx.fillRect(x - 10, y - 10, 20, 20);\r\n };\r\n }\r\n }\r\n };\r\n\r\n this.render = function(ctx) {\r\n let scale = config.scale,\r\n fontSize = getFontsize(),\r\n font = (fontSize).toString() + \"px \" + config.activeFontBold,\r\n lineDirection = line.getLineDirection(),\r\n offset = line.getOffset(),\r\n dString = state.labelText,\r\n midPoint = getMidPoint(line.from, line.to),\r\n mText,\r\n lineOffset = 0,\r\n xOffset = 0,\r\n marginTo = 0;\r\n\r\n ctx.beginPath();\r\n\r\n ctx.font = font;\r\n mText = ctx.measureText(dString);\r\n state.textWidth = Math.round(mText.width * 100) / 100;\r\n midPoint.y = midPoint.y * scale + offset.y;\r\n midPoint.x = midPoint.x * scale + offset.x;\r\n state.midPoint.x = midPoint.x;\r\n state.midPoint.y = midPoint.y;\r\n ctx.textAlign = \"center\";\r\n midPoint.y += fontSize / 2;\r\n\r\n ctx.beginPath();\r\n ctx.fillStyle = state.isHovered ? COLOR.red : state.labelTextColor;\r\n\r\n let moveFrom, moveTo;\r\n\r\n switch (lineDirection.orientation) {\r\n case \"horizontal\": {\r\n lineOffset = lineDirection.newDirection === \"west\" ? -state.lineOffset : state.lineOffset;\r\n ctx.wrapText(dString, midPoint.x, midPoint.y + lineOffset, mText, fontSize);\r\n this.renderImage(ctx,midPoint.x - mText.width / 2 - state.flagMargin, midPoint.y + lineOffset);\r\n break;\r\n }\r\n case \"vertical\": {\r\n if (lineDirection.newDirection === \"south\") {\r\n marginTo = (lineDirection.cornerMargins.fromBottom) ? marginTo + 9 : marginTo;\r\n } else if (lineDirection.newDirection === \"north\") {\r\n marginTo = (lineDirection.cornerMargins.fromTop) ? marginTo + 9 : marginTo;\r\n }\r\n ctx.save();\r\n ctx.translate(\r\n lineDirection.newDirection === \"south\" ? midPoint.x + xOffset : midPoint.x + xOffset,\r\n lineDirection.newDirection === \"south\" ? midPoint.y - 5 : midPoint.y - 10\r\n );\r\n ctx.rotate(lineDirection.newDirection === \"south\" ? Math.PI / 2 : -Math.PI / 2);\r\n lineOffset = lineDirection.newDirection === \"south\" ? state.lineOffset : state.lineOffset ;\r\n\r\n ctx.wrapText(dString, marginTo,lineOffset + fontSize, mText, fontSize);\r\n this.renderImage(ctx,marginTo - mText.width / 2, lineOffset + fontSize);\r\n break;\r\n }\r\n //todo\r\n case \"NORTHWEST\":\r\n case \"NORTHEAST\":\r\n case \"SOUTHWEST\":\r\n case \"SOUTHEAST\": {\r\n ctx.save();\r\n const mText = ctx.measureText(dString);\r\n const angle = getAngleBetweenTwoPoints(line.from, line.to);\r\n [moveFrom, moveTo] = getParallelPoints(line.from, line.to, 6);\r\n const midPoint = getMidPoint(moveFrom, moveTo);\r\n //todo not sure why shape here becomes null after clicking on eyeball\r\n if (!(shape instanceof(sqftShape))) {\r\n shape = line.getParent();\r\n }\r\n const midPointPointField = getPointField(midPoint.x, midPoint.y, shape);\r\n ctx.save();\r\n ctx.translate(\r\n midPointPointField.x,\r\n midPointPointField.y,\r\n );\r\n ctx.rotate(angle * (Math.PI / 180));\r\n\r\n ctx.wrapText(dString, 0, 0, mText, fontSize);\r\n this.renderImage(ctx,0 - mText.width / 2, 0);\r\n\r\n break;\r\n }\r\n default:\r\n break;\r\n }\r\n\r\n ctx.restore();\r\n };\r\n}\r\n","import * as uuid from \"uuid\";\r\n\r\nimport EventManager from \"../../store/sqftEventManager\";\r\nimport {FREE_DRAW_TYPE, SIDEBAR_BUTTONS_MENU, SIDEBAR_NAVIGATION_CABINET_BUTTONS} from \"../../../../constants\";\r\nimport RenderFreeDraw from \"../../helpers/renderFreeDraw\";\r\nimport {COLORS} from \"../../../../../../colorThemes\";\r\nimport NumberText from \"../workspace/text/numberText\";\r\nimport workspace from \"../workspace\";\r\nimport {getPointField} from \"../../../../helpers/sqftHelper\";\r\nimport eventManager from \"../../store/sqftEventManager\";\r\nimport store from \"../../../../../../store\";\r\nimport {getWallLockedPoint} from \"../../helpers/wallHelper\";\r\nimport {isPointInsidePolygon} from \"../../../../lib/pnpoly\";\r\nimport {getBordersOfTwoPoints, getLineBordersArrayV2} from \"../../helpers/lineHelper\";\r\nimport workspaceControllers from \"../../store/workspaceControllers\";\r\n\r\nexport default class Wall {\r\n dimensionToMouse = null;\r\n id;\r\n state = {\r\n addedPoints: [],\r\n dimensions: [],\r\n drawLineToMouse: false,\r\n lineThickness: 10,\r\n lineColor: COLORS.gray,\r\n outlineColor: COLORS.gray4,\r\n minLineLength: 15,\r\n drawType: FREE_DRAW_TYPE.wall,\r\n isHovering: false,\r\n mouseDown: false,\r\n mouseDownPosition: null,\r\n lockedAngleStep: 45,\r\n };\r\n editState = {\r\n editPoint: null,\r\n isInEditState: false,\r\n }\r\n\r\n getPoints() { return this.state.addedPoints }\r\n setEditMode(value) { this.editState.isInEditState = value}\r\n setEditPoint(point) { this.editState.editPoint = point}\r\n getOffset() { return workspace.getOffset() }\r\n getWallThickness() { return workspace.getOffset() }\r\n\r\n constructor(points, centerPoint, lockedAngleStep = 45) {\r\n this.id = uuid.v4();\r\n this.state.addedPoints = points\r\n this.state.centerPoint = centerPoint\r\n this.state.lockedAngleStep = lockedAngleStep\r\n this.initEvents();\r\n }\r\n\r\n initEvents() {\r\n EventManager.addEvent(\r\n EventManager.events.RENDER,\r\n this.render.bind(this),\r\n this,\r\n EventManager.priorities.WALL\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_DOWN,\r\n this.onMouseDown.bind(this),\r\n this,\r\n EventManager.priorities.OVERALL\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_MOVE,\r\n this.onMouseMove.bind(this),\r\n this,\r\n EventManager.priorities.SEGMENT\r\n );\r\n }\r\n\r\n destroy() {\r\n this.deregisterEvents();\r\n this.destroyPoints();\r\n }\r\n\r\n destroyPoints() {\r\n for (const addedPoints of this.state.addedPoints) {\r\n addedPoints.destroy()\r\n }\r\n }\r\n\r\n deregisterEvents() {\r\n eventManager.removeEvent(this);\r\n }\r\n\r\n editWall(point) {\r\n const reduxState = store.getState();\r\n const activeButton = reduxState.sqftMenuState.activeButton;\r\n if (activeButton === SIDEBAR_NAVIGATION_CABINET_BUTTONS.wall) {\r\n this.setEditMode(true);\r\n this.setEditPoint(point);\r\n }\r\n }\r\n\r\n disableEditingWall() {\r\n this.setEditMode(false);\r\n this.setEditPoint(null);\r\n }\r\n\r\n createDimensionToMouse() {\r\n this.dimensionToMouse = new NumberText(\r\n 0,\r\n {x: 0, y: 0},\r\n {shouldRenderFrameBorder: true, isLength: true},\r\n workspace,\r\n Function(),\r\n true\r\n );\r\n }\r\n\r\n onMouseDown(mousePos) {\r\n if (this.editState.editPoint && this.editState.isInEditState) {\r\n this.addPoint(mousePos);\r\n this.disableEditingWall();\r\n return true\r\n }\r\n if (this.state.isHovering) {\r\n const reduxState = store.getState();\r\n if (reduxState.sqftMenuState.activeButton === SIDEBAR_BUTTONS_MENU.delete) {\r\n workspaceControllers.walls.destroyResource(this)\r\n }\r\n }\r\n }\r\n\r\n onMouseMove(mousePos) {\r\n this.state.isHovering = this.isMouseOverWall(mousePos) || this.state.mouseDown;\r\n }\r\n\r\n isMouseOverWall(mousePos) {\r\n for (const addedPointKey in this.state.addedPoints) {\r\n const nextPoint = this.state.addedPoints[+addedPointKey +1];\r\n if (nextPoint) {\r\n const currentPoint = this.state.addedPoints[+addedPointKey];\r\n const lineFieldArray = getLineBordersArrayV2(currentPoint, nextPoint, this.state.lineThickness + this.state.lineThickness * 0.1);\r\n if (isPointInsidePolygon(mousePos, lineFieldArray)) {\r\n return true\r\n }\r\n }\r\n }\r\n return false\r\n }\r\n\r\n addPoint(mousePos) {\r\n const wallLockedPoint = getWallLockedPoint(this.editState.editPoint, mousePos, this.state.lockedAngleStep);\r\n if (this.state.addedPoints.length > 0) {\r\n //todo\r\n //this.addLineDimensions(point, mousePos);\r\n }\r\n if (this.editState.editPoint.id === this.state.addedPoints[0].id) {\r\n this.state.addedPoints.unshift(wallLockedPoint);\r\n } else {\r\n this.state.addedPoints.push(wallLockedPoint);\r\n }\r\n }\r\n\r\n getLines() {\r\n let lines = [];\r\n const points = this.getPoints();\r\n for (const pointIndex in points) {\r\n const len = points.length;\r\n const current = points[+pointIndex];\r\n //const previous = points[(pointIndex + len - 1) % len];\r\n const next = points[(pointIndex + 1) % len];\r\n let line = {\r\n from: current,\r\n to: next,\r\n getOffset: () => {\r\n return this.getOffset()\r\n }\r\n }\r\n lines.push(line);\r\n }\r\n\r\n return lines\r\n }\r\n\r\n getBordersOfWallLines() {\r\n let virtualLines = [];\r\n const points = this.getPoints();\r\n for (const addedPointKey in points) {\r\n const nextPoint = points[+addedPointKey +1];\r\n if (nextPoint) {\r\n const currentPoint = points[+addedPointKey];\r\n virtualLines.push(...getBordersOfTwoPoints(currentPoint, nextPoint, this.state.lineThickness / 2));\r\n }\r\n }\r\n return virtualLines\r\n }\r\n\r\n render(ctx) {\r\n ctx.save();\r\n this.renderLines(ctx);\r\n ctx.restore();\r\n //this.updateDimensionToMouse(ctx);\r\n if (this.editState.editPoint && this.editState.isInEditState) {\r\n RenderFreeDraw.drawLineFromPointV2ToMouse(ctx, this.editState.editPoint, true);\r\n }\r\n }\r\n\r\n renderLines(ctx) {\r\n const reduxState = store.getState();\r\n const activeButton = reduxState.sqftMenuState.activeButton;\r\n ctx.lineWidth = this.state.lineThickness + 2;\r\n ctx.strokeStyle = this.state.outlineColor;\r\n RenderFreeDraw.renderLinesBetweenPoints(ctx, this.state);\r\n\r\n ctx.lineWidth = this.state.lineThickness;\r\n ctx.strokeStyle = this.state.isHovering && activeButton === SIDEBAR_BUTTONS_MENU.delete\r\n ? COLORS.red\r\n : this.state.lineColor;\r\n RenderFreeDraw.renderLinesBetweenPoints(ctx, this.state);\r\n }\r\n\r\n renderDimensionToMouseFromPoint = (ctx, point) => {\r\n let posX = point.modelCorePoint.mixins.movable.posX;\r\n let posY = point.modelCorePoint.mixins.movable.posY;\r\n let pointField = getPointField(posX, posY);\r\n ctx.moveTo(pointField.x, pointField.y);\r\n\r\n const mPos = EventManager.LastKnownMousePos;\r\n ctx.lineTo(mPos.x, mPos.y);\r\n ctx.stroke();\r\n ctx.closePath();\r\n }\r\n}\r\n","import {getPointField} from \"../../../helpers/sqftHelper\";\r\nimport EventManager from \"../store/sqftEventManager\";\r\nimport {FREE_DRAW_TYPE, SIDEBAR_NAVIGATION_CABINET_BUTTONS, SIDEBAR_SHAPE_BUTTONS} from \"../../../constants\";\r\nimport store from \"../../../../../store\";\r\nimport {getLockPointPos} from \"./freeDrawHelper\";\r\n\r\nexport default class RenderFreeDraw {\r\n\r\n static drawLines = (ctx, state) => {\r\n for (let i = 0; i < state.addedPoints.length; i++) {\r\n if (state.addedPoints[i + 1] !== undefined) {\r\n let posX = state.addedPoints[i].modelCorePoint.mixins.movable.posX;\r\n let posY = state.addedPoints[i].modelCorePoint.mixins.movable.posY;\r\n let pointField = getPointField(posX, posY);\r\n\r\n posX = state.addedPoints[i + 1].modelCorePoint.mixins.movable.posX;\r\n posY = state.addedPoints[i + 1].modelCorePoint.mixins.movable.posY;\r\n let nextPointField = getPointField(posX, posY);\r\n // let pointField = state.addedPoints[i].getPointCords();\r\n // let nextPointField = state.addedPoints[i + 1].getPointCords();\r\n if (i === 0) {\r\n ctx.moveTo(pointField.x, pointField.y);\r\n }\r\n ctx.lineTo(nextPointField.x, nextPointField.y);\r\n }\r\n }\r\n }\r\n\r\n static drawLastLine = (ctx, state) => {\r\n let posX = state.addedPoints[0].modelCorePoint.mixins.movable.posX;\r\n let posY = state.addedPoints[0].modelCorePoint.mixins.movable.posY;\r\n let pointField = getPointField(posX, posY);\r\n\r\n ctx.lineTo(pointField.x, pointField.y);\r\n }\r\n\r\n static drawLineFromPointV2ToMouse = (ctx, pointV2, shouldUseLockedMode = false) => {\r\n const reduxState = store.getState();\r\n const isWallsLockMode = reduxState.sqftMenuState.isWallsLockMode;\r\n const activeButton = reduxState.sqftMenuState.activeButton;\r\n\r\n if ((shouldUseLockedMode && isWallsLockMode && activeButton === SIDEBAR_NAVIGATION_CABINET_BUTTONS.wall)\r\n || (shouldUseLockedMode && activeButton === SIDEBAR_SHAPE_BUTTONS.freeDraw)\r\n ) {\r\n RenderFreeDraw.drawLineFromPointV2ToMouseLocked(ctx, pointV2);\r\n } else {\r\n RenderFreeDraw.drawLineFromPointV2ToMouseFree(ctx, pointV2);\r\n }\r\n }\r\n\r\n static drawLineFromPointV2ToMouseFree = (ctx, pointV2) => {\r\n ctx.beginPath();\r\n let posX = pointV2.modelCorePoint.mixins.movable.posX;\r\n let posY = pointV2.modelCorePoint.mixins.movable.posY;\r\n let pointField = getPointField(posX, posY);\r\n ctx.moveTo(pointField.x, pointField.y);\r\n\r\n const mousePos = EventManager.LastKnownMousePos;\r\n ctx.lineTo(mousePos.x, mousePos.y);\r\n ctx.stroke();\r\n ctx.closePath();\r\n }\r\n\r\n static drawLineFromPointV2ToMouseLocked = (ctx, pointV2, lockedAngleStep = 45 ) => {\r\n const lockPointPos = getLockPointPos(pointV2, lockedAngleStep);\r\n\r\n ctx.beginPath();\r\n let posX = pointV2.modelCorePoint.mixins.movable.posX;\r\n let posY = pointV2.modelCorePoint.mixins.movable.posY;\r\n let pointField = getPointField(posX, posY);\r\n ctx.moveTo(pointField.x, pointField.y);\r\n\r\n ctx.lineTo(lockPointPos.x, lockPointPos.y);\r\n ctx.stroke();\r\n ctx.closePath();\r\n }\r\n\r\n // static renderCursor = (ctx) => {\r\n // if (RenderFreeDraw.cursorImage && this.cursorImage.image && (this.arcLength > 0 || this.angle > 0) && ($(window).width() > 768)) {\r\n // let mPos = EventManager.LastKnownMousePos;\r\n // if (mPos) {\r\n // ctx.drawImage(this.cursorImage.image, mPos.x + 10, mPos.y + 10, this.cursorImage.width, this.cursorImage.height);\r\n // }\r\n // }\r\n // };\r\n\r\n static renderLinesBetweenPoints = (ctx, state) => {\r\n ctx.beginPath();\r\n RenderFreeDraw.drawLines(ctx, state);\r\n ctx.stroke();\r\n // if (state.isDrawFinished) {\r\n // RenderFreeDraw.drawLastLine(ctx, state);\r\n // } else\r\n if (state.drawLineToMouse && state.addedPoints.length !== 0 ) {\r\n RenderFreeDraw.drawLineFromPointV2ToMouse(ctx, state.addedPoints[state.addedPoints.length -1], state.useLockedPoints)\r\n }\r\n };\r\n\r\n static render = (ctx, state) => {\r\n RenderFreeDraw.renderLines(ctx, state);\r\n //RenderFreeDraw.updateDimensionToMouse(ctx, state);\r\n };\r\n\r\n static renderLines = (ctx, state) => {\r\n //RenderFreeDraw.renderCursor(ctx);\r\n if (state.drawType === FREE_DRAW_TYPE.wall) {\r\n ctx.lineWidth = state.lineWidth + 2;\r\n ctx.strokeStyle = state.outlineColor;\r\n RenderFreeDraw.renderLinesBetweenPoints(ctx, state);\r\n }\r\n ctx.lineWidth = state.lineWidth;\r\n ctx.strokeStyle = state.lineColor;\r\n RenderFreeDraw.renderLinesBetweenPoints(ctx, state);\r\n };\r\n\r\n // static renderDimensionToMouse = (ctx, state) => {\r\n // if (state.dimensionToMouse.value > state.minLineLength) {\r\n // state.dimensionToMouse.pos.betweenPoints.pointFrom = state.addedPoints[state.addedPoints.length - 1]\r\n // state.dimensionToMouse.pos.betweenPoints.pointTo = getMousePositionOnField(\r\n // EventManager.LastKnownMousePos.x,\r\n // EventManager.LastKnownMousePos.y\r\n // );\r\n // //state.dimensionToMouse.render(ctx);\r\n // }\r\n // };\r\n}\r\n","import EventManager from \"../store/sqftEventManager\";\r\nimport store from \"../../../../../store\";\r\nimport PointV2, {CORE_POINT_LAYOUTS} from \"../core/shapes/pointV2\";\r\nimport workspace from \"../core/workspace\";\r\nimport sqftConfig from \"../store/sqftConfig\";\r\nimport {getLockPointPos} from \"./freeDrawHelper\";\r\nimport {getMousePositionOnField} from \"../../../helpers/sqftHelper\";\r\nimport workspaceControllers from \"../store/workspaceControllers\";\r\n\r\n/**\r\n * @param pos {{x: int, y: int}}\r\n * @return {PointV2}\r\n */\r\nexport const getWallPoint = (pos) => {\r\n let pointState = {\r\n priority: EventManager.priorities.BOX_POINT,\r\n movable: true,\r\n isCentered: true,\r\n isResizedByPoint: false,\r\n isScaledByPoint: false,\r\n isVisibleOnHover: true,\r\n moveCallback: (mousePos, movablePoint, xDiff, yDiff) => {\r\n void yDiff;\r\n const reduxState = store.getState();\r\n const isWallsUpMode = reduxState.sqftMenuState.isWallsUpMode;\r\n if (!isWallsUpMode) {\r\n movablePoint.movePosition(mousePos);\r\n }\r\n },\r\n mouseUpCallback: (mousePos, movablePoint) => {\r\n void mousePos;\r\n void movablePoint;\r\n //console.log('mousePos', mousePos);\r\n //console.log('movablePoint', movablePoint);\r\n },\r\n mouseDownCallback: (mousePos, movablePoint) => {\r\n //console.log('mouseDownCallback mousePos', mousePos);\r\n //console.log('mouseDownCallback movablePoint', movablePoint);\r\n void mousePos; void movablePoint;\r\n const reduxState = store.getState();\r\n const isWallsUpMode = reduxState.sqftMenuState.isWallsUpMode;\r\n if (isWallsUpMode) {\r\n const wall = workspaceControllers.walls.getWallByPoint(movablePoint.parent);\r\n wall.editWall(movablePoint.parent);\r\n return true\r\n }\r\n }\r\n };\r\n let pointDesign = {\r\n radius: 10,\r\n lineWidth: 1,\r\n layout: CORE_POINT_LAYOUTS.black\r\n };\r\n\r\n let wPos = workspace.getPosition();\r\n let scale = sqftConfig.scale;\r\n let offset = {\r\n x: (pos.x + wPos.x) / scale,\r\n y: (pos.y + wPos.y) / scale\r\n };\r\n\r\n return new PointV2(offset.x, offset.y, workspace, pointState, pointDesign);\r\n}\r\n\r\n/**\r\n * @param existingWallPoint {PointV2}\r\n * @param mousePos {{x: int, y: int}}\r\n * @param lockedAngleStep\r\n * @return {PointV2}\r\n */\r\nexport const getWallLockedPoint = (existingWallPoint, mousePos, lockedAngleStep = 45) => {\r\n const reduxState = store.getState();\r\n const isWallsLockMode = reduxState.sqftMenuState.isWallsLockMode;\r\n const newWallPoint = getWallPoint(mousePos);\r\n if (isWallsLockMode) {\r\n const lockedPosition = getLockPointPos(existingWallPoint, lockedAngleStep);\r\n const lockedPositionOnField = getMousePositionOnField(lockedPosition.x, lockedPosition.y);\r\n newWallPoint.setPosition(lockedPositionOnField);\r\n }\r\n\r\n return newWallPoint\r\n}\r\n","import workspace from \"../../workspace\";\r\nimport COLOR_THEMES, {COLOR} from \"../../../store/colorThemes\";\r\nimport sqftConfig from \"../../../store/sqftConfig\";\r\nimport {\r\n RENDER_TEMPLATES,\r\n SIDEBAR_BUTTONS_MENU, SIDEBAR_NAVIGATION_BUTTONS,\r\n SIDEBAR_NAVIGATION_CABINET_BUTTONS\r\n} from \"../../../../../constants\";\r\nimport config from \"../../../store/sqftConfig\";\r\nimport sqftShapeManager from \"../../../store/sqftShapeManager\";\r\nimport RenderParts from \"../../../helpers/renderParts\";\r\nimport RenderFigures from \"../../../helpers/renderFigures\";\r\nimport store from \"../../../../../../../store\";\r\nimport RenderCabinets from \"../../../helpers/renderCabinets\";\r\nimport {COLORS} from \"../../../../../../../colorThemes\";\r\nimport Config from \"../../../../../../../config\";\r\nimport {\r\n canShapeBeAutoShifted,\r\n getIsShapePlacedOnTheFloor,\r\n getIsShapePlacedOnTheWall\r\n} from \"../../../../../helpers/shapeHelper\";\r\nimport {getPointField} from \"../../../../../helpers/sqftHelper\";\r\n\r\nclass ShapeCabinet {\r\n __shape;\r\n __crownMoldingFeatureId = null;\r\n __crownMoldingParams = {\r\n distance: 10\r\n }\r\n\r\n constructor(shape) {\r\n this.__shape = shape;\r\n }\r\n\r\n import = (data) => {\r\n void data\r\n }\r\n\r\n export = () => {\r\n return {\r\n width: this.getShapeWidth(),\r\n height: this.getShapeHeight(),\r\n depth: this.getShapeDepth(),\r\n }\r\n }\r\n\r\n getShapeWidth = () => {\r\n return this.__shape.getWidth(true);\r\n }\r\n\r\n getShapeDepth = () => {\r\n return this.__shape.getDepth(true);\r\n }\r\n\r\n getShapeHeight = () => {\r\n return this.__shape.getHeight(true);\r\n }\r\n\r\n addCrownMolding = () => {\r\n const state = store.getState();\r\n const selectedFeature = state.sqftResourceState.selectedFeature;\r\n this.__crownMoldingFeatureId = selectedFeature ? selectedFeature.part.dbFeature.id : null\r\n console.log(\"this.__crownMoldingFeatureId\", this.__crownMoldingFeatureId);\r\n }\r\n\r\n render = (ctx, staticOffset = null, template= RENDER_TEMPLATES.default) => {\r\n if (workspace && workspace.getState().loading) return;\r\n\r\n const fillTemplate = this.getFillColor(ctx);\r\n this.renderBorders(ctx, staticOffset, template, fillTemplate);\r\n this.renderDimensionsInsideShape(ctx);\r\n RenderParts.drawShapeCrownMoldings(ctx, staticOffset, this.__shape);\r\n RenderParts.drawShapeEndCap(ctx, staticOffset, this.__shape);\r\n this.renderHandles(ctx);\r\n //if (!this.__shape.shapeAbsolute.getAbsolutePosition() && !this.__shape.shapeAbsolute.getSnappedWithShape()) {\r\n if (this.__shape.shapeAbsolute.getSnappedShapeGroup() === null) {\r\n //this.renderCrownMolding(ctx);\r\n this.renderDimensionsOutsideShape(ctx);\r\n }\r\n if (Config.isDevMode()) {\r\n this.renderTestShapeLines(ctx, staticOffset, template);\r\n this.renderShapeSnappedGroup(ctx, staticOffset, template);\r\n }\r\n }\r\n\r\n renderMeasurementArrows = (ctx) => {\r\n const points = this.__shape.getPointsPointField();\r\n RenderFigures.drawArrowsAroundPoints(ctx, points, 10);\r\n }\r\n\r\n renderTestShapeLines = (ctx) => {\r\n if (this.__shape.testShapeLines) {\r\n ctx.save();\r\n ctx.beginPath();\r\n ctx.lineWidth = 2;\r\n ctx.strokeStyle = COLORS.gray;\r\n for (const testShapeLine of this.__shape.testShapeLines) {\r\n ctx.moveTo(testShapeLine.from.x, testShapeLine.from.y);\r\n ctx.lineTo(testShapeLine.to.x, testShapeLine.to.y);\r\n }\r\n ctx.stroke();\r\n ctx.closePath();\r\n ctx.restore();\r\n }\r\n }\r\n\r\n renderShapeSnappedGroup = (ctx) => {\r\n // render shape group\r\n let shapeCenter = this.__shape.getCenter();\r\n const pos = getPointField(shapeCenter.x, shapeCenter.y, this.__shape);\r\n const renderText = this.__shape.shapeAbsolute.getSnappedShapeGroup() + \".gr\";\r\n const mText = ctx.measureText(renderText);\r\n ctx.wrapText(renderText, pos.x, pos.y, mText, 22);\r\n }\r\n\r\n renderMeasurementLength = (ctx) => {\r\n const points = this.__shape.getPointsPointField();\r\n RenderParts.drawMeasurementAroundPoints(ctx, points);\r\n }\r\n\r\n renderDimensionsOutsideShape = (ctx) => {\r\n ctx.save();\r\n ctx.beginPath();\r\n this.renderMeasurementArrows(ctx);\r\n this.renderMeasurementLength(ctx);\r\n ctx.closePath();\r\n ctx.restore();\r\n }\r\n\r\n renderDimensionsInsideShape = (ctx) => {\r\n const shapeWidth = this.getShapeWidth();\r\n const shapeHeight = this.getShapeHeight();\r\n const textWidth = 'W: ' + shapeWidth;\r\n const textHeight = 'H: ' + shapeHeight;\r\n const fontSize = config.workspace.fontSizeSmallest;// * config.scale / config.defaultScale;\r\n const font = fontSize + \"px \" + config.activeFontRegular;\r\n const mTextWidth = ctx.measureText(textWidth);\r\n const mTextHeight = ctx.measureText(textWidth);\r\n const {minX, maxX, minY, maxY} = sqftShapeManager.getMinMaxShapePoints(this.__shape,true, true);\r\n void minY;\r\n //middle of the bottom line\r\n let pos = {\r\n x: minX + (maxX - minX) / 2 - mTextWidth.width / 2,\r\n y: maxY - fontSize\r\n };\r\n\r\n // center position\r\n // let shapeCenter = ShapeHelper.getCenterPoint(points);\r\n // let shapeCenterOnField = getPointField(shapeCenter.x, shapeCenter.y, this.__shape);\r\n // let pos = {\r\n // x: shapeCenterOnField.x - mTextWidth.width / 2,\r\n // y: shapeCenterOnField.y\r\n // };\r\n\r\n ctx.textAlign = \"start\";\r\n ctx.fillStyle = COLOR_THEMES[sqftConfig.activeTheme].primary_hover;\r\n\r\n const lineHeight = config.workspace.fontSizeSmallest;\r\n ctx.wrapText(textWidth, pos.x, pos.y - (fontSize / 2), mTextWidth, lineHeight, font);\r\n ctx.wrapText(textHeight, pos.x + 2, pos.y + (fontSize / 2), mTextHeight, lineHeight, font);\r\n }\r\n\r\n getFillColor = () => {\r\n // highlight shape on eyeball click\r\n if (this.__shape.shapeRender.blink.isHighlightedLightOn) {\r\n return RENDER_TEMPLATES.filledActive;\r\n } else {\r\n return RENDER_TEMPLATES.filledPrimary;\r\n }\r\n }\r\n\r\n renderBorders = (ctx,\r\n staticOffset = null,\r\n strokeTemplate= RENDER_TEMPLATES.default,\r\n fillTemplate = RENDER_TEMPLATES.filledPrimary\r\n ) => {\r\n RenderParts.drawShapeBorders(ctx, staticOffset, strokeTemplate, fillTemplate, this.__shape);\r\n const reduxState = store.getState();\r\n const activeButton = reduxState.sqftMenuState.activeButton;\r\n if (activeButton === SIDEBAR_NAVIGATION_CABINET_BUTTONS.handles\r\n || activeButton === SIDEBAR_NAVIGATION_CABINET_BUTTONS.spacer\r\n || activeButton === SIDEBAR_NAVIGATION_CABINET_BUTTONS.crown\r\n || activeButton === SIDEBAR_NAVIGATION_BUTTONS.end_cap\r\n || activeButton === SIDEBAR_NAVIGATION_CABINET_BUTTONS.end_panel\r\n || activeButton === SIDEBAR_NAVIGATION_CABINET_BUTTONS.resize\r\n || activeButton === SIDEBAR_BUTTONS_MENU.delete\r\n ) {\r\n RenderParts.drawHoveredBorders(ctx, staticOffset, this.__shape);\r\n\r\n // Highlight possibility to insert shape between lines\r\n } else if (activeButton === SIDEBAR_NAVIGATION_CABINET_BUTTONS.upper\r\n || activeButton === SIDEBAR_NAVIGATION_CABINET_BUTTONS.lower\r\n || activeButton === SIDEBAR_NAVIGATION_CABINET_BUTTONS.tall\r\n || workspace.getMovingShape()\r\n ) {\r\n const movingShape = workspace.getMovingShape();\r\n const isTestShapePlacedOnTheFloor = getIsShapePlacedOnTheFloor(this.__shape);\r\n const isTestShapePlacedOnTheWall = getIsShapePlacedOnTheWall(this.__shape);\r\n //1. Highlight moving shape if their part ids are equal\r\n //2. Highlight upper shapes if we are dragging new upper cabinet shape\r\n //3. Highlight lower shapes if we are dragging new lower cabinet shape\r\n //4. Highlight lower shapes if we are dragging new tall cabinet shape\r\n if ((movingShape && canShapeBeAutoShifted(workspace.getMovingShape(), this.__shape))\r\n || (activeButton === SIDEBAR_NAVIGATION_CABINET_BUTTONS.upper && isTestShapePlacedOnTheWall)\r\n || (activeButton === SIDEBAR_NAVIGATION_CABINET_BUTTONS.lower && isTestShapePlacedOnTheFloor)\r\n || (activeButton === SIDEBAR_NAVIGATION_CABINET_BUTTONS.tall && isTestShapePlacedOnTheFloor)\r\n ) {\r\n const style = {\r\n lineWidth: 4,\r\n strokeStyle: COLOR.red,\r\n shadowBlur: 2,\r\n extendHoveredLine: 5\r\n };\r\n RenderParts.drawHoveredBorders(ctx, staticOffset, this.__shape, style);\r\n }\r\n }\r\n };\r\n\r\n renderHandles = (ctx) => {\r\n RenderParts.drawHandles(ctx, this.__shape)\r\n };\r\n\r\n getCrownMoldingPoints = () => {\r\n const points = this.__shape.getPointsPointField();\r\n\r\n return RenderCabinets.getDiagonalPointsForTheSquare(points, this.__crownMoldingParams.distance)\r\n }\r\n\r\n // renderCrownMolding = (ctx) => {\r\n // if (this.__crownMoldingFeatureId) {\r\n // const crownMoldingPoints = this.getCrownMoldingPoints();\r\n // RenderCabinets.renderCrownMolding(ctx, crownMoldingPoints);\r\n // }\r\n // };\r\n}\r\n\r\nexport default ShapeCabinet\r\n","import {renderErrorPopup} from \"../../../../../api/api-popups\";\r\nimport workspace from \"../core/workspace\";\r\nimport sqftShape from \"../core/shapes/sqftShape\";\r\nimport sqftShapeManager from \"../store/sqftShapeManager\";\r\n\r\nexport const renderResetSeamPopup = (shape) => {\r\n if (shape instanceof sqftShape) {\r\n shape.setResetSlabModePopupWasDisplayed(true);\r\n sqftShapeManager.resetShapeChangesInTheSlabMode(shape);\r\n\r\n //state.mouseDown = false;\r\n //state.mouseDownPosition = null;\r\n shape.setIsPointsMovable(false);\r\n }\r\n renderErrorPopup(workspace.intl.formatMessage({id: \"sqft.popup.slab.resetChangesMessage\"}))\r\n}\r\n\r\nexport const shouldResetSlabModePopupOnPointMoveBeDisplayed = (shape) => {\r\n if (shape instanceof sqftShape\r\n && (shape.isWithShapePieces()) //|| SlabWorkspace.slabAdditionalShapes.getShapeAdditionalShapes(shape).length > 0\r\n ) {\r\n return !shape.getResetSlabModePopupWasDisplayed();\r\n }\r\n\r\n return false;\r\n}\r\n","export default class BlinkingHighlight {\r\n isHighlighted = false;\r\n isHighlightedLightOn = false;\r\n timer = true;\r\n highliteBlinkTime = 400;\r\n highliteBlinkTimeTotal = 2400;\r\n\r\n constructor() {\r\n }\r\n\r\n setHighlighting = (value) => {\r\n if (!this.isHighlighted && value) {\r\n this.startHighlightingLoop();\r\n } else if (this.isHighlighted && !value) {\r\n this.stopHighlightingLoop();\r\n }\r\n this.isHighlighted = value;\r\n setTimeout( () => {\r\n document.addEventListener(\"click\", this.stopHighlightingLoop)\r\n }, 50);\r\n setTimeout( () => {\r\n this.stopHighlightingLoop();\r\n }, this.highliteBlinkTimeTotal);\r\n };\r\n\r\n startHighlightingLoop = () => {\r\n this.isHighlightedLightOn = true;\r\n setTimeout( () => {\r\n this.isHighlightedLightOn = false\r\n }, this.highliteBlinkTime);\r\n this.timer = setTimeout( () => {\r\n this.startHighlightingLoop();\r\n }, this.highliteBlinkTime * 2);\r\n }\r\n\r\n stopHighlightingLoop = () => {\r\n clearTimeout(this.timer);\r\n this.isHighlighted = false;\r\n //this.isHighlightedLightOn = false; // this will be done in startHighlightingLoop\r\n document.removeEventListener(\"click\", this.stopHighlightingLoop);\r\n }\r\n}\r\n","import isEmpty from \"lodash/isEmpty\";\r\n\r\nimport {getCommonVisualizerType} from \"../../config\";\r\nimport store from \"../../store\";\r\nimport {dbFeatureFilterProperties, dbFeatureRelatedFeaturesProperties, otherMissingProperties} from \"./constants\";\r\n\r\n\r\n/**\r\n * Checks whether to show room feature as in visualizer in the navigation\r\n * @param feature {featureInterface}\r\n * @returns {featureInterface}\r\n */\r\nexport const setRoomNotInVisualizerProperty = (feature) => {\r\n const fabricatorSubscriptions = store.getState().fabricatorState.fabricatorSubscriptions;\r\n if (!feature || !feature.dbFeature || !feature.dbFeature.sharedFeatureName) {\r\n return feature\r\n }\r\n const name = feature.dbFeature.sharedFeatureName.toLowerCase();\r\n const visType = getCommonVisualizerType();\r\n if (name === visType) {\r\n feature.notAvailableInVisualizer = false;\r\n feature.dbFeature.unlocked = true;\r\n return feature\r\n }\r\n if (!Array.isArray(fabricatorSubscriptions)) {\r\n return feature\r\n }\r\n const subscription = fabricatorSubscriptions.find(subscr => subscr.service.toLowerCase() === name);\r\n if (subscription) {\r\n feature.notAvailableInVisualizer = false;\r\n feature.dbFeature.unlocked = true;\r\n if (subscription.thumbnail) {\r\n feature.customThumbnail = subscription.thumbnail\r\n }\r\n }\r\n return feature\r\n}\r\n\r\n/**\r\n * updates existing dbFeature\r\n * @param dbFeature {dbFeatureInterface} // new\r\n * @param existingDbFeature {dbFeatureInterface} // old (existing)\r\n * @param layout {object} // layout\r\n */\r\nexport const updateExistingFeature = (dbFeature, existingDbFeature, layout) => {\r\n if (!existingDbFeature[\"relatedFeatureIds\"] && Array.isArray(dbFeature[\"relatedFeatureIds\"])) {\r\n existingDbFeature[\"relatedFeatureIds\"] = dbFeature[\"relatedFeatureIds\"];\r\n }\r\n // loadRelatedFeatures(dbFeature, layout);\r\n dbFeatureRelatedFeaturesProperties.forEach(property => {\r\n if (!existingDbFeature[property] && Array.isArray(dbFeature[property])) {\r\n existingDbFeature[property] = dbFeature[property];\r\n const parentGroups = layout.getFeatures(true);\r\n dbFeature[property].forEach(dbFeature => {\r\n layout.loadDbFeature(dbFeature, parentGroups)\r\n })\r\n }\r\n })\r\n if ((!Array.isArray(existingDbFeature.stonePricingId) || !existingDbFeature.stonePricingId.length || existingDbFeature.stonePricingId[0] === -1)\r\n && (Array.isArray(dbFeature.stonePricingId) && dbFeature.stonePricingId.length && dbFeature.stonePricingId[0] !== -1)) {\r\n existingDbFeature.stonePricingId = dbFeature.stonePricingId\r\n }\r\n dbFeatureFilterProperties.forEach((key) => {\r\n if ((!existingDbFeature[key] || isEmpty(existingDbFeature[key])) && dbFeature[key] && !isEmpty(dbFeature[key])) {\r\n existingDbFeature[key] = dbFeature[key];\r\n dbFeature.wasUpdatedFromAnotherResponse = true; // to erase ._customDisplayName, because we need filters to create it again!\r\n existingDbFeature.wasUpdatedFromAnotherResponse = true; // to erase ._customDisplayName, because we need filters to create it again!\r\n }\r\n });\r\n otherMissingProperties.forEach((key) => {\r\n if ((!existingDbFeature[key] || isEmpty(existingDbFeature[key])) && dbFeature[key] && !isEmpty(dbFeature[key])) {\r\n existingDbFeature[key] = dbFeature[key];\r\n }\r\n });\r\n if (dbFeature.markUpString) {\r\n existingDbFeature.markUpString = dbFeature.markUpString;\r\n existingDbFeature.price = dbFeature.price;\r\n existingDbFeature.cost = dbFeature.cost;\r\n existingDbFeature.discount = dbFeature.discount;\r\n existingDbFeature.shippingCost = dbFeature.shippingCost;\r\n }\r\n}\r\n\r\n\r\nexport const loadRelatedFeatures = (dbFeature, layout) => {\r\n if (!Array.isArray(dbFeature.relatedFeatureIds) || !dbFeature.relatedFeatureIds.length) {\r\n return\r\n }\r\n dbFeature.relatedFeatureIds.forEach(relFeatureId => {\r\n if (!dbFeature.relatedFeatures) {\r\n dbFeature.relatedFeatures = [];\r\n }\r\n if (dbFeature.relatedFeatures.some(relFeature => relFeature.id === relFeatureId)) {\r\n return // already loaded\r\n }\r\n let loadedDbFeature = null;\r\n for (let i = 0; i < layout.allDbFeatures.length; i++) {\r\n if (layout.allDbFeatures[i].id === relFeatureId) {\r\n loadedDbFeature = layout.allDbFeatures[i];\r\n break;\r\n }\r\n }\r\n if (loadedDbFeature) {\r\n dbFeature.relatedFeatures.push(loadedDbFeature);\r\n } else {\r\n console.log(\"related feature wasn't loaded\"); // it it fires - then something is wrong, we should load related before main features\r\n }\r\n })\r\n // console.log(\"dbFeature.relatedFeatures\", dbFeature.relatedFeatures);\r\n}\r\n","export const getFeatureCropCoors = (feature) => {\r\n if (!feature.metaData[\"CropCoords\"]) {\r\n return null\r\n }\r\n if (!feature.metaData[\"ParsedCropCoords\"]) {\r\n if ((feature.metaData[\"CropCoords\"].length === 1) && (typeof feature.metaData[\"CropCoords\"][0] === \"string\")) {\r\n if (feature.metaData[\"CropCoords\"][0].includes(\", \")) {\r\n feature.metaData[\"ParsedCropCoords\"] = feature.metaData[\"CropCoords\"][0].split(\", \").map(coor => +coor)\r\n } else if (feature.metaData[\"CropCoords\"][0].includes(\",\")) {\r\n feature.metaData[\"ParsedCropCoords\"] = feature.metaData[\"CropCoords\"][0].split(\",\").map(coor => +coor)\r\n }\r\n } else {\r\n feature.metaData[\"ParsedCropCoords\"] = feature.metaData[\"CropCoords\"];\r\n }\r\n }\r\n return feature.metaData[\"ParsedCropCoords\"]\r\n}\r\n","import {LayoutAbbreviation, LayoutType} from \"./constants\";\r\nimport {UseFullSizeImages} from \"../../../config\";\r\n\r\nlet layouts = {};\r\nObject.keys(LayoutType).forEach(layoutName => {\r\n layouts[layoutName] = {\r\n Background: {\r\n ShowerWall: 50100,\r\n CenterWall: 50300,\r\n BackWall: 50600,\r\n Floor: 50700,\r\n BackgroundBG: 50800,\r\n },\r\n ShowerWallAccent: 1000,\r\n Window: {\r\n WindowBody: 45000,\r\n WindowKits: 1100\r\n },\r\n Accessories: {\r\n LargeCornerCaddie: 2010,\r\n LargeCornerCaddie2: 2020,\r\n Fixture: 2100,\r\n LargeCornerSeat: 2310,\r\n LargeCornerSeat2: 2320,\r\n CornerCaddie: 2410,\r\n CornerCaddie2: 2420,\r\n SoapDish: 2500,\r\n SoapDish2: 2510,\r\n SmallCornerShelf: 2600,\r\n GrabBar: 2700,\r\n GrabBar2: 2710,\r\n CornerShelf1: 2810,\r\n CornerShelf2: 2820,\r\n CornerShelf3: 2830,\r\n CornerShelf4: 2840,\r\n CornerShelf5: 2850,\r\n CornerShelf6: 2860,\r\n ShowerPod: 2900,\r\n Seats: 2950,\r\n ShowerRod: 4200,\r\n },\r\n Shower: {\r\n ShowerPan: 3200,\r\n ShowerFixture: 3410,\r\n ShowerFixture2: 3420,\r\n ShowerDoorHandle: 3600,\r\n // Threshold\r\n TubCombo: {\r\n WallConfiguration: 3600,\r\n Liner: 3700,\r\n WalkInTub: 3900,\r\n JettedTub: 4000,\r\n },\r\n },\r\n Walls: {\r\n LeftWall: 40120,\r\n },\r\n Globals: {\r\n ToiletPaper: 8000,\r\n ToiletPaperHolder: 8050,\r\n Towel: 8100,\r\n LightFixture: 8200,\r\n LampFixture: 8250,\r\n DecorWindow: 8300,\r\n DecorSeat: 8400,\r\n },\r\n Bathtub: {\r\n BathTubFixture: 9000,\r\n BathTubBody: 9100,\r\n },\r\n decor: 11111,\r\n skirting_board: 2500,\r\n shower_curb: 3000,\r\n bathtub_body: 5304,\r\n bathtub_fixture: 5300,\r\n window: 45000,\r\n vanity_cabinet: 6100,\r\n vanity_countertop: 6000,\r\n shower_arm: 7315,\r\n shower_head_bundle: 7456,\r\n split_wall: 7000,\r\n towel_bar: 2617,\r\n towel_ring: 2615,\r\n shower_glass: 3549,\r\n grab_bar: 2700,\r\n robe_hook: 5059,\r\n vanity_handle: 5200,\r\n vanity_backsplash: 5500,\r\n vanity_mirror: 5600,\r\n vanity_faucet: 5700,\r\n vanity_sink: 5800,\r\n shower_pan_combo: 6743,\r\n window_body: 7301,\r\n toilet_brush: 9816,\r\n toilet: 9960,\r\n paper_holder: 10004,\r\n shower_wall: 40020,\r\n left_wall_splitter: 40000,\r\n left_wall_crop: 40150,\r\n right_wall_crop: 48030,\r\n front_wall_crop: 49075,\r\n walls_ceiling: 50900,\r\n shower_wall_mirror: 50050,\r\n back_wall: 50100,\r\n front_wall: 50200,\r\n left_wall: 50500,\r\n right_wall: 54000,\r\n };\r\n});\r\n\r\n\r\nconst getLayerDimensions = (layer, currentLayout, canvasDimensions) => {\r\n const fullImagesFactor = UseFullSizeImages ? 177.77 : 100;\r\n const sizeFactor = fullImagesFactor / 100;\r\n\r\n if (layer.coords) {\r\n const COORDS_MAX = 1;\r\n\r\n const x1Percentage = (layer.coords.min_x * 100) / COORDS_MAX;\r\n const x2Percentage = (layer.coords.max_x * 100) / COORDS_MAX;\r\n const y1Percentage = (layer.coords.min_y * 100) / COORDS_MAX;\r\n const y2Percentage = (layer.coords.max_y * 100) / COORDS_MAX;\r\n let x1 = sizeFactor*((canvasDimensions.width * x1Percentage) / 100);\r\n let x2 = sizeFactor*((canvasDimensions.width * x2Percentage) / 100);\r\n let y1 = sizeFactor*((canvasDimensions.height * y1Percentage) / 100);\r\n let y2 = sizeFactor*((canvasDimensions.height * y2Percentage) / 100);\r\n\r\n return {\r\n polygonArray: [[x1, y1], [x2, y1], [x2, y2], [x1, y2]],\r\n width: (x2 - x1),\r\n height:(y2 - y1)\r\n };\r\n }\r\n\r\n // console.log(\"layer without coords\", layer);\r\n\r\n const {zIndex} = layer;\r\n switch (zIndex) {\r\n // case layouts[currentLayout].Background.ShowerWall:\r\n // return {\r\n // polygonArray: [[sizeFactor*350,sizeFactor*50],[sizeFactor*950,sizeFactor*50],[sizeFactor*950,sizeFactor*930],[sizeFactor*350,sizeFactor*930]],\r\n // width: sizeFactor*600,\r\n // height: sizeFactor*900\r\n // };\r\n case layouts[currentLayout].Walls.CenterWall:\r\n case layouts[currentLayout].Background.CenterWall: {\r\n switch (currentLayout) {\r\n case LayoutAbbreviation.Layout1: {\r\n return null;\r\n }\r\n case LayoutAbbreviation.Layout4: {\r\n return {\r\n polygonArray: [[sizeFactor*360,0],[sizeFactor*760,0],[sizeFactor*760,sizeFactor*880],[sizeFactor*360,sizeFactor*880]],\r\n width: sizeFactor*400,\r\n height: sizeFactor*880\r\n };\r\n }\r\n }\r\n return null;\r\n }\r\n case layouts[currentLayout].Walls.RightWall:\r\n case layouts[currentLayout].Background.RightWall: {\r\n switch (currentLayout) {\r\n case LayoutAbbreviation.Layout1: {\r\n return {\r\n polygonArray: [[sizeFactor*750,0],[sizeFactor*1920,0],[sizeFactor*1920,sizeFactor*1080],[sizeFactor*750,sizeFactor*1080]],\r\n width: sizeFactor*1170,\r\n height: sizeFactor*1080\r\n };\r\n }\r\n case LayoutAbbreviation.Layout4: {\r\n return {\r\n polygonArray: [[sizeFactor*120,0],[sizeFactor*1920,0],[sizeFactor*1920,sizeFactor*930],[sizeFactor*120,sizeFactor*930]],\r\n width: sizeFactor*1900,\r\n height: sizeFactor*930\r\n };\r\n }\r\n }\r\n return null;\r\n }\r\n case layouts[currentLayout].Walls.LeftWall:\r\n case layouts[currentLayout].Background.LeftWall: {\r\n switch (currentLayout) {\r\n case LayoutAbbreviation.Layout1: {\r\n return {\r\n polygonArray: [[0,0],[sizeFactor*600,0],[sizeFactor*600,sizeFactor*1080],[0,sizeFactor*1080]],\r\n width: sizeFactor*600,\r\n height: sizeFactor*1080\r\n };\r\n }\r\n case LayoutAbbreviation.Layout4: {\r\n return {\r\n polygonArray: [[0,0],[sizeFactor*600,0],[sizeFactor*600,sizeFactor*1080],[0,sizeFactor*1080]],\r\n width: sizeFactor*600,\r\n height: sizeFactor*1080\r\n };\r\n }\r\n }\r\n return null;\r\n }\r\n case layouts[currentLayout].Background.Floor: {\r\n switch (currentLayout) {\r\n default: {\r\n // case LayoutAbbreviation.Layout1: {\r\n return {\r\n polygonArray: [[0,sizeFactor*600],[sizeFactor*1920,sizeFactor*600],[sizeFactor*1920,sizeFactor*1080],[0,sizeFactor*1080]],\r\n width: sizeFactor*1920,\r\n height: sizeFactor*480\r\n };\r\n }\r\n }\r\n }\r\n case layouts[currentLayout].Background.ShowerWall:\r\n switch (currentLayout) {\r\n case LayoutAbbreviation.Layout1: {\r\n return {\r\n polygonArray: [[sizeFactor*350,0],[sizeFactor*1650,0],[sizeFactor*1650,sizeFactor*930],[sizeFactor*350,sizeFactor*930]],\r\n width: sizeFactor*1300,\r\n height: sizeFactor*930\r\n };\r\n }\r\n case LayoutAbbreviation.Layout4: {\r\n return {\r\n polygonArray: [[sizeFactor*250,0],[sizeFactor*1250,0],[sizeFactor*1250,sizeFactor*930],[sizeFactor*250,sizeFactor*930]],\r\n width: sizeFactor*1000,\r\n height: sizeFactor*930\r\n };\r\n }\r\n }\r\n return null;\r\n default:\r\n return null\r\n }\r\n};\r\n\r\nexport default {\r\n layouts,\r\n getLayerDimensions\r\n}\r\n\r\n\r\n","import {IntermediatePart} from \"../intermediatePart\";\r\nexport default class NonVisualizerSubPart extends IntermediatePart {\r\n constructor(isChild, partId, partName) {\r\n super(isChild);\r\n this.partId = partId;\r\n this.visible = true;\r\n this.partName = partName;\r\n // this.allFeaturesReceived = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new NonVisualizerSubPart(false, this.partId, dbFeature.groupName));\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n return this.navigationNoMetaSubItems(filters, searchText)\r\n }\r\n}\r\n","import {Part} from \"../part\";\r\nimport {toiletThumbnail} from '../../../bvComponent/core/assets';\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport {IntermediatePart} from \"../intermediatePart\";\r\nimport {removeLookPointFor} from \"../../lookNavigation/lookFunctions2\";\r\nimport {getCurrentRoomType} from \"../../../appLayout\";\r\nimport {LOOK_ROOM_TYPES} from \"../constants\";\r\n\r\nexport class Toilet extends Part {\r\n static id = 'Toilet';\r\n\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Toilet';\r\n this.translateId = \"visualizer.bathroom.toilet\";\r\n this.homePageTitle = 'Toilets';\r\n this.partThumbnail = toiletThumbnail;\r\n this.toilet = null;\r\n this.relatedGroupNames = [\"Toilet\"];\r\n }\r\n\r\n load(dbFeature, loadFeature = true) {\r\n if (dbFeature.groupName === \"Toilet\") {\r\n if (!this.toilet) {\r\n this.toilet = new ToiletBody(true);\r\n this.relatedItems.push(this.toilet);\r\n this.toilet.getParent = () => this;\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n if (loadFeature) {\r\n this.toilet.load(dbFeature);\r\n }\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n subParts() {\r\n return this.relatedItems.map(_ => new DesignNavigationItem(_.partName, _));\r\n }\r\n\r\n setDefaultPartAfterSubTypeClick() {\r\n return this.subParts()[0]\r\n }\r\n\r\n setDefault(layout) {\r\n this.relatedItems.forEach(_ => _.setDefault(layout));\r\n }\r\n}\r\n\r\nclass ToiletBody extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'toilet';\r\n this.partName = 'Toilet';\r\n this.translateId = \"visualizer.bathroom.toilet\";\r\n this.homePageTitle = 'Toilets';\r\n this.canBeDisabled = true;\r\n }\r\n\r\n // getArrayOfConditions() {\r\n // let conditions = super.getArrayOfConditions(); //roomLayout\r\n // const layout = this.getParent().layout;\r\n // const showerParent = layout.parts[Shower.id];\r\n // const showerSize = showerParent.showerSize();\r\n // if (showerParent && showerSize && !IS_BATHROOM_OLD_BV_SCENE) {\r\n // conditions.push({\r\n // propName: \"ShowerSize\",\r\n // propValue: showerSize\r\n // });\r\n // }\r\n // return conditions\r\n // }\r\n\r\n canDisplayDemoPoint(parentObject) {\r\n if (getCurrentRoomType() === LOOK_ROOM_TYPES.as) {\r\n return removeLookPointFor(parentObject, 6, \"1\")\r\n }\r\n return true\r\n }\r\n}\r\n\r\n\r\n","import {getMissingFeaturesAndClickThem} from \"./lookNavigation/lookNavigationFunctions\";\r\n\r\nexport const featureCanChangeShowerSize = (feature) => {\r\n if (!feature) {\r\n return false\r\n }\r\n return feature.partId === \"shower_pan_combo\" || feature.partId === \"walk_in_tub\" || feature.partId === \"shower_body\"\r\n}\r\n\r\nconst neededFeatureGroupsToCheckOnShowerSizeChange = document.kvConfig.toolVersion === 5\r\n ? [\"shower_pan_combo\", \"shower_interior_wall\", \"left_wall\", \"right_wall\", \"bathroom_floor\", \"shower_fixture\"]\r\n : [\"shower_wall\", \"split_wall\", \"left_wall_splitter\", \"bathroom_floor\", \"front_wall\", \"shower_fixture\"];\r\n\r\n/**\r\n * Checks needed features on ShowerSize change\r\n * @param clickedFeature {object}\r\n * @returns {promise}\r\n */\r\nexport const searchForSameNameWallsBeforeFeatureApply = async (clickedFeature) => {\r\n if (!clickedFeature.getParent) {\r\n return\r\n }\r\n const showerPanComboParent = clickedFeature.getParent();\r\n if (clickedFeature.metaData[\"ShowerSize\"] && clickedFeature.metaData[\"ShowerSize\"][0] && showerPanComboParent.activeFeature\r\n && showerPanComboParent.activeFeature.metaData[\"ShowerSize\"]\r\n && (showerPanComboParent.activeFeature.metaData[\"ShowerSize\"][0] !== clickedFeature.metaData[\"ShowerSize\"][0])) {\r\n\r\n const showerParent = showerPanComboParent.getParent();\r\n const layout = showerParent.layout;\r\n\r\n let missingFeatures = [];\r\n const newSizeCondition = {\r\n propName: \"ShowerSize\",\r\n propValue: clickedFeature.metaData[\"ShowerSize\"][0]\r\n };\r\n neededFeatureGroupsToCheckOnShowerSizeChange.forEach((partId) => {\r\n const featureGroup = layout.getFeatureGroupByPartId(partId);\r\n if (featureGroup && featureGroup.activeFeature && !featureGroup.activeFeature.matchesMetaForCondition(newSizeCondition)) {\r\n const navigationItemName = featureGroup.activeFeature.getSplittedFeatureName();\r\n const newConditions = featureGroup.getArrayOfConditions().map(condition => {\r\n if (condition.propName === \"ShowerSize\") {\r\n return newSizeCondition\r\n }\r\n return condition\r\n });\r\n const featureFound = featureGroup.features.find(feature => {\r\n return (feature.getSplittedFeatureName() === navigationItemName) && feature.matchesMetaForArrayOfConditions(newConditions)\r\n });\r\n if (!featureFound &&\r\n !(featureGroup && featureGroup.alreadyRequestedFeatureNames && featureGroup.alreadyRequestedFeatureNames.includes(navigationItemName))) {\r\n missingFeatures.push({\r\n relatedItem: featureGroup,\r\n navigationItemName,\r\n setCurrentFeature: false\r\n })\r\n }\r\n }\r\n });\r\n if (missingFeatures.length) {\r\n await getMissingFeaturesAndClickThem(missingFeatures, true)\r\n }\r\n }\r\n\r\n return Promise.resolve();\r\n}\r\n","import {sqftPost} from \"./sqftApi\";\r\nimport sqftConfig from \"../components/canvas/store/sqftConfig\";\r\n\r\nconst HARDCODED_DOMAIN = sqftConfig.threeD.useStagingDomain ? \"https://quotekandb.com\" : null; //\r\n\r\nexport default class SqftJsonApi {\r\n static postCabinetSet(data, options = {}) {\r\n return sqftPost(\"/api/AR/Composer\", data, {...options, domain: HARDCODED_DOMAIN});\r\n }\r\n\r\n static getCountertops(data, options = {}) {\r\n return sqftPost(\"/api/AR/Composer/countertop\", data,{...options, domain: HARDCODED_DOMAIN});\r\n }\r\n\r\n static getResizedCabinet(data, options = {}) {\r\n return sqftPost(\"/api/AR/Composer/cabinet_resize\", data,{...options, domain: HARDCODED_DOMAIN});\r\n }\r\n\r\n static getResizedCornerCabinet(data, options = {}) {\r\n return sqftPost(\"/api/AR/Composer/corner_cabinet_resize\", data,{...options, domain: HARDCODED_DOMAIN});\r\n }\r\n\r\n static getWall(data, options = {}) {\r\n return sqftPost(\"/api/AR/Composer/wall\", data,{...options, domain: HARDCODED_DOMAIN});\r\n }\r\n}\r\n","import workspace from \"../workspace\";\r\nimport Box from \"./textBox/box\";\r\nimport IText from \"./textBox/iText\";\r\n\r\nexport default class TextBox {\r\n // holds all our labels\r\n _posOnField = {};\r\n _placeholder = '';\r\n _design = {\r\n width: 50,\r\n height: 20,\r\n fillStyle: 'rgba(255,255,255, 0.7)', // transparent\r\n };\r\n box = null;\r\n text = null;\r\n\r\n //Initialize a new Box, add it, and invalidate the canvas\r\n addRect() {\r\n this.box = new Box(this._posOnField, this._design);\r\n this.text = new IText(this._placeholder, 'playregular', 0, 0, 100, 25, 0, this.box);\r\n }\r\n\r\n constructor(posOnField, placeholder, design) {\r\n this._posOnField = posOnField;\r\n this._placeholder = placeholder ? placeholder : this._placeholder;\r\n this._design = design ? design : this._design;\r\n }\r\n\r\n init() {\r\n this.addRect(this._design);\r\n workspace.textBoxManager.addTextBox(this);\r\n }\r\n\r\n deregisterEvents = () => {\r\n this.box.deregisterEvents();\r\n this.text.deregisterEvents();\r\n }\r\n\r\n reInitEvents = () => {\r\n this.box.reInitEvents();\r\n this.text.reInitEvents();\r\n }\r\n\r\n export() {\r\n return {\r\n posOnField: {\r\n x: this.box.posX,\r\n y: this.box.posY,\r\n },\r\n placeholder: this.text.modelText.txt,\r\n design: this.box.design\r\n }\r\n }\r\n\r\n import() {\r\n\r\n }\r\n}\r\n\r\n\r\n","import uniqBy from \"lodash/uniqBy\";\r\n\r\nimport * as types from '../actions/actionTypes';\r\nimport {isSameVisualizerWizard} from \"../bvcomponents/look/lookNavigation/lookMain/lookWizard/lookWizardFunctions2\";\r\nimport {getCommonVisualizerType, IS_LIXIL_UI} from \"../config\";\r\n\r\nconst initialState = {\r\n wizardIsActive: false, // is used on the materials page instead of the quotingtool\r\n wizardIsActiveObject: [], // is used for visualizer switching {\"kvScene\": false, \"bvLook\": true}\r\n wizardConfig: [], // arrayOf wizardObjectInterface // this is not used for now, it is a regular quoting tool filters wizard\r\n// {\r\n// id: 1,\r\n// name: \"Count wiz\",\r\n// description: \"some desc\",\r\n// enableForVisualizer: false,\r\n// enableForQuoting: true,\r\n// featureGroupName: \"Countertop\", // empty input case\r\n// isFinished: false, // frontend property\r\n// filterGroups: [\r\n// {\r\n// id: 43,\r\n// name: \"Countertop Material\",\r\n// type: \"Single\",\r\n// values: [],\r\n// visualType: \"ListWithCheckBoxes\"\r\n// },\r\n// {\r\n// id: 35,\r\n// name: \"Manufacturer \",\r\n// type: \"Single\",\r\n// values: [],\r\n// visualType: \"ImageList\",\r\n// },\r\n// {\r\n// id: 15,\r\n// name: \"Stone Color\",\r\n// type: \"Single\",\r\n// values: [],\r\n// visualType: \"ColorsWithColumns\"\r\n// },\r\n// ]\r\n// }\r\n // wizardActiveFilterGroupIndex: 0\r\n wizardList: [],\r\n wizardActiveItem: null,\r\n // wizardActiveStep: 0, // was -1 do not show the welcome screen on QKB and Lixil too\r\n wizardActiveStep: IS_LIXIL_UI ? -1 : 0, // do not show the welcome screen on QKB // reverted per solid surface request\r\n wizardSelectedValues: {},\r\n allWizardsValues: [], // [wizardAllObjectInterface]\r\n wizardShowFeatureSection: null,\r\n wizardMissingFeatures: {}, // \"groupName\": [\"string1\", \"string2\", ...]\r\n wizardWasRestored: false, // for complete popup\r\n wizardConflictingSteps: [], // we need to show the flow was changed popup, {wizardConflictingObjectInterface}\r\n wizardConflictPopupOpened: false,\r\n wizardSqftCartItems: [], // we can't set cart items directly, but we need to set them in wizard\r\n wizardAllowSkipDoneSteps: true,\r\n};\r\n\r\nexport const getUpdatedAllWizardValues = (state, quoteIndex, wizardItemId, wizardSelectedValues) => {\r\n const newWizObject = {\r\n quoteIndex,\r\n wizardItemId,\r\n lastVisitedStep: state.wizardActiveStep,\r\n visualizer: getCommonVisualizerType(),\r\n wizardSelectedValues: Object.assign({}, wizardSelectedValues)\r\n };\r\n const existingIndex = state.allWizardsValues.findIndex(wizSelObject => {\r\n return wizSelObject.wizardItemId === newWizObject.wizardItemId\r\n && (wizSelObject.quoteIndex === newWizObject.quoteIndex) && isSameVisualizerWizard(wizSelObject)\r\n });\r\n existingIndex > -1\r\n ? state.allWizardsValues.splice(existingIndex, 1, newWizObject)\r\n : state.allWizardsValues.push(newWizObject);\r\n\r\n state.allWizardsValues = state.allWizardsValues.map(wizObject => {\r\n if (wizObject.quoteIndex === quoteIndex && isSameVisualizerWizard(wizObject)) {\r\n wizObject.isLastActiveWizard = wizObject.wizardItemId === wizardItemId // to return back and force correctly\r\n }\r\n return wizObject\r\n });\r\n\r\n return [...state.allWizardsValues]\r\n}\r\n\r\nexport default function(state = initialState, action) {\r\n\r\n switch(action.type) {\r\n\r\n case types.SET_WIZARD_IS_ACTIVE: {\r\n const newState = Object.assign({}, state, {wizardIsActive: action.payload.wizardIsActive});\r\n if (action.payload.visualizerType && !state.wizardIsActiveObject[action.payload.visualizerType]) {\r\n newState.wizardIsActiveObject = {\r\n ...state.wizardIsActiveObject,\r\n [action.payload.visualizerType]: action.payload.wizardIsActive\r\n }\r\n }\r\n return newState;\r\n }\r\n case types.SET_WIZARD_ACTIVE_FILTER_GROUP_INDEX: // NOT USED!\r\n case types.SET_WIZARD_CONFIG:\r\n case types.SET_WIZARD_SHOW_FEATURE_SECTION:\r\n case types.RESTORE_ALL_WIZARD_SELECTED_VALUES:\r\n case types.SET_WIZARD_CONFLICT_POPUP_OPENED:\r\n case types.SET_WIZARD_SQFT_CART_ITEMS:\r\n case types.SET_WIZARD_CONFLICT_STEPS:\r\n case types.SET_WIZARD_ALLOW_SKIP_DONE_STEPS:\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n });\r\n case types.SET_WIZARD_LIST:\r\n return Object.assign({}, state, {\r\n wizardList: uniqBy([...state.wizardList, ...action.payload.wizardList], wizItem => wizItem.id)\r\n });\r\n case types.SET_WIZARD_ACTIVE_ITEM:\r\n if (action.payload.wizardActiveItem) {\r\n const alreadySelectedWizard = state.allWizardsValues.find(wizard => {\r\n return wizard.wizardItemId === action.payload.wizardActiveItem.id && (wizard.quoteIndex === action.payload.quoteIndex)\r\n });\r\n if (alreadySelectedWizard) {\r\n action.payload.wizardSelectedValues = Object.assign({}, alreadySelectedWizard.wizardSelectedValues); // restore added data\r\n action.payload.wizardActiveStep = Number.isInteger(alreadySelectedWizard.lastVisitedStep)\r\n ? alreadySelectedWizard.lastVisitedStep // restore last step\r\n : Object.keys(alreadySelectedWizard.wizardSelectedValues).length // restore last step (just in case lastVisitedStep is missing)\r\n action.payload.wizardWasRestored = true // for complete popup\r\n } else if ((state.wizardActiveStep === -1) && action.payload.wizardActiveItem.skipStartStep) {\r\n action.payload.wizardActiveStep = 0;\r\n }\r\n action.payload.allWizardsValues = state.allWizardsValues.map(wizObject => {\r\n if (wizObject.quoteIndex === action.payload.quoteIndex && isSameVisualizerWizard(wizObject)) {\r\n wizObject.isLastActiveWizard = wizObject.wizardItemId === action.payload.wizardActiveItem.id // to return back and force correctly\r\n }\r\n return wizObject\r\n })\r\n }\r\n return Object.assign({}, state, {\r\n ...action.payload,\r\n });\r\n case types.SET_WIZARD_ACTIVE_STEP: {\r\n return Object.assign({}, state, {\r\n wizardActiveStep: action.payload.wizardActiveStep,\r\n wizardSelectedValues: action.payload.wizardSelectedValues,\r\n wizardConflictingSteps: action.payload.wizardConflictingSteps,\r\n wizardWasRestored: false,\r\n wizardAllowSkipDoneSteps: action.payload.wizardActiveStep < state.wizardActiveStep\r\n ? false\r\n : state.wizardAllowSkipDoneSteps,\r\n });\r\n }\r\n case types.SET_WIZARD_SELECTED_VALUES: {\r\n if (action.payload.allWizardsValues) {\r\n return Object.assign({}, state, {\r\n allWizardsValues: action.payload.allWizardsValues,\r\n wizardSelectedValues: action.payload.wizardSelectedValues,\r\n wizardConflictingSteps: action.payload.wizardConflictingSteps\r\n });\r\n }\r\n return Object.assign({}, state, {\r\n wizardSelectedValues: action.payload.wizardSelectedValues,\r\n wizardConflictingSteps: action.payload.wizardConflictingSteps\r\n });\r\n }\r\n case types.SET_WIZARD_MISSING_FEATURES: {\r\n const wizardMissingFeatures = {\r\n ...state.wizardMissingFeatures,\r\n [action.payload.groupName]: action.payload.wizardMissingFeatures\r\n }\r\n return Object.assign({}, state, {wizardMissingFeatures});\r\n }\r\n case types.SET_ALL_WIZARD_SELECTED_VALUES: {\r\n const {wizardSelectedValues, quoteIndex, wizardItemId} = action.payload;\r\n const existingAllObject = state.allWizardsValues.find(wizSelObject => {\r\n return wizSelObject.wizardItemId === wizardItemId && wizSelObject.quoteIndex === quoteIndex\r\n });\r\n const existingValues = existingAllObject ? existingAllObject.wizardSelectedValues : {};\r\n const updatedValues = Object.assign({}, existingValues, wizardSelectedValues)\r\n const allWizardsValues = getUpdatedAllWizardValues(state, quoteIndex, wizardItemId, updatedValues);\r\n return Object.assign({}, state, {allWizardsValues});\r\n }\r\n case types.SET_LOOK_OPENED:\r\n if (!action.payload.lookOpened && state.wizardActiveItem) {\r\n return Object.assign({}, state, { wizardActiveItem: null });\r\n }\r\n break;\r\n }\r\n\r\n return state;\r\n\r\n}\r\n","import {LOOK_ROOM_TYPES} from \"../bvcomponents/look/core/constants\";\r\n\r\n/**\r\n * @param preset {object} visualizer management preset\r\n * @param forVisualizerType {string} visualizer type\r\n * @return {object} visualizer management preset\r\n */\r\nexport const updatePresetRoomLayout = (preset, forVisualizerType = document.kvConfig.visualizerType) => {\r\n if (!preset.lookId) {\r\n preset.lookId = 0;\r\n }\r\n if ((forVisualizerType === \"bvLook\")) {\r\n if (preset.roomType === LOOK_ROOM_TYPES.as) {\r\n preset.layout_type = preset.layout_type > 20\r\n ? preset.layout_type - 10\r\n : preset.layout_type < 10\r\n ? preset.layout_type + 10\r\n : preset.layout_type;\r\n } else {\r\n preset.layout_type = preset.layout_type >= 10\r\n ? preset.layout_type - 10\r\n : preset.layout_type;\r\n }\r\n }\r\n return preset\r\n}\r\n\r\nexport const updatePresetsArray = (responseDefaults, forVisualizerType) => {\r\n let bvPresets = JSON.parse(responseDefaults) || [];\r\n const noPresetsAtAll = bvPresets.every(preset => !preset.id);\r\n return bvPresets.map((preset, presetIndex) => {\r\n if (noPresetsAtAll) {\r\n preset.id = presetIndex + 1;\r\n } else if (!Number.isInteger(preset.id)) {\r\n preset.id = presetIndex + 100 // 100 is to make id's really unique\r\n }\r\n preset = updatePresetRoomLayout(preset, forVisualizerType);\r\n return preset\r\n });\r\n}\r\n","import CountertopCommon from \"../countertopCommon\";\r\nimport Appliance from \"../../parts/appliance\";\r\nimport {LayoutAbbreviations, METADATA} from \"../../constants\";\r\n\r\nexport default class Countertop extends CountertopCommon {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'countertop';\r\n this.partName = 'Countertop';\r\n this.translateId = \"visualizer.kitchen.countertop.countertop\";\r\n this.isStoneFeature = true;\r\n this.hasAdditionalParts = true;\r\n this.allWallsCanBeApplied = true;\r\n if (isChild) {\r\n this.nextFeaturesPageToLoadArray = {};\r\n LayoutAbbreviations.forEach(layoutAbbreviation => {\r\n this.nextFeaturesPageToLoadArray[layoutAbbreviation] = {\r\n page: 0,\r\n allReceived: false,\r\n };\r\n });\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n this.fixEdgeMeta(dbFeature);\r\n if (dbFeature.metaData[\"MountType\"] && dbFeature.metaData[\"MountType\"].includes(\"0\")) {\r\n dbFeature.metaData[\"MountType\"] = [METADATA.ALL]\r\n }\r\n if (dbFeature.metaData[\"MountWidth\"] && dbFeature.metaData[\"MountWidth\"].includes(\"0\")) {\r\n dbFeature.metaData[\"MountWidth\"] = [METADATA.ALL]\r\n }\r\n const partNumber = (dbFeature.metaData[\"Part\"] && +dbFeature.metaData[\"Part\"][0]) === 1 ? 1 : 2;\r\n return super.load_(dbFeature, new Countertop(false, partNumber), true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n\r\n getCurrentSinkMetaData() {\r\n const sinkParent = this.getParent().sink;\r\n let metaObject = {};\r\n if (sinkParent && sinkParent.activeFeature) {\r\n const sinkMeta = sinkParent.activeFeature.metaData[\"MountType\"];\r\n if (sinkMeta && (sinkMeta !== \"0\") && !sinkMeta.includes(\"0\")) {\r\n metaObject[\"MountType\"] = Array.isArray(sinkMeta) ? sinkMeta[0] : sinkMeta\r\n }\r\n const mountWidthMeta = sinkParent.activeFeature.metaData[\"MountWidth\"];\r\n if (mountWidthMeta && (mountWidthMeta !== \"0\") && !mountWidthMeta.includes(\"0\")) { // if 0 - we are showing all faucets\r\n metaObject[\"MountWidth\"] = mountWidthMeta\r\n }\r\n }\r\n return metaObject\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n const currentSinkMetaData = this.getCurrentSinkMetaData();\r\n [\"MountType\", \"MountWidth\"].forEach(propName => {\r\n if (currentSinkMetaData[propName]) {\r\n conditions.push({\r\n propName,\r\n propValue: currentSinkMetaData[propName]\r\n })\r\n }\r\n })\r\n // console.log(\"conditions\", conditions);\r\n return conditions;\r\n }\r\n\r\n getActiveFeaturePartsAccordingToActiveFeature(fromFeature = this.activeFeature, activeFeatureConditions = []) {\r\n let activeFeatureParts = [];\r\n if (fromFeature && fromFeature.partNumber) {\r\n const name1 = fromFeature.getSplittedFeatureName();\r\n // console.log(\"name1\", name1);\r\n let arrayOfConditions = activeFeatureConditions.length\r\n ? activeFeatureConditions\r\n : this.getActiveFeatureConditions(fromFeature);\r\n\r\n const conditionsWithoutSink = arrayOfConditions.filter(condition => {\r\n return condition.propName !== \"MountType\" && condition.propName !== \"MountWidth\"\r\n })\r\n\r\n const countertopParent = this.getParent();\r\n const applianceParent = countertopParent.layout.parts[Appliance.id];\r\n // const sink = countertopParent.sink;\r\n\r\n activeFeatureParts = this.featuresParts.filter((feature) => {\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"2\")\r\n && applianceParent && applianceParent.stove && !applianceParent.stove.disabled && applianceParent.stove.activeFeature) {\r\n return false\r\n }\r\n // if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"4\")\r\n // && sink && !sink.disabled && sink.activeFeature && sink.activeFeature.metaData[\"MountType\"] && sink.activeFeature.metaData[\"MountType\"].includes(\"ST\")\r\n // && !feature.matchesMetaForCondition(\"MountType\", \"ST\")) {\r\n // return false\r\n // }\r\n if (feature.metaData[\"Part\"] && (feature.metaData[\"Part\"].includes(\"2\") || feature.metaData[\"Part\"].includes(\"3\"))) {\r\n return name1 === feature.getSplittedFeatureName() && feature.matchesMetaForArrayOfConditions(conditionsWithoutSink)\r\n }\r\n return name1 === feature.getSplittedFeatureName() && feature.matchesMetaForArrayOfConditions(arrayOfConditions)\r\n });\r\n\r\n // console.log(\"this.featuresParts\", this.featuresParts);\r\n // console.log(\"activeFeatureParts\", activeFeatureParts);\r\n activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n }\r\n return activeFeatureParts\r\n }\r\n}\r\n","import uniqBy from \"lodash/uniqBy\";\r\n\r\nimport {IntermediatePart} from \"../intermediatePart\";\r\nimport store from \"../../../../store\";\r\n\r\nexport default class CountertopCommon extends IntermediatePart {\r\n\r\n constructor(props) {\r\n super(props);\r\n }\r\n\r\n fixEdgeMeta(dbFeature) {\r\n if (dbFeature.metaData[\"Edge\"]) {\r\n const metaValue = Array.isArray(dbFeature.metaData[\"Edge\"]) ? dbFeature.metaData[\"Edge\"][0] : dbFeature.metaData[\"Edge\"];\r\n switch (metaValue) {\r\n case \"European Edge\":\r\n dbFeature.metaData[\"Edge\"] = \"Eased\";\r\n break;\r\n case \"Polished\":\r\n case \"Polished Edge\":\r\n case \"Top and bottom round\":\r\n case \"Top and Bottom Round\":\r\n dbFeature.metaData[\"Edge\"] = \"Pencil\";\r\n break;\r\n case \"Waterfall Edge\":\r\n dbFeature.metaData[\"Edge\"] = \"Waterfall\";\r\n break;\r\n default:\r\n dbFeature.metaData[\"Edge\"] = metaValue.split(\" Edge\")[0];\r\n break;\r\n }\r\n } else {\r\n // console.log(\"No Edge Metadata\", dbFeature);\r\n }\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n let featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n\r\n let newFeatures = uniqBy(this.getSameEdgesFeatures(featuresToDisplay), (feature) => {\r\n return feature.dbFeature.id && feature.getSplittedFeatureName()\r\n });\r\n\r\n for (let i = 0; i < featuresToDisplay.length; i++) {\r\n const currentFeature = featuresToDisplay[i];\r\n const currentFeatureName = currentFeature.getSplittedFeatureName();\r\n if (!newFeatures.some(addedFeature => {\r\n return addedFeature.dbFeature.id === currentFeature.dbFeature.id\r\n || addedFeature.getSplittedFeatureName() === currentFeatureName\r\n })) {\r\n newFeatures.push(currentFeature)\r\n }\r\n }\r\n\r\n return this.returnNavItemsFromFeatures(newFeatures)\r\n }\r\n\r\n setActiveFeatureParts(fromFeature = this.activeFeature, activeFeatureConditions = []) {\r\n if (!this.hasAdditionalParts) {\r\n return []\r\n }\r\n let activeFeatureParts = this.getActiveFeaturePartsAccordingToActiveFeature(fromFeature, activeFeatureConditions);\r\n return activeFeatureParts\r\n }\r\n\r\n getActiveFeatureConditions() {\r\n if (this.activeFeature) {\r\n return [...this.getArrayOfConditions(), {\r\n propName: \"Edge\",\r\n propValue: this.activeFeature.metaData[\"Edge\"]\r\n }]\r\n }\r\n return this.getArrayOfConditions()\r\n }\r\n\r\n setLayers(layout) {\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions()))) {\r\n this.checkIfFeaturePartIsMatching();\r\n super.setLayers(layout);\r\n } else {\r\n this.setDefault();\r\n super.setLayers(layout);\r\n }\r\n }\r\n\r\n getSameEdgesFeatures(featuresToDisplay) {\r\n let currentEdgeMetaData = \"\";\r\n if (this.activeFeature && this.activeFeature.metaData[\"Edge\"]) {\r\n currentEdgeMetaData = Array.isArray(this.activeFeature.metaData[\"Edge\"]) ? this.activeFeature.metaData[\"Edge\"][0] : this.activeFeature.metaData[\"Edge\"];\r\n }\r\n if (!currentEdgeMetaData) {\r\n const edgeFeatureGroup = this.getParent().edge;\r\n if (edgeFeatureGroup && edgeFeatureGroup.activeFeature) {\r\n currentEdgeMetaData = edgeFeatureGroup.activeFeature.dbFeature.sharedFeatureName;\r\n }\r\n }\r\n if (currentEdgeMetaData) {\r\n featuresToDisplay = featuresToDisplay.filter((feature) => {\r\n return !feature.notAvailableInVisualizer && feature.metaData[\"Edge\"] && (\r\n Array.isArray(feature.metaData[\"Edge\"])\r\n ? feature.metaData[\"Edge\"].includes(currentEdgeMetaData)\r\n : feature.metaData[\"Edge\"] === currentEdgeMetaData\r\n )\r\n });\r\n }\r\n return featuresToDisplay\r\n }\r\n\r\n getFeatureEdgeFilter = (feature, edgeFilterGroup) => {\r\n if (!feature) {\r\n return null\r\n }\r\n if (!edgeFilterGroup) {\r\n const filterGroups = store.getState().filterState.filterGroups;\r\n edgeFilterGroup = filterGroups.find(group => group.name === \"Edge\" || group.name === \"Edge Profile\");\r\n }\r\n return feature.dbFeature.fabFilterValueIDs[edgeFilterGroup.id] || feature.dbFeature.filterValueIDs[edgeFilterGroup.id]\r\n };\r\n\r\n tryToSetTheSameFeature(filteredFeatures = [], partName = \"\") {\r\n if (this.activeFeature && this.activeFeature.partName) {\r\n let splittedFromTheLayoutName = partName\r\n ? this.removeLayoutFromPartName(partName)\r\n : this.activeFeature.getMatchingFeatureName();\r\n const allEdgesCountertops = filteredFeatures.filter(feature => {\r\n return feature.getMatchingFeatureName() === splittedFromTheLayoutName\r\n });\r\n const sameEdgeCountertops = this.getSameEdgesFeatures(allEdgesCountertops);\r\n this.activeFeature = sameEdgeCountertops[0] || allEdgesCountertops[0] || null\r\n if (this.activeFeature) {\r\n return true\r\n }\r\n }\r\n return false\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../intermediatePart\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport {mergeFilterObjects} from \"../../../../misc/utils\";\r\nimport store from \"../../../../store\";\r\nimport {hardCodeIsCaesarStone} from \"../../../../misc/fabricatorHardcode\";\r\n\r\n// EDGE features:\r\n//\r\n// Full Bullnose\r\n// Triple Pencil\r\n// Eased\r\n// Half Bullnose\r\n// Quarter Bevel\r\n// Waterfall\r\n// Ogee\r\n//\r\n//\r\n// Ogee Bull\r\n// Pencil\r\n// Bevel Top and Bottom\r\n//\r\n// Caes hardcode - Bevel Top and Bottom - is Quarter Bevel\r\n//\r\n// ========================\r\n//\r\n// Countertop features:\r\n//\r\nconst countertopMetaDataValues = [\"Full Bullnose\", \"Triple Pencil\", \"Eased\", \"Half Bullnose\", \"Quarter Bevel\",\r\n \"Waterfall\", \"Ogee\"];\r\n//\r\n// Top and Bottom Round\r\n\r\n\r\nexport default class EdgeCommon extends IntermediatePart {\r\n\r\n constructor(props) {\r\n super(props);\r\n }\r\n\r\n load(dbFeature) {\r\n if (!dbFeature.metaData[\"Edge\"] || (Array.isArray(dbFeature.metaData[\"Edge\"]) && !dbFeature.metaData[\"Edge\"].length)) {\r\n const edgeFilterGroup = this.getEdgeFilterGroup();\r\n const assignedEdgeFilter = this.getEdgeFilterGroupFilters({dbFeature}, edgeFilterGroup);\r\n dbFeature.metaData[\"Edge\"] = (dbFeature.sharedFeatureName || \"\").split(\" Edge\")[0];\r\n if (Array.isArray(assignedEdgeFilter) && assignedEdgeFilter[0] && edgeFilterGroup && edgeFilterGroup.values) {\r\n const fValue = edgeFilterGroup.values.find(filter => filter.id === assignedEdgeFilter[0]);\r\n if (fValue && fValue.value) {\r\n const metaDataMatchName = fValue.value.split(\" Edge\")[0];\r\n if (countertopMetaDataValues.includes(metaDataMatchName)) {\r\n dbFeature.metaData[\"Edge\"] = metaDataMatchName;\r\n }\r\n }\r\n }\r\n if (document.kvConfig.isCaesarStone || hardCodeIsCaesarStone()) {\r\n if (dbFeature.metaData[\"Edge\"] === \"Edge Profile – Ogee (Linear Feet)\") {\r\n dbFeature.metaData[\"Edge\"] = \"Ogee\"\r\n } else if (dbFeature.metaData[\"Edge\"] === \"Bevel Top and Bottom\") {\r\n dbFeature.metaData[\"Edge\"] = \"Quarter Bevel\"\r\n }\r\n }\r\n }\r\n return super.load(dbFeature);\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n let featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(true), filteredAvailableFeatures);\r\n const edgeFilterGroup = this.getEdgeFilterGroup();\r\n const parentGroup = this.getParent();\r\n const countertop = parentGroup.countertop;\r\n\r\n // here we check if some countertop has the same name as currently active countertop & it has edge filter\r\n if (edgeFilterGroup && countertop && countertop.activeFeature) {\r\n if (this.partId === \"center_island_edge\" && parentGroup.layout.type === 3) {\r\n return []\r\n }\r\n featuresToDisplay = featuresToDisplay.map((feature) => {\r\n feature.notAvailableInVisualizer = !(this.getMatchingCounterTop(feature)).matchingFeature;\r\n return feature\r\n });\r\n }\r\n\r\n return featuresToDisplay.map(_ => {\r\n const featurePart = new DesignNavigationItem(_.featureName, _);\r\n featurePart.notAvailableInVisualizer = featurePart.part.notAvailableInVisualizer;\r\n return featurePart\r\n });\r\n }\r\n\r\n handleClick(ignoreLocked) {\r\n super.handleClick(ignoreLocked); // set active edge feature\r\n const matchCounterTopObject = this.getMatchingCounterTop();\r\n console.log(\"matchCounterTopObject\", matchCounterTopObject);\r\n if (matchCounterTopObject.matchingFeature) {\r\n matchCounterTopObject.matchingFeature.handleClick(true);\r\n }\r\n this.featureClicked();\r\n }\r\n\r\n /***\r\n * @returns {object}\r\n * **/\r\n getMatchingCounterTop = (feature = this) => {\r\n const parent = feature.getParent();\r\n const countertop = parent.getParent().countertop;\r\n\r\n if (!countertop) {\r\n return {matchingFeature: null, hasSameName: false}\r\n }\r\n\r\n if (countertop.activeFeature && (countertop.activeFeature.metaData[\"Edge\"] === feature.metaData[\"Edge\"])) {\r\n return {matchingFeature: countertop.activeFeature, hasSameName: true} // no need to do anything\r\n }\r\n\r\n let matchingByName = [];\r\n let matchingFeatures = [];\r\n const allCountertopFeatures = countertop.features;\r\n let currentActiveName = countertop.activeFeature ? countertop.activeFeature.getCountertopGroupsSplittedFeatureName() : \"\";\r\n for (let i = 0; i < allCountertopFeatures.length; i++) {\r\n const countertopFeature = allCountertopFeatures[i];\r\n if (countertopFeature.notAvailableInVisualizer) {\r\n continue;\r\n }\r\n if (countertopFeature.metaData[\"Edge\"] === feature.metaData[\"Edge\"]) {\r\n matchingFeatures.push(countertopFeature);\r\n if (currentActiveName && (currentActiveName === countertopFeature.getCountertopGroupsSplittedFeatureName())) {\r\n matchingByName.push(countertopFeature);\r\n }\r\n }\r\n }\r\n if (matchingByName.length) {\r\n return {matchingFeature: matchingByName[0], hasSameName: true}\r\n }\r\n return {matchingFeature: matchingFeatures[0] || null, hasSameName: false}\r\n };\r\n\r\n getEdgeFilterGroupFilters = (feature, edgeFilterGroup) => {\r\n if (!feature._allEdgeFilters) {\r\n const allEdgeFilters = mergeFilterObjects(feature.dbFeature.filterValueIDs, feature.dbFeature.fabFilterValueIDs);\r\n feature._allEdgeFilters = allEdgeFilters && edgeFilterGroup ? allEdgeFilters[edgeFilterGroup.id] : [];\r\n }\r\n return feature._allEdgeFilters;\r\n };\r\n\r\n getMatchingCounterTopFeaturesBySplittedName = (countertop, matchingFeatures = []) => { // array of sorted by filter features\r\n if (!countertop.activeFeature) {\r\n return []\r\n }\r\n let currentActiveName = countertop.activeFeature.getCountertopGroupsSplittedFeatureName();\r\n return matchingFeatures.filter(feature => {\r\n const currentFeatureName = feature.getCountertopGroupsSplittedFeatureName();\r\n return currentFeatureName === currentActiveName\r\n })\r\n };\r\n\r\n getEdgeFilterGroup = () => {\r\n const filterGroups = store.getState().filterState.filterGroups;\r\n return filterGroups.find(group => group.name === \"Edge\" || group.name === \"Edge Profile\");\r\n };\r\n\r\n getArrayOfConditions(forNavigation = false) {\r\n const countertop = this.getParent().countertop;\r\n if (!forNavigation && countertop && countertop.activeFeature && countertop.activeFeature.metaData[\"Edge\"]) {\r\n return [{\r\n propName: \"Edge\",\r\n propValue: countertop.activeFeature.metaData[\"Edge\"]\r\n }]\r\n }\r\n return [];\r\n }\r\n\r\n canUseNavigationFilterSteps() {\r\n return true\r\n }\r\n\r\n setLayers(layout) {\r\n if (this.activeFeature && (!this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions()))) {\r\n this.setDefault(layout);\r\n }\r\n return false\r\n }\r\n\r\n setZIndex() {\r\n return false\r\n }\r\n\r\n setEdgeNotInVisualizer = () => {\r\n // console.log(\"setEdgeNotInVisualizer\", );\r\n const countertop = this.getParent().countertop;\r\n const filterGroups = store.getState().filterState.filterGroups;\r\n const edgeGroup = filterGroups.find(group => group.name === \"Edge\" || group.name === \"Edge Profile\");\r\n if (edgeGroup && countertop) {\r\n Object.keys(this.featuresList).forEach(layoutType => {\r\n for (let i = 0; i < this.featuresList[layoutType].length; i++) {\r\n const feature = this.featuresList[layoutType][i];\r\n if (feature.dbFeature.filterValueIDs[edgeGroup.id]) {\r\n const edgeValue = feature.dbFeature.filterValueIDs[edgeGroup.id][0];\r\n const edgeExist = countertop.featuresList[layoutType].some(countertopFeature => {\r\n return countertopFeature.dbFeature.filterValueIDs[edgeGroup.id]\r\n && countertopFeature.dbFeature.filterValueIDs[edgeGroup.id].includes(edgeValue)\r\n });\r\n if (edgeExist) {\r\n feature.notAvailableInVisualizer = false\r\n }\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n}\r\n","import React, {useContext} from \"react\";\r\nimport {View, Text, Image} from '@react-pdf/renderer';\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport {PrintDocumentContext} from \"./printDocumentContext\";\r\nimport {LOWES_DISCLAIMER_EN} from \"../../../misc/fabricatorHardcode\";\r\n\r\nconst warningIcon = `https://qc-cdn.s3.amazonaws.com/receipt/icon-warning-red.jpg`;\r\n\r\nconst PrintDocumentDisclaimer = (props) => {\r\n const {fabricatorData, locale, styles, withTotal} = props;\r\n const fabricatorSettings = fabricatorData.settings;\r\n const printContext = useContext(PrintDocumentContext);\r\n\r\n if (!fabricatorSettings.depositDisclaimer || !fabricatorSettings.enableDisclaimer) {\r\n return null\r\n }\r\n if (withTotal && fabricatorSettings.depositDisclaimer.length >= 1500\r\n || !withTotal && fabricatorSettings.depositDisclaimer.length < 1500) {\r\n return null\r\n }\r\n\r\n const getDisclaimerMessage = () => {\r\n if ((fabricatorData.isLowes || fabricatorData.isCaesarStone)) {\r\n if (locale === \"fr-FR\" && printContext.messages[\"transDoc.description_FR._disclaimer\"]) {\r\n return printContext.messages[\"transDoc.description_FR._disclaimer\"]\r\n } else if (locale === \"pl-PL\" && printContext.messages[\"transDoc.customTranslateDescription_PL._disclaimer\"]) {\r\n return printContext.messages[\"transDoc.customTranslateDescription_PL._disclaimer\"]\r\n } else if (printContext.messages[\"transDoc.customDisplayName_FR._disclaimer\"]) { // it is actually EN ! hardcoded for lowes profiles\r\n return printContext.messages[\"transDoc.customDisplayName_FR._disclaimer\"]\r\n } else if (fabricatorData.isLowes) {\r\n return LOWES_DISCLAIMER_EN\r\n }\r\n }\r\n return fabricatorSettings.depositDisclaimer\r\n }\r\n\r\n const disclaimerMessage = getDisclaimerMessage();\r\n\r\n // if (withTotal) {\r\n // return (\r\n // \r\n // \r\n // {disclaimerMessage}\r\n // \r\n // )\r\n // }\r\n\r\n return (\r\n \r\n \r\n {disclaimerMessage}\r\n \r\n )\r\n\r\n};\r\n\r\nPrintDocumentDisclaimer.propTypes = {\r\n fabricatorData: PropTypes.object.isRequired,\r\n styles: PropTypes.object.isRequired,\r\n withTotal: PropTypes.bool,\r\n};\r\n\r\nexport default PrintDocumentDisclaimer\r\n","import React, {useEffect, useState} from 'react';\r\nimport axios from \"axios\";\r\nimport {connect} from \"react-redux\";\r\nimport {IntlProvider} from 'react-intl';\r\n// import en from \"react-intl/locale-data/en\";\r\nimport Papa from \"papaparse\";\r\nimport Config, {AVAILABLE_LANGUAGES, IS_LIXIL_SERVERS} from \"./config\";\r\nimport {baseNewImagesPath} from \"./bvcomponents/assets\";\r\nimport {\r\n hardCodeIsAmericanImport, hardCodeIsAmericanStandard,\r\n hardCodeIsCaesarStone,\r\n hardCodeIsEncore,\r\n hardCodeIsGraniteTransformationUK,\r\n hardCodeIsLowes, hardCodeIsMcDermott, hardCodeIsModerno\r\n} from \"./misc/fabricatorHardcode\";\r\nimport {usePrevious} from \"./misc/helperHooks\";\r\n// addLocaleData([...en]);\r\n\r\nexport let TRANSLATES = {};\r\n\r\nexport const isEnglish = (locale) => {\r\n return (locale !== \"fr-FR\") && (locale !== \"pl-PL\") && (locale !== \"es-ES\")\r\n}\r\n\r\nconst getCustomJson = async (fileName = \"\") => {\r\n try {\r\n const customJsonResponse = await axios.get(`${baseNewImagesPath}/translates/custom/${fileName}.json?v=1.0.0`);\r\n if (customJsonResponse && customJsonResponse.data) {\r\n return customJsonResponse.data\r\n }\r\n return {}\r\n } catch (e) {\r\n console.log(\"couldn't set translate\", e);\r\n return {}\r\n }\r\n}\r\n\r\nconst TranslatesProvider = (props) => {\r\n const {language, children, wasCreatedFromFabricator} = props;\r\n const [translations, setTranslations] = useState(null);\r\n const [renderLanguage, setRenderLanguage] = useState(language);\r\n\r\n const prevLanguage = usePrevious(language);\r\n const prevWasCreatedFromFabricator = usePrevious(wasCreatedFromFabricator);\r\n\r\n const parseTranslatesResponse = (response) => {\r\n // handle success\r\n let trans = {}\r\n Papa.parse(response.data, {\r\n complete: (results) => {\r\n // console.log(\"Finished:\", results.data);\r\n results.data[0].forEach((locale) => {\r\n if (locale !== \"key\") {\r\n trans[locale] = {}; // simple create an empty objects for each locale\r\n }\r\n });\r\n results.data.forEach((translatesArray, translatesArrayIndex) => { // vertical forEach\r\n if (translatesArrayIndex) { // not 0 (the first key line)\r\n const key = translatesArray[0]; // key, for ex. login.email\r\n translatesArray.forEach((translateValue, translateValueIndex) => { // horizontal forEach\r\n if (translateValueIndex) { // skip first key\r\n const locale = results.data[0][translateValueIndex]; // get first line and locale index\r\n trans[locale][key] = translateValue || translatesArray[1] // translate from column or english column\r\n }\r\n });\r\n }\r\n });\r\n }\r\n });\r\n return trans\r\n }\r\n\r\n const getCustomTranslates = (transDoc, localeString) => {\r\n let trans = {};\r\n Object.keys(transDoc)\r\n .filter(key => key.includes(localeString))\r\n .forEach(key => {\r\n Object.keys(transDoc[key]).forEach((sharedName) => {\r\n if (sharedName) {\r\n trans[`transDoc.${key}.${sharedName.trim()}`] = transDoc[key][sharedName]\r\n }\r\n })\r\n });\r\n return trans\r\n };\r\n\r\n const loadTranslates = async () => {\r\n const responseMain = await axios.get(baseNewImagesPath+'/translates/translates.csv?v=2.0.1');\r\n let trans = parseTranslatesResponse(responseMain);\r\n let customTranslates = {};\r\n if (language === \"en-AU\") {\r\n trans[\"en-AU\"] = {...trans[\"en-US\"]}\r\n customTranslates = await getCustomJson( \"en-AU\");\r\n }\r\n if (hardCodeIsLowes()) {\r\n customTranslates = await getCustomJson( \"Lowes\");\r\n const responseLowes = await axios.get(baseNewImagesPath+'/translates/translates_lowes.csv?v=1.13.1')\r\n const doc = parseTranslatesResponse(responseLowes);\r\n trans[\"fr-FR\"] = {...trans[\"fr-FR\"], ...getCustomTranslates(doc, \"_FR\")};\r\n trans[\"pl-PL\"] = {...trans[\"pl-PL\"], ...getCustomTranslates(doc, \"_PL\")};\r\n } else if (hardCodeIsCaesarStone()) {\r\n console.log(\"fabricatorData.wasCreatedFromFabricator\", wasCreatedFromFabricator);\r\n const jsonFile = wasCreatedFromFabricator === \"QC Master Account CAN\" ? \"Caesarstone(CAN)\" : \"Caesarstone\";\r\n customTranslates = await getCustomJson( jsonFile);\r\n const responseCaes = await axios.get(baseNewImagesPath + 'translates/translates_caes_v1.csv')\r\n const doc = parseTranslatesResponse(responseCaes);\r\n trans[\"fr-FR\"] = {...trans[\"fr-FR\"], ...getCustomTranslates(doc, \"_FR\")};\r\n } else if (hardCodeIsAmericanImport() || hardCodeIsAmericanStandard() || IS_LIXIL_SERVERS) {\r\n customTranslates = await getCustomJson( \"Lixil\");\r\n } else if (hardCodeIsGraniteTransformationUK()) {\r\n customTranslates = await getCustomJson( \"GT_UK\");\r\n } else if (hardCodeIsModerno()) {\r\n customTranslates = await getCustomJson( \"Moderno\");\r\n } else if (hardCodeIsMcDermott()) {\r\n customTranslates = await getCustomJson( \"McDermott\");\r\n } else if (hardCodeIsEncore()) {\r\n customTranslates = await getCustomJson( \"Encore\");\r\n }\r\n const responseSqft = await axios.get(baseNewImagesPath+'/translates/translates_sqft_v1.csv?ver=1.1.0');\r\n const transSqft = parseTranslatesResponse(responseSqft);\r\n for (let columnName in trans) {\r\n trans[columnName] = {...trans[columnName], ...transSqft[columnName]}\r\n }\r\n // delete trans[\"Location\"];\r\n // delete trans[\"Description & Context\"];\r\n TRANSLATES = {...trans[language], ...customTranslates[language]};\r\n setTranslations(TRANSLATES);\r\n if (Config.isDevMode()) {\r\n console.log(\"all translates:\", trans);\r\n console.log(\"current translates:\", trans[language]);\r\n }\r\n setRenderLanguage(language); // change frontend after load\r\n }\r\n\r\n useEffect(() => {\r\n if ((language && (prevLanguage !== language)) || (wasCreatedFromFabricator && (prevWasCreatedFromFabricator !== wasCreatedFromFabricator))) {\r\n if(document.kvConfig.kioskMode) {\r\n KioskApp.PostMessage({type: 'getTranslates'}).then(res => loadTranslates({data: res})).catch(console.error);\r\n } else {\r\n loadTranslates().catch(console.error);\r\n }\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [language, wasCreatedFromFabricator])\r\n\r\n return translations ? (\r\n console.info(error)}>\r\n {children}\r\n \r\n ) : null\r\n\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n fabricatorData: store.fabricatorState,\r\n wasCreatedFromFabricator: store.fabricatorState.wasCreatedFromFabricator,\r\n language: store.serverState.language,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(TranslatesProvider)\r\n","import {IntermediatePart} from \"../parts/intermediatePart\";\r\n\r\nexport default class Shadow extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'part_shadow';\r\n this.visible = false;\r\n this.partName = 'Part Shadow';\r\n }\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new Shadow());\r\n }\r\n}","import {Part} from \"./part\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport {wallsThumbnail} from \"../assets\";\r\n\r\nimport {Shower} from \"./shower\";\r\nimport {ShowerTubCombo} from \"./showerTubCombo\";\r\nimport Shadow from \"../subparts/shadow\";\r\nimport PonyWall from \"../subparts/wall/ponyWall\";\r\n\r\nimport WallA from \"../subparts/wall/wallA\";\r\nimport WallB from \"../subparts/wall/wallB\";\r\nimport WallC from \"../subparts/wall/wallC\";\r\nimport WallExR from \"../subparts/wall/wallExR\";\r\nimport WallExL from \"../subparts/wall/wallExL\";\r\nimport ExternallWall from \"../subparts/wall/externallWall\";\r\nimport VanityAccent from \"../subparts/wall/vanityAccent\";\r\nimport store from \"../../../../store\";\r\n\r\nexport class Wall extends Part {\r\n static id = 'Walls';\r\n\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Walls';\r\n this.translateId = \"visualizer.bathroom.walls\";\r\n this.partThumbnail = wallsThumbnail;\r\n\r\n // related items\r\n this.vanityAccent = null;\r\n this.wallExR = null;\r\n this.wallExL = null;\r\n this.wallA = null;\r\n this.wallB = null;\r\n this.wallC = null;\r\n this.ponyWall = null;\r\n this.allWallsApplied = true;\r\n }\r\n\r\n load(dbFeature) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"VanityAccent\":\r\n relatedItemName = \"vanityAccent\";\r\n RelatedItemClass = VanityAccent;\r\n break;\r\n case \"WallExtrusion\":\r\n case \"EX R\":\r\n relatedItemName = \"wallExR\";\r\n RelatedItemClass = WallExR;\r\n break;\r\n case \"ShowerDivider\":\r\n case \"EX L\":\r\n relatedItemName = \"wallExL\";\r\n RelatedItemClass = WallExL;\r\n break;\r\n case \"Wall A\":\r\n relatedItemName = \"wallA\";\r\n RelatedItemClass = WallA;\r\n break;\r\n case \"Wall B\":\r\n relatedItemName = \"wallB\";\r\n RelatedItemClass = WallB;\r\n break;\r\n case \"Wall C\":\r\n relatedItemName = \"wallC\";\r\n RelatedItemClass = WallC;\r\n break;\r\n case \"Pony Wall\":\r\n relatedItemName = \"ponyWall\";\r\n RelatedItemClass = PonyWall;\r\n break;\r\n case \"Shower Shadow\":\r\n if (\r\n dbFeature.displayName.includes(\"Shower Shadow - Divider Wall\")\r\n || dbFeature.displayName.includes(\"Shower Shadow - EX L\")\r\n || dbFeature.displayName.includes(\"Shower Shadow - EX R\")\r\n || dbFeature.displayName.includes(\"Shower Shadow - Popout\")\r\n || dbFeature.displayName.includes(\"Shower Shadow - Pony Wall\")\r\n ) {\r\n relatedItemName = \"shadows\";\r\n RelatedItemClass = Shadow;\r\n }\r\n break;\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n if (relatedItemName !== \"shadows\") {\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n if (relatedItemName === \"ponyWall\") {\r\n this[relatedItemName].type = Shower.Type.Custom;\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n setLayers(layout, placeholdersNeeded) {\r\n let res = [];\r\n this.relatedItems.forEach(relatedItem => {\r\n relatedItem.setLayers(layout);\r\n (placeholdersNeeded && !relatedItem.placeholderChanged && relatedItem.placeholderFeature)\r\n ? relatedItem.placeholderFeature.layer.addTo(res)\r\n : relatedItem.activeFeature ? relatedItem.activeFeature.layer.addTo(res) : null;\r\n if (relatedItem.shadowFeature) {\r\n relatedItem.shadowFeature.layer.addTo(res)\r\n }\r\n });\r\n return res.length ? res : null;\r\n }\r\n\r\n navigationItem() {\r\n return new DesignNavigationItem('Walls', this);\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n subParts() {\r\n\r\n const activeShowerGroup = this.getActiveShowerGroup();\r\n const ponyWallIsActive = activeShowerGroup.showerDimensions() === \"Pony\";\r\n\r\n const shower = this.layout.parts[Shower.id];\r\n // const vanityAccent = this.layout.parts[Vanity.id].vanityAccent;\r\n return this.relatedItems.filter(item => {\r\n if (item.isPonyWallPart) {\r\n item.visible = ponyWallIsActive\r\n }\r\n return item.visible\r\n }).filter(item => item && item.visible).filter((relatedItem) => {\r\n return !(shower.isComplete() &&\r\n (relatedItem instanceof WallExL\r\n || (relatedItem instanceof WallExR && shower.showerBody && !shower.showerBody.activeFeature.partName.includes(\"Complete\"))))\r\n }).map(_ => new DesignNavigationItem(_.partName, _));\r\n }\r\n\r\n setDefault(layout) {\r\n this.relatedItems.forEach(_ => _.setDefault(layout));\r\n }\r\n\r\n handleSubPartClick() {\r\n\r\n }\r\n\r\n recoverPrevioslySelected(activeRelatedPart) {\r\n const {activeQuoteIndex} = store.getState().quotesState;\r\n this.relatedItems.forEach(relatedItem => {\r\n if (relatedItem.partId !== activeRelatedPart.partId && relatedItem.activeFeatureBeforeAllWalls) {\r\n if (relatedItem.activeFeatureBeforeAllWalls === \"placeholder\") {\r\n relatedItem.placeholderChanged = false;\r\n relatedItem.firstClick[activeQuoteIndex] = false;\r\n if (relatedItem instanceof ExternallWall) { // there shouldn't be cases for this, but nevertheless, just in case\r\n relatedItem.selectedByUser = false\r\n }\r\n } else {\r\n if (!(relatedItem instanceof ExternallWall && relatedItem.selectedByUser)) {\r\n relatedItem.activeFeatureBeforeAllWalls.clickFromAllWalls();\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n showerTubComboIsActive() {\r\n const comboPart = this.layout.parts[ShowerTubCombo.id];\r\n return comboPart && comboPart.showerTubComboIsActive\r\n }\r\n\r\n getActiveShowerGroup() {\r\n return this.showerTubComboIsActive() ? this.layout.parts[ShowerTubCombo.id] : this.layout.parts[Shower.id];\r\n }\r\n\r\n}\r\n","import uniqBy from \"lodash/uniqBy\";\r\n\r\nimport {IntermediatePart} from \"../parts/intermediatePart\";\r\n\r\nexport default class NonVisualizerSubPart extends IntermediatePart {\r\n constructor(isChild, partId, partName) {\r\n super(isChild);\r\n this.partId = partId;\r\n this.visible = true;\r\n this.partName = partName;\r\n // this.allFeaturesReceived = true;\r\n }\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new NonVisualizerSubPart(false, this.partId, dbFeature.groupName));\r\n }\r\n navigationSubItems(filters, searchText) {\r\n const navSubItems = super.navigationSubItems(filters, searchText)\r\n return uniqBy(navSubItems, (navItem) => navItem.part.dbFeature.sharedFeatureName);\r\n }\r\n}\r\n","import {Part} from \"./part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport { showerAccessoriesThumbnail } from '../assets';\r\nimport LargeCornerSeat from \"../subparts/showerAccessories/largeCornerSeat\";\r\nimport SoapDish from \"../subparts/showerAccessories/soapDish\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport SmallCornerShelf from \"../subparts/showerAccessories/smallCornerShelf\";\r\nimport CornerCaddie from \"../subparts/showerAccessories/cornerCaddie\";\r\nimport LargeCornerCaddie from \"../subparts/showerAccessories/largeCornerCaddie\";\r\nimport GrabBar from \"../subparts/showerAccessories/grabBar\";\r\n\r\nexport class ShowerAccessories extends Part {\r\n static id = 'Shower Accessories';\r\n\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partThumbnail = showerAccessoriesThumbnail;\r\n this.partName = 'Shower Accessories';\r\n this.translateId = \"visualizer.bathroom.accessories\";\r\n this.relatedItems = [];\r\n\r\n // related items\r\n this.soapDish = null;\r\n this.largeCornerSeat = null;\r\n this.largeCornerCaddie = null;\r\n this.cornerCaddie = null;\r\n this.smallCornerShelf = null;\r\n this.grabBar = null;\r\n\r\n //current active caddie type\r\n this.caddie_type = \"large_corner_caddie\";\r\n\r\n }\r\n\r\n load(dbFeature) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Soap Dish\":\r\n relatedItemName = \"soapDish\";\r\n RelatedItemClass = SoapDish;\r\n break;\r\n case \"Large Corner Seat\":\r\n relatedItemName = \"largeCornerSeat\";\r\n RelatedItemClass = LargeCornerSeat;\r\n break;\r\n case \"Large Corner Caddie\":\r\n relatedItemName = \"largeCornerCaddie\";\r\n RelatedItemClass = LargeCornerCaddie;\r\n break;\r\n case \"Corner Caddie\":\r\n relatedItemName = \"cornerCaddie\";\r\n RelatedItemClass = CornerCaddie;\r\n break;\r\n case \"Small Corner Shelf\":\r\n relatedItemName = \"smallCornerShelf\";\r\n RelatedItemClass = SmallCornerShelf;\r\n break;\r\n case \"Grab Bar\":\r\n relatedItemName = \"grabBar\";\r\n RelatedItemClass = GrabBar;\r\n break;\r\n\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n if (relatedItemName !== \"shadows\") {\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n setLayers(layout, placeholdersNeeded) {\r\n const layers = [];\r\n this.getRelatedItems().forEach(relatedItem => {\r\n relatedItem.setLayers(layout);\r\n (placeholdersNeeded && !relatedItem.placeholderChanged && relatedItem.placeholderFeature)\r\n ? relatedItem.placeholderFeature.layer.addTo(layers)\r\n : relatedItem.activeFeature && relatedItem.activeFeature.layer.addTo(layers)\r\n });\r\n\r\n return layers;\r\n }\r\n\r\n subParts() {\r\n return this.getRelatedItems().map(_ => new DesignNavigationItem(_.partName, _));\r\n }\r\n\r\n navigationItem() {\r\n return new DesignNavigationItem(this.partName, this)\r\n }\r\n\r\n}\r\n\r\n","import React, {Component} from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {connect} from \"react-redux\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\n// import {Layout} from \"../../core/layout\";\r\n// import {PartMenuType} from \"../../constants\";\r\nimport SelectionMobileViewSwitchers from '../mobile/selectionMobileViewSwitchers';\r\nimport BodyPanelRadio from \"./bodyPanelRadio\";\r\nimport BodyPanelCheckbox from \"./bodyPanelCheckbox\";\r\nimport BodyPanelWizardSteps from \"./bodyPanelWizardSteps\";\r\n// import Analytics from \"../../../../analytics\";\r\nimport FilterSwitchers from \"../newFilters/filterSwitchers\";\r\nimport BodyPanelNavigationFiltersSteps from \"./bodyPanelNavigationFiltersSteps\";\r\nimport BacksplashSelect from \"../../../selectionWindow/backsplashSelect\";\r\nimport {CABINET_GROUP, COUNTERTOP_GROUP} from \"../../../kvComponent/core/constants\";\r\nimport CountertopSwitchers from \"../../../kvComponent/navigation/countertopSwitchers\";\r\nimport CabinetSwitchers from \"../../../kvComponent/navigation/cabinetSwitchers\";\r\nimport {CABINET_GROUP_BATHROOM, COUNTERTOP_GROUP_BATHROOM} from \"../../../bvSceneComponent/core/constants\";\r\nimport LookAllWallsRadioButton from \"../../../look/lookNavigation/lookMain/lookAllWallsRadioButton\";\r\nimport {getCurrentLayout} from \"../../../appLayout\";\r\nimport {featureInterface} from \"../../../../interfaces/featureInterface\";\r\n\r\nclass BodyPanel extends Component {\r\n\r\n static propTypes = {\r\n // layout: PropTypes.instanceOf(Layout),\r\n activePart: PropTypes.object.isRequired,\r\n activeSubPart: PropTypes.object,\r\n activeFeature: PropTypes.shape(featureInterface),\r\n toggleApplyWallsCheckbox: PropTypes.func,\r\n isWallItem: PropTypes.func,\r\n handleSubTypeClick: PropTypes.func,\r\n useWizard: PropTypes.bool,\r\n showFeatureWizard: PropTypes.bool,\r\n exitFeatureWizard: PropTypes.func,\r\n enableFeatureWizard: PropTypes.func,\r\n wizardGroups: PropTypes.array,\r\n filters: PropTypes.array,\r\n getFilterDisplayName: PropTypes.func.isRequired,\r\n toggleWizardFilterSelection: PropTypes.func,\r\n refreshCB: PropTypes.func,\r\n showFilterSelection: PropTypes.bool,\r\n showWizardGroupsSelection: PropTypes.bool,\r\n setStateActiveFeature: PropTypes.func,\r\n };\r\n\r\n backsplashSelectClick = (feature) => {\r\n this.props.refreshCB(); // update canvas\r\n this.props.refreshItems(); // update nav items\r\n if (this.props.setStateActiveFeature) {\r\n this.props.setStateActiveFeature(feature);\r\n }\r\n };\r\n\r\n renderAllWallsCheckbox = (showFilterSelection) => {\r\n const layout = getCurrentLayout();\r\n if (layout.isNewLayout) {\r\n return \r\n } else if (!showFilterSelection && this.props.activeSubPart && this.props.isWallItem(this.props.activeSubPart)\r\n && this.props.activeSubPart.partName !== \"Accent Wall\") {\r\n return \r\n }\r\n return null\r\n }\r\n\r\n render() {\r\n\r\n const showFilterSelection = this.props.showFilterSelection || this.props.showWizardGroupsSelection;\r\n const activeNavPart = this.props.activeSubPart || this.props.activePart;\r\n\r\n const fabricatorSettings = this.props.fabricatorData.settings;\r\n const useWizard = fabricatorSettings &&\r\n (fabricatorSettings.wizardConsumers || (fabricatorSettings.wizardClients && document.kvConfig.isBackend));\r\n\r\n let showNavigationFilters = useWizard && this.props.activeNavigationFilter\r\n && (this.props.activeNavigationFilter !== \"inlay_type\") && activeNavPart\r\n && activeNavPart.canUseNavigationFilter && activeNavPart.canUseNavigationFilter();\r\n\r\n if (useWizard && activeNavPart && activeNavPart.canUseNavigationFilterSteps\r\n && activeNavPart.canUseNavigationFilterSteps()) {\r\n showNavigationFilters = true;\r\n }\r\n\r\n const isCountertop = this.props.activeSubPart && (\r\n COUNTERTOP_GROUP.includes(this.props.activeSubPart.partId)\r\n || ((document.kvConfig.visualizerType === \"bvScene\" || document.kvConfig.visualizerType === \"Bathroom\")\r\n && COUNTERTOP_GROUP_BATHROOM.includes(this.props.activeSubPart.partId))\r\n );\r\n\r\n const isCabinet = this.props.activeSubPart && (CABINET_GROUP.includes(this.props.activeSubPart.partId)\r\n || (document.kvConfig.visualizerType === \"bvScene\" && CABINET_GROUP_BATHROOM.includes(this.props.activeSubPart.partId)));\r\n\r\n const layout = getCurrentLayout();\r\n\r\n return (\r\n
    \r\n

    {activeNavPart ? : null}

    \r\n
    \r\n {!showFilterSelection && this.props.activeSubPart && this.props.activeSubPart.canBeDisabled\r\n ? \r\n : null}\r\n {this.renderAllWallsCheckbox(showFilterSelection)}\r\n
    \r\n {/*{this.props.activePart.menuType === PartMenuType.Complex && this.props.activePart.subTypes().length && !showFilterSelection*/}\r\n {/* ? (*/}\r\n {/*
    */}\r\n {/*
    */}\r\n {/* {this.props.activePart.subTypes().map(subType => (*/}\r\n {/* */}\r\n {/* ))}*/}\r\n {/*
    */}\r\n {/*
    */}\r\n {/* ) : null}*/}\r\n {!showFilterSelection ? (\r\n
    \r\n \r\n
    \r\n ) : null}\r\n {this.props.useWizard && !this.props.showWizardGroupsSelection ? (\r\n \r\n ) : null}\r\n {activeNavPart.partId === \"backsplash\" ? : null}\r\n {isCountertop && !layout.isNewLayout ? : null}\r\n {isCabinet && !layout.isNewLayout ? : null}\r\n {showNavigationFilters ? (\r\n \r\n ) : null}\r\n {this.props.useFilters && !showFilterSelection ? (\r\n \r\n ) : null}\r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n activeNavigationFilter: store.navigationState.activeNavigationFilter,\r\n fabricatorData: store.fabricatorState,\r\n };\r\n};\r\nconst mapDispatchToProps = () => {\r\n return {};\r\n};\r\nexport default connect(mapStateToProps, mapDispatchToProps)(BodyPanel);\r\n","import {Part} from \"../part\";\r\nimport {wallsThumbnail} from \"../assets\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\n\r\nimport Ceiling from \"../subparts/walls/ceiling\";\r\nimport LeftWall from \"../subparts/walls/leftWall\";\r\nimport RightWall from \"../subparts/walls/rightWall\";\r\nimport PopoutWall from \"../subparts/walls/popoutWall\";\r\nimport Backsplash from \"../subparts/walls/backsplash\";\r\nimport store from \"../../../../store\";\r\n\r\nexport default class Walls extends Part {\r\n static id = 'Walls';\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Walls';\r\n this.partThumbnail = wallsThumbnail;\r\n this.translateId = \"visualizer.kitchen.walls\";\r\n\r\n // related items\r\n this.leftWall = null;\r\n this.rightWall = null;\r\n this.popoutWall = null;\r\n this.ceiling = null;\r\n this.backsplash = null;\r\n }\r\n\r\n load(dbFeature) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Left Wall\":\r\n relatedItemName = \"leftWall\";\r\n RelatedItemClass = LeftWall;\r\n break;\r\n case \"Right Wall\":\r\n relatedItemName = \"rightWall\";\r\n RelatedItemClass = RightWall;\r\n break;\r\n case \"Popout Wall\":\r\n relatedItemName = \"popoutWall\";\r\n RelatedItemClass = PopoutWall;\r\n break;\r\n case \"Backsplash\":\r\n case \"backsplash\":\r\n relatedItemName = \"backsplash\";\r\n RelatedItemClass = Backsplash;\r\n break;\r\n case \"Ceiling\":\r\n relatedItemName = \"ceiling\";\r\n RelatedItemClass = Ceiling;\r\n break;\r\n // case \"Shower Shadow\":\r\n // if (\r\n // dbFeature.displayName.includes(\"Shower Shadow - Divider Wall\")\r\n // || dbFeature.displayName.includes(\"Shower Shadow - EX L\")\r\n // || dbFeature.displayName.includes(\"Shower Shadow - EX R\")\r\n // || dbFeature.displayName.includes(\"Shower Shadow - Popout\")\r\n // || dbFeature.displayName.includes(\"Shower Shadow - Pony Wall\")\r\n // ) {\r\n // relatedItemName = \"shadows\";\r\n // RelatedItemClass = Shadow;\r\n // }\r\n // break;\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n if (relatedItemName !== \"shadows\") {\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n navigationItem() {\r\n return new DesignNavigationItem('Walls', this);\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n subParts(withHidden = true) {\r\n return this.relatedItems\r\n .filter(item => {\r\n if (item.partId === \"popout_wall\") {\r\n item.visible = item.getParent().layout.getCurrentLayoutAbbreviation().includes(\"P\")\r\n }\r\n return this.filterRelatedItem(item, withHidden)\r\n })\r\n .map(_ => new DesignNavigationItem(_.partName, _));\r\n }\r\n\r\n handleSubPartClick() {\r\n\r\n }\r\n\r\n recoverPrevioslySelected(activeRelatedPart) {\r\n const {activeQuoteIndex} = store.getState().quotesState;\r\n this.relatedItems.forEach(relatedItem => {\r\n if (relatedItem.partId !== activeRelatedPart.partId && relatedItem.activeFeatureBeforeAllWalls) {\r\n if (relatedItem.activeFeatureBeforeAllWalls === \"placeholder\") {\r\n relatedItem.placeholderChanged = false;\r\n relatedItem.firstClick[activeQuoteIndex] = false;\r\n } else if (!relatedItem.selectedByUser) {\r\n relatedItem.activeFeatureBeforeAllWalls.clickFromAllWalls();\r\n }\r\n }\r\n });\r\n }\r\n\r\n}\r\n","import uniqBy from \"lodash/uniqBy\";\r\n\r\nimport {IntermediatePart} from \"../intermediatePart\";\r\nimport store from \"../../../../store\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\n\r\nexport default class CountertopCommon extends IntermediatePart {\r\n\r\n constructor(props) {\r\n super(props);\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n let featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n\r\n let newFeatures = this.getSameEdgesFeatures(featuresToDisplay);\r\n\r\n const featuresThatLeft = featuresToDisplay.filter(feature => {\r\n return !newFeatures.some(newFeature => newFeature.dbFeature.customDisplayName === feature.dbFeature.customDisplayName)\r\n });\r\n\r\n featuresThatLeft.forEach(feature => {\r\n let currentFeatureName = feature.getCountertopGroupsSplittedFeatureName();\r\n if (newFeatures.every(countertopFeature => {\r\n let customDisplayName = countertopFeature.getCountertopGroupsSplittedFeatureName();\r\n return customDisplayName !== currentFeatureName\r\n })) {\r\n newFeatures.push(feature);\r\n }\r\n });\r\n\r\n return uniqBy(newFeatures, (feature) => feature.dbFeature.id)\r\n .map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n getSameEdgesFeatures(featuresToDisplay) {\r\n const filterGroups = store.getState().filterState.filterGroups;\r\n const edgeFilterGroup = filterGroups.find(group => group.name === \"Edge\" || group.name === \"Edge Profile\");\r\n if (edgeFilterGroup) {\r\n let activeFeatureEdgeFilter = this.getFeatureEdgeFilter(this.activeFeature, edgeFilterGroup); // 1) take edge filter from active feature\r\n if (!activeFeatureEdgeFilter) { // 2) try to set it from active edge feature group active feature\r\n const edgeFeatureGroup = this.getParent().edge;\r\n if (edgeFeatureGroup && edgeFeatureGroup.activeFeature) {\r\n activeFeatureEdgeFilter = this.getFeatureEdgeFilter(edgeFeatureGroup.activeFeature, edgeFilterGroup);\r\n }\r\n }\r\n if (!activeFeatureEdgeFilter) { // 3) find at least some feature with edge filter\r\n for (let i = 0; i < featuresToDisplay.length; i++) {\r\n const edgeFilters = this.getFeatureEdgeFilter(featuresToDisplay[i], edgeFilterGroup);\r\n if (edgeFilters) {\r\n activeFeatureEdgeFilter = edgeFilters;\r\n break;\r\n }\r\n }\r\n }\r\n if (activeFeatureEdgeFilter) {\r\n const activeEdgeFilter = activeFeatureEdgeFilter[0];\r\n const activeEdgeFilter2 = activeFeatureEdgeFilter[1];\r\n featuresToDisplay = featuresToDisplay.filter((feature) => {\r\n if (feature.notAvailableInVisualizer) {\r\n return false\r\n }\r\n const currentFeatureFilters = this.getFeatureEdgeFilter(feature, edgeFilterGroup);\r\n return currentFeatureFilters && (currentFeatureFilters.includes(activeEdgeFilter) || (\r\n activeEdgeFilter2 && currentFeatureFilters.includes(activeEdgeFilter2)\r\n ))\r\n });\r\n }\r\n }\r\n return featuresToDisplay\r\n }\r\n\r\n getFeatureEdgeFilter = (feature, edgeFilterGroup) => {\r\n if (!feature) {\r\n return null\r\n }\r\n if (!edgeFilterGroup) {\r\n const filterGroups = store.getState().filterState.filterGroups;\r\n edgeFilterGroup = filterGroups.find(group => group.name === \"Edge\" || group.name === \"Edge Profile\");\r\n }\r\n return feature.dbFeature.fabFilterValueIDs[edgeFilterGroup.id] || feature.dbFeature.filterValueIDs[edgeFilterGroup.id]\r\n };\r\n\r\n tryToSetTheSameFeature(filteredFeatures = [], partName = \"\") {\r\n if (this.activeFeature && this.activeFeature.partName) {\r\n let splittedFromTheLayoutName = partName\r\n ? this.removeLayoutFromPartName(partName)\r\n : this.activeFeature.getMatchingFeatureName();\r\n const allEdgesCountertops = filteredFeatures.filter(feature => {\r\n return feature.getMatchingFeatureName() === splittedFromTheLayoutName\r\n });\r\n const sameEdgeCountertops = this.getSameEdgesFeatures(allEdgesCountertops);\r\n this.activeFeature = sameEdgeCountertops[0] || allEdgesCountertops[0] || null\r\n if (this.activeFeature) {\r\n return true\r\n }\r\n }\r\n return false\r\n }\r\n\r\n setDefault() {\r\n const filteredFeatures = this.getArrayOfConditions\r\n ? this.features.filter(f => f.dbFeature.s3Bindings && f.matchesMetaForArrayOfConditions(this.getArrayOfConditions()))\r\n : this.features;\r\n const matchingFeatureExist = this.tryToSetTheSameFeature(filteredFeatures, null);\r\n if (!matchingFeatureExist) {\r\n const edge = this.getParent().edge;\r\n let matchingEdgeFeature = null;\r\n if (edge && edge.activeFeature) {\r\n matchingEdgeFeature = edge.getMatchingCounterTop(edge.activeFeature, filteredFeatures);\r\n }\r\n this.activeFeature = matchingEdgeFeature || filteredFeatures[0];\r\n }\r\n if (this.setActiveFeatureParts) {\r\n this.activeFeatureParts = this.setActiveFeatureParts();\r\n }\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../intermediatePart\";\r\nimport store from \"../../../../store\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport {getFilterGroupValueByName, getFilterGroupValues} from \"../../../../misc/utils\";\r\n\r\nexport default class EdgeCommon extends IntermediatePart {\r\n\r\n constructor(props) {\r\n super(props);\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n let featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n const edgeFilterGroup = this.getEdgeFilterGroup();\r\n const countertop = this.getParent().countertop;\r\n\r\n // here we check if some countertop has the same name as currently active countertop & it has edge filter\r\n if (edgeFilterGroup && countertop && countertop.activeFeature) {\r\n featuresToDisplay = featuresToDisplay.map((feature) => {\r\n feature.notAvailableInVisualizer = !this.getMatchingCounterTop(feature);\r\n return feature\r\n });\r\n }\r\n\r\n if (edgeFilterGroup && (this.partId === \"edge_profile\")) { // Waterfall check for back countertop\r\n const waterFallFilter = getFilterGroupValueByName(\"Waterfall\", edgeFilterGroup);\r\n if (waterFallFilter) {\r\n featuresToDisplay = featuresToDisplay.filter(feature => {\r\n const edgeFilters = getFilterGroupValues(feature, edgeFilterGroup)\r\n return !edgeFilters || !edgeFilters.includes(waterFallFilter.id)\r\n })\r\n }\r\n }\r\n\r\n return featuresToDisplay.map(_ => {\r\n const featurePart = new DesignNavigationItem(_.featureName, _);\r\n featurePart.notAvailableInVisualizer = featurePart.part.notAvailableInVisualizer;\r\n return featurePart\r\n });\r\n }\r\n\r\n handleClick(ignoreLocked) {\r\n super.handleClick(ignoreLocked); // set active edge feature\r\n this.matchingCounterTop = this.getMatchingCounterTop();\r\n console.log(\"this.matchingCounterTop\", this.matchingCounterTop);\r\n if (this.matchingCounterTop) {\r\n this.matchingCounterTop.handleClick(true);\r\n }\r\n this.featureClicked();\r\n }\r\n\r\n getMatchingCounterTop = (feature = this, countertopFeatures) => {\r\n const parent = feature.getParent();\r\n const countertop = parent.getParent().countertop;\r\n const edgeFilterGroup = feature.getEdgeFilterGroup();\r\n\r\n if (countertop && edgeFilterGroup) {\r\n const edgeFilterValue = feature.getEdgeFilterGroupFilters(feature, edgeFilterGroup);\r\n if (edgeFilterValue) {\r\n let matchingFeatures = (countertopFeatures || countertop.features).filter((feature) => {\r\n return (feature.dbFeature.filterValueIDs[edgeFilterGroup.id]\r\n && feature.dbFeature.filterValueIDs[edgeFilterGroup.id].some(edgeFilterId => {\r\n return edgeFilterValue.some(currentEdgeFilterId => currentEdgeFilterId === edgeFilterId)\r\n })) ||\r\n (feature.dbFeature.fabFilterValueIDs[edgeFilterGroup.id]\r\n && feature.dbFeature.fabFilterValueIDs[edgeFilterGroup.id].some(edgeFilterId => {\r\n return edgeFilterValue.some(currentEdgeFilterId => currentEdgeFilterId === edgeFilterId)\r\n }))\r\n });\r\n matchingFeatures = matchingFeatures.filter(feature => !feature.notAvailableInVisualizer)\r\n let matchingByName = feature.getMatchingCounterTopFeaturesBySplittedName(countertop, matchingFeatures);\r\n return matchingByName.length\r\n ? matchingByName[0]\r\n : matchingFeatures.length\r\n ? matchingFeatures[0]\r\n : null\r\n }\r\n }\r\n return null\r\n };\r\n\r\n getEdgeFilterGroupFilters = (feature, edgeFilterGroup) => {\r\n edgeFilterGroup = edgeFilterGroup || this.getEdgeFilterGroup();\r\n return getFilterGroupValues(feature, edgeFilterGroup)\r\n };\r\n\r\n getMatchingCounterTopFeaturesBySplittedName = (countertop, matchingFeatures = []) => { // array of sorted by filter features\r\n if (!countertop.activeFeature) {\r\n return []\r\n }\r\n let currentActiveName = countertop.activeFeature.getCountertopGroupsSplittedFeatureName();\r\n return matchingFeatures.filter(feature => {\r\n const currentFeatureName = feature.getCountertopGroupsSplittedFeatureName();\r\n return currentFeatureName === currentActiveName\r\n })\r\n };\r\n\r\n getEdgeFilterGroup = () => {\r\n const filterGroups = store.getState().filterState.filterGroups;\r\n return filterGroups.find(group => group.name === \"Edge\" || group.name === \"Edge Profile\");\r\n };\r\n\r\n getArrayOfConditions() {\r\n return []\r\n }\r\n\r\n canUseNavigationFilterSteps() {\r\n return true\r\n }\r\n\r\n setLayers() {\r\n return false\r\n }\r\n\r\n setZIndex() {\r\n return false\r\n }\r\n\r\n}\r\n","import React, {Component} from 'react';\r\nimport {connect} from 'react-redux';\r\nimport FilterSelection from \"./filterSelection\";\r\nimport PropTypes from \"prop-types\";\r\nimport {CABINET_WIZARD_BUTTONS, COUNTERTOP_WIZARD_BUTTONS} from \"../../../kvComponent/core/constants\";\r\nimport {\r\n setActiveNavigationFilter,\r\n setCountertopWizard,\r\n setActiveNavigationFilterStepIndex,\r\n setNavigationViewType\r\n} from \"../../../../actions/navigationFunctions\";\r\nimport {wizardAllButton} from \"../../../kvComponent/core/constants\";\r\nimport {setSelectedFilters} from \"../../../../actions/actionFunctions\";\r\nimport {replaceFilterArrayValue, toggleFilterArrayValue} from \"./filterSwitchers\";\r\nimport {getBvGroupFilterValues} from \"../../../../api/server-api\";\r\nimport {setAvailableFilterValues} from \"../../../../actions/filtersFunctions\";\r\nimport {s3FilterImagePath} from \"../../../../misc/utils\";\r\nimport {getAllFilterGroupValuesFromGroup} from \"../../../../misc/helpers\";\r\n\r\nclass NavigationFilters extends Component {\r\n\r\n static propTypes = {\r\n isMobile: PropTypes.bool,\r\n activePart: PropTypes.object.isRequired,\r\n onItemClick: PropTypes.func.isRequired,\r\n refreshCB: PropTypes.func.isRequired,\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n availableFilterValues: [],\r\n isLoading: false,\r\n filterGroup: {}\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n this.setAvailableFiltersValues(this.props);\r\n }\r\n\r\n componentWillReceiveProps(nextProps) {\r\n if ((nextProps.activePart && this.props.activePart && nextProps.activePart.partName !== this.props.activePart.partName)\r\n || (nextProps.activeNavigationFilter !== this.props.activeNavigationFilter)) {\r\n this.setAvailableFiltersValues(nextProps);\r\n }\r\n this.resetFilters(nextProps);\r\n }\r\n\r\n componentWillUnmount() {\r\n this.removeNavigationFiltersAndSetCommonView();\r\n }\r\n\r\n resetFilters(nextProps) {\r\n if ((nextProps.activeNavigationFilter !== this.props.activeNavigationFilter)\r\n && (nextProps.activeNavigationFilter === COUNTERTOP_WIZARD_BUTTONS[1].buttonId)\r\n && nextProps.selectedFilters.length\r\n ) {\r\n this.props.setSelectedFilters([]); // reset filters on color step\r\n }\r\n }\r\n\r\n getFilterGroupNameByButtonId(nextProps) {\r\n let activeButton = null;\r\n switch (nextProps.activePart.partId) {\r\n case \"top_cabinet\":\r\n case \"bottom_cabinet\":\r\n activeButton = CABINET_WIZARD_BUTTONS.find(button => button.buttonId === nextProps.activeNavigationFilter);\r\n break;\r\n case \"countertop\":\r\n case \"center_island_countertop\":\r\n activeButton = COUNTERTOP_WIZARD_BUTTONS.find(button => button.buttonId === nextProps.activeNavigationFilter);\r\n break;\r\n default:\r\n break;\r\n }\r\n return activeButton ? activeButton.filtersGroupName : \"\";\r\n }\r\n\r\n setAvailableFiltersValues(nextProps = this.props) {\r\n const filterGroupName = this.getFilterGroupNameByButtonId(nextProps);\r\n const filterGroup = nextProps.filterGroups.find(group => group.name === filterGroupName);\r\n if (filterGroup) {\r\n const selectedFilters = (filterGroup.name === COUNTERTOP_WIZARD_BUTTONS[2].filtersGroupName)\r\n ? nextProps.selectedFilters : []; // filter by selected filters only on 2nd(Material step)\r\n const availableFilterValues = FilterSelection.getAvailableFilterValues(\r\n nextProps.filterGroups, filterGroupName, nextProps.activePart, this.props.fabricatorData, selectedFilters\r\n );\r\n // console.log(\"availableFilterValues::\", availableFilterValues);\r\n const reorderedFilterValues = this.reorderFilterItems(nextProps, availableFilterValues);\r\n const countertopMaterialOrColor = (\r\n nextProps.activeNavigationFilter === COUNTERTOP_WIZARD_BUTTONS[1].buttonId\r\n || nextProps.activeNavigationFilter === COUNTERTOP_WIZARD_BUTTONS[2].buttonId\r\n );\r\n if (countertopMaterialOrColor ) {\r\n if (this.props.availableFilterValues[filterGroup.id]) {\r\n this.setToStateFilterValues([\"All\", ...this.props.availableFilterValues[filterGroup.id]], filterGroup);\r\n } else {\r\n this.setState({\r\n isLoading: true\r\n });\r\n getBvGroupFilterValues(nextProps.activePart.dbName || nextProps.activePart.partName, filterGroup.id)\r\n .then((response) => {\r\n this.props.setAvailableFilterValues({\r\n [filterGroup.id]: response.data\r\n });\r\n this.setToStateFilterValues([\"All\", ...response.data], filterGroup);\r\n })\r\n }\r\n } else {\r\n this.setToStateFilterValues(reorderedFilterValues, filterGroup);\r\n }\r\n }\r\n }\r\n\r\n setToStateFilterValues = (availableFilterValues, filterGroup) => {\r\n this.setState({\r\n isLoading: false,\r\n availableFilterValues,\r\n filterGroup\r\n })\r\n };\r\n\r\n setParentFilterValues = (filterValues) => {\r\n const nextProps = this.props;\r\n const filterGroupName = this.getFilterGroupNameByButtonId(nextProps);\r\n const filterGroup = nextProps.filterGroups.find(group => group.name === filterGroupName);\r\n const selectedFilters = (filterGroup.name === COUNTERTOP_WIZARD_BUTTONS[2].filtersGroupName)\r\n ? nextProps.selectedFilters : []; // filter by selected filters only on 2nd(Material step)\r\n\r\n let availableFilterValues = [];\r\n if (selectedFilters.length) {\r\n const colorFilterName = COUNTERTOP_WIZARD_BUTTONS[1].filtersGroupName;\r\n const colorFilterGroup = nextProps.filterGroups.find(group => {\r\n return group.name === colorFilterName\r\n });\r\n if (colorFilterGroup) {\r\n const selectedColorFilter = selectedFilters.find(filterG => filterG.filterGroupId === colorFilterGroup.id);\r\n const selectedColorValue = selectedColorFilter && selectedColorFilter.filterId;\r\n if (selectedColorValue || selectedColorValue === 0) {\r\n filterValues.forEach(filterValue => {\r\n if (nextProps.activePart.features.some(feature => {\r\n return feature.dbFeature\r\n && feature.dbFeature.filterValueIDs[filterGroup.id]\r\n && feature.dbFeature.filterValueIDs[filterGroup.id].includes(filterValue)\r\n && feature.dbFeature.filterValueIDs[colorFilterGroup.id]\r\n && feature.dbFeature.filterValueIDs[colorFilterGroup.id].includes(selectedColorValue)\r\n })) {\r\n availableFilterValues.push(filterValue)\r\n }\r\n })\r\n } else {\r\n availableFilterValues = filterValues;\r\n }\r\n } else {\r\n availableFilterValues = filterValues;\r\n }\r\n } else {\r\n availableFilterValues = filterValues;\r\n }\r\n const reorderedFilterValues = this.reorderFilterItems(this.props, availableFilterValues);\r\n this.setState({\r\n availableFilterValues: reorderedFilterValues\r\n })\r\n };\r\n\r\n reorderFilterItems = (nextProps, availableFilterValues) => {\r\n const currentActiveFilters = nextProps.activePart.activeFeature\r\n ? nextProps.activePart.activeFeature.dbFeature.filterValueIDs\r\n : {};\r\n // console.log(\"currentActiveFilters\", currentActiveFilters);\r\n return availableFilterValues.sort((a,b) => {\r\n const activeA = this.filterValueIsActive(currentActiveFilters, a);\r\n const activeB = this.filterValueIsActive(currentActiveFilters, b);\r\n return activeA !== activeB ? activeA < activeB ? -1 : 1 : 0;\r\n })\r\n };\r\n\r\n getFeatureBodyItemThumbnail = (currentFilterValue) => { // we have the logic with additionalImages in the FeatureWizardBody component\r\n const additionalImages = currentFilterValue.additionalImages;\r\n if (Array.isArray(additionalImages) && additionalImages.length) {\r\n return additionalImages[0].imageUrl\r\n }\r\n return s3FilterImagePath(currentFilterValue.icon);\r\n };\r\n\r\n filterValueIsActive = (currentActiveFilters, currentFilterValue) => {\r\n const activeNavigationFilter = this.props.activeNavigationFilter;\r\n const countertopMaterialOrColor = (\r\n activeNavigationFilter === COUNTERTOP_WIZARD_BUTTONS[1].buttonId\r\n || activeNavigationFilter === COUNTERTOP_WIZARD_BUTTONS[2].buttonId\r\n );\r\n if (countertopMaterialOrColor) {\r\n return false\r\n }\r\n if (activeNavigationFilter === \"inlay_type\" && this.state.filterGroup && this.state.filterGroup.values) {\r\n const modulePartJoined = this.props.moduleContextMenuModule + \"_\" + this.props.moduleContextMenuModulePart; //\"2_3\"\r\n for (let i = 0; i <= this.props.activePart.inlayTypes.length - 1; i++) {\r\n const inlayTypeObject = this.props.activePart.inlayTypes[i];\r\n const existingMJoined = inlayTypeObject.moduleParts.find(mJoined => mJoined === modulePartJoined);\r\n if (existingMJoined) { // not default!\r\n const fValue = this.state.filterGroup.values.find(val => val.value === inlayTypeObject.name);\r\n return fValue.id === currentFilterValue.id\r\n }\r\n }\r\n return currentFilterValue.value === this.props.activePart.defaultInlayType\r\n // } else if ((activeNavigationFilter === COUNTERTOP_WIZARD_BUTTONS[2].buttonId)\r\n // || (activeNavigationFilter === COUNTERTOP_WIZARD_BUTTONS[3].buttonId)) {\r\n // // return this.props.counterTopWizard[activeNavigationFilter] === currentFilterValue.id\r\n // const selectedFilter = this.props.selectedFilters.find(selectedF => {\r\n // return selectedF.filterGroupId === this.state.filterGroup.id\r\n // });\r\n // return (currentFilterValue.id === \"All\")\r\n // ? !selectedFilter\r\n // : selectedFilter && (selectedFilter.filterId === currentFilterValue.id)\r\n }\r\n\r\n return this.state.filterGroup && currentActiveFilters[this.state.filterGroup.id]\r\n && currentActiveFilters[this.state.filterGroup.id].includes(currentFilterValue.id);\r\n };\r\n\r\n removeNavigationFiltersAndSetCommonView = () => {\r\n const commonView = (this.props.windowWidth < 991) ? 4 : 3;\r\n if ((this.props.activeNavigationFilter === COUNTERTOP_WIZARD_BUTTONS[2].buttonId)\r\n && this.props.navigationViewType !== commonView) {\r\n this.props.setNavigationViewType(commonView);\r\n }\r\n this.props.setActiveNavigationFilter(null);\r\n };\r\n\r\n handleFilterValueClick = (currentFilterValue) => {\r\n // if (isActive) {\r\n // return // we don't need to do anything on active item click\r\n // }\r\n // console.log(\"currentFilterValue\", currentFilterValue);\r\n switch (this.props.activeNavigationFilter) {\r\n case \"inlay_type\": {\r\n const modulePartJoined = this.props.moduleContextMenuModule + \"_\" + this.props.moduleContextMenuModulePart; //\"2_3\"\r\n let neededInlayTypesObject = this.props.activePart.inlayTypes.find(obj => obj.name === currentFilterValue.value);\r\n if (currentFilterValue.value !== this.props.activePart.defaultInlayType) {\r\n if (!neededInlayTypesObject) {\r\n neededInlayTypesObject = {name: currentFilterValue.value, moduleParts: []}; // create new & push\r\n this.props.activePart.inlayTypes.push(neededInlayTypesObject);\r\n }\r\n if (!neededInlayTypesObject.moduleParts.includes(modulePartJoined)) {\r\n neededInlayTypesObject.moduleParts.push(modulePartJoined);\r\n this.props.activePart.activeFeatureParts = this.props.activePart.setActiveFeatureParts();\r\n this.props.refreshCB();\r\n }\r\n } else { // it is default type, we need to remove it from the not-default inlayTypes\r\n this.props.activePart.inlayTypes.forEach(inlayTypeObj => {\r\n const existingMJoinedIndex = inlayTypeObj.moduleParts.findIndex(mJoined => mJoined === modulePartJoined);\r\n if (existingMJoinedIndex > -1) {\r\n inlayTypeObj.moduleParts.splice(existingMJoinedIndex, 1);\r\n this.props.activePart.activeFeatureParts = this.props.activePart.setActiveFeatureParts();\r\n this.props.refreshCB();\r\n }\r\n });\r\n }\r\n this.forceUpdate(); // re-render to set new active item\r\n break;\r\n }\r\n case COUNTERTOP_WIZARD_BUTTONS[1].buttonId:\r\n case COUNTERTOP_WIZARD_BUTTONS[2].buttonId: {\r\n // this.props.setCountertopWizard({ // not needed for now, but probably we would need this logic in future\r\n // [this.props.activeNavigationFilter] : currentFilterValue.id\r\n // });\r\n if (currentFilterValue.id === \"All\") {\r\n const selectedFilter = this.props.selectedFilters.find(selectedF => {\r\n return selectedF.filterGroupId === this.state.filterGroup.id\r\n });\r\n if (selectedFilter) { // should work always, but just in case\r\n this.props.setSelectedFilters(toggleFilterArrayValue([...this.props.selectedFilters], {\r\n filterId: selectedFilter.filterId,\r\n filterGroupId: this.state.filterGroup.id\r\n })); // remove selected filter\r\n }\r\n this.removeNavigationFiltersAndSetCommonView();\r\n } else if (Array.isArray(currentFilterValue.items) && currentFilterValue.items.length) {\r\n this.setParentFilterValues(currentFilterValue.items.map(fValue => fValue.id))\r\n } else {\r\n this.props.setSelectedFilters(replaceFilterArrayValue([...this.props.selectedFilters], {\r\n filterId: currentFilterValue.id,\r\n filterGroupId: this.state.filterGroup.id\r\n }));\r\n this.removeNavigationFiltersAndSetCommonView();\r\n }\r\n break;\r\n }\r\n default: {\r\n let matchingFeatures = this.props.activePart.features.filter((feature) => {\r\n return this.state.filterGroup && feature.dbFeature.filterValueIDs[this.state.filterGroup.id]\r\n && feature.dbFeature.filterValueIDs[this.state.filterGroup.id].includes(currentFilterValue.id)\r\n });\r\n if (this.props.activePart.partId === \"top_cabinet\" && this.props.activePart.activeFeature.metaData[\"Module\"]) {\r\n const activeFeatureNameSplitted = this.props.activePart.activeFeature.partName.split(\" M \");\r\n matchingFeatures = matchingFeatures.filter((feature) => {\r\n const featureNameSplitted = feature.partName.split(\" M \");\r\n return (featureNameSplitted.length > 1) && (activeFeatureNameSplitted.length > 1)\r\n && featureNameSplitted[1] === activeFeatureNameSplitted[1]\r\n })\r\n } else if (this.props.activePart.partId === \"bottom_cabinet\" && this.props.activePart.activeFeature.metaData[\"Module\"]) {\r\n matchingFeatures = matchingFeatures.filter((feature) => feature.metaData[\"Appliance\"]\r\n && feature.metaData[\"Appliance\"].includes(\"Range\"))\r\n } else if (this.props.activePart.partId === \"countertop\" || this.props.activePart.partId === \"center_island_countertop\") {\r\n matchingFeatures = this.getMatchingFeaturesBySplittedName(matchingFeatures);\r\n }\r\n if (matchingFeatures.length) {\r\n this.props.onItemClick({part:matchingFeatures[0]}, true);\r\n this.forceUpdate(); // re-render to set new active item\r\n }\r\n break;\r\n }\r\n }\r\n\r\n };\r\n\r\n getMatchingFeaturesBySplittedName = (matchingFeatures = []) => { // array of sorted by filter features\r\n let currentActiveName = this.props.activePart.activeFeature.partName;\r\n const filterGroupName = this.getFilterGroupNameByButtonId(this.props);\r\n const filterGroup = this.props.filterGroups.find(group => group.name === filterGroupName);\r\n if (filterGroup && filterGroup.values && filterGroup.values.length) {\r\n filterGroup.values.forEach((filterGroupValue) => { // arrayOf {id: 293, value: \"Eased\", displayText: \"Eased\", parent_id: null, icon: \"\", …}\r\n currentActiveName = currentActiveName.split(\" \"+filterGroupValue.value).join(\"\");\r\n });\r\n }\r\n return matchingFeatures.filter(feature => {\r\n let featureName = feature.partName;\r\n filterGroup.values.forEach((filterGroupValue) => { // arrayOf {id: 293, value: \"Eased\", displayText: \"Eased\", parent_id: null, icon: \"\", …}\r\n featureName = featureName.split(\" \"+filterGroupValue.value).join(\"\");\r\n });\r\n return featureName === currentActiveName\r\n })\r\n };\r\n\r\n getFilterFeatureItem = (filterValue, currentIndex, currentActiveFilters) => {\r\n const currentFilterValue = filterValue === \"All\"\r\n ? wizardAllButton\r\n : getAllFilterGroupValuesFromGroup(this.state.filterGroup).find(val => val.id === filterValue); // Object\r\n if (!currentFilterValue) {\r\n // console.log(\"NO filterValue!\", filterValue, currentIndex, this.state.availableFilterValues);\r\n return;\r\n }\r\n let thumbnail = this.getFeatureBodyItemThumbnail(currentFilterValue);\r\n\r\n const styles = {\r\n backgroundSize: this.props.activeNavigationFilter === \"color\" ? \"cover\" : \"inherit\"\r\n };\r\n if (thumbnail) {\r\n styles.backgroundImage = \"url(\" + thumbnail + \")\";\r\n }\r\n if (!thumbnail && currentFilterValue && this.props.activeNavigationFilter === \"color\") {\r\n styles.backgroundColor = currentFilterValue.value;\r\n }\r\n if (filterValue === \"All\") {\r\n styles.backgroundSize = (this.props.windowWidth < 991) ? \"70%\" : \"50%\";\r\n styles.backgroundPosition = \"top 30% center\";\r\n }\r\n const isActive = this.filterValueIsActive(currentActiveFilters, currentFilterValue);\r\n\r\n return this.props.isMobile ? (\r\n
  • \r\n
    this.handleFilterValueClick(currentFilterValue)}\r\n style={styles}>\r\n
    \r\n {currentFilterValue.displayText}\r\n
    \r\n
    \r\n
  • \r\n ) : (\r\n
    this.handleFilterValueClick(currentFilterValue)}\r\n style={styles}>\r\n
    \r\n {currentFilterValue.displayText}\r\n
    \r\n
    \r\n )\r\n };\r\n\r\n renderMobileFiltersList = () => {\r\n\r\n if (this.state.isLoading) {\r\n return this.renderLoadingList();\r\n }\r\n\r\n const currentActiveFilters = this.props.activePart.activeFeature\r\n ? this.props.activePart.activeFeature.dbFeature.filterValueIDs\r\n : {};\r\n\r\n if (!this.state.filterGroup || !this.state.filterGroup.values) {\r\n return [];\r\n }\r\n\r\n return this.state.availableFilterValues.map((filterValue, filterValueIndex) => {\r\n return this.getFilterFeatureItem(filterValue, filterValueIndex, currentActiveFilters)\r\n })\r\n };\r\n\r\n renderFiltersList = () => {\r\n\r\n const currentActiveFilters = this.props.activePart.activeFeature\r\n ? this.props.activePart.activeFeature.dbFeature.filterValueIDs\r\n : {};\r\n\r\n const navigationViewType = this.props.navigationViewType === 3 ? 2 : 1;\r\n const elements = [];\r\n for (let i = 0; i <= Math.ceil(this.state.availableFilterValues.length - 1 / navigationViewType); i++ ) { // for ex. 28/3 = 10 columns\r\n const innerElements = [];\r\n for (let j = 0; j < navigationViewType;j++ ) {\r\n const currentIndex = j+(i*navigationViewType);\r\n // console.log(\"currentIndex\", currentIndex);\r\n const filterValue = this.state.availableFilterValues[currentIndex]; // Number, for example 1031\r\n if (!this.state.filterGroup || !this.state.filterGroup.values) {\r\n break;\r\n }\r\n innerElements.push(this.getFilterFeatureItem(filterValue, currentIndex, currentActiveFilters));\r\n }\r\n elements.push(\r\n
  • \r\n {innerElements}\r\n
  • \r\n );\r\n }\r\n\r\n return elements\r\n };\r\n\r\n renderLoadingList() {\r\n return
    \r\n }\r\n\r\n render() {\r\n return this.props.isMobile ? this.renderMobileFiltersList() : (\r\n
      \r\n {this.state.isLoading ? this.renderLoadingList() : this.renderFiltersList()}\r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n filterGroups: store.filterState.filterGroups,\r\n fabricatorData: store.fabricatorState,\r\n activeNavigationFilter: store.navigationState.activeNavigationFilter,\r\n moduleContextMenuModule: store.navigationState.moduleContextMenuModule,\r\n moduleContextMenuModulePart: store.navigationState.moduleContextMenuModulePart,\r\n counterTopWizard: store.navigationState.counterTopWizard,\r\n navigationViewType: store.navigationState.navigationViewType,\r\n selectedFilters: store.filterState.selectedFilters,\r\n availableFilterValues: store.filterState.availableFilterValues,\r\n windowWidth: store.serverState.windowWidth,\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, {\r\n setCountertopWizard,\r\n setSelectedFilters,\r\n setActiveNavigationFilter,\r\n setActiveNavigationFilterStepIndex,\r\n setNavigationViewType,\r\n setAvailableFilterValues,\r\n})(NavigationFilters);\r\n","import React, {Component} from 'react';\r\nimport {connect} from 'react-redux';\r\nimport PropTypes from 'prop-types';\r\nimport $ from \"jquery\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\n\r\nimport SelectionMobileViewSwitchers from '../mobile/selectionMobileViewSwitchers';\r\nimport FeatureWizardSteps from './featureWizardSteps';\r\nimport FeatureWizardBody from './featureWizardBody';\r\nimport UserLoginButton from './../../../ui/userLoginButton';\r\nimport BodyPanel from \"../desktop/bodyPanel\";\r\nimport ActionTypes from \"../../../../misc/actionTypes\";\r\nimport {NotQCVanityDoorStylesFilters} from \"../../../bvComponent/core/constants\";\r\nimport {UserPopupTypes} from \"../../constants\";\r\n\r\nclass FeatureWizard extends Component {\r\n\r\n static propTypes = {\r\n features: PropTypes.array.isRequired,\r\n exitFeatureWizard: PropTypes.func.isRequired,\r\n handleNavigationItemClick: PropTypes.func.isRequired,\r\n isMobile: PropTypes.bool.isRequired,\r\n wizardGroups: PropTypes.array.isRequired,\r\n setWizardGroups: PropTypes.func.isRequired,\r\n changeMessageBoxState: PropTypes.func.isRequired,\r\n setWizardLockedItem: PropTypes.func,\r\n isPhoneNumberValidated: PropTypes.bool,\r\n userIsLoggedIn: PropTypes.bool,\r\n toggleUserPopup: PropTypes.func,\r\n searchText: PropTypes.string,\r\n // bodyPanelNeededProps\r\n activePart: PropTypes.object,\r\n activeSubPart: PropTypes.object,\r\n toggleApplyWallsCheckbox: PropTypes.func,\r\n isWallItem: PropTypes.func,\r\n handleSubTypeClick: PropTypes.func,\r\n getFilterDisplayName: PropTypes.func,\r\n showerWallWizardGroupsSelected: PropTypes.bool,\r\n toggleWizardFilterSelection: PropTypes.func,\r\n handleSearchInputChange: PropTypes.func,\r\n // bodyPanelNeededProps end\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n window.itemClickCount = window.itemClickCount || 0;\r\n window.allowClickLeadCapturePopup = true;\r\n this.state = {\r\n availableSteps: [],\r\n defaultSteps: [],\r\n featureWizardStep: 0,\r\n showMobileGroups: false,\r\n mounted: false,\r\n finishClicked: true,\r\n filteredFeatures: [],\r\n reload: false\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n let availableSteps = [];\r\n // const fabricatorSettings = this.props.fabricatorData.settings;\r\n const filteredFeatures = this.getFilteredFeatures();\r\n const itemIsSelected = this.activeItemIsSelected();\r\n\r\n filteredFeatures.forEach((feature) => {\r\n this.props.wizardGroups.forEach((wizardGroup) => {\r\n // console.log('wizardGroup', wizardGroup);\r\n const filter = this.props.filterGroups.find(filterGroup => filterGroup.name.trim() === wizardGroup.filterName);\r\n if (filter) {\r\n const filterId = filter.id;\r\n\r\n let currentFilter = availableSteps.find(step => step.filterName === wizardGroup.filterName);\r\n if (!currentFilter) {\r\n currentFilter = {\r\n filterName: wizardGroup.filterName,\r\n values: wizardGroup.values || [],\r\n id: filterId,\r\n selectedValueId: wizardGroup.selectedValueId,\r\n selectedValueName: wizardGroup.selectedValueName,\r\n hidden: this.checkStepForHidden(filter.name),\r\n hasValues: false\r\n };\r\n availableSteps.push(currentFilter);\r\n }\r\n\r\n const sizeIds = feature.dbFeature.filterValueIDs[filterId];\r\n if (sizeIds) {\r\n if (!currentFilter.hasValues) {\r\n currentFilter.hasValues = true;\r\n }\r\n sizeIds.forEach(filterValue => {\r\n const filterValueExist = currentFilter.values.find(wizardValueObject => +wizardValueObject.filterValue === +filterValue);\r\n if (!filterValueExist) {\r\n let doNotPush = false;\r\n if (currentFilter.filterName === \"DoorStyle\" || currentFilter.filterName === \"Material\") {\r\n const fValue = filter.values.find(val => val.id === filterValue);\r\n if (fValue) {\r\n if (fValue.value === \"QC Hermosa\" || (fValue.value === \"Slab\" && this.props.fabricatorData.isRebath)) {\r\n doNotPush = true\r\n }\r\n }\r\n }\r\n if (!doNotPush) {\r\n currentFilter.values.push({\r\n selectionAvailable: true,\r\n filterValue\r\n })\r\n }\r\n }\r\n });\r\n }\r\n }\r\n });\r\n });\r\n\r\n availableSteps = availableSteps.filter(currentFilter => currentFilter.hasValues); // we might have no filter values\r\n\r\n const allStepsCompleted = availableSteps.every(step => step.selectedValueId);\r\n if (itemIsSelected && this.props.activeSubPart.activeFeature) { // set active filters from the active item\r\n // if (this.props.activeSubPart.activeFeature && this.props.activeSubPart.firstClick[this.props.activeQuoteIndex] && this.props.activeSubPart.placeholderChanged) {\r\n const currentActiveFilters = this.props.activeSubPart.activeFeature.dbFeature.filterValueIDs;\r\n availableSteps = availableSteps.map(step => {\r\n const filterGroup = this.props.filterGroups.find(filterGroup => {\r\n return filterGroup.id === step.id\r\n });\r\n let filterGroupValue = {};\r\n if (currentActiveFilters[step.id]) {\r\n const selectedFilterValueId = currentActiveFilters[step.id][0];\r\n filterGroupValue = filterGroup && filterGroup.values.find(filterGroupValue => {\r\n return filterGroupValue.id === selectedFilterValueId\r\n });\r\n }\r\n if (filterGroupValue) {\r\n step.selectedValueName = filterGroupValue.displayText;\r\n step.selectedValueId = filterGroupValue.id;\r\n }\r\n step.selectedItemIsLocked = this.getLockedPropertyValueObjectById(filterGroupValue, filterGroupValue.id, step.id, filteredFeatures);\r\n return step\r\n })\r\n }\r\n\r\n this.setState({\r\n filteredFeatures,\r\n defaultSteps: availableSteps.map(a => Object.assign({}, a)), // they need to be different\r\n availableSteps: availableSteps.map(b => Object.assign({}, b)),\r\n // showMobileGroups: allStepsCompleted,\r\n featureWizardStep: this.props.wizardStepIndex <= availableSteps.filter(step => !step.hidden).length - 1 ? this.props.wizardStepIndex : 0,\r\n finishClicked: allStepsCompleted\r\n }, () => {\r\n if (this.activeItemIsSelected()) {\r\n this.updateStepValues(availableSteps);\r\n }\r\n this.setLockedView();\r\n setTimeout(() => {\r\n this.setState({\r\n mounted: true\r\n });\r\n }, 0)\r\n });\r\n $(document).on(ActionTypes.USER_IS_LOGGED_IN, this.userHasLoggedIn);\r\n }\r\n\r\n componentWillUnmount = () => {\r\n this.props.setWizardGroups(this.state.availableSteps, this.props.activeSubPart.partId);\r\n $(document).off(ActionTypes.USER_IS_LOGGED_IN, this.userHasLoggedIn);\r\n };\r\n\r\n componentWillReceiveProps(nextProps) {\r\n if (nextProps.activeSubPart && this.props.activeSubPart && (nextProps.activeSubPart.partId !== this.props.activeSubPart.partId)) {\r\n this.componentDidMount();\r\n }\r\n }\r\n\r\n updateStepValues = (availableSteps = this.state.availableSteps, forceClick = false) => {\r\n this.setState({\r\n reload: forceClick,\r\n availableSteps: availableSteps.map((step, stepIndex) => {\r\n step.values = this.setStepValues(step, stepIndex);\r\n return step\r\n })\r\n }, () => {\r\n if (forceClick) {\r\n this.setState({\r\n reload: false\r\n })\r\n }\r\n })\r\n };\r\n\r\n getFilteredFeatures = () => {\r\n const activePart = this.props.activeSubPart;\r\n if (activePart.partId === \"shower_interior_wall\") {\r\n return activePart.navigationSubItemsWithFilterMultipleConditions(activePart.getArrayOfConditions())\r\n }\r\n return this.props.features.filter(feature => {\r\n return !feature.dbFeature.displayName.includes(\"Hermosa\")\r\n })\r\n };\r\n\r\n getLockedPropertyValueObjectById = (currentFilterValue, filterValueId, stepId, filteredFeatures = this.state.filteredFeatures) => {\r\n const fabricatorSettings = this.props.fabricatorData.settings;\r\n filteredFeatures = filteredFeatures.filter(feature => {\r\n return !feature.dbFeature.displayName.includes(\"laceholder\")\r\n });\r\n let itemIsLocked = false;\r\n if (fabricatorSettings.leadCapture && !this.props.isPhoneNumberValidated && !(document.kvConfig.isBackend && document.kvConfig.jobId && document.kvConfig.canSaveQuote)) {\r\n if (currentFilterValue.lockedInWizard || !filteredFeatures.some(feature => {\r\n // console.log('bject.keys(feature.dbFeature.filterValueIDs)', Object.keys(feature.dbFeature.filterValueIDs));\r\n const filterToFind = feature.dbFeature.filterValueIDs[stepId];\r\n return filterToFind && filterToFind.includes(filterValueId) && feature.dbFeature.unlocked;\r\n })) {\r\n itemIsLocked = true\r\n }\r\n }\r\n return itemIsLocked\r\n };\r\n\r\n userHasLoggedIn = () => {\r\n const currentStep = this.state.availableSteps.filter(step => !step.hidden)[this.state.featureWizardStep];\r\n if (currentStep.selectedValueId) {\r\n const selectedValue = currentStep.values.find(val => val.filterValue === currentStep.selectedValueId);\r\n if (selectedValue) { // just in case, we might remove this check\r\n this[selectedValue.selectionAvailable ? \"onItemClick\" : \"onItemClickDisabled\"](\r\n {\r\n id:currentStep.selectedValueId,\r\n value: currentStep.selectedValueName,\r\n displayText: currentStep.selectedValueName\r\n },\r\n false,\r\n currentStep.filterName\r\n )\r\n }\r\n }\r\n };\r\n\r\n activeItemIsSelected = () => {\r\n const fabricatorSettings = this.props.fabricatorData.settings;\r\n const activeSubPart = this.props.activeSubPart;\r\n return (!fabricatorSettings.leadCapture\r\n || (activeSubPart.activeFeature && !activeSubPart.activeFeature.partName.includes(\"WizardPlaceholder\")\r\n && activeSubPart.firstClick[this.props.activeQuoteIndex] && activeSubPart.placeholderChanged));\r\n };\r\n\r\n checkStepForHidden = (filterGroupName) => {\r\n let hidden = false;\r\n filterGroupName = filterGroupName.trim().toLowerCase();\r\n if (this.activeItemIsSelected() && this.props.activeSubPart.activeFeature) {\r\n\r\n const currentActiveFilters = this.props.activeSubPart.activeFeature.dbFeature.filterValueIDs;\r\n\r\n if (this.props.activeSubPart.partId === \"shower_interior_wall\") {\r\n const materialFilter = this.props.filterGroups.find(filterGroup => filterGroup.name.trim() === \"Material\");\r\n if (materialFilter && currentActiveFilters[materialFilter.id]) { // check for existing BV filters\r\n const materialValueId = currentActiveFilters[materialFilter.id][0];\r\n const materialValue = materialFilter.values.find(val => val.id === materialValueId);\r\n if (materialValue && (\r\n (materialValue.value !== \"DuraBath\" && filterGroupName === \"durabathcolor\")\r\n || (materialValue.value !== \"DuraBath\" && materialValue.value !== \"Tile\" && filterGroupName === \"tilepattern\")\r\n || (materialValue.value !== \"Acrylic\" && filterGroupName === \"acrylicpattern\")\r\n || (materialValue.value !== \"Acrylic\" && filterGroupName === \"acryliccolor\")\r\n || (materialValue.value !== \"Tile\" && filterGroupName === \"tilecolor\")\r\n || (materialValue.value !== \"Slab\" && materialValue.value !== \"DuraBath Natural Stone\" && filterGroupName === \"slabcolor\")\r\n )) {\r\n hidden = true;\r\n }\r\n }\r\n } else if (this.props.activeSubPart.partId === \"vanity_cabinet\") {\r\n const doorStyleFilter = this.props.filterGroups.find(filterGroup => filterGroup.name.trim() === \"DoorStyle\");\r\n if (doorStyleFilter && currentActiveFilters[doorStyleFilter.id]) { // check for existing BV filters\r\n const doorStyleValueId = currentActiveFilters[doorStyleFilter.id][0];\r\n const doorStyleValue = doorStyleFilter.values.find(val => val.id === doorStyleValueId);\r\n if (doorStyleValue && (\r\n (!NotQCVanityDoorStylesFilters.includes(doorStyleValue.value) && filterGroupName === \"material\")\r\n )) {\r\n hidden = true;\r\n }\r\n }\r\n }\r\n } else if (this.props.activeSubPart.partId === \"shower_interior_wall\") {\r\n const wizardFilters = [\"slabcolor\", \"tilecolor\", \"tilepattern\", \"acrylicpattern\", \"acryliccolor\"];\r\n hidden = wizardFilters.includes(filterGroupName);\r\n } else if (this.props.activeSubPart.partId === \"vanity_cabinet\") {\r\n hidden = filterGroupName === \"material\"\r\n }\r\n return hidden\r\n };\r\n\r\n setLockedView = () => {\r\n\r\n const fabricatorSettings = this.props.fabricatorData.settings;\r\n\r\n const currentStep = this.state.availableSteps.filter(step => !step.hidden)[this.state.featureWizardStep];\r\n if (currentStep && currentStep.selectedValueId && fabricatorSettings.leadCapture && !this.props.isPhoneNumberValidated) {\r\n const currentGroup = this.props.filterGroups.find((filterGroup) => {\r\n return filterGroup.id === currentStep.id\r\n });\r\n const currentFilterValue = currentGroup.values.find(currentGroupValue => {\r\n return currentGroupValue.id === currentStep.selectedValueId\r\n });\r\n const filteredFeatures = this.state.filteredFeatures.filter(feature => {\r\n return !feature.dbFeature.displayName.includes(\"laceholder\")\r\n });\r\n\r\n let itemIsLocked = false;\r\n if (currentFilterValue.lockedInWizard || !filteredFeatures.some(feature => {\r\n // console.log('bject.keys(feature.dbFeature.filterValueIDs)', Object.keys(feature.dbFeature.filterValueIDs));\r\n const filterToFind = feature.dbFeature.filterValueIDs[currentStep.id];\r\n return filterToFind && filterToFind.includes(currentStep.selectedValueId) && feature.dbFeature.unlocked;\r\n })) {\r\n itemIsLocked = true\r\n }\r\n\r\n this.props.setWizardLockedItem(itemIsLocked);\r\n }\r\n };\r\n\r\n // getCurrentFilterObject = (stepIndex) => {\r\n getCurrentFilterObject = () => {\r\n const selectedFilterObject = {};\r\n // const availableSteps = (stepIndex || stepIndex === 0)\r\n // ? this.state.availableSteps.slice(0, stepIndex) // we need to get only previous selected values if index is passed\r\n // : this.state.availableSteps;\r\n this.state.availableSteps.filter(step => !step.hidden).forEach((availableStep) => {\r\n if (availableStep.selectedValueId) {\r\n selectedFilterObject[availableStep.id] = availableStep.selectedValueId\r\n }\r\n });\r\n return selectedFilterObject\r\n };\r\n\r\n setFeatureWizardStep = (featureWizardStep) => {\r\n const availableSteps = !featureWizardStep && !this.state.availableSteps[0].selectedValueId\r\n ? this.state.defaultSteps\r\n : this.state.availableSteps.map((availableStep, index) => {\r\n availableStep.values = this.setStepValues(availableStep, index);\r\n return availableStep\r\n });\r\n this.setState({\r\n featureWizardStep: availableSteps.filter(step => !step.hidden)[featureWizardStep] ? featureWizardStep : 0,\r\n showMobileGroups: false,\r\n availableSteps\r\n }, () => {\r\n this.setLockedView();\r\n });\r\n this.props.handleSearchInputChange({target: {value: ''}});\r\n };\r\n\r\n setStepValues = (step, stepIndex) => {\r\n const selectedFilterObject = this.getCurrentFilterObject(stepIndex); // get only previous selected values\r\n // console.log('selectedFilterObject111', selectedFilterObject);\r\n return this.state.defaultSteps[stepIndex].values.map((wizardValueObject) => {\r\n let allFiltersObject = Object.assign({}, selectedFilterObject);\r\n\r\n // if (this.props.activeSubPart.partId === \"vanity_cabinet\" && step.filterName === \"Color\" && selectedFilterObject) {\r\n // const doorStyleFilter = this.props.filterGroups.find(filterGroup => filterGroup.name.trim() === \"DoorStyle\");\r\n // if (doorStyleFilter && selectedFilterObject[doorStyleFilter.id] === 661) {\r\n // selectedFilterObject[doorStyleFilter.id] = 660 // TODO[Artem] REMOVE THIS HARDCODE (QC HERMOZA HAS WRONG FILTER ID!)\r\n // }\r\n // }\r\n\r\n allFiltersObject[step.id] = +wizardValueObject.filterValue;\r\n // console.log('allFiltersObject', allFiltersObject);\r\n wizardValueObject.selectionAvailable = this.state.filteredFeatures.some(feature => {\r\n const featureFilters = feature.dbFeature.filterValueIDs;\r\n if (featureFilters && Object.keys(allFiltersObject).every((filterKey) => {\r\n return featureFilters[filterKey] && featureFilters[filterKey].includes(allFiltersObject[filterKey])\r\n })) {\r\n // console.log('feature', feature);\r\n return true\r\n }\r\n return false\r\n });\r\n return wizardValueObject\r\n });\r\n };\r\n\r\n getFilterValue = (step, filterValue) => {\r\n const filterGroup = this.props.filterGroups.find(filterGroup => {\r\n return filterGroup.id === this.state.availableSteps.filter(step => !step.hidden)[step].id\r\n });\r\n const filterGroupValue = filterGroup && filterGroup.values.find(filterGroupValue => {\r\n return filterGroupValue.id === +filterValue.id\r\n });\r\n return filterGroupValue\r\n };\r\n\r\n onItemClick = (filterValue, itemIsLocked, currentStepFilterName, forceClick = false) => {\r\n\r\n const fabricatorSettings = this.props.fabricatorData.settings;\r\n if( !this.props.userIsLoggedIn && fabricatorSettings.clickLeadCapture\r\n && ++window.itemClickCount >= fabricatorSettings.clickLeadCount && window.allowClickLeadCapturePopup) {\r\n this.handleUserLoginClick(UserPopupTypes.NewDesign);\r\n return;\r\n }\r\n\r\n let resetStepValues = false;\r\n if (this.props.activeSubPart.partId === \"vanity_cabinet\" && (currentStepFilterName === \"Size\") && !itemIsLocked) {\r\n resetStepValues = true\r\n }\r\n\r\n /*** 1) just set new filter value ***/\r\n const availableSteps = this.state.availableSteps.map((availableStep) => {\r\n if (availableStep.filterName === currentStepFilterName) {\r\n availableStep.selectedValueId = filterValue.id;\r\n const filterGroupValue = this.getFilterValue(this.state.featureWizardStep, filterValue);\r\n availableStep.selectedValueName = filterGroupValue ? filterGroupValue.displayText : \"\";\r\n availableStep.selectedItemIsLocked = itemIsLocked;\r\n }\r\n /*** 2) add for filter steps hidden values & clear selected values ***/\r\n availableStep = this.setHiddenStateToStep(availableStep, currentStepFilterName, filterValue, forceClick || resetStepValues);\r\n // if (availableStep.needToRefresh) {\r\n // forceReload = true;\r\n // delete availableStep.needToRefresh\r\n // }\r\n return availableStep\r\n });\r\n\r\n /*** 3) if it is SelectionNotAvailableClick & clicked on a DoorStyle - check if current Vanity support it ***/\r\n if (this.props.activeSubPart.partId === \"vanity_cabinet\" && forceClick && currentStepFilterName === \"DoorStyle\") {\r\n\r\n const sizeStep = this.state.availableSteps.find(step => step.filterName === \"Size\");\r\n const doorStyleStep = this.state.availableSteps.find(step => step.filterName === currentStepFilterName);\r\n\r\n let existingIdeallyFeature = this.state.filteredFeatures.find(feature => {\r\n const doorStyleMatch = feature.dbFeature.filterValueIDs[doorStyleStep.id]\r\n && feature.dbFeature.filterValueIDs[doorStyleStep.id][0] === filterValue.id;\r\n const sizeMatch = sizeStep.selectedValueId && feature.dbFeature.filterValueIDs[sizeStep.id]\r\n && feature.dbFeature.filterValueIDs[sizeStep.id][0] === sizeStep.selectedValueId;\r\n return doorStyleMatch && sizeMatch\r\n });\r\n if (!existingIdeallyFeature) {\r\n existingIdeallyFeature = this.state.filteredFeatures.find(feature => {\r\n const doorStyleMatch = feature.dbFeature.filterValueIDs[doorStyleStep.id]\r\n && feature.dbFeature.filterValueIDs[doorStyleStep.id][0] === filterValue.id;\r\n return doorStyleMatch\r\n });\r\n }\r\n // console.log('existingIdeallyFeature', existingIdeallyFeature);\r\n if (existingIdeallyFeature) {\r\n const sizeValue = existingIdeallyFeature.dbFeature.filterValueIDs[sizeStep.id][0];\r\n if (sizeValue && sizeStep.selectedValueId !== sizeValue) {\r\n sizeStep.selectedValueId = sizeValue;\r\n const filterGroup = this.props.filterGroups.find(filterGroup => filterGroup.id === sizeStep.id);\r\n const filterGroupValue = filterGroup && filterGroup.values.find(filterGroupValue => {\r\n return filterGroupValue.id === sizeValue\r\n });\r\n sizeStep.selectedValueName = filterGroupValue ? filterGroupValue.displayText : \"\";\r\n sizeStep.selectedItemIsLocked = sizeStep.values.find(val => val.filterValue === sizeValue.itemIsLocked);\r\n }\r\n }\r\n } else if (this.props.activeSubPart.partId === \"shower_interior_wall\" && !itemIsLocked) {\r\n if (currentStepFilterName === \"DuraBathColor\") {\r\n const patternStep = this.state.availableSteps.find(step => step.filterName === \"TilePattern\");\r\n if (!patternStep.selectedValueId) {\r\n const patternGroup = this.props.filterGroups.find(filterGroup => filterGroup.id === patternStep.id);\r\n const patternGroupSlabValue = patternGroup.values.find(step => step.value === \"Smooth\");\r\n if (patternGroupSlabValue) {\r\n patternStep.selectedValueId = patternGroupSlabValue.id;\r\n patternStep.selectedValueName = patternGroupSlabValue.displayText;\r\n const smoothFilterObject = patternStep.values.find(val => val.filterValue === patternGroupSlabValue.id);\r\n patternStep.selectedItemIsLocked = smoothFilterObject ? smoothFilterObject.itemIsLocked : false\r\n }\r\n }\r\n }\r\n }\r\n this.setState({\r\n availableSteps,\r\n }, () => {\r\n this.tryToClickOnMatchingFiltersItem(itemIsLocked, forceClick)\r\n });\r\n };\r\n\r\n setHiddenStateToStep = (availableStep, currentStepFilterName, filterValue, resetStepValues) => {\r\n const filterValueName = filterValue.value.toLowerCase();\r\n const stepName = availableStep.filterName.toLowerCase();\r\n if (this.state.featureWizardStep === 0 && this.props.activeSubPart.partId === \"shower_interior_wall\") {\r\n availableStep.hidden =\r\n (filterValueName !== \"durabath\" && stepName === \"durabathcolor\")\r\n || (filterValueName !== \"durabath\" && filterValueName !== \"tile\" && stepName === \"tilepattern\")\r\n || (filterValueName !== \"acrylic\" && stepName === \"acrylicpattern\")\r\n || (filterValueName !== \"acrylic\" && stepName === \"acryliccolor\")\r\n || (filterValueName !== \"slab\" && filterValueName !== \"durabath natural stone\" && stepName === \"slabcolor\")\r\n || (filterValueName !== \"tile\" && stepName === \"tilecolor\")\r\n } else if (this.props.activeSubPart.partId === \"vanity_cabinet\") {\r\n if (currentStepFilterName === \"DoorStyle\") { // clicked on a door style step value\r\n const withoutDoorStyle = !NotQCVanityDoorStylesFilters.includes(filterValue.value);\r\n availableStep.hidden = (withoutDoorStyle && stepName === \"material\");\r\n\r\n const wizardIsFinished = this.state.availableSteps.filter(step => !step.hidden).every(step => step.selectedValueId);\r\n\r\n if ((stepName === \"material\" || stepName === \"color\") && (resetStepValues || !wizardIsFinished)) {\r\n availableStep.selectedValueId = null;\r\n availableStep.selectedValueName = \"\";\r\n availableStep.selectedItemIsLocked = false;\r\n // availableStep.needToRefresh = true;\r\n }\r\n } else if (resetStepValues && currentStepFilterName === \"Size\" && stepName !== \"size\") { // clicked on a Size step value\r\n availableStep.selectedValueId = null;\r\n availableStep.selectedValueName = \"\";\r\n availableStep.selectedItemIsLocked = false;\r\n }\r\n }\r\n return availableStep\r\n };\r\n\r\n getPlaceholdersFeatures = () => {\r\n return this.state.filteredFeatures.filter(feature => feature.dbFeature.displayName.includes(\"WizardPlaceholder\"));\r\n };\r\n\r\n tryToClickOnMatchingFiltersItem = (itemIsLocked, forceClick) => {\r\n this.props.setWizardLockedItem(itemIsLocked);\r\n\r\n const selectedFilterObject = this.getCurrentFilterObject();\r\n // console.log('selectedFilterObject', selectedFilterObject);\r\n // console.log('=========');\r\n const arrayOfSelectedKeys = Object.keys(selectedFilterObject);\r\n const wizardIsFinished = this.state.availableSteps.filter(step => !step.hidden).every(step => step.selectedValueId);\r\n const filteredFeatures = wizardIsFinished ? this.state.filteredFeatures : this.getPlaceholdersFeatures();\r\n\r\n const foundFeaturesFromFilters = filteredFeatures.filter(feature => {\r\n const featureFilters = feature.dbFeature.filterValueIDs;\r\n const arrayOfCurrentKeys = Object.keys(featureFilters);\r\n // console.log('featureFilters', featureFilters, feature.dbFeature.displayName);\r\n if (wizardIsFinished) {\r\n if (Object.keys(selectedFilterObject).every((filterKey) => {\r\n return featureFilters[filterKey] && featureFilters[filterKey].includes(selectedFilterObject[filterKey])\r\n })) {\r\n // console.log('feature', feature);\r\n return true\r\n }\r\n return false\r\n } else {\r\n if ((arrayOfCurrentKeys.length === arrayOfSelectedKeys.length) && Object.keys(selectedFilterObject).every((filterKey) => {\r\n return featureFilters[filterKey] && featureFilters[filterKey][0] === selectedFilterObject[filterKey]\r\n })) {\r\n // console.log('feature found', feature);\r\n return true\r\n }\r\n return false\r\n }\r\n });\r\n let foundFeature = null;\r\n if (Array.isArray(foundFeaturesFromFilters) && foundFeaturesFromFilters.length) {\r\n if (this.props.activeSubPart.partId === \"vanity_cabinet\" && foundFeaturesFromFilters.length > 1) {\r\n foundFeature = foundFeaturesFromFilters.find(feature => feature.metaData[\"VanityHandle\"]);\r\n }\r\n if (!foundFeature) {\r\n foundFeature = foundFeaturesFromFilters[0];\r\n }\r\n }\r\n if (foundFeature && !itemIsLocked) {\r\n this.props.handleNavigationItemClick({part:foundFeature}, true);\r\n }\r\n this.updateStepValues(this.state.availableSteps, forceClick);\r\n };\r\n\r\n onItemClickDisabled = (filterValue, itemIsLocked, currentStepFilterName) => {\r\n if (itemIsLocked) {\r\n this.onItemClick(filterValue, itemIsLocked, currentStepFilterName);\r\n return;\r\n }\r\n // Size is unreachable code since it is always enabled // Alan wants to show them !disabled (26.02.2019)\r\n const askQuestion = this.props.activeSubPart.partId === \"vanity_cabinet\"\r\n && (currentStepFilterName === \"DoorStyle\" || currentStepFilterName === \"Size\");\r\n\r\n const message = {\r\n id: askQuestion ? \"messageBox.wizard.itemIsNotAvailableWithQuestion\" : \"messageBox.wizard.itemIsNotAvailable\",\r\n filterValueClicked: filterValue.displayText,\r\n filterName: this.state.availableSteps.filter(step => !step.hidden)[this.state.featureWizardStep].filterName\r\n };\r\n const buttons = [{\r\n text: askQuestion ? \"messageBox.buttonNo\" : \"messageBox.buttonOk\",\r\n color: \"blue\",\r\n click: () => {\r\n this.props.changeMessageBoxState({visible:false});\r\n }\r\n }];\r\n if (askQuestion) {\r\n buttons.push({\r\n text: \"messageBox.buttonYes\",\r\n color: \"green\",\r\n click: () => {\r\n this.onItemClick(filterValue, itemIsLocked, currentStepFilterName, true);\r\n this.props.changeMessageBoxState({visible:false});\r\n }\r\n })\r\n }\r\n this.props.changeMessageBoxState({\r\n visible: true,\r\n message,\r\n buttons\r\n });\r\n };\r\n\r\n handleUserLoginClick = (userPopupType = UserPopupTypes.Unlock) => {\r\n UserLoginButton.handleLoginClick({...this.props, userPopupType});\r\n };\r\n\r\n exitFeatureWizard = () => {\r\n if (this.props.isMobile) {\r\n this.props.exitFeatureWizard(\r\n this.state.availableSteps,\r\n this.props.activeSubPart.partId\r\n )\r\n } else {\r\n this.setState({\r\n mounted: false,\r\n finishClicked: true\r\n });\r\n setTimeout(() => {\r\n this.props.exitFeatureWizard(\r\n this.state.availableSteps,\r\n this.props.activeSubPart.partId\r\n )\r\n }, 300);\r\n }\r\n };\r\n\r\n render() {\r\n // console.log('features top', this.state.filteredFeatures);\r\n // console.log('this.state.availableSteps', this.state.availableSteps);\r\n const availableSteps = this.state.availableSteps.filter(step => !step.hidden);\r\n const allStepsCompleted = availableSteps.every(step => step.selectedValueId);\r\n const interiorShowerWallWizard = this.props.activeSubPart.partId === \"shower_interior_wall\";\r\n const itemIsSelected = this.activeItemIsSelected();\r\n\r\n return this.props.isMobile ?\r\n this.state.showMobileGroups ? (\r\n
    \r\n
      \r\n {availableSteps.map((wizardStep, wizardStepIndex) => {\r\n const name = wizardStep.filterName.replace(/ /g,\"\").toLowerCase();\r\n return (\r\n
    • this.setFeatureWizardStep(wizardStepIndex)}\r\n key={\"wizardStepIndex\"+wizardStepIndex}>\r\n {wizardStep.filterName}\r\n
    • \r\n )\r\n })}\r\n
    \r\n
    \r\n ) : (\r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n {availableSteps.length && !this.state.reload ? (\r\n \r\n ) :
    }\r\n
    \r\n
    \r\n {!(interiorShowerWallWizard && !this.props.showerWallWizardGroupsSelected) ? (\r\n \r\n ) : null}\r\n
    \r\n )\r\n : ( // desktop\r\n
    \r\n \r\n {availableSteps.length && !this.state.reload ? (\r\n \r\n ) :
    }\r\n {interiorShowerWallWizard && !this.props.showerWallWizardGroupsSelected ? null : (\r\n
    \r\n
    \r\n \r\n {availableSteps[this.state.featureWizardStep]\r\n ? `Select a ${this.props.getFilterDisplayName(availableSteps[this.state.featureWizardStep].filterName, this.props.intl)} for your ${this.props.activeSubPart.partId === \"shower_interior_wall\" ? \"Wall\" : \"Vanity\"}.`\r\n : null}\r\n \r\n \r\n
    \r\n \r\n
    \r\n )}\r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => ({\r\n filtersVisible: store.filterState.showFilters,\r\n filterGroups: store.filterState.filterGroups,\r\n fabricatorData: store.fabricatorState,\r\n userIsLoggedIn: store.userState.userIsLoggedIn,\r\n navigationViewType: store.navigationState.navigationViewType,\r\n activeQuoteIndex: store.quotesState.activeQuoteIndex,\r\n});\r\n\r\nconst mapDispatchToProps = () => ({});\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(FeatureWizard)\r\n);\r\n","import React, {Component} from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\n\r\nimport Z from \"../core/parts/zIndex\";\r\nimport {ShowerTubCombo} from \"../core/parts/showerTubCombo\";\r\nimport {Vanity} from \"../core/parts/vanity\";\r\nimport {Shower} from \"../core/parts/shower\";\r\nimport {Wall} from \"../core/parts/wall\";\r\nimport {BathTubType, VanityTypes, ShowerTypes, ShowerComboTubType} from \"../core/constants\";\r\nimport {getMetadataByDimensions, reorder} from \"../../../misc/utils\";\r\nimport Analytics from \"../../../analytics\";\r\n\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\nimport {ShowerAccessories} from \"../core/parts/showerAccessories\";\r\n\r\nclass ContextMenu extends Component {\r\n\r\n static propTypes = {\r\n designNavigationItems: PropTypes.array,\r\n contextMenuOpen: PropTypes.string,\r\n hoveredLayer: PropTypes.object,\r\n handleContextMenuClick: PropTypes.func,\r\n contextMenuPosition: PropTypes.object,\r\n contextMenuPonyWall: PropTypes.bool,\r\n renderGreenLayerByZindex: PropTypes.func,\r\n closeContextMenu: PropTypes.func,\r\n };\r\n\r\n state = {\r\n contextMenuButtons: []\r\n };\r\n\r\n componentDidMount() {\r\n this.setContextMenuButtons();\r\n if (this.props.closeContextMenu) {\r\n document.addEventListener('click', this.contextMenuBlur)\r\n }\r\n }\r\n\r\n contextMenuBlur = (e) => {\r\n if (!e.target.closest('.contextmenu-buttons')\r\n && !e.target.closest('.contextmenu-buttons__button')\r\n && !e.target.closest('.sprocket-container') && !e.target.closest('.canvas')) {\r\n this.props.closeContextMenu();\r\n }\r\n };\r\n\r\n componentWillUnmount() {\r\n if (this.props.closeContextMenu) {\r\n document.removeEventListener('click', this.contextMenuBlur)\r\n }\r\n }\r\n\r\n setShowerBodySelectionButtons = () => {\r\n const layout = getCurrentLayout();\r\n const shower = layout.parts[Shower.id];\r\n const vanity = layout.parts[Vanity.id];\r\n const counterTopSize = vanity.counterTopSize();\r\n const showerTubCombo = layout.parts[ShowerTubCombo.id];\r\n\r\n const showerSubParts = shower.subParts();\r\n const showerBody = showerSubParts.find((menuItem) => {\r\n return menuItem.part.partId === \"shower_body\"\r\n });\r\n const currentShowerSize = shower.showerSize();\r\n let contextMenuButtons = [];\r\n\r\n if (showerTubCombo.showerTubComboIsActive) {\r\n const showerTubComboSubParts = showerTubCombo.subParts();\r\n const wallConfiguration = showerTubComboSubParts.find((menuItem) => {\r\n return menuItem.part.partId === \"wall_configuration\"\r\n });\r\n showerTubCombo.wallConfiguration.features.forEach((wallConfigurationFeature) => {\r\n contextMenuButtons.push(Object.assign({}, wallConfiguration, {\r\n subMenuParent: \"Walls\",\r\n subMenuText: wallConfigurationFeature.partName,\r\n intlTranslate: this.props.intl.formatMessage({id: showerTubCombo.wallConfiguration.translateId}),\r\n bgImageText: wallConfigurationFeature.partName,\r\n clickFeature: true,\r\n text: wallConfigurationFeature.partName.includes(\"Pony\") ? \"Pony Wall\" : \"Left Shower Wall\"\r\n }))\r\n })\r\n } else if (showerBody && showerBody.part.features.length) {\r\n showerBody.part.features.forEach((showerBodyFeature) => {\r\n if (showerBodyFeature.partName.includes(currentShowerSize)) {\r\n // console.log('showerBodyFeature.partName', showerBodyFeature.partName);\r\n if (!(counterTopSize === \"72in\" && layout.type === 1 && showerBodyFeature.partName.includes(\"15X4\"))) {\r\n const isPony = showerBodyFeature.partName.includes(\"Pony\");\r\n contextMenuButtons.push(Object.assign({}, showerBody, {\r\n subMenuParent: \"Walls\",\r\n subMenuText: showerBodyFeature.partName,\r\n intlTranslate: this.props.intl.formatMessage({id: isPony\r\n ? \"visualizer.bathroom.walls.pony_wall\"\r\n : \"visualizer.bathroom.walls.left_shower_wall\"\r\n }),\r\n bgImageText: showerBodyFeature.partName,\r\n clickFeature: true,\r\n text: isPony ? \"Pony Wall\" : \"Left Shower Wall\"\r\n }))\r\n }\r\n }\r\n })\r\n }\r\n\r\n const clickedItemIndex = contextMenuButtons.findIndex(item => {\r\n return showerTubCombo.showerTubComboIsActive\r\n ? item.subMenuText === showerTubCombo.wallConfiguration.activeFeature.partName\r\n : item.subMenuText === showerBody.part.activeFeature.partName\r\n });\r\n\r\n if (clickedItemIndex > 0) {\r\n contextMenuButtons = reorder(contextMenuButtons, clickedItemIndex, 0); // swap items in array start\r\n }\r\n\r\n this.setState({\r\n contextMenuButtons\r\n })\r\n };\r\n\r\n setWallBButtons = () => {\r\n const layout = getCurrentLayout();\r\n let contextMenuButtons = [];\r\n\r\n const wallParent = layout.parts[Wall.id];\r\n const wallParts = wallParent.subParts().filter((menuItem) => {\r\n return (menuItem.part.partId === \"wall_b\") || (menuItem.part.partId === \"accent_wall\")\r\n });\r\n wallParts.forEach((wallPart) => {\r\n contextMenuButtons.push(Object.assign({}, wallPart, {\r\n subMenuParent: \"Walls\",\r\n subMenuText: wallPart.part.partName,\r\n bgImageText: wallPart.part.partName,\r\n text: wallPart.text,\r\n intlTranslate: this.props.intl.formatMessage({id: wallPart.part.translateId})\r\n }));\r\n });\r\n\r\n const vanity = layout.parts[Vanity.id];\r\n const vanityBacksplash = vanity.subParts().find((menuItem) => {\r\n return menuItem.part.partId === \"vanity_backsplash\"\r\n });\r\n if (vanityBacksplash) {\r\n contextMenuButtons.push(Object.assign({}, vanityBacksplash, {\r\n subMenuParent: \"Vanity\",\r\n subMenuText: vanityBacksplash.part.partName,\r\n bgImageText: vanityBacksplash.part.partName,\r\n text: vanityBacksplash.text,\r\n intlTranslate: this.props.intl.formatMessage({id: vanityBacksplash.part.translateId})\r\n }));\r\n }\r\n\r\n let zIndexToFind = this.props.hoveredLayer.zIndex;\r\n\r\n const clickedItem = contextMenuButtons.find(item => {\r\n return item.part.activeFeature && item.part.activeFeature.layer && item.part.activeFeature.layer.zIndex === zIndexToFind;\r\n });\r\n if (clickedItem && clickedItem.part && clickedItem.part.partId === \"vanity_backsplash\") {\r\n const vanityFaucet = vanity.subParts().find((menuItem) => {\r\n return menuItem.part.partId === \"vanity_faucet\"\r\n });\r\n if (vanityFaucet) {\r\n contextMenuButtons.push(Object.assign({}, vanityFaucet, {\r\n subMenuParent: \"Vanity\",\r\n subMenuText: vanityFaucet.part.partName,\r\n bgImageText: vanityFaucet.part.partName,\r\n text: vanityFaucet.text,\r\n intlTranslate: this.props.intl.formatMessage({id: vanityFaucet.part.translateId})\r\n }));\r\n }\r\n }\r\n\r\n const clickedItemIndex = contextMenuButtons.findIndex(item => {\r\n return item.part.activeFeature && item.part.activeFeature.layer && item.part.activeFeature.layer.zIndex === zIndexToFind;\r\n });\r\n\r\n if (clickedItemIndex > 0) {\r\n contextMenuButtons = reorder(contextMenuButtons, clickedItemIndex, 0); // swap items in array start\r\n }\r\n\r\n this.setState({\r\n contextMenuButtons\r\n })\r\n };\r\n\r\n setContextMenuButtons() {\r\n\r\n const layout = getCurrentLayout();\r\n\r\n if (this.props.contextMenuOpen === \"Shower Body Selection\") {\r\n this.setShowerBodySelectionButtons();\r\n return\r\n } else if (this.props.contextMenuOpen === \"wall_b_custom\") {\r\n this.setWallBButtons();\r\n return\r\n }\r\n\r\n const hoveredParent = this.props.designNavigationItems.find(navItem => {\r\n return navItem.text === this.props.contextMenuOpen\r\n });\r\n\r\n let relatedItems = hoveredParent.part.relatedItems;\r\n if (this.props.contextMenuOpen === \"Shower Tub Combo\") {\r\n relatedItems = [...hoveredParent.part.relatedItems, ...hoveredParent.part.getShowerRelatedItems()]\r\n }\r\n\r\n const clickedItem = this.props.hoveredLayer.zIndex === Z.layouts[layout.getCurrentLayoutName()].Shower.Steam60in.Body[\"2\"]\r\n ? relatedItems[0]\r\n : relatedItems.find((item) => {\r\n let zIndexToFind = this.props.hoveredLayer.zIndex;\r\n if (this.props.hoveredLayer.zIndex === Z.layouts[layout.getCurrentLayoutName()].Shower.Custom60in.Wall2) {\r\n zIndexToFind = Z.layouts[layout.getCurrentLayoutName()].Shower.Custom60in.Wall\r\n }\r\n if (\r\n this.props.hoveredLayer.zIndex === Z.layouts[layout.getCurrentLayoutName()].Shower.Custom60in.WallAccent2\r\n ) {\r\n zIndexToFind = Z.layouts[layout.getCurrentLayoutName()].Shower.Custom60in.WallAccent\r\n }\r\n return item.activeFeature && item.activeFeature.layer.zIndex === zIndexToFind\r\n });\r\n\r\n let itemsToRender = this.getItemsToRender(hoveredParent);\r\n\r\n // console.log('clickedItem', clickedItem);\r\n // console.log('relatedItems', relatedItems);\r\n // console.log('itemsToRender', itemsToRender);\r\n\r\n const clickedItemIndex = itemsToRender.findIndex(item => item.text === clickedItem.partName);\r\n if (clickedItemIndex > 0) {\r\n itemsToRender = reorder(itemsToRender, clickedItemIndex, 0); // swap items in array start\r\n }\r\n\r\n this.setState({\r\n contextMenuButtons: itemsToRender\r\n })\r\n }\r\n\r\n getItemsToRender = (hoveredParent) => {\r\n const layout = getCurrentLayout();\r\n let itemsToRender = hoveredParent.part.subParts();\r\n\r\n if ((this.props.contextMenuOpen === \"Shower\" || this.props.contextMenuOpen === \"Shower Tub Combo\") && hoveredParent.text !== \"Shower Accessories\") {\r\n itemsToRender = itemsToRender.filter(menuButton => {\r\n return this.props.contextMenuPonyWall\r\n ? menuButton.part.isPonyWallPart && menuButton.part.partId !== \"pony_wall\"\r\n : !menuButton.part.isPonyWallPart\r\n });\r\n const accessoriesParent = layout.parts[ShowerAccessories.id];\r\n if (accessoriesParent && accessoriesParent.categoryEnabled && !this.props.contextMenuPonyWall) {\r\n itemsToRender = itemsToRender.filter(menuButton => menuButton.part.partId !== \"shower_interior_wall_accent\");\r\n itemsToRender.push({\r\n text: \"Accessories\",\r\n part: {},\r\n subNav: true,\r\n intlTranslate: this.props.intl.formatMessage({id: \"visualizer.bathroom.accessories\"})\r\n })\r\n }\r\n itemsToRender = itemsToRender.filter(menuButton => menuButton.part.partId !== \"shower_head\");\r\n if (layout.parts[ShowerTubCombo.id] && !this.props.contextMenuPonyWall) {\r\n itemsToRender.push({\r\n text: \"Configure Layout\",\r\n part: {},\r\n subNav: true,\r\n intlTranslate: this.props.intl.formatMessage({id: \"visualizer.bathroom.contextmenu.configureLayout\"})\r\n })\r\n }\r\n }\r\n\r\n if (this.props.contextMenuOpen === \"Shower\") {\r\n itemsToRender = itemsToRender.filter(menuButton => menuButton.part.partId !== \"threshold\");\r\n }\r\n if (this.props.contextMenuOpen === \"Shower Tub Combo\") {\r\n itemsToRender = this.removeNotUsedTubItemsFromContextMenu(itemsToRender, hoveredParent.part.bottomTub);\r\n }\r\n if (this.props.contextMenuOpen === \"Vanity\") {\r\n itemsToRender = itemsToRender.filter((itemToRender) => {\r\n return itemToRender.part.partId !== \"vanity_mirror\" && itemToRender.part.partId !== \"vanity_backsplash\";\r\n });\r\n }\r\n\r\n return itemsToRender\r\n };\r\n\r\n removeNotUsedTubItemsFromContextMenu = (itemsToRender, activeTub) => {\r\n return itemsToRender.filter((itemToRender) => {\r\n let keepThisItem = true;\r\n Object.keys(ShowerComboTubType).forEach((key) => {\r\n if (itemToRender.part.partId === ShowerComboTubType[key] && itemToRender.part.partId !== activeTub\r\n && itemToRender.part.partId !== ShowerComboTubType.replacement_tub\r\n && itemToRender.part.partId !== ShowerComboTubType.bathtub_liner\r\n ) {\r\n keepThisItem = false\r\n }\r\n });\r\n if (itemToRender.text === \"Wall Configuration\") {\r\n keepThisItem = false\r\n }\r\n return keepThisItem\r\n });\r\n };\r\n\r\n handleSubNavClick = (menuItem) => {\r\n const layout = getCurrentLayout();\r\n\r\n if (menuItem.text === \"Accessories\") {\r\n const hoveredParent = this.props.designNavigationItems.find(navItem => {\r\n return navItem.text === \"Shower Accessories\"\r\n });\r\n this.setState({\r\n contextMenuButtons: this.getItemsToRender(hoveredParent)\r\n .map(button => {\r\n button.subMenuParent = \"Shower Accessories\";\r\n return button\r\n })\r\n });\r\n return false\r\n }\r\n\r\n const showerSubParts = layout.parts[Shower.id].subParts();\r\n\r\n const shower = showerSubParts.find((menuItem) => {\r\n return menuItem.part.partId === \"shower_body\"\r\n });\r\n shower.subMenuText = \"Shower\";\r\n shower.subMenuParent = \"Shower\";\r\n shower.intlTranslate = this.props.intl.formatMessage({id: \"visualizer.bathroom.shower\"});\r\n\r\n const showerTubCombo = layout.parts[ShowerTubCombo.id];\r\n const showerTubComboSubParts = showerTubCombo.subParts();\r\n\r\n const activeTubMenuItems = showerTubComboSubParts.filter(menuItem => menuItem.part.bottomTubId);\r\n activeTubMenuItems.forEach(menuItem => menuItem.subMenuParent = \"Shower Tub Combo\");\r\n\r\n const wallConfiguration = showerTubComboSubParts.find((menuItem) => {\r\n return menuItem.part.partId === \"wall_configuration\"\r\n });\r\n wallConfiguration.subMenuText = \"Shower Tub Combo\";\r\n wallConfiguration.subMenuParent = \"Shower Tub Combo\";\r\n wallConfiguration.intlTranslate = this.props.intl.formatMessage({id: \"visualizer.bathroom.shower_tub_combo\"});\r\n\r\n this.setState({\r\n contextMenuButtons: [\r\n shower,\r\n wallConfiguration,\r\n ...activeTubMenuItems,\r\n ]\r\n })\r\n };\r\n\r\n handleContextMenuHover = (menuItem) => {\r\n const layout = getCurrentLayout();\r\n const hoveredButton = menuItem.text === \"Countertop\" ? \"CounterTop\" : menuItem.text;\r\n const hoveredParent = menuItem.subMenuParent || this.props.contextMenuOpen;\r\n\r\n const layoutType = layout.getCurrentLayoutName();\r\n\r\n // console.log('hoveredButton', hoveredButton);\r\n // console.log('hoveredParent', hoveredParent);\r\n\r\n if (hoveredButton && hoveredParent) {\r\n\r\n let hoveredZindex = \"\";\r\n\r\n if (hoveredParent === \"Shower\") {\r\n const shower = layout.parts.Shower;\r\n if (shower.activeSubType_ === ShowerTypes.Complete) {\r\n switch (hoveredButton) {\r\n case \"Fixture\":\r\n hoveredZindex = Z.layouts[layoutType][hoveredParent].Steam60in[hoveredButton];\r\n break;\r\n default:\r\n hoveredZindex = Z.layouts[layoutType][hoveredParent].Steam60in.Body[\"1\"]; // 1st part of shower\r\n break;\r\n }\r\n } else {\r\n switch (hoveredButton) {\r\n case \"Shower Walls\":\r\n hoveredZindex = Z.layouts[layoutType].Shower.Custom60in.Wall;\r\n break;\r\n case \"Shower Body\":\r\n if (shower.showerDoor && shower.showerDoor.features.length) {\r\n hoveredZindex = Z.layouts[layoutType][hoveredParent].Custom60in.ShowerDoor;\r\n } else {\r\n hoveredZindex = Z.layouts[layoutType][hoveredParent].Custom60in.Glass;\r\n }\r\n break;\r\n case \"Shower Door\":\r\n hoveredZindex = Z.layouts[layoutType][hoveredParent].Custom60in.ShowerDoor;\r\n break;\r\n case \"Handle\":\r\n hoveredZindex = Z.layouts[layoutType][hoveredParent].Custom60in.ShowerDoorHandle;\r\n break;\r\n case \"Shower Pan\":\r\n case \"Shower Pans\":\r\n hoveredZindex = Z.layouts[layoutType][hoveredParent].Custom60in.ShowerPanCombo;\r\n break;\r\n case \"Shower Walls Accent\":\r\n hoveredZindex = Z.layouts[layoutType][hoveredParent].Custom60in.WallAccent;\r\n break;\r\n case \"Pony Wall Glass\":\r\n hoveredZindex = Z.layouts[layoutType][\"Shower\"].Custom60in.PonyWallGlass;\r\n break;\r\n case \"Pony Wall Cap\":\r\n hoveredZindex = Z.layouts[layoutType][\"Shower\"].Custom60in.PonyWallCap;\r\n break;\r\n case \"Floor\":\r\n hoveredZindex = shower.showerFloorIsActive\r\n ? Z.layouts[layoutType][hoveredParent].Custom60in[hoveredButton]\r\n : Z.layouts[layoutType][hoveredParent].Custom60in.ShowerPanCombo;\r\n break;\r\n default:\r\n hoveredZindex = Z.layouts[layoutType][hoveredParent].Custom60in[hoveredButton];\r\n break;\r\n }\r\n }\r\n } else if (hoveredParent === \"Shower Tub Combo\") {\r\n switch (hoveredButton) {\r\n case \"Shower Door\":\r\n hoveredZindex = Z.layouts[layoutType].Shower.Custom60in.ShowerDoor;\r\n break;\r\n case \"Shower Walls\":\r\n hoveredZindex = Z.layouts[layoutType].Shower.Custom60in.Wall;\r\n break;\r\n case \"Shower Walls Accent\":\r\n hoveredZindex = Z.layouts[layoutType].Shower.Custom60in.WallAccent;\r\n break;\r\n case \"Fixture\":\r\n hoveredZindex = Z.layouts[layoutType][\"Shower\"].Custom60in.Fixture;\r\n break;\r\n case \"Handle\":\r\n hoveredZindex = Z.layouts[layoutType][\"Shower\"].Custom60in.ShowerDoorHandle;\r\n break;\r\n case \"Wall Configuration\":\r\n hoveredZindex = Z.layouts[layoutType][\"Shower\"].Custom60in.ShowerDoor;\r\n break;\r\n case \"Jetted Tub\":\r\n hoveredZindex = Z.layouts[layoutType][\"Shower\"].TubCombo.JettedTub;\r\n break;\r\n case \"Tub Liner\":\r\n hoveredZindex = Z.layouts[layoutType][\"Shower\"].TubCombo.Liner;\r\n break;\r\n case \"Walk In Tub\":\r\n hoveredZindex = Z.layouts[layoutType][\"Shower\"].TubCombo.WalkInTub;\r\n break;\r\n case \"Replacement Tub\":\r\n hoveredZindex = Z.layouts[layoutType][\"Shower\"].TubCombo.ReplacementTub;\r\n break;\r\n case \"Pony Wall Glass\":\r\n hoveredZindex = Z.layouts[layoutType][\"Shower\"].Custom60in.PonyWallGlass;\r\n break;\r\n case \"Pony Wall Cap\":\r\n hoveredZindex = Z.layouts[layoutType][\"Shower\"].Custom60in.PonyWallCap;\r\n break;\r\n default:\r\n hoveredZindex = Z.layouts[layoutType][\"Shower\"].TubCombo[hoveredButton.replace(/ /g, \"\")];\r\n break;\r\n }\r\n } else if (hoveredParent === \"Vanity\") { // Vanity\r\n if (layout.parts.Vanity.activeSubType_ === VanityTypes.Complete) {\r\n switch (hoveredButton) {\r\n case \"Vanity\":\r\n hoveredZindex = Z.layouts[layoutType].Vanity.Complete.Cabinet;\r\n break;\r\n case \"Accent Wall\":\r\n hoveredZindex = Z.layouts[layoutType].Wall_A_Accent_Mask;\r\n break;\r\n default:\r\n hoveredZindex = Z.layouts[layoutType].Vanity.Custom[hoveredButton]; // Mirror\r\n break;\r\n }\r\n } else {\r\n switch (hoveredButton) {\r\n case \"Accent Wall\":\r\n hoveredZindex = Z.layouts[layoutType].Wall_A_Accent_Mask;\r\n break;\r\n case \"Backsplash\":\r\n hoveredZindex = Z.layouts[layoutType].Vanity.Custom.VanityBacksplash;\r\n break;\r\n default:\r\n hoveredZindex = Z.layouts[layoutType].Vanity.Custom[hoveredButton];\r\n break;\r\n }\r\n }\r\n } else if (hoveredParent === \"Bathtub\") { // Bathtub\r\n if (layout.parts.Bathtub.activeSubType_ === BathTubType.FreeStanding) {\r\n if (hoveredButton === \"Bathtub\") {\r\n hoveredZindex = Z.layouts[layoutType].BathTub.FreeStanding.Base\r\n } else {\r\n hoveredZindex = Z.layouts[layoutType].BathTub.FreeStanding[hoveredButton]\r\n }\r\n } else {\r\n if (hoveredButton === \"Rim\") {\r\n hoveredZindex = Z.layouts[layoutType].BathTub.Custom60in.Top\r\n } else {\r\n hoveredZindex = Z.layouts[layoutType].BathTub.Custom60in[hoveredButton]\r\n }\r\n }\r\n } else if (hoveredParent === \"Walls\") { // Bathtub\r\n switch (hoveredButton) {\r\n case \"Pony Wall\":\r\n hoveredZindex = Z.layouts[layoutType].Shower.Custom60in.PonyWall;\r\n break;\r\n case \"Left Shower Wall\": {\r\n const wallParent = layout.parts[hoveredParent];\r\n const activeShowerGroup = wallParent.getActiveShowerGroup();\r\n const showerDimensions = getMetadataByDimensions(activeShowerGroup.showerDimensions());\r\n hoveredZindex = showerDimensions === \"Half\"\r\n ? Z.layouts[layoutType].Shower.Custom60in.ExtrusionWallLeftHalfWall\r\n : Z.layouts[layoutType].Shower.Custom60in.ExtrusionWallLeft;\r\n break;\r\n }\r\n default:\r\n hoveredZindex = Z.layouts[layoutType].Vanity.Custom[hoveredButton];\r\n break;\r\n }\r\n }\r\n\r\n this.props.renderGreenLayerByZindex(hoveredZindex);\r\n }\r\n\r\n };\r\n\r\n render() {\r\n\r\n let contextMenuStyles = this.props.contextMenuPosition || {};\r\n if (this.state.contextMenuButtons.length === 4) {\r\n contextMenuStyles = Object.assign({}, contextMenuStyles, {maxWidth:\"210px\"} )\r\n }\r\n\r\n return (\r\n
    \r\n
    \r\n {this.state.contextMenuButtons.map((menuItem) => {\r\n return menuItem ? (\r\n \r\n ) : null\r\n })}\r\n
    \r\n
    \r\n )\r\n }\r\n}\r\n\r\nexport default injectIntl(ContextMenu)\r\n","import React, { Component } from 'react';\r\nimport PropTypes from \"prop-types\";\r\nimport {connect} from \"react-redux\";\r\nimport $ from \"jquery\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport Analytics from './../../analytics';\r\n\r\nexport class HomeMenu extends Component {\r\n\r\n static propTypes = {\r\n mobileNav: PropTypes.array\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n toggle: false,\r\n };\r\n }\r\n\r\n componentWillUnmount() {\r\n $(document).off('click', this.handleMobileBlur);\r\n }\r\n\r\n handleItemClick = () => {\r\n\r\n };\r\n\r\n handleBack = () => {\r\n this.handleToggleDropdown();\r\n };\r\n\r\n handleToggleDropdown = () => {\r\n Analytics.sendClickEvent('home-button-dropdown', !this.state.toggle);\r\n this.setState({\r\n toggle: !this.state.toggle,\r\n }, () => {\r\n this.state.toggle\r\n ? $(document).on('click', this.handleMobileBlur)\r\n : $(document).off('click', this.handleMobileBlur)\r\n })\r\n };\r\n\r\n handleMobileBlur = (e) => {\r\n const navClick = e.target.closest('[class*=\"mobile-home-menu\"]');\r\n const backButtonClick = e.target.closest('.ui-back');\r\n if (!navClick && !backButtonClick) {\r\n this.handleToggleDropdown();\r\n }\r\n };\r\n\r\n render() {\r\n // let menu = [{\r\n // name: \"Return to Website\",\r\n // url: document.referrer || document.location.href\r\n // }, ...this.props.mobileNav];\r\n\r\n return (\r\n
    \r\n {this.props.windowWidth >= 991 ? (\r\n \r\n ) : (\r\n \r\n )}\r\n
    \r\n
    \r\n \r\n
    \r\n \r\n
    \r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n mobileNav: store.navigationState.mobileNav,\r\n windowWidth: store.serverState.windowWidth,\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, {\r\n})(HomeMenu);\r\n","import React, {Component} from 'react';\r\nimport {connect} from \"react-redux\";\r\nimport $ from \"jquery\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport ActionTypes from \"../../misc/actionTypes\";\r\nimport Analytics from './../../analytics';\r\nimport UserLoginButton from './../ui/userLoginButton';\r\nimport {toggleUserPopup, changeMessageBoxState} from \"../../actions/actionFunctions\";\r\nimport {SaveIcon} from \"./icons\";\r\nimport {loaderDisable, loaderEnable} from \"../ui/loaderView\";\r\nimport {saveQuote} from \"../../api/server-api\";\r\nimport {UserPopupTypes} from \"../visComponents/constants\";\r\nimport {showQuoteSavedNotification} from \"../ui/successNotification\";\r\n\r\nexport class SaveButton extends Component {\r\n\r\n saving = false;\r\n\r\n handleSaveQuote = () => {\r\n if (!UserLoginButton.handleLoginClick({\r\n ...this.props,\r\n saveQuoteAfterLogin: true,\r\n userPopupType: UserPopupTypes.NewDesign\r\n })) {\r\n Analytics.sendClickEvent(\"save-button-show-login\");\r\n } else if (!this.saving) {\r\n Analytics.sendClickEvent(\"save-button\");\r\n this.saveQuoteSubmit();\r\n }\r\n // const fabricatorSettings = this.props.fabricatorData.settings;\r\n // if ((fabricatorSettings.leadCapture && !(document.kvConfig.isBackend && document.kvConfig.jobId && document.kvConfig.canSaveQuote)) && !this.props.isPhoneNumberValidated) {\r\n // Analytics.sendClickEvent(\"save-button-show-login\");\r\n // this.props.toggleUserPopup({\r\n // userPopupOpened: true,\r\n // saveQuoteAfterLogin: true\r\n // });\r\n // } else {\r\n // Analytics.sendClickEvent(\"save-button\");\r\n // this.saveQuoteSubmit();\r\n // }\r\n };\r\n\r\n saveQuoteSubmit = () => {\r\n $(document).trigger(ActionTypes.REMOVE_GREEN_ZONE_ON_CANVAS, () => {\r\n if (!this.saving) {\r\n this.saving = true;\r\n loaderEnable(\"loader.savingQuoteText\");\r\n saveQuote(true)\r\n .then((response) => {\r\n if (response) {\r\n let responseDataBase = response;\r\n if (response.data) {\r\n responseDataBase = response.data;\r\n }\r\n const responseData = typeof responseDataBase === 'object' ? responseDataBase : JSON.parse(responseDataBase);\r\n console.log('saveButton saveQuote response:', responseData);\r\n loaderDisable();\r\n }\r\n showQuoteSavedNotification();\r\n this.saving = false;\r\n // downloadCanvasImageById(this.props.canvasId);\r\n })\r\n .catch((error) => {\r\n console.log('saveButton saveQuote error:', error);\r\n loaderDisable();\r\n this.saving = false;\r\n })\r\n }\r\n });\r\n };\r\n\r\n render() {\r\n return (\r\n \r\n )\r\n }\r\n\r\n}\r\nconst mapStateToProps = (store) => ({\r\n userIsLoggedIn: store.userState.userIsLoggedIn,\r\n isPhoneNumberValidated: store.userState.isPhoneNumberValidated,\r\n fabricatorData: store.fabricatorState\r\n});\r\nexport default connect(mapStateToProps, {\r\n toggleUserPopup,\r\n changeMessageBoxState\r\n})(SaveButton);\r\n","import {Component} from 'react';\r\n\r\nexport default class Tutorial extends Component {\r\n\r\n changeHighlightRingPosition = (selector, stateProperty = \"ringStyles\") => {\r\n const highlightElement = document.querySelector(selector);\r\n if (highlightElement) {\r\n const rect = highlightElement.getBoundingClientRect();\r\n this.setState({\r\n [stateProperty]: {\r\n left: rect.left,\r\n top: rect.top,\r\n }\r\n })\r\n }\r\n };\r\n\r\n}\r\n","import values from 'lodash/values';\r\nimport invert from 'lodash/invert';\r\nimport snakeCase from 'lodash/snakeCase';\r\n\r\nimport LayoutCommon from \"../../visComponents/layoutCommon\";\r\n\r\nimport Appliance from \"./parts/appliance\";\r\nimport Cabinet from \"./parts/cabinet\";\r\nimport CenterIsland from \"./parts/centerIsland\";\r\nimport CountertopGroup from \"./parts/countertopGroup\";\r\nimport Walls from \"./parts/walls\";\r\nimport FloorNew from \"./parts/floorNew\";\r\nimport Globals from \"./parts/globals\";\r\n\r\nimport {LayoutType, LayoutAbbreviation} from \"./constants\";\r\nimport {LayoutThumbnails} from \"./assets\";\r\nimport Z from \"./zIndex\";\r\nimport store from \"../../../store\";\r\nimport * as types from \"../../../actions/actionTypes\";\r\nimport Other from \"./parts/other\";\r\nimport NonVisualizerSubPart from \"./subparts/nonVisualizerSubPart\";\r\nimport DesignNavigationItem from \"../../visComponents/designNavigationItem\";\r\nimport Layer from \"../../visComponents/layer\";\r\nimport {largeLayoutShadow, SmallLayoutShadow} from \"./assets\";\r\n// import {featureThumbnailUrl} from \"../../../misc/helpers\";\r\nimport {AVAILABLE_VISUALIZER_TYPES} from \"../../../config\";\r\n\r\nexport class Layout extends LayoutCommon {\r\n\r\n /**\r\n * @type {int}\r\n */\r\n defaultType = LayoutType.LShapeWithPeninsulaWithIsland;\r\n type = this.defaultType;\r\n visualizerType = AVAILABLE_VISUALIZER_TYPES.Kitchen;\r\n localStorageKey = \"kvState\";\r\n layersBinding = \"Kitchen\";\r\n layoutNames = LayoutAbbreviation;\r\n layoutTypes = LayoutType;\r\n layoutThumbnails = LayoutThumbnails;\r\n zIndexes = Z.layouts;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.parts[Appliance.id] = new Appliance();\r\n this.parts[Cabinet.id] = new Cabinet();\r\n this.parts[CenterIsland.id] = new CenterIsland();\r\n this.parts[CountertopGroup.id] = new CountertopGroup();\r\n this.parts[Walls.id] = new Walls();\r\n this.parts[FloorNew.id] = new FloorNew();\r\n this.parts[Globals.id] = new Globals();\r\n this.parts[Other.id] = new Other();\r\n\r\n values(this.parts).forEach(part => part.layout = this);\r\n }\r\n\r\n addCustomLayers = (res) => {\r\n // add global shadow\r\n const globalShadowParent = this.parts[Globals.id]; // if no global shadow uploaded - take the hardcoded one\r\n if (!globalShadowParent.categoryEnabled || !globalShadowParent.globalShadow || !globalShadowParent.globalShadow.activeFeature) {\r\n if (this.getCurrentLayoutAbbreviation().includes(\"L\")) {\r\n res.push(new Layer(\"kv\", Z.layouts.LShape.Globals.GlobalShadow, largeLayoutShadow, false));\r\n } else if (this.type === LayoutType.Small) {\r\n res.push(new Layer(\"kv\", Z.layouts.Small.Globals.GlobalShadow, SmallLayoutShadow, false));\r\n }\r\n }\r\n return res\r\n }\r\n\r\n getCurrentLayoutName(type = this.type) {\r\n return invert(LayoutType)[type];\r\n }\r\n\r\n getCurrentLayoutAbbreviation() {\r\n return LayoutAbbreviation[this.getCurrentLayoutName()]\r\n }\r\n\r\n // getActiveFeatures(returnAllFeatures) { // removed, we have common now\r\n // let activeFeatures = [];\r\n // const receiveAllFeatures = returnAllFeatures || !!(this.qtCategories && this.qtCategories.length);\r\n // this.getFeatures(receiveAllFeatures).forEach((parentGroup) => {\r\n // // let subParts = parentGroup.subParts().filter(subPart => !subPart.part.disabled); // we need to store every item!\r\n // if (parentGroup.menuType === 0) { // FLOOR\r\n // if (!parentGroup.disabled && parentGroup.activeFeature\r\n // && !parentGroup.activeFeature.partName.includes(\"laceholder\")) {\r\n // activeFeatures.push({\r\n // selectionGroup: parentGroup.partName,\r\n // partId: parentGroup.partId,\r\n // quantity: 0,\r\n // cartFeature: parentGroup.activeFeature\r\n // });\r\n // }\r\n // } else {\r\n // let subItems = parentGroup.relatedItems;\r\n // const excluded = [\"fridge_shadow\"];\r\n // if (!returnAllFeatures) {\r\n // subItems = subItems.filter(subItem => !excluded.includes(subItem.partId) && subItem.activeFeature\r\n // && subItem.activeFeature.partName && !subItem.activeFeature.partName.includes(\"laceholder\"));\r\n // }\r\n // subItems.forEach((subItem) => {\r\n // //adding top cabinet parts to cart features //Alan 25.07.2019\r\n // if (subItem.partId === \"top_cabinet\" && subItem.activeFeature && subItem.activeFeature.metaData[\"Module\"]) {\r\n // let uniqueModuleParts = []; // arrayOf: {width: \"\", height: \"\", inlayTypeName: \"\", quantity: 0}\r\n // for (let i = 1; i <= subItem.moduleSystem.length; i++ ) {\r\n // const currentModuleSystemNumber = i - 1;\r\n // for (let k = 0; k <= subItem.moduleSystem[currentModuleSystemNumber].length - 1; k++ ) {\r\n // const modulePart = subItem.moduleSystem[currentModuleSystemNumber][k];\r\n // const modulePartSplitted = modulePart.split(\"_\");\r\n //\r\n // let inlayTypeName = subItem.defaultInlayType;\r\n // subItem.inlayTypes.forEach(inlayType => {\r\n // if (inlayType.moduleParts.includes(i + \"_\" + modulePartSplitted[2])) {\r\n // inlayTypeName = inlayType.name\r\n // }\r\n // });\r\n //\r\n // const existingModulePart = uniqueModuleParts.find((uniqueModulePart) => {\r\n // return uniqueModulePart.width === modulePartSplitted[0]\r\n // && uniqueModulePart.height === modulePartSplitted[1]\r\n // && uniqueModulePart.inlayTypeName === inlayTypeName\r\n // });\r\n // if (existingModulePart) {\r\n // existingModulePart.quantity++;\r\n // } else {\r\n // const cartFeature = subItem.findFeatureByModuleAndModulePart(modulePart, inlayTypeName);\r\n // if (cartFeature) {\r\n // uniqueModuleParts.push({\r\n // width: modulePartSplitted[0],\r\n // height: modulePartSplitted[1],\r\n // inlayTypeName,\r\n // cartFeature,\r\n // quantity: 1,\r\n // partName: subItem.activeFeature.partName\r\n // })\r\n // }\r\n // }\r\n // }\r\n // }\r\n // // console.log(\"uniqueModuleParts\", uniqueModuleParts);\r\n // uniqueModuleParts.forEach((uniqueModulePart, uniqueModulePartIndex) => {\r\n // activeFeatures.push({\r\n // selectionGroup: parentGroup.partName,\r\n // partId: subItem.partId + \"_module_\" + uniqueModulePartIndex,\r\n // // partId: subItem.partId,\r\n // cartFeature: uniqueModulePart.cartFeature,\r\n // thumbnail: featureThumbnailUrl(subItem.activeFeature),\r\n // partName: uniqueModulePart.partName,\r\n // description: `Width: ${uniqueModulePart.width} Height: ${uniqueModulePart.height} Inlay Type: ${uniqueModulePart.inlayTypeName}`,\r\n // quantity: uniqueModulePart.quantity\r\n // });\r\n // });\r\n // }\r\n // if (subItem.activeFeature) {\r\n // activeFeatures.push({\r\n // selectionGroup: parentGroup.partName,\r\n // partId: subItem.partId,\r\n // quantity: 0,\r\n // cartFeature: subItem.activeFeature\r\n // });\r\n // }\r\n // })\r\n // }\r\n // });\r\n // // console.log('activeFeatures', activeFeatures);\r\n // if (!returnAllFeatures && this.qtCategories && this.qtCategories.length) {\r\n // activeFeatures = activeFeatures.filter(activeFeature => {\r\n // return this.qtCategories.some(qtCategory => qtCategory.subParts.some(subPart => {\r\n // return subPart.part.partId === activeFeature.partId\r\n // }))\r\n // })\r\n // }\r\n // return activeFeatures\r\n // }\r\n\r\n /**\r\n *\r\n * @param bvState {object}\r\n * @param setCartAndUserState {boolean | array} // only in the parseResponse function (when job is opened in the dashboard)\r\n * @param useNames {boolean}\r\n * @param needToChangeLayout {boolean}\r\n * @param firstLoad {boolean}\r\n */\r\n setActiveFeaturesFromObject(bvState, setCartAndUserState = false, useNames = false, needToChangeLayout = true, firstLoad = false) {\r\n if (bvState) {\r\n\r\n const cabinetParent = this.parts[Cabinet.id];\r\n const countertopGroupParent = this.parts[CountertopGroup.id];\r\n\r\n const layout_type = +bvState.layout_type;\r\n needToChangeLayout = needToChangeLayout && (layout_type || layout_type === 0) && (layout_type !== +this.type);\r\n\r\n if (needToChangeLayout) {\r\n this.type = layout_type;\r\n }\r\n\r\n // to avoid checks below\r\n bvState.disabled_parts = bvState.disabled_parts || [];\r\n\r\n this.getFeatures()\r\n .forEach((parentGroup) => {\r\n if (parentGroup.menuType === 0) {\r\n const partId = parentGroup.partId;\r\n const hasPreviouslySavedItem = this.selectedLayoutFeatures[layout_type]\r\n && this.selectedLayoutFeatures[layout_type][partId];\r\n if (bvState.hasOwnProperty(partId) || hasPreviouslySavedItem) {\r\n if (useNames) {\r\n parentGroup.activeFeature = parentGroup.getFeatureByPartName(bvState[partId]);\r\n if (!parentGroup.activeFeature && hasPreviouslySavedItem) {\r\n parentGroup.activeFeature = parentGroup.getFeatureByPartName(hasPreviouslySavedItem);\r\n }\r\n } else {\r\n parentGroup.activeFeature = parentGroup.getFeatureById(bvState[partId])\r\n || parentGroup.getDefaultFeature();\r\n }\r\n parentGroup.placeholderChanged = !!parentGroup.activeFeature;\r\n // const {activeQuoteIndex} = store.getState().quotesState;\r\n // parentGroup.firstClick[activeQuoteIndex] = !!parentGroup.activeFeature;\r\n }\r\n if (parentGroup.activeFeature && firstLoad && !parentGroup.activeFeature.notAvailableInVisualizer) { // Leave non in vis features locked\r\n parentGroup.activeFeature.dbFeature.unlocked = true;\r\n }\r\n if (bvState.disabled_parts.includes(partId)) {\r\n parentGroup.disabled = true\r\n }\r\n } else {\r\n let relatedItems = parentGroup.getRelatedItems();\r\n relatedItems.forEach((subPart) => {\r\n const partId = subPart.partId;\r\n let previouslySelectedItem = null;\r\n subPart.selectedFeaturesHistory.some(featureName => {\r\n previouslySelectedItem = subPart.getFeatureByPartName(featureName);\r\n return previouslySelectedItem\r\n });\r\n if (bvState.hasOwnProperty(partId) || previouslySelectedItem) {\r\n if (useNames) {\r\n const matchingFeature = (partId === \"backsplash\" && bvState[\"backsplash_type\"])\r\n ? subPart.getFeatureByBacksplashType(bvState[\"backsplash_type\"], bvState[\"backsplash\"])\r\n : subPart.getFeatureByPartName(bvState[partId]);\r\n if (matchingFeature) {\r\n subPart.activeFeature = matchingFeature;\r\n } else if (previouslySelectedItem) {\r\n subPart.activeFeature = previouslySelectedItem;\r\n }\r\n } else {\r\n subPart.activeFeature = subPart.getFeatureById(bvState[partId]) || parentGroup.getDefaultFeature();\r\n }\r\n subPart.placeholderChanged = !!subPart.activeFeature;\r\n // const {activeQuoteIndex} = store.getState().quotesState;\r\n // subPart.firstClick[activeQuoteIndex] = !!subPart.activeFeature;\r\n // if (subPart.firstClick) {\r\n // console.log(\"subPart.firstClick\", subPart);\r\n // }\r\n }\r\n if (subPart.activeFeature && firstLoad && !subPart.activeFeature.notAvailableInVisualizer) {\r\n subPart.activeFeature.dbFeature.unlocked = true;\r\n }\r\n if (bvState.disabled_parts.includes(partId)) {\r\n subPart.disabled = true\r\n }\r\n })\r\n }\r\n });\r\n\r\n const partPredicate = (part, value) => useNames ? part.partName === value : +part.dbFeature.id === +value;\r\n Object.keys(bvState)\r\n .forEach((bvStateKey) => {\r\n let partId, parent, relatedName;\r\n switch(bvStateKey) {\r\n case \"top_cabinet_parts\":\r\n partId = \"top_cabinet_parts\";\r\n parent = cabinetParent;\r\n relatedName = \"topCabinet\";\r\n break;\r\n case \"bottom_cabinet_parts\":\r\n partId = \"bottom_cabinet_parts\";\r\n parent = cabinetParent;\r\n relatedName = \"bottomCabinet\";\r\n break;\r\n case \"crown_molding\":\r\n partId = \"crown_molding_parts\";\r\n parent = cabinetParent;\r\n relatedName = \"crownMolding\";\r\n break;\r\n case \"countertop_parts\":\r\n partId = \"countertop_parts\";\r\n parent = countertopGroupParent;\r\n relatedName = \"countertop\";\r\n break;\r\n default:\r\n break;\r\n }\r\n if (parent && bvState[partId] && bvState[partId].length && parent[relatedName]) {\r\n const relatedItem = parent[relatedName];\r\n // if (bvStateKey === \"top_cabinet_parts\" || bvStateKey === \"bottom_cabinet_parts\") {\r\n // bvState[partId] = Array.isArray(bvState[bvStateKey])\r\n // ? bvState[bvStateKey]\r\n // : JSON.parse(decodeURIComponent(bvState[bvStateKey]));\r\n // }\r\n const matchingParts = bvState[partId]\r\n .map((featureId) => {\r\n const arrayOfItems = (relatedItem.moduleParts)\r\n ? [...relatedItem.featuresParts, ...relatedItem.moduleParts]\r\n : relatedItem.featuresParts;\r\n return arrayOfItems.find(_ => partPredicate(_, featureId));\r\n })\r\n .filter((featuresPart) => {\r\n return featuresPart && featuresPart.matchesMetaForArrayOfConditions(relatedItem.getArrayOfConditions());\r\n });\r\n if (matchingParts.length) {\r\n relatedItem.activeFeatureParts = matchingParts\r\n }\r\n if (bvStateKey === \"top_cabinet_parts\" && bvState[\"top_module_system\"]) {\r\n relatedItem.moduleSystem = Array.isArray(bvState[\"top_module_system\"])\r\n ? bvState[\"top_module_system\"]\r\n : JSON.parse(decodeURIComponent(bvState[\"top_module_system\"]));\r\n if (bvState[\"inlay_types\"]) {\r\n relatedItem.inlayTypes = Array.isArray(bvState[\"inlay_types\"])\r\n ? bvState[\"inlay_types\"]\r\n : JSON.parse(decodeURIComponent(bvState[\"inlay_types\"]));\r\n }\r\n relatedItem.activeFeatureParts = relatedItem.setActiveFeatureParts();\r\n } else if (bvStateKey === \"bottom_cabinet_parts\" && bvState[\"bottom_module_system\"]) {\r\n relatedItem.moduleSystem = Array.isArray(bvState[\"bottom_module_system\"])\r\n ? bvState[\"bottom_module_system\"]\r\n : JSON.parse(decodeURIComponent(bvState[\"bottom_module_system\"]));\r\n relatedItem.activeFeatureParts = relatedItem.setActiveFeatureParts();\r\n }\r\n }\r\n });\r\n\r\n if (needToChangeLayout) {\r\n this.changeLayout(this.getFeatures());\r\n }\r\n\r\n if (setCartAndUserState) {\r\n this.setCartStateAndUserStateFromBvState(bvState, setCartAndUserState);\r\n }\r\n\r\n const layoutParts = this.designNavigationItems()\r\n .filter(parentGroup => parentGroup.part.categoryEnabled)\r\n .map((parentGroup) => parentGroup.part.partName);\r\n\r\n if (!this.isFakeLayout) {\r\n store.dispatch({\r\n type: types.SET_LAYOUT_DATA_PARTS,\r\n payload: {layoutParts}\r\n });\r\n }\r\n\r\n }\r\n }\r\n\r\n /**\r\n * Sets bv features from url\r\n */\r\n\r\n parseUrl(bvState) {\r\n if (bvState.disabled_parts) {\r\n bvState.disabled_parts = bvState.disabled_parts.split(\",\");\r\n }\r\n if (bvState.top_cabinet_parts) {\r\n bvState.top_cabinet_parts = Number.isInteger(bvState.top_cabinet_parts)\r\n ? [bvState.top_cabinet_parts]\r\n : bvState.top_cabinet_parts.split(\",\")\r\n // bvState.top_cabinet_parts = JSON.parse(decodeURIComponent(bvState.top_cabinet_parts));\r\n }\r\n if (bvState.bottom_cabinet_parts) {\r\n bvState.bottom_cabinet_parts = Number.isInteger(bvState.bottom_cabinet_parts)\r\n ? [bvState.bottom_cabinet_parts]\r\n : bvState.bottom_cabinet_parts.split(\",\")\r\n // bvState.bottom_cabinet_parts = JSON.parse(decodeURIComponent(bvState.bottom_cabinet_parts));\r\n }\r\n if (bvState.crown_molding_parts) {\r\n bvState.crown_molding_parts = Number.isInteger(bvState.crown_molding_parts)\r\n ? [bvState.crown_molding_parts]\r\n : bvState.crown_molding_parts.split(\",\")\r\n }\r\n if (bvState.countertop_parts) {\r\n bvState.countertop_parts = Number.isInteger(bvState.countertop_parts)\r\n ? [bvState.countertop_parts]\r\n : bvState.countertop_parts.split(\",\")\r\n }\r\n if (bvState.top_module_system) {\r\n bvState.top_module_system = JSON.parse(decodeURIComponent(bvState.top_module_system))\r\n }\r\n if (bvState.inlay_types) {\r\n bvState.inlay_types = JSON.parse(decodeURIComponent(bvState.inlay_types))\r\n }\r\n if (bvState.bottom_module_system) {\r\n bvState.bottom_module_system = JSON.parse(decodeURIComponent(bvState.bottom_module_system))\r\n }\r\n console.log('restoring bvState from url...', bvState);\r\n return bvState\r\n }\r\n\r\n /**\r\n *\r\n * @param bvState {object}\r\n * @param useNames {boolean}\r\n * @returns bvState {object}\r\n */\r\n addSpecificPropertiesToLocalStorage(bvState, useNames = false) {\r\n const cabinetParent = this.parts[Cabinet.id];\r\n const countertopGroupParent = this.parts[CountertopGroup.id];\r\n const wallsParent = this.parts[Walls.id];\r\n\r\n bvState.layout_type = this.type;\r\n Object.keys(bvState).forEach((bvStateKey) => {\r\n // console.log('bvStateKey', bvStateKey);\r\n switch(bvStateKey) {\r\n case \"top_cabinet\":\r\n // bvState[\"top_cabinet_parts\"] = encodeURIComponent(JSON.stringify(cabinetParent.topCabinet.activeFeatureParts\r\n // .filter(activeFeaturePart => activeFeaturePart)\r\n // .map(activeFeaturePart => {\r\n // return useNames ? activeFeaturePart.partName : activeFeaturePart.dbFeature.id\r\n // })));\r\n if (!cabinetParent.topCabinet || !cabinetParent.topCabinet.activeFeatureParts) {\r\n break;\r\n }\r\n bvState[\"top_cabinet_parts\"] = cabinetParent.topCabinet.activeFeatureParts\r\n .filter(activeFeaturePart => activeFeaturePart)\r\n .map(activeFeaturePart => {\r\n return useNames ? activeFeaturePart.partName : activeFeaturePart.dbFeature.id\r\n });\r\n if (cabinetParent.topCabinet.features.some(feature => feature.metaData[\"Module\"])) { // disabled for now, but in case they are needed - change this condition!\r\n bvState[\"top_module_system\"] = encodeURIComponent(JSON.stringify(cabinetParent.topCabinet.moduleSystem));\r\n bvState[\"inlay_types\"] = encodeURIComponent(JSON.stringify(cabinetParent.topCabinet.inlayTypes));\r\n }\r\n break;\r\n case \"bottom_cabinet\":\r\n if (!cabinetParent.bottomCabinet || !cabinetParent.bottomCabinet.activeFeatureParts) {\r\n break;\r\n }\r\n // bvState[\"bottom_cabinet_parts\"] = encodeURIComponent(JSON.stringify(cabinetParent.bottomCabinet.activeFeatureParts\r\n // .filter(activeFeaturePart => activeFeaturePart)\r\n // .map(activeFeaturePart => {\r\n // return useNames ? activeFeaturePart.partName : activeFeaturePart.dbFeature.id\r\n // })));\r\n bvState[\"bottom_cabinet_parts\"] = cabinetParent.bottomCabinet.activeFeatureParts\r\n .filter(activeFeaturePart => activeFeaturePart)\r\n .map(activeFeaturePart => {\r\n return useNames ? activeFeaturePart.partName : activeFeaturePart.dbFeature.id\r\n });\r\n if (cabinetParent.bottomCabinet.features.some(feature => feature.metaData[\"Module\"])) {\r\n bvState[\"bottom_module_system\"] = encodeURIComponent(JSON.stringify(cabinetParent.bottomCabinet.moduleSystem));\r\n }\r\n break;\r\n case \"crown_molding\":\r\n if (!cabinetParent.crownMolding || !cabinetParent.crownMolding.activeFeatureParts) {\r\n break;\r\n }\r\n bvState[\"crown_molding_parts\"] = cabinetParent.crownMolding.activeFeatureParts\r\n .filter(activeFeaturePart => activeFeaturePart)\r\n .map(activeFeaturePart => {\r\n return useNames ? activeFeaturePart.partName : activeFeaturePart.dbFeature.id\r\n });\r\n break;\r\n case \"countertop\":\r\n if (!countertopGroupParent.countertop || !countertopGroupParent.countertop.activeFeatureParts) {\r\n break;\r\n }\r\n bvState[\"countertop_parts\"] = countertopGroupParent.countertop.activeFeatureParts\r\n .filter(activeFeaturePart => activeFeaturePart)\r\n .map(activeFeaturePart => {\r\n return useNames ? activeFeaturePart.partName : activeFeaturePart.dbFeature.id\r\n });\r\n break;\r\n case \"backsplash\":\r\n if (!wallsParent.backsplash) {\r\n break;\r\n }\r\n bvState[\"backsplash_type\"] = wallsParent.backsplash.getCurrentActiveFeatureType();\r\n break;\r\n default:\r\n break;\r\n }\r\n });\r\n // console.log('bvState', bvState);\r\n return bvState\r\n }\r\n\r\n addNonVisualizerSubPart(featureGroupName){\r\n const otherParent = this.parts[Other.id];\r\n const partId = snakeCase(featureGroupName);\r\n let relatedItem = otherParent.relatedItems.find(relatedItem => relatedItem.partId === partId);\r\n if (!relatedItem) {\r\n relatedItem = new NonVisualizerSubPart(true, partId, featureGroupName);\r\n relatedItem.getParent = () => otherParent;\r\n otherParent.relatedItems.push(relatedItem);\r\n }\r\n return new DesignNavigationItem(relatedItem.partName, relatedItem)\r\n }\r\n\r\n get qtCategories() {\r\n\r\n if (!(Array.isArray(this.qtCategoriesList) && this.qtCategoriesList.length)) {\r\n return this.qtCategoriesList\r\n }\r\n\r\n // if (document.kvConfig.visualizerType === \"Kitchen\" || document.kvConfig.visualizerType === \"KV\") { // no need\r\n const currentLayoutAbbreviation = this.getCurrentLayoutAbbreviation();\r\n if (!currentLayoutAbbreviation.includes(\"I\")) {\r\n const countertopParent = this.parts[CountertopGroup.id];\r\n const countertopSubParts = countertopParent && countertopParent.subParts();\r\n return this.qtCategoriesList.map(qtCategory => {\r\n let qtCategoryHasBeenChanged = false;\r\n const changedSubParts = qtCategory._subParts\r\n .map(subPart => {\r\n if (countertopSubParts) {\r\n switch (subPart.part.partId) {\r\n case \"center_island_countertop\":\r\n qtCategoryHasBeenChanged = true;\r\n return this.getChangedSubPart(countertopSubParts, subPart, \"countertop\");\r\n case \"center_island_sink\":\r\n qtCategoryHasBeenChanged = true;\r\n return this.getChangedSubPart(countertopSubParts, subPart, \"sink\");\r\n case \"center_island_faucet\":\r\n qtCategoryHasBeenChanged = true;\r\n return this.getChangedSubPart(countertopSubParts, subPart, \"faucet\");\r\n case \"center_island_edge\":\r\n qtCategoryHasBeenChanged = true;\r\n return this.getChangedSubPart(countertopSubParts, subPart, \"edge_profile\");\r\n case \"center_island_stovetop\":\r\n qtCategoryHasBeenChanged = true;\r\n return this.getChangedSubPart(countertopSubParts, subPart, \"stovetop\");\r\n default:\r\n return subPart\r\n }\r\n }\r\n return subPart\r\n })\r\n .filter((subPart) => {\r\n return subPart && this.designNavigationItems(subPart, {}, \"\", false, true).length\r\n });\r\n if (qtCategoryHasBeenChanged) {\r\n qtCategory.subParts = changedSubParts;\r\n qtCategory.qtCategoryHasBeenChanged = true;\r\n }\r\n return qtCategory\r\n });\r\n }\r\n return this.qtCategoriesList.map((qtCategory) => {\r\n if (qtCategory.qtCategoryHasBeenChanged) {\r\n qtCategory.subParts = [...qtCategory.defaultSubParts];\r\n qtCategory.qtCategoryHasBeenChanged = false;\r\n }\r\n return qtCategory\r\n })\r\n }\r\n\r\n getChangedSubPart(allSubParts, currentSubPart, partId) {\r\n const newSubPart = allSubParts.find(cPart => cPart.part.partId === partId);\r\n if (!newSubPart) {\r\n return currentSubPart\r\n }\r\n // newSubPart.part.customGroupDisplayName = newSubPart.part.customGroupDisplayName || currentSubPart.part.customGroupDisplayName;\r\n return newSubPart\r\n }\r\n\r\n excludedIndexesFromHover = (layoutType) => {\r\n return [\r\n this.zIndexes[layoutType].Globals.Baseboard, // exclude Globals\r\n this.zIndexes[layoutType].Globals.CeilingHighlights, // exclude Globals\r\n this.zIndexes[layoutType].Globals.CeilingLights, // exclude Globals\r\n this.zIndexes[layoutType].Globals.GlobalShadow, // exclude Globals\r\n this.zIndexes[layoutType].Globals.Decor1, // exclude Globals\r\n this.zIndexes[layoutType].Globals.Decor2, // exclude Globals\r\n this.zIndexes[layoutType].Globals.Decor3, // exclude Globals\r\n this.zIndexes[layoutType].Globals.Decor4, // exclude Globals\r\n this.zIndexes[layoutType].Cabinet.TopCabinetShadow, // exclude TopCabinetShadow\r\n this.zIndexes[layoutType].Cabinet.TopCabinetShadowPart2, // exclude TopCabinetShadow\r\n this.zIndexes[layoutType].Cabinet.BottomCabinetShadow, // exclude BottomCabinetShadow\r\n this.zIndexes[layoutType].CenterIsland.CenterIslandShadow, // exclude CenterIslandShadow\r\n this.zIndexes[layoutType].CenterIsland.ChairsShadow, // exclude CenterIslandShadow\r\n this.zIndexes[layoutType].Appliances.FridgeShadow, // exclude FridgeShadow\r\n this.zIndexes[layoutType].Cabinet.TopCabinetModuleBox, // exclude TopCabinetModuleBox\r\n this.zIndexes[layoutType].Cabinet.TopCabinetModuleBox2, // exclude TopCabinetModuleBox2\r\n this.zIndexes[layoutType].Cabinet.BottomCabinetModuleBox, // exclude BottomCabinetModuleBox\r\n this.zIndexes[layoutType].Cabinet.BottomCabinetModuleBox2, // exclude BottomCabinetModuleBox2\r\n ]\r\n }\r\n\r\n}\r\n","import uniqBy from \"lodash/uniqBy\";\r\n\r\nimport {IntermediatePart} from \"../intermediatePart\";\r\n\r\nexport default class NonVisualizerSubPart extends IntermediatePart {\r\n constructor(isChild, partId, partName) {\r\n super(isChild);\r\n this.partId = partId;\r\n this.visible = true;\r\n this.partName = partName;\r\n // this.allFeaturesReceived = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new NonVisualizerSubPart(false, this.partId, dbFeature.groupName));\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const navSubItems = super.navigationSubItems(filters, searchText)\r\n return uniqBy(navSubItems, (navItem) => navItem.part.dbFeature.sharedFeatureName);\r\n }\r\n}\r\n","import React, {Component} from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {connect} from \"react-redux\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport Z from \"../core/zIndex\";\r\nimport {reorder} from \"../../../misc/utils\";\r\nimport Analytics from \"../../../analytics\";\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\n\r\nimport {BACKSPLASH_TYPES} from \"../core/constants\";\r\n\r\nclass ContextMenuSimple extends Component {\r\n\r\n static propTypes = {\r\n contextMenuOpen: PropTypes.string.isRequired,\r\n hoveredLayer: PropTypes.object,\r\n handleContextMenuClick: PropTypes.func,\r\n contextMenuPosition: PropTypes.object,\r\n contextMenuPonyWall: PropTypes.bool,\r\n renderGreenLayerByZindex: PropTypes.func,\r\n closeContextMenu: PropTypes.func,\r\n };\r\n\r\n state = {\r\n contextMenuButtons: []\r\n };\r\n\r\n componentDidMount() {\r\n this.setContextMenuButtons();\r\n if (this.props.closeContextMenu) {\r\n document.addEventListener('click', this.contextMenuBlur)\r\n }\r\n }\r\n\r\n contextMenuBlur = (e) => {\r\n if (!e.target.closest('.contextmenu-buttons')\r\n && !e.target.closest('.contextmenu-buttons__button')\r\n && !e.target.closest('.sprocket-container') && !e.target.closest('.canvas')) {\r\n this.props.closeContextMenu();\r\n }\r\n };\r\n\r\n componentWillUnmount() {\r\n if (this.props.closeContextMenu) {\r\n document.removeEventListener('click', this.contextMenuBlur)\r\n }\r\n }\r\n\r\n setContextMenuButtons() {\r\n const layout = getCurrentLayout();\r\n const contextMenuOpen = this.props.contextMenuOpen;\r\n if (contextMenuOpen === \"backsplash_custom\"\r\n || contextMenuOpen === \"backsplash_custom_left\"\r\n || contextMenuOpen === \"backsplash_custom_right\"\r\n || contextMenuOpen === \"right_wall_custom\"\r\n || contextMenuOpen === \"left_wall_custom\") {\r\n this.setBacksplashButtons();\r\n return\r\n }\r\n\r\n const hoveredParent = layout.designNavigationItems().find(navItem => {\r\n return navItem.text === contextMenuOpen\r\n });\r\n\r\n let relatedItems = hoveredParent.part.relatedItems;\r\n\r\n const clickedItem = relatedItems.find((item) => {\r\n let zIndexToFind = this.props.hoveredLayer.zIndex;\r\n const currentLayoutName = layout.getCurrentLayoutName();\r\n if (zIndexToFind === Z.layouts[currentLayoutName].CountertopGroup.Countertop2) {\r\n return item.partId === \"countertop\"\r\n }\r\n return item.activeFeature && item.activeFeature.layer.zIndex === zIndexToFind\r\n });\r\n\r\n let itemsToRender = this.getItemsToRender(hoveredParent);\r\n\r\n // console.log('clickedItem', clickedItem);\r\n // console.log('relatedItems', relatedItems);\r\n // console.log('itemsToRender', itemsToRender);\r\n\r\n const clickedItemIndex = itemsToRender.findIndex(item => item.text === clickedItem.partName);\r\n if (clickedItemIndex > 0) {\r\n itemsToRender = reorder(itemsToRender, clickedItemIndex, 0); // swap items in array start\r\n }\r\n\r\n itemsToRender = itemsToRender.map(item => {\r\n if (item.text === \"Island Countertop\") {\r\n // item.subMenuText = \"Countertop\";\r\n item.bgImageText = \"Countertop\";\r\n }\r\n return item\r\n });\r\n\r\n this.setState({\r\n contextMenuButtons: itemsToRender\r\n })\r\n }\r\n\r\n getItemsToRender = (hoveredParent) => {\r\n let itemsToRender = hoveredParent.part.subParts();\r\n let availablePartIds = [];\r\n switch (this.props.contextMenuOpen) {\r\n case \"Center Island\":\r\n availablePartIds = [\"center_island_sink\", \"center_island_faucet\", \"center_island_countertop\",\r\n \"center_island_stovetop\", \"center_island_range\", \"center_island_edge\"];\r\n break;\r\n case \"Countertop\":\r\n availablePartIds = [\"countertop\", \"faucet\", \"sink\", \"edge_profile\"];\r\n break;\r\n case \"Walls\":\r\n availablePartIds = [\"right_wall\", \"backsplash\"];\r\n break;\r\n default:\r\n break;\r\n }\r\n return itemsToRender.filter(menuButton => availablePartIds.includes(menuButton.part.partId));\r\n };\r\n\r\n getBackSplashButtons = () => {\r\n return BACKSPLASH_TYPES.map(bType => {\r\n const button = {\r\n text: bType,\r\n };\r\n switch (bType) {\r\n case \"4in\":\r\n button.subMenuText = \"visualizer.kitchen.contextmenu.backsplash.4in\"\r\n break;\r\n case \"6in\":\r\n button.subMenuText = \"visualizer.kitchen.contextmenu.backsplash.6in\"\r\n break;\r\n case \"18in\":\r\n button.subMenuText = \"visualizer.kitchen.contextmenu.backsplash.18in\"\r\n break;\r\n }\r\n return button\r\n })\r\n };\r\n\r\n setBacksplashButtons = () => {\r\n const layout = getCurrentLayout();\r\n const hoveredParent = layout.designNavigationItems().find(navItem => {\r\n return navItem.text === \"Walls\"\r\n });\r\n const subParts = hoveredParent.part.subParts();\r\n\r\n let contextMenuButtons = [];\r\n const backSplashButtons = this.getBackSplashButtons();\r\n const rightWall = subParts.find(menuButton => menuButton.part.partId === \"right_wall\");\r\n const leftWall = subParts.find(menuButton => menuButton.part.partId === \"left_wall\");\r\n if (rightWall) {\r\n rightWall.subMenuParent = \"Walls\";\r\n }\r\n if (leftWall) {\r\n leftWall.subMenuParent = \"Walls\";\r\n }\r\n switch (this.props.contextMenuOpen) {\r\n case \"right_wall_custom\": {\r\n contextMenuButtons = rightWall ? [rightWall, ...backSplashButtons] : backSplashButtons;\r\n break;\r\n }\r\n case \"left_wall_custom\": {\r\n contextMenuButtons = leftWall ? [leftWall, ...backSplashButtons] : backSplashButtons;\r\n break;\r\n }\r\n case \"backsplash_custom_left\": {\r\n contextMenuButtons = [...backSplashButtons, leftWall];\r\n break;\r\n }\r\n case \"backsplash_custom_right\": {\r\n contextMenuButtons = [...backSplashButtons, rightWall];\r\n break;\r\n }\r\n case \"backsplash_custom\": {\r\n contextMenuButtons = backSplashButtons; // just in case, we should not have these cases\r\n break;\r\n }\r\n }\r\n this.setState({\r\n contextMenuButtons\r\n })\r\n };\r\n\r\n handleContextMenuHover = () => {\r\n //TODO[Artem] add here rendering green zones on hover\r\n };\r\n\r\n render() {\r\n\r\n let contextMenuStyles = this.props.contextMenuPosition || {};\r\n if (this.state.contextMenuButtons.length <= 4) {\r\n contextMenuStyles = Object.assign({}, contextMenuStyles, {maxWidth:\"210px\"} )\r\n }\r\n\r\n return (\r\n
    \r\n
    \r\n {this.state.contextMenuButtons.map((menuItem) => {\r\n if (!menuItem) {\r\n return null\r\n }\r\n return (\r\n \r\n )\r\n })}\r\n
    \r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = () => {\r\n return {};\r\n};\r\n\r\nconst mapDispatchToProps = {};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(ContextMenuSimple)\r\n","import React, {Component} from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {connect} from 'react-redux';\r\n\r\nimport Analytics from \"../../../analytics\";\r\nimport {getModuleCombinations} from \"../core/subparts/cabinet/cabinetModuleSystem\";\r\nimport {MODULE_CONTEXT_MENU_TYPES, MODULE_CONTEXT_MENU_DIRECTIONS, CABINET_WIZARD_BUTTONS} from \"../core/constants\";\r\nimport Cabinet from \"../core/parts/cabinet\";\r\nimport {\r\n setModuleContextMenuType,\r\n setModuleContextMenuDirection,\r\n setModuleContextMenuModule,\r\n setModuleContextMenuModulePart,\r\n setActiveNavigationFilter, setActiveNavigationFilterStepIndex\r\n} from \"../../../actions/navigationFunctions\";\r\n\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\n\r\nclass CabinetContextMenu extends Component {\r\n\r\n static propTypes = {\r\n updateCanvas: PropTypes.func,\r\n contextMenuOpen: PropTypes.object,\r\n hoveredLayer: PropTypes.object,\r\n handleContextMenuClick: PropTypes.func,\r\n contextMenuPosition: PropTypes.object,\r\n closeContextMenu: PropTypes.func,\r\n };\r\n\r\n state = {\r\n contextMenuButtons: [],\r\n };\r\n\r\n componentDidMount() {\r\n if (this.props.closeContextMenu) {\r\n document.addEventListener('click', this.contextMenuBlur)\r\n }\r\n const moduleSplitted = this.props.contextMenuOpen.module.split(\"_\"); // example: \"4_4\"\r\n this.props.setModuleContextMenuModule(moduleSplitted[0]);\r\n this.props.setModuleContextMenuModulePart(moduleSplitted[1]);\r\n }\r\n\r\n contextMenuBlur = (e) => {\r\n if (!e.target.closest('.contextmenu-buttons')\r\n && !e.target.closest('.contextmenu-buttons__button')\r\n && !e.target.closest('.contextmenu-slice')\r\n && !e.target.closest('.canvas')) {\r\n this.props.closeContextMenu();\r\n }\r\n };\r\n\r\n componentWillUnmount() {\r\n if (this.props.closeContextMenu) {\r\n document.removeEventListener('click', this.contextMenuBlur)\r\n }\r\n }\r\n\r\n resetModule = () => {\r\n const layout = getCurrentLayout();\r\n const cabinetParent = layout.parts[Cabinet.id];\r\n if (this.props.contextMenuOpen.contextMenuPartId === \"top_cabinet\") {\r\n const moduleSplitted = this.props.contextMenuOpen.module.split(\"_\"); // example: \"4_4\"\r\n const arrayNumber = +moduleSplitted[0] - 1;\r\n cabinetParent.topCabinet.moduleSystem[arrayNumber] = (arrayNumber === 0 || arrayNumber === 5)\r\n ? [\"36_18_19\"] // copy array since it might be overwritten\r\n : [\"36_36_1\"];\r\n cabinetParent.topCabinet.activeFeatureParts = cabinetParent.topCabinet.setActiveFeatureParts();\r\n this.props.updateCanvas();\r\n } else if (this.props.contextMenuOpen.contextMenuPartId === \"bottom_cabinet\") {\r\n const moduleSplitted = this.props.contextMenuOpen.module.split(\"_\"); // example: \"4_4\"\r\n const arrayNumber = +moduleSplitted[0] - 1;\r\n cabinetParent.bottomCabinet.moduleSystem[arrayNumber] = [\"36_36_1\"];\r\n cabinetParent.bottomCabinet.activeFeatureParts = cabinetParent.bottomCabinet.setActiveFeatureParts();\r\n this.props.updateCanvas();\r\n }\r\n this.props.closeContextMenu();\r\n };\r\n\r\n setCabinetModule = (buttonId) => {\r\n const layout = getCurrentLayout();\r\n console.log(\"buttonId\", buttonId);\r\n console.log(\"this.props.contextMenuOpen\", this.props.contextMenuOpen);\r\n const moduleParts = buttonId.split(\"-\"); // example: \"12_36_4-12_36_57-12_36_58\" // width-height-id\r\n const cabinetParent = layout.parts[Cabinet.id];\r\n let subPartName = \"\";\r\n if (this.props.contextMenuOpen.contextMenuPartId === \"top_cabinet\") {\r\n subPartName = \"topCabinet\";\r\n } else if (this.props.contextMenuOpen.contextMenuPartId === \"bottom_cabinet\") {\r\n subPartName = \"bottomCabinet\";\r\n }\r\n if (this.props.contextMenuOpen.contextMenuPartId === \"top_cabinet\"\r\n || this.props.contextMenuOpen.contextMenuPartId === \"bottom_cabinet\") {\r\n const moduleSplitted = this.props.contextMenuOpen.module.split(\"_\"); // example: \"4_4\"\r\n cabinetParent[subPartName].inlayTypes.forEach(inlayTypeObj => {\r\n const existingMJoinedIndex = inlayTypeObj.moduleParts.findIndex(mJoined => {\r\n return mJoined === this.props.contextMenuOpen.module\r\n });\r\n if (existingMJoinedIndex > -1) { // it is not a default! push new spliced\r\n // inlayTypeObj.moduleParts.splice(existingMJoinedIndex, 1);\r\n moduleParts.forEach((modulePart) => {\r\n inlayTypeObj.moduleParts.push(moduleSplitted[0] + \"_\" + modulePart.split(\"_\")[2]);\r\n });\r\n }\r\n });\r\n const moduleSystemPart = cabinetParent[subPartName].moduleSystem[+moduleSplitted[0] - 1];\r\n // 1) remove old\r\n const oldIndex = moduleSystemPart.findIndex(modulePart => {\r\n // example: \"12_36_4-12_36_57-12_36_58\" // width-height-id\r\n return modulePart.split(\"_\")[2] === this.props.moduleContextMenuModulePart\r\n });\r\n moduleSystemPart.splice(oldIndex,1);\r\n // 2) add new ones\r\n moduleParts.forEach((modulePart) => {\r\n moduleSystemPart.push(modulePart);\r\n });\r\n cabinetParent[subPartName].activeFeatureParts = cabinetParent[subPartName].setActiveFeatureParts();\r\n this.props.updateCanvas();\r\n layout.updateLocalStorage();\r\n }\r\n\r\n };\r\n\r\n getSliceButtons = () => {\r\n const availableSplitButtons = getModuleCombinations(this.props.moduleContextMenuModulePart, this.props.moduleContextMenuDirection);\r\n return availableSplitButtons.map(buttonId => {\r\n return {\r\n text: \"\",\r\n buttonId,\r\n onClick: () => {\r\n this.setCabinetModule(buttonId);\r\n this.props.closeContextMenu();\r\n }\r\n }\r\n })\r\n };\r\n getResetButton = () => {\r\n return {\r\n text: \"Reset Module\",\r\n buttonId: \"reset\",\r\n onClick: this.resetModule\r\n }\r\n };\r\n getExitButton = () => {\r\n return {\r\n text: \"Exit config\",\r\n buttonId: \"exit_config\",\r\n onClick: () => this.props.setModuleContextMenuType(MODULE_CONTEXT_MENU_TYPES.Filters)\r\n }\r\n };\r\n openNavigationMenu = (e) => {\r\n const layout = getCurrentLayout();\r\n const cabinetParent = layout.parts[Cabinet.id];\r\n const subParts = cabinetParent.subParts();\r\n const subPart = subParts.find(menuItem => menuItem.part.partId === this.props.contextMenuOpen.contextMenuPartId);\r\n this.props.handleContextMenuClick(subPart); // top cabinet\r\n this.props.setActiveNavigationFilter(e.target.dataset.id);\r\n this.props.setActiveNavigationFilterStepIndex(e.target.dataset.index);\r\n this.props.closeContextMenu();\r\n };\r\n getCabinetConfigurationButtons = () => {\r\n const cabinetConfigurationButtons = CABINET_WIZARD_BUTTONS\r\n .filter(wizardButton => wizardButton.buttonId !== CABINET_WIZARD_BUTTONS[0].buttonId)\r\n .map((wizardButton) => {\r\n wizardButton.onClick = this.openNavigationMenu;\r\n return wizardButton\r\n });\r\n const availableModuleCombinations = getModuleCombinations(this.props.moduleContextMenuModulePart);\r\n if (availableModuleCombinations && availableModuleCombinations.length) {\r\n cabinetConfigurationButtons.push({\r\n text: \"Door config\",\r\n buttonId: \"door_config\",\r\n onClick: () => this.props.setModuleContextMenuType(MODULE_CONTEXT_MENU_TYPES.SliceButtons)\r\n })\r\n }\r\n return cabinetConfigurationButtons\r\n };\r\n getContextMenuButtons = () => {\r\n switch (this.props.moduleContextMenuType) {\r\n case MODULE_CONTEXT_MENU_TYPES.Filters:\r\n return (this.props.moduleContextMenuModulePart === \"1\") //remove reset button if there is nowhere to split\r\n ? this.getCabinetConfigurationButtons()\r\n : [...this.getCabinetConfigurationButtons(), this.getResetButton()];\r\n case MODULE_CONTEXT_MENU_TYPES.SliceButtons:\r\n default: {\r\n const sliceButtons = this.getSliceButtons();\r\n return sliceButtons.length\r\n ? [...sliceButtons, this.getExitButton(), this.getResetButton()]\r\n : [...this.getCabinetConfigurationButtons(), this.getResetButton()]\r\n }\r\n }\r\n };\r\n\r\n render() {\r\n\r\n let contextMenuStyles = (this.props.windowWidth > 991 && this.props.contextMenuPosition)\r\n ? this.props.contextMenuPosition\r\n : {};\r\n if (this.state.contextMenuButtons.length === 4) {\r\n contextMenuStyles = Object.assign({}, contextMenuStyles, {maxWidth:\"210px\"} )\r\n }\r\n const availableHorizontalAndVertical = [\"1\", \"2\", \"3\", \"9\", \"10\"]; // show buttons for available splits\r\n const firstSliceIsActve = (this.props.moduleContextMenuType === MODULE_CONTEXT_MENU_TYPES.SliceButtons)\r\n && availableHorizontalAndVertical.includes(this.props.moduleContextMenuModulePart);\r\n\r\n return (\r\n
    \r\n {firstSliceIsActve ? (\r\n
    \r\n {Object.keys(MODULE_CONTEXT_MENU_DIRECTIONS).map((direction) => (\r\n \r\n ))}\r\n
    \r\n ) : null}\r\n
    \r\n {this.getContextMenuButtons().map((contextButton, contextButtonIndex) => {\r\n return (\r\n \r\n )\r\n })}\r\n
    \r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => ({\r\n moduleContextMenuType: store.navigationState.moduleContextMenuType,\r\n moduleContextMenuDirection: store.navigationState.moduleContextMenuDirection,\r\n moduleContextMenuModulePart: store.navigationState.moduleContextMenuModulePart,\r\n windowWidth: store.serverState.windowWidth,\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n setModuleContextMenuType,\r\n setModuleContextMenuDirection,\r\n setModuleContextMenuModule,\r\n setModuleContextMenuModulePart,\r\n setActiveNavigationFilter,\r\n setActiveNavigationFilterStepIndex\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(CabinetContextMenu);\r\n","import snakeCase from 'lodash/snakeCase';\r\nimport invert from 'lodash/invert';\r\n\r\nimport LayoutCommonNew from \"../../visComponents/layoutCommonNew\";\r\n\r\nimport Globals from \"./parts/globals\";\r\n\r\nimport {LayoutType, LayoutAbbreviation} from \"./constants\";\r\nimport zIndexes from \"./zIndex\";\r\nimport Other from \"./parts/other\";\r\nimport NonVisualizerSubPart from \"./subparts/nonVisualizerSubPart\";\r\nimport DesignNavigationItem from \"../../visComponents/designNavigationItem\";\r\nimport Background from \"./parts/background\";\r\nimport Appliance from \"./parts/appliance\";\r\nimport CountertopGroup from \"./parts/countertopGroup\";\r\nimport Cabinet from \"./parts/cabinet\";\r\nimport Floor from \"./parts/floor\";\r\nimport Walls from \"./parts/walls\";\r\nimport CenterIsland from \"./parts/centerIsland\";\r\nimport {AVAILABLE_VISUALIZER_TYPES} from \"../../../config\";\r\n\r\nexport class Layout extends LayoutCommonNew {\r\n\r\n /**\r\n * @type {int}\r\n */\r\n defaultType = LayoutType.Layout1;\r\n type = this.defaultType;\r\n scene = \"1\";\r\n visualizerType = AVAILABLE_VISUALIZER_TYPES.kvScene;\r\n localStorageKey = \"kvSceneState\";\r\n layersBinding = \"KitchenV5\";\r\n layoutNames = LayoutAbbreviation;\r\n layoutTypes = LayoutType;\r\n zIndexes = zIndexes.layouts;\r\n excludedPartIdsFromHover = [\"decor_\", \"background_bg\", \"walls_ceiling\", \"attachment\"];\r\n\r\n constructor(props) {\r\n super(props);\r\n this.parts[Background.id] = new Background();\r\n this.parts[CenterIsland.id] = new CenterIsland();\r\n this.parts[CountertopGroup.id] = new CountertopGroup();\r\n this.parts[Appliance.id] = new Appliance();\r\n this.parts[Cabinet.id] = new Cabinet();\r\n this.parts[Walls.id] = new Walls();\r\n this.parts[Floor.id] = new Floor();\r\n this.parts[Globals.id] = new Globals();\r\n this.parts[Other.id] = new Other();\r\n Object.values(this.parts).forEach(part => part.layout = this);\r\n }\r\n\r\n getCurrentLayoutName(type = this.type) {\r\n return invert(LayoutType)[type];\r\n }\r\n\r\n getCurrentLayoutAbbreviation() {\r\n return LayoutAbbreviation[this.getCurrentLayoutName()]\r\n }\r\n\r\n addNonVisualizerSubPart(featureGroupName){\r\n const otherParent = this.parts[Other.id];\r\n const partId = snakeCase(featureGroupName);\r\n let relatedItem = otherParent.relatedItems.find(relatedItem => relatedItem.partId === partId);\r\n if (!relatedItem) {\r\n relatedItem = new NonVisualizerSubPart(true, partId, featureGroupName);\r\n relatedItem.getParent = () => otherParent;\r\n otherParent.relatedItems.push(relatedItem);\r\n }\r\n return new DesignNavigationItem(relatedItem.partName, relatedItem)\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../intermediatePart\";\r\n\r\nexport default class NonVisualizerSubPart extends IntermediatePart {\r\n constructor(isChild, partId, partName) {\r\n super(isChild);\r\n this.partId = partId;\r\n this.visible = true;\r\n this.partName = partName;\r\n // this.allFeaturesReceived = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new NonVisualizerSubPart(false, this.partId, dbFeature.groupName));\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n return this.navigationNoMetaSubItems(filters, searchText)\r\n }\r\n}\r\n","import React, {Component} from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {connect} from \"react-redux\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\n\r\nimport {reorder} from \"../../../misc/utils\";\r\nimport Analytics from \"../../../analytics\";\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\nimport {BACKSPLASH_TYPES} from \"../../kvComponent/core/constants\";\r\nimport CenterIsland from \"../core/parts/centerIsland\";\r\nimport {getFeatureGroupName} from \"../../../misc/helpers\";\r\n\r\nclass ContextMenuSimple extends Component {\r\n\r\n static propTypes = {\r\n contextMenuOpen: PropTypes.string.isRequired,\r\n hoveredLayer: PropTypes.object,\r\n handleContextMenuClick: PropTypes.func,\r\n contextMenuPosition: PropTypes.object,\r\n contextMenuPonyWall: PropTypes.bool,\r\n renderGreenLayerByZindex: PropTypes.func,\r\n closeContextMenu: PropTypes.func,\r\n };\r\n\r\n state = {\r\n contextMenuButtons: []\r\n };\r\n\r\n componentDidMount() {\r\n this.setContextMenuButtons();\r\n if (this.props.closeContextMenu) {\r\n document.addEventListener('click', this.contextMenuBlur)\r\n }\r\n }\r\n\r\n contextMenuBlur = (e) => {\r\n if (!e.target.closest('.contextmenu-buttons')\r\n && !e.target.closest('.contextmenu-buttons__button')\r\n && !e.target.closest('.sprocket-container') && !e.target.closest('.canvas')) {\r\n this.props.closeContextMenu();\r\n }\r\n };\r\n\r\n componentWillUnmount() {\r\n if (this.props.closeContextMenu) {\r\n document.removeEventListener('click', this.contextMenuBlur)\r\n }\r\n }\r\n\r\n setContextMenuButtons() {\r\n const layout = getCurrentLayout();\r\n const contextMenuOpen = this.props.contextMenuOpen;\r\n if (contextMenuOpen === \"backsplash_custom\"\r\n || contextMenuOpen === \"backsplash_custom_left\"\r\n || contextMenuOpen === \"backsplash_custom_right\"\r\n || contextMenuOpen === \"right_wall_custom\"\r\n || contextMenuOpen === \"left_wall_custom\") {\r\n this.setBacksplashButtons();\r\n return\r\n }\r\n\r\n const hoveredParent = layout.designNavigationItems().find(navItem => {\r\n return navItem.text === contextMenuOpen\r\n });\r\n\r\n let relatedItems = hoveredParent.part.relatedItems;\r\n\r\n const clickedItem = relatedItems.find((item) => {\r\n return item.activeFeature && (item.partId === this.props.hoveredLayer.partId)\r\n });\r\n\r\n let itemsToRender = this.getItemsToRender(hoveredParent);\r\n\r\n // console.log('clickedItem', clickedItem);\r\n // console.log('relatedItems', relatedItems);\r\n // console.log('itemsToRender', itemsToRender);\r\n\r\n const clickedItemIndex = itemsToRender.findIndex(item => item.text === clickedItem.partName);\r\n if (clickedItemIndex > 0) {\r\n itemsToRender = reorder(itemsToRender, clickedItemIndex, 0); // swap items in array start\r\n }\r\n\r\n itemsToRender = itemsToRender.map(item => {\r\n if (item.text === CenterIsland.id) {\r\n // item.subMenuText = \"Countertop\";\r\n item.bgImageText = \"Countertop\";\r\n }\r\n return item\r\n });\r\n\r\n this.setState({\r\n contextMenuButtons: itemsToRender\r\n })\r\n }\r\n\r\n getItemsToRender = (hoveredParent) => {\r\n let itemsToRender = hoveredParent.part.subParts();\r\n let availablePartIds = [];\r\n switch (this.props.contextMenuOpen) {\r\n case CenterIsland.id:\r\n availablePartIds = [\"center_island_sink\", \"center_island_faucet\", \"center_island_countertop\",\r\n \"center_island_stovetop\", \"center_island_range\", \"center_island_edge\"];\r\n break;\r\n case \"Countertop\":\r\n availablePartIds = [\"countertop\", \"faucet\", \"sink\", \"edge_profile\"];\r\n break;\r\n case \"Walls\":\r\n availablePartIds = [\"right_wall\", \"backsplash\"];\r\n break;\r\n default:\r\n break;\r\n }\r\n return itemsToRender.filter(menuButton => {\r\n if ((document.kvConfig.visualizerType === \"kvScene\") && (menuButton.part.partId === \"center_island_edge\")) {\r\n const layout = getCurrentLayout();\r\n if (layout.type === 3) {\r\n return false\r\n }\r\n }\r\n if ((document.kvConfig.visualizerType === \"kvScene\") && (menuButton.part.partId === \"center_island_stovetop\")) {\r\n const layout = getCurrentLayout();\r\n if (layout.type === 6) {\r\n return false\r\n }\r\n }\r\n // return availablePartIds.includes(menuButton.part.partId) && hoveredParent.part.layout.hasNavItemsLength(menuButton)\r\n return availablePartIds.includes(menuButton.part.partId)\r\n });\r\n };\r\n\r\n getBackSplashButtons = () => {\r\n return BACKSPLASH_TYPES.map(bType => {\r\n const button = {\r\n text: bType,\r\n };\r\n switch (bType) {\r\n case \"4in\":\r\n button.subMenuText = \"visualizer.kitchen.contextmenu.backsplash.4in\"\r\n break;\r\n case \"6in\":\r\n button.subMenuText = \"visualizer.kitchen.contextmenu.backsplash.6in\"\r\n break;\r\n case \"Full\":\r\n button.subMenuText = \"visualizer.kitchen.contextmenu.backsplash.18in\"\r\n break;\r\n }\r\n return button\r\n })\r\n };\r\n\r\n setBacksplashButtons = () => {\r\n const layout = getCurrentLayout();\r\n const hoveredParent = layout.designNavigationItems().find(navItem => {\r\n return navItem.text === \"Walls\"\r\n });\r\n const subParts = hoveredParent.part.subParts();\r\n\r\n let contextMenuButtons = [];\r\n const backSplashButtons = this.getBackSplashButtons();\r\n const rightWall = subParts.find(menuButton => menuButton.part.partId === \"right_wall\");\r\n const leftWall = subParts.find(menuButton => menuButton.part.partId === \"left_wall\");\r\n if (rightWall) {\r\n rightWall.subMenuParent = \"Walls\";\r\n }\r\n if (leftWall) {\r\n leftWall.subMenuParent = \"Walls\";\r\n }\r\n switch (this.props.contextMenuOpen) {\r\n case \"right_wall_custom\": {\r\n contextMenuButtons = rightWall ? [rightWall, ...backSplashButtons] : backSplashButtons;\r\n break;\r\n }\r\n case \"left_wall_custom\": {\r\n contextMenuButtons = leftWall ? [leftWall, ...backSplashButtons] : backSplashButtons;\r\n break;\r\n }\r\n case \"backsplash_custom_left\": {\r\n contextMenuButtons = [...backSplashButtons, leftWall];\r\n break;\r\n }\r\n case \"backsplash_custom_right\": {\r\n contextMenuButtons = [...backSplashButtons, rightWall];\r\n break;\r\n }\r\n case \"backsplash_custom\": {\r\n contextMenuButtons = backSplashButtons; // just in case, we should not have these cases\r\n break;\r\n }\r\n }\r\n this.setState({\r\n contextMenuButtons\r\n })\r\n };\r\n\r\n handleContextMenuHover = () => {\r\n //TODO[Artem] add here rendering green zones on hover\r\n };\r\n\r\n render() {\r\n\r\n let contextMenuStyles = this.props.contextMenuPosition || {};\r\n if (this.state.contextMenuButtons.length <= 4) {\r\n contextMenuStyles = Object.assign({}, contextMenuStyles, {maxWidth:\"210px\"} )\r\n }\r\n\r\n const {intl, fabricatorData} = this.props;\r\n\r\n return (\r\n
    \r\n
    \r\n {this.state.contextMenuButtons.map((menuItem) => {\r\n if (!menuItem) {\r\n return null\r\n }\r\n return (\r\n \r\n )\r\n })}\r\n
    \r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n fabricatorData: store.fabricatorState,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(ContextMenuSimple)\r\n)\r\n","import {IntermediatePart} from \"../intermediatePart\";\r\n\r\nexport default class NonVisualizerSubPart extends IntermediatePart {\r\n constructor(isChild, partId, partName) {\r\n super(isChild);\r\n this.partId = partId;\r\n this.visible = true;\r\n this.partName = partName;\r\n // this.allFeaturesReceived = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new NonVisualizerSubPart(false, this.partId, dbFeature.groupName));\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n return this.navigationNoMetaSubItems(filters, searchText)\r\n }\r\n}\r\n","import {Part} from \"../part\";\r\nimport {wallsThumbnail} from \"../../../bvComponent/core/assets\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\n\r\nimport store from \"../../../../store\";\r\nimport LeftWall from \"../subparts/walls/leftWall\";\r\nimport RightWall from \"../subparts/walls/rightWall\";\r\nimport CenterWall from \"../subparts/walls/centerWall\";\r\nimport CeilingPanels from \"../subparts/walls/ceilingPanels\";\r\n\r\nexport default class Walls extends Part {\r\n static id = 'Walls';\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Walls';\r\n this.translateId = \"visualizer.bathroom.walls\";\r\n this.partThumbnail = wallsThumbnail;\r\n\r\n // related items\r\n this.leftWall = null;\r\n this.rightWall = null;\r\n this.centerWall = null;\r\n this.popoutWall = null;\r\n this.ceiling = null;\r\n this.ceilingPanels = null;\r\n\r\n this.allWallsApplied = true;\r\n }\r\n\r\n load(dbFeature) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Left Wall\":\r\n relatedItemName = \"leftWall\";\r\n RelatedItemClass = LeftWall;\r\n break;\r\n case \"Right Wall\":\r\n relatedItemName = \"rightWall\";\r\n RelatedItemClass = RightWall;\r\n break;\r\n case \"Center Wall\":\r\n relatedItemName = \"centerWall\";\r\n RelatedItemClass = CenterWall;\r\n break;\r\n case \"Ceiling Panels\":\r\n relatedItemName = \"ceilingPanels\";\r\n RelatedItemClass = CeilingPanels;\r\n break;\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n if (relatedItemName !== \"shadows\") {\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n subParts(withHidden = true) {\r\n return this.relatedItems\r\n .filter(item => {\r\n if (item.partId === \"popout_wall\") {\r\n item.visible = item.getParent().layout.getCurrentLayoutAbbreviation().includes(\"P\")\r\n }\r\n return this.filterRelatedItem(item, withHidden)\r\n })\r\n .map(_ => new DesignNavigationItem(_.partName, _));\r\n }\r\n\r\n handleSubPartClick() {\r\n\r\n }\r\n\r\n recoverPrevioslySelected(activeRelatedPart) {\r\n const {activeQuoteIndex} = store.getState().quotesState;\r\n this.relatedItems.forEach(relatedItem => {\r\n if (relatedItem.partId !== activeRelatedPart.partId && relatedItem.activeFeatureBeforeAllWalls) {\r\n if (relatedItem.activeFeatureBeforeAllWalls === \"placeholder\") {\r\n relatedItem.placeholderChanged = false;\r\n relatedItem.firstClick[activeQuoteIndex] = false;\r\n } else if (!relatedItem.selectedByUser) {\r\n relatedItem.activeFeatureBeforeAllWalls.clickFromAllWalls();\r\n }\r\n }\r\n });\r\n }\r\n\r\n}\r\n","import React, {Component} from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport Z from \"../core/zIndex\";\r\nimport {ShowerTubCombo} from \"../core/parts/showerTubCombo\";\r\nimport {Vanity} from \"../core/parts/vanity\";\r\nimport {Shower} from \"../core/parts/shower\";\r\nimport Walls from \"../core/parts/walls\";\r\nimport {VanityTypes, ShowerComboTubType} from \"../core/constants\";\r\nimport {getMetadataByDimensions, reorder} from \"../../../misc/utils\";\r\nimport Analytics from \"../../../analytics\";\r\n\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\nimport {ShowerAccessories} from \"../core/parts/showerAccessories\";\r\n\r\nexport default class ContextMenu extends Component {\r\n\r\n static propTypes = {\r\n designNavigationItems: PropTypes.array,\r\n contextMenuOpen: PropTypes.string,\r\n hoveredLayer: PropTypes.object,\r\n handleContextMenuClick: PropTypes.func,\r\n contextMenuPosition: PropTypes.object,\r\n contextMenuPonyWall: PropTypes.bool,\r\n renderGreenLayerByZindex: PropTypes.func,\r\n closeContextMenu: PropTypes.func,\r\n };\r\n\r\n state = {\r\n contextMenuButtons: []\r\n };\r\n\r\n componentDidMount() {\r\n this.setContextMenuButtons();\r\n if (this.props.closeContextMenu) {\r\n document.addEventListener('click', this.contextMenuBlur)\r\n }\r\n }\r\n\r\n contextMenuBlur = (e) => {\r\n if (!e.target.closest('.contextmenu-buttons')\r\n && !e.target.closest('.contextmenu-buttons__button')\r\n && !e.target.closest('.sprocket-container') && !e.target.closest('.canvas')) {\r\n this.props.closeContextMenu();\r\n }\r\n };\r\n\r\n componentWillUnmount() {\r\n if (this.props.closeContextMenu) {\r\n document.removeEventListener('click', this.contextMenuBlur)\r\n }\r\n }\r\n\r\n getShowerBodySelectionButtons = () => {\r\n const shower = this.state.designNavigationItems.find(desItem => desItem.text === \"Shower\");\r\n const currentShowerSize = shower.part.showerSize();\r\n const showerBody = shower && shower.part.showerBody;\r\n return (showerBody && showerBody.features.length) ? showerBody.features.filter((showerBodyFeature) => {\r\n return showerBodyFeature.partName.includes(currentShowerSize);\r\n }) : [1]\r\n };\r\n\r\n setShowerBodySelectionButtons = () => {\r\n const layout = getCurrentLayout();\r\n const shower = layout.parts[Shower.id];\r\n const vanity = layout.parts[Vanity.id];\r\n const counterTopSize = vanity.counterTopSize();\r\n const showerTubCombo = layout.parts[ShowerTubCombo.id];\r\n\r\n const showerSubParts = shower.subParts();\r\n const showerBody = showerSubParts.find((menuItem) => {\r\n return menuItem.part.partId === \"shower_body\"\r\n });\r\n const currentShowerSize = shower.showerSize();\r\n let contextMenuButtons = [];\r\n\r\n if (showerTubCombo.showerTubComboIsActive) {\r\n const showerTubComboSubParts = showerTubCombo.subParts();\r\n const wallConfiguration = showerTubComboSubParts.find((menuItem) => {\r\n return menuItem.part.partId === \"wall_configuration\"\r\n });\r\n showerTubCombo.wallConfiguration.features.forEach((wallConfigurationFeature) => {\r\n contextMenuButtons.push(Object.assign({}, wallConfiguration, {\r\n subMenuParent: \"Walls\",\r\n subMenuText: wallConfigurationFeature.partName,\r\n bgImageText: wallConfigurationFeature.partName,\r\n clickFeature: true,\r\n text: wallConfigurationFeature.partName.includes(\"Pony\") ? \"Pony Wall\" : \"Left Shower Wall\"\r\n }))\r\n })\r\n } else if (showerBody && showerBody.part.features.length) {\r\n showerBody.part.features.forEach((showerBodyFeature) => {\r\n if (showerBodyFeature.partName.includes(currentShowerSize)) {\r\n // console.log('showerBodyFeature.partName', showerBodyFeature.partName);\r\n if (!(counterTopSize === \"72in\" && layout.type === 1 && showerBodyFeature.partName.includes(\"15X4\"))) {\r\n contextMenuButtons.push(Object.assign({}, showerBody, {\r\n subMenuParent: \"Walls\",\r\n subMenuText: showerBodyFeature.partName,\r\n bgImageText: showerBodyFeature.partName,\r\n clickFeature: true,\r\n text: showerBodyFeature.partName.includes(\"Pony\") ? \"Pony Wall\" : \"Left Shower Wall\"\r\n }))\r\n }\r\n }\r\n })\r\n }\r\n\r\n const clickedItemIndex = contextMenuButtons.findIndex(item => {\r\n return showerTubCombo.showerTubComboIsActive\r\n ? item.subMenuText === showerTubCombo.wallConfiguration.activeFeature.partName\r\n : item.subMenuText === showerBody.part.activeFeature.partName\r\n });\r\n\r\n if (clickedItemIndex > 0) {\r\n contextMenuButtons = reorder(contextMenuButtons, clickedItemIndex, 0); // swap items in array start\r\n }\r\n\r\n this.setState({\r\n contextMenuButtons\r\n })\r\n };\r\n\r\n setWallBButtons = () => {\r\n const layout = getCurrentLayout();\r\n let contextMenuButtons = [];\r\n\r\n const wallParent = layout.parts[Walls.id];\r\n const wallParts = wallParent.subParts().filter((menuItem) => menuItem.part.partId === \"right_wall\");\r\n wallParts.forEach((wallPart) => {\r\n contextMenuButtons.push(Object.assign({}, wallPart, {\r\n subMenuParent: \"Walls\",\r\n subMenuText: wallPart.part.partName,\r\n bgImageText: wallPart.part.partName,\r\n text: wallPart.text\r\n }));\r\n });\r\n\r\n const vanity = layout.parts[Vanity.id];\r\n const vanityBacksplash = vanity.subParts().find((menuItem) => {\r\n return menuItem.part.partId === \"vanity_backsplash\"\r\n });\r\n if (vanityBacksplash) {\r\n contextMenuButtons.push(Object.assign({}, vanityBacksplash, {\r\n subMenuParent: \"Vanity\",\r\n subMenuText: vanityBacksplash.part.partName,\r\n bgImageText: vanityBacksplash.part.partName,\r\n text: vanityBacksplash.text\r\n }));\r\n }\r\n\r\n let zIndexToFind = this.props.hoveredLayer.zIndex;\r\n\r\n const clickedItem = contextMenuButtons.find(item => {\r\n return item.part.activeFeature && item.part.activeFeature.layer && item.part.activeFeature.layer.zIndex === zIndexToFind;\r\n });\r\n if (clickedItem && clickedItem.part && clickedItem.part.partId === \"vanity_backsplash\") {\r\n const vanityFaucet = vanity.subParts().find((menuItem) => {\r\n return menuItem.part.partId === \"vanity_faucet\"\r\n });\r\n if (vanityFaucet) {\r\n contextMenuButtons.push(Object.assign({}, vanityFaucet, {\r\n subMenuParent: \"Vanity\",\r\n subMenuText: vanityFaucet.part.partName,\r\n bgImageText: vanityFaucet.part.partName,\r\n text: vanityFaucet.text\r\n }));\r\n }\r\n }\r\n\r\n const clickedItemIndex = contextMenuButtons.findIndex(item => {\r\n return item.part.activeFeature && item.part.activeFeature.layer && item.part.activeFeature.layer.zIndex === zIndexToFind;\r\n });\r\n\r\n if (clickedItemIndex > 0) {\r\n contextMenuButtons = reorder(contextMenuButtons, clickedItemIndex, 0); // swap items in array start\r\n }\r\n\r\n this.setState({\r\n contextMenuButtons\r\n })\r\n };\r\n\r\n setContextMenuButtons() {\r\n\r\n const layout = getCurrentLayout();\r\n\r\n if (this.props.contextMenuOpen === \"Shower Body Selection\") {\r\n this.setShowerBodySelectionButtons();\r\n return\r\n } else if (this.props.contextMenuOpen === \"wall_b_custom\") {\r\n this.setWallBButtons();\r\n return\r\n }\r\n\r\n const hoveredParent = this.props.designNavigationItems.find(navItem => {\r\n return navItem.text === this.props.contextMenuOpen\r\n });\r\n\r\n let relatedItems = hoveredParent.part.relatedItems;\r\n if (this.props.contextMenuOpen === \"Shower Tub Combo\") {\r\n relatedItems = [...hoveredParent.part.relatedItems, ...hoveredParent.part.getShowerRelatedItems()]\r\n }\r\n\r\n let zIndexToFind = this.props.hoveredLayer.zIndex;\r\n if (this.props.hoveredLayer.zIndex === Z.layouts[layout.getCurrentLayoutName()].Shower.Wall2) {\r\n zIndexToFind = Z.layouts[layout.getCurrentLayoutName()].Shower.Wall\r\n }\r\n if (\r\n this.props.hoveredLayer.zIndex === Z.layouts[layout.getCurrentLayoutName()].Shower.WallAccent2\r\n ) {\r\n zIndexToFind = Z.layouts[layout.getCurrentLayoutName()].Shower.WallAccent\r\n }\r\n const clickedItem = relatedItems.find((item) => {\r\n return (item.activeFeature && item.activeFeature.layer.zIndex === zIndexToFind)\r\n || (item.layerPositions && Object.keys(item.layerPositions).some(key => {\r\n return item.layerPositions[key] && item.layerPositions[key].layer && (item.layerPositions[key].layer.zIndex === zIndexToFind)\r\n }))\r\n });\r\n\r\n let itemsToRender = this.getItemsToRender(hoveredParent);\r\n\r\n // console.log('clickedItem', clickedItem);\r\n // console.log('relatedItems', relatedItems);\r\n // console.log('itemsToRender', itemsToRender);\r\n\r\n const clickedItemIndex = itemsToRender.findIndex(item => item.text === clickedItem.partName);\r\n if (clickedItemIndex > 0) {\r\n itemsToRender = reorder(itemsToRender, clickedItemIndex, 0); // swap items in array start\r\n }\r\n\r\n this.setState({\r\n contextMenuButtons: itemsToRender\r\n })\r\n }\r\n\r\n getItemsToRender = (hoveredParent) => {\r\n const layout = getCurrentLayout();\r\n let itemsToRender = hoveredParent.part.subParts().filter(subPart => layout.designNavigationItems(subPart).length);\r\n\r\n if ((this.props.contextMenuOpen === \"Shower\" || this.props.contextMenuOpen === \"Shower Tub Combo\") && hoveredParent.text !== \"Shower Accessories\") {\r\n itemsToRender = itemsToRender.filter(menuButton => {\r\n return this.props.contextMenuPonyWall\r\n ? menuButton.part.isPonyWallPart && menuButton.part.partId !== \"pony_wall\"\r\n : !menuButton.part.isPonyWallPart\r\n });\r\n const accessoriesParent = layout.parts[ShowerAccessories.id];\r\n if (accessoriesParent && accessoriesParent.categoryEnabled && !this.props.contextMenuPonyWall\r\n && accessoriesParent.subParts().some(subPart => layout.designNavigationItems(subPart).length)) {\r\n itemsToRender = itemsToRender.filter(menuButton => menuButton.part.partId !== \"shower_wall_accent\");\r\n itemsToRender.push({\r\n text: \"Accessories\",\r\n part: {},\r\n subNav: true\r\n })\r\n }\r\n itemsToRender = itemsToRender.filter(menuButton => menuButton.part.partId !== \"shower_head\");\r\n if (layout.parts[ShowerTubCombo.id] && !this.props.contextMenuPonyWall) {\r\n itemsToRender.push({\r\n text: \"Configure Layout\",\r\n part: {},\r\n subNav: true\r\n })\r\n }\r\n }\r\n\r\n if (this.props.contextMenuOpen === \"Shower\") {\r\n itemsToRender = itemsToRender.filter(menuButton => menuButton.part.partId !== \"threshold\");\r\n }\r\n if (this.props.contextMenuOpen === \"Shower Tub Combo\") {\r\n itemsToRender = this.removeNotUsedTubItemsFromContextMenu(itemsToRender, hoveredParent.part.bottomTub);\r\n }\r\n if (this.props.contextMenuOpen === \"Vanity\") {\r\n itemsToRender = itemsToRender.filter((itemToRender) => {\r\n return itemToRender.part.partId !== \"vanity_mirror\" && itemToRender.part.partId !== \"vanity_backsplash\";\r\n });\r\n }\r\n\r\n return itemsToRender\r\n };\r\n\r\n removeNotUsedTubItemsFromContextMenu = (itemsToRender, activeTub) => {\r\n return itemsToRender.filter((itemToRender) => {\r\n let keepThisItem = true;\r\n Object.keys(ShowerComboTubType).forEach((key) => {\r\n if (itemToRender.part.partId === ShowerComboTubType[key] && itemToRender.part.partId !== activeTub\r\n && itemToRender.part.partId !== ShowerComboTubType.replacement_tub\r\n && itemToRender.part.partId !== ShowerComboTubType.bathtub_liner\r\n ) {\r\n keepThisItem = false\r\n }\r\n });\r\n if (itemToRender.text === \"Wall Configuration\") {\r\n keepThisItem = false\r\n }\r\n return keepThisItem\r\n });\r\n };\r\n\r\n handleSubNavClick = (menuItem) => {\r\n const layout = getCurrentLayout();\r\n\r\n if (menuItem.text === \"Accessories\") {\r\n const hoveredParent = this.props.designNavigationItems.find(navItem => {\r\n return navItem.text === \"Shower Accessories\"\r\n });\r\n this.setState({\r\n contextMenuButtons: this.getItemsToRender(hoveredParent)\r\n .map(button => {\r\n button.subMenuParent = \"Shower Accessories\";\r\n return button\r\n })\r\n });\r\n return false\r\n }\r\n\r\n const showerSubParts = layout.parts[Shower.id].subParts();\r\n\r\n const shower = showerSubParts.find((menuItem) => {\r\n return menuItem.part.partId === \"shower_body\"\r\n });\r\n shower.subMenuText = \"Shower\";\r\n shower.subMenuParent = \"Shower\";\r\n\r\n const showerTubCombo = layout.parts[ShowerTubCombo.id];\r\n const showerTubComboSubParts = showerTubCombo.subParts();\r\n\r\n const activeTubMenuItems = showerTubComboSubParts.filter(menuItem => menuItem.part.bottomTubId);\r\n activeTubMenuItems.forEach(menuItem => menuItem.subMenuParent = \"Shower Tub Combo\");\r\n\r\n const wallConfiguration = showerTubComboSubParts.find((menuItem) => {\r\n return menuItem.part.partId === \"wall_configuration\"\r\n });\r\n wallConfiguration.subMenuText = \"Shower Tub Combo\";\r\n wallConfiguration.subMenuParent = \"Shower Tub Combo\";\r\n\r\n this.setState({\r\n contextMenuButtons: [\r\n shower,\r\n wallConfiguration,\r\n ...activeTubMenuItems,\r\n ]\r\n })\r\n };\r\n\r\n handleContextMenuHover = (menuItem) => {\r\n const layout = getCurrentLayout();\r\n const hoveredButton = menuItem.text === \"Countertop\" ? \"CounterTop\" : menuItem.text;\r\n const hoveredParent = menuItem.subMenuParent || this.props.contextMenuOpen;\r\n\r\n const layoutType = layout.getCurrentLayoutName();\r\n\r\n // console.log('hoveredButton', hoveredButton);\r\n // console.log('hoveredParent', hoveredParent);\r\n\r\n if (hoveredButton && hoveredParent) {\r\n\r\n let hoveredZindex = \"\";\r\n\r\n if (hoveredParent === \"Shower\") {\r\n const shower = layout.parts.Shower;\r\n switch (hoveredButton) {\r\n case \"Shower Walls\":\r\n hoveredZindex = Z.layouts[layoutType].Shower.Wall;\r\n break;\r\n case \"Shower Body\":\r\n if (shower.showerDoor && shower.showerDoor.features.length) {\r\n hoveredZindex = Z.layouts[layoutType][hoveredParent].ShowerDoor;\r\n } else {\r\n hoveredZindex = Z.layouts[layoutType][hoveredParent].Glass;\r\n }\r\n break;\r\n case \"Shower Door\":\r\n hoveredZindex = Z.layouts[layoutType][hoveredParent].ShowerDoor;\r\n break;\r\n case \"Handle\":\r\n hoveredZindex = Z.layouts[layoutType][hoveredParent].ShowerDoorHandle;\r\n break;\r\n case \"Shower Pan\":\r\n case \"Shower Pans\":\r\n hoveredZindex = Z.layouts[layoutType][hoveredParent].ShowerPanCombo;\r\n break;\r\n case \"Shower Walls Accent\":\r\n hoveredZindex = Z.layouts[layoutType][hoveredParent].WallAccent;\r\n break;\r\n case \"Pony Wall Glass\":\r\n hoveredZindex = Z.layouts[layoutType][\"Shower\"].PonyWallGlass;\r\n break;\r\n case \"Pony Wall Cap\":\r\n hoveredZindex = Z.layouts[layoutType][\"Shower\"].PonyWallCap;\r\n break;\r\n case \"Floor\":\r\n hoveredZindex = shower.showerFloorIsActive\r\n ? Z.layouts[layoutType][hoveredParent][hoveredButton]\r\n : Z.layouts[layoutType][hoveredParent].ShowerPanCombo;\r\n break;\r\n default:\r\n hoveredZindex = Z.layouts[layoutType][hoveredParent][hoveredButton];\r\n break;\r\n }\r\n } else if (hoveredParent === \"Shower Tub Combo\") {\r\n switch (hoveredButton) {\r\n case \"Shower Door\":\r\n hoveredZindex = Z.layouts[layoutType].Shower.ShowerDoor;\r\n break;\r\n case \"Shower Walls\":\r\n hoveredZindex = Z.layouts[layoutType].Shower.Wall;\r\n break;\r\n case \"Shower Walls Accent\":\r\n hoveredZindex = Z.layouts[layoutType].Shower.WallAccent;\r\n break;\r\n case \"Fixture\":\r\n hoveredZindex = Z.layouts[layoutType][\"Shower\"].Fixture;\r\n break;\r\n case \"Handle\":\r\n hoveredZindex = Z.layouts[layoutType][\"Shower\"].ShowerDoorHandle;\r\n break;\r\n case \"Wall Configuration\":\r\n hoveredZindex = Z.layouts[layoutType][\"Shower\"].ShowerDoor;\r\n break;\r\n case \"Jetted Tub\":\r\n hoveredZindex = Z.layouts[layoutType][\"Shower\"].TubCombo.JettedTub;\r\n break;\r\n case \"Tub Liner\":\r\n hoveredZindex = Z.layouts[layoutType][\"Shower\"].TubCombo.Liner;\r\n break;\r\n case \"Walk In Tub\":\r\n hoveredZindex = Z.layouts[layoutType][\"Shower\"].TubCombo.WalkInTub;\r\n break;\r\n case \"Replacement Tub\":\r\n hoveredZindex = Z.layouts[layoutType][\"Shower\"].TubCombo.ReplacementTub;\r\n break;\r\n case \"Pony Wall Glass\":\r\n hoveredZindex = Z.layouts[layoutType][\"Shower\"].PonyWallGlass;\r\n break;\r\n case \"Pony Wall Cap\":\r\n hoveredZindex = Z.layouts[layoutType][\"Shower\"].PonyWallCap;\r\n break;\r\n default:\r\n hoveredZindex = Z.layouts[layoutType][\"Shower\"].TubCombo[hoveredButton.replace(/ /g, \"\")];\r\n break;\r\n }\r\n } else if (hoveredParent === \"Vanity\") { // Vanity\r\n if (layout.parts.Vanity.activeSubType_ === VanityTypes.Complete) {\r\n switch (hoveredButton) {\r\n case \"Vanity\":\r\n hoveredZindex = Z.layouts[layoutType].Vanity.Complete.Cabinet;\r\n break;\r\n case \"Accent Wall\":\r\n hoveredZindex = Z.layouts[layoutType].Wall_A_Accent_Mask;\r\n break;\r\n default:\r\n hoveredZindex = Z.layouts[layoutType].Vanity[hoveredButton]; // Mirror\r\n break;\r\n }\r\n } else {\r\n switch (hoveredButton) {\r\n case \"Accent Wall\":\r\n hoveredZindex = Z.layouts[layoutType].Wall_A_Accent_Mask;\r\n break;\r\n case \"Backsplash\":\r\n hoveredZindex = Z.layouts[layoutType].Vanity.VanityBacksplash;\r\n break;\r\n default:\r\n hoveredZindex = Z.layouts[layoutType].Vanity[hoveredButton];\r\n break;\r\n }\r\n }\r\n } else if (hoveredParent === \"Bathtub\") { // Bathtub\r\n if (hoveredButton === \"Bathtub\") {\r\n hoveredZindex = Z.layouts[layoutType].Bathtub.BathTubBody\r\n } else if (hoveredButton === \"Fixture\") {\r\n hoveredZindex = Z.layouts[layoutType].Bathtub.BathTubFixture\r\n } else {\r\n hoveredZindex = Z.layouts[layoutType].Bathtub[hoveredButton]\r\n }\r\n } else if (hoveredParent === \"Walls\") { // Bathtub\r\n switch (hoveredButton) {\r\n case \"Pony Wall\":\r\n hoveredZindex = Z.layouts[layoutType].Shower.PonyWall;\r\n break;\r\n case \"Left Shower Wall\": {\r\n const wallParent = layout.parts[hoveredParent];\r\n const activeShowerGroup = wallParent.getActiveShowerGroup();\r\n const showerDimensions = getMetadataByDimensions(activeShowerGroup.showerDimensions());\r\n hoveredZindex = showerDimensions === \"Half\"\r\n ? Z.layouts[layoutType].Shower.ExtrusionWallLeftHalfWall\r\n : Z.layouts[layoutType].Shower.ExtrusionWallLeft;\r\n break;\r\n }\r\n default:\r\n hoveredZindex = Z.layouts[layoutType].Vanity[hoveredButton];\r\n break;\r\n }\r\n }\r\n\r\n this.props.renderGreenLayerByZindex(hoveredZindex);\r\n }\r\n\r\n };\r\n\r\n render() {\r\n\r\n let contextMenuStyles = this.props.contextMenuPosition || {};\r\n if (this.state.contextMenuButtons.length === 4) {\r\n contextMenuStyles = Object.assign({}, contextMenuStyles, {maxWidth:\"210px\"} )\r\n }\r\n\r\n return (\r\n
    \r\n
    \r\n {this.state.contextMenuButtons.map((menuItem) => {\r\n return menuItem ? (\r\n \r\n ) : null\r\n })}\r\n
    \r\n
    \r\n )\r\n }\r\n}\r\n","import React, {useEffect, useRef, useState} from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport ClickAwayListener from '@mui/material/ClickAwayListener';\r\nimport Grow from '@mui/material/Grow';\r\nimport Popper from '@mui/material/Popper';\r\n\r\nimport {setLookContextMenu} from \"../../../actions/lookFunctions\";\r\nimport {ALL_CONTEXT_MENU} from \"../core/constants\";\r\n\r\nimport {checkForContextMenuCommon} from \"../lookNavigation/lookFunctions\";\r\nimport ContextMenuQKBButtons from \"./contextMenuQKBButtons\";\r\n\r\n\r\nconst getContextMenuPosition = (contextMenu, position, isMobile) => {\r\n const {partId, layerPosition} = contextMenu;\r\n const {showButtons} = checkForContextMenuCommon(partId, layerPosition);\r\n\r\n let left = isMobile ? '50%' : position.x - 50;\r\n let top = isMobile ? '50%' : position.y - 50;\r\n let right = 'auto';\r\n\r\n const maxAllowedWidth = showButtons.length > 2 ? 300 : 210;\r\n\r\n let maxAllowedHeight = 110;\r\n if (showButtons.length > 6) {\r\n maxAllowedHeight = 330;\r\n } else if (showButtons.length >= 3) {\r\n maxAllowedHeight = 220;\r\n }\r\n if (!isMobile && (left > window.innerWidth - maxAllowedWidth)) {\r\n left = 'auto';\r\n right = 0\r\n }\r\n if (!isMobile && (top > window.innerHeight - maxAllowedHeight)) {\r\n let negativeMargin = 50;\r\n if (showButtons.length > 6) {\r\n negativeMargin = 250;\r\n } else if (showButtons.length >= 3) {\r\n negativeMargin = 150;\r\n }\r\n top = top - negativeMargin;\r\n }\r\n\r\n return {left, top, right}\r\n}\r\n\r\nconst ContextMenuQKB = (props) => {\r\n\r\n const {contextMenu, setLookContextMenu, isMobile, handleContextMenuClick, renderGreenLayerByZindex} = props;\r\n const {opened, position} = contextMenu;\r\n const [styles, setStyles] = useState({left: 0, top: 0, right: 0});\r\n const [buttons, setButtons] = useState([]);\r\n const anchorRef = useRef(null);\r\n\r\n const handleClose = (event) => {\r\n if (document.hoveredLayer && event.target.closest(\".canvas-el\") && ALL_CONTEXT_MENU.includes(document.hoveredLayer.partId)) {\r\n return\r\n }\r\n setLookContextMenu({\r\n opened: false,\r\n layerPosition: \"\",\r\n });\r\n };\r\n\r\n useEffect(() => {\r\n if (!contextMenu.opened) {\r\n return null\r\n }\r\n setStyles(getContextMenuPosition(contextMenu, position, isMobile));\r\n const {showButtons} = checkForContextMenuCommon(contextMenu.partId, contextMenu.layerPosition);\r\n setButtons(showButtons);\r\n }, [contextMenu, position, isMobile]);\r\n\r\n // console.log(\"styles\", styles);\r\n\r\n let contextStyles = styles;\r\n if (buttons.length <= 4) {\r\n contextStyles = Object.assign({}, styles, {maxWidth: \"210px\"});\r\n }\r\n\r\n return (\r\n
    \r\n \r\n {({ TransitionProps }) => (\r\n \r\n
    \r\n \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n \r\n )}\r\n
    \r\n
    \r\n )\r\n};\r\n\r\nContextMenuQKB.propTypes = {\r\n handleContextMenuClick: PropTypes.func,\r\n renderGreenLayerByZindex: PropTypes.func,\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {contextMenu} = store.lookState;\r\n const {isMobile} = store.serverState;\r\n return {\r\n contextMenu,\r\n isMobile,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setLookContextMenu\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(ContextMenuQKB)\r\n","import invert from 'lodash/invert';\r\nimport snakeCase from 'lodash/snakeCase';\r\n\r\nimport LayoutCommonNew from \"../../visComponents/layoutCommonNew\";\r\nimport {LayoutType, LayoutAbbreviation} from \"./constants\";\r\nimport zIndexes from \"./zIndex\";\r\nimport Other from \"./parts/other\";\r\nimport NonVisualizerSubPart from \"./subparts/nonVisualizerSubPart\";\r\nimport DesignNavigationItem from \"../../visComponents/designNavigationItem\";\r\nimport Background from \"./parts/background\";\r\nimport Floor from \"./parts/floor\";\r\nimport Walls from \"./parts/walls\";\r\nimport {AVAILABLE_VISUALIZER_TYPES} from \"../../../config\";\r\nimport FireplaceParent from \"./parts/fireplaceParent\";\r\nimport Globals from \"./parts/globals\";\r\nimport {hardCodeIsModerno} from \"../../../misc/fabricatorHardcode\";\r\n\r\nexport class Layout extends LayoutCommonNew {\r\n\r\n /**\r\n * @type {int}\r\n */\r\n defaultType = hardCodeIsModerno() ? LayoutType.Layout1 : LayoutType.Layout31;\r\n type = this.defaultType;\r\n scene = \"1\";\r\n visualizerType = AVAILABLE_VISUALIZER_TYPES.Fireplace;\r\n localStorageKey = \"FireplaceState\";\r\n layersBinding = \"Fireplace\";\r\n layoutNames = LayoutAbbreviation;\r\n layoutTypes = LayoutType;\r\n layoutThumbnails = {};\r\n zIndexes = zIndexes.layouts;\r\n excludedPartIdsFromHover = [\"decor_\", \"background_bg\", \"attachment\"];\r\n\r\n constructor(props) {\r\n super(props);\r\n this.parts[Globals.id] = new Globals();\r\n this.parts[Background.id] = new Background();\r\n this.parts[FireplaceParent.id] = new FireplaceParent();\r\n this.parts[Walls.id] = new Walls();\r\n this.parts[Floor.id] = new Floor();\r\n this.parts[Other.id] = new Other();\r\n Object.values(this.parts).forEach(part => part.layout = this);\r\n }\r\n\r\n getCurrentLayoutName(type = this.type) {\r\n return invert(LayoutType)[type];\r\n }\r\n\r\n getCurrentLayoutAbbreviation() {\r\n return LayoutAbbreviation[this.getCurrentLayoutName()]\r\n }\r\n\r\n addNonVisualizerSubPart(featureGroupName){\r\n const otherParent = this.parts[Other.id];\r\n const partId = snakeCase(featureGroupName);\r\n let relatedItem = otherParent.relatedItems.find(relatedItem => relatedItem.partId === partId);\r\n if (!relatedItem) {\r\n relatedItem = new NonVisualizerSubPart(true, partId, featureGroupName);\r\n relatedItem.getParent = () => otherParent;\r\n otherParent.relatedItems.push(relatedItem);\r\n }\r\n return new DesignNavigationItem(relatedItem.partName, relatedItem)\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../intermediatePart\";\r\n\r\nexport default class NonVisualizerSubPart extends IntermediatePart {\r\n constructor(isChild, partId, partName) {\r\n super(isChild);\r\n this.partId = partId;\r\n this.visible = true;\r\n this.partName = partName;\r\n // this.allFeaturesReceived = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new NonVisualizerSubPart(false, this.partId, dbFeature.groupName));\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n return this.navigationNoMetaSubItems(filters, searchText)\r\n }\r\n}\r\n","import React, {Component} from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {connect} from \"react-redux\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport {reorder} from \"../../../misc/utils\";\r\nimport Analytics from \"../../../analytics\";\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\nimport {BACKSPLASH_TYPES} from \"../../kvComponent/core/constants\";\r\n\r\nclass ContextMenuSimple extends Component {\r\n\r\n static propTypes = {\r\n contextMenuOpen: PropTypes.string.isRequired,\r\n hoveredLayer: PropTypes.object,\r\n handleContextMenuClick: PropTypes.func,\r\n contextMenuPosition: PropTypes.object,\r\n contextMenuPonyWall: PropTypes.bool,\r\n renderGreenLayerByZindex: PropTypes.func,\r\n closeContextMenu: PropTypes.func,\r\n };\r\n\r\n state = {\r\n contextMenuButtons: []\r\n };\r\n\r\n componentDidMount() {\r\n this.setContextMenuButtons();\r\n if (this.props.closeContextMenu) {\r\n document.addEventListener('click', this.contextMenuBlur)\r\n }\r\n }\r\n\r\n contextMenuBlur = (e) => {\r\n if (!e.target.closest('.contextmenu-buttons')\r\n && !e.target.closest('.contextmenu-buttons__button')\r\n && !e.target.closest('.sprocket-container') && !e.target.closest('.canvas')) {\r\n this.props.closeContextMenu();\r\n }\r\n };\r\n\r\n componentWillUnmount() {\r\n if (this.props.closeContextMenu) {\r\n document.removeEventListener('click', this.contextMenuBlur)\r\n }\r\n }\r\n\r\n setContextMenuButtons() {\r\n const layout = getCurrentLayout();\r\n const contextMenuOpen = this.props.contextMenuOpen;\r\n if (contextMenuOpen === \"backsplash_custom\"\r\n || contextMenuOpen === \"backsplash_custom_left\"\r\n || contextMenuOpen === \"backsplash_custom_right\"\r\n || contextMenuOpen === \"right_wall_custom\"\r\n || contextMenuOpen === \"left_wall_custom\") {\r\n this.setBacksplashButtons();\r\n return\r\n }\r\n\r\n const hoveredParent = layout.designNavigationItems().find(navItem => {\r\n return navItem.text === contextMenuOpen\r\n });\r\n\r\n let relatedItems = hoveredParent.part.relatedItems;\r\n\r\n const clickedItem = relatedItems.find((item) => {\r\n return item.activeFeature && (item.partId === this.props.hoveredLayer.partId)\r\n });\r\n\r\n let itemsToRender = this.getItemsToRender(hoveredParent);\r\n\r\n // console.log('clickedItem', clickedItem);\r\n // console.log('relatedItems', relatedItems);\r\n // console.log('itemsToRender', itemsToRender);\r\n\r\n const clickedItemIndex = itemsToRender.findIndex(item => item.text === clickedItem.partName);\r\n if (clickedItemIndex > 0) {\r\n itemsToRender = reorder(itemsToRender, clickedItemIndex, 0); // swap items in array start\r\n }\r\n\r\n itemsToRender = itemsToRender.map(item => {\r\n if (item.text === \"Island Countertop\") {\r\n // item.subMenuText = \"Countertop\";\r\n item.bgImageText = \"Countertop\";\r\n }\r\n return item\r\n });\r\n\r\n this.setState({\r\n contextMenuButtons: itemsToRender\r\n })\r\n }\r\n\r\n getItemsToRender = (hoveredParent) => {\r\n let itemsToRender = hoveredParent.part.subParts();\r\n let availablePartIds = [];\r\n switch (this.props.contextMenuOpen) {\r\n case \"Center Island\":\r\n availablePartIds = [\"center_island_sink\", \"center_island_faucet\", \"center_island_countertop\",\r\n \"center_island_stovetop\", \"center_island_range\", \"center_island_edge\"];\r\n break;\r\n case \"Countertop\":\r\n availablePartIds = [\"countertop\", \"faucet\", \"sink\", \"edge_profile\"];\r\n break;\r\n case \"Walls\":\r\n availablePartIds = [\"right_wall\", \"backsplash\"];\r\n break;\r\n default:\r\n break;\r\n }\r\n return itemsToRender.filter(menuButton => availablePartIds.includes(menuButton.part.partId));\r\n };\r\n\r\n getBackSplashButtons = () => {\r\n return BACKSPLASH_TYPES.map(bType => {\r\n const button = {\r\n text: bType,\r\n };\r\n switch (bType) {\r\n case \"4in\":\r\n button.subMenuText = \"visualizer.kitchen.contextmenu.backsplash.4in\"\r\n break;\r\n case \"6in\":\r\n button.subMenuText = \"visualizer.kitchen.contextmenu.backsplash.6in\"\r\n break;\r\n case \"Full\":\r\n button.subMenuText = \"visualizer.kitchen.contextmenu.backsplash.18in\"\r\n break;\r\n }\r\n return button\r\n })\r\n };\r\n\r\n setBacksplashButtons = () => {\r\n const layout = getCurrentLayout();\r\n const hoveredParent = layout.designNavigationItems().find(navItem => {\r\n return navItem.text === \"Walls\"\r\n });\r\n const subParts = hoveredParent.part.subParts();\r\n\r\n let contextMenuButtons = [];\r\n const backSplashButtons = this.getBackSplashButtons();\r\n const rightWall = subParts.find(menuButton => menuButton.part.partId === \"right_wall\");\r\n const leftWall = subParts.find(menuButton => menuButton.part.partId === \"left_wall\");\r\n if (rightWall) {\r\n rightWall.subMenuParent = \"Walls\";\r\n }\r\n if (leftWall) {\r\n leftWall.subMenuParent = \"Walls\";\r\n }\r\n switch (this.props.contextMenuOpen) {\r\n case \"right_wall_custom\": {\r\n contextMenuButtons = rightWall ? [rightWall, ...backSplashButtons] : backSplashButtons;\r\n break;\r\n }\r\n case \"left_wall_custom\": {\r\n contextMenuButtons = leftWall ? [leftWall, ...backSplashButtons] : backSplashButtons;\r\n break;\r\n }\r\n case \"backsplash_custom_left\": {\r\n contextMenuButtons = [...backSplashButtons, leftWall];\r\n break;\r\n }\r\n case \"backsplash_custom_right\": {\r\n contextMenuButtons = [...backSplashButtons, rightWall];\r\n break;\r\n }\r\n case \"backsplash_custom\": {\r\n contextMenuButtons = backSplashButtons; // just in case, we should not have these cases\r\n break;\r\n }\r\n }\r\n this.setState({\r\n contextMenuButtons\r\n })\r\n };\r\n\r\n handleContextMenuHover = () => {\r\n //TODO[Artem] add here rendering green zones on hover\r\n };\r\n\r\n render() {\r\n\r\n let contextMenuStyles = this.props.contextMenuPosition || {};\r\n if (this.state.contextMenuButtons.length <= 4) {\r\n contextMenuStyles = Object.assign({}, contextMenuStyles, {maxWidth:\"210px\"} )\r\n }\r\n\r\n return (\r\n
    \r\n
    \r\n {this.state.contextMenuButtons.map((menuItem) => {\r\n if (!menuItem) {\r\n return null\r\n }\r\n return (\r\n \r\n )\r\n })}\r\n
    \r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = () => {\r\n return {};\r\n};\r\n\r\nconst mapDispatchToProps = {};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(ContextMenuSimple)\r\n","import {IntermediatePart} from \"../intermediatePart\";\r\n\r\nexport default class NonVisualizerSubPart extends IntermediatePart {\r\n constructor(isChild, partId, partName) {\r\n super(isChild);\r\n this.partId = partId;\r\n this.visible = true;\r\n this.partName = partName;\r\n // this.allFeaturesReceived = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new NonVisualizerSubPart(false, this.partId, dbFeature.groupName));\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n return this.navigationNoMetaSubItems(filters, searchText)\r\n }\r\n}\r\n","import uuid from \"uuid\";\r\n\r\nimport * as types from '../actions/actionTypes';\r\nimport featureIsMatchingDisplayLogic from \"../misc/displayLogic\";\r\nimport {COUNTERTOP_GROUP} from \"../bvcomponents/kvComponent/core/constants\";\r\nimport {getMinimumChargeCartItem} from \"../actions/shoppingCartFunctions\";\r\nimport {FEATURE_STONE, getFeatureType} from \"../misc/helpers\";\r\nimport {IS_LIXIL_UI} from \"../config\";\r\nimport {getFeaturePriceProperty} from \"../misc/priceFunctions\";\r\nimport {SQFT_FEATURES} from \"../bvcomponents/sqft/constants\";\r\n\r\nconst initialState = {\r\n cartItems: [],\r\n displayLogicCartItems: [], // read only (is needed to check them every time cart is changed)\r\n applyPopupOpened: false,\r\n activeApplyPopupItems: [],\r\n questionNoClicked: false,\r\n cameFromPage: '',\r\n recentlyViewedItems: [],\r\n checkoutPopupVisible: false,\r\n orderCompletePopupVisible: false,\r\n depositVisible: false,\r\n depositCallback: null,\r\n state: 'design',\r\n showMobileQuotes: false,\r\n showAllQuotesCartItemsList: true,\r\n cartFooterActiveButtonIndex: 0,\r\n cartItemEditFeature: null,\r\n lookRemovedCartItems: [],\r\n cItemsAddedToParentCart: [], // ArrayOf {id: \"string\", quantity: number}\r\n sureTax: 0, // comes in response of sureTax API\r\n sureTaxLoading: false, // shows loader in columns section\r\n manualTaxEntered: false, // if it is true - show always the same manual tax\r\n deliveryList: [], // calculates depending on features shipping cost // {cost, title: \"\", delivery: \"\", code: \"\"}\r\n markUpLogic: \"\", // {retail: {value: 10, type: \"mark_up\"}, cost: {value: 10, type: \"mark_down\"}, discount: {}}\r\n};\r\n\r\nexport const supportedCountries = [{\r\n name: 'USA',\r\n zipCodeRg: /^\\d{5}([ \\-]\\d{4})?$/\r\n}, {\r\n name: 'Canada',\r\n zipCodeRg: /^[ABCEGHJKLMNPRSTVXY]\\\\d[ABCEGHJ-NPRSTV-Z][ ]?\\\\d[ABCEGHJ-NPRSTV-Z]\\\\d$/\r\n}, {\r\n name: 'UK',\r\n zipCodeRg: /^GIR[ ]?0AA|((AB|AL|B|BA|BB|BD|BH|BL|BN|BR|BS|BT|CA|CB|CF|CH|CM|CO|CR|CT|CV|CW|DA|DD|DE|DG|DH|DL|DN|DT|DY|E|EC|EH|EN|EX|FK|FY|G|GL|GY|GU|HA|HD|HG|HP|HR|HS|HU|HX|IG|IM|IP|IV|JE|KA|KT|KW|KY|L|LA|LD|LE|LL|LN|LS|LU|M|ME|MK|ML|N|NE|NG|NN|NP|NR|NW|OL|OX|PA|PE|PH|PL|PO|PR|RG|RH|RM|S|SA|SE|SG|SK|SL|SM|SN|SO|SP|SR|SS|ST|SW|SY|TA|TD|TF|TN|TQ|TR|TS|TW|UB|W|WA|WC|WD|WF|WN|WR|WS|WV|YO|ZE)(\\d[\\dA-Z]?[ ]?\\d[ABD-HJLN-UW-Z]{2}))|BFPO[ ]?\\d{1,4}$/\r\n}];\r\nexport const supportedCountriesList = [\"USA\", \"Canada\", \"UK\"];\r\n\r\nfunction checkForAddToCartFeaturesWithDisplayLogic(cartItems, displayLogicCartItems, currentQuote = 0, allWizardsValues) {\r\n cartItems = cartItems.filter(cartItem => {\r\n return !displayLogicCartItems.some(displayLogicCartItem => {\r\n return (cartItem.cartFeature.dbFeature.id === displayLogicCartItem.cartFeature.dbFeature.id)\r\n && (cartItem.currentQuote === currentQuote)\r\n })\r\n }); // clear existing display logic items for this quote, we will add them below\r\n displayLogicCartItems.forEach((displayLogicCartItem) => {\r\n const {quantity, isMatching} = featureIsMatchingDisplayLogic(displayLogicCartItem.cartFeature, cartItems, currentQuote, allWizardsValues);\r\n if (isMatching) {\r\n cartItems = [...cartItems, Object.assign({}, displayLogicCartItem, {\r\n quantity,\r\n currentQuote,\r\n id: uuid.v4(), // to make sure we have different cart items in different quotes\r\n })]\r\n }\r\n });\r\n return cartItems\r\n}\r\n\r\nfunction removeFakePriceFromCartItems(cartItems) {\r\n cartItems = cartItems.map((cartItem) => {\r\n if (cartItem.displayFakePrice === 0) {\r\n cartItem.displayFakePrice = null\r\n }\r\n return cartItem\r\n });\r\n return cartItems\r\n}\r\n\r\nconst checkLowesHardcodedRulesItems = (cartItems, fabricatorSettings) => {\r\n cartItems = cartItems.filter(cItem => !cItem.isMinimumCharge); // 1) remove already added, and calculate again\r\n const countertopItems = cartItems.filter(cItem => COUNTERTOP_GROUP.includes(cItem.partId)); // 2) countertop group only\r\n\r\n const MINIMUM_SQFT = 23;\r\n const MINIMUM_SQFT_2 = 27;\r\n\r\n if (countertopItems.length) {\r\n const totalQuantity = countertopItems.reduce(((accumulator, cItem) => accumulator + cItem.quantity), 0); // 3) get all quantities\r\n if (totalQuantity <= MINIMUM_SQFT) {\r\n cartItems.push(getMinimumChargeCartItem(countertopItems[0], true)) // 4) add hardcoded 300$\r\n } else if ((totalQuantity >= (MINIMUM_SQFT + 1)) && (totalQuantity <= (MINIMUM_SQFT_2 -1))) { // 5) between 23 and 27 - add additional countertops\r\n let theMostValuableCartItem = countertopItems[0];\r\n countertopItems.forEach(cItem => {\r\n let currentMostFeatureCost = getFeaturePriceProperty(theMostValuableCartItem.cartFeature, fabricatorSettings) * theMostValuableCartItem.quantity;\r\n let cartItemCost = getFeaturePriceProperty(cItem.cartFeature, fabricatorSettings) * cItem.quantity;\r\n if (cartItemCost > currentMostFeatureCost) { // 6) find with the biggest price added\r\n theMostValuableCartItem = cItem\r\n }\r\n });\r\n cartItems.push(getMinimumChargeCartItem(theMostValuableCartItem, false, MINIMUM_SQFT_2 - totalQuantity)) // 7) add hardcoded items\r\n }\r\n }\r\n // console.log(\"cartItems2\", cartItems);\r\n return cartItems\r\n}\r\n\r\nconst checkCaesHardcodedRulesItems = (cartItems) => {\r\n // console.log(\"cartItems before\", cartItems);\r\n cartItems = cartItems.filter(cItem => !cItem.isMinimumCharge); // 1) remove already added, and calculate again\r\n const countertopItems = cartItems.filter(cItem => COUNTERTOP_GROUP.includes(cItem.partId)); // 2) countertop group only\r\n let uniqueSharedNames = [];\r\n countertopItems.forEach(cItem => {\r\n if (!uniqueSharedNames.includes(cItem.cartFeature.dbFeature.sharedFeatureName)) {\r\n uniqueSharedNames.push(cItem.cartFeature.dbFeature.sharedFeatureName)\r\n }\r\n });\r\n const MINIMUM_CAES_SQFT = 25;\r\n\r\n if (uniqueSharedNames.length) {\r\n uniqueSharedNames.forEach(uniqueSharedName => {\r\n const matchingItems = countertopItems.filter(cItem => cItem.cartFeature.dbFeature.sharedFeatureName === uniqueSharedName);\r\n const totalQuantity = matchingItems.reduce(((accumulator, cItem) => accumulator + cItem.quantity), 0); // 3) get all quantities\r\n if (totalQuantity < MINIMUM_CAES_SQFT) {\r\n cartItems.push(getMinimumChargeCartItem(matchingItems[0], false, MINIMUM_CAES_SQFT - totalQuantity))\r\n }\r\n })\r\n }\r\n // console.log(\"cartItems2\", cartItems);\r\n return cartItems\r\n}\r\n\r\nconst allowMinimumChargeConditions = (fabricatorState) => {\r\n return fabricatorState && fabricatorState.settings.showPricing\r\n && !fabricatorState.hideCheckoutBreakdownCost && !fabricatorState.hidePricesFromUser\r\n && document.kvConfig.visualizerType === \"Kitchen\" || document.kvConfig.visualizerType === \"kvScene\"\r\n}\r\n\r\nconst checkHardcodedRulesItems = (fabricatorState, cartItems) => {\r\n if (allowMinimumChargeConditions(fabricatorState)) {\r\n // console.log(\"cartItems\", cartItems);\r\n // console.log(\"fabricatorState\", fabricatorState);\r\n // console.log(\"fabricatorState.settings.language\", fabricatorState.settings.language);\r\n if (fabricatorState.isLowes) {\r\n cartItems = checkLowesHardcodedRulesItems(cartItems, fabricatorState.settings);\r\n } else if (fabricatorState.isCaesarStone && (fabricatorState.settings.language !== \"en-AU\")) {\r\n cartItems = checkCaesHardcodedRulesItems(cartItems)\r\n }\r\n }\r\n return cartItems\r\n}\r\n\r\n/**\r\n * Recalculate slab in cart\r\n * @param {{}} cartItems\r\n * return bool\r\n */\r\nexport const isRecalculateSlabsInCartNeeded = (cartItems) => {\r\n return cartItems.some(cartItem => {\r\n return cartItem.cartFeature && FEATURE_STONE === getFeatureType(cartItem.cartFeature.dbFeature)\r\n });\r\n}\r\n\r\n/**\r\n * Recalculate slab in cart\r\n * @param cartItems {object}\r\n * @returns cartItems {object}\r\n */\r\nconst recalculateSlabsInCart = (cartItems) => {\r\n for (const cartItem of cartItems) {\r\n if (FEATURE_STONE !== getFeatureType(cartItem.cartFeature.dbFeature)) {\r\n continue;\r\n }\r\n const similarFeatures = cartItems.filter((cItem) => {\r\n const isSameNameFeature = cItem.cartFeature.getFeatureName() === cartItem.cartFeature.getFeatureName();\r\n const isBiggestFeature = cItem.isBiggestFeature;\r\n const isQuantityAddedToBiggestFeature = cItem.isQuantityAddedToBiggestFeature;\r\n return isSameNameFeature && (isBiggestFeature || isQuantityAddedToBiggestFeature) // select only features from sqft\r\n });\r\n let biggestFeature = similarFeatures.find(cartItem => cartItem.isBiggestFeature);\r\n if (!biggestFeature && cartItem.isQuantityAddedToBiggestFeature) {\r\n cartItem.isBiggestFeature = true;\r\n }\r\n if (cartItem.isBiggestFeature) {\r\n cartItem.quantity = similarFeatures.reduce((sum, cItem) => {\r\n return cItem.displayFakeQuantity !== undefined\r\n ? cItem.displayFakeQuantity + sum\r\n : cItem.quantity + sum\r\n }, 0);\r\n }\r\n }\r\n return cartItems\r\n}\r\n// const checkStonePricingLogic = (cartItems) => { //TODO[Artem] edit features not working :(\r\n// if (cartItems.some(cartItem => {\r\n// return cartItem.cartFeature && Array.isArray(cartItem.cartFeature.dbFeature.stonePricingId) && cartItem.cartFeature.dbFeature.stonePricingId.length\r\n// })) {\r\n// let commonSharedFeatureNames = []; // {sharedName: \"\", totalQuantity: 0, biggestFeature, sqftFeatures: []}\r\n// cartItems.forEach(cartItem => {\r\n// if (!cartItem.initialQuantity) {\r\n// cartItem.initialQuantity = cartItem.quantity;\r\n// }\r\n// if (cartItem.cartFeature && Array.isArray(cartItem.cartFeature.dbFeature.stonePricingId)\r\n// && cartItem.cartFeature.dbFeature.stonePricingId.length) {\r\n// const alreadyAdded = commonSharedFeatureNames.find(sharedObject => {\r\n// return sharedObject.sharedName === cartItem.cartFeature.dbFeature.sharedFeatureName\r\n// });\r\n// if (!alreadyAdded) {\r\n// commonSharedFeatureNames.push({\r\n// sharedName: cartItem.cartFeature.dbFeature.sharedFeatureName,\r\n// totalQuantity: cartItem.initialQuantity,\r\n// sqftFeatures: [cartItem],\r\n// biggestFeature: cartItem,\r\n// })\r\n// } else {\r\n// alreadyAdded.sqftFeatures.push(cartItem);\r\n// alreadyAdded.totalQuantity += cartItem.initialQuantity;\r\n// if (!alreadyAdded.biggestFeature) {\r\n// alreadyAdded.biggestFeature = cartItem;\r\n// } else if (cartItem.cartFeature.partId === \"countertop\") {\r\n// if (alreadyAdded.biggestFeature.partId !== \"countertop\" || (alreadyAdded.biggestFeature.initialQuantity < cartItem.initialQuantity)) {\r\n// alreadyAdded.biggestFeature = cartItem;\r\n// }\r\n// } else if (cartItem.cartFeature.partId === \"center_island_countertop\") {\r\n// if ((alreadyAdded.biggestFeature.partId !== \"countertop\" && alreadyAdded.biggestFeature.partId !== \"center_island_countertop\")\r\n// || (alreadyAdded.biggestFeature.partId === \"center_island_countertop\" && alreadyAdded.biggestFeature.initialQuantity < cartItem.initialQuantity)) {\r\n// alreadyAdded.biggestFeature = cartItem;\r\n// }\r\n// } else if ((alreadyAdded.biggestFeature.partId !== \"countertop\") && (alreadyAdded.biggestFeature.partId !== \"center_island_countertop\")\r\n// && alreadyAdded.biggestFeature.initialQuantity < cartItem.initialQuantity) { // backsplash\r\n// alreadyAdded.biggestFeature = cartItem;\r\n// }\r\n// }\r\n// }\r\n// });\r\n// if (commonSharedFeatureNames.length) { // 2) set each feature new fake quantity\r\n// commonSharedFeatureNames.forEach(sharedObject => {\r\n// sharedObject.sqftFeatures.forEach(cartItem => {\r\n// cartItem.displayFakeQuantity = cartItem.initialQuantity;\r\n// if (sharedObject.biggestFeature && (cartItem.id === sharedObject.biggestFeature.id)) {\r\n// cartItem.quantity = sharedObject.totalQuantity;\r\n// } else {\r\n// cartItem.quantity = 0;\r\n// }\r\n// });\r\n// });\r\n// }\r\n// }\r\n// return cartItems\r\n// }\r\n\r\nexport default function(state = initialState, action) {\r\n\r\n switch(action.type) {\r\n\r\n case types.ADD_TO_CART: {\r\n const actionCartItems = action.payload.cartItems;\r\n let stateCartItems = state.cartItems;\r\n if (IS_LIXIL_UI) {\r\n stateCartItems = stateCartItems.map(stateCartItem => {\r\n const sameCartItemIndex = actionCartItems.findIndex(newCartItem => {\r\n return newCartItem.cartFeature && stateCartItem.cartFeature &&\r\n (newCartItem.cartFeature.dbFeature.sku && stateCartItem.cartFeature.dbFeature.sku\r\n ? (newCartItem.cartFeature.dbFeature.sku === stateCartItem.cartFeature.dbFeature.sku)\r\n : (newCartItem.cartFeature.dbFeature.sharedFeatureName\r\n && stateCartItem.cartFeature.dbFeature.sharedFeatureName\r\n && (newCartItem.cartFeature.dbFeature.sharedFeatureName === stateCartItem.cartFeature.dbFeature.sharedFeatureName)))\r\n })\r\n if (sameCartItemIndex > -1) {\r\n if (stateCartItem.addedBy !== actionCartItems[sameCartItemIndex].addedBy) {\r\n stateCartItem.quantity = actionCartItems[sameCartItemIndex].quantity || 1;\r\n stateCartItem.addedBy = actionCartItems[sameCartItemIndex].addedBy;\r\n } else {\r\n stateCartItem.quantity += actionCartItems[sameCartItemIndex].quantity || 1;\r\n }\r\n actionCartItems.splice(sameCartItemIndex, 1);\r\n }\r\n return stateCartItem\r\n })\r\n }\r\n let newCartItems = [...stateCartItems, ...actionCartItems];\r\n\r\n if (state.displayLogicCartItems.length) {\r\n const currentQuote = actionCartItems.length\r\n ? actionCartItems[0].currentQuote\r\n : newCartItems.length\r\n ? newCartItems[0].currentQuote\r\n : 0;\r\n newCartItems = checkForAddToCartFeaturesWithDisplayLogic(newCartItems, state.displayLogicCartItems, currentQuote, action.payload.allWizardsValues);\r\n }\r\n newCartItems = checkHardcodedRulesItems(action.payload.fabricatorState, newCartItems);\r\n // newCartItems = checkStonePricingLogic(newCartItems);\r\n return Object.assign({}, state, {\r\n cartItems: newCartItems\r\n });\r\n }\r\n case types.SET_STATE_TO_QUOTE:\r\n return Object.assign({}, state, {\r\n state: \"quote\"\r\n });\r\n\r\n case types.ADD_DISPLAY_LOGIC_CART_ITEM:\r\n return Object.assign({}, state, {\r\n displayLogicCartItems: [...state.displayLogicCartItems.filter((oldCartItem) => {\r\n return (oldCartItem.cartFeature.dbFeature.id !== action.payload.cartItem.cartFeature.dbFeature.id)\r\n // && (oldCartItem.currentQuote !== action.payload.cartItem.currentQuote)\r\n // removed, why it is added? we can have different add to cart features in the same quote\r\n }), action.payload.cartItem]\r\n });\r\n\r\n case types.ADD_TO_RECENTLY_VIEWED:\r\n // console.log('action.payload.cartItem', action.payload.cartItem);\r\n return Object.assign({}, state, {\r\n recentlyViewedItems: (state.recentlyViewedItems.every(oldItem => oldItem.dbFeature.id !== action.payload.feature.dbFeature.id))\r\n ? [...state.recentlyViewedItems, action.payload.feature]\r\n : [...state.recentlyViewedItems]\r\n });\r\n\r\n case types.CHANGE_CART_QUANTITY: {\r\n // console.log('action.payload.cartItem', action.payload.cartItem);\r\n let newCartItems = [...state.cartItems.map((cartItem) => {\r\n if (cartItem.id === action.payload.cartItem.id) {\r\n cartItem.quantity = action.payload.quantity;\r\n if (action.payload.removeFakeQuantity && Number.isInteger(cartItem.displayFakeQuantity)) {\r\n cartItem.displayFakeQuantity = null;\r\n }\r\n } else if (cartItem.bundleParentId && (cartItem.bundleParentId === action.payload.cartItem.id)) {\r\n const quantity = action.payload.cartItem.cartFeature.dbFeature.bundledFeatureQuantities\r\n ? action.payload.cartItem.cartFeature.dbFeature.bundledFeatureQuantities[cartItem.cartFeature.dbFeature.id] || 1\r\n : 1;\r\n cartItem.quantity = quantity * action.payload.quantity;\r\n }\r\n return cartItem\r\n })];\r\n if (state.displayLogicCartItems.length) {\r\n newCartItems = checkForAddToCartFeaturesWithDisplayLogic(newCartItems, state.displayLogicCartItems, action.payload.cartItem.currentQuote, action.payload.allWizardsValues)\r\n }\r\n newCartItems = checkHardcodedRulesItems(action.payload.fabricatorState, newCartItems);\r\n // newCartItems = checkStonePricingLogic(newCartItems);\r\n return Object.assign({}, state, {\r\n cartItems: newCartItems\r\n });\r\n }\r\n\r\n case types.CHANGE_CART_FEATURE: {\r\n // console.log('action.payload.cartItem', action.payload.cartItem);\r\n let newCartItems = [...state.cartItems.map((cartItem) => {\r\n return (cartItem.id === action.payload.cartItem.id) ? action.payload.cartItem : cartItem\r\n })];\r\n if (!action.payload.skipOtherRules) { // if we change note text for example, we don't need to recalculate other cart items\r\n newCartItems = checkHardcodedRulesItems(action.payload.fabricatorState, newCartItems);\r\n }\r\n return Object.assign({}, state, {\r\n cartItems: newCartItems\r\n });\r\n }\r\n\r\n case types.REMOVE_FROM_CART: {\r\n // console.log('action.payload.cartItem', action.payload.cartItem);\r\n // console.log('state.cartItems', state.cartItems);\r\n const cartItemToDeleteIndex = state.cartItems.findIndex((cartItem) => cartItem.id === action.payload.cartItem.id);\r\n if (cartItemToDeleteIndex > -1) {\r\n state.cartItems.splice(cartItemToDeleteIndex, 1);\r\n }\r\n let newCartItems = [...state.cartItems];\r\n if (state.displayLogicCartItems.length) {\r\n newCartItems = checkForAddToCartFeaturesWithDisplayLogic(newCartItems, state.displayLogicCartItems, action.payload.cartItem.currentQuote, action.payload.allWizardsValues)\r\n }\r\n newCartItems = checkHardcodedRulesItems(action.payload.fabricatorState, newCartItems);\r\n if (isRecalculateSlabsInCartNeeded(state.cartItems)) {\r\n newCartItems = recalculateSlabsInCart(newCartItems);\r\n }\r\n\r\n // removeFakePriceFromCartItems if we have slabs\r\n if (action.payload.cartItem && action.payload.cartItem.partId === SQFT_FEATURES.slabs) {\r\n const isSlabsStillExistInCart = newCartItems.some(newCartItem => newCartItem.partId === SQFT_FEATURES.slabs)\r\n if (!isSlabsStillExistInCart) {\r\n newCartItems = removeFakePriceFromCartItems(newCartItems);\r\n }\r\n }\r\n\r\n newCartItems = newCartItems.filter((cartItem) => {\r\n return !cartItem.bundleParentId || newCartItems.some(cI => cI.id === cartItem.bundleParentId)\r\n })\r\n // newCartItems = checkStonePricingLogic(newCartItems);\r\n return Object.assign({}, state, {\r\n cartItems: newCartItems\r\n });\r\n }\r\n\r\n case types.TOGGLE_APPLY_POPUP:\r\n return Object.assign({}, state, {\r\n applyPopupOpened: action.payload.applyPopupOpened,\r\n activeApplyPopupItems: action.payload.activeApplyPopupItems.map((activeApplyPopupItem) => {\r\n const existingCartItemIndex = state.cartItems.findIndex(cartItem => {\r\n return cartItem.cartFeature.dbFeature.id === activeApplyPopupItem.cartFeature.dbFeature.id\r\n });\r\n if (existingCartItemIndex > -1) {\r\n activeApplyPopupItem.quantity = state.cartItems[existingCartItemIndex].quantity; // if cart already have item, return it's quantity\r\n }\r\n return activeApplyPopupItem\r\n }).filter(item => {\r\n return !(item.partId === \"top_cabinet\"\r\n && action.payload.activeApplyPopupItems.some(item => item.partId === \"top_cabinet_module_0\"));\r\n\r\n })\r\n });\r\n\r\n case types.CLICK_QUESTION_NO:\r\n case types.CAME_FROM_PAGE:\r\n case types.SHOW_ORDER_COMPLETE_POPUP:\r\n case types.TOGGLE_SHOW_MOBILE_QUOTES:\r\n case types.TOGGLE_SHOW_ALL_QUOTES_CART_ITEMS_LIST:\r\n case types.SET_CART_FOOTER_ACTIVE_BUTTON_INDEX:\r\n case types.SET_CART_ITEM_EDIT_FEATURE:\r\n case types.SET_LOOK_REMOVED_CART_ITEMS:\r\n case types.CHANGE_ALL_CART_ITEMS:\r\n case types.SET_SURE_TAX:\r\n case types.SET_DELIVERY_LIST:\r\n case types.SET_SURE_TAX_LOADING:\r\n case types.SET_MARK_UP_LOGIC:\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n });\r\n case types.RESTORE_CART: {\r\n if (action.payload.cartState && action.payload.cartState.cartItems) {\r\n action.payload.cartState.cartItems = checkHardcodedRulesItems(action.payload.fabricatorState, action.payload.cartState.cartItems);\r\n // action.payload.cartState.cartItems = checkStonePricingLogic(action.payload.cartState.cartItems);\r\n }\r\n let displayLogicCartItems = action.payload.cartState && action.payload.cartState.displayLogicCartItems\r\n ? action.payload.cartState.displayLogicCartItems\r\n : [];\r\n if ((displayLogicCartItems && displayLogicCartItems.length) || state.displayLogicCartItems.length) {\r\n action.payload.cartState.displayLogicCartItems = [...displayLogicCartItems, ...state.displayLogicCartItems.filter((oldCartItem) => {\r\n return !displayLogicCartItems.some(newCi => newCi.cartFeature.dbFeature.id === oldCartItem.cartFeature.dbFeature.id)\r\n })];\r\n // cases when someone loaded display logic in bathroom, then saved kitchen quote, and when the kitchen is restored they are loaded to kitchen\r\n action.payload.cartState.cartItems = checkForAddToCartFeaturesWithDisplayLogic(action.payload.cartState.cartItems, action.payload.cartState.displayLogicCartItems, 0, action.payload.allWizardsValues)\r\n }\r\n return Object.assign({}, state, {\r\n ...action.payload.cartState,\r\n checkoutPopupVisible: false,\r\n orderCompletePopupVisible: false,\r\n });\r\n }\r\n case types.CLEAR_CART:\r\n return {...state, cartItems: []};\r\n case types.SHOW_CHECKOUT_POPUP:\r\n return {...state, checkoutPopupVisible: action.payload.show};\r\n case types.SHOW_DEPOSIT:\r\n return {...state, depositVisible: action.payload.show, depositCallback: action.payload.callback};\r\n case types.SET_CART_ITEMS_ADDED_TO_PARENT_CART: {\r\n const cItemsAddedToParentCart = [...state.cItemsAddedToParentCart];\r\n action.payload.cartItems.forEach(cartItem => {\r\n const existing = cItemsAddedToParentCart.find(cItem => cItem.id === cartItem.id);\r\n if (existing) {\r\n existing.quantity += cartItem.quantity;\r\n } else {\r\n cItemsAddedToParentCart.push({\r\n id: cartItem.id,\r\n quantity: cartItem.quantity,\r\n })\r\n }\r\n });\r\n return {...state, cItemsAddedToParentCart};\r\n }\r\n case types.SET_LOOK_OPENED:\r\n case types.SET_LOOK_PAGE_OPENED:\r\n return state.cartItemEditFeature ? {...state, cartItemEditFeature: null} : state\r\n case types.SET_LOOK_ACTIVE_CATEGORY:\r\n return (state.cartItemEditFeature && !action.payload.lookActiveCategory && !action.payload.isMobile)\r\n ? {...state, cartItemEditFeature: null} : state\r\n case types.SET_LOOK_ACTIVE_FEATURE:\r\n return (state.cartItemEditFeature && !action.payload.lookActiveFeature) ? {...state, cartItemEditFeature: null} : state\r\n case types.TOGGLE_SELECTION_WINDOW:\r\n // exit editing on change route\r\n return (state.cartItemEditFeature && !action.payload.selectionOpened) ? {...state, cartItemEditFeature: null} : state\r\n case types.CHANGE_SELECTION_ACTIVE_PART_RELATED_INDEX:\r\n // exit editing on change step\r\n return state.cartItemEditFeature && !action.payload.isSameStep ? {...state, cartItemEditFeature: null} : state\r\n case types.SET_WIZARD_ACTIVE_STEP:\r\n case types.SET_WIZARD_SELECTED_VALUES: {\r\n let newState = state;\r\n if (state.displayLogicCartItems.length) {\r\n let newCartItems = state.cartItems;\r\n newCartItems = checkForAddToCartFeaturesWithDisplayLogic(newCartItems, state.displayLogicCartItems, action.payload.quoteIndex, action.payload.allWizardsValues)\r\n newState = {...state, cartItems: newCartItems}\r\n }\r\n if ((action.type === types.SET_WIZARD_ACTIVE_STEP) && state.cartItemEditFeature) {\r\n newState = {...state, cartItemEditFeature: null}\r\n }\r\n return newState\r\n }\r\n case types.SET_MANUAL_TAX: {\r\n if (!state.manualTaxEntered) {\r\n state.manualTaxEntered = true;\r\n }\r\n state.sureTax = +action.payload.manualTax;\r\n return state\r\n }\r\n }\r\n\r\n return state;\r\n}\r\n","import React, {Component} from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport Analytics from './../../analytics';\r\nimport * as uuid from \"uuid\";\r\n\r\nexport default class Quantity extends Component {\r\n\r\n static propTypes = {\r\n value: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\r\n title: PropTypes.string,\r\n label: PropTypes.string,\r\n size: PropTypes.string,\r\n changeValue: PropTypes.func.isRequired,\r\n minValue: PropTypes.number,\r\n maxValue: PropTypes.number,\r\n defaultQuantity: PropTypes.number,\r\n hideQuantity: PropTypes.bool,\r\n pulseFeatureInfoQuantity: PropTypes.bool,\r\n squared: PropTypes.bool,\r\n allowDecimals: PropTypes.bool\r\n };\r\n\r\n static defaultProps = {\r\n hideQuantity: false,\r\n pulseFeatureInfoQuantity: false,\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n value: props.defaultQuantity || props.value,\r\n inputId: uuid.v4()\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n\r\n }\r\n\r\n componentWillReceiveProps(nextProps) {\r\n if (nextProps.value !== this.state.value) {\r\n this.setState({\r\n value: nextProps.value\r\n })\r\n }\r\n }\r\n\r\n getMinMax = () => {\r\n const min = this.props.minValue !== undefined ? this.props.minValue : 0;\r\n const max = this.props.maxValue !== undefined ? this.props.maxValue : 99999;\r\n\r\n return {min, max};\r\n };\r\n\r\n handleOnKeyDown = (event) => {\r\n if (event.key==='.' && !this.props.allowDecimals) {\r\n event.preventDefault();\r\n return false\r\n }\r\n };\r\n\r\n handleChangeValue = (event, button) => {\r\n let value = \"\" + (button ? this.state.value + event : +event.target.value);\r\n if (value.includes(\".\")) {\r\n if (!this.props.allowDecimals) {\r\n return false\r\n }\r\n if (value.split(\".\")[1].length > 2) {\r\n value = +value.substring(0, value.length - 1); //round to 2 decimals\r\n }\r\n }\r\n value = +value;\r\n Analytics.sendDataEnteredEvent(\"quantity-value\", value);\r\n const {min, max} = this.getMinMax();\r\n if (value >= min && value <= max) {\r\n value = value === 0 ? \"\" : value;\r\n this.setState({value});\r\n this.props.changeValue(value);\r\n }\r\n };\r\n\r\n handleInputBlur = (e,) => {\r\n const value = +e.target.value;\r\n const {min, max} = this.getMinMax();\r\n if (value >= min) {\r\n this.setState({value});\r\n this.props.changeValue(value);\r\n } else {\r\n this.setState({value: 0});\r\n this.props.changeValue(0);\r\n }\r\n if (value > max) {\r\n this.setState({value: max});\r\n this.props.changeValue(max);\r\n }\r\n };\r\n\r\n getColor = () => {\r\n\r\n if (this.props.pulseFeatureInfoQuantity) {\r\n return \"pulsing-red\"\r\n }\r\n\r\n const {min, max} = this.getMinMax();\r\n return (this.state.value > min && this.state.value <= max) ? \"green\" : \"blue\"\r\n };\r\n\r\n render() {\r\n const {hideQuantity, squared} = this.props;\r\n const color = this.getColor();\r\n return (\r\n
    \r\n {this.props.title ? {this.props.title} : null}\r\n {this.props.label ? : null}\r\n
    \r\n {hideQuantity\r\n ? null\r\n : ()}\r\n \r\n {hideQuantity\r\n ? null\r\n : ()}\r\n
    \r\n
    \r\n );\r\n }\r\n}\r\n","import {loaderDisable, loaderEnable} from \"../bvcomponents/ui/loaderView\";\r\nimport store from \"../store\";\r\nimport Analytics from \"../analytics\";\r\nimport {getCustomerById, resetUserPassword, userLogin, userRegister} from \"../api/user-api\";\r\nimport {showQuoteSavedNotification} from \"../bvcomponents/ui/successNotification\";\r\nimport {saveQuote} from \"../api/server-api\";\r\nimport {getAnalyticsEcommerceValues} from \"../analyticsEcommerceParams\";\r\nimport {restorePaymentInfo} from \"../actions/paymentFunctions\";\r\nimport Misc from \"./misc\";\r\nimport {changeUserInfo, toggleUserPopup} from \"../actions/actionFunctions\";\r\n\r\nexport const loginButtonCommonClick = async (updateInputValidations, analyticsLabel) => {\r\n await updateInputValidations();\r\n const errors = store.getState().userState.userInfoErrors;\r\n if (Object.keys(errors).length && Object.keys(errors)\r\n .filter(key => key === \"email\" || key === \"password\")\r\n .some(key => errors[key] && errors[key].length)) {\r\n return false\r\n }\r\n loaderEnable();\r\n Analytics.sendClickEvent(analyticsLabel);\r\n const {currency, value} = getAnalyticsEcommerceValues();\r\n Analytics.sendEcommerceEvent(\"generate_lead\", {currency, value});\r\n\r\n const loginResponse = await userLogin();\r\n loaderDisable();\r\n return loginResponse\r\n}\r\n\r\nexport const saveQuoteAfterSignIn = async () => {\r\n loaderEnable();\r\n const savedSuccess = await saveQuote({submit: true, showReceipt: false});\r\n if (savedSuccess) {\r\n showQuoteSavedNotification();\r\n document.kvConfig.jobId = savedSuccess.jobId;\r\n }\r\n loaderDisable();\r\n return savedSuccess\r\n}\r\n\r\nexport const registerButtonCommonClick = async (updateInputValidations, analyticsLabel, executeAfterRegisterIfUserExist) => {\r\n await updateInputValidations();\r\n const {userState} = store.getState();\r\n const errors = userState.userInfoErrors;\r\n if (Object.keys(errors).length && Object.keys(errors)\r\n .filter(key => key !== \"password\")\r\n .some(key => errors[key] && errors[key].length)) {\r\n return false\r\n }\r\n if (userState.userInfo) {\r\n store.dispatch(restorePaymentInfo({ // on register - fill in also shipping, why not\r\n shippingAddress: {\r\n address1: userState.userInfo.address1,\r\n address2: userState.userInfo.address2,\r\n fullName: userState.userInfo.firstName + \" \" + userState.userInfo.lastName,\r\n city: userState.userInfo.city,\r\n state: userState.userInfo.state,\r\n postal: userState.userInfo.postal,\r\n }\r\n }))\r\n }\r\n loaderEnable();\r\n Analytics.sendClickEvent(analyticsLabel);\r\n const {currency, value} = getAnalyticsEcommerceValues();\r\n Analytics.sendEcommerceEvent(\"generate_lead\", {currency, value});\r\n\r\n const registeredResponse = await userRegister({executeAfterRegisterIfUserExist});\r\n console.log(\"successfully registered\", registeredResponse);\r\n loaderDisable();\r\n return registeredResponse\r\n}\r\n\r\nexport const remindPasswordCommonClick = async (updateInputValidations, analyticsLabel) => {\r\n await updateInputValidations();\r\n const fullStore = store.getState();\r\n // const {language} = fullStore.serverState;\r\n // const {userInfo, userInfoErrors} = fullStore.userState;\r\n const {userInfoErrors} = fullStore.userState;\r\n\r\n if (userInfoErrors.email && userInfoErrors.email.length) {\r\n return false\r\n }\r\n // loaderEnable();\r\n Analytics.sendClickEvent(analyticsLabel);\r\n await resetUserPassword();\r\n // loaderDisable();\r\n}\r\n\r\nexport const getUpdatedUserInfoFromTheResponse = (newUserInfo, responseCustomer, onLoad = false) => {\r\n if (onLoad) {\r\n if (responseCustomer.email) {\r\n newUserInfo.email = responseCustomer.email;\r\n }\r\n if (responseCustomer.fullName) {\r\n newUserInfo.firstName = responseCustomer.fullName;\r\n }\r\n }\r\n if (responseCustomer.phone) {\r\n const oldCountry = responseCustomer.country || responseCustomer.shipping ? responseCustomer.shipping.country : \"\";\r\n const {phoneNumber, country} = Misc.getUserPhoneSplitted(responseCustomer.phone, oldCountry);\r\n newUserInfo.phoneNumber = phoneNumber;\r\n newUserInfo.phone = phoneNumber;\r\n if (country) {\r\n newUserInfo.country = country;\r\n }\r\n }\r\n if (responseCustomer.address) {\r\n [\"address1\", \"address2\", \"postal\", \"city\", \"provence\"].forEach(key => { // removed country, cause it is a string, and we keep object now\r\n if (responseCustomer.address[key]) {\r\n const realKey = (key === \"provence\") ? \"state\" : key;\r\n newUserInfo[realKey] = responseCustomer.address[key];\r\n }\r\n })\r\n }\r\n newUserInfo.shipping = responseCustomer.shipping;\r\n return newUserInfo\r\n}\r\n\r\nexport const tryToSetUserFromUrl = async (url) => {\r\n if (!url || !url.searchParams) {\r\n return\r\n }\r\n const userId = url.searchParams.get(\"u\");\r\n if (!userId) {\r\n return\r\n }\r\n try {\r\n const customerId = +(userId.split(\"/\")[0]);\r\n const responseCustomer = await getCustomerById({\r\n customerId,\r\n });\r\n if (!responseCustomer) {\r\n return\r\n }\r\n const newUserInfo = getUpdatedUserInfoFromTheResponse({}, responseCustomer, true);\r\n store.dispatch(changeUserInfo(newUserInfo));\r\n store.dispatch(toggleUserPopup({\r\n userIsLoggedIn: true,\r\n isPhoneNumberValidated: true\r\n }));\r\n } catch (e) {\r\n console.log(\"couldn't log in customer\", userId);\r\n }\r\n}\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nconst ENTER_KEY = 13;\r\nconst rgx = /^[0-9]*\\.?[0-9]*$/;\r\n\r\nexport default class TextInput extends React.Component {\r\n\r\n inputElement = React.createRef();\r\n\r\n state = {\r\n value: this.props.value,\r\n editing: false,\r\n numberInput: false\r\n };\r\n\r\n static propTypes = {\r\n onChange: PropTypes.func.isRequired,\r\n onRealChange: PropTypes.func,\r\n onBlur: PropTypes.func,\r\n className: PropTypes.string,\r\n numberInput: PropTypes.bool,\r\n id: PropTypes.string,\r\n autoComplete: PropTypes.string,\r\n maxValue: PropTypes.number,\r\n };\r\n\r\n onChange = (event) => {\r\n let value = event.target.value;\r\n\r\n if (!value.match(rgx) && this.props.numberInput) {\r\n return false;\r\n }\r\n if (this.props.numberInput && this.props.maxValue && (this.getUpdatedValue(value) >= this.props.maxValue)) {\r\n value = this.props.maxValue;\r\n }\r\n this.setState({\r\n value\r\n });\r\n if (this.props.onRealChange) {\r\n this.props.onRealChange(value);\r\n }\r\n };\r\n\r\n onBlur = (event) => {\r\n let value = event.target.value;\r\n this.finishEditing(value);\r\n if (this.props.onBlur) {\r\n this.props.onBlur();\r\n }\r\n };\r\n\r\n getUpdatedValue = (value) => {\r\n if (!this.props.numberInput) {\r\n return value\r\n }\r\n if (value.indexOf('.') === 0) {\r\n value = +(\"0\"+value); // dot on the beginning\r\n }\r\n if (value.toString().indexOf(\".\") === (value.toString().length - 1)) {\r\n value = value.substring(0, value.length - 1); // dot on the end\r\n }\r\n if (this.props.maxValue && (+value > this.props.maxValue)) {\r\n value = this.props.maxValue;\r\n }\r\n return +value || 0\r\n }\r\n\r\n finishEditing = (value) => {\r\n value = this.getUpdatedValue(value);\r\n this.setState({\r\n editing: false\r\n }, () => {\r\n this.props.onChange(value);\r\n })\r\n };\r\n\r\n onFocus = () => {\r\n let value = this.props.numberInput && this.props.currencySing\r\n ? this.props.value.replace(this.props.currencySing,\"\").replace(\"%\",\"\").replace(\",\",\"\")\r\n : this.props.value;\r\n value = (value === \"Included\" ? \"\" : value);\r\n this.setState({\r\n editing: true,\r\n value\r\n })\r\n };\r\n\r\n handleKeyDown = e => {\r\n if (e.keyCode === ENTER_KEY) {\r\n // this.finishEditing(this.state.value);\r\n e.target.blur();\r\n }\r\n };\r\n\r\n render() {\r\n return \r\n }\r\n}\r\n","import React, {Fragment, useEffect, useRef, useState} from \"react\";\r\nimport PropTypes from \"prop-types\";\r\n// import {FormattedMessage} from \"react-intl\";\r\n\r\nimport Button from \"@mui/material/Button\";\r\nimport ExpandMoreIcon from \"@mui/icons-material/ExpandMore\";\r\n\r\nimport {useOutsideClick} from \"../../../misc/helperHooks\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nconst LookDropdown = (props) => {\r\n\r\n const {selectItems, selectedItem, selectItemClick, selectLabel, maxItems, errorsObject, changeErrorsObject, getValidationErrors,\r\n inputsValidated, property, size, textOnly} = props;\r\n const [opened, setOpened] = useState(false);\r\n const selectElement = useRef(null);\r\n\r\n useOutsideClick(selectElement, () => {\r\n setOpened(false);\r\n });\r\n\r\n const handleSelectItemClick = (selectItem, selectItemIndex) => {\r\n selectItemClick(selectItem, selectItemIndex);\r\n setOpened(false);\r\n checkForError();\r\n };\r\n\r\n const checkForError = () => {\r\n if (errorsObject && getValidationErrors && changeErrorsObject) {\r\n const errors = getValidationErrors(property, selectedItem.value);\r\n changeErrorsObject({\r\n [property]: errors\r\n })\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n if (!inputsValidated) {\r\n checkForError();\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [inputsValidated]);\r\n\r\n const selectItemHeight = size || 36;\r\n const styles = {\r\n height: opened\r\n ? maxItems && (selectItems.length > maxItems)\r\n ? (maxItems * selectItemHeight) + \"px\"\r\n : (selectItems.length * selectItemHeight) + \"px\"\r\n : 0\r\n }\r\n\r\n const errorsExist = errorsObject && Array.isArray(errorsObject[property]) && !!errorsObject[property].length;\r\n\r\n return (\r\n
    \r\n {textOnly ? (\r\n
    \r\n \r\n {selectedItem && selectedItem.preText ? {selectedItem.preText} : null}\r\n {selectLabel ? {selectLabel} : null}\r\n {selectedItem ? selectedItem.text : \"-\"}\r\n \r\n
    \r\n ) : (\r\n \r\n )}\r\n {textOnly ? null : (\r\n
    \r\n
      \r\n {selectItems.map((selectItem, selectItemIndex) => {\r\n const isSelected = selectItem.value === selectedItem.value;\r\n return (\r\n
    • \r\n \r\n
    • \r\n )\r\n })}\r\n
    \r\n
    \r\n )}\r\n {errorsExist ? (\r\n
    \r\n \r\n
    \r\n ) : \"\"}\r\n
    \r\n )\r\n};\r\n\r\nLookDropdown.propTypes = {\r\n selectItems: PropTypes.arrayOf(PropTypes.shape({\r\n text: PropTypes.string.isRequired, // intlKey\r\n value: PropTypes.any.isRequired,\r\n preText: PropTypes.string,\r\n })).isRequired,\r\n selectItemClick: PropTypes.func.isRequired,\r\n selectedItem: PropTypes.object,\r\n selectLabel: PropTypes.string,\r\n className: PropTypes.string,\r\n maxItems: PropTypes.number,\r\n size: PropTypes.number,\r\n textOnly: PropTypes.bool,\r\n // validation below\r\n property: PropTypes.string,\r\n inputsValidated: PropTypes.bool,\r\n errorsObject: PropTypes.object, // userInfoErrorsLike\r\n changeErrorsObject: PropTypes.func,\r\n getValidationErrors: PropTypes.func,\r\n};\r\n\r\nexport default LookDropdown\r\n","import React from \"react\";\r\nimport {connect} from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport {featureInterface} from \"../../../../../interfaces/featureInterface\";\r\n\r\nconst LookFeatureSku = (props) => {\r\n\r\n const {lookFeature, fabricatorSettings, isList} = props;\r\n\r\n if (!lookFeature.dbFeature.sku || fabricatorSettings.hideSku) {\r\n return null\r\n }\r\n\r\n if (isList) {\r\n return (\r\n \r\n {lookFeature.dbFeature.sku}\r\n \r\n )\r\n }\r\n\r\n return (\r\n \r\n {lookFeature.dbFeature.sku}\r\n \r\n )\r\n};\r\n\r\nLookFeatureSku.propTypes = {\r\n lookFeature: PropTypes.shape(featureInterface),\r\n isList: PropTypes.bool,\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {settings} = store.fabricatorState;\r\n return {\r\n fabricatorSettings: settings,\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps)(LookFeatureSku)\r\n","import {connect} from \"react-redux\";\r\n\r\nimport {postMessageToParent} from \"../lookMessaging\";\r\nimport {GROHE_POST_MESSAGES_ACTIONS} from \"../iframeIntegration\";\r\nimport {getLookId, getPostCartItemsList} from \"../lookNavigation/lookFunctions2\";\r\nimport {setIframeIntegrationRequest} from \"../../../actions/iframeIntegrationFunctions\";\r\nimport {saveQuote} from \"../../../api/server-api\";\r\nimport {setAmazonImageUrl} from \"../../../actions/serverFunctions\";\r\nimport {getTempIdForPostMessage, postSaveVisualizerImage} from \"../../../api/look-api\";\r\nimport {getQuotePriceWithTaxes, getTotalPrice, isIframe} from \"../../../misc/helpers\";\r\n// import {getCurrentLayout} from \"../../appLayout\";\r\n// import Config from \"../../../config\";\r\nimport {LOOK_OVERLAYS} from \"../core/constants\";\r\nimport {IS_PRODUCT_JOURNEY} from \"../../../config\";\r\nimport {setLookOverlayOpened} from \"../../../actions/lookFunctions\";\r\nimport {setExisingTempId} from \"../../../actions/groheFunctions\";\r\nimport {renderErrorPopup} from \"../../../api/api-popups\";\r\nimport {showQuoteSavedNotification} from \"../../ui/successNotification\";\r\nimport Analytics from \"../../../analytics\";\r\nimport {getAnalyticsEcommerceItem} from \"../../../analyticsEcommerceParams\";\r\nimport {updateCurrentQuote} from \"../../../misc/quotesFunctions\";\r\n\r\nconst WithAddToCartPostMessage = (props) => {\r\n\r\n const {cartItems, jobId, children, activePreset, bvPresets, setIframeIntegrationRequest, isPhoneNumberValidated,\r\n activeQuoteIndex, setAmazonImageUrl, setLookOverlayOpened, exisingTempId, setExisingTempId, userIsLoggedIn,\r\n fabricatorData} = props;\r\n const fabricatorSettings = fabricatorData.settings;\r\n\r\n const isLixil = isIframe() && fabricatorData.isLixil;\r\n\r\n const withoutCheckout = !isLixil && !fabricatorSettings.checkout;\r\n if (withoutCheckout && IS_PRODUCT_JOURNEY) { // we keep this button on the look list page\r\n return null\r\n }\r\n\r\n const addToCartPostMessage = async (sendFeatures= null) => {\r\n\r\n // const layout = getCurrentLayout();\r\n // await layout.updateLocalStorage();\r\n\r\n if (!isLixil || !fabricatorSettings.checkout) {\r\n if (!isPhoneNumberValidated) {\r\n setLookOverlayOpened(LOOK_OVERLAYS.leadCapture);\r\n return\r\n }\r\n if (withoutCheckout) {\r\n // we should just save the quote, everything is correct below\r\n }\r\n if (fabricatorSettings.checkout && IS_PRODUCT_JOURNEY) { // this should never execute, but let it be\r\n return false\r\n }\r\n setLookOverlayOpened(LOOK_OVERLAYS.loadingCart);\r\n return saveQuote({\r\n submit: true,\r\n showReceipt: false\r\n })\r\n .then((responseData) => {\r\n document.kvConfig.jobId = responseData.jobId;\r\n if (responseData.imageUrl) {\r\n setAmazonImageUrl(responseData.imageUrl)\r\n }\r\n setLookOverlayOpened(\"\");\r\n showQuoteSavedNotification(\r\n fabricatorSettings.checkout ? \"successNotification.titleQuoteCreated\" : \"successNotification.titleQuoteSaved\"\r\n );\r\n })\r\n .catch((error) => {\r\n renderErrorPopup(\"Server \"+new Error(error));\r\n setLookOverlayOpened(\"\");\r\n })\r\n }\r\n\r\n const totalPrice = getTotalPrice(null, false, cartItems);\r\n\r\n Analytics.sendEcommerceEvent(\"add_to_cart\", {\r\n currency: fabricatorSettings.currency,\r\n value: getQuotePriceWithTaxes(totalPrice),\r\n items: cartItems.map((cartItem, cartItemIndex) => {\r\n return getAnalyticsEcommerceItem(cartItem.cartFeature, cartItem.quantity, cartItemIndex)\r\n })\r\n });\r\n\r\n setLookOverlayOpened(LOOK_OVERLAYS.loadingCart);\r\n\r\n let lookImage = \"\";\r\n\r\n if (!userIsLoggedIn && !IS_PRODUCT_JOURNEY) {\r\n const updatedQuotes = await updateCurrentQuote();\r\n lookImage = await postSaveVisualizerImage({\r\n base64Image: updatedQuotes[activeQuoteIndex].bvImage\r\n });\r\n }\r\n\r\n // const useRedirect = !IS_PRODUCT_JOURNEY\r\n // || (Array.isArray(sendFeatures) && sendFeatures.length > 1 && !sendFeatures.some(cartItem => featureIsBundle(cartItem.cartFeature)))\r\n\r\n let lookId = getLookId(activePreset, bvPresets);\r\n\r\n let postData = {\r\n \"EventType\": GROHE_POST_MESSAGES_ACTIONS.addToCart,\r\n \"LookImage\": lookImage ? lookImage : \"No image created\",\r\n \"LookId\": lookId + \"\",\r\n \"LookSkus\": Array.isArray(sendFeatures)\r\n ? getPostCartItemsList(sendFeatures, true)\r\n : getPostCartItemsList(cartItems, true),\r\n \"UseRedirect\": \"\" + !IS_PRODUCT_JOURNEY,\r\n }\r\n\r\n if(jobId) {\r\n postData[\"VisualizerId\"] = jobId + \"\"\r\n }\r\n\r\n if (!isIframe()) {\r\n console.log(\"Not an iframe, can't post cart data:\", postData);\r\n }\r\n\r\n setIframeIntegrationRequest(postData);\r\n if (userIsLoggedIn) {\r\n saveQuote({\r\n submit: true,\r\n })\r\n .then((responseData) => {\r\n document.kvConfig.jobId = responseData.jobId;\r\n if(responseData.jobId) {\r\n postData[\"VisualizerId\"] = responseData.jobId + \"\";\r\n }\r\n postData[\"LookImage\"] = responseData.imageUrl || lookImage || \"No image created\";\r\n if (responseData.imageUrl) {\r\n setAmazonImageUrl(responseData.imageUrl)\r\n }\r\n window.postMessageIsExecuting = true;\r\n postMessageToParent(postData);\r\n })\r\n } else {\r\n postData[\"tempID\"] = await getTempIdForPostMessage(\"\", exisingTempId);\r\n if (IS_PRODUCT_JOURNEY) {\r\n setExisingTempId(postData[\"tempID\"]);\r\n }\r\n postMessageToParent(postData);\r\n }\r\n }\r\n\r\n return children(addToCartPostMessage)\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const {cartItems} = store.cartState;\r\n const {activePreset, bvPresets} = store.bathroomVisualizerState;\r\n const {jobId} = store.serverState;\r\n const {isPhoneNumberValidated, userIsLoggedIn} = store.userState;\r\n const {activeQuoteIndex} = store.quotesState;\r\n const {exisingTempId} = store.groheState;\r\n const fabricatorData = store.fabricatorState;\r\n\r\n return {\r\n cartItems,\r\n activePreset,\r\n bvPresets,\r\n jobId,\r\n isPhoneNumberValidated,\r\n userIsLoggedIn,\r\n // quotes,\r\n activeQuoteIndex,\r\n exisingTempId,\r\n fabricatorData,\r\n }\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setIframeIntegrationRequest,\r\n setAmazonImageUrl,\r\n setLookOverlayOpened,\r\n setExisingTempId,\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(WithAddToCartPostMessage)\r\n","import React, {useMemo, useRef} from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\nimport { withRouter } from \"react-router-dom\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport AddIcon from '@mui/icons-material/Add';\r\nimport IconButton from \"@mui/material/IconButton\";\r\n\r\nimport FeatureName from \"../../../../visComponents/featureName\";\r\nimport {featureInterface} from \"../../../../../interfaces/featureInterface\";\r\nimport LookFeaturePrice from \"./lookFeaturePrice\";\r\nimport FeatureThumbnail from \"../../../../visComponents/featureThumbnail\";\r\n// import LookListFeatureActions from \"./lookListFeatureActions\";\r\nimport {\r\n setLookActiveCategory,\r\n setLookActiveFeature, setLookAllWallsTutorial,\r\n setLookCompatabilityAlert,\r\n setLookDemoPointsClicked,\r\n setLookOverlayOpened,\r\n // setLookAllWallsOpened\r\n} from \"../../../../../actions/lookFunctions\";\r\nimport Config from \"../../../../../config\";\r\nimport {getCommonCoords, getFeatureCoords, getLayerCenter, navFeatureCLick} from \"../../lookFunctions\";\r\nimport LookListFeatureCheckmark from \"./lookListFeatureCheckmark\";\r\nimport {addToCart, setCanvasScale, updateCanvasCount} from \"../../../../../actions/actionFunctions\";\r\nimport LookCanvasContext from \"../../../lookCanvasContext\";\r\nimport {getCurrentLayout} from \"../../../../appLayout\";\r\nimport {LOOK_WALLS_ONLY} from \"../../../core/constants\";\r\nimport {IS_PRODUCT_JOURNEY} from \"../../../../../config\";\r\nimport {getCartItemObject, getFeatureIsLocked} from \"../../../../../misc/helpers\";\r\nimport {\r\n enableRelatedFeature,\r\n getFeatureIsActive,\r\n getFeatureUrl,\r\n hideFeatureSection\r\n} from \"../../lookFunctions2\";\r\nimport Analytics, {LOOK_JOURNEY_ANALYTIC_EVENTS, PRODUCT_JOURNEY_ANALYTIC_EVENTS} from \"../../../../../analytics\";\r\nimport WithClickCount from \"../../../hocs/withClickCount\";\r\nimport LookListActiveFeatureMobileButton from \"./lookListActiveFeatureMobileButton\";\r\nimport LookAllWallsRadioButton from \"../lookAllWallsRadioButton\";\r\nimport {\r\n checkForCompatabilityAlert,\r\n clickOnSimilarFeatures,\r\n getApplyToLogic,\r\n getShowMatchRadio\r\n} from \"../../lookNavigationFunctions\";\r\nimport LookFeatureItemLocked from \"./lookFeatureItemLocked\";\r\nimport {getAnalyticsEcommerceItem} from \"../../../../../analyticsEcommerceParams\";\r\nimport {shouldZoomPartId} from \"../../../hocs/withZoomToFeature\";\r\nimport LookListFeatureName from \"./lookListFeatureName\";\r\nimport {featureCanChangeShowerSize, searchForSameNameWallsBeforeFeatureApply} from \"../../../bathroomFunctions\";\r\n\r\n\r\n\r\nconst LookListFeature = (props) => {\r\n\r\n const {style, lookFeature, lookExpanded, lookViewType, lookActiveFeature, setLookActiveFeature, history, position,\r\n featureGroup, updateCanvasCount, lookActiveCategory, isMobile, isPhoneNumberValidated, canvasCount,\r\n addToCart, qtActiveCategory, setCanvasScale, canvasScale, navItems, updateLookCartItem,\r\n setLookDemoPointsClicked, lookDemoPointsClicked, viewType, fromDesignRecommended, setLookAllWallsTutorial,\r\n setLookCompatabilityAlert, fabricatorData, lookCompatabilityAlert, lookLockedTutorial, lookAllWallsTutorial,\r\n // setLookAllWallsOpened, lookAllWallsOpened,\r\n isAllWallsTutorialItem,\r\n } = props;\r\n\r\n const featureElement = useRef();\r\n\r\n const noFeatureSection = useMemo(() => {\r\n return hideFeatureSection(true, lookFeature.partId, lookFeature, lookCompatabilityAlert)\r\n }, [lookFeature, lookCompatabilityAlert]);\r\n\r\n const fabricatorSettings = fabricatorData.settings;\r\n\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n const showPriceLocked = useMemo(() => getFeatureIsLocked(lookFeature), [lookFeature, isPhoneNumberValidated]);\r\n const showPrice = fabricatorSettings.showPricing && !fabricatorData.hideCheckoutBreakdownCost\r\n && !showPriceLocked && !fabricatorData.hidePricesFromUser && !noFeatureSection;\r\n const featureIsLocked = showPriceLocked;\r\n\r\n // const [canRender, setCanRender] = useState(false);\r\n const isEmpty = (!lookFeature && position) || (featureGroup && featureGroup.disabled);\r\n const currentType = viewType || lookViewType;\r\n\r\n // useEffect(() => {\r\n // if (lookExpanded) {\r\n // setTimeout(() => { // preventing thumbnail jumping\r\n // setCanRender(true)\r\n // }, 200)\r\n // } else {\r\n // setCanRender(false)\r\n // }\r\n // }, [lookExpanded])\r\n\r\n const showMatchRadio = useMemo(() => getShowMatchRadio(lookFeature), [lookFeature]);\r\n\r\n const applyFeature = async (zoomFeature, imageCanvas, forceClick = false) => {\r\n const layout = getCurrentLayout();\r\n const parent = zoomFeature.getParent();\r\n Analytics.sendEcommerceEvent(\"select_item\", {\r\n item_list_id: zoomFeature.partId,\r\n item_list_name: parent.dbName || parent.partName || \"\",\r\n items: [getAnalyticsEcommerceItem(zoomFeature, 1)],\r\n });\r\n\r\n if (!lookActiveFeature) {\r\n parent.featureBeforeChange = zoomFeature;\r\n }\r\n const positionInList = navItems ? navItems.findIndex(navItem => navItem.part.dbFeature.id === lookFeature.dbFeature.id) : null;\r\n if (!IS_PRODUCT_JOURNEY && (!isMobile || featureIsLocked)) {\r\n setLookActiveFeature(zoomFeature, positionInList);\r\n }\r\n if ((layout.isNewLayout || (layout.visualizerType === \"bvScene\")) && featureCanChangeShowerSize(zoomFeature)) {\r\n await searchForSameNameWallsBeforeFeatureApply(zoomFeature);\r\n }\r\n\r\n // setLookActiveCategory(zoomFeature.partId);\r\n if (showMatchRadio) { // before nav feature click\r\n const applyToLogic = getApplyToLogic(lookFeature);\r\n // const parent = zoomFeature.getParent();\r\n // setActiveFeaturesBeforeAllWalls([], parent); // we don't need it here, as we have remembering logic below\r\n if (applyToLogic && Array.isArray(applyToLogic.currentApplyToArray) && applyToLogic.currentApplyToArray.length) {\r\n await clickOnSimilarFeatures(zoomFeature, applyToLogic, true);\r\n // if (!lookAllWallsOpened) {\r\n // setLookAllWallsOpened(true);\r\n // }\r\n }\r\n }\r\n navFeatureCLick(zoomFeature, true, forceClick);\r\n enableRelatedFeature(zoomFeature, addToCart, qtActiveCategory);\r\n // const parent = zoomFeature.getParent();\r\n // if (parent.disabled) {\r\n // parent.disabled = false;\r\n // parent.disabledClick();\r\n // }\r\n if (updateLookCartItem) {\r\n updateLookCartItem(zoomFeature) // removed since we have select button on look journey\r\n }\r\n if (isMobile) {\r\n if (IS_PRODUCT_JOURNEY || featureIsLocked) {\r\n // const closeOnly = zoomFeature && !layout.partIdExistInQtCategory(zoomFeature.partId) && !showMatchRadio;\r\n // const closeOnly = zoomFeature && !layout.partIdExistInQtCategory(zoomFeature.partId);\r\n // if (closeOnly) {\r\n // history.push(getFeatureUrl(zoomFeature, true))\r\n // } else {\r\n // setLookActiveCategory(\"\");\r\n // history.push(getFeatureUrl(zoomFeature)) // always go to feature screen on mobile\r\n // }\r\n history.push(getFeatureUrl(zoomFeature, true));\r\n }\r\n } else {\r\n history.push(getFeatureUrl(zoomFeature, !!lookActiveCategory));\r\n }\r\n // here we can update the navigation list, but I removed it since it is sorting features and confusing customers\r\n // if (lookFeature.getColorName(filterGroups) !== lookActiveFeature.getColorName(filterGroups)) {\r\n // updateNavigationCount();\r\n // }\r\n updateCanvasCount();\r\n if (imageCanvas && imageCanvas.current && imageCanvas.current.pinchZoom && !LOOK_WALLS_ONLY.includes(zoomFeature.partId)\r\n && shouldZoomPartId(zoomFeature.partId, isMobile) && (canvasScale === 1)) {\r\n const commonCoords = getFeatureCoords(zoomFeature) || getCommonCoords(featureGroup || zoomFeature.getParent(), zoomFeature, imageCanvas.current.canvas);\r\n const center = commonCoords && Object.keys(commonCoords).length\r\n ? getLayerCenter(commonCoords, imageCanvas.current.canvas, isMobile)\r\n : null;\r\n if (center) {\r\n imageCanvas.current.pinchZoom.zoomToCenter(center, 0, false, layout.partIdExistInQtCategory(zoomFeature.partId));\r\n setCanvasScale(imageCanvas.current.pinchZoom.options.tapZoomFactor)\r\n }\r\n }\r\n if (!lookDemoPointsClicked) {\r\n setLookDemoPointsClicked(true);\r\n }\r\n if (!lookAllWallsTutorial.finished && showMatchRadio && !featureIsLocked && !lookFeature.notAvailableInVisualizer\r\n && featureElement && featureElement.current && !fabricatorData.isEncore && (currentType === 1)) {\r\n setLookAllWallsTutorial({\r\n visible: true,\r\n // withGrid: navItems.length === 1,\r\n // positionInList,\r\n lookFeature,\r\n top: featureElement.current.getBoundingClientRect().top,\r\n left: featureElement.current.getBoundingClientRect().left,\r\n height: style.height,\r\n // firstLockedIndex,\r\n // firstUnlockedIndex,\r\n });\r\n }\r\n }\r\n\r\n const listFeatureClick = (event, imageCanvas, maxClickCountReached) => {\r\n if (event.target.closest(\".look-icon--delete\") || event.target.closest(\".gm-ios-checkbox\") || lookLockedTutorial.visible) {\r\n return\r\n }\r\n if (Config.isDevMode() && lookFeature) {\r\n console.log(\"lookFeature\", lookFeature, lookFeature.metaData);\r\n }\r\n if (lookExpanded) {\r\n document.querySelector(\".lm\").style.transition = \"none\";\r\n setTimeout(() => {\r\n document.querySelector(\".lm\").style.transition = \"all 0.3s ease\";\r\n }, 300)\r\n }\r\n let zoomFeature = lookFeature;\r\n if (isEmpty) {\r\n if (!lookFeature && position) {\r\n zoomFeature = featureGroup.getMatchingPositionFeature(position);\r\n if (zoomFeature) {\r\n featureGroup.layerPositions[position] = zoomFeature;\r\n }\r\n }\r\n if (zoomFeature) {\r\n featureGroup.activeFeature = zoomFeature;\r\n addToCart([getCartItemObject(zoomFeature, 1, qtActiveCategory)]);\r\n }\r\n console.log(\"zoomFeature featureGroup\", zoomFeature, featureGroup);\r\n }\r\n\r\n if (!zoomFeature || maxClickCountReached()) { // fabricator settings click lead capture\r\n return false;\r\n }\r\n\r\n const featureLabel = Analytics.getSkuForAnalytics(zoomFeature);\r\n const analyticsLabel = IS_PRODUCT_JOURNEY\r\n ? PRODUCT_JOURNEY_ANALYTIC_EVENTS.productFeaturesList + featureLabel\r\n : fromDesignRecommended\r\n ? LOOK_JOURNEY_ANALYTIC_EVENTS.lookFeaturesListDesignRecommended + featureLabel\r\n : LOOK_JOURNEY_ANALYTIC_EVENTS.lookFeaturesList + featureLabel;\r\n Analytics.sendClickEvent(analyticsLabel);\r\n\r\n if (featureIsLocked) {\r\n if (!IS_PRODUCT_JOURNEY) {\r\n const positionInList = navItems ? navItems.findIndex(navItem => navItem.part.dbFeature.id === lookFeature.dbFeature.id) : null;\r\n setLookActiveFeature(zoomFeature, positionInList);\r\n history.push(getFeatureUrl(zoomFeature, true));\r\n }\r\n return false\r\n }\r\n\r\n const compatabilityLogic = checkForCompatabilityAlert(zoomFeature);\r\n if (compatabilityLogic.length) {\r\n Analytics.sendClickEvent(LOOK_JOURNEY_ANALYTIC_EVENTS.lookShowCompatabilityAlert);\r\n setLookCompatabilityAlert({\r\n visible: true,\r\n compatabilityLogic,\r\n clickedFeature: zoomFeature,\r\n applyFunction: applyFeature.bind(this, zoomFeature, imageCanvas, true) // always apply features from this popup\r\n });\r\n return false\r\n }\r\n\r\n // if (featureIsLocked && !fabricatorSettings.clickLeadCapture && !(isIframe() && fabricatorData.isLixil)) {\r\n // window.clearTimeout(window.leadCaptureTimeoutId);\r\n // window.leadCaptureTimeoutId = setTimeout(() => {\r\n // setLookOverlayOpened(LOOK_OVERLAYS.leadCapture);\r\n // }, 500)\r\n // }\r\n\r\n applyFeature(zoomFeature, imageCanvas);\r\n }\r\n\r\n const isActive = useMemo(() => {\r\n return getFeatureIsActive(lookFeature, lookActiveFeature, lookActiveCategory, featureGroup)\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [lookFeature, lookActiveFeature, lookActiveCategory, featureGroup, canvasCount]);\r\n\r\n // const showYellowNotice = !IS_PRODUCT_JOURNEY && (getStyleAlertNotMatchingFeatures(lookFeature).length && !lookActiveCategory)\r\n // || (lookFeature && lookRemovedCartItems.length && lookRemovedCartItems.some(cartItem => {\r\n // return (cartItem.partId === lookFeature.partId) && cartItem.cartFeature.metaData.layerPosition\r\n // && (cartItem.cartFeature.metaData.layerPosition === lookFeature.metaData.layerPosition)\r\n // }));\r\n\r\n const showAllWalls = isActive && showMatchRadio && !featureIsLocked;\r\n const viewTypeFour = +currentType === 4;\r\n const isLockedAndViewTypeFour = showPriceLocked && viewTypeFour;\r\n\r\n return (\r\n \r\n {(imageCanvas) => (\r\n \r\n {(maxClickCountReached) => (\r\n
  • listFeatureClick(event, imageCanvas, maxClickCountReached)}>\r\n {isEmpty ? (\r\n
    \r\n \r\n \r\n \r\n
    \r\n ) : (\r\n
    \r\n {isMobile && !IS_PRODUCT_JOURNEY\r\n ? lookAllWallsTutorial.visible ? null : \r\n : }\r\n \r\n {showAllWalls ? : null}\r\n
    \r\n )}\r\n {isEmpty ? (\r\n
    \r\n \r\n
    \r\n ) : (\r\n
    \r\n {viewTypeFour || ((currentType === 2) && showPriceLocked) ? null : (\r\n \r\n \r\n {/*{showYellowNotice ? : null}*/}\r\n \r\n )}\r\n {showPriceLocked ? \r\n : viewTypeFour\r\n ? null\r\n : }\r\n {!lookExpanded && !isLockedAndViewTypeFour ? (\r\n
    \r\n {!lookExpanded && !isLockedAndViewTypeFour && !noFeatureSection && !showPriceLocked ? (\r\n \r\n ) : null}\r\n {viewTypeFour && !featureIsLocked ? : null}\r\n
    \r\n ) : null}\r\n
    \r\n )}\r\n {/*{lookFeature && lookExpanded && canRender ? (*/}\r\n {/* */}\r\n {/*) : null}*/}\r\n {/*{lookFeature && lookExpanded && canRender ? (*/}\r\n {/* */}\r\n {/*) : null}*/}\r\n
  • \r\n )}\r\n
    \r\n )}\r\n
    \r\n )\r\n};\r\n\r\nLookListFeature.propTypes = {\r\n lookFeature: PropTypes.shape(featureInterface),\r\n fromDesignRecommended: PropTypes.bool,\r\n style: PropTypes.object,\r\n featureGroup: PropTypes.object,\r\n position: PropTypes.string,\r\n navItems: PropTypes.array,\r\n updateLookCartItem: PropTypes.func,\r\n viewType: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\r\n isAllWallsTutorialItem: PropTypes.bool,\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {lookExpanded, lookViewType, lookActiveCategory, lookActiveFeature, lookDemoPointsClicked, lookCompatabilityAlert,\r\n // lookAllWallsOpened\r\n lookLockedTutorial, lookAllWallsTutorial} = store.lookState;\r\n const {isMobile} = store.serverState;\r\n const {canvasScale, canvasCount} = store.bathroomVisualizerState;\r\n const {qtActiveCategory} = store.qtState;\r\n // const {filterGroups} = store.filterState;\r\n // const {lookRemovedCartItems} = store.cartState;\r\n const fabricatorData = store.fabricatorState;\r\n const {isPhoneNumberValidated} = store.userState; // to update component when user is logged in\r\n\r\n return {\r\n lookActiveFeature,\r\n lookExpanded,\r\n lookViewType,\r\n lookActiveCategory,\r\n isMobile,\r\n qtActiveCategory,\r\n // lookRemovedCartItems,\r\n lookDemoPointsClicked,\r\n canvasScale,\r\n // filterGroups,\r\n // lookAllWallsOpened,\r\n fabricatorData,\r\n isPhoneNumberValidated,\r\n lookCompatabilityAlert,\r\n canvasCount,\r\n lookLockedTutorial,\r\n lookAllWallsTutorial,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setLookActiveFeature,\r\n updateCanvasCount,\r\n setLookActiveCategory,\r\n addToCart,\r\n setCanvasScale,\r\n setLookDemoPointsClicked,\r\n setLookCompatabilityAlert,\r\n setLookOverlayOpened,\r\n setLookAllWallsTutorial,\r\n // updateNavigationCount,\r\n // setLookAllWallsOpened,\r\n};\r\n\r\nexport default withRouter(\r\n connect(mapStateToProps, mapDispatchToProps)(LookListFeature)\r\n)\r\n","import React from 'react';\r\nimport UserLoginButton from \"../ui/userLoginButton\";\r\nimport {loaderDisable, loaderEnable} from \"../ui/loaderView\";\r\nimport {saveQuote} from \"../../api/server-api\";\r\nimport {showCheckoutLayout} from \"../../actions/actionFunctions\";\r\nimport {getCurrentLayout} from \"../appLayout\";\r\nimport {showQuoteSavedNotification} from \"../ui/successNotification\";\r\nimport Analytics from '../../analytics';\r\n\r\nexport default class ShoppingCart extends React.Component {\r\n\r\n getRecentlyViewedItems = () => {\r\n const layout = getCurrentLayout();\r\n // console.log(\"layout.getActiveFeatures()\", layout.getActiveFeatures());\r\n const activeFeatures = layout.getActiveFeatures()\r\n .filter(feature => {\r\n if (!feature.cartFeature || !feature.cartFeature.dbFeature\r\n || (feature.cartFeature.partName && feature.cartFeature.partName.includes(\"laceholder\")) || feature.partId === \"shower_body\") {\r\n return false\r\n }\r\n if (feature.partId.includes(\"pony_wall\") && feature.cartFeature.getParent) {\r\n const showerParent = feature.cartFeature.getParent().getParent().layout.parts.Shower;\r\n if (showerParent.showerDimensions() !== \"Pony\") {\r\n return false\r\n }\r\n }\r\n const featureId = feature.cartFeature.dbFeature.id;\r\n return !feature.partId.includes(\"top_cabinet_module\") && this.props.cartItems.every((cartItem) => {\r\n return cartItem.cartFeature.dbFeature.id !== featureId\r\n })\r\n });\r\n const recentlyViewedItems = (Array.isArray(this.props.recentlyViewedItems) && this.props.recentlyViewedItems.length)\r\n ? this.props.recentlyViewedItems\r\n .filter(recentItem => {\r\n const recentItemId = recentItem.dbFeature.id;\r\n return activeFeatures.every(cartItem => cartItem.cartFeature.dbFeature.id !== recentItemId)\r\n && this.props.cartItems.every((cartItem) => cartItem.cartFeature.dbFeature.id !== recentItemId)\r\n })\r\n .map(recentItem => {\r\n return {\r\n selectionGroup: recentItem.getParent().getParent().partName,\r\n partId: recentItem.partId,\r\n quantity: 0,\r\n cartFeature: recentItem\r\n };\r\n })\r\n : [];\r\n return [...activeFeatures, ...recentlyViewedItems]\r\n };\r\n\r\n getFinalButton = () => {\r\n if (document.kvConfig.canSaveQuote !== false) { // if document.kvConfig.canSaveQuote is null it is ok, we are checking only for false\r\n let intlText = \"\";\r\n let onClick = () => {};\r\n const fabricatorSettings = this.props.fabricatorData.settings;\r\n if (fabricatorSettings.checkout) {\r\n if (fabricatorSettings.sureTax && !this.props.isPhoneNumberValidated) {\r\n return {\r\n intlText: \"quotingTool.featureInfo.priceLockedTitle\",\r\n onClick: () => this.handleCheckOut(\"updateTax\"),\r\n }\r\n }\r\n onClick = this.handleCheckOut;\r\n intlText = (fabricatorSettings.enableDocuSign || fabricatorSettings.hasPaymentGateway || document.kvConfig.showBackToDashboard)\r\n ? \"shoppingCart.checkoutButtonCheckoutNow\"\r\n : !fabricatorSettings.leadCaptureOnQuote // leadCaptureOnQuote is OFF\r\n ? \"shoppingCart.checkoutButtonBuyNow\"\r\n : !fabricatorSettings.twoFA // leadCaptureOnQuote is ON\r\n ? this.props.isPhoneNumberValidated || document.kvConfig.isBackend\r\n ? \"shoppingCart.checkoutButtonBuyNow\"\r\n : \"shoppingCart.checkoutButtonUnlockPrice\"\r\n : this.props.userIsLoggedIn || document.kvConfig.isBackend\r\n ? \"shoppingCart.checkoutButtonBuyNow\"\r\n : \"shoppingCart.checkoutButtonUnlockPrice\"\r\n } else if (fabricatorSettings.leadCaptureOnQuote) {\r\n intlText = \"shoppingCart.checkoutButtonEmailQuote\";\r\n onClick = this.handleSaveClick;\r\n } else {\r\n intlText = \"shoppingCart.checkoutButtonStartOver\";\r\n onClick = this.handleStartOverClick;\r\n }\r\n if (this.props.fabricatorData.isLakesideSurfaces) {\r\n intlText = \"buttons.submit\"\r\n }\r\n return {\r\n intlText,\r\n onClick,\r\n }\r\n }\r\n return null\r\n };\r\n\r\n handleCheckOut = async (assignButtonsToShow) => {\r\n\r\n if (document.kvConfig.isBackend && this.props.toggleShowAssignQuotePopup && !this.props.editToken) {\r\n this.props.toggleShowAssignQuotePopup(true, assignButtonsToShow); // assignButtonsToShow should be \"checkout\" and come only from the button group\r\n return;\r\n }\r\n\r\n const fabricatorSettings = this.props.fabricatorData.settings;\r\n Analytics.sendClickEvent(\"checkout-buy-now-button\");\r\n if (!UserLoginButton.handleLoginClick({...this.props, checkout: true}))\r\n return ;\r\n\r\n loaderEnable(\"loader.savingQuoteText\");\r\n\r\n saveQuote({\r\n submit: true,\r\n showContractSignOnError: true\r\n })\r\n .then((response) => {\r\n if (response) {\r\n /*let responseDataBase = response;\r\n if (response.data) {\r\n responseDataBase = response.data;\r\n }\r\n\r\n const responseData = typeof responseDataBase === 'object' ? responseDataBase : JSON.parse(responseDataBase);\r\n console.log('saveQuote response:', responseData);*/\r\n loaderDisable();\r\n }\r\n showQuoteSavedNotification();\r\n showCheckoutLayout(fabricatorSettings);\r\n }).catch((error) => {\r\n console.log('saveQuote error:', error);\r\n loaderDisable();\r\n })\r\n };\r\n\r\n}\r\n","import {getSelectedContracts} from \"./contractsFunctions\";\r\n\r\nexport const getFirstUnfilledCustomField = (\r\n contractsValues,\r\n contractsList,\r\n fabricatorData,\r\n receiptSignature = \"\",\r\n contractsContext\r\n) => {\r\n // need to find first un-filled custom field and change the document page to it\r\n if (fabricatorData && fabricatorData.receiptSettings && fabricatorData.receiptSettings.signIsRequired\r\n && contractsContext.showReceiptInContract && contractsContext.receiptPages && !receiptSignature) {\r\n return { page: contractsContext.receiptPages, fieldIndex: 0 }\r\n }\r\n let customFieldInfo = { page: -1, fieldIndex: -1 };\r\n const selectedContracts = getSelectedContracts(contractsList);\r\n for (const contract of selectedContracts) {\r\n let {fields, pagesFrom} = contract;\r\n if (!contractsValues[contract.id]) {\r\n contractsValues[contract.id] = {};\r\n }\r\n const fieldsNeeded = fields.filter(field => {\r\n return field.isEditable && field.isRequired && field.coords && field.coords.length && !field.isCheckBox // why checkboxes are not required? old support\r\n })\r\n for (let i = 0; i <= contract.pagesCount; i++) {\r\n if (customFieldInfo.page === -1) {\r\n fieldsNeeded.forEach(field => {\r\n if (customFieldInfo.page === -1) {\r\n const sortedFields = field.coords.sort((a, b) => {\r\n // return (a.fieldIndexOnPage > b.fieldIndexOnPage) ? 1 : -1 // no we need to sort by top because this is incorrect\r\n const top1 = a.pageRect.height - a.rectangle.ury;\r\n const top2 = b.pageRect.height - b.rectangle.ury;\r\n return top1 > top2 ? 1 : -1\r\n });\r\n sortedFields.forEach(coord => {\r\n if (customFieldInfo.page === -1 && (i === coord.page)\r\n && (!contractsValues[contract.id][coord.page]\r\n || !contractsValues[contract.id][coord.page][coord.fieldIndexOnPage]\r\n || !contractsValues[contract.id][coord.page][coord.fieldIndexOnPage].value)) {\r\n customFieldInfo = { page: pagesFrom + coord.page - 1, fieldIndex: coord.fieldIndexOnPage };\r\n }\r\n })\r\n }\r\n })\r\n }\r\n }\r\n }\r\n return customFieldInfo;\r\n}\r\n\r\nexport const getFieldValue = (pageIndex, fieldIndex, activeContract, contractsValues) => {\r\n if (contractsValues[activeContract.id]\r\n && contractsValues[activeContract.id][pageIndex]\r\n && contractsValues[activeContract.id][pageIndex][fieldIndex]) {\r\n return contractsValues[activeContract.id][pageIndex][fieldIndex].value\r\n }\r\n return \"\"\r\n};\r\n\r\nexport const getFieldCoords = (contractFields, selectedFieldIndex) => {\r\n let fieldsCoords = [];\r\n contractFields.forEach(field => {\r\n if (!field.isEditable) {\r\n return;\r\n }\r\n field.coords.forEach((coord) => {\r\n const { fieldIndexOnPage, isRequired } = coord;\r\n if (field.isCustom) {\r\n const isSelected = fieldIndexOnPage === selectedFieldIndex;\r\n if (!isSelected && isRequired) {\r\n fieldsCoords.push({ coords: fieldCoords, idx: fieldIndexOnPage });\r\n }\r\n }\r\n })\r\n })\r\n return fieldsCoords\r\n}\r\n\r\nexport const getAlreadyFilledSignatureField = (fieldName, contractsValues, contractsList) => {\r\n let signatureValue = \"\";\r\n const selectedContracts = getSelectedContracts(contractsList);\r\n const withoutRequiredSignatureName = getFieldNameWithoutRequired(fieldName);\r\n for (const contract of selectedContracts) {\r\n let {fields} = contract;\r\n fields.forEach(field => {\r\n if (signatureValue || !field.isEditable || !field.isSignature) {\r\n return;\r\n }\r\n field.coords.forEach((coord) => {\r\n if (signatureValue || !coord.fieldName\r\n || (getFieldNameWithoutRequired(coord.fieldName) !== withoutRequiredSignatureName)) {\r\n return\r\n }\r\n signatureValue = getFieldValue(coord.page, coord.fieldIndexOnPage, contract, contractsValues);\r\n })\r\n })\r\n }\r\n return signatureValue;\r\n}\r\n\r\nexport const getFieldNameWithoutRequired = (fieldName = \"\") => {\r\n if (!fieldName || typeof fieldName !== \"string\") {\r\n return \"\"\r\n }\r\n return fieldName.replace(\"@\", \"\")\r\n}\r\n","import React from \"react\";\r\nimport {injectIntl} from \"react-intl\";\r\nimport PropTypes from \"prop-types\";\r\nimport {Grid} from \"react-virtualized\";\r\n\r\nimport LookListFeature from \"../lookListFeature/lookListFeature\";\r\nimport LookWizardSectionListFeature from \"../lookWizard/lookWizardSectionListFeature\";\r\nimport {wizardGroupInterface} from \"../../../../../interfaces/wizardItemInterface\";\r\nimport LookVirtualizedListLoadingItem from \"./lookVirtualizedListLoadingItem\";\r\n// import LoadingSpinner from \"../../ui/loadingSpinner\";\r\n\r\nexport const getLookRowHeight = (lookViewType) => {\r\n return lookViewType === 1\r\n ? 104\r\n : lookViewType === 4\r\n ? 128\r\n : lookViewType === 2\r\n ? 171\r\n : 340\r\n}\r\n\r\nconst LookVirtualizedList = (props) => {\r\n\r\n const {renderList, contentHeight, lookViewType, isMobile, updateLookCartItem, isWizard, wizardGroup, onScrollHandler,\r\n imageCanvas, maxClickCountReached, loadingCount} = props;\r\n\r\n if (!contentHeight || isNaN(contentHeight)) {\r\n return null\r\n }\r\n\r\n const width = isWizard ? 312 : 320;\r\n const columnWidth = lookViewType === 2\r\n ? width / 2\r\n : lookViewType === 4 ? width / 3 : width;\r\n const columnCount = lookViewType === 2\r\n ? 2\r\n : lookViewType === 4 ? 3 : 1;\r\n const rowCount = Math.ceil((loadingCount || renderList.length) / columnCount);\r\n\r\n const listSettings = {\r\n width,\r\n columnCount,\r\n columnWidth,\r\n rowCount,\r\n height: isMobile ? contentHeight - 16 : contentHeight - 116, // 52 header + 16 padding from bottom\r\n rowHeight: getLookRowHeight(lookViewType),\r\n overscanRowCount: 2,\r\n showScrollingPlaceholder: false,\r\n useDynamicRowHeight: false,\r\n }\r\n\r\n const cellRenderer = ({columnIndex, key, rowIndex, style}) => {\r\n if (loadingCount) {\r\n return \r\n }\r\n const navItem = renderList[(listSettings.columnCount * rowIndex) + columnIndex];\r\n if (!navItem) {\r\n return null\r\n }\r\n if (isWizard) {\r\n return \r\n }\r\n return \r\n }\r\n\r\n const noRowsRenderer = () =>
    No Features found
    ;\r\n\r\n return (\r\n listSettings.height\r\n ? \" virtualized-grid--with-scroll\"\r\n : \" virtualized-grid--without-scroll\")}\r\n width={listSettings.width}\r\n height={listSettings.height}\r\n overscanRowCount={listSettings.overscanRowCount}\r\n rowCount={listSettings.rowCount}\r\n columnCount={listSettings.columnCount}\r\n columnWidth={listSettings.columnWidth}\r\n rowHeight={listSettings.rowHeight}\r\n onScroll={onScrollHandler}\r\n cellRenderer={cellRenderer}\r\n noRowsRenderer={noRowsRenderer}\r\n />\r\n )\r\n};\r\n\r\nLookVirtualizedList.propTypes = {\r\n imageCanvas: PropTypes.object,\r\n maxClickCountReached: PropTypes.func,\r\n updateLookCartItem: PropTypes.func,\r\n renderList: PropTypes.array,\r\n contentHeight: PropTypes.number,\r\n lookViewType: PropTypes.number.isRequired,\r\n isMobile: PropTypes.bool,\r\n onScrollHandler: PropTypes.func,\r\n isWizard: PropTypes.bool,\r\n wizardGroup: PropTypes.shape(wizardGroupInterface),\r\n loadingCount: PropTypes.number,\r\n}\r\n\r\nexport default injectIntl(LookVirtualizedList)\r\n","import React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport TextField from \"@mui/material/TextField\";\r\nimport IconButton from \"@mui/material/IconButton\";\r\nimport RemoveIcon from \"@mui/icons-material/Remove\";\r\nimport AddIcon from '@mui/icons-material/Add';\r\n\r\nimport {setGroheActiveFeatureQuantity} from \"../../../../../actions/groheFunctions\";\r\nimport {IS_PRODUCT_JOURNEY} from \"../../../../../config\";\r\nimport Analytics, {PRODUCT_JOURNEY_ANALYTIC_EVENTS} from \"../../../../../analytics\";\r\nimport {featureInterface} from \"../../../../../interfaces/featureInterface\";\r\nimport {getFeatureUnit} from \"../../../../../misc/helpers\";\r\nimport {pricingIsLocked} from \"../../../lookNavigation/lookNavigationFunctions\";\r\n\r\nconst GroheFeatureQuantity = (props) => {\r\n const {intl, isMobile, disabled, groheActiveFeatureQuantity, setGroheActiveFeatureQuantity, lookActiveFeature, feature,\r\n hideTitle, isWizard, fabricatorData} = props;\r\n const MAX = 99999;\r\n const MIN = isWizard ? 0 : 1;\r\n\r\n const allowDecimals = isWizard;\r\n\r\n const updateQuantity = (quan) => {\r\n setGroheActiveFeatureQuantity(quan);\r\n };\r\n\r\n const handleInputChange = (e, fromButton = \"\") => {\r\n let value = \"\" + e.target.value;\r\n\r\n if (value.includes(\".\")) {\r\n if (!allowDecimals) {\r\n return false\r\n }\r\n if (value.split(\".\")[1].length > 3) {\r\n value = +value.substring(0, value.length - 1); //round to 3 decimals\r\n }\r\n }\r\n\r\n const featureLabel = Analytics.getSkuForAnalytics(feature || lookActiveFeature);\r\n const analyticsAdjust = fromButton ? fromButton + \"-\" + value : \"input-\" + value;\r\n Analytics.sendClickEvent(`${PRODUCT_JOURNEY_ANALYTIC_EVENTS.productFeatureQuantityChange + featureLabel}-${analyticsAdjust}`);\r\n\r\n value = +value;\r\n\r\n if (value <= MIN) {\r\n value = MIN;\r\n } else if (value > MAX) {\r\n value = MAX;\r\n }\r\n\r\n updateQuantity(value);\r\n };\r\n\r\n const handleOnKeyDown = (event) => {\r\n if (event.key==='.' && !allowDecimals) {\r\n event.preventDefault();\r\n return false\r\n }\r\n };\r\n\r\n const {isLixil} = pricingIsLocked();\r\n\r\n return (\r\n
    \r\n
    \r\n {hideTitle ? null : (\r\n
    \r\n {isLixil\r\n ? \r\n : getFeatureUnit(feature || lookActiveFeature, intl, fabricatorData, groheActiveFeatureQuantity)}\r\n
    \r\n )}\r\n
    \r\n {\r\n handleInputChange({target: {value: groheActiveFeatureQuantity - 1}}, \"minus\")\r\n }}\r\n disabled={disabled}\r\n className={\"look-icon grohe-look__icon--small\"\r\n + (isMobile || !IS_PRODUCT_JOURNEY ? \" look-icon--tiny look-icon--semi\" : \" look-icon--small\")}>\r\n \r\n \r\n \r\n {\r\n handleInputChange({target: {value: groheActiveFeatureQuantity + 1}}, \"plus\")\r\n }}\r\n disabled={disabled}\r\n className={\"look-icon grohe-look__icon--small\"\r\n + (isMobile || !IS_PRODUCT_JOURNEY ? \" look-icon--tiny look-icon--semi\" : \" look-icon--small\")}>\r\n \r\n \r\n
    \r\n
    \r\n
    \r\n )\r\n};\r\n\r\nGroheFeatureQuantity.propTypes = {\r\n disabled: PropTypes.bool,\r\n hideTitle: PropTypes.bool,\r\n isWizard: PropTypes.bool,\r\n feature: PropTypes.shape(featureInterface)\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const {isMobile} = store.serverState;\r\n const {groheActiveFeatureQuantity} = store.groheState;\r\n const {lookActiveFeature} = store.lookState;\r\n const fabricatorData = store.fabricatorState;\r\n\r\n return {\r\n isMobile,\r\n groheActiveFeatureQuantity,\r\n lookActiveFeature,\r\n fabricatorData,\r\n }\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setGroheActiveFeatureQuantity\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(GroheFeatureQuantity)\r\n)\r\n","import React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport Button from \"@mui/material/Button\";\r\nimport InfoIcon from \"@mui/icons-material/Info\";\r\n\r\nimport {setLookActiveCategory, setLookMoreInfoOpened, setLookOverlayOpened} from \"../../../../../actions/lookFunctions\";\r\nimport {LOOK_FEATURE_CONTENT, LOOK_OVERLAYS} from \"../../../core/constants\";\r\nimport Analytics, {LOOK_JOURNEY_ANALYTIC_EVENTS, PRODUCT_JOURNEY_ANALYTIC_EVENTS} from \"../../../../../analytics\";\r\nimport {IS_PRODUCT_JOURNEY} from \"../../../../../config\";\r\nimport {getAvailableFeatureContent} from \"../../../lookNavigation/lookFunctions2\";\r\n\r\nconst GroheFeatureMoreInfoButton = (props) => {\r\n\r\n const {featureIsLocked, setLookMoreInfoOpened, moreInfoOpened, moreInfoContent, lookActiveCategory, lookActiveFeature,\r\n setLookOverlayOpened} = props;\r\n\r\n const moreInfoClick = () => {\r\n if (IS_PRODUCT_JOURNEY) {\r\n Analytics.sendClickEvent(moreInfoOpened\r\n ? PRODUCT_JOURNEY_ANALYTIC_EVENTS.productFeatureMoreInfoClose\r\n : PRODUCT_JOURNEY_ANALYTIC_EVENTS.productFeatureMoreInfoOpen\r\n );\r\n } else {\r\n Analytics.sendClickEvent(moreInfoOpened\r\n ? LOOK_JOURNEY_ANALYTIC_EVENTS.lookFeatureMoreInfoClose\r\n : LOOK_JOURNEY_ANALYTIC_EVENTS.lookFeatureMoreInfoOpen\r\n );\r\n }\r\n if (featureIsLocked) {\r\n setLookOverlayOpened(LOOK_OVERLAYS.leadCapture);\r\n return false\r\n }\r\n const moreInfoType = moreInfoOpened && (moreInfoContent === LOOK_FEATURE_CONTENT.info)\r\n ? \"\"\r\n : lookActiveCategory && !IS_PRODUCT_JOURNEY ? \"select\" : \"main\";\r\n //setLookActiveCategory(\"\");\r\n setLookMoreInfoOpened(moreInfoType, LOOK_FEATURE_CONTENT.info);\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n )\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const {moreInfoOpened, moreInfoContent} = store.lookState;\r\n const {lookActiveCategory, lookActiveFeature} = store.lookState;\r\n return {\r\n moreInfoOpened,\r\n moreInfoContent,\r\n lookActiveCategory,\r\n lookActiveFeature,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setLookActiveCategory,\r\n setLookMoreInfoOpened,\r\n setLookOverlayOpened,\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(GroheFeatureMoreInfoButton)\r\n","import React from \"react\";\r\nimport {FormattedMessage} from \"react-intl\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport Button from \"@mui/material/Button\";\r\nimport ChevronLeftIcon from \"@mui/icons-material/ChevronLeft\";\r\n\r\nconst GroheCartBackButton = (props) => {\r\n const {backButtonClick} = props;\r\n return (\r\n \r\n )\r\n};\r\n\r\nGroheCartBackButton.propTypes = {\r\n backButtonClick: PropTypes.func.isRequired\r\n}\r\n\r\nexport default GroheCartBackButton\r\n","import React, {Fragment} from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport invert from \"lodash/invert\";\r\n\r\nimport {loaderEnable} from \"../ui/loaderView\";\r\nimport {\r\n toggleUserPopup, setCanvasId, setLayoutDataParts, setDefaultSelectionGroup, loadFilters, setCameFromPage,\r\n toggleBathroomVisualizerOpen, toggleSelectionFeatureInfo, changeMessageBoxState, addVisualizersLoaded\r\n} from \"../../actions/actionFunctions\";\r\n// import './assets/css/styles.css';\r\nimport {\r\n getBathroomVisualizerData,\r\n getBvGroups,\r\n getQtCategories,\r\n getNavigationButtons\r\n} from \"../../api/server-api\";\r\nimport ImageCanvasCommon from \"../visComponents/imageCanvasCommon\";\r\nimport {Layout} from \"./core/layout\";\r\nimport DesktopNavigation from \"./navigation/desktopNavigation\";\r\nimport MobileNavigation from \"./navigation/mobileNavigation\";\r\n// import MobileRotateButton from './common/mobileRotateButton';\r\nimport MainButtons from \"../common/mainButtons\";\r\nimport DemoPoints from \"../common/demoPoints/demoPoints\";\r\nimport MessageBox from \"../popups/messageBox\";\r\n\r\nimport Visualizer from \"../visComponents/visualizer\";\r\nimport VisualizerTutorial from \"../tutorials/visualizerTutorial\";\r\nimport {LayoutType} from \"./core/constants\";\r\nimport {showVisualizerTutorial} from \"../../actions/tutorialFunctions\";\r\nimport Copyright from \"../ui/copyright\";\r\nimport {IS_QKB_UI} from \"../../config\";\r\n\r\nexport const layout = new Layout();\r\n\r\nclass BathroomVisualizer extends Visualizer {\r\n\r\n static displayName = 'BathRoom visualizer';\r\n\r\n constructor(props) {\r\n super(props);\r\n this.layout = layout;\r\n }\r\n\r\n componentDidMount() {\r\n if (this.props.visualizersLoaded.includes(this.layout.visualizerType)) {\r\n this.setSubscribers();\r\n return false\r\n }\r\n loaderEnable();\r\n Promise.all([\r\n getBathroomVisualizerData(),\r\n getQtCategories(this.layout.getCurrentLayoutAbbreviation())\r\n ]).then(baseResponse => {\r\n Promise.all([\r\n Promise.resolve(baseResponse[0]),\r\n getBvGroups(),\r\n Promise.resolve(baseResponse[1])\r\n ])\r\n .then((allResponse) => {\r\n const mainResponse = allResponse[0];\r\n const bvGroupsResponse = allResponse[1].data;\r\n const qtCategories = allResponse[2];\r\n this.layout.loadNewFeatures(mainResponse); // 1) set default (placeholders)\r\n this.layout.setGroupsItemsCount(bvGroupsResponse); // should be loaded before & after all features are received\r\n return this.setVisualizerInfo(mainResponse, bvGroupsResponse, qtCategories, invert(LayoutType));\r\n })\r\n .then(this.checkShareUrl)\r\n .then(this.onBvLoad)\r\n .then(this.finishLoading);\r\n });\r\n\r\n this.setSubscribers();\r\n getNavigationButtons();\r\n }\r\n\r\n render() {\r\n\r\n if (!IS_QKB_UI) {\r\n return null\r\n }\r\n\r\n const showPlaceHolders = document.bvConfig ? document.bvConfig.showPlaceholders : false;\r\n const fabricatorSettings = this.props.fabricatorSettings;\r\n const layers = this.layout.getLayers(showPlaceHolders);\r\n const layoutType = this.layout.getCurrentLayoutName();\r\n const isMobile = this.props.windowWidth < 991;\r\n const showOtherLayouts =\r\n (document.kvConfig.visualizerType === \"Bathroom\" || document.kvConfig.visualizerType === \"BV\")\r\n ? fabricatorSettings && (fabricatorSettings.showSmallDesignForClients\r\n || (fabricatorSettings.showSmallDesignFromDashboard && document.kvConfig.isBackend))\r\n : true;\r\n const showTutorial = this.checkToShowTutorial() && showOtherLayouts;\r\n\r\n return (\r\n
    \r\n
    \r\n {this.props.bvOpened || this.props.bvVisited ? (\r\n \r\n this.imageCanvas = node}\r\n layoutType={layoutType}\r\n layout={this.layout}\r\n width={this.props.canvasDimensions.width}\r\n height={this.props.canvasDimensions.height}\r\n useMouseHovering={this.props.useMouseHovering}\r\n useTouchZoom={this.props.useTouchZoom}\r\n />\r\n \r\n \r\n ) : null}\r\n \r\n {!this.state.demoPointClicked && this.props.canvasId ? (\r\n \r\n ) : null}\r\n
    \r\n {(this.layout.initialized && this.props.bvVisited) ? ( // keep navigation opened if someone got to QT and back\r\n isMobile ? (\r\n \r\n ) : (\r\n this.navBar = node}\r\n refreshCB={this.handleRefresh}\r\n setHoveredLayer={this.setHoveredLayer}\r\n canvasId={this.state.canvasId}\r\n renderGreenLayerByZindex={this.renderGreenLayerByZindex}\r\n toggleUserPopup={this.props.toggleUserPopup}\r\n changeMessageBoxState={this.changeMessageBoxState}\r\n setActiveFeature={this.setActiveFeature}\r\n activeFeature={this.state.activeFeature}\r\n fabricatorSettings={fabricatorSettings}\r\n setDemoPointClicked={this.setDemoPointClicked}\r\n />\r\n )\r\n ) : null}\r\n {/**/}\r\n {this.props.cookieAccepted ? : null}\r\n {showTutorial ? : null}\r\n
    \r\n )\r\n }\r\n}\r\nconst mapStateToProps = (store) => {\r\n const {cookieAccepted, windowWidth, visualizersLoaded} = store.serverState;\r\n const {bvOpened, bvVisited, canvasId, showRestorePopup, canvasDimensions, canvasCount} = store.bathroomVisualizerState;\r\n const {mobileNav, desktopNavigationOpened, activeNavigationParentName, activeNavigationChildName} = store.navigationState;\r\n const {isPhoneNumberValidated, userIsLoggedIn} = store.userState;\r\n const {visualizerTutorialIsOpened, visualizerTutorialFinished} = store.tutorialState;\r\n const {initialFlowRoomLayout, initialFlowRoom, initialFlowStep} = store.initialFlowState;\r\n return {\r\n bvOpened,\r\n bvVisited,\r\n mobileNav,\r\n isPhoneNumberValidated,\r\n userIsLoggedIn,\r\n windowWidth,\r\n canvasId,\r\n fabricatorSettings: store.fabricatorState.settings,\r\n desktopNavigationOpened,\r\n activeNavigationParentName,\r\n activeNavigationChildName,\r\n showRestorePopup,\r\n visualizerTutorialIsOpened,\r\n visualizerTutorialFinished,\r\n initialFlowRoomLayout,\r\n initialFlowRoom,\r\n initialFlowStep,\r\n cookieAccepted,\r\n canvasDimensions,\r\n visualizersLoaded,\r\n canvasCount,\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, {\r\n setCameFromPage,\r\n toggleBathroomVisualizerOpen,\r\n setDefaultSelectionGroup,\r\n setLayoutDataParts,\r\n toggleUserPopup,\r\n setCanvasId,\r\n loadFilters,\r\n toggleSelectionFeatureInfo,\r\n changeMessageBoxState,\r\n addVisualizersLoaded,\r\n showVisualizerTutorial\r\n})(BathroomVisualizer);\r\n","import React from \"react\";\r\nimport {Page, Text, Document} from '@react-pdf/renderer';\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport getPrintColors from \"./printDocumentStyles\";\r\nimport PrintDocumentHeader from \"./printDocumentHeader\";\r\nimport PrintDocumentInfo from \"./printDocumentInfo\";\r\nimport PrintDocumentBody from \"./printDocumentBody\";\r\nimport PrintDocumentTotal from \"./printDocumentTotal\";\r\nimport PrintDocumentSignature from \"./printDocumentSignature\";\r\nimport PrintDocumentDiscountsList from \"./printDocumentDiscountsList\";\r\nimport {PrintDocumentContext} from \"./printDocumentContext\";\r\nimport {TRANSLATES} from \"../../../translatesProvider\";\r\nimport PrintDocumentDisclaimer from \"./printDocumentDisclaimer\";\r\nimport PrintDocumentAsCentralText from \"./printDocumentAsCentralText\";\r\n\r\n// import PropTypes from \"prop-types\";\r\n// import {FormattedMessage} from \"react-intl\";\r\n\r\nconst PrintDocument = (props) => {\r\n const {fabricatorData, userInfo, quotes, cartItems, priceWorksheetState, jobId, assignQuotePopupCustomer,\r\n employeeSelected, locale, filterGroups, activeTheme, printLogo, wizardState, sqftSlabState, cartItemsThumbnails,\r\n printState, onRender, isContractSign} = props;\r\n\r\n const styles = getPrintColors(activeTheme);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n {fabricatorData.isAmericanStandard ? : null}\r\n \r\n {priceWorksheetState.discountSections.length ? (\r\n \r\n ) : null}\r\n \r\n \r\n \r\n (\r\n `${pageNumber} / ${totalPages}`\r\n )} fixed />\r\n \r\n \r\n \r\n )\r\n};\r\n\r\nPrintDocument.propTypes = {\r\n quotes: PropTypes.array.isRequired,\r\n cartItems: PropTypes.array.isRequired,\r\n priceWorksheetState: PropTypes.object.isRequired,\r\n userInfo: PropTypes.object.isRequired,\r\n fabricatorData: PropTypes.object.isRequired,\r\n jobId: PropTypes.number,\r\n assignQuotePopupCustomer: PropTypes.object,\r\n employeeSelected: PropTypes.object,\r\n locale: PropTypes.string.isRequired,\r\n activeTheme: PropTypes.string,\r\n printLogo: PropTypes.string,\r\n wizardState: PropTypes.object.isRequired,\r\n isContractSign: PropTypes.bool,\r\n printState: PropTypes.object,\r\n};\r\n\r\nexport default PrintDocument\r\n","import React from \"react\";\r\nimport UiIcon from \"../../ui/icons/uiIcon\";\r\n\r\nexport const showWizardStepDoneCheckMark = (wizardSelectedValue, featureGroup, cartItems, activeQuoteIndex, stepGroups) => {\r\n return stepGroups.some(stepGroup => {\r\n return (wizardSelectedValue && wizardSelectedValue.wizardGroup && (stepGroup.id === wizardSelectedValue.wizardGroup.id))\r\n || (featureGroup && cartItems.some(cartItem => {\r\n return stepGroup.id === cartItem.fromWizardGroupId\r\n && (cartItem.partId === featureGroup.partId)\r\n && (cartItem.currentQuote === activeQuoteIndex)\r\n && !cartItem.cartFeature.dbFeature.autoAddToCart\r\n }))\r\n })\r\n}\r\n\r\nconst MaterialsWizardDoneCheckMark = () => {\r\n return (\r\n
    \r\n \r\n
    \r\n )\r\n};\r\nexport default MaterialsWizardDoneCheckMark\r\n","import _ from 'lodash';\r\n\r\nimport {updateManualCalculateRows} from \"../../../actions/sqftManualCalculationFunctions\";\r\nimport {MANUAL_CALCULATION_ROW_TYPES} from \"../constants\";\r\nimport store from \"../../../store\";\r\nimport {DEFAULT_MANUAL_CALC_ROW} from \"../../../reducers/sqftManualCalculationReducer\";\r\nimport {getEdgeFeatures} from \"./shapeHelper\";\r\nimport workspace from \"../components/canvas/core/workspace\";\r\n\r\nexport const manualCalculateImport = (data) => {\r\n console.log(\"import manualcalc data\", data);\r\n let manualCalculationRows = prepareData(data);\r\n store.dispatch(updateManualCalculateRows(manualCalculationRows));\r\n}\r\n\r\nconst prepareData = (data) => {\r\n return {\r\n [MANUAL_CALCULATION_ROW_TYPES.countertopRows] : prepareCountertopRows(data.countertops),\r\n [MANUAL_CALCULATION_ROW_TYPES.backsplashRows] : prepareBacksplashRows(data.backsplashes),\r\n [MANUAL_CALCULATION_ROW_TYPES.edgeRows] : prepareEdgeRows(data.edges),\r\n }\r\n}\r\n\r\nconst prepareCountertopRows = (dataCountertops) => {\r\n let preparedData = [];\r\n dataCountertops.forEach((dataCountertop, index) => {\r\n let row = _.clone(DEFAULT_MANUAL_CALC_ROW);\r\n row.id = dataCountertop.id ? dataCountertop.id : index;\r\n row.length = dataCountertop.inputLength;\r\n row.width = dataCountertop.inputWidth;\r\n preparedData.push(row);\r\n })\r\n\r\n return preparedData;\r\n}\r\n\r\nconst prepareBacksplashRows = (dataBacksplashes) => {\r\n let preparedData = [];\r\n dataBacksplashes.forEach((dataBacksplash, index) => {\r\n let row = _.clone(DEFAULT_MANUAL_CALC_ROW);\r\n row.id = dataBacksplash.id ? dataBacksplash.id : index;\r\n row.length = dataBacksplash.inputLength;\r\n row.height = dataBacksplash.inputHeight;\r\n preparedData.push(row);\r\n })\r\n\r\n return preparedData;\r\n}\r\n\r\nconst prepareEdgeRows = (dataEdges) => {\r\n let preparedData = [];\r\n dataEdges.forEach((dataEdge, index) => {\r\n const navItems = getEdgeFeatures();\r\n const navItem = navItems.find(edge => edge.part.dbFeature.id === dataEdge.featureId);\r\n let row = _.clone(DEFAULT_MANUAL_CALC_ROW);\r\n row.id = dataEdge.id ? dataEdge.id : index;\r\n row.length = dataEdge.inputLength;\r\n row.height = dataEdge.inputHeight;\r\n row.selectedFeature = navItem.part;\r\n preparedData.push(row);\r\n })\r\n\r\n return preparedData;\r\n}\r\n\r\nexport const clearManualCalcData = () => {\r\n for (const manualCalculationRowType in MANUAL_CALCULATION_ROW_TYPES) {\r\n store.dispatch(updateManualCalculateRows({[manualCalculationRowType]: []}));\r\n }\r\n}\r\n\r\nexport const getGroupedShapesByColor = () => {\r\n const shapes = workspace.getShapes();\r\n return shapes.flatMap(shp => {\r\n if (shp.getColorSet) {\r\n const colorSet = shp.getColorSet();\r\n return colorSet ? colorSet : [];\r\n }\r\n return [];\r\n })\r\n}\r\n\r\nexport const getFeatureGlb = (feature) => {\r\n const threeDSrc = feature.dbFeature.thirdPartyAR3DUrls.map(src => {\r\n src = src.replace(\"s3.amazonaws.com/qc-lixil-3dfiles\", \"dv84u4f1bblk2.cloudfront.net\");\r\n return src\r\n })\r\n return threeDSrc.find(url => url.includes(\".glb\"));\r\n}\r\n","import store from \"./../../../store\";\r\nimport {onMeasureUnitChange} from \"./sqftMeasureUnitsHelper\";\r\nimport sqftConfig from \"../components/canvas/store/sqftConfig\";\r\nimport {setSqftMeasureUnit} from \"../../../actions/sqftFunctions\";\r\n\r\nexport const setMeasureUnit = (value) => {\r\n sqftConfig.measureUnit = value\r\n store.dispatch(setSqftMeasureUnit(value));\r\n onMeasureUnitChange();\r\n}\r\n","import sqftShapeManager from \"../store/sqftShapeManager\";\r\nimport workspace from \"./workspace\";\r\nimport config from \"../store/sqftConfig\";\r\nimport $ from \"jquery\";\r\nimport sqftShape from \"./shapes/sqftShape\";\r\nimport {getMidPoint} from \"../../../helpers/sqftHelper\";\r\nimport slabWorkspace from \"./slab/slabWorkspace\";\r\n\r\nconst workspaceZoom = function () {\r\n this.zoomToFeature = (sqftFeature) => {\r\n let shape = sqftShapeManager.getShapeById(sqftFeature.sqftId);\r\n if (shape && shape.part === 'line') {\r\n const line = workspace.getLineById(shape.attachedToId);\r\n this.zoomToLine(line);\r\n\r\n return;\r\n }\r\n\r\n if (!(shape instanceof(sqftShape))) {\r\n return\r\n }\r\n\r\n this.zoomToShape(shape);\r\n }\r\n\r\n this.zoomToLine = (line) => {\r\n let shape = line.getParent();\r\n let shapePos = shape.getPosition();\r\n const scale = config.scale;\r\n const canvas = workspace.getCanvas();\r\n const sqftPoup = $(\".sqft-popupv2\");\r\n const popUpWidth = sqftPoup[0] ? sqftPoup[0].offsetWidth : 0;\r\n\r\n const midPoint = getMidPoint(line.from, line.to);\r\n\r\n let newWorkspacePos = {\r\n x: (shapePos.x + midPoint.x) * scale - (canvas.width - popUpWidth) / 2,\r\n y: (shapePos.y + midPoint.y) * scale - canvas.height / 2,\r\n }\r\n\r\n line.blink.setHighlighting(true);\r\n this.zoomTo(newWorkspacePos);\r\n }\r\n\r\n this.zoomToShape = (shape, isHalfScreen = false) => {\r\n let shapePos = shape.getPosition();\r\n let shapeMinMax = sqftShapeManager.getMinMax(shape.getLines());\r\n const scale = config.scale;\r\n const canvas = workspace.getCanvas();\r\n const sqftPoup = $(\".sqft-popupv2\");\r\n const popUpWidth = sqftPoup[0] ? sqftPoup[0].offsetWidth : 0;\r\n\r\n let newWorkspacePos = {\r\n x: shapePos.x * scale - (canvas.width - popUpWidth) / 2 + shapeMinMax.width / 2 * scale,\r\n y: shapePos.y * scale - canvas.height / 2 + shapeMinMax.height / 2 * scale,\r\n }\r\n if (isHalfScreen) {\r\n newWorkspacePos.x = newWorkspacePos.x + canvas.width / 4;\r\n }\r\n\r\n this.zoomTo(newWorkspacePos);\r\n shape.shapeRender.blink.setHighlighting(true);\r\n }\r\n\r\n this.zoomToSlabShape = (shape, isHalfScreen = false) => {\r\n let shapePos = shape.getPosition();\r\n let workspacePos = workspace.getPosition();\r\n let shapeMinMax = sqftShapeManager.getMinMax(shape.getLines());\r\n const scale = config.scale;\r\n const canvas = workspace.getCanvas();\r\n const sqftPoup = $(\".sqft-popupv2\");\r\n const popUpWidth = sqftPoup[0] ? sqftPoup[0].offsetWidth : 0;\r\n\r\n let newWorkspacePos = {\r\n x: shapePos.x * scale - (canvas.width - popUpWidth) / 2 + shapeMinMax.width / 2 * scale - workspacePos.x,\r\n y: shapePos.y * scale - canvas.height / 2 + shapeMinMax.height / 2 * scale - workspacePos.y,\r\n }\r\n if (isHalfScreen) {\r\n newWorkspacePos.x = newWorkspacePos.x + canvas.width / 4;\r\n }\r\n\r\n this.zoomToInSlab(newWorkspacePos);\r\n }\r\n\r\n this.zoomTo = (newWorkspacePos) => {\r\n let workspacePos = workspace.getPosition();\r\n let isXIncrementUp = newWorkspacePos.x >= workspacePos.x;\r\n let isYIncrementUp = newWorkspacePos.y >= workspacePos.y;\r\n\r\n let updateWorkspacePos = () => {\r\n if (Math.ceil(workspacePos.x) === Math.ceil(newWorkspacePos.x)\r\n && Math.ceil( workspacePos.y) === Math.ceil(newWorkspacePos.y)\r\n ) {\r\n clearInterval(refreshIntervalId);\r\n }\r\n\r\n let incrementX = Math.abs((Math.abs(newWorkspacePos.x) + Math.abs(workspacePos.x)) / newWorkspacePos.x * config.zoomSpeed);\r\n let incrementY = Math.abs((Math.abs(newWorkspacePos.y) + Math.abs(workspacePos.y)) / newWorkspacePos.y * config.zoomSpeed);\r\n\r\n workspacePos = {\r\n x: isXIncrementUp\r\n ? workspacePos.x >= newWorkspacePos.x ? newWorkspacePos.x : workspacePos.x + incrementX\r\n : workspacePos.x <= newWorkspacePos.x ? newWorkspacePos.x : workspacePos.x - incrementX,\r\n y: isYIncrementUp\r\n ? workspacePos.y >= newWorkspacePos.y ? newWorkspacePos.y : workspacePos.y + incrementY\r\n : workspacePos.y <= newWorkspacePos.y ? newWorkspacePos.y : workspacePos.y - incrementY,\r\n }\r\n\r\n workspace.setPosition(workspacePos);\r\n };\r\n let refreshIntervalId = setInterval(updateWorkspacePos, 1);\r\n }\r\n\r\n this.zoomToInSlab = (newWorkspacePos) => {\r\n let workspacePos = slabWorkspace.getPos();\r\n let isXIncrementUp = newWorkspacePos.x >= workspacePos.x;\r\n let isYIncrementUp = newWorkspacePos.y >= workspacePos.y;\r\n\r\n let updateWorkspacePos = () => {\r\n if (Math.ceil(workspacePos.x) === Math.ceil(newWorkspacePos.x)\r\n && Math.ceil( workspacePos.y) === Math.ceil(newWorkspacePos.y)\r\n ) {\r\n clearInterval(refreshIntervalId);\r\n }\r\n\r\n let incrementX = Math.abs((Math.abs(newWorkspacePos.x) + Math.abs(workspacePos.x)) / newWorkspacePos.x * config.zoomSpeed);\r\n let incrementY = Math.abs((Math.abs(newWorkspacePos.y) + Math.abs(workspacePos.y)) / newWorkspacePos.y * config.zoomSpeed);\r\n\r\n workspacePos = {\r\n x: isXIncrementUp\r\n ? workspacePos.x >= newWorkspacePos.x ? newWorkspacePos.x : workspacePos.x + incrementX\r\n : workspacePos.x <= newWorkspacePos.x ? newWorkspacePos.x : workspacePos.x - incrementX,\r\n y: isYIncrementUp\r\n ? workspacePos.y >= newWorkspacePos.y ? newWorkspacePos.y : workspacePos.y + incrementY\r\n : workspacePos.y <= newWorkspacePos.y ? newWorkspacePos.y : workspacePos.y - incrementY,\r\n }\r\n\r\n slabWorkspace.setPos(workspacePos);\r\n };\r\n let refreshIntervalId = setInterval(updateWorkspacePos, 1);\r\n }\r\n};\r\n\r\nexport default new workspaceZoom\r\n","import eventManager from \"../../store/sqftEventManager\";\r\nimport Config from \"../../store/sqftConfig\";\r\nimport workspace from \"../workspace\";\r\nimport Cursor from \"./cursor\";\r\nimport MiteredOverlay from \"../shapes/overlays/mitered\";\r\nimport {\r\n inchesToMm,\r\n measureDistanceToInches, mm2ToM2,\r\n mmToInches, sqInchesToSqFoot,\r\n} from \"../../../../helpers/sqftHelper\";\r\nimport {iconPlusBlue} from \"../../../../assetsSQFT\";\r\nimport store from \"../../../../../../store\";\r\nimport {updateSQFTCalculations} from \"../../../../../../actions/sqftFunctions\";\r\nimport {\r\n EDGE_LABELS, MITERED_OVERLAY_TYPE,\r\n RESOURCE_ATTACHED_TO_TYPE, RESOURCE_TYPE,\r\n SIDEBAR_BUTTONS_MENU,\r\n SIDEBAR_HIDDEN_BUTTONS,\r\n} from \"../../../../constants\";\r\nimport {setSQFTMenuOpened, setSQFTMenuOpenedLock} from \"../../../../../../actions/sqftMenuFunctions\";\r\nimport {attachResource} from \"./resourseCanas\";\r\nimport {getEdgeFeatures} from \"../../../../helpers/shapeHelper\";\r\nimport {addResource, changeResource, deleteResource} from \"../../../../../../actions/sqftResourceFunctions\";\r\nimport {getUnderlaymentFeature} from \"../../../../helpers/sqftHelperUi\";\r\nimport sqftConfig from \"../../store/sqftConfig\";\r\n\r\nexport default class UnderlaymentController {\r\n cursor;\r\n design = {\r\n imgSrc: iconPlusBlue\r\n };\r\n miteredSections = [];\r\n\r\n createCursor = () => {\r\n this.cursor = new Cursor();\r\n this.cursor.setCursorImage(this.design.imgSrc);\r\n eventManager.setCursor('mitered-select', this, true);\r\n };\r\n\r\n registerEvents = () => {\r\n eventManager.addEvent(\r\n eventManager.events.MOUSE_UP,\r\n this.onMouseUp,\r\n this,\r\n eventManager.priorities.OVERALL\r\n );\r\n };\r\n\r\n onMouseUp = (mousePos) => {\r\n void mousePos;\r\n let hoverShape = workspace.getHoverShape();\r\n\r\n if (hoverShape && hoverShape.getHoverSegment) {\r\n const reduxState = store.getState();\r\n const activeButton = reduxState.sqftMenuState.activeButton;\r\n if (activeButton !== SIDEBAR_HIDDEN_BUTTONS.toolUnderlayment) {\r\n return\r\n }\r\n\r\n let seg = hoverShape.getHoverSegment();\r\n if (seg && seg.isWithUnderlayment() && reduxState.sqftMenuState.activeButton === SIDEBAR_BUTTONS_MENU.delete) {\r\n seg.deleteMitered();\r\n } else if(seg && seg.isWithUnderlayment()) {\r\n void 0;\r\n } else if (seg && !seg.isWithUnderlayment() && !seg.isWithBumpout() && this.cursor.cursorImage) {\r\n attachResource(seg, null, RESOURCE_ATTACHED_TO_TYPE.underlayment, null, null,'', 0, null, null, false);\r\n } else {\r\n // Menu.openMenu();\r\n // deregisterEvents();\r\n // elements.designDefault.click();\r\n }\r\n }\r\n\r\n //todo\r\n this.cursor.checkForRestoreCursor();\r\n };\r\n\r\n addSection = (miteredSection) => {\r\n const reduxState = store.getState();\r\n store.dispatch(addResource(RESOURCE_TYPE.underlaymentSections, miteredSection));\r\n store.dispatch(setSQFTMenuOpened(SIDEBAR_HIDDEN_BUTTONS.toolUnderlayment));\r\n const updateCalculations = reduxState.sqftState.updateCalculations;\r\n store.dispatch(updateSQFTCalculations(updateCalculations + 1));\r\n };\r\n\r\n updateSection = (miteredSection) => {\r\n store.dispatch(changeResource(RESOURCE_TYPE.underlaymentSections, miteredSection));\r\n store.dispatch(setSQFTMenuOpened(SIDEBAR_HIDDEN_BUTTONS.toolUnderlayment));\r\n store.dispatch(setSQFTMenuOpenedLock(true));\r\n\r\n const reduxState = store.getState();\r\n const updateCalculations = reduxState.sqftState.updateCalculations;\r\n store.dispatch(updateSQFTCalculations(updateCalculations + 1));\r\n }\r\n\r\n deleteSection = (miteredOverlay) => {\r\n store.dispatch(deleteResource(RESOURCE_TYPE.underlaymentSections, miteredOverlay.id));\r\n };\r\n\r\n createUnderlaymentOverlay = (line) => {\r\n const reduxState = store.getState();\r\n const underlaymentSections = reduxState.sqftResourceState.underlaymentSections;\r\n const underlaymentOverlay = new MiteredOverlay(line, underlaymentSections.length + 1, MITERED_OVERLAY_TYPE.underlayment);\r\n const feature = getUnderlaymentFeature();\r\n if (feature) {\r\n underlaymentOverlay.setFeatureId(feature.part.dbFeature.id)\r\n }\r\n\r\n return underlaymentOverlay\r\n };\r\n\r\n destroy = (protect, revertBackAfterMouseUp) => {\r\n if (revertBackAfterMouseUp) {\r\n eventManager.removeEvent(self, eventManager.events.RENDER); //remove render only, but wait for mouse up to set cursor again\r\n this.isWaitingToRestoreCursor = true;\r\n } else {\r\n this.deregisterEvents();\r\n }\r\n //this.hide();\r\n };\r\n\r\n deregisterEvents() {\r\n eventManager.resetCursor(this);\r\n eventManager.removeEvent(this);\r\n this.cursor ? this.cursor.deregisterEvents() : null;\r\n Config.highlight.lines = false;\r\n }\r\n\r\n static getTotalArea = () => {\r\n let miteredSections = workspace.getMiteredSections();\r\n let miteredSectionsArea = 0;\r\n for (let i = 0; i < miteredSections.length; i++) {\r\n miteredSectionsArea += miteredSections[i] ? miteredSections[i].getMiteredToolTotalArea() : null;\r\n }\r\n\r\n return miteredSectionsArea;\r\n };\r\n\r\n onMeasureUnitChange = () => {\r\n let miteredSections = workspace.getMiteredSections();\r\n let miteredSectionsArea = 0;\r\n for (let i = 0; i < miteredSections.length; i++) {\r\n let segments = miteredSections[i].getSegments();\r\n\r\n segments.map((segment) => {\r\n segment.height = Config.measureUnit === \"Metric\"\r\n ? inchesToMm(segment.height)\r\n : mmToInches(segment.height);\r\n if (segment.thickness) {\r\n segment.thickness.value = Config.measureUnit === \"Metric\"\r\n ? inchesToMm(segment.thickness.value)\r\n : mmToInches(segment.thickness.value)\r\n }\r\n });\r\n\r\n miteredSections[i].heightNumberText.value = segments[0].height\r\n }\r\n\r\n return miteredSectionsArea;\r\n };\r\n\r\n getTransformedMeasureUnit = (value) => {\r\n return Config.measureUnit === \"Metric\"\r\n ? measureDistanceToInches(value).millimeters // ? distanceToMillimeters(inchesToMm(segment.length.value))\r\n : value;\r\n };\r\n\r\n getEdgesLength = () => {\r\n let additionalLength = 0;\r\n const lines = workspace.getLines();\r\n for (const line of lines) {\r\n if (line.from.getMiteredFeatureId()) {\r\n additionalLength += this.getEdgeLengthValue();\r\n }\r\n }\r\n\r\n return additionalLength\r\n }\r\n\r\n getEdgeLengthValue = () => {\r\n return Config.measureUnit === \"Imperial\"\r\n ? (2 * 33) / 40\r\n : (2 * 900) / 1000;\r\n }\r\n\r\n getExportedMiteredEdges = () => {\r\n let addedEdges = [];\r\n const lines = workspace.getLines();\r\n for (const line of lines) {\r\n const miteredFeatureId = line.from.getMiteredFeatureId();\r\n if (miteredFeatureId) {\r\n const edgeLengthValue = this.getEdgeLengthValue();\r\n const navItems = getEdgeFeatures();\r\n let edgeFeature = navItems.find(edge => edge.part.dbFeature.id === miteredFeatureId);\r\n\r\n addedEdges.push({\r\n partId: EDGE_LABELS.edge,\r\n type: EDGE_LABELS.edge,\r\n name: workspace.intl.formatMessage({id: edgeFeature.part.dbFeature.sharedFeatureName}),\r\n featureId: miteredFeatureId,\r\n segments: 1,\r\n length: edgeLengthValue,\r\n area: edgeLengthValue\r\n });\r\n }\r\n }\r\n\r\n return addedEdges\r\n }\r\n\r\n exportData = () => {\r\n const reduxState = store.getState();\r\n const underlaymentSections = reduxState.sqftResourceState.underlaymentSections;\r\n\r\n //return {quantity: underlaymentSections.reduce((acc, current) => acc + current.getMiteredToolTotalArea(), 0)};\r\n return {sections: underlaymentSections.map((section) => ({\r\n id: section.id,\r\n qtCatName: section.qtCatName,\r\n featureId: section.featureId,\r\n quantity: sqftConfig.measureUnit === \"Imperial\"\r\n ? Math.ceil10(sqInchesToSqFoot(section.getMiteredToolTotalArea()), -2)\r\n : mm2ToM2(section.getMiteredToolTotalArea())\r\n }))\r\n };\r\n }\r\n}\r\n","import {capitalizeFirstLetters} from \"../../misc/helpers\";\r\nimport {getSelectedFiltersLength} from \"../../misc/filtersFunctions\";\r\n\r\nconst changeMaterialToColorArray = [\"vanity_faucet\", \"paper_holder\", \"robe_hook\", \"towel_bar\", \"towel_ring\",\r\n \"bathtub_body\", \"vanity_console\", \"replacement_tub\", \"bathtub_fixture\", \"vanity_ptrap\", \"vanity_legs\", \"vanity_middle\",\r\n \"toilet\", \"vanity_ws_towel_bar\", \"vanity_washstand\", \"vanity_cabinet\"];\r\n\r\n/**\r\n * updated Names per Lixil requirements\r\n * @param filterGroup {filterGroupInterface}\r\n * @param partId {string}\r\n * @returns {string|null}\r\n */\r\nexport const getHardCodedFilterGroupName = (filterGroup, partId = \"\") => {\r\n switch (filterGroup.name) {\r\n case \"Material\": {\r\n if (changeMaterialToColorArray.includes(partId)) {\r\n return \"Color\"\r\n }\r\n break;\r\n }\r\n case \"GPF_Max\": {\r\n return \"GPF\"\r\n }\r\n case \"LixilProductSubCategory\": {\r\n switch (partId) {\r\n case \"vanity_faucet\":\r\n case \"bathtub_fixture\":\r\n return \"Faucet Type\"\r\n default:\r\n break;\r\n }\r\n }\r\n }\r\n return (filterGroup.name || \"\").replace(/_/gi, \" \")\r\n}\r\n\r\n/**\r\n * filters hardcode LX-827 - LX-839 tasks in Jira\r\n * @param filterGroup {filterGroupInterface}\r\n * @param partId {string}\r\n * @returns {boolean}\r\n */\r\nexport const weShouldHideFilterGroup = (filterGroup, partId) => {\r\n switch ((filterGroup.name || \"\").trim()) {\r\n case \"Product_Width\":\r\n case \"LixilProductCategory\":\r\n case \"LixilProductSuperCategory\":\r\n case \"Bath_Accessory_Mount_Type\":\r\n case \"Designer Recommended\":\r\n case \"EA_Each_Weight\":\r\n case \"Small_Parcel_Postable_SAP_YN\":\r\n case \"Volume_SAP\":\r\n case \"Bath_Accessory_No_of_Hooks\":\r\n case \"Bath_Accessory_No_of_Bars\":\r\n case \"Fitting_Mount_Type\":\r\n case \"Fitting_Handle_Type\":\r\n case \"ADA_YN\":\r\n case \"Fitting_Touchless_Touch_On\":\r\n case \"Product_Height\":\r\n case \"Faucet_Type_from_Classification\":\r\n case \"Product_Length\":\r\n case \"Tub_Product_Type\":\r\n case \"Bath_Therapy_Type\":\r\n case \"Drain_Location\":\r\n case \"Hand_Shower_Included_YN\":\r\n case \"Rough_In_Size\":\r\n case \"Toilet_Type_from_Classification\":\r\n case \"Fitting_No_of_Holes_Required\":\r\n return true\r\n case \"Color\": {\r\n return changeMaterialToColorArray.includes(partId);\r\n }\r\n case \"Brand\": {\r\n switch (partId) {\r\n case \"vanity_console\":\r\n case \"vanity_ptrap\":\r\n case \"vanity_cabinet\":\r\n case \"vanity_legs\":\r\n case \"vanity_middle\":\r\n case \"vanity_ws_towel_bar\":\r\n case \"vanity_washstand\":\r\n return true\r\n default:\r\n return false\r\n }\r\n }\r\n case \"Collection\": {\r\n switch (partId) {\r\n case \"vanity_ptrap\":\r\n case \"vanity_legs\":\r\n case \"vanity_middle\":\r\n return true\r\n default:\r\n return false\r\n }\r\n }\r\n case \"Size\":\r\n case \"Manufacturer\": {\r\n switch (partId) {\r\n case \"vanity_cabinet\":\r\n return true\r\n default:\r\n return false\r\n }\r\n }\r\n case \"LixilProductSubCategory\": {\r\n switch (partId) {\r\n case \"vanity_faucet\":\r\n case \"bathtub_fixture\":\r\n return false\r\n default:\r\n return true\r\n }\r\n }\r\n default:\r\n return false\r\n }\r\n}\r\n\r\n/**\r\n * filters hardcode LX-827 - LX-839 tasks in Jira\r\n * @param filterValue {filterValueInterface}\r\n * @returns {boolean}\r\n */\r\nexport const weShouldHideFilterValue = (filterValue) => {\r\n // console.log(\"filterValue\", filterValue);\r\n return (filterValue.id === 10446 && filterValue.value === \"Town Square® S\")\r\n || (filterValue.id === 10415 && filterValue.value === \"Cadet®\")\r\n || (filterValue.id === 10445 && filterValue.value === \"Princeton™\")\r\n || (filterValue.id === 10448 && filterValue.value === \"Colony®\")\r\n || (filterValue.id === 10416 && filterValue.value === \"Eurocube®\")\r\n || (filterValue.id === 10410 && filterValue.value === \"Concetto™\")\r\n || (filterValue.id === 9950 && filterValue.value === \"LINEARE™\")\r\n}\r\n\r\n/**\r\n * filters hardcode LX-827 - LX-839 tasks in Jira\r\n * @param filterGroups {[filterGroupInterface]}\r\n * @param partId {string}\r\n * @param selectedFilters {array}\r\n * @returns {[filterGroupInterface]}\r\n */\r\nexport const getHardCodedFilterGroups = (filterGroups, partId, selectedFilters) => {\r\n return filterGroups\r\n .filter(filterGroup => !weShouldHideFilterGroup(filterGroup, partId))\r\n .map(filterGroup => {\r\n const selectedFiltersLength = getSelectedFiltersLength(filterGroup, selectedFilters);\r\n const filterGroupName = getHardCodedFilterGroupName(filterGroup, partId);\r\n filterGroup.values = filterGroup.values.sort((a, b) => a.id - b.id);\r\n return Object.assign({}, filterGroup, {filterGroupName, selectedFiltersLength})\r\n })\r\n .sort((a, b) => a.id - b.id);\r\n}\r\n\r\n\r\n/**\r\n * updated Names per Lixil requirements\r\n * @param filterValue {filterValueInterface}\r\n * @returns {string}\r\n */\r\nexport const getFixedFilterValueName = (filterValue) => {\r\n switch (filterValue.value) {\r\n // case \"StarLight Chrome\":\r\n // case \"Starlight Chrome\":\r\n // case \"Starlight chrome\":\r\n // return window.location.href.includes(\"grohe\") ? \"Starlight Chrome\" : \"Polished Chrome\"\r\n case \"Grohe\":\r\n case \"grohe\":\r\n return \"GROHE\"\r\n case \"Centerset Bathroom Faucets\":\r\n return \"Centerset\"\r\n case \"Single Hole Bathroom Faucets\":\r\n return \"Single Hole\"\r\n case \"Widespread Bathroom Faucets\":\r\n return \"Widespread\"\r\n case \"Vessel Bathroom Faucets\":\r\n return \"Vessel\"\r\n default:\r\n return capitalizeFirstLetters(filterValue.displayText || filterValue.value || \"\")\r\n .replace(/_/gi, \" \")\r\n }\r\n}\r\n","import {SHAPE_PART_ID, SQFT_APPLIANCES} from \"../constants\";\r\nimport store from \"../../../store\";\r\nimport workspace from \"../components/canvas/core/workspace\";\r\nimport sqftShape from \"../components/canvas/core/shapes/sqftShape\";\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\nimport MovableImage from \"../components/canvas/core/shapes/movableImage\";\r\nimport {\r\n containsHEBeforeExtension,\r\n findGLBLink,\r\n get3dURLsForFeature, getCategoryFromMetadata, getThirdPartyAR3DMetaData,\r\n getUrlMatchingByColor, isHoodShape,\r\n} from \"./sqft3dArHelper\";\r\n//import {SHAPE_SQUARE_LAYOUTS} from \"../components/canvas/core/cabinet/cabinetShapes\";\r\nimport workspaceControllers from \"../components/canvas/store/workspaceControllers\";\r\nimport sqftShapeManager from \"../components/canvas/store/sqftShapeManager\";\r\nimport {featureThumbnailUrl} from \"../../../misc/helpers\";\r\n\r\nexport const DEFAULT_COUNTERTOP_HEIGHT = 34;\r\nexport const DEFAULT_BACKSPLASH_HEIGHT = 18;\r\n\r\nexport class CabinetsSet {\r\n\r\n static prepareCabinetsSet(displayDoorsOnly = false) {\r\n const cabinetPositions = CabinetsSet.prepareCabinetsPositions();\r\n const countertopPositions = CountertopPositions.prepareCountertopPositions();\r\n const wallPositions = WallPositions.prepareWallPositions();\r\n const cabinetSet = {\r\n \"doors_only\": displayDoorsOnly,\r\n \"positions\": [...cabinetPositions, ...countertopPositions, ...wallPositions]\r\n }\r\n\r\n // add countertop if bottom_cabinets exist\r\n // if (cabinetSet.positions.some(position => position.partId === SHAPE_PART_ID.lower_cabinet_boxes)) {\r\n // let texture = \"https://static6.depositphotos.com/1031174/647/i/450/depositphotos_6477080-stock-photo-grungy-background.jpg\";\r\n // const state = store.getState();\r\n // if (state.sqftState.selectedCountertop) {\r\n // const layout = getCurrentLayout();\r\n // const countertopFeature = layout.getFeatureById(state.sqftState.selectedCountertop, true);\r\n // if (countertopFeature && countertopFeature.dbFeature.thirdPartyAR3DUrls) {\r\n // const URLByFeatureName = get3dURLsForFeature(countertopFeature);\r\n // texture = URLByFeatureName ? URLByFeatureName : countertopFeature.dbFeature.thirdPartyAR3DUrls[0]\r\n // }\r\n // }\r\n //\r\n // cabinetSet.countertop = {\r\n // \"main\": \"https://quotecountertops.com/video/sqft/cabinets/Quarter Round_Main Body.glb\",\r\n // \"edge\": \"https://quotecountertops.com/video/sqft/cabinets/Quarter Round_Edge.glb\",\r\n // \"corner\": \"https://quotecountertops.com/video/sqft/cabinets/Quarter Round_Corner.glb\",\r\n // \"texture\": texture\r\n // }\r\n // }\r\n\r\n return cabinetSet\r\n }\r\n\r\n static prepareCabinetsPositions() {\r\n const layout = getCurrentLayout();\r\n const shapes = workspace.getShapes();\r\n\r\n return shapes.map((shape) => {\r\n if (shape instanceof sqftShape) {\r\n let absolutePos = shape.shapeAbsolute.getAbsolutePosition();\r\n let shapePosition = absolutePos ? absolutePos : shape.getPosition();\r\n\r\n const relatedParentFeature = layout.getFeatureById(shape.relatedParentFeatureId, true);\r\n if (relatedParentFeature) {\r\n let shapeDbFeature = relatedParentFeature.getFeatureRelatedFeatures().find(relatedFeature => relatedFeature.id === shape.featureId);\r\n if (!shapeDbFeature) {\r\n const shapeFeature = layout.getFeatureById(shape.featureId, true);\r\n if (shapeFeature) {\r\n shapeDbFeature = shapeFeature.dbFeature\r\n }\r\n }\r\n return CabinetsSet.prepareRegularCabinetSet(shape, shapePosition, shapeDbFeature, relatedParentFeature);\r\n } else {\r\n console.log(\"3d model cannot be prepared its parent not found shape.relatedParentFeatureId:\", shape.relatedParentFeatureId);\r\n }\r\n } if (shape instanceof MovableImage) {\r\n let absolutePos = shape.shapeAbsolute.getAbsolutePosition();\r\n const shapePosition = absolutePos ? absolutePos : shape.getPosition();\r\n const shapeFeature = layout.getFeatureById(shape.featureId);\r\n\r\n if (shapeFeature) {\r\n return CabinetsSet.prepareImageCabinetSet(shape, shapePosition, shapeFeature);\r\n }\r\n }\r\n return null\r\n }).filter(cabinetSet => {\r\n return cabinetSet !== null\r\n })\r\n }\r\n\r\n /**\r\n * Adjust model position based on shape position, dimensions, and rotation.\r\n * @returns {Object} Updated model position.\r\n * @param shapePosition\r\n * @param shapeWidth\r\n * @param shapeDepth\r\n * @param rotatedDegrees\r\n */\r\n static adjustApplianceModelPosition(shapePosition, shapeWidth, shapeDepth, rotatedDegrees) {\r\n // Convert degrees to radians and account for the model's initial -90 degree rotation offset\r\n const radians = (Math.PI / 180) * (rotatedDegrees - 90);\r\n\r\n // Calculate the center of the shape, used as the base point for rotation\r\n const centerX = shapePosition.x + shapeWidth / 2;\r\n const centerZ = shapePosition.y + shapeDepth / 2;\r\n\r\n // Calculate the offsets for X and Z axes based on the current rotation angle\r\n const offsetX = (shapeWidth / 2) * Math.cos(radians);\r\n const offsetZ = (shapeDepth / 2) * Math.sin(radians);\r\n\r\n // Apply Z-axis correction dynamically based on the sine of the rotation angle\r\n const zCorrection = shapeDepth * Math.sin(radians);\r\n\r\n // Return the updated position of the model\r\n return {\r\n x: centerX - offsetX, // Corrected X position after rotation\r\n y: shapePosition.y, // Y position remains unchanged (fixed height)\r\n z: centerZ - offsetZ + zCorrection // Corrected Z position with dynamic adjustment\r\n };\r\n }\r\n\r\n /**\r\n * This function corrects shape position because shape rotation in sqft is made around shape center\r\n * while baking models script rotates shapes around top left corner, so we need to move shape a bit.\r\n * @param rotatedDegrees\r\n * @param position\r\n * @param width\r\n * @param height\r\n * @return {{x: *, y: *}}\r\n */\r\n static getShapeCorrectedPos = (rotatedDegrees, position, width, height) => {\r\n // get radians\r\n let thetaRad = -(rotatedDegrees * Math.PI / 180);\r\n\r\n // left top corner pos (shape pos)\r\n let xInit = position.x;\r\n let yInit = position.y;\r\n\r\n // shape center after rotation\r\n let xCenterBAfterRotation = xInit + width / 2 * Math.cos(thetaRad) - height / 2 * Math.sin(thetaRad);\r\n let yCenterBAfterRotation = yInit + width / 2 * Math.sin(thetaRad) + height / 2 * Math.cos(thetaRad);\r\n\r\n // initial shape center\r\n let xCenterBInitial = xInit + width / 2;\r\n let yCenterBInitial = yInit + height / 2;\r\n\r\n // shape center - shape center after rotation\r\n let deltaX = xCenterBInitial - xCenterBAfterRotation;\r\n let deltaY = yCenterBInitial - yCenterBAfterRotation;\r\n\r\n return {\r\n x: rotatedDegrees > 0\r\n ? position.x + deltaX\r\n : position.x,\r\n y: rotatedDegrees > 0\r\n ? position.y + deltaY\r\n : position.y\r\n }\r\n }\r\n\r\n static prepareRegularCabinetSet = (shape, shapePosition, shapeDbFeature, relatedParentFeature) => {\r\n if (shapeDbFeature) {\r\n //console.log(\"shapeDbFeatureFeature.thirdPartyAR3DUrls\", shapeDbFeature.thirdPartyAR3DUrls);\r\n }\r\n\r\n if (!shapeDbFeature || !shapeDbFeature.thirdPartyAR3DUrls) {\r\n return null\r\n }\r\n\r\n const shapeWidth = shape.shapeCabinet ? shape.shapeCabinet.getShapeWidth() : shape.getWidth();\r\n //if it is cube then we can set target width and resize it\r\n const targetWidth = shape.getLines().length === 4 ? shape.getSize().width : shape.getWidth();\r\n const shapeHeight = shape.shapeCabinet ? shape.shapeCabinet.getShapeHeight() : shape.getHeight();\r\n const shapeDepth = shape.shapeCabinet ? shape.shapeCabinet.getShapeDepth() : shape.getDepth();\r\n const targetDepth = shape.getLines().length === 4 ? shape.getSize().height : shape.getHeight();\r\n\r\n //We are sending top left corner position.\r\n const originPointOnWorkspace = shape.getOriginPointOnWorkspace();\r\n const url = getUrlMatchingByColor(shapeDbFeature, relatedParentFeature).replace(/\\s+\\.glb$/, '.glb'); //todo remove\r\n const material_url = getUrlMatchingByColor(relatedParentFeature.dbFeature, relatedParentFeature); //todo remove\r\n const posY = CabinetsHelper.getCabinetPosY(shape, shapeDbFeature, url, shapeHeight);\r\n const shapeLayout = shape.shapeParams.shapeLayout;\r\n const threeDPos = { x: originPointOnWorkspace.x, y: posY, z: originPointOnWorkspace.y };\r\n const handles = CabinetsHelper.getHandles(shape, threeDPos, shape.rotatedDegrees, targetWidth, targetDepth, shapeHeight);\r\n\r\n // log parent feature material\r\n // if (!material_url) {\r\n // console.log(\"material wasn't found for the feature\", shapeDbFeature.id);\r\n // console.log(\"relatedParentFeature.dbFeature.id\", relatedParentFeature.dbFeature.id);\r\n // console.log(\"relatedParentFeature.dbFeature.thirdPartyAR3DUrls\", relatedParentFeature.dbFeature.thirdPartyAR3DUrls);\r\n // }\r\n\r\n return {\r\n \"partId\": shape.parentPartId ? shape.parentPartId : shape.partId,\r\n \"is_filler\": shape.shapeParams.isSpacer,\r\n \"x\": threeDPos.x,\r\n \"y\": threeDPos.y, // height between floor and roof. 0 is floor\r\n \"z\": threeDPos.z,\r\n \"rotation\": shape.rotatedDegrees,\r\n \"url\": url,\r\n \"material_url\": material_url,\r\n //\"url\": \"https://master_new_1512.quoteremodel.com/content/Views/visualizers/images/sqft-icons/3d/cabinet.glb\",\r\n\r\n \"target_width\": targetWidth,\r\n \"target_depth\": targetDepth,\r\n \"target_height\": shapeHeight,\r\n \"width\": shapeWidth,\r\n \"height\": shapeHeight, //in sqft wee cabinets from top so we can see this value\r\n \"depth\": shapeDepth,\r\n \"contour_points\": shape.getPointsCoords(),\r\n \"original_points\": shape.getOriginalPointsCoords(),\r\n \"featureId\": shapeDbFeature.id,\r\n \"parentFeatureId\": relatedParentFeature.dbFeature.id,\r\n \"shapeLayout\": shapeLayout,\r\n \"handles\": handles,\r\n // \"url\": shapeDbFeatureFeature && shapeDbFeatureFeature.thirdPartyAR3DUrls\r\n // ? shapeDbFeatureFeature.thirdPartyAR3DUrls[0]\r\n // : \"https://qc-3dfiles.s3.amazonaws.com/ar-composer/W3030.glb\" //localGlb\r\n //: \"https://dv84u4f1bblk2.cloudfront.net/6cp14aef9e7rfg6gds5orh1cej7ctlvq.glb\"\r\n }\r\n }\r\n\r\n static prepareImageCabinetSet = (shape, shapePosition, shapeFeature) => {\r\n if (!shapeFeature || !shapeFeature.dbFeature || !shapeFeature.dbFeature.thirdPartyAR3DUrls) {\r\n return null\r\n }\r\n //console.log(\"shapeDbFeatureFeature.thirdPartyAR3DUrls\", shapeFeature.dbFeature.thirdPartyAR3DUrls);\r\n\r\n const shapeWidth = +shape.getWidth();\r\n const shapeHeight = +shape.getThickness();\r\n const shapeDepth = +shape.getHeight();\r\n const applianceRotatedDegrees = shape.rotatedDegrees - 90;\r\n\r\n let appliancePosition = CabinetsSet.adjustApplianceModelPosition(shapePosition, shapeWidth, shapeDepth, shape.rotatedDegrees);\r\n const url = findGLBLink(shapeFeature.dbFeature.thirdPartyAR3DUrls);\r\n\r\n //rise hood to the level of top cabinets\r\n const yPos = shapeFeature.partId === SQFT_APPLIANCES.hood ? DEFAULT_COUNTERTOP_HEIGHT + DEFAULT_BACKSPLASH_HEIGHT : 0;\r\n\r\n // hardcode to create countertop over the dishwasher\r\n const partId = shapeFeature.partId === SHAPE_PART_ID.dishwasher ? SHAPE_PART_ID.lower_cabinet_boxes: shapeFeature.partId;\r\n // we need to hide the hood behind the top cabinet\r\n //const zPos = shapeFeature.partId === SHAPE_PART_ID.hood ? appliancePosition.y - 0.5 : appliancePosition.y;\r\n\r\n return {\r\n \"partId\": partId,\r\n \"x\": appliancePosition.x,\r\n \"y\": yPos, //todo (shape bottom cabinet height + distance between bottom and top cabinets)\r\n \"z\": appliancePosition.z,\r\n \"rotation\": applianceRotatedDegrees,\r\n \"url\": url,\r\n \"width\": shapeWidth,\r\n \"height\": shapeHeight, //in sqft wee cabinets from top so we can see this value\r\n \"depth\": shapeDepth,\r\n }\r\n }\r\n}\r\n\r\nexport class CountertopPositions {\r\n\r\n static prepareCountertopPositions() {\r\n const countertopPositions = [];\r\n const partIdsCoveredByCountertop = [SHAPE_PART_ID.lower_cabinet_boxes, SHAPE_PART_ID.dishwasher];\r\n\r\n /**\r\n * This function will search and return texture in thirdPartyAR3DUrls\r\n * and if it is not found will return large thumbnail\r\n * @return {string}\r\n */\r\n const getCountertopTexture = () => {\r\n let textureUrl = \"https://qc-3dfiles.s3.amazonaws.com/ar-textures/Absolute White - MSI - Marble - color - 1 - 0.16 - 0.33.png\";\r\n const state = store.getState();\r\n if (state.sqftState.selectedCountertop) {\r\n const layout = getCurrentLayout();\r\n const countertopFeature = layout.getFeatureById(state.sqftState.selectedCountertop, true);\r\n if (countertopFeature) {\r\n if (countertopFeature.dbFeature.thirdPartyAR3DUrls) {\r\n const URLByFeatureName = get3dURLsForFeature(countertopFeature);\r\n textureUrl = URLByFeatureName ? URLByFeatureName : countertopFeature.dbFeature.thirdPartyAR3DUrls[0];\r\n } else {\r\n textureUrl = featureThumbnailUrl(countertopFeature);\r\n }\r\n }\r\n }\r\n return textureUrl;\r\n };\r\n\r\n const textureUrl = getCountertopTexture();\r\n const snappedShapeGroups = workspaceControllers.snappedShapeGroups.getResources();\r\n\r\n // Function to group shapes by partId, height, and handle gaps\r\n const groupShapes = (shapes) => {\r\n let currentGroup = [];\r\n let lastHeight = null;\r\n\r\n for (const shape of shapes) {\r\n const shapeHeight = shape.shapeCabinet && shape.shapeCabinet.getShapeHeight\r\n ? shape.shapeCabinet.getShapeHeight()\r\n : DEFAULT_COUNTERTOP_HEIGHT;\r\n const isDishwasher = shape.subType === SHAPE_PART_ID.dishwasher;\r\n const isValidShape = partIdsCoveredByCountertop.includes(shape.partId) ||\r\n partIdsCoveredByCountertop.includes(shape.parentPartId) ||\r\n partIdsCoveredByCountertop.includes(shape.subType)\r\n\r\n if (!isValidShape) {\r\n if (currentGroup.length > 0) {\r\n CountertopPositions.prepareCountertopForGroup(currentGroup, textureUrl, countertopPositions, lastHeight);\r\n currentGroup = [];\r\n }\r\n lastHeight = null;\r\n continue;\r\n }\r\n\r\n if (shapeHeight !== lastHeight && !isDishwasher) {\r\n if (currentGroup.length > 0) {\r\n CountertopPositions.prepareCountertopForGroup(currentGroup, textureUrl, countertopPositions, lastHeight);\r\n currentGroup = [];\r\n }\r\n }\r\n\r\n lastHeight = shapeHeight;\r\n currentGroup.push(shape);\r\n }\r\n\r\n if (currentGroup.length > 0) {\r\n CountertopPositions.prepareCountertopForGroup(currentGroup, textureUrl, countertopPositions, lastHeight);\r\n }\r\n };\r\n\r\n // Prepare countertops for the snapped lower_cabinet_boxes\r\n for (const snappedShapeGroup of snappedShapeGroups) {\r\n let shapes = workspaceControllers.snappedShapeGroups.getSnappedShapes(snappedShapeGroup);\r\n\r\n //shapes = shapes.filter(shp => shp.partId !== SHAPE_PART_ID.upper_cabinet_boxes);\r\n // shapes = shapes.filter(shp =>\r\n // partIdsCoveredByCountertop.includes(shp.partId)\r\n // || partIdsCoveredByCountertop.includes(shp.parentPartId)\r\n // || partIdsCoveredByCountertop.includes(shp.subType)\r\n // );\r\n\r\n shapes.sort((a, b) => {\r\n const posA = a.getPosition();\r\n const posB = b.getPosition();\r\n const tolerance = 15; // x tolerance for defining \"one line\"\r\n\r\n if (Math.abs(posA.x - posB.x) <= tolerance) {\r\n return posA.y - posB.y;\r\n }\r\n\r\n return posA.x - posB.x;\r\n });\r\n\r\n if (shapes.length > 0) {\r\n groupShapes(shapes);\r\n }\r\n }\r\n\r\n // Prepare countertops for the single cabinets\r\n const shapes = workspace.getShapes();\r\n const countertopCabinets = shapes.filter(shp =>\r\n partIdsCoveredByCountertop.includes(shp.partId)\r\n || partIdsCoveredByCountertop.includes(shp.parentPartId)\r\n || partIdsCoveredByCountertop.includes(shp.subType)\r\n );\r\n\r\n for (const countertopCabinet of countertopCabinets) {\r\n if (countertopCabinet.shapeAbsolute.getSnappedShapeGroup() === null) {\r\n const countertopCabinetHeight = countertopCabinet.shapeCabinet && countertopCabinet.shapeCabinet.getShapeHeight\r\n ? countertopCabinet.shapeCabinet.getShapeHeight()\r\n : DEFAULT_COUNTERTOP_HEIGHT;\r\n\r\n CountertopPositions.prepareCountertopForGroup(\r\n [countertopCabinet],\r\n textureUrl,\r\n countertopPositions,\r\n countertopCabinetHeight\r\n );\r\n }\r\n }\r\n\r\n return countertopPositions;\r\n }\r\n\r\n static prepareCountertopForGroup = (snappedShapes, textureUrl, countertopPositions, shapeHeight) => {\r\n const measurementPoints = sqftShapeManager.getMinMaxShapesPointsOnWorkspace(snappedShapes);\r\n const contourPoints = sqftShapeManager.getShapesContourPointsOnWorkspace(snappedShapes, true);\r\n const overhang = sqftShapeManager.getShapesOverhangOnWorkspace(contourPoints, snappedShapes);\r\n\r\n if (measurementPoints.length > 0) {\r\n const width = measurementPoints[1].x - measurementPoints[0].x;\r\n const height = measurementPoints[2].y - measurementPoints[1].y;\r\n countertopPositions.push({\r\n 'partId': 'countertop',\r\n 'x': contourPoints[0].x,\r\n 'y': shapeHeight, // Using the shapeHeight parameter instead of hardcoded value\r\n 'z': contourPoints[0].y,\r\n 'width': width,\r\n 'height': height,\r\n 'edge_url': 'https://quotecountertops.com/video/sqft/countertop_edges/Eased Countertop.glb',\r\n 'texture_url': textureUrl,\r\n 'contour_points': contourPoints,\r\n 'overhang': overhang\r\n });\r\n } else {\r\n console.error(\"contourPoints is empty\");\r\n }\r\n }\r\n}\r\n\r\nexport class WallPositions {\r\n static prepareWallPositions() {\r\n const walls = workspaceControllers.walls.getResources();\r\n return walls.map(wall => {\r\n return {\r\n \"partId\": \"wall\",\r\n \"texture_url\": \"https://qc-3dfiles.s3.amazonaws.com/ar-textures/Absolute White - MSI - Marble - color - 1 - 0.16 - 0.33.png\",\r\n \"height\": 100.0,\r\n \"contour_points\": wall.getPoints().map(point => point.getPosition())\r\n }\r\n })\r\n }\r\n}\r\n\r\nexport class CabinetsHelper {\r\n static getHighestCabinetValue(partId = SHAPE_PART_ID.upper_cabinet_boxes) {\r\n const shapes = workspace.getShapes();\r\n if (shapes.length === 0) {\r\n return 0;\r\n }\r\n\r\n return shapes.reduce((acc, current) => {\r\n let currentShapeHeight = 0;\r\n\r\n if (current.partId === partId) {\r\n if (current instanceof sqftShape) {\r\n currentShapeHeight = current.shapeCabinet.getShapeHeight();\r\n } else if (current instanceof MovableImage) {\r\n currentShapeHeight = current.getThickness();\r\n }\r\n }\r\n\r\n if (currentShapeHeight > acc) {\r\n return currentShapeHeight;\r\n }\r\n\r\n return acc;\r\n }, 0);\r\n }\r\n\r\n static getCabinetPosY(shape, shapeDbFeature, url, shapeHeight) {\r\n let posY = 0\r\n const metaData = getThirdPartyAR3DMetaData(shapeDbFeature, url);\r\n const category = getCategoryFromMetadata(metaData);\r\n\r\n if (shape.partId === SHAPE_PART_ID.upper_cabinet_boxes || shape.parentPartId === SHAPE_PART_ID.upper_cabinet_boxes) {\r\n // //todo (shape bottom cabinet height + distance between bottom and top cabinets)\r\n posY = DEFAULT_COUNTERTOP_HEIGHT + DEFAULT_BACKSPLASH_HEIGHT;\r\n\r\n //set hood cabinet height to the level of highest upper_cabinet value\r\n const isHoodCabinet = category === \"Hood\" || containsHEBeforeExtension(url) || shapeHeight <= DEFAULT_BACKSPLASH_HEIGHT;\r\n if (isHoodCabinet) {\r\n const snappedWithShape = shape.shapeAbsolute.getSnappedWithShape();\r\n\r\n //const snappedShapes = workspaceControllers.snappedShapeGroups.getSnappedShapes(shape.shapeAbsolute.snappedShapeGroup);\r\n let upperCabinetHighestCabinetValue;\r\n //todo might be issues here, it is better to search for the closest cabinet\r\n if (snappedWithShape && !isHoodShape(snappedWithShape) && snappedWithShape.partId === SHAPE_PART_ID.upper_cabinet_boxes) {\r\n upperCabinetHighestCabinetValue = parseFloat(snappedWithShape.shapeCabinet.getShapeHeight());\r\n } else {\r\n upperCabinetHighestCabinetValue = parseFloat(CabinetsHelper.getHighestCabinetValue(SHAPE_PART_ID.upper_cabinet_boxes));\r\n }\r\n posY = DEFAULT_COUNTERTOP_HEIGHT + DEFAULT_BACKSPLASH_HEIGHT + upperCabinetHighestCabinetValue - shapeHeight;\r\n //upper cabinets was raised in 3d models\r\n // hardcode for cabinets that is raised in the model\r\n // if (startsFromH(shapeDbFeature.sharedFeatureName)) {\r\n // posY = posY - 30 + shapeHeight\r\n // }\r\n }\r\n\r\n //set upper cabinet height to the level of tall cabinets\r\n const tallCabinetHighestCabinetValue = parseFloat(CabinetsHelper.getHighestCabinetValue(SHAPE_PART_ID.tall_cabinet_boxes));\r\n if (tallCabinetHighestCabinetValue) {\r\n posY = tallCabinetHighestCabinetValue - shapeHeight;\r\n }\r\n }\r\n return posY\r\n }\r\n\r\n static getHandles(shape) {\r\n for (const line of shape.getLines()) {\r\n const handleId = line.getHandleId()\r\n if (handleId) {\r\n const handle3dURL = line.getHandle3dURL();\r\n //todo we need to create handle for each of the position in ar3dFile\r\n return [\r\n {\r\n handle3dURL,\r\n partId: shape.partId,\r\n // pos: {\r\n // x: pos.x + targetWidth / 2,\r\n // y: pos.y + targetHeight / 2,\r\n // z: pos.z + targetDepth,\r\n // }\r\n }\r\n // ,\r\n // {\r\n // handle3dURL,\r\n // partId: shape.partId,\r\n // }, {\r\n // handle3dURL,\r\n // partId: shape.partId,\r\n // }\r\n ]\r\n }\r\n }\r\n }\r\n}\r\n","export function similarity(s1, s2) {\r\n let longer = s1;\r\n let shorter = s2;\r\n if (s1.length < s2.length) {\r\n longer = s2;\r\n shorter = s1;\r\n }\r\n const longerLength = longer.length;\r\n if (longerLength === 0) {\r\n return 1.0;\r\n }\r\n return (longerLength - editDistance(longer, shorter)) / parseFloat(longerLength);\r\n}\r\n\r\n/*\r\n * Track the highest number of matching words\r\n */\r\nexport function similarityByWords(arrayToSearch, nameSearch) {\r\n let highestMatchCount = 0;\r\n let phraseBySimilarity = null;\r\n\r\n arrayToSearch.forEach(url => {\r\n const urlName = url.toLowerCase().split('/').pop().split('.')[0];\r\n const searchWords = nameSearch.toLowerCase().split(' ');\r\n const urlWords = urlName.split('-').join(' ').split(' '); // Adjusted splitting logic for your URLs\r\n\r\n let matchCount = searchWords.reduce((count, word) => {\r\n return count + (urlWords.includes(word) ? 1 : 0);\r\n }, 0);\r\n\r\n //console.log(\"urlName\", urlName);\r\n //console.log(\"matchCount\", matchCount);\r\n if (matchCount > highestMatchCount) {\r\n phraseBySimilarity = url;\r\n highestMatchCount = matchCount;\r\n }\r\n });\r\n\r\n return phraseBySimilarity\r\n}\r\n\r\nfunction editDistance(s1, s2) {\r\n s1 = s1.toLowerCase();\r\n s2 = s2.toLowerCase();\r\n\r\n const costs = [];\r\n for (let i = 0; i <= s1.length; i++) {\r\n let lastValue = i;\r\n for (let j = 0; j <= s2.length; j++) {\r\n if (i === 0) costs[j] = j;\r\n else {\r\n if (j > 0) {\r\n let newValue = costs[j - 1];\r\n if (s1.charAt(i - 1) !== s2.charAt(j - 1)) newValue = Math.min(Math.min(newValue, lastValue), costs[j]) + 1;\r\n costs[j - 1] = lastValue;\r\n lastValue = newValue;\r\n }\r\n }\r\n }\r\n if (i > 0) costs[s2.length] = lastValue;\r\n }\r\n return costs[s2.length];\r\n}\r\n\r\nexport const isSqftPassedDataEmpty = (sqftPassedData) => {\r\n if (sqftPassedData && sqftPassedData.manualCalculate === false) {\r\n return sqftPassedData.countertops.length === 0\r\n } else if (sqftPassedData && sqftPassedData.manualCalculate === true) {\r\n return sqftPassedData.countertops.length === 0\r\n || sqftPassedData.backsplashes.length === 0\r\n || sqftPassedData.edges.length === 0\r\n }\r\n return false\r\n}\r\n\r\n// Function to group URLs by version and sort them in descending order by version number\r\nexport function groupUrlsByVersion(urls) {\r\n // Create an array to store versioned URLs\r\n const versionedUrls = [];\r\n\r\n urls.forEach(url => {\r\n // Extract the version number from the URL (if present)\r\n const versionMatch = url.match(/ar-composer(?:-v(\\d+))?/);\r\n // If no version is present, default to version 1\r\n const version = versionMatch && versionMatch[1] ? parseInt(versionMatch[1], 10) : 1;\r\n\r\n // Add the version and URL to the array as an object\r\n versionedUrls.push({ version, url });\r\n });\r\n\r\n // Sort the array by version in descending order\r\n versionedUrls.sort((a, b) => b.version - a.version);\r\n\r\n // Return an array of sorted URLs based on version\r\n return versionedUrls.map(item => item.url);\r\n}\r\n","import React, {Fragment} from 'react';\r\nimport {connect} from 'react-redux';\r\nimport PropTypes from 'prop-types';\r\nimport findIndex from 'lodash/findIndex';\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\n\r\nimport CheckBox from './../../../common/checkBox';\r\nimport Analytics from './../../../../analytics';\r\nimport {\r\n setExpandedFilters,\r\n setFilterVisible,\r\n setSelectedFilters,\r\n showFilters\r\n} from \"../../../../actions/actionFunctions\";\r\n// import FilterSelection from \"./filterSelection\";\r\nimport FiltersSearch from \"./filtersSearch\";\r\nimport NavigationRequests from \"../navigationRequests\";\r\n\r\nconst toggleArrayValue = (array, value) => {\r\n let index = array.indexOf(value);\r\n (index >= 0) ? array.splice(index, 1) : array.push(value);\r\n return array;\r\n};\r\n\r\nexport const toggleFilterArrayValue = (array, {filterId, filterGroupId}) => {\r\n let index = findIndex(array, {filterId});\r\n if (index >= 0) {\r\n array.splice(index, 1);\r\n } else {\r\n array.push({filterId, filterGroupId});\r\n }\r\n return array;\r\n};\r\n\r\nconst arrayHasValue = (array, value) => {\r\n return (array.indexOf(value) >= 0);\r\n};\r\n\r\nclass FiltersBody extends NavigationRequests {\r\n static propTypes = {\r\n id: PropTypes.string.isRequired,\r\n searchText: PropTypes.string.isRequired,\r\n handleSearchInputChange: PropTypes.func.isRequired,\r\n childItem: PropTypes.object\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n isLoading: false,\r\n filterButtons: [\"Others\", \"Materials\", \"Brand\", \"Color\"]\r\n };\r\n this._isMounted = false;\r\n }\r\n\r\n componentDidMount() {\r\n this._isMounted = true;\r\n this.setAvailableFiltersValues();\r\n }\r\n\r\n componentWillUnmount() {\r\n this._isMounted = false;\r\n }\r\n\r\n setAvailableFiltersValues() {\r\n const activePart = this.props.childItem && this.props.childItem.part;\r\n if (activePart.filtersReceived) {\r\n this.setState({\r\n isLoading: false,\r\n })\r\n } else {\r\n this.setState({\r\n isLoading: true\r\n });\r\n this.checkIfAllFiltersReceived(activePart, this.props.allFilterGroups)\r\n .then(() => {\r\n if (this._isMounted) {\r\n this.setState({\r\n isLoading: false,\r\n })\r\n }\r\n });\r\n }\r\n }\r\n\r\n isFilterSelected = (filter) => findIndex(this.props.selectedFilters, {filterId:filter}) !== -1;\r\n isFilterExpanded = (filter) => arrayHasValue(this.props.expandedFilters, filter);\r\n\r\n handleExpandFilter = (filter) => Analytics.sendClickEvent('filter-expand-' + filter) && this.props.setExpandedFilters(toggleArrayValue([...this.props.expandedFilters], filter));\r\n handleSelectFilter = (filterId, filterGroupId) => Analytics.sendClickEvent('filter-selected-' + filterId) && this.props.setSelectedFilters(toggleFilterArrayValue([...this.props.selectedFilters],\r\n {filterId, filterGroupId}));\r\n\r\n handleGroupClick = (filterName) => {\r\n Analytics.sendClickEvent('show-filter-group-' + filterName);\r\n if (this.props.filterVisible === filterName) {\r\n this.props.showFilters(false);\r\n } else {\r\n this.props.setFilterVisible(filterName);\r\n this.setAvailableFiltersValues(this.props, filterName);\r\n }\r\n };\r\n\r\n handleReset = () => {\r\n this.props.setSelectedFilters([]);\r\n this.props.setExpandedFilters([]);\r\n this.props.handleSearchInputChange({target: {value: ''}});\r\n };\r\n\r\n render() {\r\n const activePart = this.props.childItem.part;\r\n return (\r\n \r\n
    \r\n {this.state.filterButtons.map((filterName) => {\r\n const filterGroup = this.props.allFilterGroups.find(group => group.name === filterName);\r\n const buttonText = (filterName === \"Others\") ? \"+Filters\" : filterName;\r\n const filterNameLowerCased = filterName.toLowerCase();\r\n let buttonEnabled = false;\r\n if (filterName === \"Others\") {\r\n buttonEnabled = Array.isArray(activePart.filtersReceived) && this.props.allFilterGroups.some(filterGroup => {\r\n return ![\"Materials\", \"Brand\", \"Color\"].includes(filterGroup.name) && filterGroup.values.some(filterValue => {\r\n return activePart.filtersReceived.includes(filterValue.id);\r\n })\r\n });\r\n } else {\r\n buttonEnabled = filterGroup && (Array.isArray(activePart.filtersReceived) && filterGroup.values.some(filterValue => {\r\n return activePart.filtersReceived.includes(filterValue.id);\r\n }));\r\n }\r\n return (\r\n
    this.handleGroupClick(filterName)}\r\n className={\"filters-header-icon filters-header-icon--\"+filterNameLowerCased\r\n + (this.props.filterVisible === filterName ? \" filters-header-icon--active filters-header-icon--active--\"+filterNameLowerCased : \"\")\r\n + (!buttonEnabled ? \" filters-header-icon--disabled\" : \"\")}>\r\n \r\n
    \r\n )\r\n })}\r\n \r\n
    \r\n \r\n \r\n \r\n
    \r\n
    \r\n {this.state.isLoading || !activePart.filtersReceived\r\n ?
    \r\n :
    {this.renderFiltersBody()}
    \r\n }\r\n \r\n )\r\n }\r\n\r\n renderFiltersBody = () => {\r\n const activePart = this.props.childItem.part;\r\n switch (this.props.filterVisible) {\r\n case \"Others\": {\r\n const otherFilterGroups = this.props.allFilterGroups.filter(filterGroup => {\r\n return ![\"Materials\", \"Brand\", \"Color\"].includes(filterGroup.name) && filterGroup.values.some(filterValue => {\r\n return activePart.filtersReceived.includes(filterValue.id);\r\n })\r\n });\r\n const availableOtherFilterGroups = otherFilterGroups.map(fg => {\r\n return {\r\n id: fg.id,\r\n displayText: fg.name,\r\n items: fg.values.filter(filterValue => activePart.filtersReceived.includes(filterValue.id)),\r\n }\r\n });\r\n return this.renderGenericFilters(availableOtherFilterGroups, true);\r\n }\r\n case \"Materials\": {\r\n const filterGroup = this.props.allFilterGroups.find(group => group.name === \"Materials\");\r\n if (this.checkFilterGroupForAvailableFilterValues(filterGroup).length) {\r\n return this.renderGenericFilters(filterGroup.values, false, filterGroup.id);\r\n }\r\n break;\r\n }\r\n case \"Brand\": {\r\n const filterGroup = this.props.allFilterGroups.find(group => group.name === \"Brand\");\r\n if (this.checkFilterGroupForAvailableFilterValues(filterGroup).length) {\r\n return this.renderBrand(filterGroup);\r\n }\r\n break;\r\n }\r\n case \"Color\": {\r\n const filterGroup = this.props.allFilterGroups.find(group => group.name === \"Color\");\r\n if (this.checkFilterGroupForAvailableFilterValues(filterGroup).length) {\r\n return this.renderColor(filterGroup);\r\n }\r\n break;\r\n }\r\n }\r\n return null;\r\n };\r\n\r\n checkFilterGroupForAvailableFilterValues = (filterGroup) => {\r\n if (!filterGroup || !filterGroup.values) {\r\n return []\r\n }\r\n const activePart = this.props.childItem.part;\r\n return filterGroup.values.filter(filterValue => {\r\n return activePart.filtersReceived.includes(filterValue.id);\r\n })\r\n };\r\n\r\n /**\r\n *\r\n * @param filterList {Array}\r\n * @param groupsFirst {boolean}\r\n * @param groupId {any}\r\n * @return {*}\r\n */\r\n renderGenericFilters = (filterList, groupsFirst = false, groupId) => {\r\n // console.log('filterList', filterList);\r\n const fabricatorData = this.props.fabricatorData;\r\n let filterOptions = filterList\r\n .filter(f => !(fabricatorData && ((f.value === \"Slab\" && fabricatorData.isRebath)\r\n || (f.value === \"DuraBath Natural Stone\" && !fabricatorData.isRebath)\r\n )))\r\n .map(f => {\r\n const sortedItems = (f.displayText === \"Size\")\r\n ? f.items.sort((a, b) => {\r\n const name1 = +a.value.split(\"X\")[0].split(\"in\")[0];\r\n const name2 = +b.value.split(\"X\")[0].split(\"in\")[0];\r\n return name1 !== name2 ? name1 < name2 ? -1 : 1 : 0\r\n })\r\n : f.items;\r\n let items = sortedItems.map(i => {\r\n return (\r\n
  • \r\n this.handleSelectFilter(i.id, groupId || f.id)}/>\r\n
  • \r\n );\r\n });\r\n\r\n return (\r\n
  • \r\n this.handleSelectFilter(f.id, groupId || f.id)}/>\r\n\r\n {(f.items && f.items.length > 0)\r\n ? this.handleExpandFilter(f.id)} />\r\n : null}\r\n
      \r\n {items}\r\n
    \r\n
  • \r\n );\r\n });\r\n\r\n return (\r\n
    \r\n
      \r\n {filterOptions}\r\n
    \r\n
    \r\n );\r\n };\r\n\r\n renderBrand = (brandFilterGroup) => {\r\n return (\r\n
    \r\n
      \r\n {this.checkFilterGroupForAvailableFilterValues(brandFilterGroup).map(f => (\r\n
    • this.handleSelectFilter(f.id, brandFilterGroup.id)}>\r\n {f.icon ? null : f.displayText}\r\n
    • \r\n ))}\r\n
    \r\n
    \r\n );\r\n };\r\n\r\n renderColor = (colorFilterGroup) => {\r\n return (\r\n
    \r\n
      \r\n {this.checkFilterGroupForAvailableFilterValues(colorFilterGroup).map(f => (\r\n
    • \r\n this.handleSelectFilter(f.id, colorFilterGroup.id)}\r\n text={f.displayText}/>\r\n \r\n
    • \r\n ))}\r\n
    \r\n
    \r\n );\r\n };\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n selectedFilters: store.filterState.selectedFilters,\r\n expandedFilters: store.filterState.expandedFilters,\r\n filterVisible: store.filterState.filterVisible,\r\n fabricatorData: store.fabricatorState,\r\n allFilterGroups: store.filterState.filterGroups,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setSelectedFilters,\r\n setExpandedFilters,\r\n showFilters,\r\n setFilterVisible,\r\n};\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(FiltersBody)\r\n);\r\n","import React from 'react';\r\nimport classNames from 'classnames';\r\nimport {connect} from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport Analytics from './../../analytics';\r\nimport COLOR_THEMES from \"../../colorThemes\";\r\n\r\nconst CheckBox = (props) => {\r\n const {checked, text, onChecked, disabled, textOnly, activeTheme} = props;\r\n return (\r\n
    !disabled && !textOnly && Analytics.sendClickEvent(\"checkbox - \" + text, checked) && onChecked(!checked)}>\r\n
    \r\n {textOnly ? null :\r\n \r\n \r\n \r\n }\r\n {checked ?\r\n
    \r\n :
    }\r\n
    \r\n
    {text}
    \r\n
    \r\n );\r\n};\r\n\r\nCheckBox.displayName = 'CheckBox';\r\n\r\nCheckBox.propTypes = {\r\n checked: PropTypes.bool,\r\n disabled: PropTypes.bool,\r\n textOnly: PropTypes.bool,\r\n text: PropTypes.any,\r\n onChecked: PropTypes.func,\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n activeTheme: store.serverState.activeTheme,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(CheckBox)\r\n","import React, {Fragment} from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport {loaderEnable} from \"../ui/loaderView\";\r\nimport {\r\n toggleUserPopup, setCanvasId, setLayoutDataParts, setDefaultSelectionGroup, loadFilters, setCameFromPage,\r\n toggleBathroomVisualizerOpen, toggleSelectionFeatureInfo, changeMessageBoxState,\r\n addVisualizersLoaded } from \"../../actions/actionFunctions\";\r\nimport {\r\n getBathroomVisualizerData,\r\n getBvGroups,\r\n getBvGroupFeatures,\r\n getQtCategories,\r\n getNavigationButtons\r\n} from \"../../api/server-api\";\r\nimport ImageCanvasCommon from \"../visComponents/imageCanvasCommon\";\r\nimport {Layout} from \"./core/layout\";\r\nimport CountertopGroup from \"./core/parts/countertopGroup\";\r\nimport Cabinet from \"./core/parts/cabinet\";\r\nimport DesktopNavigation from \"./navigation/desktopNavigation\";\r\nimport MobileNavigation from \"./navigation/mobileNavigation\";\r\nimport MainButtons from \"../common/mainButtons\";\r\nimport DemoPoints from \"../common/demoPoints/demoPoints\";\r\nimport MessageBox from \"../popups/messageBox\";\r\n\r\nimport Visualizer from \"../visComponents/visualizer\";\r\nimport VisualizerTutorial from \"../tutorials/visualizerTutorial\";\r\nimport {showVisualizerTutorial} from \"../../actions/tutorialFunctions\";\r\nimport Copyright from \"../ui/copyright\";\r\nimport {IS_QKB_UI} from \"../../config\";\r\n\r\nexport const layout = new Layout();\r\n\r\nclass KitchenVisualizer extends Visualizer {\r\n\r\n static displayName = 'Kitchen Visualizer';\r\n\r\n constructor(props) {\r\n super(props);\r\n this.layout = layout;\r\n }\r\n\r\n componentDidMount() {\r\n if (this.props.visualizersLoaded.includes(this.layout.visualizerType)) {\r\n this.setSubscribers();\r\n return false\r\n }\r\n loaderEnable();\r\n Promise.all([\r\n getBathroomVisualizerData(),\r\n getQtCategories(this.layout.getCurrentLayoutAbbreviation())\r\n ]).then(baseResponse => {\r\n Promise.all([\r\n Promise.resolve(baseResponse[0]),\r\n getBvGroups(),\r\n getBvGroupFeatures(\"Countertop\", 0, 200),\r\n getBvGroupFeatures(\"Crown Molding\", 0, 500),\r\n getBvGroupFeatures(\"Top Cabinet\", 0, 200),\r\n getBvGroupFeatures(\"Bottom Cabinet\", 0, 200),\r\n getBvGroupFeatures(\"Top Handle\", 0, 200),\r\n getBvGroupFeatures(\"Bottom Handle\", 0, 200),\r\n Promise.resolve(baseResponse[1])\r\n ])\r\n .then((allResponse) => {\r\n const mainResponse = allResponse[0];\r\n const kvGroupsResponse = allResponse[1].data;\r\n const qtCategories = allResponse[8];\r\n\r\n // 1) set default (placeholders)\r\n this.layout.loadNewFeatures(mainResponse);\r\n this.layout.setGroupsItemsCount(kvGroupsResponse); // should be loaded before & after all features are received\r\n\r\n // 2) set counterTop features\r\n const countertopParent = this.layout.parts[CountertopGroup.id];\r\n if (countertopParent && countertopParent.countertop && allResponse[2]) {\r\n countertopParent.countertop.setGroupFeatures(allResponse[2], 200, false)\r\n }\r\n\r\n // 3) set counterTop features\r\n const cabinetParent = this.layout.parts[Cabinet.id];\r\n if (cabinetParent && cabinetParent.crownMolding && allResponse[3]) {\r\n cabinetParent.crownMolding.setGroupFeatures(allResponse[3], 500, false)\r\n }\r\n\r\n // 4) set top cabinet features\r\n if (cabinetParent && cabinetParent.topCabinet && allResponse[4]) {\r\n cabinetParent.topCabinet.setGroupFeatures(allResponse[4], 200, false)\r\n }\r\n\r\n // 5) set bottom cabinet features\r\n if (cabinetParent && cabinetParent.bottomCabinet && allResponse[5]) {\r\n cabinetParent.bottomCabinet.setGroupFeatures(allResponse[5], 200, false)\r\n }\r\n\r\n // 6) set top handle features\r\n if (cabinetParent && cabinetParent.topHandle && allResponse[6]) {\r\n cabinetParent.topHandle.setGroupFeatures(allResponse[6], 200, false)\r\n }\r\n\r\n // 7) set bottom handle features\r\n if (cabinetParent && cabinetParent.bottomHandle && allResponse[7]) {\r\n cabinetParent.bottomHandle.setGroupFeatures(allResponse[7], 200, false)\r\n }\r\n return this.setVisualizerInfo(mainResponse, kvGroupsResponse, qtCategories);\r\n })\r\n .then(this.checkShareUrl)\r\n .then(this.onBvLoad)\r\n .then(this.finishLoading);\r\n });\r\n\r\n this.setSubscribers();\r\n getNavigationButtons();\r\n }\r\n\r\n render() {\r\n\r\n if (!IS_QKB_UI) {\r\n return null\r\n }\r\n\r\n const showPlaceHolders = document.bvConfig ? document.bvConfig.showPlaceholders : false;\r\n const fabricatorSettings = this.props.fabricatorSettings;\r\n const layers = this.layout.getLayers(showPlaceHolders);\r\n const layoutType = this.layout.getCurrentLayoutName();\r\n const isMobile = this.props.windowWidth < 991;\r\n const showTutorial = this.checkToShowTutorial();\r\n\r\n return (\r\n
    \r\n
    \r\n {(this.props.bvOpened || this.props.bvVisited) ? (\r\n \r\n this.imageCanvas = node}\r\n layoutType={layoutType}\r\n layout={this.layout}\r\n width={this.props.canvasDimensions.width}\r\n height={this.props.canvasDimensions.height}\r\n useMouseHovering={this.props.useMouseHovering}\r\n useTouchZoom={this.props.useTouchZoom}\r\n />\r\n \r\n \r\n ) : null}\r\n \r\n {!this.state.demoPointClicked && this.props.canvasId ? (\r\n \r\n ) : null}\r\n
    \r\n {(this.layout.initialized && this.props.bvVisited) ? ( // keep navigation opened if someone got to QT and back\r\n isMobile ? (\r\n \r\n ) : (\r\n this.navBar = node}\r\n refreshCB={this.handleRefresh}\r\n setHoveredLayer={this.setHoveredLayer}\r\n canvasId={this.state.canvasId}\r\n renderGreenLayerByZindex={this.renderGreenLayerByZindex}\r\n toggleUserPopup={this.props.toggleUserPopup}\r\n changeMessageBoxState={this.changeMessageBoxState}\r\n setActiveFeature={this.setActiveFeature}\r\n activeFeature={this.state.activeFeature}\r\n fabricatorSettings={fabricatorSettings}\r\n setDemoPointClicked={this.setDemoPointClicked}\r\n />\r\n )\r\n ) : null}\r\n {this.props.cookieAccepted ? : null}\r\n {showTutorial ? : null}\r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {cookieAccepted, windowWidth, visualizersLoaded} = store.serverState;\r\n const {bvOpened, bvVisited, canvasId, showRestorePopup, canvasDimensions, canvasCount} = store.bathroomVisualizerState;\r\n const {mobileNav, desktopNavigationOpened, activeNavigationParentName, activeNavigationChildName} = store.navigationState;\r\n const {isPhoneNumberValidated, userIsLoggedIn} = store.userState;\r\n const {visualizerTutorialIsOpened, visualizerTutorialFinished} = store.tutorialState;\r\n const {initialFlowRoomLayout, initialFlowRoom, initialFlowStep} = store.initialFlowState;\r\n return {\r\n bvOpened,\r\n bvVisited,\r\n mobileNav,\r\n isPhoneNumberValidated,\r\n userIsLoggedIn,\r\n windowWidth,\r\n canvasId,\r\n fabricatorSettings: store.fabricatorState.settings,\r\n desktopNavigationOpened,\r\n activeNavigationParentName,\r\n activeNavigationChildName,\r\n showRestorePopup,\r\n visualizerTutorialIsOpened,\r\n visualizerTutorialFinished,\r\n initialFlowRoomLayout,\r\n initialFlowRoom,\r\n initialFlowStep,\r\n cookieAccepted,\r\n canvasDimensions,\r\n visualizersLoaded,\r\n canvasCount,\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, {\r\n setCameFromPage,\r\n toggleBathroomVisualizerOpen,\r\n setDefaultSelectionGroup,\r\n setLayoutDataParts,\r\n toggleUserPopup,\r\n setCanvasId,\r\n loadFilters,\r\n toggleSelectionFeatureInfo,\r\n changeMessageBoxState,\r\n showVisualizerTutorial,\r\n addVisualizersLoaded\r\n})(KitchenVisualizer);\r\n","import React, {Fragment} from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport invert from \"lodash/invert\";\r\n\r\nimport {loaderEnable} from \"../ui/loaderView\";\r\nimport {\r\n toggleUserPopup, setCanvasId, setLayoutDataParts, setDefaultSelectionGroup, loadFilters, setCameFromPage,\r\n toggleBathroomVisualizerOpen, toggleSelectionFeatureInfo, changeMessageBoxState,\r\n addVisualizersLoaded } from \"../../actions/actionFunctions\";\r\nimport {\r\n getBathroomVisualizerData,\r\n getBvGroups,\r\n // getNavigationButtons\r\n} from \"../../api/server-api\";\r\nimport ImageCanvasCommonNew from \"../visComponents/imageCanvasCommonNew\";\r\nimport {Layout} from \"./core/layout\";\r\nimport DesktopNavigation from \"./navigation/desktopNavigation\";\r\nimport MobileNavigation from \"./navigation/mobileNavigation\";\r\nimport MainButtons from \"../common/mainButtons\";\r\nimport DemoPoints from \"../common/demoPoints/demoPoints\";\r\nimport MessageBox from \"../popups/messageBox\";\r\n\r\nimport Visualizer from \"../visComponents/visualizer\";\r\nimport VisualizerTutorial from \"../tutorials/visualizerTutorial\";\r\nimport {showVisualizerTutorial} from \"../../actions/tutorialFunctions\";\r\nimport Copyright from \"../ui/copyright\";\r\nimport {LayoutType} from \"./core/constants\";\r\nimport {IS_QKB_UI} from \"../../config\";\r\n\r\nexport const layout = new Layout();\r\n\r\nclass KvSceneVisualizer extends Visualizer {\r\n\r\n static displayName = 'KvSceneVisualizer';\r\n\r\n constructor(props) {\r\n super(props);\r\n this.layout = layout;\r\n }\r\n\r\n componentDidMount() {\r\n console.log(\"kvScene loaded\", );\r\n if (this.props.visualizersLoaded.includes(this.layout.visualizerType)) {\r\n this.setSubscribers();\r\n return false\r\n }\r\n loaderEnable();\r\n Promise.all([\r\n getBathroomVisualizerData(),\r\n this.getQtCategoriesCommon(),\r\n ]).then(baseResponse => {\r\n Promise.all([\r\n Promise.resolve(baseResponse[0]),\r\n getBvGroups(),\r\n Promise.resolve(baseResponse[1])\r\n ])\r\n .then((allResponse) => {\r\n const mainResponse = allResponse[0];\r\n const kvGroupsResponse = allResponse[1].data;\r\n const qtCategories = allResponse[2];\r\n // 1) set default (placeholders)\r\n this.layout.loadNewFeatures(mainResponse);\r\n this.layout.setGroupsItemsCount(kvGroupsResponse); // should be loaded before & after all features are received\r\n return this.setVisualizerInfo(mainResponse, kvGroupsResponse, qtCategories, invert(LayoutType));\r\n })\r\n .then(this.checkShareUrl)\r\n .then(this.onBvLoad)\r\n .then(this.finishLoading);\r\n });\r\n\r\n this.setSubscribers();\r\n // getNavigationButtons();\r\n }\r\n\r\n render() {\r\n\r\n if (!IS_QKB_UI) {\r\n return null\r\n }\r\n\r\n const showPlaceHolders = document.bvConfig ? document.bvConfig.showPlaceholders : false;\r\n const fabricatorSettings = this.props.fabricatorSettings;\r\n const layers = this.layout.getLayers(showPlaceHolders);\r\n const layoutType = this.layout.getCurrentLayoutName();\r\n const layoutScene = this.layout.scene;\r\n const isMobile = this.props.windowWidth < 991;\r\n const showTutorial = this.checkToShowTutorial();\r\n\r\n return (\r\n
    \r\n
    \r\n {(this.props.bvOpened || this.props.bvVisited) ? (\r\n \r\n this.imageCanvas = node}\r\n layoutType={layoutType}\r\n layout={this.layout}\r\n layoutScene={layoutScene}\r\n width={this.props.canvasDimensions.width}\r\n height={this.props.canvasDimensions.height}\r\n useMouseHovering={this.props.useMouseHovering}\r\n useTouchZoom={this.props.useTouchZoom}\r\n />\r\n \r\n \r\n ) : null}\r\n \r\n {!this.state.demoPointClicked && this.props.canvasId ? (\r\n \r\n ) : null}\r\n
    \r\n {(this.layout.initialized && this.props.bvVisited) ? ( // keep navigation opened if someone got to QT and back\r\n isMobile ? (\r\n \r\n ) : (\r\n this.navBar = node}\r\n refreshCB={this.handleRefresh}\r\n setHoveredLayer={this.setHoveredLayer}\r\n canvasId={this.state.canvasId}\r\n renderGreenLayerByZindex={this.renderGreenLayerByZindex}\r\n toggleUserPopup={this.props.toggleUserPopup}\r\n changeMessageBoxState={this.changeMessageBoxState}\r\n setActiveFeature={this.setActiveFeature}\r\n activeFeature={this.state.activeFeature}\r\n fabricatorSettings={fabricatorSettings}\r\n setDemoPointClicked={this.setDemoPointClicked}\r\n />\r\n )\r\n ) : null}\r\n {this.props.cookieAccepted ? : null}\r\n {showTutorial ? : null}\r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {cookieAccepted, windowWidth, visualizersLoaded} = store.serverState;\r\n const {bvOpened, bvVisited, canvasId, showRestorePopup, canvasDimensions, canvasCount} = store.bathroomVisualizerState;\r\n const {mobileNav, desktopNavigationOpened, activeNavigationParentName, activeNavigationChildName} = store.navigationState;\r\n const {isPhoneNumberValidated, userIsLoggedIn} = store.userState;\r\n const {visualizerTutorialIsOpened, visualizerTutorialFinished} = store.tutorialState;\r\n const {initialFlowRoomLayout, initialFlowRoom, initialFlowStep} = store.initialFlowState;\r\n const {qtCategoriesRequested} = store.qtState;\r\n return {\r\n bvOpened,\r\n bvVisited,\r\n mobileNav,\r\n isPhoneNumberValidated,\r\n userIsLoggedIn,\r\n windowWidth,\r\n canvasId,\r\n fabricatorSettings: store.fabricatorState.settings,\r\n desktopNavigationOpened,\r\n activeNavigationParentName,\r\n activeNavigationChildName,\r\n showRestorePopup,\r\n visualizerTutorialIsOpened,\r\n visualizerTutorialFinished,\r\n initialFlowRoomLayout,\r\n initialFlowRoom,\r\n initialFlowStep,\r\n cookieAccepted,\r\n canvasDimensions,\r\n visualizersLoaded,\r\n qtCategoriesRequested,\r\n canvasCount,\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, {\r\n setCameFromPage,\r\n toggleBathroomVisualizerOpen,\r\n setDefaultSelectionGroup,\r\n setLayoutDataParts,\r\n toggleUserPopup,\r\n setCanvasId,\r\n loadFilters,\r\n toggleSelectionFeatureInfo,\r\n changeMessageBoxState,\r\n showVisualizerTutorial,\r\n addVisualizersLoaded\r\n})(KvSceneVisualizer);\r\n","import React, {Fragment} from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport invert from \"lodash/invert\";\r\n\r\nimport {loaderEnable} from \"../ui/loaderView\";\r\nimport {\r\n toggleUserPopup, setCanvasId, setLayoutDataParts, setDefaultSelectionGroup, loadFilters, setCameFromPage,\r\n toggleBathroomVisualizerOpen, toggleSelectionFeatureInfo, changeMessageBoxState,\r\n addVisualizersLoaded } from \"../../actions/actionFunctions\";\r\nimport {\r\n getBathroomVisualizerData,\r\n getBvGroups,\r\n getQtCategories,\r\n getNavigationButtons\r\n} from \"../../api/server-api\";\r\nimport ImageCanvasCommon from \"../visComponents/imageCanvasCommon\";\r\nimport {Layout} from \"./core/layout\";\r\nimport DesktopNavigation from \"./navigation/desktopNavigation\";\r\nimport MobileNavigation from \"./navigation/mobileNavigation\";\r\nimport MainButtons from \"../common/mainButtons\";\r\nimport DemoPoints from \"../common/demoPoints/demoPoints\";\r\nimport MessageBox from \"../popups/messageBox\";\r\n\r\nimport Visualizer from \"../visComponents/visualizer\";\r\nimport VisualizerTutorial from \"../tutorials/visualizerTutorial\";\r\nimport {showVisualizerTutorial} from \"../../actions/tutorialFunctions\";\r\nimport Copyright from \"../ui/copyright\";\r\nimport {LayoutType} from \"./core/constants\";\r\nimport {IS_QKB_UI} from \"../../config\";\r\n\r\nexport const layout = new Layout();\r\n\r\nclass BvSceneVisualizer extends Visualizer {\r\n\r\n static displayName = 'BvSceneVisualizer';\r\n\r\n constructor(props) {\r\n super(props);\r\n this.layout = layout;\r\n }\r\n\r\n componentDidMount() {\r\n if (this.props.visualizersLoaded.includes(this.layout.visualizerType)) {\r\n this.setSubscribers();\r\n return false\r\n }\r\n loaderEnable();\r\n Promise.all([\r\n getBathroomVisualizerData(),\r\n getQtCategories(this.layout.getCurrentLayoutAbbreviation())\r\n ]).then(baseResponse => {\r\n Promise.all([\r\n Promise.resolve(baseResponse[0]),\r\n getBvGroups(),\r\n Promise.resolve(baseResponse[1]),\r\n ])\r\n .then((allResponse) => {\r\n const mainResponse = allResponse[0];\r\n const bvGroupsResponse = allResponse[1].data;\r\n const qtCategories = allResponse[2];\r\n this.layout.loadNewFeatures(mainResponse); // 1) set default (placeholders)\r\n this.layout.setGroupsItemsCount(bvGroupsResponse); // should be loaded before & after all features are received\r\n return this.setVisualizerInfo(mainResponse, bvGroupsResponse, qtCategories, invert(LayoutType));\r\n })\r\n .then(this.checkShareUrl)\r\n .then(this.onBvLoad)\r\n .then(this.finishLoading);\r\n });\r\n\r\n this.setSubscribers();\r\n getNavigationButtons();\r\n }\r\n\r\n render() {\r\n\r\n if (!IS_QKB_UI) {\r\n return null\r\n }\r\n\r\n const showPlaceHolders = document.bvConfig ? document.bvConfig.showPlaceholders : false;\r\n const fabricatorSettings = this.props.fabricatorSettings;\r\n const layers = this.layout.getLayers(showPlaceHolders);\r\n const layoutType = this.layout.getCurrentLayoutName();\r\n const isMobile = this.props.windowWidth < 991;\r\n const showTutorial = this.checkToShowTutorial();\r\n\r\n return (\r\n
    \r\n
    \r\n {this.props.bvOpened || this.props.bvVisited ? (\r\n \r\n this.imageCanvas = node}\r\n layoutType={layoutType}\r\n layout={this.layout}\r\n width={this.props.canvasDimensions.width}\r\n height={this.props.canvasDimensions.height}\r\n useMouseHovering={this.props.useMouseHovering}\r\n useTouchZoom={this.props.useTouchZoom}\r\n />\r\n \r\n \r\n ) : null}\r\n \r\n {!this.state.demoPointClicked && this.props.canvasId ? (\r\n \r\n ) : null}\r\n
    \r\n {(this.layout.initialized && this.props.bvVisited) ? ( // keep navigation opened if someone got to QT and back\r\n isMobile ? (\r\n \r\n ) : (\r\n this.navBar = node}\r\n refreshCB={this.handleRefresh}\r\n setHoveredLayer={this.setHoveredLayer}\r\n canvasId={this.state.canvasId}\r\n renderGreenLayerByZindex={this.renderGreenLayerByZindex}\r\n toggleUserPopup={this.props.toggleUserPopup}\r\n changeMessageBoxState={this.changeMessageBoxState}\r\n setActiveFeature={this.setActiveFeature}\r\n activeFeature={this.state.activeFeature}\r\n fabricatorSettings={fabricatorSettings}\r\n setDemoPointClicked={this.setDemoPointClicked}\r\n />\r\n )\r\n ) : null}\r\n {this.props.cookieAccepted ? : null}\r\n {showTutorial ? : null}\r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {cookieAccepted, windowWidth, visualizersLoaded} = store.serverState;\r\n const {bvOpened, bvVisited, canvasId, showRestorePopup, canvasDimensions, canvasCount} = store.bathroomVisualizerState;\r\n const {mobileNav, desktopNavigationOpened, activeNavigationParentName, activeNavigationChildName} = store.navigationState;\r\n const {isPhoneNumberValidated, userIsLoggedIn} = store.userState;\r\n const {visualizerTutorialIsOpened, visualizerTutorialFinished} = store.tutorialState;\r\n const {initialFlowRoomLayout, initialFlowRoom, initialFlowStep} = store.initialFlowState;\r\n return {\r\n bvOpened,\r\n bvVisited,\r\n mobileNav,\r\n isPhoneNumberValidated,\r\n userIsLoggedIn,\r\n windowWidth,\r\n canvasId,\r\n fabricatorSettings: store.fabricatorState.settings,\r\n desktopNavigationOpened,\r\n activeNavigationParentName,\r\n activeNavigationChildName,\r\n showRestorePopup,\r\n visualizerTutorialIsOpened,\r\n visualizerTutorialFinished,\r\n initialFlowRoomLayout,\r\n initialFlowRoom,\r\n initialFlowStep,\r\n cookieAccepted,\r\n canvasDimensions,\r\n visualizersLoaded,\r\n canvasCount\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, {\r\n setCameFromPage,\r\n toggleBathroomVisualizerOpen,\r\n setDefaultSelectionGroup,\r\n setLayoutDataParts,\r\n toggleUserPopup,\r\n setCanvasId,\r\n loadFilters,\r\n toggleSelectionFeatureInfo,\r\n changeMessageBoxState,\r\n showVisualizerTutorial,\r\n addVisualizersLoaded\r\n})(BvSceneVisualizer);\r\n","import React, {Fragment} from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport invert from \"lodash/invert\";\r\n\r\nimport {loaderEnable} from \"../ui/loaderView\";\r\nimport {\r\n toggleUserPopup, setCanvasId, setLayoutDataParts, setDefaultSelectionGroup, loadFilters, setCameFromPage,\r\n toggleBathroomVisualizerOpen, toggleSelectionFeatureInfo, changeMessageBoxState,\r\n addVisualizersLoaded, addToCart, setFirstLoadedPreset, updateCanvasCount\r\n} from \"../../actions/actionFunctions\";\r\nimport {getBathroomVisualizerData, getBvGroups} from \"../../api/server-api\";\r\nimport {Layout} from \"./core/layout\";\r\n\r\nimport Visualizer from \"../visComponents/visualizer\";\r\nimport {IS_QKB_UI} from \"../../config\";\r\nimport {LayoutType, LOCAL_STORAGE_KEYS} from \"./core/constants\";\r\nimport {setLocalStorageItem} from \"./lookNavigation/lookFunctions\";\r\nimport {setLookOverlayOpened} from \"../../actions/lookFunctions\";\r\nimport {getPassedUserInfo, getSaveTempData} from \"../../api/look-api\";\r\nimport Misc from \"../../misc/misc\";\r\nimport ImageCanvasCommonNew from \"../visComponents/imageCanvasCommonNew\";\r\nimport Copyright from \"../ui/copyright\";\r\nimport MainButtons from \"../common/mainButtons\";\r\nimport MobileNavigation from \"./navigation/mobileNavigation\";\r\nimport DesktopNavigation from \"./navigation/desktopNavigation.js\";\r\nimport MessageBox from \"../popups/messageBox\";\r\nimport VisualizerTutorial from \"../tutorials/visualizerTutorial\";\r\nimport {loadAdditionalVisualizerGroups} from \"../../misc/loadVisualizer\";\r\nimport {showVisualizerTutorial} from \"../../actions/tutorialFunctions\";\r\n\r\nexport const layout = new Layout();\r\n\r\nclass LookVisualizer extends Visualizer {\r\n\r\n static displayName = 'BvLookVisualizer';\r\n\r\n constructor(props) {\r\n super(props);\r\n this.layout = layout;\r\n }\r\n\r\n componentDidMount() {\r\n if (this.props.visualizersLoaded.includes(this.layout.visualizerType)) {\r\n this.setSubscribers();\r\n return false\r\n }\r\n if (!IS_QKB_UI) {\r\n this.props.toggleBathroomVisualizerOpen(true);\r\n }\r\n loaderEnable();\r\n Promise.all([\r\n getBathroomVisualizerData(),\r\n loadAdditionalVisualizerGroups(\"bvLook\"),\r\n this.getQtCategoriesCommon(),\r\n ]).then(baseResponse => {\r\n let otherData = [\r\n Promise.resolve(baseResponse[0]),\r\n Promise.resolve(baseResponse[1]),\r\n Promise.resolve(baseResponse[2]),\r\n getBvGroups(),\r\n ];\r\n const searchParams = new URLSearchParams(\r\n (window.location.search).replace(/amp;/g, \"\")\r\n || (window.location.hash).replace(/(.*)\\?/g, \"\")\r\n || \"\"\r\n );\r\n // console.log(\"searchParams\", searchParams.toString());\r\n if (searchParams && searchParams.get(\"userid\")) {\r\n otherData.push(getPassedUserInfo(searchParams))\r\n }\r\n if (searchParams && (searchParams.get(\"tempID\") || searchParams.get(\"TempID\"))) {\r\n otherData.push(getSaveTempData(searchParams.get(\"tempID\") || searchParams.get(\"TempID\")))\r\n }\r\n Promise.all(otherData)\r\n .then((allResponse) => {\r\n const mainResponse = allResponse[0];\r\n const decorAndAttachmentResponses = Array.isArray(allResponse[1]) ? allResponse[1] : [];\r\n const qtCategories = allResponse[2];\r\n const bvGroupsResponse = allResponse[3];\r\n const userDataResponse = allResponse[4];\r\n const savedTempData = JSON.parse(searchParams && searchParams.get(\"userid\") ? allResponse[5] || null : allResponse[4] || null);\r\n this.layout.loadNewFeatures(Object.assign({}, mainResponse, {\r\n features: [...mainResponse.features, ...decorAndAttachmentResponses]\r\n })); // 1) set default (placeholders)\r\n // this.layout.setGroupsItemsCount(mainResponse);\r\n let userIsLoggedIn = false;\r\n if (userDataResponse && userDataResponse.email) {\r\n userIsLoggedIn = true;\r\n this.needToSaveQuote = !document.kvConfig.jobId;\r\n console.log(\"userDataResponse\", userDataResponse);\r\n const updatedUserInfo = Misc.parseUserResponse(userDataResponse)\r\n setLocalStorageItem(LOCAL_STORAGE_KEYS.introVisited, true);\r\n\r\n this.props.toggleUserPopup({\r\n userPopupOpened: false,\r\n userIsLoggedIn: true,\r\n isPhoneNumberValidated: userDataResponse.isPhoneNumberValidated || !userDataResponse.pendingPhoneVerification,\r\n userInfo: updatedUserInfo,\r\n // email: userDataResponse.email,\r\n encodedUserId: userDataResponse.encodedUserId,\r\n // phoneNumber: userDataResponse.phoneNumber,\r\n // values: userDataResponse.values\r\n })\r\n }\r\n return this.setVisualizerInfo(\r\n mainResponse,\r\n bvGroupsResponse ? bvGroupsResponse.data : {},\r\n qtCategories,\r\n invert(LayoutType),\r\n userIsLoggedIn,\r\n savedTempData\r\n );\r\n })\r\n .then(this.checkShareUrl)\r\n .then(this.onBvLoad)\r\n .then(this.finishLoading);\r\n });\r\n\r\n this.setSubscribers();\r\n }\r\n\r\n render() {\r\n if (!IS_QKB_UI) {\r\n return null\r\n }\r\n\r\n const showPlaceHolders = document.bvConfig ? document.bvConfig.showPlaceholders : false;\r\n const fabricatorSettings = this.props.fabricatorSettings;\r\n const layers = this.layout.getLayers(showPlaceHolders);\r\n const layoutType = this.layout.getCurrentLayoutName();\r\n const layoutScene = this.layout.scene;\r\n const isMobile = this.props.windowWidth < 991;\r\n const showTutorial = this.checkToShowTutorial();\r\n\r\n return (\r\n
    \r\n
    \r\n {this.props.bvOpened || this.props.bvVisited ? (\r\n \r\n this.imageCanvas = node}\r\n layoutType={layoutType}\r\n layout={this.layout}\r\n layoutScene={layoutScene}\r\n width={this.props.canvasDimensions.width}\r\n height={this.props.canvasDimensions.height}\r\n useMouseHovering={this.props.useMouseHovering}\r\n useTouchZoom={this.props.useTouchZoom}\r\n />\r\n \r\n \r\n ) : null}\r\n \r\n
    \r\n {(this.layout.initialized && this.props.bvVisited) ? ( // keep navigation opened if someone got to QT and back\r\n isMobile ? (\r\n \r\n ) : (\r\n this.navBar = node}\r\n refreshCB={this.handleRefresh}\r\n setHoveredLayer={this.setHoveredLayer}\r\n canvasId={this.state.canvasId}\r\n renderGreenLayerByZindex={this.renderGreenLayerByZindex}\r\n toggleUserPopup={this.props.toggleUserPopup}\r\n changeMessageBoxState={this.changeMessageBoxState}\r\n setActiveFeature={this.setActiveFeature}\r\n activeFeature={this.state.activeFeature}\r\n fabricatorSettings={fabricatorSettings}\r\n setDemoPointClicked={this.setDemoPointClicked}\r\n />\r\n )\r\n ) : null}\r\n {this.props.cookieAccepted ? : null}\r\n {showTutorial ? : null}\r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {windowWidth, cookieAccepted, visualizersLoaded} = store.serverState;\r\n const {canvasId} = store.bathroomVisualizerState;\r\n const {isPhoneNumberValidated, userIsLoggedIn} = store.userState;\r\n const {activePreset} = store.bathroomVisualizerState;\r\n\r\n if (!IS_QKB_UI) {\r\n return {\r\n isPhoneNumberValidated,\r\n userIsLoggedIn,\r\n windowWidth,\r\n canvasId,\r\n activePreset,\r\n fabricatorSettings: store.fabricatorState.settings,\r\n qtActiveCategory: store.qtState.qtActiveCategory,\r\n visualizersLoaded,\r\n };\r\n }\r\n\r\n const {bvOpened, bvVisited, showRestorePopup, canvasDimensions, canvasCount} = store.bathroomVisualizerState;\r\n const {mobileNav, desktopNavigationOpened, activeNavigationParentName, activeNavigationChildName} = store.navigationState;\r\n const {visualizerTutorialIsOpened, visualizerTutorialFinished} = store.tutorialState;\r\n const {initialFlowRoomLayout, initialFlowRoom, initialFlowStep} = store.initialFlowState;\r\n const {qtCategoriesRequested} = store.qtState;\r\n\r\n return {\r\n isPhoneNumberValidated,\r\n userIsLoggedIn,\r\n windowWidth,\r\n canvasId,\r\n activePreset,\r\n fabricatorSettings: store.fabricatorState.settings,\r\n qtActiveCategory: store.qtState.qtActiveCategory,\r\n //** qkb ui ** //\r\n bvOpened,\r\n bvVisited,\r\n mobileNav,\r\n desktopNavigationOpened,\r\n activeNavigationParentName,\r\n activeNavigationChildName,\r\n showRestorePopup,\r\n visualizerTutorialIsOpened,\r\n visualizerTutorialFinished,\r\n initialFlowRoomLayout,\r\n initialFlowRoom,\r\n initialFlowStep,\r\n cookieAccepted,\r\n canvasDimensions,\r\n visualizersLoaded,\r\n qtCategoriesRequested,\r\n canvasCount,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setCameFromPage,\r\n toggleBathroomVisualizerOpen,\r\n setDefaultSelectionGroup,\r\n setLayoutDataParts,\r\n toggleUserPopup,\r\n setCanvasId,\r\n loadFilters,\r\n toggleSelectionFeatureInfo,\r\n changeMessageBoxState,\r\n addVisualizersLoaded,\r\n addToCart,\r\n setLookOverlayOpened,\r\n setFirstLoadedPreset,\r\n updateCanvasCount,\r\n showVisualizerTutorial,\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(LookVisualizer)\r\n","import React, {Fragment} from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport {loaderEnable} from \"../ui/loaderView\";\r\nimport {\r\n toggleUserPopup, setCanvasId, setLayoutDataParts, setDefaultSelectionGroup, loadFilters, setCameFromPage,\r\n toggleBathroomVisualizerOpen, toggleSelectionFeatureInfo, changeMessageBoxState,\r\n addVisualizersLoaded } from \"../../actions/actionFunctions\";\r\nimport {\r\n getBathroomVisualizerData,\r\n getBvGroups,\r\n getQtCategories,\r\n getNavigationButtons\r\n} from \"../../api/server-api\";\r\nimport ImageCanvasCommonNew from \"../visComponents/imageCanvasCommonNew\";\r\nimport {Layout} from \"./core/layout\";\r\nimport DesktopNavigation from \"./navigation/desktopNavigation\";\r\nimport MobileNavigation from \"./navigation/mobileNavigation\";\r\nimport MainButtons from \"../common/mainButtons\";\r\nimport DemoPoints from \"../common/demoPoints/demoPoints\";\r\nimport MessageBox from \"../popups/messageBox\";\r\n\r\nimport Visualizer from \"../visComponents/visualizer\";\r\nimport VisualizerTutorial from \"../tutorials/visualizerTutorial\";\r\nimport {showVisualizerTutorial} from \"../../actions/tutorialFunctions\";\r\nimport Copyright from \"../ui/copyright\";\r\nimport {IS_QKB_UI} from \"../../config\";\r\n\r\nexport const layout = new Layout();\r\n\r\nclass FireplaceVisualizer extends Visualizer {\r\n\r\n static displayName = 'FireplaceVisualizer';\r\n\r\n constructor(props) {\r\n super(props);\r\n this.layout = layout;\r\n }\r\n\r\n componentDidMount() {\r\n if (this.props.visualizersLoaded.includes(this.layout.visualizerType)) {\r\n this.setSubscribers();\r\n return false\r\n }\r\n loaderEnable();\r\n Promise.all([\r\n getBathroomVisualizerData(),\r\n getQtCategories(this.layout.getCurrentLayoutAbbreviation())\r\n ]).then(baseResponse => {\r\n Promise.all([\r\n Promise.resolve(baseResponse[0]),\r\n getBvGroups(),\r\n Promise.resolve(baseResponse[1])\r\n ])\r\n .then((allResponse) => {\r\n const mainResponse = allResponse[0];\r\n const kvGroupsResponse = allResponse[1].data;\r\n const qtCategories = allResponse[2];\r\n // 1) set default (placeholders)\r\n this.layout.loadNewFeatures(mainResponse);\r\n this.layout.setGroupsItemsCount(kvGroupsResponse); // should be loaded before & after all features are received\r\n return this.setVisualizerInfo(mainResponse, kvGroupsResponse, qtCategories);\r\n })\r\n .then(this.checkShareUrl)\r\n .then(this.onBvLoad)\r\n .then(this.finishLoading);\r\n });\r\n\r\n this.setSubscribers();\r\n getNavigationButtons(\"kv\");\r\n }\r\n\r\n render() {\r\n\r\n if (!IS_QKB_UI) {\r\n return null\r\n }\r\n\r\n const showPlaceHolders = document.bvConfig ? document.bvConfig.showPlaceholders : false;\r\n const fabricatorSettings = this.props.fabricatorSettings;\r\n const layers = this.layout.getLayers(showPlaceHolders);\r\n const layoutType = this.layout.getCurrentLayoutName();\r\n const isMobile = this.props.windowWidth < 991;\r\n const showTutorial = this.checkToShowTutorial();\r\n\r\n return (\r\n
    \r\n
    \r\n {this.props.bvOpened || this.props.bvVisited ? (\r\n \r\n this.imageCanvas = node}\r\n layoutType={layoutType}\r\n layout={this.layout}\r\n width={this.props.canvasDimensions.width}\r\n height={this.props.canvasDimensions.height}\r\n useMouseHovering={this.props.useMouseHovering}\r\n useTouchZoom={this.props.useTouchZoom}\r\n />\r\n \r\n \r\n ) : null}\r\n \r\n {!this.state.demoPointClicked && this.props.canvasId ? (\r\n \r\n ) : null}\r\n
    \r\n {(this.layout.initialized && this.props.bvVisited) ? ( // keep navigation opened if someone got to QT and back\r\n isMobile ? (\r\n \r\n ) : (\r\n this.navBar = node}\r\n refreshCB={this.handleRefresh}\r\n setHoveredLayer={this.setHoveredLayer}\r\n canvasId={this.state.canvasId}\r\n renderGreenLayerByZindex={this.renderGreenLayerByZindex}\r\n toggleUserPopup={this.props.toggleUserPopup}\r\n changeMessageBoxState={this.changeMessageBoxState}\r\n setActiveFeature={this.setActiveFeature}\r\n activeFeature={this.state.activeFeature}\r\n fabricatorSettings={fabricatorSettings}\r\n setDemoPointClicked={this.setDemoPointClicked}\r\n />\r\n )\r\n ) : null}\r\n {this.props.cookieAccepted ? : null}\r\n {showTutorial ? : null}\r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {cookieAccepted, windowWidth, visualizersLoaded} = store.serverState;\r\n const {bvOpened, bvVisited, canvasId, showRestorePopup, canvasDimensions, canvasCount} = store.bathroomVisualizerState;\r\n const {mobileNav, desktopNavigationOpened, activeNavigationParentName, activeNavigationChildName} = store.navigationState;\r\n const {isPhoneNumberValidated, userIsLoggedIn} = store.userState;\r\n const {visualizerTutorialIsOpened, visualizerTutorialFinished} = store.tutorialState;\r\n const {initialFlowRoomLayout, initialFlowRoom, initialFlowStep} = store.initialFlowState;\r\n return {\r\n bvOpened,\r\n bvVisited,\r\n mobileNav,\r\n isPhoneNumberValidated,\r\n userIsLoggedIn,\r\n windowWidth,\r\n canvasId,\r\n fabricatorSettings: store.fabricatorState.settings,\r\n desktopNavigationOpened,\r\n activeNavigationParentName,\r\n activeNavigationChildName,\r\n showRestorePopup,\r\n visualizerTutorialIsOpened,\r\n visualizerTutorialFinished,\r\n initialFlowRoomLayout,\r\n initialFlowRoom,\r\n initialFlowStep,\r\n cookieAccepted,\r\n canvasDimensions,\r\n visualizersLoaded,\r\n canvasCount\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, {\r\n setCameFromPage,\r\n toggleBathroomVisualizerOpen,\r\n setDefaultSelectionGroup,\r\n setLayoutDataParts,\r\n toggleUserPopup,\r\n setCanvasId,\r\n loadFilters,\r\n toggleSelectionFeatureInfo,\r\n changeMessageBoxState,\r\n showVisualizerTutorial,\r\n addVisualizersLoaded\r\n})(FireplaceVisualizer);\r\n","import invert from 'lodash/invert';\r\nimport snakeCase from 'lodash/snakeCase';\r\n\r\nimport LayoutCommonNew from \"../../visComponents/layoutCommonNew\";\r\nimport {LayoutType, LayoutAbbreviation} from \"./constants\";\r\nimport zIndexes from \"./zIndex\";\r\nimport Other from \"./parts/other\";\r\nimport NonVisualizerSubPart from \"./subparts/nonVisualizerSubPart\";\r\nimport DesignNavigationItem from \"../../visComponents/designNavigationItem\";\r\nimport Background from \"./parts/background\";\r\nimport Floor from \"./parts/floor\";\r\nimport Walls from \"./parts/walls\";\r\nimport {AVAILABLE_VISUALIZER_TYPES} from \"../../../config\";\r\nimport Globals from \"./parts/globals\";\r\nimport Cabinet from \"./parts/cabinet\";\r\nimport Accessories from \"./parts/accessories\";\r\n\r\nexport class LaundryRoomLayout extends LayoutCommonNew {\r\n\r\n /**\r\n * @type {int}\r\n */\r\n defaultType = LayoutType.Layout41;\r\n type = this.defaultType;\r\n scene = \"1\";\r\n visualizerType = AVAILABLE_VISUALIZER_TYPES.LaundryRoom;\r\n localStorageKey = \"LaundryRoomState\";\r\n layersBinding = \"LaundryRoom\";\r\n layoutNames = LayoutAbbreviation;\r\n layoutTypes = LayoutType;\r\n layoutThumbnails = {};\r\n zIndexes = zIndexes.layouts;\r\n excludedPartIdsFromHover = [\"decor_\", \"background_bg\", \"walls_ceiling\", \"attachment\"];\r\n\r\n constructor(props) {\r\n super(props);\r\n this.parts[Globals.id] = new Globals();\r\n this.parts[Background.id] = new Background();\r\n this.parts[Cabinet.id] = new Cabinet();\r\n this.parts[Walls.id] = new Walls();\r\n this.parts[Floor.id] = new Floor();\r\n this.parts[Accessories.id] = new Accessories();\r\n this.parts[Other.id] = new Other();\r\n Object.values(this.parts).forEach(part => part.layout = this);\r\n }\r\n\r\n getCurrentLayoutName(type = this.type) {\r\n return invert(LayoutType)[type];\r\n }\r\n\r\n getCurrentLayoutAbbreviation() {\r\n return LayoutAbbreviation[this.getCurrentLayoutName()]\r\n }\r\n\r\n addNonVisualizerSubPart(featureGroupName){\r\n const otherParent = this.parts[Other.id];\r\n const partId = snakeCase(featureGroupName);\r\n let relatedItem = otherParent.relatedItems.find(relatedItem => relatedItem.partId === partId);\r\n if (!relatedItem) {\r\n relatedItem = new NonVisualizerSubPart(true, partId, featureGroupName);\r\n relatedItem.getParent = () => otherParent;\r\n otherParent.relatedItems.push(relatedItem);\r\n }\r\n return new DesignNavigationItem(relatedItem.partName, relatedItem)\r\n }\r\n\r\n addSpecificPropertiesToLocalStorage(bvState, useNames, returnAllFeatures= false) {\r\n const cabinet = this.parts[Cabinet.id];\r\n if (cabinet && cabinet.slatWall) {\r\n bvState.slatWallType = cabinet.slatWall.slatWallType;\r\n }\r\n return super.addSpecificPropertiesToLocalStorage(bvState, useNames, returnAllFeatures)\r\n }\r\n\r\n setActiveFeaturesFromObject(...props) {\r\n const cabinet = this.parts[Cabinet.id];\r\n if (cabinet && cabinet.slatWall && props.slatWallType) {\r\n cabinet.slatWall.slatWallType = props.slatWallType;\r\n }\r\n return super.setActiveFeaturesFromObject(...props)\r\n }\r\n\r\n}\r\n\r\nexport default new LaundryRoomLayout()\r\n","import React, {Component} from 'react';\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport {BathTubType} from \"../bvComponent/core/constants\";\r\nimport {changeQTRoutePath, changeRoutePath} from \"../../misc/changeRoutePath\";\r\nimport {getCurrentLayout} from \"../appLayout\";\r\n\r\nexport default class ProjectScopeFunctions extends Component {\r\n\r\n goToMaterialsPageCommon = (subPart, parentName) => {\r\n const layout = getCurrentLayout();\r\n let nextSubPartIndex = 0;\r\n // console.log('subPart', subPart);\r\n if (subPart.partId === \"bathtub\") {\r\n // console.log('subPart', subPart.getParent());\r\n subPart.getParent().handleSubTypeClick(BathTubType.FreeStanding)\r\n }\r\n const subPartName = subPart.partName.replace(/ /g,\"-\").toLowerCase();\r\n if (layout.qtCategories) {\r\n const qtCategory = layout.qtCategories.find(qtCategory => qtCategory.name === parentName);\r\n nextSubPartIndex = qtCategory.subParts.findIndex(subPartItem => {\r\n return subPartItem.part.partId === subPart.partId\r\n });\r\n this.props.setQtActiveCategory(parentName);\r\n } else if (subPart.getParent) {\r\n const subParts = subPart.getParent().subParts(false);\r\n nextSubPartIndex = subParts.findIndex(subPartItem => {\r\n return subPartItem.part.partName.replace(/ /g,\"-\").toLowerCase() === subPartName\r\n });\r\n }\r\n this.props.changeActivePartRelatedItemIndex(nextSubPartIndex);\r\n const parentSimple = (subPart.partName === \"Floor\" && subPart.partId !== \"shower_floor\")\r\n || subPart.partName === \"Toilet\"\r\n || (subPart.partName === \"Ceiling\" &&\r\n (document.kvConfig.visualizerType === \"Bathroom\" || document.kvConfig.visualizerType === \"BV\"))\r\n || subPart.partName === \"Window\";\r\n this.props.toggleSelectionWindow(true, parentSimple ? subPart.partName : subPart.getParent().partName);\r\n this.props.setCameFromPage('quote-design');\r\n if (layout.qtCategories) {\r\n changeQTRoutePath(parentName, nextSubPartIndex);\r\n } else {\r\n changeRoutePath(subPart.getParent ? subPart.getParent() : subPart, nextSubPartIndex, false);\r\n }\r\n };\r\n\r\n getBathroomHomeSections = () => {\r\n const layout = getCurrentLayout();\r\n let\r\n vanityItems = [],\r\n showerAndBathTubItems = [],\r\n otherItems = [];\r\n\r\n if (layout.qtCategories) {\r\n // console.log(\"parentParts\", parentParts);\r\n return layout.qtCategories.map((qtCategory) => {\r\n return {\r\n title: qtCategory.name,\r\n // items: this.checkForWallsComplexGroup(qtCategory)\r\n items: qtCategory.subParts\r\n }\r\n });\r\n }\r\n\r\n layout.getFeatures().forEach((parentGroup) => {\r\n // console.log(partData);\r\n let subParts = parentGroup.subParts();\r\n if (parentGroup) {\r\n if (parentGroup.partName === \"Vanity\") {\r\n subParts.forEach((subPart) => {\r\n if (subPart.part.partId !== \"accent_wall\") {\r\n vanityItems.push(subPart)\r\n }\r\n });\r\n } else if (parentGroup.partName === \"Shower\") {\r\n subParts.forEach((subPart) => {\r\n showerAndBathTubItems.push(subPart)\r\n });\r\n } else if (parentGroup.partName === \"Shower Tub Combo\") {\r\n const excluded = [\"wall_configuration\", \"shower_interior_wall\", \"shower_interior_wall_accent\", \"shower_fixture\", \"shower_door\", \"shower_door_handle\"];\r\n subParts.forEach((subPart) => {\r\n if (!excluded.includes(subPart.part.partId)) {\r\n showerAndBathTubItems.push(subPart)\r\n }\r\n });\r\n } else if (parentGroup.partName === \"Bathtub\") {\r\n // console.log(parentGroup);\r\n if (parentGroup.bathTubBody) {\r\n showerAndBathTubItems.push({\r\n text: parentGroup.bathTubBody.partName,\r\n part: parentGroup.bathTubBody\r\n });\r\n }\r\n if (parentGroup.bathTubFixture) {\r\n showerAndBathTubItems.push({\r\n text: parentGroup.bathTubFixture.partName,\r\n part: parentGroup.bathTubFixture\r\n });\r\n }\r\n } else {\r\n subParts.forEach((subPart) => {\r\n if ((!subPart.part.partId.includes(\"wall\") || subPart.part.partId === \"wall_c\")\r\n && subPart.part.partId !== \"shower_fixture\" && !subPart.part.disableOnHomeSections) {\r\n otherItems.push(subPart)\r\n }\r\n });\r\n }\r\n }\r\n });\r\n\r\n return [\r\n {\r\n title: ,\r\n items: vanityItems,\r\n },\r\n {\r\n title: ,\r\n items: showerAndBathTubItems,\r\n },\r\n {\r\n title: ,\r\n items: otherItems,\r\n },\r\n\r\n ]\r\n };\r\n\r\n getKitchenHomeSections = () => {\r\n const layout = getCurrentLayout();\r\n if (layout.qtCategories) {\r\n // console.log(\"parentParts\", parentParts);\r\n return layout.qtCategories.map((qtCategory) => {\r\n return {\r\n title: qtCategory.name,\r\n // items: this.checkForWallsComplexGroup(qtCategory)\r\n items: qtCategory.subParts\r\n }\r\n });\r\n } else {\r\n const parentParts = layout.getFeatures();\r\n return parentParts.map((parentGroup) => {\r\n return {\r\n title: parentGroup.partName,\r\n items: parentGroup.subParts(false)\r\n }\r\n });\r\n }\r\n };\r\n\r\n getSections = () => {\r\n switch (document.kvConfig.visualizerType) {\r\n case \"Kitchen\":\r\n case \"KV\":\r\n case \"kvMaster\":\r\n case \"kvScene\":\r\n default:\r\n return this.getKitchenHomeSections();\r\n case \"Bathroom\":\r\n case \"BV\":\r\n case \"bvScene\":\r\n case \"bvLook\":\r\n return this.getBathroomHomeSections();\r\n }\r\n };\r\n\r\n}\r\n","import {connect} from \"react-redux\";\r\n\r\nimport {setQuotes} from \"../../../actions/roomsFunctions\";\r\nimport Analytics from \"../../../analytics\";\r\nimport {\r\n changeSqftFeaturesPopup,\r\n setSqftFromFeature,\r\n setSqftMeasureUnit,\r\n setSquareFeet\r\n} from \"../../../actions/sqftFunctions\";\r\nimport {setMaterialsPageSubSteps} from \"../../../actions/selectionFunctions\";\r\nimport {MEASURE_UNITS, SQFT_POST_MESSAGE_ACTIONS} from \"../constants\";\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\nimport {\r\n changeCartItemQuantity,\r\n changeSelectionInfoQuantity,\r\n setCameFromPage,\r\n toggleSelectionFeatureInfo\r\n} from \"../../../actions/actionFunctions\";\r\nimport {toggleShowManualCalculation} from \"../../../actions/sqftManualCalculationFunctions\";\r\nimport {clearAllMenusEvents} from \"../components/canvas/core/workspace/workspaceEvents\";\r\nimport {prepareSQFTData} from \"../components/canvas/core/workspace/workspaceDataMapper\";\r\nimport {useCloseSQFTCalc} from \"./useCloseSQFTCalc\";\r\nimport sqftShapeIntersectionsManager from \"../components/canvas/store/sqftShapeIntersectionsManager\";\r\nimport {saveSQFTDataToQuote} from \"../helpers/sqftQuotesHelper\";\r\n\r\nconst WithAddToQuote = (props) => {\r\n const {activeQuoteIndex} = props;\r\n const {children} = props;\r\n const {closeSQFTCalc} = useCloseSQFTCalc();\r\n\r\n const handleAddToQuoteClick = async () => {\r\n props.changeSqftFeaturesPopup({\r\n opened: true,\r\n sqftPassedData: null,\r\n })\r\n //update slabs features just in case they wasn't changed\r\n sqftShapeIntersectionsManager.updateShapesIntersections();\r\n sqftShapeIntersectionsManager.updateSlabPlaceholderFeatureId();\r\n\r\n let sqftCalcData = await prepareSQFTData();\r\n clearAllMenusEvents();\r\n await saveSQFTDataToQuote(sqftCalcData);\r\n setDataToQt(sqftCalcData, true);\r\n };\r\n\r\n const setDataToQt = (data, stayOnSqft = false) => {\r\n if (data) {\r\n Analytics.sendDataEnteredEvent(\"square-foot-calc-data-entered\");\r\n //this.props.setSqftMeasureUnit(data.measureUnit);\r\n const sqftPassedData = Object.assign({}, data, {\r\n canvasImage: \"\",\r\n sqFtSlabImage: \"\",\r\n sqFtSlabCalcImage:\"\",\r\n sqftApplianceImages: \"\",\r\n images3D: \"\"\r\n });\r\n console.log(\"sqft passedData\", sqftPassedData);\r\n let isLocationNotUsesPopup = false; //always use new popup\r\n // (\r\n // window.location.href.includes(\"quotekitchenandbath\")\r\n // //|| window.location.href.includes(\"quotekandb\")\r\n // //|| window.location.href.includes(\"quotesflooring\")\r\n // //|| window.location.href.includes(\"localhost\")\r\n // )\r\n // && !window.location.href.includes(\"use_sqft_popup=1\");\r\n\r\n if (isLocationNotUsesPopup || !props.useSqftCartPopup) {\r\n setEdgesQuantity(data);\r\n setRadiusQuantity(data);\r\n setBacksplashesQuantity(data);\r\n setCountertopsQuantity(data);\r\n stayOnSqft = false;\r\n } else {\r\n props.changeSqftFeaturesPopup({\r\n opened: true,\r\n sqftPassedData,\r\n })\r\n }\r\n\r\n // this.addSQFTCanvasImageToDocuments(data); // not used anymore! we keep sqFtCalcImage in the quote\r\n\r\n // we already saving data on handleAddToQuoteClick\r\n // // set backup data\r\n // if (!isSqftPassedDataEmpty(data)) {\r\n // updateActiveQuoteWithSQFTData(data);\r\n // }\r\n\r\n // set squareFeet\r\n props.setSquareFeet(data.squareFeet); // param needed to be set to call confirm popup\r\n // set quoting tool sub steps (only if minimum 2 items added)\r\n props.setMaterialsPageSubSteps({\r\n edges: data.edges && data.edges.length > 1 ? data.edges : [],\r\n backsplashes: data.backsplashes && data.backsplashes.length > 1 ? data.backsplashes : [],\r\n });\r\n }\r\n\r\n if (!stayOnSqft) {\r\n closeSQFTCalc();\r\n }\r\n\r\n saveSQFTHistory();\r\n };\r\n\r\n // const saveSQFTData = (data) => {\r\n // const {quotes, activeQuoteIndex} = store.getState().quotesState;\r\n // const newQuotes = [...quotes.map((quote, qIndex) => {\r\n // if (qIndex === activeQuoteIndex) {\r\n // quote.sqFtCalcData = Object.assign({}, data)\r\n // }\r\n // return quote\r\n // })];\r\n //\r\n // setQuotes(newQuotes);\r\n // };\r\n\r\n const setEdgesQuantity = (data) => {\r\n const dataEdges = data.edges;\r\n const edgesIdsObject = {};\r\n dataEdges.forEach((edge) => { // here we need to check all added edges with the same it and plus their length\r\n const edgeLength = data.measureUnit === MEASURE_UNITS.Metric ? edge.length : Math.ceil(edge.length);\r\n const edgeId = +edge.id;\r\n edgesIdsObject[edgeId] = edgesIdsObject[edgeId] ? edgesIdsObject[edgeId] + edgeLength : edgeLength;\r\n });\r\n Object.keys(edgesIdsObject).forEach(edgeId => {\r\n if (data.measureUnit === MEASURE_UNITS.Metric) {\r\n edgesIdsObject[edgeId] = +(edgesIdsObject[edgeId]).toFixed(2)\r\n }\r\n [\"center_island_edge\", \"edge_profile\"].forEach(partId => {\r\n setSubPartQuantity(partId, edgesIdsObject[edgeId], +edgeId)\r\n })\r\n })\r\n };\r\n\r\n const setRadiusQuantity = (data) => {\r\n const radiusCount = [...data.radii, ...data.angles].length;\r\n // let quantity = 0;\r\n // dataRadiuses.forEach(radius => {\r\n // quantity += +radius;\r\n // });\r\n if (radiusCount) {\r\n setSubPartQuantity(\"radius\", radiusCount)\r\n }\r\n };\r\n\r\n const setBacksplashesQuantity = (data) => {\r\n const dataBacksplashes = data.backsplashes;\r\n let quantity = 0;\r\n dataBacksplashes.forEach(backsplash => {\r\n quantity += backsplash.length;\r\n });\r\n if (quantity) {\r\n const backsplashLength = data.measureUnit === MEASURE_UNITS.Metric ? quantity : Math.ceil(quantity);\r\n setSubPartQuantity(\"backsplash\", backsplashLength)\r\n }\r\n };\r\n\r\n const setCountertopsQuantity = (data) => {\r\n const layout = getCurrentLayout();\r\n if (data.manualCalculate && data.squareFeet) { // manual calculate\r\n setSubPartQuantity(\"countertop\", data.squareFeet);\r\n setSubPartQuantity(\"center_island_countertop\", data.squareFeet);\r\n } else {\r\n let countertopSquareFeet = 0;\r\n let centerIslandCountertopSquareFeet = 0;\r\n data.countertops.forEach(shape => {\r\n if (shape.squareFeet) { // countertop & center_island_countertop\r\n (shape.partId === \"countertop\")\r\n ? countertopSquareFeet += shape.squareFeet\r\n : centerIslandCountertopSquareFeet += shape.squareFeet;\r\n }\r\n });\r\n if (layout.qtCategories) {\r\n const countertopIsAdded = countertopIsAddedToQtCategory(\"countertop\");\r\n const centerIslandCountertopIsAdded = countertopIsAddedToQtCategory(\"center_island_countertop\");\r\n if (countertopIsAdded && centerIslandCountertopIsAdded) { // both\r\n setSubPartQuantity(\"countertop\", countertopSquareFeet);\r\n setSubPartQuantity(\"center_island_countertop\", centerIslandCountertopSquareFeet);\r\n } else if (countertopIsAdded && !centerIslandCountertopIsAdded) { // only countertop is added to QTCategories\r\n setSubPartQuantity(\"countertop\", data.squareFeet);\r\n } else if (!countertopIsAdded && centerIslandCountertopIsAdded) {\r\n setSubPartQuantity(\"center_island_countertop\", data.squareFeet);\r\n }\r\n } else {\r\n setSubPartQuantity(\"countertop\", countertopSquareFeet);\r\n setSubPartQuantity(\"center_island_countertop\", centerIslandCountertopSquareFeet);\r\n }\r\n }\r\n };\r\n\r\n const countertopIsAddedToQtCategory = (partId) => {\r\n let countertopExist = false;\r\n const layout = getCurrentLayout();\r\n layout.qtCategories.forEach(qtCategory => {\r\n const subParts = qtCategory.subParts;\r\n const neededSubPart = subParts.find(subPart => subPart.part.partId === partId);\r\n if (neededSubPart) {\r\n countertopExist = true;\r\n }\r\n });\r\n return countertopExist\r\n };\r\n\r\n const setSubPartQuantity = (partId, quantity, dbFeatureId = null) => {\r\n /*** if dbFeatureId is passed - we need to set to the Feature quantity, not the feature group! ***/\r\n const layout = getCurrentLayout();\r\n // 1) update cart items quantity\r\n const cartItem = props.cartItems.find(cartItem => {\r\n return (dbFeatureId\r\n ? cartItem.cartFeature.dbFeature.id === dbFeatureId\r\n : cartItem.partId === partId) && cartItem.currentQuote === activeQuoteIndex;\r\n });\r\n if (cartItem) {\r\n props.changeCartItemQuantity(cartItem, quantity);\r\n }\r\n // 2) update feature info (current) quantity\r\n const activeFeature = props.selectionFeatureInfo;\r\n const updateCurrentFeature = dbFeatureId\r\n ? activeFeature && activeFeature.dbFeature.id === dbFeatureId\r\n : activeFeature && activeFeature.partId === partId\r\n if (updateCurrentFeature) {\r\n props.changeSelectionInfoQuantity(quantity)\r\n }\r\n // 3) update not current quantities\r\n if (layout.qtCategories) {\r\n layout.qtCategories.forEach(qtCategory => {\r\n setFeatureGroupSqftQuantity(qtCategory.subParts, partId, quantity, dbFeatureId)\r\n })\r\n } else {\r\n layout.getFeatures().forEach(parentItem => {\r\n setFeatureGroupSqftQuantity(parentItem.subParts(), partId, quantity, dbFeatureId)\r\n })\r\n }\r\n };\r\n\r\n const setSqftQuantityToSubPartFinal = (dbFeatureId, neededSubPart, quantity) => {\r\n if (dbFeatureId) {\r\n const navItems = neededSubPart.part.navigationSubItems();\r\n const neededFeature = navItems.find(navItem => navItem.part.dbFeature.id === dbFeatureId);\r\n if (neededFeature) {\r\n if (!neededFeature.part.sqftQuantity) {\r\n neededFeature.part.sqftQuantity = {};\r\n }\r\n neededFeature.part.sqftQuantity[activeQuoteIndex] = quantity\r\n } else {\r\n // console.log(\"feature not found, what should we do?\");\r\n }\r\n } else {\r\n if (!neededSubPart.part.sqftQuantity) {\r\n neededSubPart.part.sqftQuantity = {};\r\n }\r\n neededSubPart.part.sqftQuantity[activeQuoteIndex] = quantity\r\n }\r\n };\r\n\r\n const setFeatureGroupSqftQuantity = (subParts, partId, quantity, dbFeatureId) => {\r\n const neededSubPart = subParts.find(subPart => subPart.part.partId === partId);\r\n if (neededSubPart) {\r\n if (!neededSubPart.part.allFeaturesReceived && neededSubPart.part.partId.includes(\"edge\")) {\r\n //todo sqftReact\r\n //this.checkIfAllFeaturesReceived(neededSubPart, \"\", () => {\r\n setSqftQuantityToSubPartFinal(dbFeatureId, neededSubPart, quantity)\r\n //})\r\n } else {\r\n setSqftQuantityToSubPartFinal(dbFeatureId, neededSubPart, quantity)\r\n }\r\n }\r\n };\r\n\r\n // const closeSQFTCalc = (payload) => {\r\n // sendPostMessageToSqft(SQFT_POST_MESSAGE_ACTIONS.stopRender);\r\n // clearAllMenusEvents();\r\n // setSqftFromFeature(null);\r\n // Analytics.sendClickEvent('sqft-close');\r\n // if (payload && payload.measureUnit) {\r\n // props.setSqftMeasureUnit(payload.measureUnit);\r\n // }\r\n // const leaveSqft = () => {\r\n // const redirectToPage = cameFromPage && cameFromPage !== \"sqft\" ? cameFromPage : \"materials\"\r\n // closeSQFTTool(redirectToPage, changeWizardStepRoute);\r\n // if (isObject(cameFromPage) && cameFromPage.partId) {\r\n // props.toggleSelectionFeatureInfo(cameFromPage);\r\n // }\r\n // props.setCameFromPage(\"sqft\");\r\n // };\r\n // if (isFirefox()) {\r\n // setTimeout(() => {\r\n // leaveSqft();\r\n // }, 0)\r\n // } else {\r\n // leaveSqft();\r\n // }\r\n // };\r\n\r\n const sendPostMessageToSqft = () => {\r\n // if (this.iframeElement && this.iframeElement.contentWindow) {\r\n // this.iframeElement.contentWindow.postMessage({action, payload}, window.location.href);\r\n // }\r\n };\r\n // const resetData() {\r\n // closeSQFTCalc();\r\n // sendPostMessageToSqft(SQFT_POST_MESSAGE_ACTIONS.resetHistory);\r\n // }\r\n const saveSQFTHistory = () => {\r\n sendPostMessageToSqft(SQFT_POST_MESSAGE_ACTIONS.saveHistory);\r\n };\r\n\r\n return children(handleAddToQuoteClick, prepareSQFTData);\r\n};\r\n\r\nconst mapStateToProps = (store) => ({\r\n measureUnit: store.sqftState.measureUnit,\r\n quotes: store.quotesState.quotes,\r\n qtActiveCategory: store.qtState.qtActiveCategory,\r\n activeRoomType: store.sqftMenuState.activeRoomType,\r\n cartItems: store.cartState.cartItems,\r\n selectionFeatureInfo: store.selectionState.selectionFeatureInfo,\r\n activeQuoteIndex: store.quotesState.activeQuoteIndex,\r\n sqftVisited: store.sqftState.sqftFeaturesPopup.visited,\r\n isSlabToolVisited: store.sqftSlabState.isSlabToolVisited,\r\n useSqftCartPopup: store.sqftState.sqftFeaturesPopup.enabled,\r\n cameFromPage: store.cartState.cameFromPage\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n setQuotes,\r\n setSquareFeet,\r\n setMaterialsPageSubSteps,\r\n changeSqftFeaturesPopup,\r\n toggleSelectionFeatureInfo,\r\n setCameFromPage,\r\n changeCartItemQuantity,\r\n changeSelectionInfoQuantity,\r\n setSqftMeasureUnit,\r\n toggleShowManualCalculation,\r\n setSqftFromFeature,\r\n};\r\n\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(WithAddToQuote);\r\n","import EventManager from \"../canvas/store/sqftEventManager\";\r\nimport workspace from \"../canvas/core/workspace\";\r\nimport config from \"../canvas/store/sqftConfig\";\r\nimport MiteredController from \"../canvas/core/controls/mitered\";\r\nimport FreeDraw from \"../canvas/core/controls/freeDraw\";\r\nimport UnderlaymentController from \"../canvas/core/controls/underlayment\";\r\n\r\nexport const resetEvents = function () {\r\n EventManager.stealCursor(true);\r\n EventManager.resetCursor(self);\r\n workspace.setAllowEdges(false);\r\n workspace.setAllowBumpoutEdges(false);\r\n};\r\n\r\nexport const handleResizeClick = function () {\r\n EventManager.stealCursor(true);\r\n EventManager.resetCursor(this);\r\n workspace.setAllowEdges(true);\r\n workspace.setAllowLineHighlight(true);\r\n setTimeout(function () {\r\n workspace.setAllowLineHighlight(false)\r\n }, 1000)\r\n};\r\n\r\nexport const handleSpacerClick = function () {\r\n // EventManager.stealCursor(true);\r\n // EventManager.resetCursor(this);\r\n // workspace.setAllowEdges(true);\r\n // workspace.setAllowLineHighlight(true);\r\n // setTimeout(function () {\r\n // workspace.setAllowLineHighlight(false)\r\n // }, 1000)\r\n};\r\n\r\nexport const handleRotateClick = function () {\r\n //EventManager.stealCursor(true);\r\n //EventManager.setCursor(\"rotate-left\", this, true);\r\n EventManager.stealCursor(true);\r\n config.workspace.menuItemActive = \"rotate-left\";\r\n};\r\n\r\nexport const handleWallClick = function () {\r\n EventManager.stealCursor(true);\r\n config.workspace.menuItemActive = \"wall\";\r\n FreeDraw.init();\r\n};\r\n\r\nexport const handleDuplicateClick = function () {\r\n EventManager.stealCursor(true);\r\n EventManager.setCursor(\"duplicate\", this, true);\r\n config.workspace.menuItemActive = \"duplicate\";\r\n};\r\n\r\nexport const handleAngleClick = function () {\r\n EventManager.stealCursor(true);\r\n EventManager.resetCursor(self);\r\n config.highlight.rotateAngle = true;\r\n workspace.getShapes().forEach((shape) => {\r\n if (Array.isArray(shape.rotateAngleParts) && shape.rotateAngleParts.length) {\r\n // todo fix bumpout rotation and remove this\r\n if (shape.isWithBumpout()) return;\r\n /////////////////////////////////////////\r\n shape.activateRotateAngle();\r\n }\r\n });\r\n};\r\n\r\nexport const handleTextClick = function () {\r\n};\r\n\r\nexport const handleResetClick = function () {\r\n EventManager.stealCursor(true);\r\n EventManager.resetCursor(self);\r\n};\r\n\r\n//todo sqft-react\r\nexport const handleMiteredClick = () => {\r\n EventManager.stealCursor(true);\r\n EventManager.resetCursor(self);\r\n\r\n // let cursor = new Cursor();\r\n // cursor.setCursorImage('./images/cursors/plus_blue.png');\r\n\r\n if (workspace.miteredController === null) {\r\n workspace.miteredController = new MiteredController();\r\n }\r\n workspace.miteredController.createCursor();\r\n workspace.miteredController.registerEvents();\r\n\r\n workspace.setAllowMiteredEdges(true);\r\n workspace.setAllowLineHighlight(true);\r\n\r\n //Bumpout.addBumpout_onClick();\r\n setTimeout(function () {\r\n workspace.setAllowLineHighlight(false)\r\n }, 1000)\r\n}\r\n\r\n//todo sqft-react\r\nexport const handleUnderlaymentClick = () => {\r\n EventManager.stealCursor(true);\r\n EventManager.resetCursor();\r\n\r\n // let cursor = new Cursor();\r\n // cursor.setCursorImage('./images/cursors/plus_blue.png');\r\n\r\n if (workspace.underlaymentController === null) {\r\n workspace.underlaymentController = new UnderlaymentController();\r\n }\r\n workspace.underlaymentController.createCursor();\r\n workspace.underlaymentController.registerEvents();\r\n\r\n workspace.setAllowMiteredEdges(true);\r\n workspace.setAllowLineHighlight(true);\r\n\r\n //Bumpout.addBumpout_onClick();\r\n setTimeout(function () {\r\n workspace.setAllowLineHighlight(false)\r\n }, 1000)\r\n}\r\n","import React, {Fragment} from \"react\";\r\nimport {connect} from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\nimport {injectIntl} from \"react-intl\";\r\n\r\nimport CloseIcon from \"@mui/icons-material/Close\";\r\nimport IconButton from \"@mui/material/IconButton\";\r\nimport SearchIcon from '@mui/icons-material/Search';\r\n\r\nimport LookViewTypeSwitcher from \"../../../../../../../look/lookNavigation/lookMain/lookViewTypeSwitcher\";\r\nimport {\r\n SIDEBAR_NAVIGATION_BUTTONS,\r\n SIDEBAR_NAVIGATION_BUTTONS_LEVEL3\r\n} from \"../../../../../../constants\";\r\nimport {\r\n setSQFTActiveButton,\r\n setSQFTActiveLevel3Button,\r\n setSQFTMenuOpened\r\n} from \"../../../../../../../../actions/sqftMenuFunctions\";\r\nimport {setLookActiveCategory} from \"../../../../../../../../actions/lookFunctions\";\r\nimport {showFilters} from \"../../../../../../../../actions/actionFunctions\";\r\nimport {setGroheFiltersSearchText} from \"../../../../../../../../actions/groheFunctions\";\r\nimport {getFeatureGroupName} from \"../../../../../../../../misc/helpers\";\r\nimport {getCurrentLayout} from \"../../../../../../../appLayout\";\r\n\r\nconst SQFTFeaturesHeader = (props) => {\r\n const { headerTitle, partId } = props;\r\n //const {searchInputValue , setSearchInput} = props;\r\n const { intl, setSQFTActiveButton, setSQFTMenuOpened, activeLevel3Button, setSQFTActiveLevel3Button,\r\n setLookActiveCategory, showFilters, isFiltersOpened, setGroheFiltersSearchText, fabricatorData } = props;\r\n\r\n const handleClose = () => {\r\n setSQFTMenuOpened(SIDEBAR_NAVIGATION_BUTTONS.move);\r\n setSQFTActiveButton(SIDEBAR_NAVIGATION_BUTTONS.move);\r\n }\r\n\r\n const handleSearchClick = (e) => {\r\n void e;\r\n if (activeLevel3Button === SIDEBAR_NAVIGATION_BUTTONS_LEVEL3.filters) {\r\n setSQFTActiveLevel3Button(null);\r\n setGroheFiltersSearchText(\"\");\r\n showFilters(false);\r\n } else {\r\n setLookActiveCategory(partId); // set filters featureGroup\r\n showFilters(!isFiltersOpened);\r\n setSQFTActiveLevel3Button(SIDEBAR_NAVIGATION_BUTTONS_LEVEL3.filters);\r\n }\r\n }\r\n\r\n // const handleInputChange = (e) => {\r\n // setSearchInput(e.target.value);\r\n // }\r\n let featureGroupName = \"\";\r\n if (partId) {\r\n const layout = getCurrentLayout();\r\n const featureGroup = layout.getFeatureGroupByPartId(partId);\r\n featureGroupName = getFeatureGroupName(featureGroup, intl, fabricatorData);\r\n }\r\n\r\n return (\r\n \r\n
    \r\n \r\n \r\n \r\n
    \r\n { headerTitle ? headerTitle : featureGroupName }\r\n
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    \r\n {/*
    */}\r\n {/* */}\r\n {/* /!**!/*/}\r\n {/*
    */}\r\n
    \r\n )\r\n}\r\n\r\nSQFTFeaturesHeader.protoTypes = {\r\n featureTitleId: PropTypes.string,\r\n partId: PropTypes.string\r\n}\r\n\r\nconst mapStateToProps = (store) => ({\r\n activeLevel3Button: store.sqftMenuState.activeLevel3Button,\r\n isFiltersOpened: store.filterState.showFilters,\r\n fabricatorData: store.fabricatorState,\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n setSQFTActiveButton,\r\n setSQFTMenuOpened,\r\n setSQFTActiveLevel3Button,\r\n setLookActiveCategory,\r\n showFilters,\r\n setGroheFiltersSearchText\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(SQFTFeaturesHeader)\r\n);\r\n","import * as types from './actionTypes';\r\n\r\nexport const setIframeIntegrationRequest = (iframeIntegrationRequest) => ({\r\n type: types.SET_IFRAME_INTEGRATION_REQUEST,\r\n payload: {iframeIntegrationRequest}\r\n})\r\n\r\nexport const setIframeIntegrationResponse = (iframeIntegrationResponse) => ({\r\n type: types.SET_IFRAME_INTEGRATION_RESPONSE,\r\n payload: {iframeIntegrationResponse}\r\n})\r\n","import React, {useState} from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\n\r\nimport IconButton from \"@mui/material/IconButton\";\r\nimport ExpandMore from \"@mui/icons-material/ExpandMore\";\r\n\r\nimport FeatureThumbnail from \"../../visComponents/featureThumbnail\";\r\nimport FeatureName from \"../../visComponents/featureName\";\r\nimport LookFeaturePrice from \"../lookNavigation/lookMain/lookListFeature/lookFeaturePrice\";\r\nimport LookListMainFeatureActions from \"./listFeatureActions/lookListMainFeatureActions\";\r\nimport LookFeatureQuantity from \"./lookFeatureQuantity\";\r\nimport {cartItemInterface} from \"../../shoppingCart/cartItemInterface\";\r\nimport LookListBundleFeatures from \"./lookListBundleFeatures\";\r\nimport {cartItemInStock, featureIsBundle, getBundledFeatures} from \"../lookNavigation/lookFunctions2\";\r\nimport {IS_LIXIL_SERVERS, IS_PRODUCT_JOURNEY} from \"../../../config\";\r\nimport GroheCartItemActions from \"../grohe/groheCart/groheCartItemActions\";\r\nimport LookListMainFeatureCheckbox from \"./lookListMainFeatureCheckbox\";\r\nimport LookListMainFeatureShipping from \"./lookListMainFeatureShipping\";\r\nimport {getFeatureGroupName, getFeatureIsLocked} from \"../../../misc/helpers\";\r\nimport LookFeatureSku from \"../lookNavigation/lookMain/lookFeature/lookFeatureSku\";\r\n\r\nconst LookListMainFeature = (props) => {\r\n\r\n const {intl, cartItem, quantity, cartItems, isBundleChild, showUnlockCalculations, showCartItems, cItemsAddedToParentCart,\r\n isMobile, withShipping, isPhoneNumberValidated, fabricatorData} = props;\r\n\r\n const fabricatorSettings = fabricatorData.settings;\r\n const {cartFeature} = cartItem;\r\n const [bundleExpanded, setBundleExpanded] = useState(true);\r\n\r\n const outOfStock = (\r\n \r\n \r\n \r\n );\r\n\r\n const expandBundleButton = (\r\n setBundleExpanded(!bundleExpanded)}>\r\n \r\n \r\n );\r\n\r\n const relatedFeatures = getBundledFeatures(cartFeature);\r\n const isBundle = featureIsBundle(cartFeature, cartItems);\r\n const inStock = cartItemInStock(cartItem);\r\n const isBundleParent = isBundle && cartFeature.partId === \"shower_fixture\" && relatedFeatures.length > 1;\r\n\r\n const showPriceLocked = getFeatureIsLocked(cartFeature) || (fabricatorSettings.enableQuote && !isPhoneNumberValidated);\r\n\r\n return (\r\n
  • \r\n
    \r\n {withShipping ? null : }\r\n
    \r\n \r\n
    \r\n
    \r\n \r\n {isBundle\r\n ? : null}\r\n \r\n

    \r\n {IS_LIXIL_SERVERS\r\n ? \r\n : cartFeature.getParent ? getFeatureGroupName(cartFeature.getParent(), intl, fabricatorData) : null}\r\n

    \r\n {!withShipping ? (\r\n

    \r\n \r\n {/*{isInStock(lookActiveFeature) ? null : (*/}\r\n {/* */}\r\n {/* */}\r\n {/**/}\r\n {/*)}*/}\r\n

    \r\n ) : null}\r\n {withShipping ? : null}\r\n
    \r\n {(isMobile && withShipping) || !fabricatorSettings.showPricing ? null : (\r\n
    \r\n {isBundleParent ? null : (\r\n inStock ? : outOfStock\r\n )}\r\n
    \r\n )}\r\n {isBundle ? (\r\n
    \r\n {expandBundleButton}\r\n
    \r\n ) : null}\r\n {isBundleParent ? null : (\r\n
    \r\n \r\n
    \r\n )}\r\n {(isMobile && withShipping) || !fabricatorSettings.showPricing ? null\r\n : IS_PRODUCT_JOURNEY\r\n ? \r\n : }\r\n
    \r\n {isBundle && bundleExpanded ? : null}\r\n
  • \r\n )\r\n};\r\n\r\nLookListMainFeature.propTypes = {\r\n cartItem: PropTypes.shape(cartItemInterface).isRequired,\r\n withShipping: PropTypes.bool,\r\n}\r\n\r\nconst mapStateToProps = (store, ownProps) => {\r\n const {lookExpanded, lookViewType} = store.lookState;\r\n const {cartItems, cItemsAddedToParentCart} = store.cartState;\r\n const {showUnlockCalculations, showCartItems} = store.unlockCalculationsState;\r\n const {isMobile} = store.serverState;\r\n const {isPhoneNumberValidated} = store.userState;\r\n const fabricatorData = store.fabricatorState;\r\n\r\n return {\r\n lookExpanded,\r\n lookViewType,\r\n quantity: ownProps.cartItem.quantity,\r\n cartItems,\r\n showUnlockCalculations,\r\n showCartItems,\r\n cItemsAddedToParentCart,\r\n isMobile,\r\n fabricatorData,\r\n isPhoneNumberValidated,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(LookListMainFeature)\r\n)\r\n","import React, {PureComponent} from 'react';\r\nimport { hashHistory } from \"react-router\";\r\nimport classnames from 'classnames';\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nclass HomeButton extends PureComponent {\r\n render() {\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nexport default HomeButton\r\n","import React from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\nimport $ from 'jquery';\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport {\r\n toggleSelectionWindow, setCameFromPage, setQtActiveCategory, changeActivePartRelatedItemIndex\r\n} from \"../../actions/actionFunctions\";\r\nimport Analytics from './../../analytics';\r\nimport {getCurrentLayout} from \"../appLayout\";\r\nimport ProjectScopeFunctions from '../projectScope/projectScopeFunctions';\r\n\r\nclass MobileMenu extends ProjectScopeFunctions {\r\n\r\n static propTypes = {\r\n smallButton: PropTypes.bool,\r\n smallButtonClassName: PropTypes.string\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n toggle: false,\r\n showRelatedItems: false,\r\n showSubNav: false\r\n };\r\n }\r\n\r\n componentWillUnmount() {\r\n $(document).off('click', this.handleMobileBlur);\r\n }\r\n\r\n handleItemClick = (bvDataPart) => {\r\n Analytics.sendClickEvent(\"mobile-menu-item\");\r\n const layout = getCurrentLayout();\r\n if(bvDataPart === \"Return to Website\") {\r\n this.setState({showSubNav: true});\r\n } else {\r\n $(document).off('click', this.handleMobileBlur);\r\n if (layout.qtCategories) {\r\n const qtCategory = layout.qtCategories.find(qtCategory => qtCategory.name === bvDataPart);\r\n this.goToMaterialsPageCommon(qtCategory.subParts[0].part, bvDataPart);\r\n } else {\r\n this.goToMaterialsPageCommon(layout.parts[bvDataPart].subParts(false)[0].part, bvDataPart);\r\n }\r\n }\r\n };\r\n\r\n handleBack = () => {\r\n if(this.state.showSubNav) {\r\n this.setState({showSubNav: false});\r\n } else {\r\n this.handleToggleDropdown();\r\n }\r\n };\r\n\r\n handleToggleDropdown = () => {\r\n Analytics.sendClickEvent(\"mobile-menu-toggle-\" + (this.state.toggle ? 'show': 'hide'));\r\n this.setState({\r\n toggle: !this.state.toggle,\r\n showSubNav: false\r\n }, () => {\r\n this.state.toggle\r\n ? $(document).on('click', this.handleMobileBlur)\r\n : $(document).off('click', this.handleMobileBlur)\r\n })\r\n };\r\n\r\n handleMobileBlur = (e) => {\r\n const navClick = e.target.closest('[class*=\"mobmenu\"]');\r\n const backButtonClick = e.target.closest('.ui-back');\r\n if (!navClick && !backButtonClick) {\r\n this.handleToggleDropdown();\r\n }\r\n };\r\n\r\n getMenuItems = () => {\r\n const layout = getCurrentLayout();\r\n if (!layout) {\r\n return []\r\n }\r\n if (this.props.mobileNav && this.props.mobileNav.length > 0 && window.location.href.includes(\"materials\")) {\r\n return [\"Return to Website\"]\r\n }\r\n let menu = (layout.qtCategories)\r\n ? layout.qtCategories.map(qtCategory => qtCategory.name)\r\n : [...this.props.layoutParts]\r\n if (this.props.mobileNav && this.props.mobileNav.length > 0) {\r\n menu.unshift(\r\n \"Return to Website\"\r\n );\r\n }\r\n return menu\r\n };\r\n\r\n render() {\r\n\r\n const menuItems = this.getMenuItems();\r\n\r\n return menuItems.length ? (\r\n
    \r\n {this.props.smallButton ? (\r\n \r\n ) : (\r\n \r\n )}\r\n
    \r\n
    \r\n \r\n
    \r\n {this.props.mobileNav && this.props.mobileNav.length > 0 ?\r\n \r\n : null }\r\n \r\n
    \r\n
    \r\n ) : null\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n layoutParts: store.stepsState.layoutParts,\r\n mobileNav: store.navigationState.mobileNav\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, {\r\n toggleSelectionWindow,\r\n setCameFromPage,\r\n setQtActiveCategory,\r\n changeActivePartRelatedItemIndex\r\n})(MobileMenu);\r\n","import React from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport {connect} from \"react-redux\";\r\nimport {injectIntl} from \"react-intl\";\r\n\r\nimport {toFixedFeatureCost, TAX_DISCOUNT_PCT, getFeatureUnit, getPriceWithCurrency} from \"../../../misc/helpers\";\r\nimport {cartItemInterface} from \"../../shoppingCart/cartItemInterface\";\r\nimport {getPriceWithIncluded} from \"../../../misc/priceFunctions\";\r\nimport FeaturePriceInput from \"./featurePriceInput\";\r\n\r\nconst FeatureInfoPrice = (props) => {\r\n\r\n let {\r\n mainFeaturePrice = false,\r\n selectionFeatureInfo,\r\n showDiscount = false,\r\n fabricatorData,\r\n isPhoneNumberValidated,\r\n intl,\r\n unitAfter,\r\n withTotalSlabCost,\r\n cartItemEditFeature,\r\n qtActiveCategory,\r\n showPrice,\r\n } = props;\r\n const fabricatorSettings = fabricatorData.settings;\r\n\r\n if (mainFeaturePrice && fabricatorSettings.leadCaptureShoppingCart && !isPhoneNumberValidated) {\r\n return null\r\n }\r\n\r\n if ((typeof showPrice !== 'undefined') && !showPrice && !(document.kvConfig.isBackend && selectionFeatureInfo && selectionFeatureInfo.dbFeature\r\n && selectionFeatureInfo.dbFeature.priceEditable)) {\r\n return null\r\n }\r\n\r\n selectionFeatureInfo = props.feature || selectionFeatureInfo;\r\n\r\n let quantity = 1;\r\n if (mainFeaturePrice) { // price is changing depending on quantity\r\n quantity = (props.accItemQuantity || (props.accItemQuantity === 0))\r\n ? props.accItemQuantity\r\n : props.selectionInfoQuantity || 1\r\n }\r\n const price = toFixedFeatureCost(selectionFeatureInfo, quantity, qtActiveCategory, withTotalSlabCost, cartItemEditFeature);\r\n const salePercentage = TAX_DISCOUNT_PCT;\r\n const priceOld = Math.trunc((price + price*salePercentage/100) * 100) / 100;\r\n\r\n if (mainFeaturePrice) {\r\n return (\r\n
    \r\n
    \r\n {getPriceWithIncluded(price, selectionFeatureInfo, fabricatorData, intl.messages)}\r\n
    \r\n {/*
    (${selectionFeatureInfo.dbFeature.unit || \"Each\"})
    */}\r\n
    \r\n )\r\n }\r\n\r\n const unit = getFeatureUnit(selectionFeatureInfo, intl, fabricatorData, quantity);\r\n\r\n const getPriceSection = () => {\r\n\r\n // if unitAfter then it is row item, we don't need it to show in row view\r\n if (!unitAfter && document.kvConfig.isBackend && selectionFeatureInfo && selectionFeatureInfo.dbFeature\r\n && selectionFeatureInfo.dbFeature.priceEditable) {\r\n return \r\n }\r\n\r\n return (\r\n
    \r\n \r\n {!price\r\n ? getPriceWithIncluded(price, selectionFeatureInfo, fabricatorData, intl.messages)\r\n : unitAfter\r\n ? getPriceWithCurrency(fabricatorSettings, price, selectionFeatureInfo)\r\n : `${getPriceWithCurrency(fabricatorSettings, price, selectionFeatureInfo)} (${unit})`}\r\n \r\n {price && unitAfter ? ({unit}) : null}\r\n
    \r\n )\r\n }\r\n\r\n return (\r\n
    \r\n {showDiscount && price ? {getPriceWithCurrency(fabricatorSettings, priceOld, selectionFeatureInfo)} : null}\r\n {getPriceSection()}\r\n {showDiscount && price ? (\r\n \r\n {`${intl.formatMessage({id: \"quotingTool.featureInfo.discountSavePercent\"})} ${getPriceWithCurrency(fabricatorSettings, Math.trunc((priceOld - price) * 100) / 100, selectionFeatureInfo)} (${salePercentage}%)`}\r\n \r\n ) : null}\r\n
    \r\n )\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n selectionFeatureInfo: store.selectionState.selectionFeatureInfo,\r\n featureInfoCount: store.selectionState.featureInfoCount, // to update component when price is changed\r\n fabricatorData: store.fabricatorState,\r\n isPhoneNumberValidated: store.userState.isPhoneNumberValidated,\r\n selectionInfoQuantity: store.selectionState.selectionInfoQuantity,\r\n qtActiveCategory: store.qtState.qtActiveCategory,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n\r\n};\r\n\r\nFeatureInfoPrice.propTypes = {\r\n feature: PropTypes.object,\r\n mainFeaturePrice: PropTypes.bool,\r\n accItemQuantity: PropTypes.number,\r\n size: PropTypes.string,\r\n unitAfter: PropTypes.bool,\r\n withTotalSlabCost: PropTypes.bool,\r\n showPrice: PropTypes.bool,\r\n cartItemEditFeature: PropTypes.shape(cartItemInterface),\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(FeatureInfoPrice)\r\n);\r\n","export const getListItemHeight = (props) => {\r\n\r\n const {isMobile, selectionWindowView, itemsList} = props;\r\n\r\n // console.log(\"itemsList\", itemsList);\r\n\r\n if (isMobile || !itemsList || !itemsList.current) {\r\n return 0\r\n }\r\n let widthPercentage = 32.3;\r\n switch(selectionWindowView) {\r\n case 1:\r\n widthPercentage = 32.3;\r\n break;\r\n case 2:\r\n widthPercentage = 24;\r\n break;\r\n case 3:\r\n widthPercentage = 19;\r\n break;\r\n default:\r\n break;\r\n }\r\n return Math.round(itemsList.current.clientWidth*widthPercentage/100);\r\n\r\n};\r\n\r\nexport const shouldReplaceSelectionInfoFeature = (selectedFeature) => {\r\n if ((document.kvConfig.visualizerType === \"bvScene\" || document.kvConfig.visualizerType === \"bvLook\")\r\n && selectedFeature.getParent) {\r\n const featureG = selectedFeature.getParent();\r\n if (featureG && featureG.oneLayerPosition && featureG.activeFeature\r\n && (featureG.activeFeature.dbFeature.id !== selectedFeature.dbFeature.id)\r\n && featureG.activeFeature.getMatchingFeatureName && selectedFeature.getMatchingFeatureName\r\n && (featureG.activeFeature.getMatchingFeatureName() === selectedFeature.getMatchingFeatureName())) {\r\n selectedFeature = featureG.activeFeature; // we changed left change to right in nav position modal\r\n }\r\n }\r\n return selectedFeature\r\n}\r\n","import React, {Component, Fragment} from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {connect} from \"react-redux\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\n\r\nimport {\r\n setCameFromPage,\r\n toggleSelectionFeatureInfo\r\n} from \"../../../actions/actionFunctions\";\r\n\r\nimport {UserPopupTypes} from \"../../visComponents/constants\";\r\nimport Analytics from \"../../../analytics\";\r\nimport {getFeatureIsLocked, toFixedFeatureCost} from '../../../misc/helpers';\r\nimport FeatureThumbnail from \"../../visComponents/featureThumbnail\";\r\nimport FeatureName from \"../../visComponents/featureName\";\r\nimport FeatureCartItemsCount from \"../featureCartItemsCount\";\r\nimport {getPriceWithIncluded} from \"../../../misc/priceFunctions\";\r\nimport Config from \"../../../config\";\r\nimport {wizardGroupInterface} from \"../../../interfaces/wizardItemInterface\";\r\nimport {shouldReplaceSelectionInfoFeature} from \"../../qkbPages/materialsCommon/materialsCommonFunctions\";\r\n// import MaterialsWizardAddToCartAndSkipButton\r\n// from \"../../qkbPages/materialsWizard/materialsWizardAddToCartAndSkipButton\";\r\n\r\nclass SelectionGridItem extends Component {\r\n\r\n static propTypes = {\r\n currentFeature: PropTypes.object.isRequired,\r\n handleFeatureClick: PropTypes.func.isRequired,\r\n checkIfFeatureSelected: PropTypes.func.isRequired,\r\n styles: PropTypes.object.isRequired,\r\n handleUserLoginClick: PropTypes.func.isRequired,\r\n isWizard: PropTypes.bool,\r\n wizardGroup: PropTypes.shape(wizardGroupInterface),\r\n };\r\n\r\n // handleInfoClick = () => {\r\n // const {isPhoneNumberValidated, fabricatorData, currentFeature, handleUserLoginClick} = this.props;\r\n // const fabricatorSettings = fabricatorData.settings;\r\n //\r\n // if ((fabricatorSettings.leadCaptureOnQuote && !(document.kvConfig.isBackend && document.kvConfig.jobId && document.kvConfig.canSaveQuote)) && (!currentFeature.part.dbFeature.unlocked && !isPhoneNumberValidated)){\r\n // handleUserLoginClick();\r\n // } else {\r\n // toggleSelectionFeatureInfo(currentFeature.part);\r\n // }\r\n // };\r\n\r\n goToFeatureInfo = () => {\r\n const selectedFeature = shouldReplaceSelectionInfoFeature(this.props.currentFeature.part);\r\n this.props.toggleSelectionFeatureInfo(selectedFeature);\r\n this.props.setCameFromPage(\"materials\"); // no more visualizer or shoppingcart switch\r\n };\r\n\r\n render() {\r\n\r\n const {currentFeature, fabricatorData, isPhoneNumberValidated, styles, showAdvancedQuoting, qtActiveCategory, intl,\r\n language, isWizard, wizardGroup} = this.props;\r\n const selected = this.props.checkIfFeatureSelected(currentFeature.part);\r\n const fabricatorSettings = this.props.fabricatorData.settings;\r\n const featureIsLocked = getFeatureIsLocked(currentFeature.part);\r\n\r\n const hidePriceNoCart = isWizard && wizardGroup && wizardGroup.hidePriceNoCart;\r\n const wizardSkipAndAddToCartButtonVisible = isWizard && wizardGroup && (wizardGroup.skipProductInfo || hidePriceNoCart);\r\n\r\n const getQuoteEnabled = fabricatorSettings.enableQuote && !featureIsLocked;\r\n const quoteOrUnlockButtonVisible = (featureIsLocked || (getQuoteEnabled && !isPhoneNumberValidated))\r\n && !wizardSkipAndAddToCartButtonVisible;\r\n\r\n const showPrice = fabricatorSettings.showPricing && !fabricatorData.hideCheckoutBreakdownCost && !featureIsLocked\r\n && !fabricatorData.hidePricesFromUser && !hidePriceNoCart;\r\n\r\n const isAddToCartButtonVisible = selected && fabricatorSettings.showPricing && !featureIsLocked && !quoteOrUnlockButtonVisible && !showAdvancedQuoting\r\n && !wizardSkipAndAddToCartButtonVisible;\r\n\r\n const infoButtonVisible = !wizardSkipAndAddToCartButtonVisible;\r\n\r\n const price = toFixedFeatureCost(currentFeature.part, 1, qtActiveCategory);\r\n\r\n return (\r\n
    this.props.handleFeatureClick(currentFeature, event)}\r\n onDoubleClick={infoButtonVisible ? this.goToFeatureInfo : null}>\r\n \r\n {currentFeature.part.vanitySize ?\r\n {currentFeature.part.vanitySize}\" : null\r\n }\r\n \r\n {selected ? (\r\n
    \r\n {isAddToCartButtonVisible ? (\r\n \r\n ) : null}\r\n {/*{wizardSkipAndAddToCartButtonVisible*/}\r\n {/* ? */}\r\n {/* : null}*/}\r\n {quoteOrUnlockButtonVisible ? (\r\n \r\n ) : null}\r\n {infoButtonVisible ? : null}\r\n
    \r\n ) : null}\r\n {/*{currentFeature.part.notAvailableInVisualizer ? (*/}\r\n {/*Not in Visualizer*/}\r\n {/*) : null}*/}\r\n
    \r\n {showPrice ? (\r\n \r\n {getPriceWithIncluded(price, currentFeature.part, fabricatorData, intl.messages)}\r\n \r\n ) : null}\r\n {featureIsLocked ? null : }\r\n
    \r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {language} = store.serverState;\r\n return {\r\n isPhoneNumberValidated: store.userState.isPhoneNumberValidated,\r\n fabricatorData: store.fabricatorState,\r\n filterGroups: store.filterState.filterGroups,\r\n showAdvancedQuoting: store.advancedQuotingState.showAdvancedQuoting,\r\n qtActiveCategory: store.qtState.qtActiveCategory,\r\n language,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n toggleSelectionFeatureInfo,\r\n setCameFromPage\r\n}\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(SelectionGridItem)\r\n);\r\n","import PropTypes from \"prop-types\";\r\n\r\nexport const shiftFilterTitleInterface = {\r\n shiftTitleIndex: PropTypes.number,\r\n filterValue: PropTypes.object.isRequired,\r\n elementIndex: PropTypes.number,\r\n positionTop: PropTypes.number,\r\n columnPosition: PropTypes.number,\r\n type: PropTypes.string\r\n};\r\n","import React, {useEffect} from 'react';\r\nimport {connect} from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\nimport {getCurrentLayout} from \"../appLayout\";\r\nimport {setStaticCanvasImage} from \"../../actions/visualizerFunctions\";\r\nimport {getRoomImageFromQtCategory} from \"../../misc/categorySwitchingFunctions\";\r\nimport {getCommonVisualizerType} from \"../../config\";\r\n\r\nconst HardcodedCanvasImage = (props) => {\r\n\r\n const {disableLoader, enableLoader, staticCanvasImage, fabricatorData, qtActiveCategory, setStaticCanvasImage,\r\n activePartRelatedItemIndex, activeQuoteIndex, cartItems, visualizerIsChanging} = props;\r\n\r\n useEffect(() => {\r\n // console.log(\"qtActiveCategory\", qtActiveCategory);\r\n if (!fabricatorData.settings.useCategorySwitching || !qtActiveCategory || !window.location.href.includes(\"materials\")) {\r\n return null\r\n }\r\n\r\n const layout = getCurrentLayout();\r\n if (!layout.qtCategories) {\r\n return null\r\n }\r\n const currentRoomName = qtActiveCategory.trim().toLowerCase();\r\n const currentQtCat = layout.qtCategories.find(qtCategory => qtCategory.name === qtActiveCategory);\r\n\r\n const {fabricatorSubscriptions} = fabricatorData;\r\n\r\n if (currentRoomName !== getCommonVisualizerType().toLowerCase()\r\n && currentQtCat\r\n && currentQtCat.subParts[activePartRelatedItemIndex]\r\n && currentQtCat.subParts[activePartRelatedItemIndex].part.partId !== \"room\"\r\n && (!fabricatorData.settings.allowVisualizerSwitching || !fabricatorSubscriptions.some(subscription => subscription && subscription.service.toLowerCase() === currentRoomName))) {\r\n // allowVisualizerSwitching is turned off - show image, or check, if there are no available visualizers with clicked room\r\n setStaticCanvasImage(getRoomImageFromQtCategory(qtActiveCategory, fabricatorData.settings));\r\n } else if (staticCanvasImage) {\r\n setStaticCanvasImage(\"\");\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [qtActiveCategory])\r\n\r\n useEffect(() => {\r\n if (visualizerIsChanging) {\r\n return\r\n }\r\n setStaticCanvasImage(getRoomImageFromQtCategory(\"\", activeQuoteIndex));\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [activeQuoteIndex, cartItems, visualizerIsChanging]) // update when visualizer is switched\r\n\r\n if (!staticCanvasImage) {\r\n return null\r\n }\r\n\r\n return (\r\n
    \r\n disableLoader ? disableLoader() : null}\r\n onLoadStart={() => enableLoader ? enableLoader() : null}\r\n alt=\"\"\r\n src={staticCanvasImage} />\r\n
    \r\n )\r\n};\r\n\r\nHardcodedCanvasImage.propTypes = {\r\n enableLoader: PropTypes.func,\r\n disableLoader: PropTypes.func,\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const {staticCanvasImage} = store.bathroomVisualizerState;\r\n const fabricatorData = store.fabricatorState;\r\n const {qtActiveCategory} = store.qtState;\r\n const {activePartRelatedItemIndex} = store.selectionState;\r\n const {activeQuoteIndex} = store.quotesState;\r\n const {cartItems} = store.cartState;\r\n const {visualizerIsChanging} = store.serverState;\r\n\r\n return {\r\n staticCanvasImage,\r\n fabricatorData,\r\n qtActiveCategory,\r\n activePartRelatedItemIndex,\r\n activeQuoteIndex,\r\n cartItems,\r\n visualizerIsChanging,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setStaticCanvasImage\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(HardcodedCanvasImage);\r\n","import React from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport {FormattedMessage} from \"react-intl\";\r\nimport {loaderDisable, loaderEnable} from \"./loaderView\";\r\nimport {getNavigationButtons} from \"../../api/server-api\";\r\nimport NoInternetIcon from \"./icons/noInternetIcon\";\r\n\r\nconst NoInternetOverlay = (props) => {\r\n\r\n // const {networkConnection, showAdvancedQuoting, isMobile} = props;\r\n const {networkConnection} = props;\r\n\r\n if (networkConnection) { // show only if internet is offline\r\n return null\r\n }\r\n\r\n const retryConnectionClick = async () => {\r\n loaderEnable();\r\n await getNavigationButtons(true);\r\n loaderDisable();\r\n }\r\n\r\n return (\r\n //
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n )\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const {networkConnection, isMobile} = store.serverState;\r\n const {showAdvancedQuoting} = store.advancedQuotingState;\r\n return {\r\n networkConnection,\r\n isMobile,\r\n showAdvancedQuoting,\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps)(NoInternetOverlay)\r\n","import React, {Fragment} from \"react\";\r\n\r\nexport default {\r\n \"vanity_faucet\": (\r\n \r\n ),\r\n \"bathtub_fixture\": (\r\n \r\n ),\r\n \"bathtub_body\": (\r\n \r\n ),\r\n // \"shower_fixture\": (\r\n // \r\n // \r\n // \r\n // \r\n // \r\n // \r\n // \r\n // \r\n // \r\n // \r\n // \r\n // \r\n // \r\n // ),\r\n \"shower_fixture\": (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ),\r\n \"shower_head\": (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ),\r\n \"shower_arm\": (\r\n \r\n \r\n \r\n \r\n \r\n ),\r\n \"shower_head_bundle\": (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ),\r\n \"shower_door\": (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ),\r\n \"shower_wall\": (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ),\r\n \"shower_pan_combo\": (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ),\r\n \"hand_shower_kit\": (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ),\r\n \"replacement_tub\": (\r\n \r\n \r\n \r\n \r\n ),\r\n \"toilet\": (\r\n \r\n \r\n \r\n \r\n \r\n ),\r\n \"vanity_sink\": (\r\n \r\n \r\n \r\n \r\n ),\r\n \"vanity_pedestal_sink\": (\r\n \r\n \r\n \r\n \r\n \r\n ),\r\n \"vanity_countertop\": (\r\n \r\n \r\n \r\n \r\n ),\r\n \"submenu_accessories\": (\r\n \r\n \r\n \r\n ),\r\n \"vanity_cabinet\": (\r\n \r\n ),\r\n \"vanity_console\": (\r\n \r\n \r\n \r\n ),\r\n \"vanity_legs\": (\r\n \r\n \r\n \r\n \r\n \r\n \r\n ),\r\n \"vanity_middle\": (\r\n \r\n ),\r\n \"vanity_washstand\": (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ),\r\n \"vanity_ptrap\": (\r\n \r\n ),\r\n \"soap_dish\": (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ),\r\n \"glass_holder\": (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ),\r\n \"paper_holder\": (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ),\r\n \"robe_hook\": (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ),\r\n \"towel_bar\": (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ),\r\n \"towel_ring\": (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ),\r\n \"corner_shelf\": (\r\n \r\n ),\r\n \"grab_bar\": (\r\n \r\n \r\n \r\n \r\n \r\n ),\r\n \"shower_seats\": (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ),\r\n //*** KITCHEN ICONS ***//\r\n \"faucet\": (\r\n \r\n ),\r\n \"backsplash\": (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ),\r\n \"sink\": (\r\n \r\n \r\n \r\n \r\n ),\r\n \"top_cabinet\": (\r\n \r\n \r\n \r\n \r\n \r\n ),\r\n \"bottom_cabinet\": (\r\n \r\n \r\n \r\n \r\n \r\n ),\r\n \"hood\": (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ),\r\n \"countertop\": (\r\n \r\n \r\n \r\n \r\n \r\n ),\r\n \"crown_molding\": (\r\n \r\n ),\r\n \"range\": (\r\n \r\n \r\n \r\n ),\r\n \"oven\": (\r\n \r\n \r\n \r\n ),\r\n \"fridge\": (\r\n \r\n \r\n \r\n \r\n \r\n ),\r\n \"handle\": (\r\n \r\n ),\r\n \"stove\": (\r\n \r\n ),\r\n \"center_island_stovetop\": (\r\n \r\n ),\r\n \"center_island_countertop\": (\r\n \r\n ),\r\n \"center_island_faucet\": (\r\n \r\n ),\r\n \"center_island_sink\": (\r\n \r\n \r\n \r\n \r\n ),\r\n \"floor\": (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ),\r\n \"bathroom_floor\": (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ),\r\n \"kitchen_floor\": (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ),\r\n \"edge_profile\": (\r\n \r\n \r\n \r\n \r\n \r\n \r\n ),\r\n \"center_island_edge\": (\r\n \r\n \r\n \r\n \r\n \r\n \r\n ),\r\n \"vanity_backsplash\": (\r\n \r\n \r\n \r\n \r\n \r\n ),\r\n \"wall_union\": (\r\n \r\n ),\r\n};\r\n","import React from \"react\";\r\nimport {connect} from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport {getPriceWithCurrency, toFixedPrice} from \"../../../../../misc/helpers\";\r\nimport {featureInterface} from \"../../../../../interfaces/featureInterface\";\r\nimport LookFeaturePrice from \"./lookFeaturePrice\";\r\n\r\nconst LookFeaturePairPrice = (props) => {\r\n\r\n const {lookFeature, fabricatorSettings} = props;\r\n\r\n if (fabricatorSettings.showSalePrices && (typeof lookFeature.dbFeature.fabricatorCost == \"number\")\r\n && (lookFeature.dbFeature.fabricatorCost !== lookFeature.dbFeature.cost)) {\r\n return (\r\n
    \r\n \r\n {/* old price is cost property, the new one is fabricatorCost*/}\r\n {getPriceWithCurrency(fabricatorSettings, toFixedPrice(lookFeature.dbFeature.cost), lookFeature)}\r\n \r\n \r\n \r\n \r\n
    \r\n )\r\n }\r\n\r\n return \r\n};\r\n\r\nLookFeaturePairPrice.propTypes = {\r\n lookFeature: PropTypes.shape(featureInterface),\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {settings} = store.fabricatorState;\r\n return {\r\n fabricatorSettings: settings,\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps)(LookFeaturePairPrice)\r\n","import React from \"react\";\r\nimport {connect} from \"react-redux\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\nimport {withRouter} from \"react-router-dom\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport Button from \"@mui/material/Button\";\r\nimport IconButton from \"@mui/material/IconButton\";\r\n\r\nimport Analytics, {PRODUCT_JOURNEY_ANALYTIC_EVENTS} from \"../../../../../analytics\";\r\nimport {enableSquareFootage, setSqftFromFeature, setSquareFootageGroup} from \"../../../../../actions/sqftFunctions\";\r\nimport {setCameFromPage} from \"../../../../../actions/actionFunctions\";\r\nimport {GroheSQFTIcon} from \"../../../../common/icons\";\r\nimport {featureInterface} from \"../../../../../interfaces/featureInterface\";\r\nimport {canShowSqftButtonForFeature, canShowSqftCabinetButtonForFeature} from \"../../../../../misc/helpers\";\r\nimport {SQFT_GROUP} from \"../../../../sqft/constants\";\r\n\r\nconst GroheFeatureSQFTButton = (props) => {\r\n\r\n const {featureOpened, shopPageOpened, setCameFromPage, setSqftFromFeature, className, isIcon, intl,\r\n fabricatorSettings, enableSquareFootage, setSquareFootageGroup} = props;\r\n\r\n if (featureOpened) {\r\n if (!canShowSqftButtonForFeature(featureOpened, fabricatorSettings) && !canShowSqftCabinetButtonForFeature(featureOpened, fabricatorSettings)) {\r\n return null\r\n }\r\n }\r\n\r\n const handleSQFTButtonClick = () => {\r\n Analytics.sendClickEvent(shopPageOpened\r\n ? PRODUCT_JOURNEY_ANALYTIC_EVENTS.shopSQFTButton\r\n : PRODUCT_JOURNEY_ANALYTIC_EVENTS.productFeatureSQFT);\r\n if (featureOpened) {\r\n setSqftFromFeature({cartFeature: featureOpened});\r\n setCameFromPage(featureOpened);\r\n }\r\n // change url to get cabinets group\r\n // const sqftUrl = (featureOpened && canShowSqftCabinetButtonForFeature(featureOpened, fabricatorSettings))\r\n // ? ROUTES.sqft + \"?cabinets=1\"\r\n // : ROUTES.sqft\r\n // history.push(sqftUrl);\r\n\r\n // use redux to get cabinets group\r\n if (featureOpened && canShowSqftCabinetButtonForFeature(featureOpened, fabricatorSettings)) {\r\n setSquareFootageGroup(SQFT_GROUP.cabinets)\r\n }\r\n enableSquareFootage(true);\r\n };\r\n\r\n if (isIcon) {\r\n return (\r\n \r\n \r\n \r\n )\r\n }\r\n\r\n return (\r\n \r\n )\r\n};\r\n\r\nGroheFeatureSQFTButton.propTypes = {\r\n featureOpened: PropTypes.shape(featureInterface),\r\n className: PropTypes.string,\r\n isIcon: PropTypes.bool,\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {shopPageOpened} = store.shopState;\r\n const {settings} = store.fabricatorState;\r\n return {\r\n shopPageOpened,\r\n fabricatorSettings: settings,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setCameFromPage,\r\n setSqftFromFeature,\r\n setSquareFootageGroup,\r\n enableSquareFootage,\r\n};\r\n\r\nexport default withRouter(\r\n injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(GroheFeatureSQFTButton)\r\n )\r\n)\r\n","import React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport IconButton from \"@mui/material/IconButton\";\r\nimport ErrorIcon from \"@mui/icons-material/Error\";\r\n\r\n\r\nconst GroheFeatureSoldOut = (props) => {\r\n const {disabled, intl, fabricatorData} = props;\r\n if (!disabled) {\r\n return null\r\n }\r\n\r\n return (\r\n
    \r\n {fabricatorData.isAmericanStandard ? null : (\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n \r\n
    \r\n )\r\n};\r\n\r\nGroheFeatureSoldOut.propTypes = {\r\n disabled: PropTypes.bool\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const fabricatorData = store.fabricatorState;\r\n return {\r\n fabricatorData\r\n }\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(GroheFeatureSoldOut)\r\n)\r\n","import React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\n// import FeatureDescription from \"../../../../visComponents/featureDescription\";\r\nimport FeatureName from \"../../../../visComponents/featureName\";\r\n\r\nimport SvgIcon from \"@mui/material/SvgIcon\";\r\nimport {GroheLockIcon} from \"../../../../common/icons\";\r\nimport Analytics, {PRODUCT_JOURNEY_ANALYTIC_EVENTS} from \"../../../../../analytics\";\r\nimport {setLookOverlayOpened} from \"../../../../../actions/lookFunctions\";\r\nimport {LOOK_OVERLAYS} from \"../../../core/constants\";\r\nimport {IS_PRODUCT_JOURNEY} from \"../../../../../config\";\r\n\r\n\r\nconst GroheFeatureLockedBadge = (props) => {\r\n\r\n const {lookActiveFeature, setLookOverlayOpened} = props;\r\n\r\n if (!lookActiveFeature) {\r\n return null\r\n }\r\n\r\n const lockedButtonClick = () => {\r\n Analytics.sendClickEvent(PRODUCT_JOURNEY_ANALYTIC_EVENTS.productFeatureLockedBadge);\r\n setLookOverlayOpened(LOOK_OVERLAYS.leadCapture);\r\n }\r\n\r\n return (\r\n
    \r\n
    \r\n \r\n \r\n \r\n
    \r\n
    \r\n

    \r\n \r\n

    \r\n {/*{lookActiveFeature.dbFeature.sku ? (*/}\r\n {/*

    */}\r\n {/* \r\n {/*

    */}\r\n {/*) : null}*/}\r\n {/*{lookActiveFeature.dbFeature.description ? (*/}\r\n {/*
    */}\r\n {/* */}\r\n {/*
    */}\r\n {/*) : null}*/}\r\n
    \r\n \r\n
    \r\n

    \r\n \r\n

    \r\n
    \r\n
    \r\n )\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const {lookActiveFeature} = store.lookState;\r\n\r\n return {\r\n lookActiveFeature,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setLookOverlayOpened,\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(GroheFeatureLockedBadge)\r\n","import * as types from \"./actionTypes\";\r\n\r\nexport const setGroheWizardOpened = (wizardOpened = false) => ({\r\n type: types.SET_GROHE_WIZARD_OPENED,\r\n payload: {wizardOpened}\r\n});\r\n\r\nexport const setGroheWizardName = (wizardName = false) => ({\r\n type: types.SET_GROHE_WIZARD_NAME,\r\n payload: {wizardName}\r\n});\r\n\r\nexport const setGroheWizardStep = (wizardStep = false) => ({\r\n type: types.SET_GROHE_WIZARD_STEP,\r\n payload: {wizardStep}\r\n});\r\n","import React, {useEffect, useState, Fragment} from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\n\r\nimport {getCurrentLayout} from \"../../../../appLayout\";\r\nimport MaterialSpinner from \"../../../../ui/materialSpinner\";\r\nimport LookVirtualizedList from \"./lookVirtualizedList\";\r\nimport {useIsMounted, usePrevious} from \"../../../../../misc/helperHooks\";\r\nimport GroheVirtualizedList from \"../../../grohe/groheNavigation/groheFeatures/groheVirtualizedList\";\r\nimport {getFeatureGroupName, getFeatureIsLocked} from \"../../../../../misc/helpers\";\r\nimport {LOOK_NAVIGATION_LIST_TYPES, LOOK_OVERLAYS} from \"../../../core/constants\";\r\nimport {IS_PRODUCT_JOURNEY} from \"../../../../../config\";\r\nimport {getLixilRequiredNotIncludedFeatures} from \"../../../grohe/groheNavigation/groheFunctions\";\r\nimport {setGroheRequiredButNotIncludedFeature} from \"../../../../../actions/groheFunctions\";\r\nimport LookFeatureRemoveButton from \"../lookFeatureRemoveButton\";\r\nimport WithUpdateLookCartItem from \"../../../hocs/withUpdateLookCartItem\";\r\nimport LookListFeature from \"../lookListFeature/lookListFeature\";\r\nimport LookFiltersReset from \"../../lookFilters/lookFiltersReset\";\r\nimport {\r\n getReorderedItems,\r\n getNavigationItemsLists,\r\n getSortedNavItems,\r\n pricingIsLocked, getReplacedNavItemsWithUnlockedFeatures\r\n} from \"../../lookNavigationFunctions\";\r\nimport {setLookLockedTutorial} from \"../../../../../actions/lookFunctions\";\r\nimport {scrolledVerticalToTheEnd} from \"../../../../visComponents/navigation/navUtils\";\r\nimport {checkIfLookFeaturesReceived, getAdditionalFeaturesOnScroll} from \"../../../../../api/look-api\";\r\nimport NavigationLoader from \"../../../ui/navigationLoader\";\r\n// import {COUNTERTOP_GROUP} from \"../../../../kvComponent/core/constants\";\r\nimport {\r\n checkIfNeedToReceiveFeaturesIfFiltersApplied,\r\n getFeaturesFromBackendWithFilters\r\n} from \"../../../../../misc/filtersFunctions\";\r\nimport LookMainCategoryLoading from \"./lookMainCategoryLoading\";\r\nimport Analytics from \"../../../../../analytics\";\r\nimport {getAnalyticsEcommerceItem} from \"../../../../../analyticsEcommerceParams\";\r\nimport {setNavigationLoading} from \"../../../../../actions/navigationFunctions\";\r\n\r\n\r\nconst LookMainCategory = (props) => {\r\n\r\n const {lookActiveFeature, lookViewType, lookActiveCategory, contentHeight, isMobile, filterGroups, intl,\r\n fabricatorData, groheFiltersSearchText, selectedFilters, requiredButNotIncludedFeature, navigationCount,\r\n setGroheRequiredButNotIncludedFeature, lookActiveFeaturePositionInList, lookViewTypeWasChanged, lookLockedTutorial,\r\n setLookLockedTutorial, allFeaturesWereLoaded, contextMenu, wizardActiveItem, navigationLoadingActive,\r\n setNavigationLoading, isPhoneNumberValidated, lookOverlayOpened} = props;\r\n\r\n const [navItemsLists, setNavItemsLists] = useState([]);\r\n const [firstOpenedFeature, setFirstOpenedFeature] = useState(null);\r\n const [firstOpenedConditions, setFirstOpenedConditions] = useState(null);\r\n\r\n const [shouldRunAnalytics, setShouldRunAnalytics] = useState(false);\r\n\r\n const isMounted = useIsMounted();\r\n const prevActiveCategory = usePrevious(lookActiveCategory);\r\n\r\n const layout = getCurrentLayout();\r\n const featureGroup = lookActiveFeature ? lookActiveFeature.getParent() : layout.getFeatureGroupByPartId(lookActiveCategory);\r\n\r\n // const [, forceUpdate] = useReducer(x => x + 1, 0);\r\n\r\n const setReceivedFeatures = async () => {\r\n if (lookActiveCategory && isMounted()) {\r\n let forFeature = lookActiveFeature;\r\n if (featureGroup && !featureGroup.allFeaturesReceived && !featureGroup.requestInProgress) {\r\n setShouldRunAnalytics(true);\r\n checkIfLookFeaturesReceived(featureGroup);\r\n return // we will update this component when navigationCount is changed\r\n }\r\n if (Array.isArray(selectedFilters) && selectedFilters.length && featureGroup && !featureGroup.requestInProgress) {\r\n const checkPassed = checkIfNeedToReceiveFeaturesIfFiltersApplied(selectedFilters, featureGroup);\r\n if (checkPassed) {\r\n setNavigationLoading(true);\r\n await getFeaturesFromBackendWithFilters(featureGroup, checkPassed.arrayOfNeededFiltersToReceive);\r\n if (!isMounted()) {\r\n return\r\n }\r\n setNavigationLoading(false);\r\n }\r\n }\r\n if (!forFeature && featureGroup && isMobile && !IS_PRODUCT_JOURNEY) {\r\n forFeature = featureGroup.activeFeature\r\n }\r\n let navFeatures;\r\n if (requiredButNotIncludedFeature) {\r\n navFeatures = getLixilRequiredNotIncludedFeatures(requiredButNotIncludedFeature).map((feature) => ({part: feature}))\r\n setNavItemsLists([{\r\n type: LOOK_NAVIGATION_LIST_TYPES.regular,\r\n navItems: navFeatures\r\n }]);\r\n } else if (featureGroup) {\r\n const firstFeature = firstOpenedFeature && firstOpenedFeature.partId === lookActiveCategory ? firstOpenedFeature : null;\r\n const firstConditions = firstOpenedFeature && firstOpenedFeature.partId === lookActiveCategory ? firstOpenedConditions : null;\r\n navFeatures = layout.designNavigationItems(\r\n {part: featureGroup},\r\n selectedFilters,\r\n groheFiltersSearchText,\r\n forFeature,\r\n \"all\", // added for non lixil fabricators to display not in visualizer features\r\n filterGroups,\r\n {firstFeature, firstConditions},\r\n );\r\n\r\n if (featureGroup.partId === \"vanity_sink\" && contextMenu.clickedOnItem) {\r\n if (contextMenu.clickedOnItem === \"vanity_pedestal_sink\") {\r\n navFeatures = navFeatures.filter(navItem => {\r\n return navItem.part.metaData[\"MountType\"] && navItem.part.metaData[\"MountType\"].includes(\"ST\")\r\n })\r\n } else if (contextMenu.clickedOnItem === \"vanity_sink\") {\r\n navFeatures = navFeatures.filter(navItem => {\r\n return !navItem.part.metaData[\"MountType\"] || !navItem.part.metaData[\"MountType\"].includes(\"ST\")\r\n })\r\n }\r\n }\r\n\r\n navFeatures = getReplacedNavItemsWithUnlockedFeatures(navFeatures, filterGroups);\r\n\r\n // here we sort features\r\n navFeatures = getReorderedItems(navFeatures, lookActiveFeature, lookActiveCategory, featureGroup);\r\n\r\n if (!wizardActiveItem && lookActiveCategory\r\n && (!prevActiveCategory || (prevActiveCategory !== lookActiveCategory) || shouldRunAnalytics)) {\r\n if (shouldRunAnalytics) {\r\n setShouldRunAnalytics(false);\r\n }\r\n Analytics.sendEcommerceEvent(\"view_item_list\", {\r\n item_list_id: featureGroup.partId,\r\n item_list_name: featureGroup.dbName || featureGroup.partName || \"\",\r\n items: navFeatures.map((navItem, navItemIndex) => getAnalyticsEcommerceItem(navItem.part, 1, navItemIndex))\r\n });\r\n }\r\n\r\n if (typeof lookActiveFeaturePositionInList === \"number\") { // swap places with clicked position (is used only for cases when 1) option click 2) navigation item click)\r\n const currentPositionInList = navFeatures.findIndex(navItem => navItem.part.dbFeature.id === lookActiveFeature.dbFeature.id);\r\n if (currentPositionInList >= 0 && currentPositionInList !== lookActiveFeaturePositionInList) {\r\n [navFeatures[currentPositionInList], navFeatures[lookActiveFeaturePositionInList]] = [navFeatures[lookActiveFeaturePositionInList], navFeatures[currentPositionInList]]\r\n }\r\n }\r\n\r\n const nItemsLists = getNavigationItemsLists(navFeatures, lookActiveFeature);\r\n\r\n if (fabricatorData.settings.leadCapture && !lookLockedTutorial.finished && !isPhoneNumberValidated\r\n && !IS_PRODUCT_JOURNEY && featureGroup.allFeaturesReceived && !(isMobile && lookActiveFeature)\r\n && !wizardActiveItem && !(lookOverlayOpened && (lookOverlayOpened === LOOK_OVERLAYS.intro))) {\r\n let firstLockedIndex, firstUnlockedIndex;\r\n if (nItemsLists.length === 1) {\r\n firstLockedIndex = nItemsLists[0].navItems.findIndex(navItem => getFeatureIsLocked(navItem.part));\r\n firstUnlockedIndex = nItemsLists[0].navItems.findIndex(navItem => !getFeatureIsLocked(navItem.part));\r\n }\r\n setLookLockedTutorial({\r\n visible: true,\r\n withGrid: nItemsLists.length === 1,\r\n firstLockedIndex,\r\n firstUnlockedIndex,\r\n })\r\n }\r\n\r\n setNavItemsLists(nItemsLists);\r\n }\r\n //console.log(\"navItems\", navItems);\r\n // forceUpdate(1);\r\n // setTimeout(() => {\r\n // if (isMounted()) {\r\n // forceUpdate(1);\r\n // }\r\n // }, 500)\r\n // setTimeout(() => {\r\n // if (isMounted()) {\r\n // forceUpdate(1);\r\n // }\r\n // }, 1500)\r\n // setTimeout(() => {\r\n // if (isMounted()) {\r\n // forceUpdate(1);\r\n // }\r\n // }, 3000)\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n setReceivedFeatures();\r\n return () => {\r\n if (requiredButNotIncludedFeature && lookActiveFeature) {\r\n let reqFeatures = getLixilRequiredNotIncludedFeatures(requiredButNotIncludedFeature);\r\n reqFeatures.push(requiredButNotIncludedFeature);\r\n if (!reqFeatures.find(navItem => navItem.dbFeature.id === lookActiveFeature.dbFeature.id)) {\r\n setGroheRequiredButNotIncludedFeature(null);\r\n }\r\n } else if(requiredButNotIncludedFeature && !lookActiveFeature) {\r\n setGroheRequiredButNotIncludedFeature(null);\r\n }\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [lookActiveCategory, groheFiltersSearchText, selectedFilters, requiredButNotIncludedFeature,\r\n setGroheRequiredButNotIncludedFeature, navigationCount, lookOverlayOpened]);\r\n\r\n useEffect(() => {\r\n if (lookActiveCategory) {\r\n setFirstOpenedFeature(lookActiveFeature);\r\n if (lookActiveFeature && lookActiveFeature.getParent) {\r\n setFirstOpenedConditions(lookActiveFeature.getParent().getArrayOfConditions(true))\r\n }\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [lookActiveCategory]);\r\n\r\n // if (!visualizersLoadedLength) {\r\n // return \r\n // }\r\n\r\n if (wizardActiveItem) { // why we need this render? not sure. probably because of the useEffect, didn't removed for now\r\n return null\r\n }\r\n\r\n if (IS_PRODUCT_JOURNEY && !lookActiveFeature) {\r\n return (\r\n
    \r\n \r\n
    \r\n )\r\n }\r\n\r\n if (featureGroup && !featureGroup.allFeaturesReceived) {\r\n return \r\n }\r\n\r\n let featureGroupName = \"\";\r\n if (IS_PRODUCT_JOURNEY) {\r\n featureGroupName = getFeatureGroupName(featureGroup, intl, fabricatorData);\r\n }\r\n\r\n const showFeaturesOnly = lookActiveCategory && !layout.partIdExistInQtCategory(lookActiveCategory, true); // to prevent calculating features on each render\r\n // const showAllWallsCheckbox = lookActiveFeature && showFeaturesOnly && LOOK_WALLS_ONLY.includes(lookActiveFeature.partId);\r\n\r\n const desRecNavItemList = navItemsLists.find(navItemList => navItemList.type === LOOK_NAVIGATION_LIST_TYPES.designRec);\r\n const regularNavItemList = navItemsLists.find(navItemList => navItemList.type === LOOK_NAVIGATION_LIST_TYPES.regular);\r\n const notMatchingNavItemList = navItemsLists.filter(navItemList => navItemList.type === LOOK_NAVIGATION_LIST_TYPES.notMatchingMeta);\r\n\r\n if (!regularNavItemList) {\r\n return null\r\n }\r\n\r\n const onScrollHandler = async (scrollObject) => {\r\n if (!featureGroup || allFeaturesWereLoaded.includes(document.kvConfig.visualizerType)) {\r\n return;\r\n }\r\n if (featureGroup.getRealFeaturesReceivedProperty() || !scrolledVerticalToTheEnd(scrollObject)) {\r\n return\r\n }\r\n setNavigationLoading(true);\r\n await getAdditionalFeaturesOnScroll(featureGroup);\r\n await setReceivedFeatures();\r\n await new Promise(resolve => setTimeout(resolve, 300));\r\n setNavigationLoading(false);\r\n }\r\n\r\n const onEventScrollHandler = (event) => {\r\n onScrollHandler(event.target)\r\n }\r\n\r\n if (IS_PRODUCT_JOURNEY) {\r\n let allProducts = regularNavItemList.navItems;\r\n if (desRecNavItemList && desRecNavItemList.navItems) {\r\n allProducts = [...desRecNavItemList.navItems, ...regularNavItemList.navItems];\r\n }\r\n if (notMatchingNavItemList && notMatchingNavItemList.length) {\r\n notMatchingNavItemList.forEach(navItemList => {\r\n allProducts = [...allProducts, ...navItemList.navItems];\r\n })\r\n }\r\n const {isLixil, pricingLocked} = pricingIsLocked();\r\n if (!isLixil && pricingLocked) {\r\n allProducts = getSortedNavItems(allProducts);\r\n }\r\n return (\r\n \r\n {isMobile ? null : (\r\n \r\n
    \r\n {featureGroupName} ({regularNavItemList.navItems.length})\r\n {/*{showAllWallsCheckbox ? (*/}\r\n {/*
    */}\r\n {/* */}\r\n {/*
    */}\r\n {/*) : null}*/}\r\n {/*{!showAllWallsCheckbox && lookActiveFeature && lookActiveFeature.getParent().canBeDisabled && showFeaturesOnly ? (*/}\r\n {lookActiveFeature && lookActiveFeature.getParent().canBeDisabled && showFeaturesOnly ? (\r\n
    \r\n \r\n
    \r\n ) : null}\r\n
    \r\n
    \r\n )}\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n {navigationLoadingActive ? : null}\r\n
    \r\n )\r\n }\r\n\r\n return (\r\n \r\n {(updateLookCartItem) => {\r\n\r\n if (!selectedFilters.length && !desRecNavItemList && !notMatchingNavItemList.length && regularNavItemList) {\r\n // simple list, react virtualized, all as usual\r\n return (\r\n \r\n
    \r\n \r\n
    \r\n {navigationLoadingActive ? : null}\r\n
    \r\n )\r\n }\r\n\r\n return (\r\n \r\n
    \r\n {desRecNavItemList || selectedFilters.length ? (\r\n \r\n

    \r\n \r\n

    \r\n {selectedFilters.length && (!desRecNavItemList || !desRecNavItemList.navItems.length) ? (\r\n \r\n
    \r\n \r\n
    \r\n \r\n
    \r\n ) : null}\r\n {desRecNavItemList ? (\r\n
    \r\n {desRecNavItemList.navItems.map(navItem => {\r\n return \r\n })}\r\n
    \r\n ) : null}\r\n
    \r\n ) : null}\r\n {regularNavItemList.navItems.length ? (\r\n \r\n

    \r\n {regularNavItemList.navTranslate && notMatchingNavItemList.length ? : null}\r\n {regularNavItemList.navTranslate && notMatchingNavItemList.length ? \" \" : null}\r\n \r\n

    \r\n
    \r\n {regularNavItemList.navItems.map(navItem => {\r\n return \r\n })}\r\n
    \r\n
    \r\n ) : null}\r\n {notMatchingNavItemList.length ? notMatchingNavItemList.map((navItemList) => {\r\n return (\r\n \r\n

    \r\n \r\n

    \r\n
    \r\n {navItemList.navItems.map(navItem => {\r\n return \r\n })}\r\n
    \r\n
    \r\n )\r\n }) : null}\r\n
    \r\n {navigationLoadingActive ? : null}\r\n
    \r\n )\r\n }}\r\n
    \r\n )\r\n};\r\n\r\nLookMainCategory.propTypes = {\r\n contentHeight: PropTypes.number\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {lookActiveFeature, lookViewType, lookActiveCategory, lookActiveFeaturePositionInList, lookViewTypeWasChanged,\r\n navigationCount, lookLockedTutorial, contextMenu, lookOverlayOpened} = store.lookState;\r\n const {visualizersLoaded, isMobile, allFeaturesWereLoaded} = store.serverState;\r\n const partId = lookActiveFeature ? lookActiveFeature.getParent().partId : \"\";\r\n const {selectedFilters, filterGroups} = store.filterState;\r\n const {groheFiltersSearchText, requiredButNotIncludedFeature} = store.groheState;\r\n const {wizardActiveItem} = store.wizardState;\r\n const {navigationLoadingActive} = store.navigationState;\r\n const {isPhoneNumberValidated} = store.userState;\r\n // const {activePreset} = store.bathroomVisualizerState;\r\n\r\n return {\r\n isMobile,\r\n lookActiveFeature,\r\n lookViewType,\r\n lookActiveCategory,\r\n lookViewTypeWasChanged,\r\n visualizersLoadedLength: visualizersLoaded.length,\r\n partId,\r\n fabricatorData: store.fabricatorState,\r\n filterGroups,\r\n groheFiltersSearchText,\r\n selectedFilters,\r\n requiredButNotIncludedFeature,\r\n lookActiveFeaturePositionInList,\r\n navigationCount,\r\n lookLockedTutorial,\r\n allFeaturesWereLoaded,\r\n contextMenu,\r\n wizardActiveItem,\r\n navigationLoadingActive,\r\n isPhoneNumberValidated,\r\n lookOverlayOpened,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setGroheRequiredButNotIncludedFeature,\r\n setLookLockedTutorial,\r\n setNavigationLoading,\r\n};\r\n\r\nexport default injectIntl (\r\n connect(mapStateToProps, mapDispatchToProps)(LookMainCategory)\r\n);\r\n","import React, {Fragment, useEffect, useRef} from \"react\";\r\nimport {connect} from \"react-redux\";\r\nimport {injectIntl} from \"react-intl\";\r\n\r\nimport IconButton from \"@mui/material/IconButton\";\r\nimport ReplayIcon from '@mui/icons-material/Replay';\r\nimport {setLookRestoreState, updateNavigationCount} from \"../../../../../actions/lookFunctions\";\r\nimport WithZoomToFeature from \"../../../hocs/withZoomToFeature\";\r\nimport LookCanvasContext from \"../../../lookCanvasContext\";\r\n// import LookFeatureRevertButtonModal from \"./lookFeatureRevertButtonModal\";\r\nimport {getCurrentLayout} from \"../../../../appLayout\";\r\nimport WithUpdateLookCartItem from \"../../../hocs/withUpdateLookCartItem\";\r\nimport {IS_PRODUCT_JOURNEY} from \"../../../../../config\";\r\n\r\n\r\nconst LookFeatureRevertButton = (props) => {\r\n\r\n const {lookActiveFeature, intl, updateNavigationCount, lookRestoreState, setLookRestoreState, isMobile,\r\n lookActiveCategory, currentActiveFeature} = props;\r\n const anchorRef = useRef(null);\r\n // const [showRevertModal, setShowRevertModal] = useState(false);\r\n\r\n useEffect(() => {\r\n if (((!isMobile && lookActiveFeature) || (isMobile && lookActiveCategory)) && !lookRestoreState) {\r\n const layout = getCurrentLayout();\r\n setLookRestoreState(layout.getActiveFeaturesAsObject(false, false, true));\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [lookActiveFeature, lookActiveCategory])\r\n\r\n if (!isMobile && !lookActiveFeature) {\r\n return null\r\n }\r\n\r\n if (isMobile && !lookActiveCategory) {\r\n return null\r\n }\r\n\r\n const layout = getCurrentLayout();\r\n const featureGroup = lookActiveFeature ? lookActiveFeature.getParent() : layout.getFeatureGroupByPartId(lookActiveCategory);\r\n\r\n if (!featureGroup) {\r\n return null\r\n }\r\n\r\n const revertButtonClick = (zoomToFeatureGroup, updateLookCartItem) => {\r\n if (!lookRestoreState) {\r\n return false\r\n }\r\n const layout = getCurrentLayout();\r\n layout.setActiveFeaturesFromObject(lookRestoreState);\r\n if (!isMobile) {\r\n zoomToFeatureGroup(featureGroup.partId);\r\n setLookRestoreState(null);\r\n }\r\n updateNavigationCount();\r\n updateLookCartItem(featureGroup.lookActiveFeature, true);\r\n };\r\n\r\n const disabled = !lookRestoreState\r\n || !lookRestoreState[featureGroup.partId]\r\n || (currentActiveFeature && (lookRestoreState[featureGroup.partId] === currentActiveFeature.dbFeature.id))\r\n\r\n return (\r\n \r\n {(imageCanvas) => (\r\n \r\n {(zoomToFeatureGroup) => (\r\n \r\n {(updateLookCartItem) => {\r\n\r\n if (IS_PRODUCT_JOURNEY) {\r\n return isMobile ? (\r\n revertButtonClick(zoomToFeatureGroup, updateLookCartItem)}>\r\n \r\n \r\n ) : (\r\n
    \r\n setShowRevertModal(true)}\r\n // onMouseLeave={() => setShowRevertModal(false)}\r\n onClick={() => revertButtonClick(zoomToFeatureGroup, updateLookCartItem)}>\r\n \r\n \r\n \r\n
    \r\n )\r\n }\r\n\r\n return (\r\n \r\n setShowRevertModal(true)}\r\n // onMouseLeave={() => setShowRevertModal(false)}\r\n onClick={() => revertButtonClick(zoomToFeatureGroup, updateLookCartItem)}>\r\n \r\n \r\n {/*{isMobile ? null : (*/}\r\n {/* */}\r\n {/*)}*/}\r\n \r\n )\r\n }}\r\n
    \r\n )}\r\n
    \r\n )}\r\n
    \r\n )\r\n};\r\n\r\nLookFeatureRevertButton.propTypes = {\r\n // lookFeature: PropTypes.shape(featureInterface),\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {lookActiveFeature, lookRestoreState, lookActiveCategory} = store.lookState;\r\n const {isMobile} = store.serverState;\r\n\r\n let currentActiveFeature = lookActiveFeature;\r\n if (isMobile && lookActiveCategory) {\r\n const layout = getCurrentLayout();\r\n const featureGroup = layout.getFeatureGroupByPartId(lookActiveCategory);\r\n currentActiveFeature = featureGroup ? featureGroup.activeFeature : null;\r\n }\r\n\r\n return {\r\n lookActiveCategory,\r\n lookActiveFeature,\r\n lookRestoreState,\r\n isMobile,\r\n currentActiveFeature,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n updateNavigationCount,\r\n setLookRestoreState,\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(LookFeatureRevertButton)\r\n)\r\n","import React, {Fragment} from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\n\r\nimport Button from \"@mui/material/Button\";\r\nimport ChevronRightIcon from \"@mui/icons-material/ChevronRight\";\r\nimport IconButton from \"@mui/material/IconButton\";\r\nimport ChevronLeftIcon from \"@mui/icons-material/ChevronLeft\";\r\n\r\nimport {\r\n setWizardActiveStep,\r\n setWizardSelectedValues,\r\n setWizardShowFeatureSection\r\n} from \"../../../../../actions/wizardFunctions\";\r\nimport {getCurrentGroups, getCurrentWizardNavItems} from \"./lookWizardFunctions\";\r\nimport LookWizardContentFinalPrice from \"./lookWizardContentFinalPrice\";\r\nimport GroheWizardCompletedButtons from \"../../../grohe/groheNavigation/groheWizard/groheWizardCompletedButtons\";\r\nimport {IS_PRODUCT_JOURNEY} from \"../../../../../config\";\r\nimport GroheMobileFooterFiltersButton from \"../../../grohe/groheMobile/groheMobileFooterFiltersButton\";\r\nimport GroheMobileFooterViewButton from \"../../../grohe/groheMobile/groheMobileFooterViewButton\";\r\nimport WithUpdateLookCartItem from \"../../../hocs/withUpdateLookCartItem\";\r\n\r\nconst LookWizardContentButtons = (props) => {\r\n\r\n const {wizardActiveItem, wizardActiveStep, setWizardActiveStep, wizardSelectedValues, setWizardSelectedValues,\r\n isMobile, intl, filterGroups, wizardShowFeatureSection, setWizardShowFeatureSection,\r\n groheActiveFeatureQuantity} = props;\r\n\r\n if (!wizardActiveItem) {\r\n return null\r\n }\r\n\r\n const currentGroups = getCurrentGroups(wizardActiveItem, wizardActiveStep, wizardSelectedValues);\r\n const wizardGroup = currentGroups[0];\r\n\r\n const onSkipClick = () => {\r\n // const featureGroup = getFeatureGroupFromWizardGroup(wizardGroup);\r\n // if (featureGroup && featureGroup.activeFeature) {\r\n // disableFeature(featureGroup.activeFeature, updateLookCartItem);\r\n // updateCanvasCount();\r\n // }\r\n setWizardSelectedValues({\r\n [wizardActiveStep]: {\r\n wizardGroup,\r\n }\r\n });\r\n setWizardActiveStep(wizardActiveStep + 1);\r\n }\r\n\r\n const startAgain = () => {\r\n setWizardSelectedValues({}, true);\r\n setWizardActiveStep(0);\r\n }\r\n\r\n const previousClick = () => {\r\n // const newValues = Object.assign({}, wizardSelectedValues);\r\n // delete newValues[wizardActiveStep];\r\n // delete newValues[wizardActiveStep - 1];\r\n // setWizardSelectedValues(newValues, true);\r\n setWizardActiveStep(wizardActiveStep - 1)\r\n }\r\n\r\n const nextClick = () => {\r\n if (!wizardSelectedValues[wizardActiveStep]) {\r\n onSkipClick();\r\n } else {\r\n if (IS_PRODUCT_JOURNEY) {\r\n setWizardSelectedValues({\r\n [wizardActiveStep]: {\r\n ...(wizardSelectedValues[wizardActiveStep] || {}),\r\n quantity: groheActiveFeatureQuantity,\r\n }\r\n });\r\n }\r\n setWizardActiveStep(wizardActiveStep + 1);\r\n }\r\n }\r\n\r\n const returnClick = () => {\r\n setWizardShowFeatureSection(false);\r\n }\r\n\r\n // const closeWizardClick = () => {\r\n // Analytics.sendClickEvent(LOOK_JOURNEY_ANALYTIC_EVENTS.lookWizardCompletedClose);\r\n // history.push(getLookIdUrl());\r\n // };\r\n\r\n const skipEnabled = wizardActiveStep > -1 && currentGroups.length === 1 && wizardGroup.notRequired;\r\n const isCompletedStep = wizardActiveStep > -1 && !currentGroups.length;\r\n\r\n let nextDisabled = !wizardSelectedValues[wizardActiveStep];\r\n if (nextDisabled && currentGroups.length === 1 && wizardGroup.nodeType === \"group\") {\r\n const navItems = getCurrentWizardNavItems(wizardSelectedValues, wizardActiveStep, wizardActiveItem, wizardGroup, null, filterGroups);\r\n nextDisabled = !!navItems.length;\r\n }\r\n\r\n if (isMobile) {\r\n\r\n if (IS_PRODUCT_JOURNEY) {\r\n\r\n if (wizardActiveStep === -1) {\r\n return (\r\n \r\n )\r\n }\r\n\r\n if (isCompletedStep) {\r\n return \r\n }\r\n\r\n return (\r\n \r\n {isCompletedStep || currentGroups.length > 1 ? null : (\r\n \r\n \r\n \r\n \r\n )}\r\n \r\n {wizardShowFeatureSection ? null : (\r\n \r\n {skipEnabled ? (\r\n \r\n ) : null}\r\n \r\n \r\n )}\r\n \r\n )\r\n }\r\n\r\n return (\r\n
    \r\n {(wizardActiveStep > -1 && currentGroups.length) ? (\r\n \r\n
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    \r\n {skipEnabled ? (\r\n
    \r\n \r\n \r\n \r\n
    \r\n ) : null}\r\n
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    \r\n
    \r\n ) : null}\r\n
    \r\n )\r\n }\r\n\r\n return (\r\n \r\n
    \r\n {(wizardActiveStep === -1) ? (\r\n \r\n ) : null}\r\n {(wizardActiveStep > -1 && currentGroups.length) ? (\r\n \r\n \r\n \r\n \r\n ) : null}\r\n {isCompletedStep && IS_PRODUCT_JOURNEY ? (\r\n \r\n ) : null}\r\n {isCompletedStep && !IS_PRODUCT_JOURNEY ? (\r\n \r\n ) : null}\r\n
    \r\n
    \r\n {skipEnabled ? (\r\n \r\n \r\n \r\n \r\n ) : null}\r\n {isCompletedStep && IS_PRODUCT_JOURNEY ? : null}\r\n {/*{isCompletedStep ? (*/}\r\n {/* */}\r\n {/* */}\r\n {/* */}\r\n {/*) : null}*/}\r\n
    \r\n
    \r\n )\r\n\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n // const {activePreset, bvPresets} = store.bathroomVisualizerState;\r\n const {wizardActiveItem, wizardActiveStep, wizardSelectedValues, wizardShowFeatureSection} = store.wizardState;\r\n const {isMobile} = store.serverState;\r\n const {filterGroups} = store.filterState;\r\n // const fabricatorData = store.fabricatorState;\r\n const {groheActiveFeatureQuantity} = store.groheState;\r\n\r\n return {\r\n // activePreset,\r\n // bvPresets,\r\n wizardActiveItem,\r\n wizardActiveStep,\r\n wizardSelectedValues,\r\n isMobile,\r\n filterGroups,\r\n wizardShowFeatureSection,\r\n // fabricatorData,\r\n groheActiveFeatureQuantity,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setWizardActiveStep,\r\n setWizardSelectedValues,\r\n setWizardShowFeatureSection\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)((props) => {\r\n return (\r\n \r\n {(updateLookCartItem) => }\r\n \r\n )\r\n })\r\n)\r\n","import { combineReducers } from 'redux';\r\nimport { loadingBarReducer } from 'react-redux-loading-bar';\r\n\r\nimport stepsReducer from \"./stepsReducer\";\r\nimport selectionReducer from \"./selectionReducer\";\r\nimport serverReducer from \"./serverReducer\";\r\nimport bathroomVisualizerReducer from \"./bathroomVisualizerReducer\";\r\nimport loaderReducer from \"./loaderReducer\";\r\nimport userReducer from \"./userReducer\";\r\nimport cartReducer from \"./cartReducer\";\r\nimport instReducer from \"./instReducer\";\r\nimport messageBoxReducer from \"./messageBoxReducer\";\r\nimport filterReducer from './filterReducer';\r\nimport navigationReducer from './navigationReducer';\r\nimport fabricatorReducer from './fabricatorReducer';\r\nimport sqftReducer from './sqftReducer';\r\nimport docuSignReducer from './docuSignReducer';\r\nimport qtReducer from './qtReducer';\r\nimport tutorialReducer from './tutorialReducer';\r\nimport contractSigningReducer from \"./contractSigningReducer\";\r\nimport initialFlowReducer from \"./initialFlowReducer\";\r\nimport priceWorksheetReducer from \"./priceWorksheetReducer\";\r\nimport unlockCalculationsReducer from \"./unlockCalculationsReducer\";\r\nimport quotesReducer from \"./quotesReducer\";\r\nimport advancedQuotingReducer from \"./advancedQuotingReducer\";\r\nimport assignQuoteReducer from \"./assignQuoteReducer\";\r\nimport printReducer from \"./printReducer\";\r\nimport wizardReducer from \"./wizardReducer\";\r\nimport sqftMenuReducer from \"./sqftMenuReducer\";\r\nimport sqftManualCalculationReducer from \"./sqftManualCalculationReducer\";\r\nimport sqftSlabReducer from \"./sqftSlabReducer\";\r\nimport sqftResourcesReducer from \"./sqftResourcesReducer\";\r\nimport sqftMiteredReducer from \"./sqftMiteredReducer\";\r\nimport lookReducer from \"./lookReducer\";\r\nimport groheReducer from \"./groheReducer\";\r\nimport iframeIntegrationReducer from \"./iframeIntegrationReducer\";\r\nimport groheQuotingToolReducer from \"./groheQuotingToolReducer\";\r\nimport paymentReducer from \"./paymentReducer\";\r\nimport historyReducer from \"./historyReducer\";\r\nimport shopReducer from \"./shopReducer\";\r\nimport sqftTutorialReducer from \"./sqftTutorialReducer\";\r\n\r\n// Combine Reducers\r\nexport const reducers = combineReducers({\r\n advancedQuotingState: advancedQuotingReducer,\r\n assignQuoteState: assignQuoteReducer,\r\n bathroomVisualizerState: bathroomVisualizerReducer,\r\n cartState: cartReducer,\r\n contractSigningState: contractSigningReducer,\r\n docuSignState: docuSignReducer,\r\n fabricatorState: fabricatorReducer,\r\n filterState: filterReducer,\r\n groheQuotingToolState: groheQuotingToolReducer,\r\n groheState: groheReducer,\r\n historyState: historyReducer,\r\n iframeIntegrationState: iframeIntegrationReducer,\r\n initialFlowState: initialFlowReducer,\r\n instState: instReducer,\r\n loaderState: loaderReducer,\r\n loadingBar: loadingBarReducer,\r\n lookState: lookReducer,\r\n messageBoxState: messageBoxReducer,\r\n navigationState: navigationReducer,\r\n paymentState: paymentReducer,\r\n priceWorksheetState: priceWorksheetReducer,\r\n printState: printReducer,\r\n qtState: qtReducer,\r\n quotesState: quotesReducer,\r\n selectionState: selectionReducer,\r\n serverState: serverReducer,\r\n shopState: shopReducer,\r\n sqftManualCalculationState: sqftManualCalculationReducer,\r\n sqftMenuState: sqftMenuReducer,\r\n sqftMiteredState: sqftMiteredReducer,\r\n sqftResourceState: sqftResourcesReducer,\r\n sqftSlabState: sqftSlabReducer,\r\n sqftState: sqftReducer,\r\n sqftTutorialState: sqftTutorialReducer,\r\n stepsState: stepsReducer,\r\n tutorialState: tutorialReducer,\r\n unlockCalculationsState: unlockCalculationsReducer,\r\n userState: userReducer,\r\n wizardState: wizardReducer\r\n});\r\n\r\n","import * as types from '../actions/actionTypes';\r\n\r\nconst initialState = {\r\n isSwitching : false,\r\n activeStep: 0,\r\n layoutParts: [],\r\n};\r\n\r\nexport default function(state = initialState, action) {\r\n\r\n switch(action.type) {\r\n\r\n case types.SET_STEP:\r\n\r\n if (state.isSwitching) {\r\n return Object.assign({}, state) // don't do anything until animation will finish\r\n }\r\n\r\n if (action.payload.activeStep > state.layoutParts.length - 1) {\r\n return Object.assign({}, state, {\r\n activeStep: action.payload.activeStep - 1\r\n })\r\n } else {\r\n return Object.assign({}, state, {\r\n activeStep: action.payload.activeStep <= 0 ? 0 : action.payload.activeStep\r\n });\r\n }\r\n\r\n case types.SET_STEP_SWITCHING:\r\n case types.SET_LAYOUT_DATA_PARTS:\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n });\r\n\r\n }\r\n\r\n return state;\r\n\r\n}","import * as types from '../actions/actionTypes';\r\n\r\nconst initialState = {\r\n selectionOpened: false,\r\n selectionGroup: \"\",\r\n activePartRelatedItemIndex: 0,\r\n selectionWindowView: 3,\r\n selectionInfoQuantity: 1,\r\n pulseFeatureInfoQuantity: false,\r\n materialsInfoFeatureModules: [], // arrayOf {partId: 123, quantity: 1}\r\n selectionFeatureInfo: null,\r\n vanityTypeSelected: false,\r\n showerTypeSelected: false,\r\n activeFeature: null,\r\n updateFeatureCount: 0, // counter - is used for update footer items\r\n relatedGroups: [],\r\n relatedGroupsSearch: \"\",\r\n showDescriptionCover: true,\r\n galleryVisible: false,\r\n galleryShowActiveFeature: false, // show related product gallery\r\n galleryActiveImageIndex: 0,\r\n subSteps: {\r\n edges: [],\r\n backsplashes: [],\r\n },\r\n activeSubStep: 0,\r\n showNotCompatibleView: false,\r\n productNoteEditorVisible: false,\r\n rowItems: [],\r\n materialsCanvasClass: \"\",\r\n featureInfoCount: 0, // is used to update feature info page\r\n};\r\n\r\nexport default function(state = initialState, action) {\r\n\r\n switch(action.type) {\r\n\r\n case types.TOGGLE_SELECTION_WINDOW:\r\n case types.SET_SELECTION_WINDOW_VIEW:\r\n case types.TOGGLE_SELECTION_INFO:\r\n case types.SET_VANITY_TYPE:\r\n case types.CHANGE_SELECTION_INFO_QUANTITY:\r\n case types.TOGGLE_PULSE_FEATURE_INFO_QUANTITY:\r\n case types.CHANGE_MATERIALS_INFO_FEATURE_MODULES:\r\n case types.SET_DEFAULT_SELECTION_GROUP:\r\n case types.SET_SHOWER_TYPE:\r\n case types.CHANGE_SELECTION_ACTIVE_PART_RELATED_INDEX:\r\n case types.SET_RELATED_GROUPS_SEARCH:\r\n case types.TOGGLE_SHOW_DESCRIPTION_COVER:\r\n case types.TOGGLE_GALLERY_VISIBLE:\r\n case types.SET_GALLERY_ACTIVE_IMAGE_INDEX:\r\n case types.SET_MATERIALS_PAGE_ACTIVE_SUB_STEP:\r\n case types.TOGGLE_NOT_COMPATIBLE_VIEW:\r\n case types.TOGGLE_PRODUCT_NOTE_EDITOR_VISIBLE:\r\n case types.SET_ROW_ITEMS:\r\n case types.SET_MATERIALS_PAGE_CANVAS_CLASS:\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n });\r\n case types.SET_RELATED_GROUPS:\r\n return Object.assign({}, state, {\r\n relatedGroups: [...action.payload.relatedGroups]\r\n });\r\n case types.SET_MATERIALS_PAGE_SUB_STEPS:\r\n state = {...state, subSteps: Object.assign({}, state.subSteps, action.payload.subSteps)};\r\n break;\r\n case types.SET_ACTIVE_FEATURE:\r\n return Object.assign({}, state, {\r\n activeFeature: action.payload.activeFeature || null,\r\n updateFeatureCount: ++state.updateFeatureCount\r\n });\r\n case types.UPDATE_FEATURE_INFO_COUNT:\r\n return Object.assign({}, state, {\r\n featureInfoCount: ++state.featureInfoCount\r\n });\r\n\r\n }\r\n\r\n return state;\r\n\r\n}\r\n","import uniq from \"lodash/uniq\";\r\n\r\nimport * as types from '../actions/actionTypes';\r\nimport {getShareUrl, getUrlParam} from \"../misc/helpers\";\r\nimport {AVAILABLE_LANGUAGES, IS_LOOK_JOURNEY, IS_PRODUCT_JOURNEY, IS_LIXIL_UI} from \"../config\";\r\nimport COLOR_THEMES from \"../colorThemes\";\r\nimport {\r\n parseFabricatorSettings\r\n} from \"./fabricatorReducer\";\r\nimport {WHITE_PAGE_ROUTES} from \"../bvcomponents/look/core/constants\";\r\nimport {\r\n hardCodeIsAmericanStandard,\r\n hardCodeIsAmericanImport,\r\n hardCodeIsCaesarStone,\r\n hardCodeIsModerno,\r\n hardCodeIsNhance\r\n} from \"../misc/fabricatorHardcode\";\r\nimport {isTouchDevice} from \"../misc/utils\";\r\nimport Misc from \"../misc/misc\";\r\n\r\nconst urlLanguage = (getUrlParam(\"language\") || \"\").replace(\"/\", \"\");\r\nconst urlTheme = (getUrlParam(\"theme\") || \"\").replace(\"/\", \"\");\r\n\r\nconst getDefaultTheme = () => {\r\n if (hardCodeIsCaesarStone()) {\r\n return \"caes\"\r\n } else if (hardCodeIsAmericanImport() || hardCodeIsAmericanStandard()) {\r\n return \"as\"\r\n } else if (hardCodeIsModerno()) {\r\n return \"moderno\"\r\n } else if (hardCodeIsNhance()) {\r\n return \"nhance\"\r\n } else if (IS_PRODUCT_JOURNEY || window.location.href.includes(\"nav=product\")) {\r\n return \"grohe\"\r\n } else if (IS_LOOK_JOURNEY || window.location.href.includes(\"nav=look\")) {\r\n return \"look\"\r\n }\r\n return Object.keys(COLOR_THEMES)[0];\r\n}\r\n\r\nconst activeTheme = urlTheme && COLOR_THEMES[urlTheme] ? urlTheme : getDefaultTheme();\r\n\r\nconst initialState = {\r\n bvData: {\r\n features: []\r\n },\r\n newQuoteData: {},\r\n groupedFeatures: {},\r\n groupedFeaturesDescriptions: {},\r\n windowWidth: window.innerWidth || 0,\r\n windowHeight: window.innerHeight || 0,\r\n isMobile: false,\r\n jobId: 0,\r\n stonePricing: {},\r\n documents: [],\r\n visualizersLoaded: [],\r\n cookieAccepted: false,\r\n successNotification: {\r\n show: false,\r\n icon: \"calculate\",\r\n title: \"\",\r\n message: \"\"\r\n },\r\n introVideo: {\r\n introVideoStarted: false,\r\n introVideoFinished: false,\r\n },\r\n shareUrl: \"\",\r\n javascriptErrors: [],\r\n language: urlLanguage && AVAILABLE_LANGUAGES.includes(urlLanguage) ? urlLanguage : \"en-US\",\r\n agreeEmailCheckbox: true,\r\n networkConnection: true,\r\n activeTheme,\r\n amazonImageUrl: \"\",\r\n allFeaturesWereLoaded: [], // to check for lixil room layouts // includes kvState, bvLook, so on\r\n initialVisualizerType: \"\",\r\n allowRouting: false,\r\n allowMainLoading: !(window.location.hash === \"#/shop\" || window.location.hash.startsWith(\"#/shop/\")),\r\n actionAfterRoomChange: null, // a function that runs after visualizer is changed\r\n visualizerIsChanging: false, // a boolean which is true when visualizer type is changing (from bathroom to kitchen fo example)\r\n initialRoute: window.location.hash,\r\n};\r\n\r\nexport default function (state = initialState, action) {\r\n\r\n switch (action.type) {\r\n case types.SET_WINDOW_WIDTH: {\r\n if (IS_LIXIL_UI && action.payload.windowWidth >= 1024 && document.body.style.overflow === \"hidden\"\r\n && !(WHITE_PAGE_ROUTES.some(route => window.location.href.includes(\"#\" + route)))) {\r\n document.body.style.overflow = \"\";\r\n }\r\n const isMobile = action.payload.windowWidth <= (IS_PRODUCT_JOURNEY || IS_LOOK_JOURNEY ? 1023 : 991);\r\n const isTouch = isMobile || Misc.isMobile() || isTouchDevice();\r\n isTouch ? document.body.classList.add(\"bv--touch\") : document.body.classList.remove(\"bv--touch\");\r\n return Object.assign({}, state, {\r\n isMobile,\r\n isTouch,\r\n ...action.payload,\r\n })\r\n }\r\n case types.SET_WINDOW_HEIGHT:\r\n case types.SET_COOKIE_ACCEPTED:\r\n case types.SET_LANGUAGE:\r\n case types.SET_AGREE_EMAIL_CHECKBOX:\r\n case types.SET_ACTIVE_THEME:\r\n case types.SET_NETWORK_CONNECTION:\r\n case types.SET_INITIAL_VISUALIZER_TYPE:\r\n case types.SET_AMAZON_IMAGE_URL:\r\n case types.SET_ALLOW_ROUTING:\r\n case types.SET_ALLOW_MAIN_LOADING:\r\n case types.SET_ACTION_AFTER_VISUALIZER_TYPE_CHANGED:\r\n case types.SET_VISUALIZER_TYPE_CHANGING:\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n });\r\n case types.SET_STONE_PRICING:\r\n return Object.assign({}, state, {\r\n stonePricing: Object.assign({}, state.stonePricing, action.payload.stonePricing)\r\n });\r\n case types.SET_ALL_FEATURES_LOADED:\r\n if (state.allFeaturesWereLoaded.includes(action.payload.allFeaturesWereLoaded)) {\r\n return state\r\n }\r\n return Object.assign({}, state, {\r\n allFeaturesWereLoaded: [...state.allFeaturesWereLoaded, action.payload.allFeaturesWereLoaded]\r\n });\r\n case types.SET_JAVASCRIPT_ERRORS:\r\n return Object.assign({}, state, {\r\n javascriptErrors: uniq([...state.javascriptErrors, action.payload.javascriptError])\r\n });\r\n case types.SET_JOB_ID: {\r\n const shareUrl = getShareUrl(action.payload.jobId)\r\n window.shareUrl = shareUrl; // analytics only, we can't use getState() there\r\n return {\r\n ...state,\r\n shareUrl,\r\n jobId: action.payload.jobId,\r\n };\r\n }\r\n case types.TOGGLE_USER_POPUP:\r\n return handleToggleUserPopup(state, action.payload);\r\n case types.ADD_PROJECT_DOCUMENT:\r\n case types.SET_PROJECT_DOCUMENTS_IDS:\r\n return Object.assign({}, state, {\r\n documents: [...action.payload]\r\n });\r\n case types.ADD_VISUALIZERS_LOADED:\r\n return Object.assign({}, state, {\r\n visualizersLoaded: [...state.visualizersLoaded, action.payload.newLoadedVisualizer],\r\n });\r\n case types.SHOW_SUCCESS_NOTIFICATION:\r\n return Object.assign({}, state, {\r\n ...state, successNotification: {...state.successNotification, ...action.payload}\r\n });\r\n case types.SET_INTRO_VIDEO:\r\n return Object.assign({}, state, {\r\n ...state, introVideo: {...state.introVideo, ...action.payload}\r\n });\r\n case types.SET_FABRICATOR_DATA: {\r\n const {settings} = parseFabricatorSettings(action.payload);\r\n const language = settings.language;\r\n return Object.assign({}, state, {\r\n ...state, language: urlLanguage || (language && AVAILABLE_LANGUAGES.includes(language) ? language : state.language)\r\n });\r\n }\r\n }\r\n\r\n return state;\r\n\r\n}\r\n\r\nfunction handleToggleUserPopup(state, {userIsLoggedIn}) {\r\n if (typeof(userIsLoggedIn) != 'undefined' && !userIsLoggedIn) {\r\n return {...state, jobId: 0};\r\n }\r\n\r\n return state;\r\n}\r\n","// this is a \"marching ants\" algorithm used to calc the outline path\r\nexport default function(data, width, height, imgUrl, start) {\r\n // d3-plugin for calculating outline paths\r\n // License: https://github.com/d3/d3-plugins/blob/master/LICENSE\r\n //\r\n // Copyright (c) 2012-2014, Michael Bostock\r\n // All rights reserved.\r\n //\r\n // Redistribution and use in source and binary forms, with or without\r\n // modification, are permitted provided that the following conditions are met:\r\n //* Redistributions of source code must retain the above copyright notice, this\r\n // list of conditions and the following disclaimer.\r\n //* Redistributions in binary form must reproduce the above copyright notice,\r\n // this list of conditions and the following disclaimer in the documentation\r\n // and/or other materials provided with the distribution.\r\n //* The name Michael Bostock may not be used to endorse or promote products\r\n // derived from this software without specific prior written permission.\r\n // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL MICHAEL BOSTOCK BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n\r\n // lookup tables for marching directions\r\n var d3_geom_contourDx = [1, 0, 1, 1,-1, 0,-1, 1,0, 0,0,0,-1, 0,-1,NaN],\r\n d3_geom_contourDy = [0,-1, 0, 0, 0,-1, 0, 0,1,-1,1,1, 0,-1, 0,NaN];\r\n\r\n function d3_geom_contourStart(grid) {\r\n var x = 0,\r\n y = 0;\r\n\r\n // search for a starting point; begin at origin\r\n // and proceed along outward-expanding diagonals\r\n while (true) {\r\n if (grid(x,y)) {\r\n return [x,y];\r\n }\r\n if ((x === width) && (y === height)) {\r\n console.error('image is empty, can\\'t create polygon -> ', imgUrl);\r\n return false\r\n }\r\n if (x === 0) {\r\n x = y + 1;\r\n y = 0;\r\n } else {\r\n x = x - 1;\r\n y = y + 1;\r\n }\r\n }\r\n }\r\n\r\n function grid(x,y){\r\n const a=data[(y*width+x)*4+3];\r\n return(a>20);\r\n }\r\n\r\n var s = start || d3_geom_contourStart(grid); // starting point\r\n if (!s) {\r\n return [] // return empty array of points if layer is empty\r\n }\r\n var\r\n c = [], // contour polygon\r\n x = s[0], // current x position\r\n y = s[1], // current y position\r\n dx = 0, // next x direction\r\n dy = 0, // next y direction\r\n pdx = NaN, // previous x direction\r\n pdy = NaN, // previous y direction\r\n i = 0;\r\n\r\n do {\r\n // determine marching squares index\r\n i = 0;\r\n if (grid(x-1, y-1)) i += 1;\r\n if (grid(x, y-1)) i += 2;\r\n if (grid(x-1, y )) i += 4;\r\n if (grid(x, y )) i += 8;\r\n\r\n // determine next direction\r\n if (i === 6) {\r\n dx = pdy === -1 ? -1 : 1;\r\n dy = 0;\r\n } else if (i === 9) {\r\n dx = 0;\r\n dy = pdx === 1 ? -1 : 1;\r\n } else {\r\n dx = d3_geom_contourDx[i];\r\n dy = d3_geom_contourDy[i];\r\n }\r\n\r\n // update contour polygon\r\n if (dx != pdx && dy != pdy) {\r\n c.push([x, y]);\r\n pdx = dx;\r\n pdy = dy;\r\n }\r\n\r\n x += dx;\r\n y += dy;\r\n } while (s[0] != x || s[1] != y);\r\n\r\n return c;\r\n\r\n}","'use strict';\r\n\r\nObject.defineProperty(exports, \"__esModule\", {\r\n value: true\r\n});\r\n\r\nvar _slicedToArray = function () {\r\n function sliceIterator(arr, i) {\r\n var _arr = [];\r\n var _n = true;\r\n var _d = false;\r\n var _e = undefined;\r\n try {\r\n for (var _i = arr[window.Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\r\n _arr.push(_s.value);\r\n if (i && _arr.length === i) break;\r\n }\r\n } catch (err) {\r\n _d = true;\r\n _e = err;\r\n } finally {\r\n try {\r\n if (!_n && _i[\"return\"]) _i[\"return\"]();\r\n } finally {\r\n if (_d) throw _e;\r\n }\r\n }\r\n return _arr;\r\n }\r\n\r\n return function (arr, i) {\r\n if (Array.isArray(arr)) {\r\n return arr;\r\n } else if (window.Symbol.iterator in Object(arr)) {\r\n return sliceIterator(arr, i);\r\n } else {\r\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\r\n }\r\n };\r\n}();\r\n\r\nexports.default = loadingBarMiddleware;\r\n\r\nvar _loading_bar_ducks = require('./loading_bar_ducks');\r\n\r\nvar defaultTypeSuffixes = ['PENDING', 'FULFILLED', 'REJECTED'];\r\n\r\nfunction loadingBarMiddleware() {\r\n var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\r\n\r\n var promiseTypeSuffixes = config.promiseTypeSuffixes || defaultTypeSuffixes;\r\n var scope = config.scope || _loading_bar_ducks.DEFAULT_SCOPE;\r\n\r\n return function (_ref) {\r\n var dispatch = _ref.dispatch;\r\n return function (next) {\r\n return function (action) {\r\n if (action.type) {\r\n var _promiseTypeSuffixes = _slicedToArray(promiseTypeSuffixes, 3),\r\n PENDING = _promiseTypeSuffixes[0],\r\n FULFILLED = _promiseTypeSuffixes[1],\r\n REJECTED = _promiseTypeSuffixes[2];\r\n\r\n var isPending = new RegExp(PENDING + '$', 'g');\r\n var isFulfilled = new RegExp(FULFILLED + '$', 'g');\r\n var isRejected = new RegExp(REJECTED + '$', 'g');\r\n\r\n var actionScope = action.meta && action.meta.scope || action.scope || scope;\r\n\r\n if (action.type.match(isPending)) {\r\n dispatch((0, _loading_bar_ducks.showLoading)(actionScope));\r\n } else if (action.type.match(isFulfilled) || action.type.match(isRejected)) {\r\n dispatch((0, _loading_bar_ducks.hideLoading)(actionScope));\r\n }\r\n }\r\n\r\n return next(action);\r\n };\r\n };\r\n };\r\n}","'use strict';\r\n\r\nObject.defineProperty(exports, \"__esModule\", {\r\n value: true\r\n});\r\n\r\nvar _reactRedux = require('react-redux');\r\n\r\nvar _loading_bar = require('./loading_bar');\r\n\r\nvar _loading_bar_ducks = require('./loading_bar_ducks');\r\n\r\nvar mapImmutableStateToProps = function mapImmutableStateToProps(state, ownProps) {\r\n return {\r\n loading: state.get('loadingBar')[ownProps.scope || _loading_bar_ducks.DEFAULT_SCOPE]\r\n };\r\n};\r\n\r\nexports.default = (0, _reactRedux.connect)(mapImmutableStateToProps)(_loading_bar.LoadingBar);","import {Font, StyleSheet} from '@react-pdf/renderer';\r\nimport {baseNewImagesPath} from \"../../assets\";\r\nimport {IS_LIXIL_UI} from \"../../../config\";\r\nimport styleHelpers from \"./styles/printDocumentStylesHelpers\";\r\nimport printDocumentStylesDiscounts from \"./styles/printDocumentStylesDiscounts\";\r\n\r\ntry {\r\n Font.register({\r\n family: \"Play\",\r\n src: `${baseNewImagesPath}fonts/play-regular.ttf`\r\n });\r\n Font.register({\r\n family: \"PlayBold\",\r\n src: `${baseNewImagesPath}fonts/play-bold.ttf`\r\n });\r\n Font.register({\r\n family: \"FrutigerLTStd-Light\",\r\n src: `${baseNewImagesPath}fonts/frutiger/FrutigerLTStd-Light.ttf`\r\n });\r\n Font.register({\r\n family: \"Frutiger-Roman\",\r\n src: `${baseNewImagesPath}fonts/frutiger/Frutiger-Roman.ttf`\r\n });\r\n Font.register({\r\n family: \"Roboto\",\r\n src: `${baseNewImagesPath}fonts/Roboto/Roboto-Regular.ttf`\r\n });\r\n Font.register({\r\n family: \"Roboto500\",\r\n src: `${baseNewImagesPath}fonts/Roboto/Roboto-Medium.ttf`\r\n });\r\n} catch (error) {\r\n console.log(\"error registering fonts\", error);\r\n}\r\n\r\nexport default function getPrintColors(activeTheme) {\r\n\r\n const COLORS = {\r\n black: \"#000000\",\r\n red: \"#d0021b\",\r\n gray: \"#828282\",\r\n gray2: \"#7e7e7e\",\r\n gray3: \"#9f9f9f\",\r\n light: \"#c8c8c8\",\r\n white: \"#ffffff\",\r\n };\r\n\r\n switch (activeTheme) {\r\n case \"qc\":\r\n default: {\r\n COLORS.green = IS_LIXIL_UI ? \"#000000\" : \"#9FC522\";\r\n COLORS.blue = IS_LIXIL_UI ? \"#000000\" : \"#4a90e2\";\r\n COLORS.lightBlue = \"#98C3FA\";\r\n COLORS.regular = IS_LIXIL_UI ? \"Roboto\" : \"Play\";\r\n COLORS.bold = IS_LIXIL_UI ? \"Roboto500\" : \"PlayBold\";\r\n COLORS.black = \"#000000\";\r\n break;\r\n }\r\n case \"caes\": {\r\n COLORS.green = \"#f46c42\";\r\n COLORS.blue = \"#58595b\";\r\n COLORS.lightBlue = \"#717275\"; // lighten primary 10%\r\n COLORS.regular = \"FrutigerLTStd-Light\";\r\n COLORS.bold = \"Frutiger-Roman\";\r\n COLORS.black = \"#000000\";\r\n break;\r\n }\r\n case \"moderno\": {\r\n COLORS.green = \"#d0021b\";\r\n COLORS.blue = \"#1b1b1b\";\r\n COLORS.lightBlue = \"#444444\"; // lighten primary 10%\r\n COLORS.regular = \"Play\";\r\n COLORS.bold = \"PlayBold\";\r\n COLORS.black = \"#000000\";\r\n break;\r\n }\r\n case \"as\": {\r\n COLORS.green = \"#E70026\";\r\n COLORS.blue = \"#000000\";\r\n COLORS.lightBlue = \"#292929\"; // lighten primary 10%\r\n COLORS.regular = \"Play\";\r\n COLORS.bold = \"PlayBold\";\r\n COLORS.black = \"#000000\";\r\n break;\r\n }\r\n }\r\n\r\n return getStyles(COLORS)\r\n\r\n}\r\n\r\nconst getStyles = (COLORS) => StyleSheet.create({\r\n ...styleHelpers,\r\n page: {\r\n paddingTop: 35,\r\n paddingBottom: 65,\r\n paddingHorizontal: 35,\r\n fontFamily: COLORS.regular,\r\n color: COLORS.gray,\r\n fontSize: 10,\r\n },\r\n pageAS: {\r\n paddingTop: 100,\r\n paddingBottom: 65,\r\n paddingHorizontal: 35,\r\n fontFamily: COLORS.regular,\r\n color: COLORS.gray,\r\n fontSize: 10,\r\n },\r\n bold: {\r\n fontFamily: COLORS.bold,\r\n },\r\n black: {\r\n color: COLORS.black,\r\n },\r\n gray: {\r\n color: COLORS.gray,\r\n },\r\n primary: {\r\n color: COLORS.blue,\r\n },\r\n active: {\r\n color: COLORS.green,\r\n },\r\n header: {\r\n // borderColor: \"#fff000\",\r\n // borderStyle: \"solid\",\r\n // borderWidth: 2,\r\n maxHeight: 60,\r\n minHeight: 40,\r\n marginBottom: 25,\r\n display: \"flex\",\r\n flexDirection: \"row\",\r\n alignItems: \"flex-start\",\r\n justifyContent: \"space-between\",\r\n },\r\n headerInfo: {\r\n // textAlign: \"right\",\r\n },\r\n headerLogo: {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n marginTop: 3,\r\n flex: 1,\r\n },\r\n headerLogoAS: {\r\n marginTop: -35,\r\n paddingLeft: 70,\r\n paddingRight: 70,\r\n },\r\n headerLogoImage: {\r\n maxWidth: \"100%\",\r\n maxHeight: \"100%\",\r\n alignSelf: \"center\",\r\n objectFit : \"contain\",\r\n },\r\n headerText: {\r\n width: \"100%\",\r\n flexDirection: \"row\",\r\n justifyContent: \"flex-end\"\r\n },\r\n headerTextBold: {\r\n fontFamily: COLORS.bold,\r\n },\r\n specSheet: {\r\n position: 'absolute',\r\n left: 0,\r\n right: 0,\r\n top: 0,\r\n paddingTop: 35,\r\n paddingHorizontal: 35,\r\n height: 100,\r\n // width: \"100%\",\r\n display: \"flex\",\r\n flexDirection: \"row\",\r\n justifyContent: \"space-between\",\r\n },\r\n headerTextASSheet: {\r\n width: \"20%\",\r\n flex: \"0 0 20%\",\r\n fontSize: 15,\r\n color: COLORS.gray3,\r\n },\r\n headerTextASInfo: {\r\n width: \"20%\",\r\n flex: \"0 0 20%\",\r\n },\r\n headerTextValue: {\r\n paddingLeft: 5,\r\n // width: 50,\r\n // textAlign: \"right\",\r\n },\r\n main: {\r\n width: \"100%\",\r\n display: \"flex\",\r\n flexDirection: \"row\",\r\n justifyContent: \"space-between\",\r\n },\r\n section: {\r\n width: \"33%\",\r\n flex: \"0 0 33%\"\r\n },\r\n sectionTwo: {\r\n width: \"45%\",\r\n flex: \"0 0 45%\"\r\n },\r\n sectionLeft: {\r\n paddingRight: 10\r\n },\r\n sectionCenter: {\r\n paddingLeft: 10,\r\n paddingRight: 10,\r\n },\r\n sectionRight: {\r\n paddingLeft: 10\r\n },\r\n mainTitle: {\r\n fontFamily: COLORS.bold,\r\n borderBottomWidth: 1,\r\n borderBottomColor: COLORS.gray2,\r\n paddingBottom: 3,\r\n marginBottom: 5,\r\n },\r\n mainText: {\r\n marginBottom: 2,\r\n },\r\n mainTextEmail: {\r\n marginTop: 10,\r\n },\r\n room: {\r\n borderLeftColor: COLORS.light,\r\n borderLeftWidth: 1,\r\n borderLeftStyle: \"solid\",\r\n marginTop: 30,\r\n borderBottomColor: COLORS.light,\r\n borderBottomWidth: 1,\r\n },\r\n roomTitle: {\r\n color: COLORS.gray2,\r\n padding: 5,\r\n backgroundColor: COLORS.light,\r\n fontSize: 11,\r\n textTransform: \"uppercase\",\r\n fontFamily: COLORS.bold,\r\n },\r\n roomBody: {\r\n paddingLeft: 20\r\n },\r\n subPartTitle: {\r\n color: COLORS.blue,\r\n borderBottomWidth: 1,\r\n borderBottomColor: COLORS.blue,\r\n padding: 2,\r\n marginRight: 2,\r\n marginBottom: 10,\r\n marginTop: 10,\r\n marginLeft: -10\r\n },\r\n cartItem: {\r\n borderBottomWidth: 1,\r\n borderBottomColor: COLORS.light,\r\n paddingBottom: 2,\r\n marginBottom: 5,\r\n },\r\n cartItemWithThumbnail: {\r\n flexDirection: \"row\",\r\n paddingBottom: 5,\r\n },\r\n cartItemWithThumbnailBody: {\r\n flex: 1,\r\n overflow: \"hidden\",\r\n },\r\n cartItemThumbnail: {\r\n borderWidth: 1,\r\n borderColor: COLORS.light,\r\n borderRadius: 5,\r\n padding: 8,\r\n marginRight: 5,\r\n width: 64,\r\n height: 64,\r\n flexBasis: 64,\r\n },\r\n cartItemThumbnailImage: {\r\n width: 48,\r\n height: 48,\r\n flexBasis: 48,\r\n objectFit: \"contain\",\r\n },\r\n cartItemSkuFullWidth: {\r\n flex: 1,\r\n color: COLORS.gray,\r\n fontSize: 9,\r\n marginBottom: 10,\r\n },\r\n cartItemDescription: {\r\n marginTop: 4,\r\n marginBottom: 4,\r\n },\r\n cartItemName: {\r\n fontFamily: COLORS.bold,\r\n color: COLORS.gray,\r\n },\r\n cartItemNameBig: {\r\n fontSize: 11,\r\n },\r\n cartItemNameCentered: {\r\n marginTop: 10,\r\n },\r\n cartItemInfo: {\r\n flexDirection: \"row\",\r\n justifyContent: \"space-around\",\r\n alignSelf: \"stretch\",\r\n width: \"100%\",\r\n color: COLORS.gray,\r\n marginTop: 5,\r\n },\r\n cartItemUnit: {\r\n flexGrow: 1,\r\n flexShrink: 1,\r\n flexBasis: 40,\r\n width: 40,\r\n color: COLORS.gray,\r\n fontSize: 9,\r\n },\r\n wizardItemDescription: {\r\n flexGrow: 1,\r\n flexShrink: 1,\r\n color: COLORS.gray,\r\n fontSize: 9,\r\n },\r\n cartItemUnitSKU: {\r\n flexBasis: 80,\r\n width: 80,\r\n },\r\n cartItemUnitItem: {},\r\n cartItemPrice: {\r\n flexGrow: 5,\r\n flexShrink: 5,\r\n flexBasis: 100,\r\n width: 100,\r\n justifyContent: \"flex-end\",\r\n alignSelf: \"flex-end\",\r\n textAlign: \"right\",\r\n fontFamily: COLORS.bold,\r\n },\r\n cartItemNote: {\r\n marginTop: 3,\r\n marginBottom: 3,\r\n padding: 5,\r\n borderColor: COLORS.light,\r\n borderStyle: \"solid\",\r\n borderWidth: 1,\r\n borderRadius: 5,\r\n color: COLORS.blue\r\n },\r\n cartItemSimilar: {\r\n width: \"100%\",\r\n marginTop: 10,\r\n // marginBottom: 10,\r\n // paddingLeft: 10,\r\n },\r\n cartItemSimilarTitle: {\r\n padding: 5,\r\n color: COLORS.white,\r\n backgroundColor: COLORS.lightBlue,\r\n fontSize: 10,\r\n marginBottom: 10,\r\n },\r\n cartItemSimilarTitleBundled: {\r\n marginBottom: 5,\r\n },\r\n cartItemBundled: {\r\n marginBottom: 10,\r\n },\r\n cartItemSimilarTitlePadding: {\r\n marginLeft: 10\r\n },\r\n cartItemSimilarContent: {\r\n width: \"100%\",\r\n flexDirection: \"row\",\r\n justifyContent: \"space-between\",\r\n },\r\n cartItemSimilarContentCell: {\r\n width: \"50%\",\r\n flex: \"0 0 50%\"\r\n },\r\n cartItemSimilarItem: {\r\n flexDirection: \"row\",\r\n justifyContent: \"space-between\",\r\n alignSelf: \"stretch\",\r\n width: \"100%\",\r\n borderBottomWidth: 1,\r\n borderBottomStyle: \"dashed\",\r\n borderBottomColor: COLORS.light,\r\n paddingBottom: 2,\r\n marginBottom: 5,\r\n // alignItems: \"center\", places price to center\r\n },\r\n cartItemSimilarItemNoBorder: {\r\n borderBottomWidth: 0,\r\n },\r\n cartItemSimilarItemBlock: {\r\n },\r\n cartItemSimilarItemName: {\r\n color: COLORS.blue,\r\n fontSize: 10,\r\n },\r\n cartItemSimilarItemLabel: {\r\n textTransform: \"uppercase\",\r\n fontFamily: COLORS.bold,\r\n color: COLORS.gray2,\r\n fontSize: 8,\r\n },\r\n cartItemSimilarItemPrice: {\r\n fontSize: 12,\r\n color: COLORS.blue\r\n },\r\n cartItemSimilarItemExample: {\r\n fontSize: 8,\r\n color: COLORS.gray\r\n },\r\n roomTotal: {\r\n marginVertical: 10,\r\n textAlign: \"right\",\r\n },\r\n roomTotalSecond: {\r\n marginTop: 0,\r\n marginBottom: 10,\r\n textAlign: \"right\",\r\n },\r\n roomTotalText: {\r\n fontFamily: COLORS.bold,\r\n },\r\n roomTotalAmount: {\r\n fontSize: 12,\r\n color: COLORS.blue,\r\n },\r\n footer: {\r\n marginTop: 20,\r\n flexDirection: \"row\",\r\n justifyContent: \"space-around\",\r\n alignSelf: \"stretch\",\r\n width: \"100%\",\r\n },\r\n footerLeft: {\r\n flexGrow: 1,\r\n flexShrink: 1,\r\n textAlign: \"center\"\r\n },\r\n notification: {\r\n padding: 20,\r\n borderColor: COLORS.red,\r\n borderStyle: \"solid\",\r\n borderWidth: 1,\r\n borderRadius: 5,\r\n },\r\n notificationMargin: {\r\n marginTop: 20,\r\n },\r\n notificationImage: {\r\n width: 25,\r\n height: 21,\r\n marginTop: -5,\r\n marginBottom: 10,\r\n marginHorizontal: \"auto\"\r\n },\r\n notificationText: {\r\n color: COLORS.red,\r\n width: \"66.5%\",\r\n },\r\n total: {\r\n flexBasis: 160,\r\n textAlign: \"right\",\r\n },\r\n totalSectionFirst: {\r\n textAlign: \"right\",\r\n },\r\n totalSection: {\r\n marginTop: 15,\r\n textAlign: \"right\",\r\n },\r\n totalSectionText: {\r\n fontFamily: COLORS.bold,\r\n },\r\n totalSectionAmount: {\r\n fontSize: 14,\r\n color: COLORS.blue,\r\n },\r\n totalSectionFinal: {\r\n marginTop: 30,\r\n textAlign: \"right\",\r\n },\r\n totalSectionAmountFinal: {\r\n fontSize: 22,\r\n color: COLORS.green,\r\n },\r\n pageNumber: {\r\n position: \"absolute\",\r\n fontSize: 13,\r\n bottom: 30,\r\n left: 0,\r\n right: 0,\r\n textAlign: \"center\",\r\n color: COLORS.gray,\r\n },\r\n signature: {\r\n width: \"100%\",\r\n display: \"flex\",\r\n flexDirection: \"row\",\r\n justifyContent: \"space-between\",\r\n alignItems: \"flex-end\",\r\n marginTop: 30,\r\n height: 50,\r\n },\r\n signatureText: {\r\n width: \"100%\",\r\n borderTopWidth: 1,\r\n borderTopColor: COLORS.light,\r\n borderTopStyle: \"solid\",\r\n textAlign: \"center\"\r\n },\r\n signatureValue: {\r\n textAlign: \"center\",\r\n marginBottom: 5,\r\n },\r\n signatureImage: {\r\n maxWidth: \"100%\",\r\n width: \"auto\",\r\n marginHorizontal: \"auto\",\r\n },\r\n discountSection: {\r\n marginTop: 10,\r\n marginLeft: 10, // to remove negative margin of subTitle\r\n },\r\n ...printDocumentStylesDiscounts,\r\n});\r\n","export default {\r\n width100: {\r\n width: \"100%\",\r\n },\r\n flex: {\r\n display: \"flex\",\r\n },\r\n flexRow: {\r\n flexDirection: \"row\",\r\n },\r\n flexColumn: {\r\n flexDirection: \"column\",\r\n },\r\n flexCenter: {\r\n alignItems: \"center\",\r\n },\r\n marginT5: {\r\n marginTop: 5\r\n },\r\n marginT8: {\r\n marginTop: 8\r\n },\r\n marginT10: {\r\n marginTop: 10\r\n },\r\n marginT16: {\r\n marginTop: 16\r\n },\r\n marginT20: {\r\n marginTop: 20\r\n },\r\n marginT30: {\r\n marginTop: 30\r\n },\r\n marginT40: {\r\n marginTop: 40\r\n },\r\n marginB5: {\r\n marginBottom: 5\r\n },\r\n marginB8: {\r\n marginBottom: 8\r\n },\r\n marginB10: {\r\n marginBottom: 10\r\n },\r\n marginB16: {\r\n marginBottom: 16\r\n },\r\n marginB20: {\r\n marginBottom: 20\r\n },\r\n marginB30: {\r\n marginBottom: 30\r\n },\r\n marginB40: {\r\n marginBottom: 40\r\n },\r\n marginL10: {\r\n marginLeft: 10\r\n },\r\n marginL20: {\r\n marginLeft: 20\r\n },\r\n marginR10: {\r\n marginRight: 10\r\n },\r\n marginR20: {\r\n marginRight: 20\r\n },\r\n}\r\n","export default {\r\n discountDeposit: {\r\n backgroundColor: \"#d8d8d8\",\r\n padding: 8,\r\n marginTop: 0,\r\n marginBottom: 5\r\n },\r\n discountPercent: {\r\n paddingLeft: 10,\r\n },\r\n financeCell: {\r\n flexGrow: 1,\r\n borderWidth: 1,\r\n borderColor: \"#d8d8d8\",\r\n borderStyle: \"solid\",\r\n borderRadius: 5,\r\n padding: 5,\r\n },\r\n financeCellMonths: {\r\n fontSize: 11,\r\n },\r\n financeCellText: {\r\n fontSize: 15,\r\n }\r\n}\r\n","import React, {useContext} from \"react\";\r\nimport {Text, Image, View} from '@react-pdf/renderer';\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport {PrintDocumentContext} from \"./printDocumentContext\";\r\n\r\nconst PrintDocumentHeader = (props) => {\r\n const {styles, jobId, fabricatorData, printLogo} = props;\r\n\r\n const date = new Date();\r\n const printContext = useContext(PrintDocumentContext);\r\n\r\n const logoView = printLogo ? (\r\n \r\n \r\n \r\n ) : null;\r\n\r\n const jobInfoView = (\r\n \r\n {document.kvConfig.jobId || jobId ? (\r\n \r\n {printContext.messages[\"receipt.header.quoteNumber\"]}\r\n {document.kvConfig.jobId || jobId}\r\n \r\n ) : null}\r\n \r\n {printContext.messages[\"receipt.header.date\"]}\r\n {date.toLocaleDateString().replace(/\\//gi, \"-\")}\r\n \r\n \r\n {printContext.messages[\"receipt.header.time\"]}\r\n {date.toLocaleTimeString()}\r\n \r\n \r\n )\r\n\r\n if (fabricatorData.isAmericanStandard) {\r\n return (\r\n \r\n \r\n Specification Sheet\r\n \r\n {logoView}\r\n {jobInfoView}\r\n \r\n )\r\n }\r\n\r\n return (\r\n \r\n \r\n {logoView}\r\n {jobInfoView}\r\n \r\n )\r\n};\r\n\r\nPrintDocumentHeader.propTypes = {\r\n fabricatorData: PropTypes.object,\r\n jobId: PropTypes.number,\r\n styles: PropTypes.object.isRequired,\r\n printLogo: PropTypes.string,\r\n};\r\n\r\nexport default PrintDocumentHeader\r\n","import React, {useContext, Fragment} from \"react\";\r\nimport {Text, View} from '@react-pdf/renderer';\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport {ADDRESSES_TYPES} from \"./constants\";\r\nimport {PrintDocumentContext} from \"./printDocumentContext\";\r\n\r\n\r\nconst PrintDocumentInfoFabricator = (props) => {\r\n const {styles, fabricatorData, threeColumns} = props;\r\n\r\n const mainAddress = Array.isArray(fabricatorData.addresses) && fabricatorData.addresses.find(adr => {\r\n return adr.addressType === ADDRESSES_TYPES.Shipping\r\n })\r\n\r\n const city = mainAddress && mainAddress.city ? mainAddress.city : fabricatorData.city || \"\";\r\n const address = mainAddress && mainAddress.address1 ? mainAddress.address1 : fabricatorData.address1 || fabricatorData.address2 || \"\";\r\n const postal = mainAddress && mainAddress.postal ? mainAddress.postal : fabricatorData.postal || \"\";\r\n const provence = mainAddress && mainAddress.provence ? mainAddress.provence : fabricatorData.provence || \"\";\r\n let displayAddress = \"\";\r\n [city, provence, postal].forEach(addressPart => { // 1) city 2) provence 3) postal\r\n if (addressPart) {\r\n if (displayAddress) {\r\n displayAddress += \", \"\r\n }\r\n displayAddress += addressPart\r\n }\r\n });\r\n const contactEmail = fabricatorData.contactEmail || \"\";\r\n const emails = contactEmail.includes(\",\") ? contactEmail.split(\",\") : [];\r\n const printContext = useContext(PrintDocumentContext);\r\n\r\n return (\r\n \r\n {printContext.messages[\"receipt.mainInfo.fabricatorInformation\"]}\r\n {fabricatorData.companyName}\r\n {address ? {address} : null}\r\n {displayAddress ? {displayAddress} : null}\r\n {fabricatorData.isCaesarStone ? null : (\r\n \r\n {emails ? emails.map((email, emailIndex) => {\r\n return (\r\n \r\n {email}\r\n \r\n )\r\n }) : {contactEmail}}\r\n {fabricatorData.phone || \"\"}\r\n \r\n )}\r\n \r\n )\r\n};\r\n\r\nPrintDocumentInfoFabricator.propTypes = {\r\n fabricatorData: PropTypes.object.isRequired,\r\n threeColumns: PropTypes.bool,\r\n styles: PropTypes.object.isRequired,\r\n};\r\n\r\nexport default PrintDocumentInfoFabricator\r\n","export const ADDRESSES_TYPES = {\r\n Billing: \"Billing\",\r\n Shipping: \"Shipping\",\r\n}\r\n","import React, {Fragment, useContext} from \"react\";\r\nimport {View, Text} from '@react-pdf/renderer';\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport {getCurrencySign, getPriceWithCurrency, getRoomName, getTotalPrice, toFixedPrice} from \"../../../misc/helpers\";\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\nimport PrintDocumentBodyCartItem from \"./printDocumentBodyCartItem\";\r\nimport {PrintDocumentContext} from \"./printDocumentContext\";\r\nimport PrintSimilarProducts from \"./similarProducts/printSimilarProducts\";\r\nimport {filterCartItems} from \"../../look/lookNavigation/lookFunctions2\";\r\nimport {getCommonVisualizerType, IS_LIXIL_UI} from \"../../../config\";\r\nimport {getShowPrice} from \"../../../misc/priceFunctions\";\r\nimport {\r\n getFeatureGroupFromWizardGroup,\r\n showWizardInsteadOfQT\r\n} from \"../../look/lookNavigation/lookMain/lookWizard/lookWizardFunctions\";\r\nimport {WIZARD_GROUP_TYPES} from \"../../../interfaces/wizardItemInterface\";\r\nimport PrintDocumentBodyWizardItem from \"./printDocumentBodyWizardItem\";\r\nimport {getDifferentCurrencyCartItems} from \"../../../misc/misc2\";\r\nimport {\r\n getWizardGroupName,\r\n isSameVisualizerWizard\r\n} from \"../../look/lookNavigation/lookMain/lookWizard/lookWizardFunctions2\";\r\n\r\nconst PrintDocumentBody = (props) => {\r\n let {styles, quotes, cartItems, fabricatorData, locale, filterGroups, wizardState, sqftSlabState,\r\n cartItemsThumbnails} = props;\r\n const fabricatorSettings = fabricatorData.settings;\r\n\r\n const printContext = useContext(PrintDocumentContext);\r\n\r\n if (IS_LIXIL_UI) {\r\n cartItems = filterCartItems(cartItems, true, true);\r\n }\r\n\r\n const getGroupName = (featureGroup, quoteIndex) => {\r\n const lowerCasedName = featureGroup.partName.toLowerCase();\r\n console.log(\"featureGroup.customNames\", featureGroup.customNames);\r\n if (featureGroup.customNames && featureGroup.customNames[quoteIndex]) {\r\n return featureGroup.customNames[quoteIndex]\r\n }\r\n if (fabricatorData.isLowes || fabricatorData.isCaesarStone) {\r\n if (locale === \"fr-FR\" && printContext.messages[\"transDoc.customDisplayName_FR.\"+ lowerCasedName]) {\r\n return printContext.messages[\"transDoc.customDisplayName_FR.\"+ lowerCasedName]\r\n } else if (locale === \"pl-PL\" && printContext.messages[\"transDoc.customTranslateName_PL.\"+ lowerCasedName]) {\r\n return printContext.messages[\"transDoc.customTranslateName_PL.\"+ lowerCasedName]\r\n }\r\n }\r\n return featureGroup.customGroupDisplayName || featureGroup.partName\r\n };\r\n\r\n const showPrice = getShowPrice(fabricatorData, true);\r\n\r\n return quotes.map((quote, quoteIndex) => {\r\n\r\n const layout = getCurrentLayout(fabricatorSettings.allowVisualizerSwitching && quote.room ? quote.room : document.kvConfig.visualizerType);\r\n const visType = getCommonVisualizerType(fabricatorSettings.allowVisualizerSwitching && quote.room ? quote.room : document.kvConfig.visualizerType);\r\n\r\n const quoteTotalPrice = getTotalPrice(quoteIndex, false);\r\n // const subTotalPrice = getQuotePriceWithTaxes(quoteTotalPrice);\r\n const subTotalPrice = quoteTotalPrice.materialPrice;\r\n const fixedPrice = toFixedPrice(subTotalPrice);\r\n\r\n let uniqueCartItemIds = [];\r\n const quoteCartItems = cartItems.filter((cartItem) => cartItem.cartFeature && (cartItem.currentQuote === quoteIndex));\r\n\r\n const {wizardList, wizardIsActive, allWizardsValues} = wizardState;\r\n const showWizardSteps = showWizardInsteadOfQT(wizardList, wizardIsActive);\r\n\r\n const differentCurrencyObjects = getDifferentCurrencyCartItems(fabricatorSettings, quoteCartItems);\r\n\r\n return (\r\n \r\n \r\n {printContext.messages[\"receipt.content.roomTitle\"]} {getRoomName(quoteIndex, cartItems, quotes, printContext.messages, locale, fabricatorData)}\r\n \r\n \r\n {showWizardSteps ? wizardList.map(wizardItem => {\r\n const existingAllObject = allWizardsValues.find(wizSelObject => {\r\n return wizSelObject.wizardItemId === wizardItem.id && wizSelObject.quoteIndex === quoteIndex\r\n && isSameVisualizerWizard(wizSelObject, visType)\r\n });\r\n if (!existingAllObject || !existingAllObject.wizardSelectedValues) {\r\n return null\r\n }\r\n return Object.keys(existingAllObject.wizardSelectedValues).map(key => {\r\n const wizardGroup = existingAllObject.wizardSelectedValues[key].wizardGroup;\r\n if (wizardGroup && wizardGroup.nodeType === WIZARD_GROUP_TYPES.custom && !wizardGroup.hideInCartAndReceipt) {\r\n return \r\n }\r\n let currentCartItems = cartItems.filter(cartItem => {\r\n if (cartItem.bundleParentId) {\r\n return false\r\n }\r\n return cartItem.cartFeature && (cartItem.currentQuote === quoteIndex)\r\n && (wizardGroup && cartItem.fromWizardGroupId\r\n ? (wizardGroup.id === cartItem.fromWizardGroupId)\r\n : +key === cartItem.fromWizardStep)\r\n && !uniqueCartItemIds.includes(cartItem.id)\r\n });\r\n if (currentCartItems.length) {\r\n uniqueCartItemIds = [...uniqueCartItemIds, ...currentCartItems.map(cItem => cItem.id)];\r\n const slabsCartItems = currentCartItems.filter(cartItem => cartItem.partId === \"slabs\");\r\n const featureGroup = getFeatureGroupFromWizardGroup(wizardGroup, layout);\r\n const mainCartItems = (\r\n \r\n \r\n {featureGroup ? getGroupName(featureGroup, quoteIndex) || getWizardGroupName(wizardGroup) : getWizardGroupName(wizardGroup)}\r\n \r\n {currentCartItems.map((cartItem, cartItemIndex) => {\r\n if (cartItem.partId === \"slabs\") {\r\n return null\r\n }\r\n return \r\n })}\r\n \r\n )\r\n return slabsCartItems.length ? (\r\n \r\n {mainCartItems}\r\n \r\n \r\n {printContext.messages[\"sqftFeaturesPopup.title.slabs\"]}\r\n \r\n {slabsCartItems.map((cartItem, cartItemIndex) => {\r\n return \r\n })}\r\n \r\n \r\n ) : mainCartItems\r\n // } else if (wizardGroup && existingAllObject.wizardSelectedValues[key].selectedFeature && !wizardGroup.hideInCartAndReceipt) {\r\n // return \r\n }\r\n })\r\n }) : null}\r\n {layout.qtCategories && !showWizardSteps ? (\r\n layout.qtCategories.map(qtCategory => {\r\n return qtCategory.subParts.map((subPart, subPartIndex) => {\r\n let currentCartItems = quoteCartItems.filter(cartItem => {\r\n if (cartItem.bundleParentId) {\r\n return false\r\n }\r\n return (subPart.part.partId === cartItem.partId || (cartItem.relatedProductParent && subPart.part.partId === cartItem.relatedProductParent.partId))\r\n && !uniqueCartItemIds.includes(cartItem.id)\r\n });\r\n if (!currentCartItems.length) {\r\n return null\r\n }\r\n uniqueCartItemIds = [...uniqueCartItemIds, ...currentCartItems.map(cItem => cItem.id)];\r\n return (\r\n \r\n {getGroupName(subPart.part, quoteIndex)}\r\n {currentCartItems.map((cartItem, cartItemIndex) => {\r\n return \r\n })}\r\n \r\n )\r\n })\r\n })\r\n ) : null}\r\n {quoteCartItems.map((cartItem) => {\r\n if (!uniqueCartItemIds.includes(cartItem.id) && !cartItem.bundleParentId) {\r\n uniqueCartItemIds.push(cartItem.id);\r\n return (\r\n \r\n \r\n {cartItem.displayFakeFeatureGroupName\r\n ? printContext.messages[\"sqftFeaturesPopup.title.\" + cartItem.displayFakeFeatureGroupName]\r\n : cartItem.cartFeature.dbFeature.customGroupName || cartItem.selectionGroup\r\n || (cartItem.cartFeature && cartItem.cartFeature.getParent ? getGroupName(cartItem.cartFeature.getParent(), quoteIndex) : null)}\r\n \r\n \r\n \r\n )\r\n }\r\n return null\r\n })}\r\n \r\n {showPrice ? (\r\n \r\n \r\n {printContext.messages[\"shoppingCart.totalColumnsSubTotal\"]}: \r\n \r\n {getPriceWithCurrency(fabricatorSettings, fixedPrice)}\r\n \r\n \r\n {differentCurrencyObjects.length ? differentCurrencyObjects.map(currObject => {\r\n const currentTotal = getTotalPrice(quoteIndex, false, currObject.cartItems);\r\n return (\r\n \r\n {printContext.messages[\"shoppingCart.totalColumnsSubTotal\"]}: \r\n \r\n {getCurrencySign(currObject.currency, fabricatorSettings) + toFixedPrice(currentTotal.materialPrice, true)}\r\n \r\n \r\n )\r\n }) : null}\r\n \r\n \r\n ) : null}\r\n \r\n )\r\n })\r\n};\r\n\r\nPrintDocumentBody.propTypes = {\r\n quotes: PropTypes.array.isRequired,\r\n cartItems: PropTypes.array.isRequired,\r\n fabricatorData: PropTypes.object.isRequired,\r\n locale: PropTypes.string.isRequired,\r\n filterGroups: PropTypes.array,\r\n styles: PropTypes.object.isRequired,\r\n};\r\n\r\nexport default PrintDocumentBody\r\n","import React, {useContext} from \"react\";\r\nimport {View, Text} from \"@react-pdf/renderer\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport {PrintDocumentContext} from \"./printDocumentContext\";\r\nimport {cartItemInterface} from \"../../shoppingCart/cartItemInterface\";\r\nimport PrintDocumentBodyCartItem from \"./printDocumentBodyCartItem\";\r\nimport {IS_LIXIL_UI} from \"../../../config\";\r\n\r\n\r\nconst PrintDocumentBodyBundledCartItems = (props) => {\r\n const {styles, cartItem, fabricatorData, locale, cartItems} = props;\r\n // const fabricatorSettings = fabricatorData.settings;\r\n\r\n const bundleProducts = cartItems ? cartItems.filter(cItem => {\r\n return cItem.bundleParentId && (cItem.bundleParentId === cartItem.id)\r\n }) : [];\r\n\r\n const printContext = useContext(PrintDocumentContext);\r\n\r\n if (fabricatorData.isAmericanStandard && !IS_LIXIL_UI) {\r\n // the quoting tool needs to have the bundled products hidden (only for American standard) in the cart and receipt,\r\n // but still send items through the API to LP.\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n \r\n {printContext.messages[\"shoppingCart.bundledItems\"]}\r\n \r\n \r\n {bundleProducts.map(bundleCartItem => {\r\n return \r\n })}\r\n \r\n \r\n )\r\n};\r\n\r\nPrintDocumentBodyBundledCartItems.propTypes = {\r\n cartItem: PropTypes.shape(cartItemInterface),\r\n fabricatorData: PropTypes.object.isRequired,\r\n locale: PropTypes.string.isRequired,\r\n styles: PropTypes.object.isRequired,\r\n};\r\n\r\nexport default PrintDocumentBodyBundledCartItems\r\n","export default [\r\n \"granite_transformations_of_cambridge\",\r\n \"granite_transformations_of_watford\",\r\n \"granite_transformations_of_norwich\",\r\n \"granite_transformations_of_holt\",\r\n \"granite_transformations_of_newcastle\",\r\n \"granite_transformations_of_newark\",\r\n \"granite_transformations_of_nottingham\",\r\n \"granite_transformations_of_wakefield\",\r\n \"granite_transformations_of_york\",\r\n \"granite_transformations_north_leeds\",\r\n \"granite_transformations_of_ipswich\",\r\n \"granite_transformations_of_colchester\",\r\n \"granite_transformations_of_belfast\",\r\n \"granite_transformations_of_hinckley\",\r\n \"granite_transformations_of_tees_valley\",\r\n \"granite_transformations_of_tunbridge_wells\",\r\n \"granite_transformations_of_ruxley\",\r\n \"granite_transformations_of_sevenoaks\",\r\n \"granite_transformations_of_derby\",\r\n \"granite_transformations_of_bridgemere\",\r\n \"granite_transformations_congleton\",\r\n \"granite_transformations_of_cheltenham\",\r\n \"granite_transformations_of_bristol\",\r\n \"granite_transformations_of_banbury\",\r\n \"granite_transformations_of_warwick\",\r\n \"granite_transformations_of_rugby\",\r\n \"granite_transformations_of_gyle\",\r\n \"granite_transformations_of_exeter\",\r\n \"trend_transformations_of_bolton\",\r\n \"trend_transformations_of_kutsford\",\r\n \"trend_transformations_of_maidstone\",\r\n \"trend_transformations_of_ellesmere_port\",\r\n \"trend_transformations_of_burton\",\r\n \"trend_transformations_of_speke\",\r\n \"trend_transformations_of_perth\",\r\n \"trend_transformations_of_plymouth\",\r\n \"trend_transformations_of_birmingham_east\",\r\n \"trend_transformations_of_milton_keynes\",\r\n \"trend_transformations_of_eastbourne\",\r\n \"trend_transformations_uk\"\r\n];\r\n","import React, {useContext} from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport {View, Text} from \"@react-pdf/renderer\";\r\n\r\nimport PrintSimilarProductsListItem from \"./printSimilarProductsListItem\";\r\nimport {PrintDocumentContext} from \"../printDocumentContext\";\r\nimport {getFeaturesCollectionsList} from \"../../../shoppingCart/similarProducts/similarProductsFunctions\";\r\n\r\nconst PrintSimilarProducts = (props) => {\r\n\r\n const {styles, cartItems, fabricatorData, filterGroups, locale, quoteIndex} = props;\r\n const similarOpened = true;\r\n const printContext = useContext(PrintDocumentContext);\r\n\r\n const insideQuote = Number.isInteger(quoteIndex);\r\n\r\n const addedCountertops = insideQuote\r\n ? cartItems.filter(cItem => cItem.currentQuote === quoteIndex && cItem.partId.includes(\"countertop\"))\r\n : cartItems.filter(cItem => cItem.partId.includes(\"countertop\"));\r\n\r\n const cartItem = addedCountertops[0];\r\n\r\n if (!cartItem) {\r\n return null\r\n }\r\n\r\n const featuresCollectionsList = getFeaturesCollectionsList(cartItem, filterGroups);\r\n if (!featuresCollectionsList || !featuresCollectionsList.length) {\r\n return null\r\n }\r\n\r\n const totalCountertopsQuantity = addedCountertops.reduce(((accumulator, cItem) => accumulator + cItem.quantity), 0);\r\n\r\n return (\r\n \r\n \r\n {printContext.messages[\"similar.title\"]}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {printContext.messages[\"similar.filterName\"]}\r\n \r\n \r\n {printContext.messages[\"similar.product.priceProject\"]}\r\n \r\n \r\n {similarOpened ? featuresCollectionsList.map((featureCollection, featureCollectionIndex) => {\r\n return \r\n }) : null}\r\n \r\n \r\n \r\n )\r\n};\r\n\r\nPrintSimilarProducts.propTypes = {\r\n quoteIndex: PropTypes.number,\r\n cartItems: PropTypes.array.isRequired,\r\n filterGroups: PropTypes.array,\r\n fabricatorData: PropTypes.object.isRequired,\r\n locale: PropTypes.string.isRequired,\r\n styles: PropTypes.object.isRequired,\r\n};\r\n\r\nexport default PrintSimilarProducts\r\n","import React, {useContext} from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport {View, Text} from \"@react-pdf/renderer\";\r\n\r\nimport {cartItemInterface} from \"../../../shoppingCart/cartItemInterface\";\r\nimport {getPriceWithCurrency} from \"../../../../misc/helpers\";\r\nimport {PrintDocumentContext} from \"../printDocumentContext\";\r\nimport {getCartItemName} from \"../printDocumentFunctions\";\r\nimport {getSimilarItemInfoObject} from \"../../../shoppingCart/similarProducts/similarProductsFunctions\";\r\nimport {featureCollectionInterface} from \"../../../../interfaces/featureInterface\";\r\n\r\nconst PrintSimilarProductsListItem = (props) => {\r\n\r\n const {styles, cartItem, addedCountertops, fabricatorData, locale, featureCollection, filterGroups, quoteIndex, lastItem,\r\n totalCountertopsQuantity} = props;\r\n const fabricatorSettings = fabricatorData.settings;\r\n const printContext = useContext(PrintDocumentContext);\r\n\r\n const {filterValueName, feature, subTotalPrice} = getSimilarItemInfoObject(\r\n cartItem,\r\n addedCountertops,\r\n featureCollection,\r\n totalCountertopsQuantity,\r\n quoteIndex,\r\n filterGroups\r\n );\r\n\r\n return (\r\n \r\n \r\n \r\n {filterValueName}\r\n \r\n \r\n {printContext.messages[\"similar.product.example\"]} {getCartItemName(feature, fabricatorData, printContext, locale)}\r\n \r\n \r\n \r\n {getPriceWithCurrency(fabricatorSettings, subTotalPrice, feature)}\r\n \r\n \r\n )\r\n};\r\n\r\nPrintSimilarProductsListItem.propTypes = {\r\n quoteIndex: PropTypes.number.isRequired,\r\n cartItem: PropTypes.shape(cartItemInterface),\r\n addedCountertops: PropTypes.arrayOf(PropTypes.shape(cartItemInterface)),\r\n featureCollection: PropTypes.shape(featureCollectionInterface),\r\n fabricatorData: PropTypes.object.isRequired,\r\n locale: PropTypes.string.isRequired,\r\n filterGroups: PropTypes.array.isRequired,\r\n lastItem: PropTypes.bool.isRequired,\r\n styles: PropTypes.object.isRequired,\r\n totalCountertopsQuantity: PropTypes.number.isRequired,\r\n};\r\n\r\n\r\nexport default PrintSimilarProductsListItem\r\n","export const getGroupDescription = (groupName) => {\r\n groupName = (groupName || '').toLowerCase();\r\n // console.log(\"groupName\", groupName);\r\n switch (groupName) {\r\n case 'material':\r\n return \"quotingTool.featureGroupDescription.material\";\r\n case \"room\":\r\n return \"quotingTool.featureGroupDescription.room\";\r\n case \"edge profile\":\r\n case \"edge\":\r\n return \"quotingTool.featureGroupDescription.edgeProfile\";\r\n case \"cutouts\":\r\n return \"quotingTool.featureGroupDescription.cutouts\";\r\n case \"faucets\":\r\n case \"faucet\":\r\n return \"quotingTool.featureGroupDescription.faucet\";\r\n case \"sinks\":\r\n case \"sink\":\r\n return \"quotingTool.featureGroupDescription.sink\";\r\n case \"counter top removal\":\r\n case \"countertop removal\":\r\n return \"quotingTool.featureGroupDescription.countertopRemoval\";\r\n case \"counter top disposal\":\r\n case \"countertop disposal\":\r\n return \"quotingTool.featureGroupDescription.countertopDisposal\";\r\n case \"radius\":\r\n return \"quotingTool.featureGroupDescription.radius\";\r\n case \"plumbing\":\r\n return \"quotingTool.featureGroupDescription.plumbing\";\r\n case \"backsplash\":\r\n return \"quotingTool.featureGroupDescription.backsplash\";\r\n case \"sealer\":\r\n return \"quotingTool.featureGroupDescription.sealer\";\r\n case \"hourly labor\":\r\n return \"quotingTool.featureGroupDescription.hourly\";\r\n case \"trip charge\":\r\n return \"quotingTool.featureGroupDescription.tripCharge\";\r\n case \"milling down\":\r\n return \"quotingTool.featureGroupDescription.millingDown\";\r\n case \"template\":\r\n return \"quotingTool.featureGroupDescription.template\";\r\n case \"15 year sealer\":\r\n return \"quotingTool.featureGroupDescription.15YearsSealer\";\r\n case \"10 year sealer\":\r\n return \"quotingTool.featureGroupDescription.10YearsSealer\";\r\n case \"finishes\":\r\n return \"quotingTool.featureGroupDescription.finishes\";\r\n case \"flat metal support brackets\":\r\n return \"quotingTool.featureGroupDescription.flatMetalSupportBrackets\";\r\n case \"bump out\":\r\n return \"quotingTool.featureGroupDescription.bumpOut\";\r\n case \"inside corner\":\r\n return \"quotingTool.featureGroupDescription.insideCorner\";\r\n case \"45 degree inside corner\":\r\n return \"quotingTool.featureGroupDescription.45DegreeInsideCorner\";\r\n case \"arch\":\r\n return \"quotingTool.featureGroupDescription.arch\";\r\n case \"cooktop type\":\r\n return \"quotingTool.featureGroupDescription.cooktopType\";\r\n case \"sink type\":\r\n return \"quotingTool.featureGroupDescription.sinkType\";\r\n case 'stove type':\r\n return 'quotingTool.featureGroupDescription.stoveType';\r\n case 'protection plan':\r\n return 'quotingTool.featureGroupDescription.protectionPlan';\r\n default:\r\n return 'quotingTool.featureGroupDescription.default';\r\n }\r\n}\r\n","import axios from \"axios\";\r\nimport store from \"../store\";\r\nimport {setNetworkConnection} from \"../actions/serverFunctions\";\r\n\r\nconst headers = {\r\n \"Content-Type\": \"application/json\"\r\n};\r\n\r\nconst AxiosInstance = axios.create({\r\n // baseURL: process.env.REACT_APP_API_BASE_URL + '/api/',\r\n // timeout: 120000,\r\n headers\r\n});\r\n\r\nAxiosInstance.interceptors.response.use((response) => {\r\n const {serverState} = store.getState();\r\n if (!serverState.networkConnection) {\r\n store.dispatch(setNetworkConnection(true))\r\n }\r\n return response;\r\n}, (error) => {\r\n // Do something with response error\r\n if (error && error.toJSON && error.toJSON().message === \"Network Error\") {\r\n store.dispatch(setNetworkConnection(false))\r\n }\r\n return Promise.reject(error);\r\n});\r\n\r\nexport default AxiosInstance;\r\n\r\n\r\nexport const apiResponseError = response => {\r\n // console.log(\"apiResponseError\", response);\r\n if (response && response.data && response.data.errors) {\r\n return Object.keys(response.data.errors)\r\n .map(k => `${k} - ${response.data.errors[k]}`)\r\n .join('
    ');\r\n }\r\n if (response && response.error) {\r\n return response.error;\r\n }\r\n\r\n return null;\r\n};\r\n\r\nexport const apiGet = async url => {\r\n try {\r\n const response = await AxiosInstance.get(url);\r\n return {data: {...response.data}, error: apiResponseError(response)};\r\n } catch (error) {\r\n return {error: apiResponseError(error)};\r\n }\r\n};\r\n\r\nexport const apiPost = async (url, data) => {\r\n console.log(\"url to post\", url);\r\n console.log(\"data to post\", data);\r\n try {\r\n const response = await AxiosInstance.post(url, data);\r\n console.log(\"response1\", response);\r\n return {data: {...response.data}, error: apiResponseError(response)};\r\n } catch (error) {\r\n console.log(\"response1 error\", error);\r\n return {error: apiResponseError(error)};\r\n }\r\n}\r\n\r\n","export default \"// This is our input from js world\\r\\nattribute vec2 coords;\\r\\n// This is output for the fragment shader\\r\\n// varying variables are a little special\\r\\n// you will see why later\\r\\nvarying highp vec2 vTextureCoord;\\r\\n\\r\\nvoid main (void) {\\r\\n // Texture and verticies have different coordinate spaces\\r\\n // we do this to invert Y axis\\r\\n vTextureCoord = -coords;\\r\\n\\r\\n // Setting vertix position for shape assembler\\r\\n // GLSL has many convenient vector functions\\r\\n // here we extending 2D coords vector to 4D with 2 values\\r\\n // 0.0 is a Z coordinate\\r\\n // 1.1 is a W, special value needed for 3D math\\r\\n // just leave it 1 for now\\r\\n gl_Position = vec4(coords, 0.0, 1.0);\\r\\n}\";","export default \"precision mediump float;\\r\\nvarying highp vec2 vTextureCoord;\\r\\nuniform sampler2D uSampler;\\r\\n\\r\\nvec2 coords;\\r\\nfloat x;\\r\\nfloat y;\\r\\nfloat l;\\r\\nfloat a;\\r\\nvec4 color;\\r\\nvec4 color2;\\r\\n\\r\\nfloat to_srgb(float v) {\\r\\n float result = 0.0;\\r\\n if (v < 0.003) {\\r\\n result = v * 12.920;\\r\\n } else {\\r\\n result = pow(v, 0.417);\\r\\n result = result * 1.055;\\r\\n result = result - 0.055;\\r\\n }\\r\\n return result;\\r\\n}\\r\\n\\r\\nvec4 vec_to_srgb(vec4 v) {\\r\\n vec4 result;\\r\\n result.r = to_srgb(v.r);\\r\\n result.g = to_srgb(v.g);\\r\\n result.b = to_srgb(v.b);\\r\\n result.a = v.a;\\r\\n return result;\\r\\n}\\r\\n\\r\\nfloat from_srgb(float v) {\\r\\n float result = 0.0;\\r\\n if (v < 0.040) {\\r\\n result = v / 12.920;\\r\\n } else {\\r\\n result = v + 0.055;\\r\\n result = result / 1.055;\\r\\n result = pow(result, 2.4);\\r\\n }\\r\\n return result;\\r\\n}\\r\\n\\r\\nvec4 vec_from_srgb(vec4 v) {\\r\\n vec4 result;\\r\\n result.r = from_srgb(v.r);\\r\\n result.g = from_srgb(v.g);\\r\\n result.b = from_srgb(v.b);\\r\\n result.a = v.a;\\r\\n return result;\\r\\n}\\r\\n\\r\\nvoid main(void){\\r\\n float gamma = 2.4;\\r\\n float out_gamma = 0.41666;\\r\\n x = vTextureCoord[0];\\r\\n y = vTextureCoord[1];\\r\\n coords[0] = (1.0 - x) / 2.0;\\r\\n coords[1] = (y + 1.0) / 2.0;\\r\\n color = vec_from_srgb(texture2D(uSampler, coords));\\r\\n a = color.a;\\r\\n color2 = vec4(8, 8, 8, 0) * color + vec4(1, 1, 1, 0);\\r\\n color2 = vec4(8, 8, 8, 0) * color / color2;\\r\\n color2.a = a;\\r\\n gl_FragColor = vec_to_srgb(color2);\\r\\n}\";","import $ from \"jquery\";\r\n\r\nconst sqftCursorManager = {\r\n canvas: null,\r\n currentCursor: null,\r\n currentCursorOwner: null,\r\n noCursorStealing: false,\r\n\r\n init(canvas) {\r\n this.canvas = canvas;\r\n this.resetCursor(null);\r\n },\r\n\r\n setCursor(cursor, owner, noStealing = false) {\r\n this.noCursorStealing = noStealing || this.noCursorStealing;\r\n\r\n if (this.currentCursorOwner === null || this.currentCursorOwner === owner) {\r\n if (this.currentCursor !== cursor) {\r\n const prefix = \"cursor-\";\r\n const classes = this.canvas.className.split(\" \").filter(c => c.lastIndexOf(prefix, 0) !== 0);\r\n this.canvas.className = classes.join(\" \").trim();\r\n $(this.canvas).addClass(`cursor-${cursor}`);\r\n $(this.canvas).css({ cursor: null });\r\n this.currentCursorOwner = owner;\r\n this.currentCursor = cursor;\r\n }\r\n }\r\n },\r\n\r\n setCursorImage(cursorImage, owner, noStealing = false) {\r\n this.setCursor(\"image\", owner, noStealing);\r\n $(this.canvas).css({ cursor: `url(${cursorImage}), default !important` });\r\n },\r\n\r\n resetCursor(owner) {\r\n if (this.currentCursorOwner === owner) {\r\n this.currentCursorOwner = null;\r\n this.setCursor(\"grab\", null);\r\n this.releaseStealLock(owner);\r\n }\r\n },\r\n\r\n getCursor() {\r\n const prefix = \"cursor-\";\r\n const classes = this.canvas.className.split(\" \").filter(c => c.lastIndexOf(prefix, 0) === 0);\r\n return classes.map(c => c.replace(prefix, \"\"));\r\n },\r\n\r\n stealCursor(override = false, revertBackAfterMouseUp = false) {\r\n if (override && this.currentCursorOwner) {\r\n if (this.currentCursorOwner.destroy) {\r\n this.currentCursorOwner.destroy(true, revertBackAfterMouseUp);\r\n }\r\n }\r\n\r\n if (!this.noCursorStealing || override) {\r\n this.resetCursor(this.currentCursorOwner);\r\n }\r\n },\r\n\r\n releaseStealLock(owner) {\r\n if (this.currentCursorOwner === owner) {\r\n this.noCursorStealing = false;\r\n }\r\n }\r\n};\r\n\r\nexport default sqftCursorManager;\r\n","import EventManager from \"../../../store/sqftEventManager\";\r\nimport config from \"../../../store/sqftConfig\";\r\nimport {getFontsize, inchesToMm, isDisabledInPopupWithParents, isInnerCorner} from \"../../../../../helpers/sqftHelper\";\r\n//import shapeHelper from \"../../../../../helpers/shapeHelper\";\r\nimport {isDisabledInPopupShouldBeHidden} from \"../../../../../constants\";\r\n\r\nexport default function() {\r\n var self = this,\r\n point = null;\r\n\r\n function setPoint(value) { point = value; }\r\n\r\n this.destroy = function(protect) {\r\n if(!protect) {\r\n EventManager.removeEvent(self);\r\n }\r\n };\r\n\r\n this.init = function(point) {\r\n setPoint(point);\r\n this.initEvents();\r\n };\r\n this.initEvents = () => {\r\n EventManager.addEvent(\r\n EventManager.events.RENDER,\r\n self.render,\r\n self,\r\n EventManager.priorities.OVERLAY\r\n );\r\n }\r\n this.deregisterPartEvents = () => {\r\n EventManager.removeEvent(this);\r\n };\r\n this.reInitPartEvents = () => {\r\n this.initEvents();\r\n };\r\n this.render = (ctx) => {\r\n if (isDisabledInPopupShouldBeHidden() && isDisabledInPopupWithParents(point)) {\r\n return\r\n }\r\n\r\n if (point.arcLength > 0 || point.angle > 0) {\r\n const line = point.getParent(),\r\n shape = line.getParent(),\r\n //nextLine = shape.getNextLine(line),\r\n //nextLineTo = nextLine.calculateRenderPosition(nextLine.to),\r\n prevLine = shape.getPrevLine(line),\r\n prevLineFrom = prevLine.calculateRenderPosition(prevLine.from),\r\n renderTo = line.calculateRenderPosition(line.to),\r\n renderFrom = line.calculateRenderPosition(line.from),\r\n isInner = isInnerCorner(shape, prevLineFrom, renderFrom, renderTo);\r\n\r\n let fontSize = getFontsize(),\r\n font = (config.measureUnit === \"Imperial\" ? fontSize : fontSize - 5).toString() + \"px \" + config.activeFontBold,\r\n radius = point.arcLength || point.angle,\r\n //dir = shape.getAngleDirection(shape.getPrevLine(line)),\r\n //isInner = shapeHelper.isAngleInner(dir),\r\n pointCorner = point.corner ? point.corner : isInner,\r\n cornerMargin = pointCorner\r\n ? point.arcLength ? +point.arcLength - 8 : +point.angle\r\n : point.arcLength ? -point.arcLength + 8 : -point.angle,\r\n radiusLetter = point.arcLength ? \"r\" : \"\",\r\n dstring = config.measureUnit === \"Metric\"\r\n ? radiusLetter + new Fraction(inchesToMm(radius)) + \"mm\"\r\n : radiusLetter + new Fraction(radius) + \"\\\"\",\r\n mtext = ctx.measureText(dstring),\r\n tLen = mtext.width,\r\n offset = point.getPointField(),\r\n renderPos = {\r\n x: offset.x + offset.width,\r\n y: offset.y + (offset.height / 2)\r\n };\r\n ctx.beginPath();\r\n ctx.font = font;\r\n ctx.textAlign = \"center\";\r\n renderPos.y += fontSize / 2;\r\n // ctx.fillStyle = \"rgb(178, 99, 168)\";\r\n // ctx.fillRect(offset.x - 4, offset.y + 2 + (fontSize * 2), tLen + 6, fontSize + 4);\r\n ctx.beginPath();\r\n ctx.fillStyle = \"#b263a8\";\r\n\r\n //todo correct positions\r\n switch (point.pointDirection) {\r\n case \"lefttop\":\r\n ctx.wrapText(\r\n dstring,\r\n renderPos.x - offset.width + tLen,//- (tLen + cornerMargin) * config.scale / config.defaultScale,\r\n renderPos.y - (fontSize + cornerMargin) * config.scale / config.defaultScale, mtext, fontSize\r\n );\r\n break;\r\n case \"righttop\":\r\n ctx.wrapText(\r\n dstring,\r\n renderPos.x + cornerMargin * config.scale / config.defaultScale,\r\n renderPos.y - (fontSize + cornerMargin) * config.scale / config.defaultScale, mtext, fontSize\r\n );\r\n break;\r\n case \"rightbottom\":\r\n ctx.wrapText(\r\n dstring,\r\n renderPos.x + (fontSize + cornerMargin) * config.scale / config.defaultScale,\r\n renderPos.y + (fontSize + cornerMargin) * config.scale / config.defaultScale, mtext, fontSize\r\n );\r\n break;\r\n case \"leftbottom\":\r\n ctx.wrapText(\r\n dstring,\r\n renderPos.x - (60 + cornerMargin) * config.scale / config.defaultScale,\r\n renderPos.y + (fontSize + cornerMargin) * config.scale / config.defaultScale,\r\n mtext, fontSize\r\n );\r\n break;\r\n default:\r\n ctx.wrapText(\r\n dstring,\r\n renderPos.x,\r\n renderPos.y - (fontSize / 2) + (fontSize * 2), mtext, fontSize\r\n );\r\n break;\r\n }\r\n }\r\n };\r\n}\r\n","import {SQFTResourceController} from \"./SQFTResourceController\";\r\nimport Spacer from \"../../core/shapes/spacer\";\r\nimport {WORKSPACE_RESOURCES} from \"../../../../constants\";\r\n\r\nexport class SpacersController extends SQFTResourceController {\r\n isJustCreated: false;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.resourceName = WORKSPACE_RESOURCES.spacers;\r\n }\r\n\r\n setIsJustCreated(value) {\r\n this.isJustCreated = value\r\n }\r\n\r\n createSpacer(point1, point2, pos) {\r\n if (!this.isNotCreatedSpacerExist()) {\r\n this.addResource(new Spacer([point1, point2], pos));\r\n }\r\n }\r\n\r\n /**\r\n * Used to skip mouse up in workspace events\r\n **/\r\n isNotCreatedSpacerExist() {\r\n const resources = this.getResources();\r\n return resources.some(spacer => !spacer.getIsCreated())\r\n }\r\n}\r\n\r\n","import * as uuid from \"uuid\";\r\n\r\nimport EventManager from \"../../store/sqftEventManager\";\r\nimport {SHAPE_PART_ID, SIDEBAR_BUTTONS_MENU} from \"../../../../constants\";\r\nimport COLOR_THEMES from \"../../../../../../colorThemes\";\r\nimport eventManager from \"../../store/sqftEventManager\";\r\nimport store from \"../../../../../../store\";\r\nimport workspaceControllers from \"../../store/workspaceControllers\";\r\nimport {\r\n getDistanceFromPointToLine,\r\n getMousePositionOnShape,\r\n getParallelPoints,\r\n getPointField\r\n} from \"../../../../helpers/sqftHelper\";\r\nimport sqftEventManager from \"../../store/sqftEventManager\";\r\nimport {\r\n adjustPointsRelativeToTopLeft,\r\n findTopLeftPoint,\r\n getThePositionOfAPointToTheLeftOrRightOfALine, sortPointsClockwise\r\n} from \"../../../../helpers/coordinatesHelper\";\r\nimport sqftConfig from \"../../store/sqftConfig\";\r\nimport {createShapeFromPoints} from \"../../../../helpers/freeDrawHelper\";\r\nimport sqftShapeManager from \"../../store/sqftShapeManager\";\r\nimport ShapeCabinet from \"./shapeParts/shapeCabinet\";\r\n\r\nexport default class Spacer {\r\n id;\r\n state = {\r\n centerPoint: {x: 0, y: 0},\r\n betweenPoints: [],\r\n isCreated: false,\r\n isHovering: false,\r\n mouseDown: false,\r\n mouseDownPosition: null,\r\n };\r\n\r\n constructor(points, centerPoint) {\r\n this.id = uuid.v4();\r\n this.state.betweenPoints = points\r\n this.state.centerPoint = centerPoint\r\n this.initEvents();\r\n }\r\n\r\n getIsCreated() { return this.state.isCreated }\r\n setCreated(value) { this.state.isCreated = value}\r\n\r\n initEvents() {\r\n EventManager.addEvent(\r\n EventManager.events.RENDER,\r\n this.render.bind(this),\r\n this,\r\n EventManager.priorities.WALL\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_DOWN,\r\n this.onMouseDown.bind(this),\r\n this,\r\n EventManager.priorities.OVERALL\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_MOVE,\r\n this.onMouseMove.bind(this),\r\n this,\r\n EventManager.priorities.SEGMENT\r\n );\r\n }\r\n\r\n destroy() {\r\n this.deregisterEvents();\r\n this.destroyPoints();\r\n }\r\n\r\n destroyPoints() {\r\n for (const addedPoints of this.state.betweenPoints) {\r\n addedPoints.destroy()\r\n }\r\n }\r\n\r\n deregisterEvents() {\r\n eventManager.removeEvent(this);\r\n }\r\n\r\n onMouseDown(mousePos) {\r\n void mousePos;\r\n if (this.state.isHovering) {\r\n const reduxState = store.getState();\r\n if (reduxState.sqftMenuState.activeButton === SIDEBAR_BUTTONS_MENU.delete) {\r\n workspaceControllers.spacer.destroyResource(this)\r\n return true\r\n }\r\n }\r\n\r\n if (!this.state.isCreated) {\r\n this.createShapeFromSpacerPoints()\r\n this.setCreated(true);\r\n workspaceControllers.spacer.destroyResource(this);\r\n workspaceControllers.spacer.setIsJustCreated(true);\r\n return true\r\n }\r\n\r\n return false\r\n }\r\n\r\n createShapeFromSpacerPoints = () => {\r\n const [point3, point4] = this.getPointsToTheMouse();\r\n const shape = this.state.betweenPoints[0].getParent().getParent();\r\n\r\n // Получаем позиции точек на шейпе\r\n const point3PointField = getMousePositionOnShape(point3.x, point3.y, shape);\r\n const point4PointField = getMousePositionOnShape(point4.x, point4.y, shape);\r\n\r\n // Собираем точки шейпа\r\n const shapePoints = [\r\n this.state.betweenPoints[1],\r\n point3PointField,\r\n point4PointField,\r\n this.state.betweenPoints[0]\r\n ];\r\n\r\n const topLeftPoint = findTopLeftPoint(shapePoints);\r\n const adjustedShapePoints = adjustPointsRelativeToTopLeft(shapePoints, topLeftPoint);\r\n const sortedPoints = sortPointsClockwise(adjustedShapePoints);\r\n if (!sortedPoints) {\r\n console.warn(\"Shape creation skipped due to undefined points.\");\r\n return;\r\n }\r\n\r\n const shapePosition = shape.getPosition();\r\n const newShapePosition = {\r\n x: topLeftPoint.x + shapePosition.x,\r\n y: topLeftPoint.y + shapePosition.y\r\n };\r\n\r\n const shapeParams = {\r\n ...shape.shapeParams,\r\n isSpacer: true,\r\n canSnap: true,\r\n };\r\n\r\n const spacerShapeId = createShapeFromPoints(sortedPoints, SHAPE_PART_ID.spacer,\r\n false,\r\n newShapePosition,\r\n false,\r\n null,\r\n shapeParams\r\n );\r\n\r\n let spacerShape = sqftShapeManager.getShapeById(spacerShapeId);\r\n spacerShape.featureId = shape.featureId;\r\n spacerShape.relatedParentFeatureId = shape.relatedParentFeatureId;\r\n spacerShape.parentPartId = shape.partId;\r\n spacerShape.featureName = shape.featureName;\r\n spacerShape.colorSet = shape.colorSet;\r\n if (shape.shapeCabinet) {\r\n spacerShape.shapeCabinet = new ShapeCabinet(spacerShape)\r\n }\r\n }\r\n\r\n onMouseMove(mousePos) {\r\n void mousePos\r\n //this.state.isHovering = this.isMouseOverWall(mousePos) || this.state.mouseDown;\r\n }\r\n\r\n render(ctx) {\r\n if (this.state.isCreated) {\r\n //this.renderLines(ctx);\r\n } else {\r\n this.renderLinesToMouse(ctx);\r\n }\r\n }\r\n\r\n getPointsToTheMouse() {\r\n const betweenPoint1 = this.state.betweenPoints[0];\r\n const betweenPoint2 = this.state.betweenPoints[1];\r\n let pointField1 = getPointField(betweenPoint1.x, betweenPoint1.y, betweenPoint1.getParent().getParent());\r\n let pointField2 = getPointField(betweenPoint2.x, betweenPoint2.y, betweenPoint1.getParent().getParent());\r\n let mousePos = sqftEventManager.LastKnownMousePos;\r\n const distanceFromMouseToTheLine = getDistanceFromPointToLine(\r\n mousePos.x,\r\n mousePos.y,\r\n pointField1.x,\r\n pointField1.y,\r\n pointField2.x,\r\n pointField2.y,\r\n )\r\n const pointLeftRightPosition = getThePositionOfAPointToTheLeftOrRightOfALine(pointField1, pointField2, mousePos);\r\n const parallelPoints = getParallelPoints(\r\n pointField1,\r\n pointField2,\r\n pointLeftRightPosition > 0\r\n ? -distanceFromMouseToTheLine\r\n : distanceFromMouseToTheLine\r\n );\r\n void parallelPoints;\r\n // console.log(\"pointField1\", pointField1);\r\n // console.log(\"pointField2\", pointField2);\r\n // console.log(\"distanceFromMouseToTheLine\", distanceFromMouseToTheLine);\r\n // console.log(\"mousePos\", mousePos);\r\n // console.log(\"parallelPoints0\", parallelPoints[0]);\r\n // console.log(\"parallelPoints1\", parallelPoints[1]);\r\n // console.log(\"pointLeftRightPosition\", pointLeftRightPosition);\r\n return parallelPoints\r\n }\r\n\r\n renderLinesToMouse(ctx) {\r\n const [point3, point4] = this.getPointsToTheMouse();\r\n ctx.lineWidth = this.state.lineWidth;\r\n ctx.fillStyle = COLOR_THEMES[sqftConfig.activeTheme].primary;\r\n ctx.strokeStyle = this.state.lineColor;\r\n\r\n const betweenPoint1 = this.state.betweenPoints[0];\r\n const betweenPoint2 = this.state.betweenPoints[1];\r\n let pointField1 = getPointField(betweenPoint1.x, betweenPoint1.y, betweenPoint1.getParent().getParent());\r\n let pointField2 = getPointField(betweenPoint2.x, betweenPoint2.y, betweenPoint1.getParent().getParent());\r\n ctx.beginPath()\r\n ctx.moveTo(pointField1.x, pointField1.y);\r\n ctx.lineTo(pointField2.x, pointField2.y);\r\n ctx.lineTo(point3.x, point3.y);\r\n ctx.lineTo(point4.x, point4.y);\r\n ctx.fill();\r\n ctx.closePath();\r\n ctx.stroke();\r\n }\r\n\r\n // renderLines(ctx) {\r\n // const reduxState = store.getState();\r\n // const activeButton = reduxState.sqftMenuState.activeButton;\r\n // ctx.lineWidth = this.state.lineWidth;\r\n // ctx.fillStyle = COLOR_THEMES[sqftConfig.activeTheme].primary;\r\n // ctx.strokeStyle = this.state.isHovering && activeButton === SIDEBAR_BUTTONS_MENU.delete\r\n // ? COLORS.red\r\n // : this.state.lineColor;\r\n //\r\n // const betweenPoint1 = this.state.betweenPoints[0];\r\n // const betweenPoint2 = this.state.betweenPoints[1];\r\n // const betweenPoint3 = this.state.betweenPoints[3];\r\n // const betweenPoint4 = this.state.betweenPoints[4];\r\n // let pointField1 = getPointField(betweenPoint1.x, betweenPoint1.y, betweenPoint1.getParent().getParent());\r\n // let pointField2 = getPointField(betweenPoint2.x, betweenPoint2.y, betweenPoint1.getParent().getParent());\r\n // let pointField3 = getPointField(betweenPoint3.x, betweenPoint3.y, betweenPoint1.getParent().getParent());\r\n // let pointField4 = getPointField(betweenPoint4.x, betweenPoint4.y, betweenPoint1.getParent().getParent());\r\n //\r\n // ctx.beginPath()\r\n // ctx.moveTo(pointField1.x, pointField1.y);\r\n // ctx.lineTo(pointField2.x, pointField2.y);\r\n // ctx.lineTo(pointField3.x, pointField3.y);\r\n // ctx.lineTo(pointField4.x, pointField4.y);\r\n // ctx.fill();\r\n // ctx.closePath();\r\n // ctx.stroke();\r\n // }\r\n}\r\n","import sqftConfig from \"../../../../store/sqftConfig\";\r\nimport workspace from \"../../../workspace\";\r\n\r\nexport default class ModelCorePoint {\r\n _x;\r\n _y;\r\n _parent;\r\n _mixins = {\r\n movable: null\r\n };\r\n\r\n constructor(x, y, parent, mixins) {\r\n this._x = x;\r\n this._y = y;\r\n this._parent = parent;\r\n this._mixins = mixins;\r\n }\r\n\r\n get x() {\r\n return this.mixins.movable ? this.mixins.movable.posX : this._x;\r\n }\r\n\r\n set x(value) {\r\n this.mixins.movable ? this.mixins.movable.posX = value : this._x = value;\r\n }\r\n\r\n get y() {\r\n return this.mixins.movable ? this.mixins.movable.posX : this._y;\r\n }\r\n\r\n set y(value) {\r\n this.mixins.movable ? this.mixins.movable.posY = value : this._y = value;\r\n }\r\n\r\n get parent() {\r\n return this._parent;\r\n }\r\n\r\n set parent(value) {\r\n this._parent = value;\r\n }\r\n\r\n get mixins() {\r\n return this._mixins;\r\n }\r\n\r\n set mixins(value) {\r\n this._mixins = value;\r\n }\r\n\r\n getPosX() {\r\n return this.mixins.movable ? this.mixins.movable.posX : this.x;\r\n }\r\n\r\n getPosY() {\r\n return this.mixins.movable ? this.mixins.movable.posY : this.y;\r\n }\r\n\r\n setPosX(value) {\r\n return this.mixins.movable ? this.mixins.movable.posX = value : this.x = value;\r\n }\r\n\r\n setPosY(value) {\r\n return this.mixins.movable ? this.mixins.movable.posY = value : this.y = value;\r\n }\r\n\r\n rotate = (origin, angle, isSlabMode) => {\r\n let ret = {x: 0, y: 0};\r\n let tr = {x: this.getPosX() - origin.x, y: this.getPosY() - origin.y};\r\n\r\n ret.x = tr.x * Math.cos(angle) - tr.y * Math.sin(angle);\r\n ret.y = tr.x * Math.sin(angle) + tr.y * Math.cos(angle);\r\n\r\n //console.log(\"isSlabMode in point rotation\", isSlabMode)\r\n if (isSlabMode) {\r\n //todo rotation in slab mode\r\n this.setPosX(Math.round10(ret.x, -5) + Math.round10(origin.x, -1));\r\n this.setPosY(Math.round10(ret.y, -5) + Math.round10(origin.y, -1));\r\n } else {\r\n this.setPosX(Math.round10(ret.x, -5) + Math.round10(origin.x, -1));\r\n this.setPosY(Math.round10(ret.y, -5) + Math.round10(origin.y, -1));\r\n }\r\n };\r\n\r\n getPointField = () => {\r\n let fieldWidth = sqftConfig.fieldWidth,\r\n center = fieldWidth / 2,\r\n scale = workspace.getScale(),\r\n offset = parent.getOffset();\r\n\r\n return {\r\n x: (this.x * scale) - center + offset.x,\r\n y: (this.y * scale) - center + offset.y,\r\n width: fieldWidth\r\n };\r\n };\r\n\r\n getPointCords = () => {\r\n let pointField = this.getPointField();\r\n\r\n return {\r\n x: pointField.x + pointField.width / 2,\r\n y: pointField.y + pointField.width / 2\r\n }\r\n };\r\n}\r\n","import RenderMeasurementsInsideShape from \"./renderMeasurementsInsideShape\";\r\nimport workspace from \"../../workspace\";\r\nimport sqftConfig from \"../../../store/sqftConfig\";\r\nimport {getPointField} from \"../../../../../helpers/sqftHelper\";\r\nimport RenderFigures from \"../../../helpers/renderFigures\";\r\nimport RenderSVG from \"./renderSVG\";\r\n\r\nclass RenderMovableImage {\r\n constructor(movableImage) {\r\n this.movableImage = movableImage;\r\n this.renderMeasurementsInsideShape = new RenderMeasurementsInsideShape(movableImage);\r\n this.renderSVG = new RenderSVG(movableImage);\r\n }\r\n\r\n destroy = () => {\r\n //this.renderMeasurementsInsideShape.destroy();\r\n }\r\n\r\n setOuterShape = (value) => {\r\n this.renderMeasurementsInsideShape.outerShape = value\r\n }\r\n\r\n render = (ctx) => {\r\n if (workspace && workspace.getState().loading) return;\r\n if (this.movableImage.getIsRotatable()) {\r\n this.movableImage.shapeRotatable.render(ctx);\r\n }\r\n\r\n if (this.movableImage.attachedTo) {\r\n //this.renderSVG.renderAttachedTo(ctx);\r\n } else {\r\n this.renderSVG.render(ctx);\r\n\r\n //render measurements inside the shape\r\n const outerShape = this.movableImage.getOuterShape();\r\n if (this.movableImage.shouldRenderMeasurementsInsideTheShape() && outerShape) {\r\n this.movableImage.revealMeasurementsInsideShape();\r\n this.setOuterShape(outerShape);\r\n this.renderMeasurementsInsideShape.render(ctx);\r\n } else {\r\n this.movableImage.hideMeasurementsInsideShape();\r\n }\r\n }\r\n\r\n //render lines in dev mode\r\n if (sqftConfig.isDevMode()) {\r\n this.movableImage.getLines().forEach((activeShapeLine) => {\r\n let pointFieldActiveShapeLineFrom = getPointField(activeShapeLine.from.x, activeShapeLine.from.y, this.movableImage);\r\n RenderFigures.renderCircle(pointFieldActiveShapeLineFrom, 20, 1, '#63b141');\r\n });\r\n }\r\n return []; //no triangles for images\r\n }\r\n}\r\n\r\nexport default RenderMovableImage\r\n","import store from \"../../../../../../../store\";\r\nimport {\r\n rotatePoint,\r\n getPointDistance,\r\n getPointField,\r\n findClosestPointPairs, inchesToMm,\r\n} from \"../../../../../helpers/sqftHelper\";\r\n// import ShapeHelper from \"../../../../../helpers/shapeHelper\";\r\nimport RenderFigures from \"../../../helpers/renderFigures\";\r\nimport {getClosestIntersectionPoints, getIntersectionPointsAndLines} from \"../shapeParts/slabParts/seamToolHelper\";\r\nimport {COLORS} from \"../../../../../../../colorThemes\";\r\nimport sqftConfig from \"../../../store/sqftConfig\";\r\nimport {MEASURE_UNITS} from \"../../../../../constants\";\r\n\r\nclass RenderMeasurementsInsideShape {\r\n constructor(movableImage) {\r\n this.movableImage = movableImage;\r\n this.outerShape = null;\r\n this.lineOffset = 1;\r\n\r\n const serverState = store.getState().serverState;\r\n this.lineStartVertical = { x: -serverState.windowWidth, y: 0 };\r\n this.lineEndVertical = { x: serverState.windowWidth, y: 0 };\r\n this.lineStartHorizontal = { x: 0, y: -serverState.windowHeight };\r\n this.lineEndHorizontal = { x: 0, y: serverState.windowHeight };\r\n }\r\n\r\n setOuterShape = (value) => {\r\n this.outerShape = value\r\n }\r\n\r\n updateLinePoints() {\r\n const serverState = store.getState().serverState;\r\n const imageCenter = this.movableImage.getCenter();\r\n const angle = this.movableImage.rotatedDegrees;\r\n const imagePosOnField = this.movableImage.getCenterPosition();\r\n const pos = this.outerShape.getPosition();\r\n const imagePosOnShape = {x: imagePosOnField.x - pos.x, y: imagePosOnField.y - pos.y};\r\n void imagePosOnShape;\r\n void imageCenter;\r\n\r\n this.lineStartVertical = rotatePoint({ x: -serverState.windowWidth, y: imagePosOnShape.y }, imagePosOnShape, -angle);\r\n this.lineEndVertical = rotatePoint( { x: serverState.windowWidth, y: imagePosOnShape.y }, imagePosOnShape, -angle);\r\n this.lineStartVerticalOnImage = rotatePoint( { x: -serverState.windowWidth, y: imageCenter.y }, imageCenter, -angle);\r\n this.lineEndVerticalOnImage = rotatePoint({ x: serverState.windowWidth, y: imageCenter.y }, imageCenter, -angle);\r\n\r\n this.lineStartHorizontal = rotatePoint( { x: imagePosOnShape.x, y: -serverState.windowHeight }, imagePosOnShape, -angle);\r\n this.lineEndHorizontal = rotatePoint({ x: imagePosOnShape.x, y: serverState.windowHeight }, imagePosOnShape, -angle);\r\n this.lineStartHorizontalOnImage = rotatePoint( { x: imageCenter.x, y: -serverState.windowHeight }, imageCenter, -angle);\r\n this.lineEndHorizontalOnImage = rotatePoint({ x: imageCenter.x, y: serverState.windowHeight }, imageCenter, -angle);\r\n }\r\n\r\n render = (ctx) => {\r\n this.updateLinePoints();\r\n const imageCenterPosOnField = this.movableImage.getCenterPosition();\r\n const pos = this.outerShape.getPosition();\r\n const imageCenterPosOnShape = {x: imageCenterPosOnField.x - pos.x, y: imageCenterPosOnField.y - pos.y};\r\n const imagePosOnField = this.movableImage.getPosition();\r\n const imagePosOnShape = {x: imagePosOnField.x - pos.x, y: imagePosOnField.y - pos.y};\r\n\r\n ctx.lineWidth = 1;\r\n ctx.strokeStyle = COLORS.red; //COLOR_THEMES[sqftConfig.activeTheme].primary;\r\n\r\n // horizontal line\r\n const sideImagePoints = this.getImageSidePoints(this.lineStartVerticalOnImage, this.lineEndVerticalOnImage);\r\n const sideShapePoints = this.getShapeSidePoints(this.lineStartVertical, this.lineEndVertical);\r\n this.renderLineToBorder(ctx, sideShapePoints, sideImagePoints, imagePosOnShape);\r\n\r\n // vertical line\r\n this.renderArrowLineToCenter(ctx, imageCenterPosOnShape);\r\n }\r\n\r\n getImageSidePoints = (verticalLinePoint1, verticalLinePoint2) => {\r\n const lines = this.movableImage.getLines();\r\n\r\n return getIntersectionPointsAndLines(\r\n lines, verticalLinePoint1, verticalLinePoint2\r\n );\r\n }\r\n\r\n getShapeSidePoints = (verticalLinePoint1, verticalLinePoint2) => {\r\n return getIntersectionPointsAndLines(\r\n this.outerShape.getLines(true), verticalLinePoint1, verticalLinePoint2\r\n );\r\n }\r\n\r\n renderLineToBorder = (ctx, sideShapePoints, sideImagePoints, imagePosOnShape) => {\r\n if (!sideShapePoints.length) {\r\n return\r\n }\r\n const shapePos = this.outerShape.getPosition();\r\n const intersectionsWithShape = sideShapePoints.map(sideShapePoint => {\r\n return sideShapePoint.intersectionCords;\r\n });\r\n\r\n const intersectionsWithImage = sideImagePoints.map(sideImagePoint => {\r\n return {\r\n x: sideImagePoint.intersectionCords.x + imagePosOnShape.x,\r\n y: sideImagePoint.intersectionCords.y + imagePosOnShape.y,\r\n imageLine: sideImagePoint.line\r\n };\r\n });\r\n\r\n const closestPointPairs = findClosestPointPairs(intersectionsWithShape, intersectionsWithImage);\r\n\r\n for (const [index, closestPointPair] of closestPointPairs.entries()) {\r\n if (closestPointPair.pointA && closestPointPair.pointB) {\r\n const startPointField = getPointField(closestPointPair.pointA.x, closestPointPair.pointA.y, this.outerShape);\r\n const endPointField = getPointField(closestPointPair.pointB.x, closestPointPair.pointB.y, this.outerShape);\r\n\r\n ctx.beginPath();\r\n ctx.moveTo(startPointField.x, startPointField.y);\r\n ctx.lineTo(endPointField.x, endPointField.y);\r\n\r\n ctx.closePath();\r\n ctx.stroke();\r\n\r\n //const fontSize = getFontSizeFromContext(ctx);\r\n //let midPoint = getMidPoint(closestPointPair.pointA, closestPointPair.pointB);\r\n //midPoint = {x: midPoint.x + shapePos.x, y: midPoint.y + shapePos.y - fontSize / 2 / scale}\r\n const length = sqftConfig.measureUnit === MEASURE_UNITS.Metric\r\n ? inchesToMm(closestPointPair.distance, false, true)\r\n : closestPointPair.distance;\r\n\r\n // this.renderLineMeasurement(ctx,\r\n // midPoint,\r\n // length < 0.3 ? '' : length,\r\n // )\r\n const betweenPointFrom = {\r\n x: closestPointPair.pointA.x + shapePos.x,\r\n y: closestPointPair.pointA.y + shapePos.y\r\n }\r\n const betweenPointTo = {\r\n x: closestPointPair.pointB.x + shapePos.x,\r\n y: closestPointPair.pointB.y + shapePos.y\r\n }\r\n\r\n //closestPointPair.pointB.imageLine.measurementInsideShape.setPos(midPoint);\r\n closestPointPair.pointB.imageLine.measurementInsideShape.setPos({x: 1, y: 1}); // this is needed to render measurements\r\n closestPointPair.pointB.imageLine.measurementInsideShape.setValue(length);\r\n\r\n void index;\r\n if (closestPointPair.pointB.imageLine.lineIndex === 1) {\r\n closestPointPair.pointB.imageLine.measurementInsideShape.setBetweenPoints(betweenPointTo, betweenPointFrom); // this will override pos value\r\n } else {\r\n closestPointPair.pointB.imageLine.measurementInsideShape.setBetweenPoints(betweenPointFrom, betweenPointTo); // this will override pos value\r\n }\r\n }\r\n }\r\n }\r\n\r\n renderArrowLineToCenter = (ctx, imageCenterPosOnShape) => {\r\n let imageCenterPosOnShapePointField = getPointField(imageCenterPosOnShape.x, imageCenterPosOnShape.y, this.outerShape);\r\n let [intersectionXPointAndLine1, intersectionXPointAndLine2] = getClosestIntersectionPoints(\r\n this.outerShape.getLines(true), this.lineStartHorizontal, this.lineEndHorizontal, imageCenterPosOnShape\r\n );\r\n\r\n // we need only image lines that was intersected with the center line that supposed to be lines with the index 0 and 2\r\n let [intersectionXPointAndLine1WithImage, intersectionXPointAndLine2WithImage] = getClosestIntersectionPoints(\r\n this.movableImage.getLines(true), this.lineStartHorizontalOnImage, this.lineEndHorizontalOnImage, this.movableImage.getCenterPosition()\r\n );\r\n\r\n if (intersectionXPointAndLine1 && intersectionXPointAndLine2) {\r\n let intersectionXPoint1 = intersectionXPointAndLine1.intersectionCords;\r\n let intersectionXPoint2 = intersectionXPointAndLine2.intersectionCords;\r\n let intersectionXPoint1PointField = getPointField(intersectionXPoint1.x, intersectionXPoint1.y, this.outerShape);\r\n let intersectionXPoint2PointField = getPointField(intersectionXPoint2.x, intersectionXPoint2.y, this.outerShape);\r\n\r\n ctx.beginPath();\r\n RenderFigures.drawArrow(ctx,\r\n intersectionXPoint1PointField.x,\r\n intersectionXPoint1PointField.y + this.lineOffset,\r\n imageCenterPosOnShapePointField.x,\r\n imageCenterPosOnShapePointField.y - this.lineOffset\r\n );\r\n\r\n RenderFigures.drawArrow(ctx,\r\n imageCenterPosOnShapePointField.x,\r\n imageCenterPosOnShapePointField.y + this.lineOffset,\r\n intersectionXPoint2PointField.x,\r\n intersectionXPoint2PointField.y - this.lineOffset\r\n );\r\n ctx.closePath();\r\n ctx.stroke();\r\n\r\n //const scale = sqftConfig.scale;\r\n let measurement1Distance = getPointDistance(intersectionXPoint1, imageCenterPosOnShape);\r\n measurement1Distance = sqftConfig.measureUnit === MEASURE_UNITS.Metric\r\n ? inchesToMm(measurement1Distance, false, true)\r\n : measurement1Distance;\r\n\r\n const shapePos = this.outerShape.getPosition();\r\n const betweenPointTo = {\r\n x: intersectionXPoint1.x + shapePos.x,\r\n y: intersectionXPoint1.y + shapePos.y\r\n }\r\n const betweenPointFrom = {\r\n x: imageCenterPosOnShape.x + shapePos.x,\r\n y: imageCenterPosOnShape.y + shapePos.y\r\n }\r\n if (intersectionXPointAndLine1WithImage) {\r\n intersectionXPointAndLine1WithImage.line.measurementInsideShape.setPos({x: 1, y: 1});\r\n intersectionXPointAndLine1WithImage.line.measurementInsideShape.setValue(measurement1Distance);\r\n intersectionXPointAndLine1WithImage.line.measurementInsideShape.setBetweenPoints(betweenPointFrom, betweenPointTo);\r\n }\r\n\r\n // THIS CALCULATIONS WAS USED TO GET POS WITHOUT USING BETWEEN POINTS\r\n //const measurement1Midpoint = getMidPoint(intersectionXPoint1, imageCenterPosOnShape);\r\n //const metrics1Point = ctx.measureText(measurement1Distance);\r\n //const shapePos = this.outerShape.getPosition();\r\n // const offsetPoint1 = {\r\n // x: measurement1Midpoint.x + shapePos.x + metrics1Point.width / 2 / scale,\r\n // y: measurement1Midpoint.y + shapePos.y\r\n // }\r\n //const measurement1angle = getAngleBetweenTwoPoints(intersectionXPoint2, imageCenterPosOnShape);\r\n //intersectionXPointAndLine1WithImage.line.measurementInsideShape.setAngle(measurement1angle);\r\n //intersectionXPointAndLine1WithImage.line.measurementInsideShape.setPos(offsetPoint2);\r\n //intersectionXPointAndLine1WithImage.line.measurementInsideShape.setBetweenPoints(null, null);\r\n\r\n // THIS CALCULATIONS WAS USED TO GET POS WITHOUT USING BETWEEN POINTS\r\n // const measurement2Midpoint = getMidPoint(intersectionXPoint2, imageCenterPosOnShape);\r\n // const metrics2Point = ctx.measureText(measurement2Distance);\r\n // const offsetPoint2 = {\r\n // x: measurement2Midpoint.x + shapePos.x + metrics2Point.width / 2 / scale,\r\n // y: measurement2Midpoint.y + shapePos.y\r\n // }\r\n // const measurement2angle = getAngleBetweenTwoPoints(intersectionXPoint2, imageCenterPosOnShape);\r\n // intersectionXPointAndLine2WithImage.line.measurementInsideShape.setPos(offsetPoint2);\r\n // intersectionXPointAndLine2WithImage.line.measurementInsideShape.setAngle(measurement2angle);\r\n\r\n let measurement2Distance = getPointDistance(intersectionXPoint2, imageCenterPosOnShape);\r\n measurement2Distance = sqftConfig.measureUnit === MEASURE_UNITS.Metric\r\n ? inchesToMm(measurement2Distance, false, true)\r\n : measurement2Distance;\r\n\r\n const measurement2BetweenPointTo = {\r\n x: intersectionXPoint2.x + shapePos.x,\r\n y: intersectionXPoint2.y + shapePos.y\r\n }\r\n const measurement2BetweenPointFrom = {\r\n x: imageCenterPosOnShape.x + shapePos.x,\r\n y: imageCenterPosOnShape.y + shapePos.y\r\n }\r\n if (intersectionXPointAndLine1WithImage) {\r\n intersectionXPointAndLine2WithImage.line.measurementInsideShape.setPos({x: 1, y: 1});\r\n intersectionXPointAndLine2WithImage.line.measurementInsideShape.setValue(measurement2Distance);\r\n intersectionXPointAndLine2WithImage.line.measurementInsideShape.setBetweenPoints(measurement2BetweenPointFrom, measurement2BetweenPointTo);\r\n }\r\n }\r\n }\r\n\r\n // renderLineMeasurement = (ctx, measurementPos, measurementDistance) => {\r\n // this.__measurement.pos.x = measurementPos.x;\r\n // this.__measurement.pos.y = measurementPos.y;\r\n // this.__measurement.value = measurementDistance;\r\n //\r\n // this.__measurement.render(ctx);\r\n // }\r\n}\r\n\r\nexport default RenderMeasurementsInsideShape\r\n","import sqftConfig from \"../../../store/sqftConfig\";\r\nimport RenderFigures from \"../../../helpers/renderFigures\";\r\nimport {SQFT_APPLIANCES} from \"../../../../../constants\";\r\nimport RenderParts from \"../../../helpers/renderParts\";\r\n\r\nclass RenderSVG {\r\n constructor(movableImage) {\r\n this.movableImage = movableImage;\r\n }\r\n\r\n render = (ctx) => {\r\n let svgImageDataURI = \"\";\r\n const scale = sqftConfig.scale;\r\n\r\n if (this.movableImage.isIE() && this.movableImage.isSVG(this.movableImage.image)) {\r\n svgImageDataURI = atob(this.movableImage.getSrc(this.movableImage.image).replace(/data:image\\/svg\\+xml;base64,/, ''));\r\n }\r\n\r\n //let canvas = workspace.getCanvas();\r\n\r\n ctx.save();\r\n let posField = this.movableImage.getPosField();\r\n ctx.translate(posField.x, posField.y);\r\n ctx.rotate(-this.movableImage.rotatedDegrees * Math.PI / 180);\r\n let imgOffset = {\r\n x: this.movableImage.size.width / -2 * scale,\r\n y: this.movableImage.size.height / -2 * scale\r\n };\r\n\r\n this.renderHovering(ctx, imgOffset);\r\n\r\n if (!this.movableImage.isIE()) {\r\n if (this.movableImage.subType === SQFT_APPLIANCES.sink) {\r\n RenderFigures.sink(ctx, imgOffset.x, imgOffset.y, this.movableImage.size.width * scale, this.movableImage.size.height * scale);\r\n } else if (this.movableImage.subType === SQFT_APPLIANCES.doubleSink) {\r\n RenderFigures.doubleSink(ctx, imgOffset.x, imgOffset.y, this.movableImage.size.width * scale, this.movableImage.size.height * scale);\r\n } else {\r\n const containerSize = {width: this.movableImage.size.width * scale, height: this.movableImage.size.height * scale}\r\n const size = this.getContainSize();\r\n RenderParts.drawStripedRectangle(ctx, imgOffset.x, imgOffset.y, containerSize.width, containerSize.height);\r\n RenderFigures.drawBorder(ctx, imgOffset, containerSize.width, containerSize.height);\r\n ctx.drawImage(this.movableImage.image, imgOffset.x, imgOffset.y, size.width, size.height);\r\n }\r\n } else if (svgImageDataURI) {\r\n ctx.drawSvg(svgImageDataURI, imgOffset.x, imgOffset.y, this.movableImage.size.width * scale, this.movableImage.size.height * scale);\r\n }\r\n ctx.restore();\r\n\r\n //render border points in dev mode\r\n if (sqftConfig.isDevMode()) {\r\n //dev movable point\r\n // ctx.beginPath();\r\n // ctx.strokeStyle = '#000'\r\n // ctx.arc(imgOffset.x, imgOffset.y, 20, 0, 2 * Math.PI);\r\n // ctx.stroke();\r\n // ctx.closePath();\r\n //\r\n // //dev border points\r\n // let testImagePoints = this.movableImage.getLinePointsPointField();\r\n // for (let testPoint of testImagePoints) {\r\n // ctx.beginPath();\r\n // ctx.strokeStyle = '#a02f2f';\r\n // ctx.lineWidth = 1;\r\n // ctx.arc(testPoint.x, testPoint.y, 10, 0, 2 * Math.PI);\r\n // ctx.stroke();\r\n // ctx.closePath();\r\n // //debugger // eslint-disable-line no-debugger\r\n // }\r\n }\r\n }\r\n\r\n getContainSize = () => {\r\n const aspectRatio = this.movableImage.initialSize.width / this.movableImage.initialSize.height;\r\n const scale = sqftConfig.scale;\r\n let newWidth, newHeight;\r\n if (this.movableImage.size.width / this.movableImage.size.height > aspectRatio) {\r\n // The width is larger than needed by the aspect ratio, so we base it on the height\r\n newHeight = this.movableImage.size.height;\r\n newWidth = newHeight * aspectRatio;\r\n } else {\r\n // The height is larger than needed based on the aspect ratio, so we base it on the width\r\n newWidth = this.movableImage.size.width;\r\n newHeight = newWidth / aspectRatio;\r\n }\r\n\r\n return {width: newWidth * scale, height: newHeight * scale}\r\n }\r\n\r\n renderHovering = (ctx, imgOffset) => {\r\n let scale = sqftConfig.scale;\r\n\r\n if (this.movableImage.isHovering() && !this.movableImage.isAnyLineHovering()) {\r\n ctx.beginPath();\r\n ctx.rect(imgOffset.x, imgOffset.y, this.movableImage.size.width * scale, this.movableImage.size.height * scale);\r\n ctx.strokeStyle = this.movableImage.hoverColor;\r\n ctx.lineWidth = 5;\r\n ctx.stroke();\r\n ctx.closePath();\r\n }\r\n }\r\n\r\n renderAttachedTo = () => {\r\n // if (this.movableImage.image) {\r\n // let midPoint = getMidPoint(this.movableImage.attachedTo.from, this.movableImage.attachedTo.to);\r\n // let lineOffset = this.movableImage.attachedTo.getOffset();\r\n // let imgOffset = {\r\n // x: 0,\r\n // y: -32\r\n // },\r\n // pointData = {\r\n // x: (midPoint.x * scale) + lineOffset.x - 4,\r\n // y: (midPoint.y * scale) + lineOffset.y - (size.height * scale) - 4,\r\n // radius: size.width * scale / 2 + 8,\r\n // arcStart: 0,\r\n // arcEnd: 2 * Math.PI\r\n // };\r\n // if (this.movableImage.attachedTo.getOrientation) {\r\n // if (this.movableImage.attachedTo.getOrientation() == 1) { //horizontal\r\n // pointData.x -= 64;\r\n // pointData.y += 5 * scale;\r\n // } else {\r\n // // console.log(scale);\r\n // if (scale >= 6) {\r\n // pointData.y -= ((6 - scale) * scale / 2);\r\n // } else {\r\n // pointData.y += (6 - scale) * 6;\r\n // }\r\n // }\r\n // }\r\n // if (!this.movableImage.isIE() || !this.movableImage.isSVG()) {\r\n // ctx.drawImage(this.movableImage.image, pointData.x - (size.width * scale / 2) + imgOffset.x, (midPoint.y * scale) + lineOffset.y - (size.height * scale / 2) - 4 + imgOffset.y + (this.movableImage.attachedTo.getOrientation() == 1 ? 32 : 0), size.width * scale, size.height * scale);\r\n // } else {\r\n // ctx.drawSvg(svgImageDataURI, pointData.x - (size.width * scale / 2) + imgOffset.x, (midPoint.y * scale) + lineOffset.y - (size.height * scale / 2) - 4 + imgOffset.y + (this.movableImage.attachedTo.getOrientation() == 1 ? 32 : 0), size.width * scale, size.height * scale);\r\n // }\r\n // ctx.save();\r\n // ctx.beginPath();\r\n // ctx.arc(pointData.x, pointData.y, pointData.radius, pointData.arcStart, pointData.arcEnd);\r\n // ctx.strokeStyle = COLOR_THEMES[sqftConfig.activeTheme].primary;\r\n // ctx.lineWidth = 4;\r\n // ctx.stroke();\r\n // ctx.fillStyle = \"RGBA(0,0,192,0.1)\";\r\n // ctx.fill();\r\n // ctx.closePath();\r\n // ctx.restore();\r\n // }\r\n }\r\n}\r\n\r\nexport default RenderSVG\r\n","import { v4 as uuidv4 } from 'uuid';\r\n\r\nexport default class MiteredSegment {\r\n id;\r\n _length = {}; /* NumberText */\r\n height; /* int */\r\n thickness = {}; /* NumberText */\r\n priority; /* int */\r\n\r\n\r\n constructor(length, height, thickness) {\r\n this.id = uuidv4();\r\n this._length = length;\r\n this.height = height;\r\n this.thickness = thickness;\r\n this.priority = 0;\r\n }\r\n\r\n set length(length) {\r\n this._length = length;\r\n }\r\n\r\n get length() {\r\n return this._length;\r\n }\r\n\r\n setPriority = (priority) => {\r\n this.priority = priority\r\n };\r\n\r\n exportSegment = () => ({\r\n height: this.height,\r\n thickness: this.thickness ? this.thickness.value : this.thickness,\r\n length: this.length.value,\r\n })\r\n}\r\n","import workspace from \"../workspace\";\r\nimport {getBacksplashesPos, getBumpoutPointCords, getShapePosAndPoints} from \"./slabHelper\";\r\nimport sqftShapeManager from \"../../store/sqftShapeManager\";\r\nimport {SHAPE_PART_ID, WATERFALL_SHAPES_KEY} from \"../../../../constants\";\r\nimport SlabAdditionalShape from \"./slabAdditionalShape\";\r\nimport Polygon from \"../shapes/layouts/polygon\";\r\nimport sqftConfig from \"../../store/sqftConfig\";\r\nimport {\r\n getParallelPoints,\r\n getPointOnTheLine,\r\n mmToInches\r\n} from \"../../../../helpers/sqftHelper\";\r\nimport {addEdgeToTheLines, addFakeEdgeToLines, setLineParams} from \"../../helpers/lineHelper\";\r\nimport workspaceControllers from \"../../store/workspaceControllers\";\r\nimport {getMiterEdgeFeature, getMiterEdgeHeight, isFeatureUnitUseEach} from \"../../../../helpers/featureHelper\";\r\nimport config from \"../../store/sqftConfig\";\r\nimport sqftResourcesManager from \"../../store/sqftResoursesManager\";\r\n\r\nclass SlabAdditionalShapes {\r\n additionalShapes = [];\r\n\r\n initBacksplashAndEdgeShapes = () => {\r\n let lines = workspace.getLines();\r\n lines.forEach((line) => {\r\n if (!this.isInited(line)) {\r\n let posOnField, pointsCords;\r\n const parentShape = line.getParent();\r\n const attachedToLineResource = sqftResourcesManager.getAttachedToLineResource(line);\r\n const miterEdgeHeight = getMiterEdgeHeight(attachedToLineResource ? attachedToLineResource.featureId : null);\r\n\r\n // 1.) init backsplash shapes\r\n if (line.isWithBacksplash()) {\r\n [posOnField, pointsCords] = getBacksplashesPos(line, +line.getBacksplashHeight());\r\n\r\n // 2.) init mitered edgeShapes for waterfall tool\r\n } else if ((line.isWithMiterEdge() || line.isWithFakeEdge())\r\n && parentShape.partId === SHAPE_PART_ID.waterfallPiece\r\n ) {\r\n // skip creation for one mitered edge shape that was created with waterfall tool\r\n if (line.getState().slabModeSkipMiteredEdgeCreation) {\r\n return;\r\n }\r\n const segment = workspaceControllers.waterfall.getSegmentById(parentShape.slabModeWaterfallSegmentId);\r\n if (!segment) {\r\n //todo fix missing segment\r\n return;\r\n }\r\n [posOnField, pointsCords] = getBacksplashesPos(line, segment.thickness);\r\n // 3.) init mitered edgeShapes but skip mitered tool\r\n } else if (line.isWithMiterEdge() && !line.isWithMitered() && miterEdgeHeight > 0.5) {\r\n [posOnField, pointsCords] = getBacksplashesPos(line, miterEdgeHeight);\r\n\r\n // 4.) init waterfall edgeShapes but skip mitered tool\r\n } else if (line.isWithWaterfallEdgeFeature() && !isFeatureUnitUseEach(line.getAttachedFeature())) {\r\n [posOnField, pointsCords] = getBacksplashesPos(line, sqftConfig.waterfallImperialHeight);\r\n } else {\r\n return; // Skip the current iteration if neither condition is met\r\n }\r\n\r\n // create shape\r\n let shapeId = sqftShapeManager.addShape(new Polygon(pointsCords), 'square', posOnField, SHAPE_PART_ID.backsplashPiece);\r\n const shape = workspace.getShapeById(shapeId);\r\n\r\n // set shape additional params\r\n shape.setIsPointsChanged(false);\r\n shape.setSlabModeCoreParentId(\r\n line.getParent().slabModeCoreParentId ? line.getParent().slabModeCoreParentId : line.getParent().id\r\n );\r\n shape.setSlabModeCoreParentPartId(\r\n line.getParent().slabParentPartId ? line.getParent().slabParentPartId : line.getParent().partId\r\n )\r\n //set shape feature id\r\n let featureId\r\n if (line.isWithBacksplash()) {\r\n featureId = line.getBacksplashFeatureId();\r\n featureId = featureId ? featureId : line.getParent().featureId;\r\n } else {\r\n featureId = line.getParent().featureId;\r\n }\r\n shape.setFeatureId(featureId);\r\n shape.setColorSet(line.getParent().colorSet);\r\n\r\n this.addActiveBacksplash(new SlabAdditionalShape(line, shapeId));\r\n }\r\n });\r\n };\r\n\r\n initBumpoutShapes = () => {\r\n let lines = workspace.getLines();\r\n lines.forEach((line) => {\r\n if (line.isWithBumpout() && !this.isInited(line)) {\r\n let pointsCords = getBumpoutPointCords(line);\r\n let posOnFiled = line.getParent().getPosition();//ShapeHelper.getCenterPoint(pointsCords);\r\n let shapeId = sqftShapeManager.addShape(new Polygon(pointsCords), 'square', posOnFiled, SHAPE_PART_ID.backsplashPiece);\r\n const shape = workspace.getShapeById(shapeId);\r\n shape.setIsPointsChanged(false);\r\n shape.setFeatureId(line.getParent().featureId);\r\n shape.setSlabModeCoreParentId(line.getParent().id);\r\n shape.setSlabModeCoreParentPartId(line.getParent().partId);\r\n shape.setColorSet(line.getParent().colorSet);\r\n\r\n this.addActiveBacksplash(new SlabAdditionalShape(line, shapeId));\r\n }\r\n });\r\n };\r\n\r\n initMiteredToolShapes = () => {\r\n let lines = workspace.getLines();\r\n lines.forEach((line) => {\r\n if (line.isWithMitered() && !this.isInited(line)) {\r\n const miteredPoints = line.miteredOverlay.getPoints();\r\n miteredPoints.forEach((point, index) => {\r\n let next = index + 1;\r\n if (miteredPoints[next]) {\r\n let segment = line.miteredOverlay.getSegmentBetweenPoints(point, miteredPoints[next]);\r\n //let widthValue = segment.width.value;\r\n let heightValue = segment.height / sqftConfig.getMeasureMultiplier();\r\n if (heightValue > 0.005) {\r\n let [posOnFiled, pointsCords] = getShapePosAndPoints(line.getParent(), point, miteredPoints[next], heightValue);\r\n\r\n let shapeId = sqftShapeManager.addShape(new Polygon(pointsCords), 'square', posOnFiled, SHAPE_PART_ID.backsplashPiece);\r\n const shape = workspace.getShapeById(shapeId);\r\n shape.setIsPointsChanged(false);\r\n shape.setFeatureId(line.getParent().featureId);\r\n shape.setSlabModeCoreParentId(line.getParent().id);\r\n shape.setSlabModeCoreParentPartId(line.getParent().partId);\r\n shape.setColorSet(line.getParent().colorSet);\r\n\r\n this.addActiveBacksplash(new SlabAdditionalShape(line, shapeId));\r\n }\r\n }\r\n });\r\n }\r\n });\r\n };\r\n\r\n initUnderlaymentToolShapes = () => {\r\n let lines = workspace.getLines();\r\n lines.forEach((line) => {\r\n if (line.isWithUnderlayment() && !this.isInited(line)) {\r\n const underlaymentPoints = line.underlaymentOverlay.getPoints();\r\n underlaymentPoints.forEach((point, index) => {\r\n let next = index + 1;\r\n if (underlaymentPoints[next]) {\r\n let segment = line.underlaymentOverlay.getSegmentBetweenPoints(point, underlaymentPoints[next]);\r\n //let widthValue = segment.width.value;\r\n let heightValue = segment.height;\r\n let [posOnFiled, pointsCords] = getShapePosAndPoints(line.getParent(), point, underlaymentPoints[next], heightValue);\r\n\r\n let shapeId = sqftShapeManager.addShape(new Polygon(pointsCords), 'square', posOnFiled, SHAPE_PART_ID.backsplashPiece);\r\n const shape = workspace.getShapeById(shapeId);\r\n shape.setIsPointsChanged(false);\r\n shape.setFeatureId(line.getParent().featureId);\r\n shape.setSlabModeCoreParentId(line.getParent().id);\r\n shape.setSlabModeCoreParentPartId(line.getParent().partId);\r\n shape.setColorSet(line.getParent().colorSet);\r\n\r\n this.addActiveBacksplash(new SlabAdditionalShape(line, shapeId));\r\n }\r\n });\r\n }\r\n });\r\n };\r\n\r\n initWaterfallToolShapes = () => {\r\n let lines = workspace.getLines();\r\n lines.forEach((line) => {\r\n if ((line.isWithWaterfallToolEdge() || line.isWithPeninsulaUnderwrapEdge())\r\n && !this.isInited(line)\r\n ) {\r\n const waterfallSegments = line.waterfallOverlay.getSegments();\r\n\r\n waterfallSegments.forEach((segment) => {\r\n const [from, to] = this.getWaterfallPoints(line, segment);\r\n if (from && to) {\r\n const height = config.measureUnit === \"Imperial\" ? segment.height : mmToInches(segment.height);\r\n let [posOnFiled, pointsCords] = getShapePosAndPoints(line.getParent(), from, to, height);\r\n\r\n let shapeId = sqftShapeManager.addShape(new Polygon(pointsCords.reverse()), 'square', posOnFiled, SHAPE_PART_ID.waterfallPiece);\r\n const shape = workspace.getShapeById(shapeId);\r\n shape.setIsPointsChanged(false);\r\n shape.setFeatureId(line.getParent().featureId);\r\n shape.setColorSet(line.getParent().colorSet);\r\n shape.setSlabModeCoreParentId(line.getParent().id);\r\n shape.setSlabModeCoreParentPartId(line.getParent().partId);\r\n shape.setSlabModeWaterfallSegmentId(segment.id);\r\n\r\n this.addMiteredEdgesToWaterfallShape(shapeId, segment);\r\n\r\n this.addActiveBacksplash(new SlabAdditionalShape(line, shapeId));\r\n\r\n }\r\n });\r\n }\r\n });\r\n };\r\n\r\n addMiteredEdgesToWaterfallShape = (shapeId, segment) => {\r\n const miteredEdge = getMiterEdgeFeature();\r\n\r\n const waterfallShapes = WATERFALL_SHAPES_KEY;\r\n const edgeParams = {\r\n [waterfallShapes.cabinetReturn]: [3],\r\n [waterfallShapes.waterfall]: [1, 2, 3],\r\n [waterfallShapes.overhangReturn]: [1],\r\n [waterfallShapes.underlayment]: [0]\r\n };\r\n if (edgeParams[segment.name]) {\r\n if (miteredEdge) {\r\n addEdgeToTheLines(shapeId, miteredEdge, edgeParams[segment.name], false);\r\n } else {\r\n addFakeEdgeToLines(shapeId, edgeParams[segment.name]);\r\n }\r\n }\r\n\r\n if (segment.name === waterfallShapes.waterfall) {\r\n setLineParams(shapeId, [1, 2, 3], { slabModeSkipMiteredEdgeCreation: true });\r\n }\r\n };\r\n\r\n getWaterfallPoints = (line, segment) => {\r\n const key = segment.key;\r\n const length = config.measureUnit === \"Imperial\" ? segment.length : mmToInches(segment.length);\r\n if (segment.isDisabled) {\r\n return [null, null]\r\n }\r\n switch (key) {\r\n case WATERFALL_SHAPES_KEY.cabinetReturn: {\r\n const secondPoint = getPointOnTheLine(line.to, line.from, -length);\r\n return [secondPoint, line.to]\r\n }\r\n case WATERFALL_SHAPES_KEY.waterfall: {\r\n const distanceFromLine = -segment.height * 2 / sqftConfig.getMeasureMultiplier();\r\n const [firstPoint, secondPoint] = getParallelPoints(line.from, line.to, distanceFromLine);\r\n return [firstPoint, secondPoint]\r\n }\r\n case WATERFALL_SHAPES_KEY.overhangReturn: {\r\n const secondPoint = getPointOnTheLine(line.from, line.to, -length);\r\n return [line.from, secondPoint]\r\n }\r\n case WATERFALL_SHAPES_KEY.underlayment: {\r\n const nextLine = line.getParent().getNextLine(line);\r\n //const secondPoint = getPointOnTheLine(nextLine.to, line.from, -segment.length);\r\n //return [nextLine.from, nextLine.to]\r\n const miteredEdgeDistance = -getMiterEdgeHeight();\r\n const [firstPoint, secondPoint] = getParallelPoints(nextLine.from, nextLine.to, miteredEdgeDistance);\r\n return [secondPoint, firstPoint]\r\n }\r\n case WATERFALL_SHAPES_KEY.peninsulaUnderwrap: {\r\n const [firstPoint, secondPoint] = getParallelPoints(line.from, line.to, -segment.height);\r\n return [firstPoint, secondPoint]\r\n }\r\n default:\r\n return [null, null]\r\n }\r\n }\r\n\r\n isInited = (line) => {\r\n return this.additionalShapes.some( SlabAdditionalShape => {\r\n return SlabAdditionalShape.line.id === line.id\r\n })\r\n }\r\n\r\n getShapeAdditionalShapes = (shape) => {\r\n return this.additionalShapes.filter( SlabAdditionalShape => {\r\n return SlabAdditionalShape.line.getParent().id === shape.id\r\n })\r\n }\r\n\r\n updateAdditionalShapeFeature = (line, featureId) => {\r\n const additionalShape = this.findAdditionalShapeByLine(line);\r\n if (additionalShape) {\r\n const backsplashShape = workspace.getShapeById(additionalShape.backsplashShapeId);\r\n backsplashShape.setFeatureId(featureId);\r\n }\r\n }\r\n\r\n resetBacksplashes = () => {\r\n this.additionalShapes = [];\r\n }\r\n\r\n importData = (data) => {\r\n for (let activeBacksplashData of data) {\r\n let shape = workspace.importShape(activeBacksplashData.backsplashShape);\r\n shape.deregisterEvents();\r\n let line = workspace.getLineById(activeBacksplashData.line.id);\r\n let slabAdditionalShape = new SlabAdditionalShape(line, shape.id);\r\n this.addActiveBacksplash(slabAdditionalShape);\r\n }\r\n }\r\n\r\n exportData = () => {\r\n return this.additionalShapes\r\n .filter( SlabAdditionalShape => {\r\n let backsplashShape = workspace.getShapeById(SlabAdditionalShape.backsplashShapeId);\r\n return backsplashShape.partId !== SHAPE_PART_ID.seamPiece;\r\n })\r\n .map( SlabAdditionalShape => {\r\n let backsplashShape = workspace.getShapeById(SlabAdditionalShape.backsplashShapeId);\r\n\r\n return {\r\n backsplashShape: backsplashShape.export(),\r\n line: SlabAdditionalShape.line.export()\r\n }\r\n })\r\n }\r\n\r\n addActiveBacksplash = (SlabAdditionalShape) => {\r\n this.additionalShapes.push(SlabAdditionalShape);\r\n }\r\n\r\n findAdditionalShapeByLine = (line) => {\r\n return this.additionalShapes.find(additionalShape => additionalShape.line.id === line.id);\r\n }\r\n\r\n removeActiveBacksplashByLine = (line) => {\r\n for (let i = this.additionalShapes.length - 1; i >= 0; i--) {\r\n if (this.additionalShapes[i].line.id === line.id) {\r\n const shape = workspace.getShapeById(this.additionalShapes[i].backsplashShapeId);\r\n this.removeAllActiveBacksplashesAttachedToShape(shape);\r\n workspace.removeShapeById(this.additionalShapes[i].backsplashShapeId);\r\n }\r\n }\r\n }\r\n\r\n findOneByBacksplashShapeId = (backsplashShapeId) => {\r\n return this.additionalShapes.find(activeBacksplash => {\r\n return activeBacksplash.backsplashShapeId === backsplashShapeId\r\n })\r\n };\r\n\r\n /**\r\n * This will hide all additional shapes that was created for mitered edges, backsplashes and mitered segments\r\n */\r\n hideAdditionalShapes = () => {\r\n this.additionalShapes.forEach(SlabAdditionalShape => {\r\n let backsplashShape = workspace.getShapeById(SlabAdditionalShape.backsplashShapeId);\r\n if (backsplashShape) {\r\n backsplashShape.deregisterEvents();\r\n } else {\r\n console.error(\"SlabAdditionalShape not found, backsplashShapeId:\", SlabAdditionalShape.backsplashShapeId);\r\n }\r\n });\r\n };\r\n\r\n removeAllActiveBacksplashesAttachedToShape = (shape) => {\r\n const lines = shape.getLines();\r\n for (const line of lines) {\r\n this.removeActiveBacksplashByLine(line);\r\n }\r\n };\r\n\r\n restoreBacksplashShapes = () => {\r\n this.additionalShapes.forEach(SlabAdditionalShape => {\r\n let backsplashShape = workspace.getShapeById(SlabAdditionalShape.backsplashShapeId);\r\n if (backsplashShape.isHidden && backsplashShape.shapePieces.length === 0) {\r\n backsplashShape.reInitEvents();\r\n }\r\n });\r\n };\r\n\r\n removeShapeFromList = (shapeToRemove) => {\r\n this.additionalShapes = this.additionalShapes.filter(additionalShape => additionalShape.backsplashShapeId !== shapeToRemove.id);\r\n }\r\n}\r\n\r\nexport default SlabAdditionalShapes;\r\n","import {getParallelPoints, mmToInches} from \"../../../../helpers/sqftHelper\";\r\nimport config from \"../../store/sqftConfig\";\r\n\r\nexport const getBacksplashesPos = (line, thickness = -5) => {\r\n thickness = config.measureUnit === \"Imperial\" ? thickness : mmToInches(thickness);\r\n const shape = line.getParent();\r\n let shapePoints = [];\r\n const parallelPoints = getParallelPoints(line.from, line.to, -thickness);\r\n shapePoints.push(...parallelPoints);\r\n shapePoints.push(line.from);\r\n shapePoints.push(line.to);\r\n\r\n return [shape.pos, shapePoints]\r\n}\r\n\r\nexport const getShapePosAndPoints = (parent, from, to, thickness = -5) => {\r\n const shape = parent;\r\n let shapePoints = [];\r\n const parallelPoints = getParallelPoints(from, to, -thickness);\r\n shapePoints.push(...parallelPoints);\r\n shapePoints.push(from);\r\n shapePoints.push(to);\r\n\r\n return [shape.pos, shapePoints]\r\n}\r\n\r\nexport const getBumpoutPointCords = (line) => {\r\n return line.bumpoutOverlay.getBumpoutPointCords()\r\n}\r\n","import eventManager from \"../../store/sqftEventManager\";\r\nimport config from \"../../store/sqftConfig\";\r\nimport workspace from \"../workspace\";\r\nimport store from \"../../../../../../store\";\r\nimport {setSQFTMenuOpened} from \"../../../../../../actions/sqftMenuFunctions\";\r\nimport {updateSQFTCalculations} from \"../../../../../../actions/sqftFunctions\";\r\nimport {attachResource} from \"./resourseCanas\";\r\nimport $ from \"jquery\";\r\nimport {iconPlusBlue} from \"../../../../assetsSQFT\";\r\nimport {\r\n RESOURCE_ATTACHED_TO_TYPE,\r\n SIDEBAR_NAVIGATION_BUTTONS,\r\n SIDEBAR_NAVIGATION_CABINET_BUTTONS,\r\n SQFT_GROUP\r\n} from \"../../../../constants\";\r\n\r\nconst endCapCanvas = function() {\r\n this.cursorImage = null;\r\n this.addedImages = null; //like in edges\r\n this.img = null;\r\n this.isWaitingToRestoreCursor = false;\r\n\r\n this.setHighlighting = (disallowDemo) => {\r\n eventManager.stealCursor(true); // remove all other cursors\r\n workspace.setAllowEdges(false); // removing sizing lines\r\n workspace.setAllowBumpoutEdges(false); // removing bumpout lines\r\n config.highlight.points = false;\t// remove radiuses\r\n config.highlight.lines = true; // enable lines highlighting\r\n config.highlight.type = RESOURCE_ATTACHED_TO_TYPE.end_cap;\r\n\r\n if (!disallowDemo) {\r\n config.highlight.demoShow = true;\r\n }\r\n setTimeout(function () {\r\n config.highlight.demoShow = false;\r\n }, 1000);\r\n };\r\n\r\n this.setCursorImage = () => {\r\n let bounds = 18,\r\n imgWidth = bounds,\r\n imgHeight = bounds;\r\n\r\n let domImg = document.createElement('img');\r\n domImg.crossOrigin = \"Anonymous\";\r\n\r\n let $img = $(domImg);\r\n $img.css({\r\n position: 'absolute',\r\n width: '1px',\r\n height: '1px'\r\n });\r\n\r\n const imgOnLoad = () => {\r\n let bounds = 18;\r\n let ratio;\r\n if (imgWidth > imgHeight) {\r\n ratio = imgHeight / imgWidth;\r\n imgWidth = bounds;\r\n imgHeight = bounds * ratio;\r\n } else {\r\n ratio = imgWidth / imgHeight;\r\n imgHeight = bounds;\r\n imgWidth = bounds * ratio;\r\n }\r\n eventManager.setCursor('edge-select', this, true);\r\n this.cursorImage = { image: domImg, width: imgWidth, height: imgHeight };\r\n this.registerEvents(); // only after image is load!\r\n }\r\n $img.on('load', imgOnLoad);\r\n $img.appendTo($('body'));\r\n $img.attr('src', iconPlusBlue);\r\n\r\n this.img = $img;\r\n };\r\n\r\n this.registerEvents = () => {\r\n eventManager.setCursor('radius-select', this, true);\r\n eventManager.addEvent(\r\n eventManager.events.RENDER,\r\n this.renderCursor,\r\n this,\r\n eventManager.priorities.OVERALL\r\n );\r\n eventManager.addEvent(\r\n eventManager.events.MOUSE_UP,\r\n this.onMouseUp,\r\n this,\r\n eventManager.priorities.OVERALL\r\n );\r\n };\r\n\r\n this.deregisterEvents = () => {\r\n eventManager.resetCursor(this);\r\n eventManager.removeEvent(this);\r\n config.highlight.lines = false;\r\n }\r\n this.destroy = (protect, revertBackAfterMouseUp) => {\r\n if (revertBackAfterMouseUp) {\r\n eventManager.removeEvent(this, eventManager.events.RENDER); //remove render only, but wait for mouse up to set cursor again\r\n this.isWaitingToRestoreCursor = true;\r\n } else {\r\n this.deregisterEvents();\r\n }\r\n };\r\n\r\n this.onMouseUp = (mousePos) => {\r\n void mousePos;\r\n let hoveredLine = workspace.getHoveredLine();\r\n let hoveredLineCorner = workspace.getHoveredLineCorner();\r\n if (hoveredLine) {\r\n const state = store.getState();\r\n const updateCalculations = state.sqftState.updateCalculations;\r\n const SQFTGroup = state.sqftMenuState.SQFTGroup;\r\n const button = SQFTGroup === SQFT_GROUP.cabinets ? SIDEBAR_NAVIGATION_CABINET_BUTTONS.end_panel : SIDEBAR_NAVIGATION_BUTTONS.end_cap;\r\n const selectedFeature = state.sqftResourceState.selectedFeature;\r\n const featureNameTranslated = selectedFeature.getFeatureName();\r\n\r\n if (hoveredLine || hoveredLineCorner) {\r\n attachResource(hoveredLine, hoveredLineCorner, RESOURCE_ATTACHED_TO_TYPE.end_cap, selectedFeature.dbFeature.id, selectedFeature.partId, featureNameTranslated);\r\n } else {\r\n store.dispatch(setSQFTMenuOpened(button));\r\n }\r\n\r\n store.dispatch(updateSQFTCalculations(updateCalculations + 1));\r\n }\r\n this.checkForRestoreCursor();\r\n };\r\n this.checkForRestoreCursor = function() {\r\n if (this.isWaitingToRestoreCursor) {\r\n this.isWaitingToRestoreCursor = false;\r\n eventManager.removeEvent(this, eventManager.events.MOUSE_UP); //remove mouse up, it will be added in setCursorImage\r\n this.setHighlighting(true);\r\n this.setCursorImage();\r\n }\r\n };\r\n this.renderCursor = (ctx) => {\r\n if (this.cursorImage.image && ($(window).width() > 768)) {\r\n let mPos = eventManager.LastKnownMousePos;\r\n if (mPos) {\r\n ctx.drawImage(this.cursorImage.image, mPos.x + 10, mPos.y + 10, this.cursorImage.width, this.cursorImage.height);\r\n }\r\n }\r\n };\r\n};\r\n\r\nexport default new endCapCanvas();\r\n","import store from \"../../../store\";\r\nimport sqftConfig from \"../components/canvas/store/sqftConfig\";\r\nimport {setSlabImageHeight, setSlabImageWidth} from \"../../../actions/sqftSlabFunctions\";\r\nimport Radius from \"../components/canvas/core/controls/radius\";\r\n\r\nexport const onMeasureUnitChange = () => {\r\n Radius.onMeasureUnitChange();\r\n\r\n switch(sqftConfig.measureUnit) {\r\n case \"Metric\":\r\n store.dispatch(setSlabImageWidth(sqftConfig.slab.imageWidthMetric));\r\n store.dispatch(setSlabImageHeight(sqftConfig.slab.imageHeightMetric));\r\n break;\r\n case \"Imperial\":\r\n default:\r\n store.dispatch(setSlabImageWidth(sqftConfig.slab.imageWidthImperial));\r\n store.dispatch(setSlabImageHeight(sqftConfig.slab.imageHeightImperial));\r\n }\r\n}\r\n","import sqftEventManager from \"../../../store/sqftEventManager\";\r\nimport DrawImage from \"../textBox/draw/drawImage\";\r\nimport {pnpolyArray} from \"../../../../../lib/pnpoly\";\r\nimport config from \"../../../store/sqftConfig\";\r\nimport sqftConfig from \"../../../store/sqftConfig\";\r\nimport RenderFigures from \"../../../helpers/renderFigures\";\r\n\r\nclass StaticImage {\r\n svgImageId;\r\n ctx;\r\n x;\r\n y;\r\n width;\r\n height;\r\n isCentered = true;\r\n isScale = true;\r\n beforeRenderCallback = function (){};\r\n\r\n /**\r\n * returns a list needed for integration\r\n * @param svgImageId {string}\r\n * @param x {int}\r\n * @param y {int}\r\n * @param width {int}\r\n * @param height {int}\r\n * @param isCentered {boolean}\r\n * @param isScale {boolean}\r\n * @param beforeRenderCallback {function}\r\n */\r\n constructor(svgImageId, x, y, width, height, isCentered, isScale, beforeRenderCallback) {\r\n this.svgImageId = svgImageId;\r\n this.ctx = sqftEventManager.getCtx();\r\n this.x = x;\r\n this.y = y;\r\n this.width = width;\r\n this.height = height;\r\n this.isCentered = isCentered;\r\n this.isScale = isScale;\r\n this.beforeRenderCallback = beforeRenderCallback ? beforeRenderCallback : function (){};\r\n }\r\n\r\n isHovered = (mousePos) => {\r\n return pnpolyArray(this.getHoverArray(), mousePos);\r\n }\r\n\r\n getHoverArray = () => {\r\n const width = this.width * config.defaultScale;\r\n const height = this.height * config.defaultScale;\r\n\r\n if (this.isCentered) {\r\n return [\r\n [this.x - width / 2, this.y - height / 2],\r\n [this.x + width / 2, this.y - height / 2],\r\n [this.x + width / 2, this.y + height / 2],\r\n [this.x - width / 2, this.y + height / 2],\r\n ];\r\n } else {\r\n return [\r\n [this.x, this.y],\r\n [this.x + width, this.y],\r\n [this.x + width, this.y + height],\r\n [this.x, this.y + height],\r\n ];\r\n }\r\n }\r\n\r\n render = () => {\r\n this.beforeRenderCallback();\r\n DrawImage.renderImage(this.svgImageId,\r\n this.ctx,\r\n this.x,\r\n this.y,\r\n this.width,\r\n this.height,\r\n this.isCentered,\r\n this.isScale\r\n );\r\n if (sqftConfig.isDevMode()) {\r\n RenderFigures.renderPolygonArray(this.getHoverArray());\r\n }\r\n }\r\n}\r\n\r\nexport default StaticImage\r\n","import * as uuid from \"uuid\";\r\nimport EventManager from \"../../store/sqftEventManager\";\r\nimport workspace from \"../workspace\";\r\n\r\nexport default class SQFTShapeOffset {\r\n id;\r\n parent;\r\n animationPoints = [];\r\n state = {\r\n isHidden: false\r\n };\r\n params = {\r\n priority: EventManager.priorities.SEGMENT,\r\n };\r\n design = {\r\n lineWidth: 1,\r\n strokeStyle: 'rgba(137,137,137,0.6)',\r\n };\r\n\r\n constructor(parent, state = {}, params = {}, design = {}) {\r\n this.state = Object.assign(this.state, state);\r\n this.params = Object.assign(this.params, params);\r\n this.design = Object.assign(this.design, design);\r\n this.parent = parent;\r\n this.id = uuid.v4();\r\n this.initEvents();\r\n }\r\n\r\n getParent = () => {\r\n return this.parent;\r\n }\r\n\r\n setParent = (value) => {\r\n this.parent = value;\r\n }\r\n\r\n getPosition = () => {\r\n return this.parent.getPosition();\r\n }\r\n\r\n init = () => {\r\n this.initEvents();\r\n }\r\n\r\n initEvents() {\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_MOVE,\r\n this.onMouseMove.bind(this),\r\n this,\r\n this.params.priority\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_DOWN,\r\n this.onMouseDown.bind(this),\r\n this,\r\n this.params.priority\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_UP,\r\n this.onMouseUp.bind(this),\r\n this,\r\n this.params.priority\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.RENDER,\r\n this.render.bind(this),\r\n this,\r\n this.params.priority\r\n );\r\n }\r\n\r\n onMouseMove() {\r\n }\r\n\r\n onMouseUp() {\r\n }\r\n\r\n onMouseDown() {\r\n }\r\n\r\n delete() {\r\n this.deregisterEvents();\r\n }\r\n\r\n destroy() {\r\n this.delete();\r\n }\r\n\r\n hide() {\r\n if (!this.state.isHidden) {\r\n this.deregisterEvents();\r\n this.state.isHidden = true\r\n }\r\n }\r\n\r\n restore() {\r\n if (this.state.isHidden) {\r\n this.reInitEvents();\r\n this.state.isHidden = false\r\n }\r\n }\r\n\r\n deregisterEvents = () => {\r\n EventManager.removeEvent(this);\r\n }\r\n\r\n reInitEvents = () => {\r\n this.initEvents();\r\n }\r\n\r\n animateShapeTransition(newShape, callback, duration = 0.75 * 1000) { // 10 seconds = 10000 milliseconds\r\n if (!newShape) {\r\n console.error(\"Invalid new shape.\");\r\n return;\r\n }\r\n\r\n if (newShape.id === this.parent.id) {\r\n return;\r\n }\r\n\r\n const originalShapePoints = this.calculateOutlineV2(this.parent.getPointsPointField(), 10);\r\n const newShapePoints = this.calculateOutlineV2(newShape.getPointsPointField(), 10);\r\n\r\n // Animation start time\r\n const startTime = new Date().getTime();\r\n\r\n const animate = () => {\r\n const elapsed = new Date().getTime() - startTime;\r\n const t = Math.min(elapsed / duration, 1);\r\n\r\n let interpolatedShape = [];\r\n for (let i = 0; i < Math.max(originalShapePoints.length, newShapePoints.length); i++) {\r\n // if we have less points in new shape\r\n const pointNew = newShapePoints[i % newShapePoints.length];\r\n // if we have less points in original shape\r\n const pointOriginal = originalShapePoints[i % originalShapePoints.length];\r\n\r\n interpolatedShape.push({\r\n x: pointOriginal.x + t * (pointNew.x - pointOriginal.x),\r\n y: pointOriginal.y + t * (pointNew.y - pointOriginal.y)\r\n });\r\n }\r\n\r\n this.animationPoints = interpolatedShape;\r\n\r\n if (t < 1) {\r\n requestAnimationFrame(animate);\r\n } else {\r\n this.animationPoints = [];\r\n this.setParent(newShape);\r\n callback();\r\n }\r\n };\r\n // begin animation\r\n animate();\r\n }\r\n\r\n render = (ctx) => {\r\n if (workspace && workspace.getState().loading) return;\r\n let offsetPoints;\r\n\r\n // if we have animation points the we will render them otherwise we will render shape points\r\n if (this.animationPoints.length > 0) {\r\n offsetPoints = this.calculateOutlineV2(this.animationPoints, 10);\r\n } else {\r\n const parentPoints = this.parent.getPointsPointField();\r\n offsetPoints = this.calculateOutlineV2(parentPoints, 10);\r\n }\r\n\r\n //console.log(\"parentPoints\", parentPoints);\r\n //console.log(\"offsetPoints\", offsetPoints);\r\n\r\n // let tempPoints = [\r\n // {x: 50, y: 50},\r\n // {x: 150, y: 50},\r\n // {x: 150, y: 150},\r\n // {x: 50, y: 150}\r\n // ];\r\n //let tempPointsOffset = this.calculateOffsetPoints(tempPoints, 10);\r\n //console.log(\"tempPoints\", tempPoints);\r\n //console.log(\"tempPointsOffset\", tempPointsOffset);\r\n\r\n //debugger // eslint-disable-line no-debugger\r\n ctx.save();\r\n ctx.beginPath();\r\n ctx.setLineDash([7, 5]);\r\n offsetPoints.forEach((p, i) => {\r\n if (i === 0) ctx.moveTo(p.x, p.y);\r\n else ctx.lineTo(p.x, p.y);\r\n });\r\n ctx.strokeStyle = this.design.strokeStyle;\r\n ctx.lineWidth = 1;\r\n ctx.closePath();\r\n ctx.stroke();\r\n ctx.restore();\r\n };\r\n\r\n calculateOutlineV2(points, offset) {\r\n let outlinePoints = [];\r\n\r\n for (let i = 0; i < points.length; i++) {\r\n let A = points[i];\r\n let B = points[(i + 1) % points.length];\r\n\r\n // Вектор AB\r\n let dx = B.x - A.x;\r\n let dy = B.y - A.y;\r\n\r\n // Вектор нормали (-dy, dx) или (dy, -dx)\r\n // В зависимости от того, в каком направлении идут точки\r\n let nx = dy;\r\n let ny = -dx;\r\n\r\n // Нормализуем вектор нормали\r\n let length = Math.sqrt(nx * nx + ny * ny);\r\n nx /= length;\r\n ny /= length;\r\n\r\n // Добавляем точки обводки с учетом смещения\r\n outlinePoints.push({\r\n x: A.x + nx * offset,\r\n y: A.y + ny * offset\r\n });\r\n outlinePoints.push({\r\n x: B.x + nx * offset,\r\n y: B.y + ny * offset\r\n });\r\n }\r\n\r\n return outlinePoints;\r\n }\r\n\r\n calculateOffsetPoints = (points, offsetDistance) => {\r\n let offsetPoints = [];\r\n\r\n points = [points[points.length-1], ...points, points[0], points[1]];\r\n\r\n for (let i = 1; i < points.length-2; i++) {\r\n let prev = points[i-1];\r\n let curr = points[i];\r\n let next = points[i+1];\r\n\r\n let dir1 = {x: curr.x - prev.x, y: curr.y - prev.y};\r\n let dir2 = {x: next.x - curr.x, y: next.y - curr.y};\r\n\r\n let norm1 = {x: dir1.y, y: -dir1.x};\r\n let norm2 = {x: dir2.y, y: -dir2.x};\r\n\r\n // Проверка острого угла\r\n let dotProduct = norm1.x * norm2.x + norm1.y * norm2.y;\r\n let avgNorm;\r\n if (dotProduct < 0) {\r\n avgNorm = i === 1 ? norm1 : norm2; // Использование нормали для более \"плоского\" отрезка\r\n } else {\r\n avgNorm = {x: (norm1.x + norm2.x) / 2, y: (norm1.y + norm2.y) / 2};\r\n }\r\n\r\n let length = Math.sqrt(avgNorm.x * avgNorm.x + avgNorm.y * avgNorm.y);\r\n let unitNorm = {x: avgNorm.x / length, y: avgNorm.y / length};\r\n\r\n offsetPoints.push({\r\n x: curr.x + unitNorm.x * offsetDistance,\r\n y: curr.y + unitNorm.y * offsetDistance\r\n });\r\n }\r\n return offsetPoints;\r\n }\r\n\r\n // offsetLine = (points, distance) => {\r\n // let offsetPoints = [];\r\n //\r\n // for (let i = 0; i < points.length - 1; i++) {\r\n // let p0 = points[i];\r\n // let p1 = points[i + 1];\r\n //\r\n // // Вычислить направление отрезка\r\n // let dx = p1.x - p0.x;\r\n // let dy = p1.y - p0.y;\r\n //\r\n // // Вычислить длину вектора\r\n // let len = Math.sqrt(dx * dx + dy * dy);\r\n //\r\n // // Нормализовать вектор\r\n // dx /= len;\r\n // dy /= len;\r\n //\r\n // // Вычислить нормаль (перпендикуляр)\r\n // //let nx = -dy;\r\n // //let ny = dx;\r\n // let nx = dy;\r\n // let ny = -dx;\r\n //\r\n // // Создать офсетную точку\r\n // offsetPoints.push({\r\n // x: p0.x + nx * distance,\r\n // y: p0.y + ny * distance\r\n // });\r\n // }\r\n //\r\n // // Добавить последнюю точку\r\n // let p0 = points[points.length - 2];\r\n // let p1 = points[points.length - 1];\r\n //\r\n // // Вычислить направление отрезка\r\n // let dx = p1.x - p0.x;\r\n // let dy = p1.y - p0.y;\r\n //\r\n // // Вычислить длину вектора\r\n // let len = Math.sqrt(dx * dx + dy * dy);\r\n //\r\n // // Нормализовать вектор\r\n // dx /= len;\r\n // dy /= len;\r\n //\r\n // // Вычислить нормаль (перпендикуляр)\r\n // //let nx = -dy;\r\n // //let ny = dx;\r\n // let nx = dy;\r\n // let ny = -dx;\r\n //\r\n // offsetPoints.push({\r\n // x: p1.x + nx * distance,\r\n // y: p1.y + ny * distance\r\n // });\r\n // //console.log(\"offsetPoints\", offsetPoints);\r\n // return offsetPoints;\r\n // }\r\n}\r\n","export default function createEventManager() {\r\n const listeners = {};\r\n\r\n return {\r\n on(eventName, callback) {\r\n if (!listeners[eventName]) {\r\n listeners[eventName] = [];\r\n }\r\n listeners[eventName].push(callback);\r\n },\r\n off(eventName, callback) {\r\n if (!listeners[eventName]) return;\r\n const index = listeners[eventName].indexOf(callback);\r\n if (index !== -1) {\r\n listeners[eventName].splice(index, 1);\r\n }\r\n },\r\n emit(eventName, data) {\r\n if (!listeners[eventName]) return;\r\n listeners[eventName].forEach(callback => callback(data));\r\n },\r\n };\r\n}\r\n","import LineImage from \"../core/shapes/imageParts/lineImage\";\r\nimport EventManager from \"../store/sqftEventManager\";\r\nimport PointV2, {CORE_POINT_LAYOUTS} from \"../core/shapes/pointV2\";\r\n//import line from \"../core/shapes/line\";\r\n\r\n/**\r\n *\r\n * @param points[]\r\n * @param parent\r\n * @return lines[{}]\r\n */\r\nexport const createImageLinesFromPoints = (points, parent) => {\r\n let lines = [];\r\n\r\n for (let i = 0; i < points.length; i++) {\r\n const shapeLine = new LineImage(\r\n points[i],\r\n points[(i + 1) % points.length],\r\n parent,\r\n i\r\n );\r\n // const shapeLine = new line([i], points[(i + 1) % points.length]);\r\n // void parent;\r\n\r\n lines.push(shapeLine);\r\n }\r\n\r\n return lines;\r\n};\r\n\r\n\r\n/**\r\n * @param x\r\n * @param y\r\n * @param parent\r\n * @return {PointV2}\r\n */\r\nexport const getImagePoint = (x, y, parent) => {\r\n let pointState = {\r\n priority: EventManager.priorities.BOX_POINT,\r\n movable: false,\r\n isCentered: true,\r\n isResizedByPoint: false,\r\n isScaledByPoint: false,\r\n isVisibleOnHover: false,\r\n };\r\n let pointDesign = {\r\n radius: 0, // hide corner points\r\n lineWidth: 1,\r\n layout: CORE_POINT_LAYOUTS.black\r\n };\r\n\r\n return new PointV2(x, y, parent, pointState, pointDesign);\r\n}\r\n","import SimpleLine from \"../simpleLine\";\r\nimport NumberText from \"../../workspace/text/numberText\";\r\nimport {COLORS} from \"../../../../../../../colorThemes\";\r\nimport workspace from \"../../workspace\";\r\nimport sqftEventManager from \"../../../store/sqftEventManager\";\r\nimport EventManager from \"../../../store/sqftEventManager\";\r\nimport {DIRECTIONS, getLineDirection, getLineOrientation} from \"../../../../../helpers/shapeHelper\";\r\nimport {mmToInches, orientation} from \"../../../../../helpers/sqftHelper\";\r\nimport moveDiagonalLine from \"../../../../../lib/moveDiagonalLine\";\r\nimport sqftConfig from \"../../../store/sqftConfig\";\r\nimport {MEASURE_UNITS} from \"../../../../../constants\";\r\n\r\nclass LineImage extends SimpleLine {\r\n constructor(from, to, parent, lineIndex) {\r\n super(from, to, parent)\r\n\r\n this.movableImage = parent;\r\n this.lineIndex = lineIndex;\r\n const design = {fontColor: COLORS.red, eventsPriority: sqftEventManager.priorities.IMAGE_LINE};\r\n let xOffset = 0;\r\n let yOffset = 0;\r\n switch (lineIndex) {\r\n case 0:\r\n xOffset = 0;\r\n yOffset = 15;\r\n break;\r\n case 1:\r\n xOffset = 0;\r\n yOffset = -15;\r\n break;\r\n case 2:\r\n xOffset = 0;\r\n yOffset = 15;\r\n break;\r\n case 3:\r\n xOffset = 0;\r\n yOffset = 15;\r\n break;\r\n }\r\n // const xOffset = lineIndex === 0 || lineIndex === 2 ? 0 : 15;\r\n // const yOffset = lineIndex === 0 || lineIndex === 2 ? 15 : 0;\r\n this.measurementInsideShape = new NumberText(0, {xOffset: xOffset, yOffset}, design, workspace, this.updatePosInsideShape, false);\r\n }\r\n\r\n destroy = (protect) => {\r\n if (!protect) {\r\n EventManager.removeEvent(this);\r\n this.from.destroy(protect);\r\n this.lineLengthText.destroy();\r\n this.measurementInsideShape.destroy();\r\n }\r\n };\r\n\r\n deregisterEvents = (protect) => {\r\n if (!protect) {\r\n EventManager.removeEvent(this);\r\n this.isHidden = true;\r\n this.from.deregisterEvents();\r\n this.lineLengthText.deregisterEvents();\r\n this.measurementInsideShape.deregisterEvents();\r\n }\r\n };\r\n\r\n reInitEvents = () => {\r\n if (this.isHidden) {\r\n this.initEvents();\r\n this.isHidden = false;\r\n\r\n this.from.reInitEvents();\r\n this.lineLengthText.reInitEvents();\r\n\r\n if (this.movableImage.shouldRenderMeasurementsInsideTheShape()) {\r\n const outerShape = this.movableImage.getOuterShape();\r\n if (outerShape) {\r\n this.measurementInsideShape.reInitEvents();\r\n }\r\n }\r\n }\r\n }\r\n\r\n updatePosInsideShape = (val, numberText, prevValue) => {\r\n let diff = prevValue - val;\r\n diff = sqftConfig.measureUnit === MEASURE_UNITS.Metric\r\n ? mmToInches(diff)\r\n : diff;\r\n\r\n const angleInRadians = this.movableImage.rotatedDegrees * Math.PI / 180; // Предполагая, что rotationAngle - это угол вращения в градусах\r\n\r\n // Calculate the offset taking into account the rotation angle\r\n const deltaX = diff * Math.cos(angleInRadians);\r\n const deltaY = diff * Math.sin(angleInRadians);\r\n\r\n const movableImage = this.from.parent;\r\n const lineIndex = this.lineIndex;\r\n let posXDiff = 0;\r\n let posYDiff = 0;\r\n switch (lineIndex) {\r\n case 0:\r\n posXDiff = -deltaY;\r\n posYDiff = -deltaX;\r\n break;\r\n case 1:\r\n posXDiff = +deltaX;\r\n posYDiff = +deltaY;\r\n break;\r\n case 2:\r\n posXDiff = +deltaY;\r\n posYDiff = +deltaX;\r\n break;\r\n case 3:\r\n posXDiff = -deltaX;\r\n posYDiff = -deltaY;\r\n break;\r\n }\r\n\r\n const newPosition = {x: movableImage.pos.x + posXDiff, y: movableImage.pos.y + posYDiff}\r\n movableImage.setPosition(newPosition);\r\n movableImage.shapeAbsolute.setAbsolutePos(newPosition);\r\n };\r\n\r\n /**\r\n * parent method override\r\n * @param xDiff\r\n * @param yDiff\r\n */\r\n moveLine = (xDiff, yDiff) => {\r\n const currentSize = this.parent.getSize();\r\n let newImageWidth = currentSize.width;\r\n let newImageHeight = currentSize.height;\r\n\r\n const o = getLineOrientation(this.from, this.to);\r\n const lineDirection = getLineDirection(this.from, this.to);\r\n\r\n if (o === orientation.VERTICAL) {\r\n if (lineDirection === DIRECTIONS.SOUTH) {\r\n //set min and max line length\r\n let testNewImageValue = newImageWidth - xDiff;\r\n if (sqftConfig.maxApplianceLineLength > testNewImageValue\r\n && sqftConfig.minApplianceLineLength < testNewImageValue\r\n ) {\r\n newImageWidth = testNewImageValue;\r\n this.from.x -= xDiff;\r\n this.to.x -= xDiff;\r\n }\r\n } else if (lineDirection === DIRECTIONS.NORTH) {\r\n let testNewImageValue = newImageWidth + xDiff;\r\n if (sqftConfig.maxApplianceLineLength > testNewImageValue\r\n && sqftConfig.minApplianceLineLength < testNewImageValue\r\n ) {\r\n newImageWidth = testNewImageValue;\r\n this.parent.setPosition({x: this.parent.pos.x - xDiff, y: this.parent.pos.y});\r\n this.parent.updateSnappedPos(); //resolve snapping v1\r\n //this.parent.resetAbsolutePos(); //resolve snapping v2\r\n\r\n //move points for the parallel line\r\n const parallelLine = this.getParallelLine();\r\n parallelLine.from.x += xDiff;\r\n parallelLine.to.x += xDiff;\r\n\r\n //console.log(\"newImageWidth\", testNewImageValue);\r\n //console.log(\"parallelLine.from.y\", parallelLine.to.x);\r\n //console.log(\"parallelLine.to.y\", parallelLine.to.x);\r\n //console.log(\"xDiff\", xDiff);\r\n }\r\n }\r\n } else if (o === orientation.HORIZONTAL) {\r\n if (lineDirection === DIRECTIONS.WEST) {\r\n let testNewImageValue = newImageHeight - yDiff;\r\n if (sqftConfig.maxApplianceLineLength > testNewImageValue\r\n && sqftConfig.minApplianceLineLength < testNewImageValue\r\n ) {\r\n newImageHeight = testNewImageValue;\r\n this.from.y -= yDiff;\r\n this.to.y -= yDiff;\r\n }\r\n } else if (lineDirection === DIRECTIONS.EAST) {\r\n let testNewImageValue = newImageHeight + yDiff;\r\n if (sqftConfig.maxApplianceLineLength > testNewImageValue\r\n && sqftConfig.minApplianceLineLength < testNewImageValue\r\n ) {\r\n newImageHeight = testNewImageValue;\r\n this.parent.setPosition({x: this.parent.pos.x, y: this.parent.pos.y - yDiff});\r\n this.parent.updateSnappedPos(); //resolve snapping v1\r\n //this.parent.resetAbsolutePos(); //resolve snapping v2\r\n\r\n //move points for the parallel line\r\n const parallelLine = this.getParallelLine();\r\n parallelLine.from.y += yDiff;\r\n parallelLine.to.y += yDiff;\r\n }\r\n }\r\n } else {\r\n const nextLine = this.parent.getNextLine(this);\r\n const prevLine = this.parent.getPrevLine(this);\r\n moveDiagonalLine(this, nextLine, prevLine, this.state.movePointDistance, yDiff, o);\r\n //newImageWidth += xDiff;\r\n //newImageHeight += yDiff;\r\n }\r\n\r\n this.parent.updateLinesLength();\r\n this.updatePrentSize(newImageWidth, newImageHeight);\r\n }\r\n getMaxLength = () => sqftConfig.maxApplianceLineLength * sqftConfig.getMeasureMultiplier()\r\n}\r\n\r\nexport default LineImage;\r\n","import * as uuid from \"uuid\";\r\n\r\nimport sqftConfig from \"../../store/sqftConfig\";\r\nimport workspace from \"../workspace\";\r\nimport EventManager from \"../../store/sqftEventManager\";\r\nimport {getMidPoint, getPointDistance, getPointField, orientation} from \"../../../../helpers/sqftHelper\";\r\nimport {\r\n DIRECTIONS,\r\n getLineDirection,\r\n getLineLengthNumberTextV2ForTheImage,\r\n getLineOrientation,\r\n getPointDirection\r\n} from \"../../../../helpers/shapeHelper\";\r\nimport {isPointInsidePolygon} from \"../../../../lib/pnpoly\";\r\nimport {getLineBordersArrayV2} from \"../../helpers/lineHelper\";\r\nimport moveDiagonalLine from \"../../../../lib/moveDiagonalLine\";\r\nimport SqftStore from \"../../store/sqftStore\";\r\nimport COLOR_THEMES from \"../../../../../../colorThemes\";\r\nimport store from \"../../../../../../store\";\r\nimport {SIDEBAR_NAVIGATION_BUTTONS} from \"../../../../constants\";\r\nimport resizeLine from \"./overlays/resizeLine\";\r\n\r\nclass SimpleLine {\r\n id;\r\n from;\r\n to;\r\n parent;\r\n lineLengthText;\r\n\r\n constructor(from, to, parent) {\r\n this.id = uuid.v4();\r\n this.from = from;\r\n this.to = to;\r\n this.parent = parent;\r\n this.design = {\r\n lineThickness: 1,\r\n lineHoveredArea: 10\r\n };\r\n this.state = {\r\n isHovering: false,\r\n mouseDown: false,\r\n mouseDownPosition: null,\r\n movePointDistance: null\r\n };\r\n this.initLineLength();\r\n this.initEvents();\r\n }\r\n\r\n exportData = () => {\r\n return {\r\n id: this.id,\r\n from: this.from.exportData(),\r\n to: this.to.exportData()\r\n }\r\n }\r\n\r\n importData = (lineData) => {\r\n this.id = lineData.id;\r\n this.from.importData(lineData.from);\r\n this.to.importData(lineData.to);\r\n }\r\n\r\n isHovering = () => {\r\n return this.state.isHovering\r\n }\r\n\r\n getParent = () => {\r\n return this.parent\r\n }\r\n\r\n initEvents = () => {\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_MOVE,\r\n this.onMouseMove,\r\n this,\r\n EventManager.priorities.IMAGE_LINE\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_DOWN,\r\n this.onMouseDown,\r\n this,\r\n EventManager.priorities.IMAGE_LINE\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_UP,\r\n this.onMouseUp,\r\n this,\r\n EventManager.priorities.IMAGE_LINE\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_LEAVE,\r\n this.onMouseLeave,\r\n this,\r\n EventManager.priorities.OVERALL\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_LEAVE,\r\n this.onMouseLeave,\r\n this,\r\n EventManager.priorities.OVERALL\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.RENDER,\r\n this.render,\r\n this,\r\n EventManager.priorities.IMAGE_LINE\r\n );\r\n };\r\n\r\n initLineLength = () => {\r\n this.lineLengthText = getLineLengthNumberTextV2ForTheImage(this.from, this.to, this, this.setLineLengthFromNumberValue, true);\r\n }\r\n\r\n destroy = (protect) => {\r\n if (!protect) {\r\n EventManager.removeEvent(this);\r\n this.from.destroy(protect);\r\n this.lineLengthText.destroy();\r\n }\r\n };\r\n\r\n deregisterEvents = () => {\r\n EventManager.removeEvent(this);\r\n this.isHidden = true;\r\n this.from.deregisterEvents();\r\n this.lineLengthText.deregisterEvents();\r\n }\r\n\r\n reInitEvents = () => {\r\n if (this.isHidden) {\r\n this.initEvents();\r\n this.isHidden = false;\r\n\r\n this.from.reInitEvents();\r\n this.lineLengthText.reInitEvents();\r\n }\r\n }\r\n\r\n onMouseLeave() {\r\n this.state.isHovering = false;\r\n this.state.mouseDown = false;\r\n }\r\n\r\n onMouseUp(mousePos, e) {\r\n void mousePos;\r\n void e;\r\n if (this.state.mouseDown) {\r\n this.state.mouseDown = false;\r\n this.state.mouseDownPosition = null;\r\n //this.from.snapToGrid();\r\n //this.to.snapToGrid();\r\n }\r\n }\r\n onMouseDown(mousePos, e) {\r\n void e;\r\n if (this.state.isHovering) {\r\n this.state.mouseDown = true;\r\n this.state.movePointDistance = getPointDistance(this.from, this.to);\r\n this.state.mouseDownPosition = mousePos;\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n isMouseOverLineV2 = (mousePos) => {\r\n const lineBordersArray = getLineBordersArrayV2(this.from,\r\n this.to,\r\n this.design.lineHoveredArea\r\n )\r\n //this.state.isHovering\r\n return isPointInsidePolygon(mousePos, lineBordersArray);// || this.state.mouseDown;\r\n }\r\n\r\n onMouseMove = (mousePos, e) => {\r\n void e;\r\n // if (e.terminate && !parent.isHovering()) {\r\n // this.state.isHovering = false;\r\n // return false;\r\n // }\r\n const isMouseOverLine = this.isMouseOverLineV2(mousePos);\r\n this.state.isHovering = isMouseOverLine;\r\n\r\n if (this.state.mouseDown || isMouseOverLine) {\r\n if (workspace.getAllowEdges() && !this.from.angleIsChanged && !this.to.angleIsChanged) {\r\n if (this.state.mouseDown) {\r\n this.moveLineWithMouse(mousePos);\r\n }\r\n EventManager.releaseStealLock(this.parent);\r\n EventManager.stealCursor();\r\n switch(getLineOrientation(this.from, this.to)) {\r\n case orientation.HORIZONTAL:\r\n EventManager.setCursor(\"n-resize\", this);\r\n break;\r\n case orientation.VERTICAL:\r\n EventManager.setCursor(\"e-resize\", this);\r\n break;\r\n case orientation.NORTHWEST:\r\n case orientation.SOUTHEAST:\r\n EventManager.setCursor(\"ne-resize\", this);\r\n break;\r\n case orientation.NORTHEAST:\r\n case orientation.SOUTHWEST:\r\n EventManager.setCursor(\"nw-resize\", this);\r\n break;\r\n }\r\n return this.state.mouseDown;\r\n }\r\n\r\n if (sqftConfig.highlight.lines && this.state.isHovering) {\r\n EventManager.releaseStealLock(this.parent);\r\n EventManager.stealCursor();\r\n return false;\r\n }\r\n // prevent all other mouseover's\r\n }\r\n\r\n if (workspace.getHoverShape() !== this.parent) {\r\n this.state.isHovering = false;\r\n }\r\n EventManager.resetCursor(this);\r\n return false;\r\n }\r\n\r\n setLineLengthFromNumberValue = (newValue) => {\r\n newValue = newValue / sqftConfig.getMeasureMultiplier()\r\n const currentDistance = getPointDistance(this.from, this.to);\r\n const diff = newValue - currentDistance;\r\n resizeLine(this, diff, false);\r\n\r\n //adjust parent size\r\n const currentSize = this.parent.getSize();\r\n let newImageWidth = currentSize.width;\r\n let newImageHeight = currentSize.height;\r\n const o = getLineOrientation(this.from, this.to);\r\n const lineDirection = getLineDirection(this.from, this.to);\r\n\r\n if (o === orientation.VERTICAL) {\r\n this.parent.setPosition({x: this.parent.pos.x, y: this.parent.pos.y - diff / 2});\r\n if (lineDirection === DIRECTIONS.SOUTH) {\r\n newImageHeight = newValue;\r\n } else if (lineDirection === DIRECTIONS.NORTH) {\r\n newImageHeight = newValue;\r\n }\r\n this.from.y += diff / 2;\r\n this.to.y += diff / 2;\r\n //move points for the parallel line\r\n const parallelLine = this.getParallelLine();\r\n parallelLine.from.y += diff / 2;\r\n parallelLine.to.y += diff / 2;\r\n } else if (o === orientation.HORIZONTAL) {\r\n this.parent.setPosition({x: this.parent.pos.x - diff / 2, y: this.parent.pos.y});\r\n if (lineDirection === DIRECTIONS.WEST) {\r\n newImageWidth = newValue;\r\n } else if (lineDirection === DIRECTIONS.EAST) {\r\n newImageWidth = newValue;\r\n }\r\n\r\n this.from.x += diff / 2;\r\n this.to.x += diff / 2;\r\n //move points for the parallel line\r\n const parallelLine = this.getParallelLine();\r\n parallelLine.from.x += diff / 2;\r\n parallelLine.to.x += diff / 2;\r\n } else {\r\n // const nextLine = this.parent.getNextLine(this);\r\n // const prevLine = this.parent.getPrevLine(this);\r\n // moveDiagonalLine(this, nextLine, prevLine, this.state.movePointDistance, yDiff, o);\r\n //newImageWidth += xDiff;\r\n //newImageHeight += yDiff;\r\n }\r\n\r\n this.parent.updateLinesLength();\r\n this.parent.updateSnappedPos(); //resolve snapping v1\r\n this.updatePrentSize(newImageWidth, newImageHeight);\r\n }\r\n\r\n moveLineWithMouse = (mousePos) => {\r\n\r\n // console.log(\"mousePos\", mousePos);\r\n // console.log(\"this.from.x\", this.from.x);\r\n // console.log(\"this.from.x\", this.to.x);\r\n\r\n const scale = workspace.getScale();\r\n const xDiff = (this.state.mouseDownPosition.x - mousePos.x) / scale;\r\n const yDiff = (this.state.mouseDownPosition.y - mousePos.y) / scale;\r\n const o = getLineOrientation(this.from, this.to);\r\n if (o === orientation.VERTICAL) {\r\n this.state.mouseDownPosition.x = mousePos.x;\r\n } else if (o === orientation.HORIZONTAL) {\r\n this.state.mouseDownPosition.y = mousePos.y;\r\n } else {\r\n this.state.mouseDownPosition = mousePos;\r\n }\r\n\r\n // console.log(\"xDiff\", xDiff);\r\n // console.log(\"yDiff\", yDiff);\r\n // console.log(\"this.state.mouseDownPosition\", this.state.mouseDownPosition);\r\n // console.log(\"mousePos\", mousePos);\r\n this.moveLine(xDiff, yDiff);\r\n };\r\n\r\n moveLine = (xDiff, yDiff) => {\r\n const currentSize = this.parent.getSize();\r\n let newImageWidth = currentSize.width;\r\n let newImageHeight = currentSize.height;\r\n\r\n const o = getLineOrientation(this.from, this.to);\r\n const lineDirection = getLineDirection(this.from, this.to);\r\n\r\n if (o === orientation.VERTICAL) {\r\n if (lineDirection === DIRECTIONS.SOUTH) {\r\n newImageWidth -= xDiff;\r\n this.from.x -= xDiff;\r\n this.to.x -= xDiff;\r\n } else if (lineDirection === DIRECTIONS.NORTH) {\r\n newImageWidth += xDiff;\r\n this.parent.setPosition({x: this.parent.pos.x - xDiff, y: this.parent.pos.y});\r\n this.parent.updateSnappedPos(); //resolve snapping v1\r\n //this.parent.resetAbsolutePos(); //resolve snapping v2\r\n\r\n //move points for the parallel line\r\n const parallelLine = this.getParallelLine();\r\n parallelLine.from.x += xDiff;\r\n parallelLine.to.x += xDiff;\r\n }\r\n } else if (o === orientation.HORIZONTAL) {\r\n if (lineDirection === DIRECTIONS.WEST) {\r\n newImageHeight -= yDiff;\r\n this.from.y -= yDiff;\r\n this.to.y -= yDiff;\r\n } else if (lineDirection === DIRECTIONS.EAST) {\r\n newImageHeight += yDiff;\r\n this.parent.setPosition({x: this.parent.pos.x, y: this.parent.pos.y - yDiff});\r\n this.parent.updateSnappedPos(); //resolve snapping v1\r\n //this.parent.resetAbsolutePos(); //resolve snapping v2\r\n\r\n //move points for the parallel line\r\n const parallelLine = this.getParallelLine();\r\n parallelLine.from.y += yDiff;\r\n parallelLine.to.y += yDiff;\r\n }\r\n } else {\r\n const nextLine = this.parent.getNextLine(this);\r\n const prevLine = this.parent.getPrevLine(this);\r\n moveDiagonalLine(this, nextLine, prevLine, this.state.movePointDistance, yDiff, o);\r\n //newImageWidth += xDiff;\r\n //newImageHeight += yDiff;\r\n }\r\n\r\n this.parent.updateLinesLength();\r\n this.updatePrentSize(newImageWidth, newImageHeight);\r\n }\r\n\r\n updatePrentSize = (newImageWidth, newImageHeight) => {\r\n const imageState = this.parent.getState();\r\n if (newImageHeight >= imageState.minimumHeight && newImageWidth >= imageState.minimumWidth ) {\r\n this.parent.setSize({\r\n width: +newImageWidth,\r\n height: +newImageHeight\r\n });\r\n }\r\n\r\n SqftStore.updateCalculations();\r\n }\r\n\r\n updateLineLength = () => {\r\n const midPoint = getMidPoint(this.from, this.to);\r\n const distance = getPointDistance(this.from, this.to);\r\n this.lineLengthText.pos.x = midPoint.x;\r\n this.lineLengthText.pos.y = midPoint.y;\r\n this.lineLengthText.value = distance;\r\n }\r\n\r\n getLineDirection = () => {\r\n const prevLine = this.parent.getPrevLine(this);\r\n const nextLine = this.parent.getNextLine(this);\r\n\r\n return getPointDirection(this.from, this.to, nextLine.to, prevLine.from);\r\n }\r\n\r\n render = (ctx) => {\r\n this.renderHovering(ctx);\r\n }\r\n\r\n renderHovering = (ctx) => {\r\n const reduxState = store.getState();\r\n const activeButton = reduxState.sqftMenuState.activeButton;\r\n if (this.state.isHovering && activeButton === SIDEBAR_NAVIGATION_BUTTONS.resize) {\r\n let pointFieldFrom = getPointField(this.from.x, this.from.y, this.parent);\r\n let pointFieldTo = getPointField(this.to.x, this.to.y, this.parent);\r\n void pointFieldFrom;\r\n void pointFieldTo;\r\n void ctx;\r\n\r\n ctx.beginPath();\r\n ctx.lineWidth = 3;\r\n ctx.strokeStyle = COLOR_THEMES[sqftConfig.activeTheme].primary;\r\n ctx.moveTo(pointFieldFrom.x, pointFieldFrom.y);\r\n ctx.lineTo(pointFieldTo.x, pointFieldTo.y);\r\n\r\n ctx.stroke();\r\n ctx.closePath();\r\n }\r\n }\r\n\r\n getParallelLine = () => {\r\n const lines = this.parent.getLines();\r\n const lineIndex = lines.indexOf(this);\r\n const parallelLineIndex = (lineIndex + 2) % 4;\r\n\r\n return lines[parallelLineIndex];\r\n }\r\n\r\n getOffset = () => {\r\n let scale = sqftConfig.scale;\r\n let workspacePos = workspace.getOffset();\r\n if (this.parent) {\r\n let _pos = this.parent.getPosition();\r\n if (sqftConfig.workspace.snapToGrid) {\r\n _pos = this.parent.getSnappedPosition();\r\n }\r\n return {\r\n x: workspacePos.x + (_pos.x * scale),\r\n y: workspacePos.y + (_pos.y * scale)\r\n }\r\n } else {\r\n return {x: 0, y: 0};\r\n }\r\n };\r\n\r\n deleteAttachedItem = () => {\r\n return true\r\n }\r\n\r\n isWithBumpout = () => {\r\n return false\r\n }\r\n\r\n isWithMitered = () => {\r\n return false\r\n }\r\n}\r\n\r\nexport default SimpleLine;\r\n","import {RENDER_TEMPLATES} from \"../../../../../constants\";\r\nimport workspace from \"../../workspace\";\r\nimport sqftConfig from \"../../../store/sqftConfig\";\r\nimport COLOR_THEMES from \"../../../store/colorThemes\";\r\nimport store from \"../../../../../../../store\";\r\nimport sqftShapeManager from \"../../../store/sqftShapeManager\";\r\nimport EventManager from \"../../../store/sqftEventManager\";\r\nimport PointV2, {CORE_POINT_LAYOUTS} from \"../pointV2\";\r\nimport {getParallelPoints, getPointField, getPointOnTheLine} from \"../../../../../helpers/sqftHelper\";\r\nimport {getAngleBetween3Points} from \"../../../../../helpers/shapeHelper\";\r\nimport {changeValuePopup} from \"../../../../../../../actions/sqftMenuFunctions\";\r\nimport SqftStore from \"../../../store/sqftStore\";\r\nimport sqftImageManager from \"../../../store/sqftImageManager\";\r\nimport sqftShape from \"../sqftShape\";\r\nimport RenderFigures from \"../../../helpers/renderFigures\";\r\n\r\nexport default class ShapeRotatable {\r\n __shape;\r\n __cornerPoints = [];\r\n rotateToPointAngle = null; // angle between shape center, hovered point and zero shape point\r\n\r\n constructor(shape) {\r\n this.__shape = shape;\r\n //this.__shape.setCenter(ShapeHelper.getCenterPoint(shape.getLines().map(line => line.from)));\r\n this.initCornerBorderPoints();\r\n if (shape instanceof sqftShape) {\r\n this.hideShapePoints();\r\n }\r\n }\r\n\r\n getCornerPoint() {\r\n return this.__shape.staticCenterPoint\r\n }\r\n\r\n getCornerPoints() {\r\n return this.__cornerPoints\r\n }\r\n\r\n reInitShapePoints() {\r\n if (this.__shape instanceof sqftShape) {\r\n const lines = this.__shape.getLines();\r\n for (const line of lines) {\r\n line.from.initEvents();\r\n }\r\n }\r\n }\r\n\r\n hideShapePoints() {\r\n const lines = this.__shape.getLines();\r\n for (const line of lines) {\r\n line.from.deregisterEvents();\r\n }\r\n }\r\n\r\n initCornerBorderPoints = () => {\r\n let minMaxPoints;\r\n if (this.__shape instanceof sqftShape) {\r\n minMaxPoints = sqftShapeManager.getMinMaxShapePoints(this.__shape, true, false)\r\n } else {\r\n minMaxPoints = sqftImageManager.getMinMaxShapePoints(this.__shape, true, false);\r\n }\r\n const {minX, maxX, minY, maxY} = minMaxPoints;\r\n console.log(\"minX, maxX, minY, maxY\", minX, maxX, minY, maxY);\r\n\r\n let pointParams = {\r\n priority: EventManager.priorities.BOX_POINT,\r\n movable: true,\r\n isCentered: true,\r\n // isCenteredByY: pointParams.isCenteredByY,\r\n // isResizedByPoint: pointParams.isResizedByPoint,\r\n // isScaledByPoint: pointParams.isScaledByPoint,\r\n isVisibleOnHover: false,\r\n\r\n // Move point callback\r\n moveCallback: (mousePos, movablePoint) => {\r\n // get angles\r\n const isSlabMode = store.getState().sqftSlabState.isShowSlabTool;\r\n const shape = movablePoint.grandParent;\r\n const shapeCenter = shape.getCenter();\r\n const shapeCenterOnField = getPointField(shapeCenter.x, shapeCenter.y, shape);\r\n const movablePointOnField = getPointField(movablePoint.posX, movablePoint.posY, shape);\r\n const shapeZeroAnglePoint = {x: shapeCenterOnField.x, y: shapeCenterOnField.y - 50};\r\n let rotateToMouseAngle = getAngleBetween3Points(mousePos, shapeCenterOnField, shapeZeroAnglePoint);\r\n let rotatedDegrees;\r\n isSlabMode ? rotatedDegrees = shape.rotatedDegreesSlab : rotatedDegrees = shape.rotatedDegrees;\r\n\r\n if (!shape.shapeRotatable) {\r\n return;\r\n }\r\n\r\n // remember rotateToPointAngle angle (it is always the same)\r\n if (!shape.shapeRotatable.rotateToPointAngle) {\r\n shape.shapeRotatable.rotateToPointAngle = getAngleBetween3Points(movablePointOnField, shapeCenterOnField, shapeZeroAnglePoint);\r\n shape.shapeRotatable.rotateToPointAngle = mousePos.x < shapeCenterOnField.x ? 360 - shape.shapeRotatable.rotateToPointAngle : shape.shapeRotatable.rotateToPointAngle;\r\n //shape.shapeRotatable.rotateToPointAngle -= rotatedDegrees;\r\n }\r\n\r\n // ROTATE TO LEFT\r\n const rotateToAngleIn360 = mousePos.x < shapeCenterOnField.x ? 360 - rotateToMouseAngle : rotateToMouseAngle;\r\n const rotateToAngleWithoutHoveredPointAngle = shape.shapeRotatable.rotateToPointAngle - rotateToAngleIn360 - rotatedDegrees;\r\n const rotateToDegreesValue = Math.round(rotateToAngleWithoutHoveredPointAngle);\r\n\r\n // Normalize angle to range [0, 360)\r\n const normalizedRotateToDegreesValue = (rotateToDegreesValue % 360 + 360) % 360;\r\n\r\n if (normalizedRotateToDegreesValue) {\r\n this.__shape.rotate(normalizedRotateToDegreesValue, shape.Direction.LEFT, isSlabMode, this.getCornerPoint());\r\n\r\n // ROTATE TO RIGHT\r\n // const rotateToAngleWithoutHoveredPointAngle = rotateToAngle - shape.shapeRotatable.rotateToPointAngle - rotatedDegrees;\r\n // const rotateToDegreesValue = Math.round(rotateToAngleWithoutHoveredPointAngle);\r\n // this.__shape.rotate(rotateToDegreesValue, shape.Direction.RIGHT, isSlabMode, this.getCornerPoint());\r\n\r\n isSlabMode\r\n ? shape.rotatedDegreesSlab = (shape.rotatedDegreesSlab % 360 + 360) % 360\r\n : shape.rotatedDegrees = (shape.rotatedDegrees % 360 + 360) % 360;\r\n\r\n // update valuePopup\r\n const state = store.getState();\r\n const valuePopup = state.sqftMenuState.changeValuePopups.find(valuePopup => valuePopup.id === 'shape' + shape.id);\r\n const displayValueInPopup = isSlabMode ? shape.rotatedDegreesSlab : shape.rotatedDegrees;\r\n store.dispatch(changeValuePopup({\r\n ...valuePopup,\r\n value: displayValueInPopup\r\n }));\r\n }\r\n\r\n\r\n // Debugging information\r\n // console.log(\"rotateToDegreesValue\", rotateToDegreesValue);\r\n // console.log(\"normalizedRotateToDegreesValue\", normalizedRotateToDegreesValue);\r\n // console.log(\"shape.rotatedDegrees2\", shape.rotatedDegrees);\r\n // console.log('movablePointOnField', movablePointOnField);\r\n // console.log(\"mousePos.x < shapeCenter.x\", mousePos.x < shapeCenter.x);\r\n // console.log('rotatePointAngle', shape.shapeRotatable.rotateToPointAngle);\r\n // console.log('rotateToMouseAngle', rotateToMouseAngle);\r\n // console.log('rotateToAngle', rotateToAngle);\r\n // console.log(\"rotateToAngleWithoutHoveredPointAngle\", rotateToAngleWithoutHoveredPointAngle);\r\n // console.log('shapeCenterOnField', shapeCenterOnField);\r\n // console.log('mousePos', mousePos);\r\n // console.log('movablePoint', movablePoint);\r\n // console.log('-------------------------------');\r\n },\r\n mouseUpCallback: (mousePos, movablePoint) => {\r\n const shape = movablePoint.grandParent;\r\n shape.shapeRotatable.rotateToPointAngle = null;\r\n }\r\n };\r\n let pointDesign = {\r\n radius: 5,\r\n lineWidth: 1,\r\n layout: CORE_POINT_LAYOUTS.green\r\n };\r\n this.__cornerPoints = [\r\n new PointV2(minX, minY, this.__shape, pointParams, pointDesign),\r\n new PointV2(maxX, minY, this.__shape, pointParams, pointDesign),\r\n new PointV2(maxX, maxY, this.__shape, pointParams, pointDesign),\r\n new PointV2(minX, maxY, this.__shape, pointParams, pointDesign),\r\n ];\r\n }\r\n\r\n destroy = () => {\r\n for (const cornerPoint of this.__cornerPoints) {\r\n cornerPoint.destroy()\r\n }\r\n }\r\n\r\n rotateShapeRotatablePoints = (aroundPoint, angle, isSlabMode) => {\r\n if (this.__shape) {\r\n for (const cornerPoint of this.getCornerPoints()) {\r\n cornerPoint.rotate(aroundPoint, angle, isSlabMode);\r\n }\r\n }\r\n }\r\n\r\n getCornerPointsPointField = () => {\r\n let cornerPointsPointField = [];\r\n for (const currentPoint of this.__cornerPoints) {\r\n cornerPointsPointField.push(\r\n getPointField( currentPoint.modelCorePoint.getPosX(), currentPoint.modelCorePoint.getPosY(), this.__shape)\r\n );\r\n }\r\n\r\n return cornerPointsPointField;\r\n }\r\n\r\n render = (ctx, template= RENDER_TEMPLATES.default) => {\r\n //this.updatePointCords();\r\n this.renderFrameBorder(ctx, this.__shape);\r\n this.renderFramePoints(ctx, this.__shape);\r\n if (this.__shape instanceof sqftShape) {\r\n this.renderLines(ctx, template);\r\n }\r\n };\r\n\r\n renderLines = (ctx, template= RENDER_TEMPLATES.default) => {\r\n if (workspace && workspace.getState().loading) return;\r\n const isSlabMode = SqftStore.isSlabMode();\r\n let lines = this.__shape.getLines();\r\n\r\n ctx.beginPath();\r\n for (let i = 0; i < lines.length; i++) {\r\n lines[i].render(ctx, i > 0);\r\n }\r\n if (this.__shape.isHovering() && workspace.getHoverShape() === this.__shape ) {\r\n ctx.strokeStyle = COLOR_THEMES[sqftConfig.activeTheme].active_hover;\r\n } else {\r\n ctx.strokeStyle = COLOR_THEMES[sqftConfig.activeTheme].active;\r\n }\r\n ctx.fillStyle = COLOR_THEMES[sqftConfig.activeTheme].active_disabled;\r\n switch (template) {\r\n case RENDER_TEMPLATES.linesOnly:\r\n ctx.lineWidth = 0;\r\n ctx.fill();\r\n ctx.closePath();\r\n break;\r\n case RENDER_TEMPLATES.default:\r\n default:\r\n ctx.fillStyle = isSlabMode ? COLOR_THEMES[sqftConfig.activeTheme].active_disabled : this.__shape.getFillColor();\r\n ctx.lineWidth = 2; // Math.ceil(scale);\r\n ctx.fill();\r\n ctx.closePath();\r\n ctx.stroke();\r\n break;\r\n }\r\n\r\n if (this.__shape.isHovering() && workspace.getHoveredSqftShape() === this.__shape ) {\r\n let sqftMenuState = store.getState().sqftMenuState;\r\n void sqftMenuState;\r\n }\r\n };\r\n\r\n renderFrameBorder = (ctx) => {\r\n ctx.beginPath();\r\n ctx.lineWidth = 2;\r\n\r\n let pointField = getPointField(\r\n this.__cornerPoints[0].modelCorePoint.getPosX(),\r\n this.__cornerPoints[0].modelCorePoint.getPosY(),\r\n this.__shape\r\n );\r\n ctx.moveTo(pointField.x, pointField.y);\r\n\r\n for (const cornerPoint of this.__cornerPoints) {\r\n pointField = getPointField(\r\n cornerPoint.modelCorePoint.getPosX(),\r\n cornerPoint.modelCorePoint.getPosY(),\r\n this.__shape\r\n );\r\n ctx.lineTo(pointField.x, pointField.y);\r\n }\r\n\r\n ctx.strokeStyle = COLOR_THEMES[sqftConfig.activeTheme].active;\r\n ctx.closePath();\r\n ctx.stroke();\r\n }\r\n\r\n renderFramePoints = (ctx) => {\r\n let len = this.__cornerPoints.length;\r\n const cornerPointsPointField = this.getCornerPointsPointField();\r\n for (const index in cornerPointsPointField) {\r\n //cornerPoint.render(ctx);\r\n if (cornerPointsPointField.hasOwnProperty(index)) {\r\n let current = cornerPointsPointField[+index];\r\n let previous = cornerPointsPointField[(+index + len - 1) % len];\r\n let next = cornerPointsPointField[(+index + 1) % len];\r\n\r\n ctx.save();\r\n ctx.beginPath();\r\n // ctx.translate(\r\n // cornerPointsPointField[index].x,\r\n // cornerPointsPointField[index].y,\r\n // );\r\n //ctx.rotate(90 * cornerPointIndex * (Math.PI / 180));\r\n // RenderFigures.drawRotatedArrow(ctx,\r\n // - 20, 0,\r\n // 0, - 20,\r\n // - 20, - 20,\r\n // 10\r\n // )\r\n const from = getPointOnTheLine(current, previous, 20);\r\n const to = getPointOnTheLine(current, next, 20);\r\n const [midPoint, midPoint2] = getParallelPoints(from, current,20);\r\n void midPoint;\r\n RenderFigures.drawRotatedArrow(ctx,\r\n from.x, from.y,\r\n to.x, to.y,\r\n midPoint2.x, midPoint2.y,\r\n 10\r\n )\r\n\r\n //console.log(\"from\", from);\r\n //console.log(\"to\", to);\r\n //debugger // eslint-disable-line no-debugger\r\n ctx.lineWidth = 2;\r\n ctx.strokeStyle = 'rgba(159,197,34,0.47)';\r\n ctx.fillStyle = 'rgba(159,197,34,0.47)';\r\n ctx.stroke();\r\n ctx.closePath();\r\n ctx.restore();\r\n\r\n //RenderFigures.renderCircle(from, 5,1, '#63b141');\r\n //RenderFigures.renderCircle(to, 8,1, '#63b141');\r\n //RenderFigures.renderCircle({x:to.x, y: from.y}, 12,1, '#63b141');\r\n }\r\n }\r\n }\r\n\r\n\r\n // renderLinesBetweenPoints = (ctx) => {\r\n // ctx.beginPath();\r\n // ctx.lineWidth = lineWidth;\r\n // ctx.strokeStyle = color;\r\n // drawLines(ctx);\r\n //\r\n // ctx.stroke();\r\n // };\r\n}\r\n","export default class ChangeValuePopup {\r\n id;\r\n min;\r\n max;\r\n confirmCallback;\r\n increaseCallback;\r\n decreaseCallback;\r\n inputChangeCallback;\r\n value;\r\n position;\r\n\r\n constructor(id, min, max, confirmCallback, increaseCallback, decreaseCallback, inputChangeCallback, value, position) {\r\n this.id = id;\r\n this.min = min;\r\n this.max = max;\r\n this.confirmCallback = confirmCallback;\r\n this.increaseCallback = increaseCallback;\r\n this.decreaseCallback = decreaseCallback;\r\n this.inputChangeCallback = inputChangeCallback;\r\n this.value = value;\r\n this.position = position;\r\n }\r\n}\r\n","import {SQFTResourceController} from \"./SQFTResourceController\";\r\nimport {WORKSPACE_RESOURCES} from \"../../../../constants\";\r\nimport store from \"../../../../../../store\";\r\nimport workspace from \"../../core/workspace\";\r\nimport {LineHandlesModel} from \"../models/LineHandlesModel\";\r\n\r\nexport class HandlesController extends SQFTResourceController {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.resourceName = WORKSPACE_RESOURCES.handles;\r\n }\r\n\r\n generateHandles() {\r\n const reduxState = store.getState();\r\n const selectedPartIds = reduxState.sqftResourceState.selectedPartIds\r\n const shapes = workspace.getShapes();\r\n for (const shape of shapes) {\r\n if (selectedPartIds.includes(shape.partId)) {\r\n this.addHandleToTheShape(shape);\r\n }\r\n }\r\n }\r\n\r\n addHandleToTheShape(shape) {\r\n const reduxState = store.getState();\r\n const selectedFeature = reduxState.sqftResourceState.selectedFeature\r\n const lines = shape.getLines();\r\n for (const lineIndex in lines) {\r\n if (+lineIndex === 2) {\r\n if (lines.hasOwnProperty(lineIndex)) {\r\n lines[lineIndex].setHandleId(selectedFeature.part.dbFeature.id);\r\n const handle3dURL = this.findGLBModel(selectedFeature.part.dbFeature.thirdPartyAR3DUrls, 'V')\r\n lines[lineIndex].setHandle3dURL(handle3dURL);\r\n this.addResource(new LineHandlesModel(lines[lineIndex].id, selectedFeature.part.dbFeature.id));\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Function to find a .glb model in the array based on H or V suffix.\r\n * If the parameter is not passed or no matching model is found, it returns the first .glb model found.\r\n *\r\n * @param {Array} urls - Array of URLs.\r\n * @param {String} [suffix] - Optional. Suffix 'H' or 'V' to search for in the URL.\r\n * @returns {String} - The found .glb model URL or the first .glb model in the array.\r\n */\r\n findGLBModel(urls, suffix) {\r\n if (!urls) {\r\n return null\r\n }\r\n\r\n const glbModels = urls.filter(url => url.endsWith('.glb'));\r\n\r\n if (!glbModels.length) {\r\n return null;\r\n }\r\n\r\n // If suffix is provided (either 'H' or 'V'), search for a model with that suffix\r\n if (suffix) {\r\n const modelWithSuffix = glbModels.find(url => url.endsWith(`-${suffix}.glb`));\r\n if (modelWithSuffix) {\r\n return modelWithSuffix;\r\n }\r\n }\r\n\r\n return glbModels[0];\r\n }\r\n\r\n exportHandles() {\r\n return this.export()\r\n }\r\n}\r\n\r\n","import * as uuid from \"uuid\";\r\nimport {getQtCatName} from \"../../../../helpers/sqftQuotesHelper\";\r\n\r\nexport class LineHandlesModel {\r\n lineId;\r\n id;\r\n featureId;\r\n qtCatName;\r\n\r\n constructor(lineId, handleId, qtCatName = null, id = uuid.v4()) {\r\n this.id = id;\r\n this.lineId = lineId;\r\n this.featureId = handleId;\r\n this.qtCatName = qtCatName ? qtCatName : getQtCatName();\r\n }\r\n}\r\n","import {SQFTResourceController} from \"./SQFTResourceController\";\r\nimport {WORKSPACE_RESOURCES} from \"../../../../constants\";\r\nimport workspace from \"../../core/workspace\";\r\n\r\n\r\nexport class WallsController extends SQFTResourceController {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.resourceName = WORKSPACE_RESOURCES.walls;\r\n }\r\n\r\n getWallByPoint(searchPoint) {\r\n return workspace.walls.find(wall => {\r\n for (const wallPoint of wall.getPoints()) {\r\n if (wallPoint.id === searchPoint.id) {\r\n return wall\r\n }\r\n }\r\n })\r\n }\r\n\r\n}\r\n\r\n","import * as uuid from \"uuid\";\r\nimport {SQFTResourceController} from \"./SQFTResourceController\";\r\nimport {WORKSPACE_RESOURCES} from \"../../../../constants\";\r\nimport {ShapeColorModel} from \"../models/ShapeColor\";\r\nimport {getFeatureNameById} from \"../../../../helpers/featureHelper\";\r\n\r\nexport class ShapeColorsController extends SQFTResourceController {\r\n\r\n defaultColorSets = [\r\n {\r\n id: uuid.v4(),\r\n primary: 'rgba(74, 144, 226, 0.17)',\r\n primary_border: '#4a90e2',\r\n primary_hover: 'rgba(61,115,173,0.33)',\r\n }, {\r\n id: uuid.v4(),\r\n primary: 'rgba(159, 197, 34, 0.17)',\r\n primary_border: '#9fc522',\r\n primary_hover: 'rgba(138,173,30,0.33)',\r\n }, {\r\n id: uuid.v4(),\r\n primary: 'rgba(201, 28, 123, 0.17)',\r\n primary_border: '#c91c7b',\r\n primary_hover: 'rgba(146,20,91, 0.33)',\r\n }, {\r\n id: uuid.v4(),\r\n primary: 'rgba(28, 201, 201, 0.17)',\r\n primary_border: '#1cc9c9',\r\n primary_hover: 'rgba(28, 201, 201, 0.33)',\r\n }, {\r\n id: uuid.v4(),\r\n primary: 'rgba(175, 201, 28, 0.17)',\r\n primary_border: '#afc91c',\r\n primary_hover: 'rgba(175, 201, 28, 0.33)',\r\n }, {\r\n id: uuid.v4(),\r\n primary: 'rgba(201, 158, 28, 0.17)',\r\n primary_border: '#c99e1c',\r\n primary_hover: 'rgba(201, 158, 28,0.33)',\r\n }, {\r\n id: uuid.v4(),\r\n primary: 'rgba(201, 109, 28, 0.17)',\r\n primary_border: '#c96d1c',\r\n primary_hover: 'rgba(201, 109, 28, 0.33)',\r\n }, {\r\n id: uuid.v4(),\r\n primary: 'rgba(28, 201, 146, 0.17)',\r\n primary_border: '#1cc992',\r\n primary_hover: 'rgba(28, 201, 146, 0.33)',\r\n }, {\r\n id: uuid.v4(),\r\n primary: 'rgba(28, 201, 86, 0.17)',\r\n primary_border: '#1cc956',\r\n primary_hover: 'rgba(28, 201, 86, 0.33)',\r\n }, {\r\n id: uuid.v4(),\r\n primary: 'rgba(94, 201, 28, 0.17)',\r\n primary_border: '#5ec91c',\r\n primary_hover: 'rgba(94, 201, 28, 0.33)',\r\n },{\r\n id: uuid.v4(),\r\n primary: 'rgba(169, 28, 201, 0.17)',\r\n primary_border: '#a91cc9',\r\n primary_hover: 'rgba(169, 28, 201, 0.33)',\r\n }, {\r\n id: uuid.v4(),\r\n primary: 'rgba(94, 28, 201, 0.17)',\r\n primary_border: '#5e1cc9',\r\n primary_hover: 'rgba(94, 28, 201,0.33)',\r\n },\r\n ]\r\n\r\n constructor(props) {\r\n super(props);\r\n this.resourceName = WORKSPACE_RESOURCES.shapeColors;\r\n }\r\n\r\n getShapeColorByFeatureId(featureId) {\r\n return this.getResources().find(resource => resource.featureId === featureId);\r\n }\r\n\r\n getOrGenerateNewShapeColorByFeatureId(featureId) {\r\n let colorSet = this.getShapeColorByFeatureId(featureId);\r\n if (!colorSet) {\r\n return this.createShapeColor(featureId);\r\n }\r\n return colorSet;\r\n }\r\n\r\n generateRandomRGB() {\r\n return {\r\n r: Math.floor(Math.random() * 256),\r\n g: Math.floor(Math.random() * 256),\r\n b: Math.floor(Math.random() * 256)\r\n };\r\n }\r\n\r\n darkenColor({r, g, b}, factor = 0.9) {\r\n return {\r\n r: Math.floor(r * factor),\r\n g: Math.floor(g * factor),\r\n b: Math.floor(b * factor)\r\n };\r\n }\r\n\r\n createShapeColor(featureId) {\r\n let colorSet = this.defaultColorSets.find(set => !this.getResourceById(set.id));\r\n if (!colorSet) {\r\n const baseColor = this.generateRandomRGB();\r\n const hoverColor = baseColor//this.darkenColor(baseColor);\r\n\r\n colorSet = {\r\n id: uuid.v4(),\r\n primary: `rgba(${baseColor.r}, ${baseColor.g}, ${baseColor.b}, 0.17)`,\r\n primary_border: `rgb(${baseColor.r}, ${baseColor.g}, ${baseColor.b})`,\r\n primary_hover: `rgb(${hoverColor.r}, ${hoverColor.g}, ${hoverColor.b}, 0.33)`\r\n };\r\n } else {\r\n this.defaultColorSets = this.defaultColorSets.filter(set => set.id !== colorSet.id);\r\n }\r\n\r\n const featureName = getFeatureNameById(featureId);\r\n\r\n const shapeColorModel = new ShapeColorModel(\r\n colorSet.id,\r\n featureId,\r\n featureName,\r\n colorSet.primary,\r\n colorSet.primary_border,\r\n colorSet.primary_hover\r\n );\r\n\r\n this.addResource(shapeColorModel);\r\n\r\n return shapeColorModel\r\n }\r\n}\r\n","export class ShapeColorModel {\r\n id;\r\n featureId;\r\n primary;\r\n primary_border;\r\n primary_hover;\r\n\r\n constructor(id, featureId, featureName, primary, primary_border, primary_hover) {\r\n this.id = id;\r\n this.featureId = featureId;\r\n this.featureName = featureName;\r\n this.primary = primary;\r\n this.primary_border = primary_border;\r\n this.primary_hover = primary_hover;\r\n }\r\n}\r\n","import {SQFTResourceController} from \"../SQFTResourceController\";\r\nimport {\r\n RESOURCE_TYPE,\r\n WATERFALL_OVERLAY_TYPE,\r\n WATERFALL_SHAPES_KEY,\r\n WORKSPACE_RESOURCES\r\n} from \"../../../../../constants\";\r\nimport store from \"../../../../../../../store\";\r\nimport WaterfallOverlay from \"../../../core/shapes/overlays/waterfallOverlay\";\r\nimport {addResource, changeResource, deleteResource} from \"../../../../../../../actions/sqftResourceFunctions\";\r\nimport workspace from \"../../../core/workspace\";\r\nimport {WaterfallSegmentController} from \"./WaterfallSegmentController\";\r\n\r\nexport class WaterfallController extends SQFTResourceController {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.resourceName = WORKSPACE_RESOURCES.waterfall;\r\n this.segmentController = new WaterfallSegmentController(this);\r\n }\r\n\r\n createWaterfallOverlay = (line, waterfallData = null) => {\r\n const reduxState = store.getState();\r\n const waterfallSectionsData = reduxState.sqftResourceState.waterfallSectionsData;\r\n const waterfallOverlay = new WaterfallOverlay(line, waterfallSectionsData.length + 1, waterfallData);\r\n\r\n this.addResource(waterfallOverlay);\r\n this.addWaterfallToStore(waterfallOverlay);\r\n\r\n return waterfallOverlay\r\n }\r\n\r\n createPeninsulaUnderwrapOverlay = (line, waterfallData = null) => {\r\n const reduxState = store.getState();\r\n const waterfallSectionsData = reduxState.sqftResourceState.waterfallSectionsData;\r\n\r\n const sectionIndex = waterfallSectionsData.length + 1;\r\n const waterfallOverlay = new WaterfallOverlay(line, sectionIndex, waterfallData, WATERFALL_OVERLAY_TYPE.peninsulaUnderwrap);\r\n\r\n this.addResource(waterfallOverlay);\r\n this.addWaterfallToStore(waterfallOverlay);\r\n\r\n return waterfallOverlay\r\n }\r\n\r\n getResources = () => {\r\n return workspace[this.resourceName]\r\n }\r\n\r\n getResourceByLineId = (id) => {\r\n return workspace[this.resourceName].find(waterFallOverlay => waterFallOverlay.line.id === id);\r\n }\r\n\r\n getSegmentById = (id) => {\r\n for (const overlay of this.getResources()) {\r\n for (const segment of overlay.getSegments()) {\r\n if (segment.id === id) {\r\n return segment\r\n }\r\n }\r\n }\r\n }\r\n\r\n updateWaterfallLength = (line) => {\r\n if (line.isWithWaterfallToolEdge() || line.isWithPeninsulaUnderwrapEdge()) {\r\n const waterfallOverlay = this.getResourceByLineId(line.id);\r\n for (const waterfallOverlaySegment of waterfallOverlay.getSegments()) {\r\n if (waterfallOverlaySegment.name === WATERFALL_SHAPES_KEY.waterfall) {\r\n waterfallOverlaySegment.length = line.getLineLength();\r\n }\r\n if (waterfallOverlaySegment.name === WATERFALL_SHAPES_KEY.underlayment) {\r\n const nextLine = line.getParent().getNextLine(line);\r\n waterfallOverlaySegment.length = nextLine.getLineLength();\r\n }\r\n }\r\n this.changeWaterfallSectionInStore(waterfallOverlay.exportData());\r\n }\r\n }\r\n\r\n changeWaterfallSectionInStore = (waterfallSectionData) => {\r\n store.dispatch(changeResource(RESOURCE_TYPE.waterfallSectionsData, waterfallSectionData));\r\n }\r\n\r\n addWaterfallToStore = (waterfallOverlay) => {\r\n store.dispatch(addResource(RESOURCE_TYPE.waterfallSectionsData, waterfallOverlay.exportData()));\r\n }\r\n\r\n destroy = (waterfallOverlay) => {\r\n store.dispatch(deleteResource(RESOURCE_TYPE.waterfallSectionsData, waterfallOverlay.id));\r\n this.destroyResource(waterfallOverlay);\r\n }\r\n}\r\n","import uuid from \"uuid\";\r\nimport EventManager from \"../../../store/sqftEventManager\";\r\nimport WaterfallSegment from \"../shapeParts/models/waterfallSegment\";\r\nimport {WATERFALL_OVERLAY_TYPE, WATERFALL_SHAPES_KEY, WATERFALL_SHAPES_NAME} from \"../../../../../constants\";\r\nimport config from \"../../../store/sqftConfig\";\r\nimport {isWesternHemisphere} from \"../../../helpers/lineHelper\";\r\n\r\nexport default class WaterfallOverlay {\r\n id;\r\n sectionIndex;\r\n line;\r\n type; // WATERFALL_OVERLAY_TYPE\r\n state = {\r\n };\r\n design = {\r\n };\r\n segments = []; // array of WaterfallSegments\r\n\r\n constructor(line, sectionIndex, importData, type = WATERFALL_OVERLAY_TYPE.waterfall) {\r\n this.line = line;\r\n this.sectionIndex = sectionIndex;\r\n this.id = uuid();\r\n this.type = type;\r\n if (importData) {\r\n this.importData(importData)\r\n } else {\r\n switch (type) {\r\n case WATERFALL_OVERLAY_TYPE.peninsulaUnderwrap:\r\n this.createPeninsulaUnderwrapSections();\r\n break;\r\n case WATERFALL_OVERLAY_TYPE.waterfall:\r\n default:\r\n this.createWaterfallSections();\r\n break;\r\n }\r\n }\r\n }\r\n\r\n getSegments = () => { return this.segments; }\r\n getEnabledSegments = () => { return this.segments.filter(segment => !segment.isDisabled) }\r\n getParent = () => { return this.line; }\r\n setSegments = (value) => { this.segments = value; }\r\n addSegment = (segment) => { this.segments.push(segment); }\r\n\r\n destroy = (protect) => {\r\n if (!protect) {\r\n EventManager.removeEvent(this);\r\n this.segments.forEach((segment) => {\r\n segment.destroy();\r\n });\r\n }\r\n };\r\n\r\n initEvents = () => {\r\n };\r\n\r\n deregisterEvents = () => {\r\n EventManager.removeEvent(this);\r\n };\r\n\r\n reInitEvents = () => {\r\n this.initEvents();\r\n };\r\n\r\n export = () => {\r\n return this.exportData();\r\n }\r\n\r\n exportData = () => {\r\n return {\r\n id: this.id,\r\n lineId: this.line.id,\r\n state: this.state,\r\n type: this.type,\r\n segments: this.segments.map((segment) => {\r\n return segment.exportData()\r\n }),\r\n }\r\n };\r\n\r\n importData = (importData) => {\r\n this.state = importData.state;\r\n for (const segmentData of importData.segments) {\r\n this.addSegment(new WaterfallSegment(\r\n segmentData.key,\r\n segmentData.name,\r\n segmentData.length,\r\n segmentData.height,\r\n segmentData.thickness,\r\n this,\r\n segmentData.isDisabled\r\n ));\r\n }\r\n };\r\n\r\n createWaterfallSections = () => {\r\n const nextLine = this.line.getParent().getNextLine(this.line);\r\n const thickness = config.measureUnit === \"Imperial\" ? 1.5 : 40;\r\n const height = config.measureUnit === \"Imperial\" ? 36 : 900;\r\n const waterfallLength = config.measureUnit === \"Imperial\" ? this.line.getLineLength() : this.line.getLineLengthMm();\r\n const underlaymentLength = config.measureUnit === \"Imperial\" ? nextLine.getLineLength() : nextLine.getLineLengthMm();\r\n\r\n //place mirror shape in the slab mode\r\n const lineDirection = this.line.getLineDirectionV2();\r\n const isLineInWesternHemisphere = isWesternHemisphere(lineDirection) ;\r\n const defaultCabinetReturnLength = config.measureUnit === \"Imperial\" ? 4 : 60;\r\n const defaultOverhangReturnLength = config.measureUnit === \"Imperial\" ? 20 : 300;\r\n const cabinetReturnLength = isLineInWesternHemisphere ? defaultCabinetReturnLength : defaultOverhangReturnLength;\r\n const overhangReturnLength = isLineInWesternHemisphere ? defaultOverhangReturnLength : defaultCabinetReturnLength;\r\n\r\n const segments = [\r\n new WaterfallSegment(WATERFALL_SHAPES_KEY.waterfall, WATERFALL_SHAPES_NAME.waterfall, waterfallLength, height, thickness, this),\r\n new WaterfallSegment(WATERFALL_SHAPES_KEY.cabinetReturn, WATERFALL_SHAPES_NAME.cabinetReturn, cabinetReturnLength, height, thickness, this, true),\r\n new WaterfallSegment(WATERFALL_SHAPES_KEY.overhangReturn, WATERFALL_SHAPES_NAME.overhangReturn,overhangReturnLength, height, thickness, this, true),\r\n new WaterfallSegment(WATERFALL_SHAPES_KEY.underlayment, WATERFALL_SHAPES_NAME.underlayment, underlaymentLength, height, thickness, this, true),\r\n ];\r\n this.setSegments(segments);\r\n }\r\n\r\n createPeninsulaUnderwrapSections = () => {\r\n const segments = [\r\n new WaterfallSegment(WATERFALL_SHAPES_KEY.peninsulaUnderwrap, WATERFALL_SHAPES_NAME.peninsulaUnderwrap, this.line.getLineLength(), 36, 1.5, this, false),\r\n ];\r\n this.setSegments(segments);\r\n }\r\n\r\n getArea = () => {\r\n return this.segments.reduce((sum, segment) => sum + segment.getArea(), 0)\r\n }\r\n}\r\n","import { v4 as uuidv4 } from 'uuid';\r\nimport {WATERFALL_SHAPES_KEY} from \"../../../../../../constants\";\r\n\r\nexport default class WaterfallSegment {\r\n id;\r\n key; /* string */\r\n name; /* string */\r\n length; /* int */\r\n height; /* int */\r\n thickness; /* int */\r\n parentSection; /* object */\r\n isDisabled; /* bool */\r\n COMMON_HEIGHT = [\r\n // WATERFALL_SHAPES_KEY.waterfall,\r\n // WATERFALL_SHAPES_KEY.cabinetReturn,\r\n // WATERFALL_SHAPES_KEY.overhangReturn,\r\n ];\r\n USE_DEPTH_INSTEAD_OF_HEIGHT = [\r\n WATERFALL_SHAPES_KEY.underlayment,\r\n WATERFALL_SHAPES_KEY.peninsulaUnderwrap\r\n ];\r\n USE_LINE_LENGTH = [\r\n WATERFALL_SHAPES_KEY.underlayment,\r\n WATERFALL_SHAPES_KEY.waterfall\r\n ];\r\n\r\n constructor(key, name, length, height, thickness, parentSection, isDisabled = false) {\r\n this.id = uuidv4();\r\n this.key = key;\r\n this.name = name;\r\n this.length = length;\r\n this.height = height;\r\n this.thickness = thickness;\r\n this.parentSection = parentSection;\r\n this.isDisabled = isDisabled;\r\n }\r\n\r\n exportData = () => ({\r\n id: this.id,\r\n overlayId: this.getParent().id,\r\n key: this.key,\r\n name: this.name,\r\n height: this.height,\r\n thickness: this.thickness,\r\n length: this.length,\r\n isDisabled: this.isDisabled,\r\n })\r\n\r\n setIsDisabled = (value) => {\r\n this.isDisabled = value\r\n }\r\n\r\n getParent = () => {\r\n return this.parentSection\r\n }\r\n\r\n getArea = () => {\r\n if (this.isDisabled) {\r\n return 0\r\n }\r\n\r\n let area = 0;\r\n\r\n // this will add mitered edge area\r\n if (this.key === WATERFALL_SHAPES_KEY.overhangReturn) {\r\n area += this.height * this.thickness\r\n } else if (this.key === WATERFALL_SHAPES_KEY.waterfall) {\r\n area += (this.height * this.thickness) * 2 //we have two mitered edges from sides\r\n } else if (this.key === WATERFALL_SHAPES_KEY.cabinetReturn) {\r\n area += this.height * this.thickness\r\n }\r\n\r\n // shape area\r\n area += this.height * this.length\r\n\r\n return area\r\n }\r\n\r\n destroy = () => {\r\n\r\n }\r\n}\r\n","import {WATERFALL_SHAPES_KEY} from \"../../../../../constants\";\r\nimport SqftStore from \"../../sqftStore\";\r\nimport SlabWorkspace from \"../../../core/slab/slabWorkspace\";\r\nimport {createSlabModeWaterfallShapes} from \"../../canvasHelper\";\r\n\r\nexport class WaterfallSegmentController {\r\n\r\n constructor(parentController) {\r\n this.parentController = parentController;\r\n }\r\n\r\n updateWaterfallLength = (line) => {\r\n if (!line.isWithWaterfallToolEdge() || !line.isWithPeninsulaUnderwrapEdge()) {\r\n return\r\n }\r\n const waterfallOverlay = this.parentController.getResourceByLineId(line.id);\r\n for (const waterfallOverlaySegment of waterfallOverlay.getSegments()) {\r\n if (waterfallOverlaySegment.name === WATERFALL_SHAPES_KEY.waterfall\r\n || waterfallOverlaySegment.name === WATERFALL_SHAPES_KEY.underlayment\r\n ) {\r\n waterfallOverlaySegment.length = line.getLineLength();\r\n }\r\n }\r\n this.parentController.changeWaterfallSectionInStore(waterfallOverlay.exportData());\r\n }\r\n\r\n changeSegmentLength = (segmentId, newValue) => {\r\n const segment = this.parentController.getSegmentById(segmentId);\r\n const waterfallOverlay = segment.getParent();\r\n segment.length = +newValue\r\n\r\n this.parentController.changeWaterfallSectionInStore(waterfallOverlay.exportData());\r\n this.postChangeValue(waterfallOverlay.id);\r\n }\r\n\r\n changeSegmentHeight = (segmentId, newValue) => {\r\n const updatedSegment = this.parentController.getSegmentById(segmentId);\r\n const waterfallOverlay = updatedSegment.getParent();\r\n\r\n if (updatedSegment.COMMON_HEIGHT.includes(updatedSegment.name)) {\r\n for (const waterfallOverlaySegment of waterfallOverlay.getSegments()) {\r\n if (waterfallOverlaySegment.COMMON_HEIGHT.includes(waterfallOverlaySegment.name)) {\r\n waterfallOverlaySegment.height = +newValue;\r\n }\r\n }\r\n } else {\r\n updatedSegment.height = +newValue;\r\n }\r\n\r\n this.parentController.changeWaterfallSectionInStore(waterfallOverlay.exportData());\r\n this.postChangeValue(waterfallOverlay.id);\r\n }\r\n\r\n changeSegmentThickness = (segmentId, newValue) => {\r\n const segment = this.parentController.getSegmentById(segmentId);\r\n const waterfallOverlay = segment.getParent();\r\n segment.thickness = +newValue\r\n\r\n this.parentController.changeWaterfallSectionInStore(waterfallOverlay.exportData());\r\n this.postChangeValue(waterfallOverlay.id);\r\n }\r\n\r\n changeSegmentIsDisabled = (segmentId, newValue) => {\r\n const waterfallSegment = this.parentController.getSegmentById(segmentId);\r\n const waterfallOverlay = waterfallSegment.getParent();\r\n waterfallSegment.setIsDisabled(newValue);\r\n\r\n this.parentController.changeWaterfallSectionInStore(waterfallOverlay.exportData());\r\n this.postChangeValue(waterfallOverlay.id);\r\n }\r\n\r\n postChangeValue = (overlayId) => {\r\n // remove all slab shapes\r\n const overlay = this.parentController.getResourceById(overlayId);\r\n SlabWorkspace.slabAdditionalShapes.removeActiveBacksplashByLine(overlay.line);\r\n\r\n //reCreate Slab Shapes\r\n createSlabModeWaterfallShapes();\r\n\r\n // update calculations\r\n SqftStore.updateCalculations();\r\n }\r\n\r\n}\r\n","import {SQFTResourceController} from \"./SQFTResourceController\";\r\nimport {WORKSPACE_RESOURCES} from \"../../../../constants\";\r\n\r\nexport class RemovedFeaturesController extends SQFTResourceController {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.resourceName = WORKSPACE_RESOURCES.walls;\r\n }\r\n\r\n}\r\n\r\n","import sqftShapeManager from \"../sqftShapeManager\";\r\nimport workspace from \"../../core/workspace\";\r\nimport {WORKSPACE_RESOURCES} from \"../../../../constants\";\r\nimport {SQFTResourceController} from \"./SQFTResourceController\";\r\nimport ShapeHelper from \"../../../../helpers/shapeHelper\";\r\nimport workspaceControllers from \"../workspaceControllers\";\r\nimport store from \"../../../../../../store\";\r\nimport sqftShape from \"../../core/shapes/sqftShape\";\r\nimport MovableImage from \"../../core/shapes/movableImage\";\r\n//import sqftShapeIntersectionsManager from \"../sqftShapeIntersectionsManager\";\r\n\r\nexport class SnappedShapeGroupsController extends SQFTResourceController {\r\n //snappedShapeGroups = [];\r\n\r\n constructor(props) {\r\n super(props);\r\n this.resourceName = WORKSPACE_RESOURCES.snappedShapeGroups;\r\n }\r\n\r\n addNewSnappedShapeGroupNumber = () => {\r\n const snappedShapeGroups = this.getResources();\r\n const newNumber = snappedShapeGroups.length > 0\r\n ? snappedShapeGroups[snappedShapeGroups.length - 1] + 1\r\n : 0;\r\n this.addResource(newNumber);\r\n\r\n return newNumber\r\n }\r\n\r\n setSameSnappedShapesGroup = (snappedShape, snappedWithShape) => {\r\n const snappedShapeGroup = snappedShape.shapeAbsolute.getSnappedShapeGroup();\r\n const snappedWithShapeGroup = snappedWithShape.shapeAbsolute.getSnappedShapeGroup();\r\n if (snappedWithShapeGroup !== null) {\r\n snappedShape.shapeAbsolute.setSnappedShapeGroup(snappedWithShapeGroup);\r\n } else if (snappedShapeGroup !== null) {\r\n snappedWithShape.shapeAbsolute.setSnappedShapeGroup(snappedShapeGroup);\r\n } else {\r\n const groupNumber = this.addNewSnappedShapeGroupNumber();\r\n snappedShape.shapeAbsolute.setSnappedShapeGroup(groupNumber);\r\n snappedWithShape.shapeAbsolute.setSnappedShapeGroup(groupNumber);\r\n }\r\n }\r\n\r\n // isShapeGroupConsistsOfOnlyCabinetShapes = (snappedShapeGroup) => {\r\n // const shapes = this.getSnappedShapes(snappedShapeGroup);\r\n // return !shapes.some(shape => shape.shapeCabinet === null);\r\n // }\r\n\r\n getMeasurementPoints = (snappedShapeGroup) => {\r\n const shapes = this.getSnappedShapes(snappedShapeGroup);\r\n if (shapes.length > 0) {\r\n let shapesPoints = [];\r\n shapes.forEach(shp => {\r\n shapesPoints.push(...shp.getPointsPointField());\r\n });\r\n let pointsMinMax = sqftShapeManager.getMinMaxPoints(shapesPoints, false);\r\n\r\n //console.log(\"shapesMinMax\", pointsMinMax);\r\n\r\n return [\r\n {x: pointsMinMax.minX, y: pointsMinMax.minY},\r\n {x: pointsMinMax.maxX, y: pointsMinMax.minY},\r\n {x: pointsMinMax.maxX, y: pointsMinMax.maxY},\r\n {x: pointsMinMax.minX, y: pointsMinMax.maxY}\r\n ];\r\n }\r\n return []\r\n }\r\n\r\n getSnappedShapes = (snappedShapeGroup) => {\r\n const shapes = workspace.getShapes(true);\r\n return shapes.filter(shp => {\r\n return !!(shp.shapeAbsolute && (shp.shapeAbsolute.getSnappedShapeGroup() === snappedShapeGroup))\r\n || !!(shp.shapeSlab && shp.shapeSlab.shapeAbsolute && (shp.shapeSlab.shapeAbsolute.getSnappedShapeGroup() === snappedShapeGroup))\r\n })\r\n }\r\n\r\n // Updates the groups of snapped shapes in the workspace\r\n updateShapesSnappedGroups = (shouldUpdateAbsolutePos = false) => {\r\n // Sort shapes by their position\r\n const shapes = workspace.getShapes(true)\r\n .filter(shp => shp instanceof MovableImage || shp instanceof sqftShape)\r\n .sort((a, b) => {\r\n let aPos = a.getPosition();\r\n let bPos = b.getPosition();\r\n return aPos.x - bPos.x || aPos.y - bPos.y;\r\n });\r\n //const shapesPosition = shapes.map(shp => {return {id: shp.id, ...shp.getPosition()}});\r\n //sqftShapeIntersectionsManager.logSnappedShapeGroups();\r\n //console.log(\"shapesPosition\", shapesPosition);\r\n const visitedShapes = new Set(); // To keep track of already processed shapes\r\n\r\n this.resetShapesSnappedGroups();\r\n\r\n for (const shape of shapes) {\r\n if ((shape instanceof sqftShape || shape instanceof MovableImage) && !visitedShapes.has(shape)) {\r\n this.updateGroupForShapeAndConnected(shape, visitedShapes, shouldUpdateAbsolutePos);\r\n }\r\n }\r\n\r\n //sqftShapeIntersectionsManager.logSnappedShapeGroups();\r\n }\r\n\r\n // Updates the groups of snapped shapes in the workspace\r\n resetShapesSnappedGroups = () => {\r\n const isShowSlabTool = store.getState().sqftSlabState.isShowSlabTool;\r\n const shapes = workspace.getShapes(true);\r\n\r\n for (const shape of shapes) {\r\n if (shape instanceof sqftShape) {\r\n const shapeAbsolute = isShowSlabTool ? shape.shapeSlab.shapeAbsolute : shape.shapeAbsolute;\r\n this.resetShapeSnappedGroup(shapeAbsolute);\r\n } else if (shape instanceof MovableImage) {\r\n this.resetShapeSnappedGroup(shape.shapeAbsolute);\r\n }\r\n }\r\n }\r\n\r\n // Updates the groups of snapped shapes in the workspace\r\n resetShapeSnappedGroup = (shapeAbsolute) => {\r\n shapeAbsolute.setSnappedWithShape(null);\r\n shapeAbsolute.setSnappedShapeGroup(null);\r\n }\r\n\r\n // Recursive function to update groups for a shape and all connected shapes\r\n updateGroupForShapeAndConnected = (shape, visitedShapes, shouldUpdateAbsolutePos) => {\r\n visitedShapes.add(shape);\r\n const connectedShapes = this.updateShapeSnappedGroup(shape, shouldUpdateAbsolutePos); // Update group for the current shape\r\n\r\n //console.log(\"shape id\", shape.id);\r\n //console.log(\"shape shapeSlab.shapeAbsolute.getSnappedShapeGroup()\", shape.shapeSlab.shapeAbsolute.getSnappedShapeGroup());\r\n // if (connectedShapes[0]) {\r\n // console.log(\"connectedShapes 0 id\", connectedShapes[0].id);\r\n // console.log(\"shape shapeSlab.shapeAbsolute.getSnappedShapeGroup()\", connectedShapes[0].shapeSlab.shapeAbsolute.getSnappedShapeGroup());\r\n // }\r\n // if (connectedShapes[1]) {\r\n // console.log(\"connectedShapes 1 id\", connectedShapes[1].id);\r\n // console.log(\"shape shapeSlab.shapeAbsolute.getSnappedShapeGroup()\", connectedShapes[1].shapeSlab.shapeAbsolute.getSnappedShapeGroup());\r\n // }\r\n //debugger // eslint-disable-line no-debugger\r\n\r\n // Retrieve connected shapes (this logic might vary based on your application)\r\n //const connectedShapes = ShapeHelper.getConnectedShapes(shape);\r\n\r\n for (const connectedShape of connectedShapes) {\r\n if (!visitedShapes.has(connectedShape)) {\r\n this.updateGroupForShapeAndConnected(connectedShape, visitedShapes);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Update absolute shape position in regular or in slab mode. Also updates snapped shape group.\r\n * @param shape\r\n * @param shouldUpdateAbsolutePos\r\n * @return {*[]}\r\n */\r\n updateShapeSnappedGroup = (shape, shouldUpdateAbsolutePos) => {\r\n let isShowSlabTool = store.getState().sqftSlabState.isShowSlabTool;\r\n let snapPossibilitiesToShapes = [];\r\n let snapPossibilitiesToImages = [];\r\n let snapPossibilitiesToWalls = [];\r\n let shapeAbsolute;\r\n let pos;\r\n\r\n if (shape instanceof sqftShape) {\r\n shapeAbsolute = isShowSlabTool ? shape.shapeSlab.shapeAbsolute : shape.shapeAbsolute;\r\n pos = isShowSlabTool ? shape.slabPos : shape.pos;\r\n } else if (shape instanceof MovableImage) {\r\n shapeAbsolute = shape.shapeAbsolute;\r\n pos = shape.pos;\r\n }\r\n\r\n if (shouldUpdateAbsolutePos) {\r\n shapeAbsolute.setAbsolutePos(null); //reset minLength for correct calculations without stacking\r\n }\r\n // shapeAbsolute.setSnappedWithShape(null);\r\n // shapeAbsolute.setSnappedShapeGroup(null);\r\n\r\n let distancesToWalls = ShapeHelper.getDistancesToWalls(shape);\r\n let distancesToShapes = ShapeHelper.getDistancesToShapes(shape);\r\n let distancesToImages = ShapeHelper.getDistancesToImages(shape);\r\n //console.log(\"distancesToWalls\", distancesToWalls);\r\n //console.log(\"distancesToShapes\", distancesToShapes);\r\n //console.log(\"distancesToImages\", distancesToImages);\r\n\r\n const itemBoundsWithSamePartId = ShapeHelper.getItemBoundsForTheSamePartIdIfExist(distancesToShapes, shape.partId);\r\n snapPossibilitiesToShapes = ShapeHelper.getSnappingPossibilities(itemBoundsWithSamePartId);\r\n if (snapPossibilitiesToShapes.length === 0) {\r\n snapPossibilitiesToShapes = ShapeHelper.getSnappingPossibilities(distancesToShapes);\r\n }\r\n //console.log(\"snapPossibilitiesToShapes\", snapPossibilitiesToShapes);\r\n snapPossibilitiesToImages = ShapeHelper.getSnappingPossibilities(distancesToImages);\r\n snapPossibilitiesToWalls = ShapeHelper.getSnappingPossibilities(distancesToWalls);\r\n //console.log(\"snapPossibilitiesToShapes\", snapPossibilitiesToShapes);\r\n\r\n //walls\r\n let [absolutePosToWalls, snappedWithWalls] = ShapeHelper.getAbsolutePosFromSnapPossibilities(snapPossibilitiesToWalls, pos);\r\n if (absolutePosToWalls) {\r\n if (shouldUpdateAbsolutePos) {\r\n shapeAbsolute.setAbsolutePos(absolutePosToWalls);\r\n }\r\n void snappedWithWalls;\r\n //snappedWithImage.shapeAbsolute.setSnappedWithImage(this);\r\n }\r\n\r\n //shapes\r\n let [absolutePosToShapes, snappedWithShape] = ShapeHelper.getAbsolutePosFromSnapPossibilities(snapPossibilitiesToShapes, pos);\r\n if (absolutePosToShapes) {\r\n if (shouldUpdateAbsolutePos) {\r\n shapeAbsolute.setAbsolutePos(absolutePosToShapes);\r\n }\r\n if (isShowSlabTool) {\r\n if (snappedWithShape.shapeSlab && snappedWithShape.shapeSlab.shapeAbsolute) {\r\n snappedWithShape.shapeSlab.shapeAbsolute.setSnappedWithShape(shape.shapeSlab);\r\n }\r\n if (shape.shapeSlab && shape.shapeSlab.shapeAbsolute) {\r\n shape.shapeSlab.shapeAbsolute.setSnappedWithShape(snappedWithShape);\r\n }\r\n } else {\r\n snappedWithShape.shapeAbsolute.setSnappedWithShape(shape);\r\n shape.shapeAbsolute.setSnappedWithShape(snappedWithShape);\r\n }\r\n\r\n // set same snapped shape group for all shapes\r\n const snappedShape = isShowSlabTool && shape.shapeSlab ? shape.shapeSlab : shape;\r\n const snappedShapeIds = Object.keys(distancesToShapes);\r\n for (const shapeId of snappedShapeIds) {\r\n const snappedShapeFromAllPossibilities = workspace.getShapeById(parseInt(shapeId));\r\n const shapeSlab = snappedShapeFromAllPossibilities.shapeSlab\r\n snappedWithShape = isShowSlabTool && shapeSlab ? shapeSlab : snappedShapeFromAllPossibilities;\r\n workspaceControllers.snappedShapeGroups.setSameSnappedShapesGroup(snappedShape, snappedWithShape);\r\n }\r\n }\r\n\r\n //images\r\n let [absolutePosToImages, snappedWithImage] = ShapeHelper.getAbsolutePosFromSnapPossibilities(snapPossibilitiesToImages, pos);\r\n if (absolutePosToImages) {\r\n if (shouldUpdateAbsolutePos) {\r\n shapeAbsolute.setAbsolutePos(absolutePosToImages);\r\n }\r\n void snappedWithImage;\r\n //snappedWithImage.shapeAbsolute.setSnappedWithImage(this);\r\n }\r\n\r\n //allSnappedPossibilities\r\n return [\r\n ...snapPossibilitiesToShapes.map(snapPossibility => snapPossibility.shape),\r\n ...snapPossibilitiesToImages.map(snapPossibility => snapPossibility.shape)\r\n ];\r\n }\r\n}\r\n","import {SQFTResourceController} from \"./SQFTResourceController\";\r\nimport {WORKSPACE_RESOURCES} from \"../../../../constants\";\r\n\r\nexport class SelectedShapesController extends SQFTResourceController {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.resourceName = WORKSPACE_RESOURCES.selectedShapes;\r\n }\r\n\r\n addShapeToSelection = (shape) => {\r\n this.addResource(shape);\r\n };\r\n\r\n removeShapeFromSelection = (shape) => {\r\n this.removeResource(shape);\r\n };\r\n\r\n clearSelection = () => {\r\n this.removeAllResources();\r\n };\r\n\r\n isShapeSelected = (shape) => {\r\n return this.getResources().includes(shape);\r\n };\r\n\r\n render = (ctx) => {\r\n void ctx\r\n // for (const ctx1 of ctx) {\r\n //\r\n // }\r\n\r\n }\r\n}\r\n\r\n","import {SQFTResourceController} from \"./SQFTResourceController\";\r\nimport {WORKSPACE_RESOURCES} from \"../../../../constants\";\r\n\r\nexport class Images3dController extends SQFTResourceController {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.resourceName = WORKSPACE_RESOURCES.images3d;\r\n }\r\n}\r\n\r\n","import {getDistanceFromPointToLine} from \"./sqftHelper\";\r\nimport {getAngleBetween3Points} from \"./shapeHelper\";\r\n\r\nexport default class FitSize {\r\n\r\n shape;\r\n line;\r\n nextLine;\r\n prevLine;\r\n outlineDistance = 0;\r\n\r\n constructor(line) {\r\n this.line = line;\r\n this.shape = line.getParent();\r\n this.nextLine = this.shape.getNextLine(line);\r\n this.prevLine = this.shape.getPrevLine(line);\r\n }\r\n\r\n isFitSize = (additionalLength) => {\r\n return [\r\n this.isFitLineLength(additionalLength),\r\n this.isFitSiblingLineCorner(additionalLength),\r\n this.isFitBumpout(additionalLength),\r\n this.isFitPontDistancesToCornerLine(additionalLength),\r\n this.isFitByAngleBetweenLines(additionalLength)\r\n ]\r\n .every(isFit => isFit)\r\n };\r\n\r\n isFitPontDistancesToCornerLine = (additionalLength) => {\r\n const prevPointToCurrentLineLength = getDistanceFromPointToLine(\r\n this.prevLine.from.x,\r\n this.prevLine.from.y,\r\n this.line.from.x,\r\n this.line.from.y,\r\n this.line.to.x,\r\n this.line.to.y,\r\n )\r\n const nextPointToCurrentLineLength = getDistanceFromPointToLine(\r\n this.line.to.x,\r\n this.line.to.y,\r\n this.prevLine.from.x,\r\n this.prevLine.from.y,\r\n this.prevLine.to.x,\r\n this.prevLine.to.y,\r\n )\r\n\r\n return [prevPointToCurrentLineLength, nextPointToCurrentLineLength].every((lineLength) => {\r\n return additionalLength + this.outlineDistance <= lineLength\r\n })\r\n }\r\n\r\n isFitLineLength = (additionalLength) => {\r\n return [this.line.getLineLength(), this.prevLine.getLineLength()].every((lineLength) => {\r\n return additionalLength <= lineLength\r\n })\r\n };\r\n\r\n isFitSiblingLineCorner = (additionalLength) => {\r\n let siblingCornerLength = 0;\r\n let cornerTotalLength = 0;\r\n\r\n if (this.nextLine.from.arcLength > 0 || this.nextLine.from.angle > 0) {\r\n siblingCornerLength = this.nextLine.from.getArcLength() || this.nextLine.from.getAngle();\r\n cornerTotalLength = +siblingCornerLength + +additionalLength;\r\n if(cornerTotalLength >= this.line.getLineLength()) {\r\n return false\r\n }\r\n }\r\n if (this.prevLine.from.arcLength > 0 || this.prevLine.from.angle > 0) {\r\n siblingCornerLength = this.prevLine.from.getArcLength() || this.prevLine.from.getAngle();\r\n cornerTotalLength = +siblingCornerLength + +additionalLength;\r\n if(cornerTotalLength >= this.prevLine.getLineLength() ) {\r\n return false\r\n }\r\n }\r\n\r\n return true\r\n };\r\n\r\n isFitBumpout = (additionalLength) => {\r\n if(this.line.isWithBumpout()){\r\n let bumpoutTextParameters = this.line.bumpoutOverlay.getBumpoutTextParameter();\r\n\r\n if(additionalLength >= bumpoutTextParameters.length4to.pointsDistance) {\r\n return false\r\n }\r\n } else if(this.prevLine.isWithBumpout()){\r\n let bumpoutTextParameters = this.prevLine.bumpoutOverlay.getBumpoutTextParameter();\r\n\r\n if(additionalLength >= bumpoutTextParameters.length4to.pointsDistance) {\r\n return false\r\n }\r\n }\r\n\r\n return true\r\n };\r\n\r\n isFitByAngleBetweenLines = (radius) => {\r\n const angle = getAngleBetween3Points(\r\n this.prevLine.from, this.line.from, this.line.to\r\n );\r\n\r\n // d = r/tan(α/2)\r\n const minDistanceNeeded = radius / Math.tan((angle / 2) * (Math.PI / 180));\r\n\r\n const prevLineLength = this.prevLine.getLineLength();\r\n const lineLength = this.line.getLineLength();\r\n\r\n return prevLineLength >= minDistanceNeeded && lineLength >= minDistanceNeeded;\r\n };\r\n}\r\n","import cloneDeep from \"lodash/cloneDeep\";\r\nimport uuid from \"uuid\";\r\n\r\nimport EventManager from \"../../../store/sqftEventManager\";\r\nimport {pnpolyArray} from \"../../../../../lib/pnpoly\";\r\nimport resizeLine, {getMaxResizeWidth} from \"./resizeLine\";\r\nimport config from \"../../../store/sqftConfig\";\r\nimport {\r\n getPointDistance,\r\n orientation,\r\n measureDistanceToInches,\r\n distanceToMillimeters,\r\n distanceToInches,\r\n getFontsize,\r\n get45CornerLegDistanceByHypotenuse,\r\n getAngleBetweenTwoPoints,\r\n getParallelPoints,\r\n getPointField,\r\n rotatePoint,\r\n mmToInches,\r\n} from \"../../../../../helpers/sqftHelper\";\r\nimport COLOR_THEMES, {COLOR} from \"../../../store/colorThemes\";\r\nimport store from \"../../../../../../../store\";\r\nimport {updateSQFTCalculations} from \"../../../../../../../actions/sqftFunctions\";\r\nimport sqftConfig from \"../../../store/sqftConfig\";\r\nimport Config from \"../../../../../../../config\";\r\nimport RenderFigures from \"../../../helpers/renderFigures\";\r\nimport {updateMiteredLength, updateShapeWaterfallLength, updateUnderlaymentLength} from \"../../../helpers/lineHelper\";\r\nimport workspace from \"../../workspace\";\r\nimport {createAdjustableInput} from \"../../../../../helpers/uiHelper\";\r\nimport {MEASURE_UNITS} from \"../../../../../constants\";\r\n\r\nexport default function() {\r\n var self = this,\r\n state = {\r\n isHovered: false,\r\n isEditInputDisplayed: false,\r\n hoveredColor: \"#FF9844\",\r\n textWidth: 0,\r\n withBumpout: false,\r\n midPoint: {\r\n x: 0,\r\n y: 0,\r\n xOffset: 0,\r\n yOffset: 0\r\n },\r\n originalLineText: '',\r\n lineTextResized: '',\r\n lineText: '',\r\n },\r\n line = null,\r\n lineType = 'edge', // by default\r\n lineTextColor = COLOR_THEMES[config.activeTheme].primary;\r\n this.id = uuid();\r\n this.isInited = false;\r\n this.design = {\r\n offsetFromLineEnd: 15\r\n }\r\n\r\n function setLine(value) { line = value; }\r\n this.getLine = () => { return line; }\r\n function getMidPoint(from, to) {\r\n return {\r\n x: from.x + (to.x - from.x)/2,\r\n y: from.y + (to.y - from.y)/2\r\n };\r\n }\r\n\r\n const isMouseOverText = (mousePos) => {\r\n const lineDirection = line.getLineDirection();\r\n const pointsArray = this.getHoveredArea();\r\n\r\n return {isHovered: pnpolyArray(pointsArray, mousePos), orientation: lineDirection.orientation};\r\n }\r\n\r\n this.getHoveredArea = () => {\r\n const lineDirection = line.getLineDirection();\r\n let pointsArray = [];\r\n //console.log(\"lineDirection.orientation\", lineDirection.orientation);\r\n switch (lineDirection.orientation) {\r\n case \"vertical\":\r\n if (lineDirection.newDirection === \"south\") {\r\n pointsArray = [\r\n [state.midPoint.x + 40, state.midPoint.y - state.textWidth / 2 - 10],\r\n [state.midPoint.x + 15, state.midPoint.y - state.textWidth / 2 - 10],\r\n [state.midPoint.x + 15, state.midPoint.y + state.textWidth / 2 - 5],\r\n [state.midPoint.x + 40, state.midPoint.y + state.textWidth / 2 - 5],\r\n ];\r\n } else if (lineDirection.newDirection === \"north\") {\r\n pointsArray = [\r\n [state.midPoint.x - 40, state.midPoint.y - state.textWidth / 2 - 10],\r\n [state.midPoint.x - 15, state.midPoint.y - state.textWidth / 2 - 10],\r\n [state.midPoint.x - 15, state.midPoint.y + state.textWidth / 2 - 5],\r\n [state.midPoint.x - 40, state.midPoint.y + state.textWidth / 2 - 5],\r\n ];\r\n }\r\n break;\r\n case \"horizontal\": {\r\n pointsArray = [\r\n [state.midPoint.x - state.textWidth / 2 - 10, state.midPoint.y - 15],\r\n [state.midPoint.x + state.textWidth / 2 + 10, state.midPoint.y - 15],\r\n [state.midPoint.x + state.textWidth / 2 + 10, state.midPoint.y + 10],\r\n [state.midPoint.x - state.textWidth / 2 - 10, state.midPoint.y + 10],\r\n ]\r\n break;\r\n }\r\n case \"northeast\":\r\n case \"northwest\":\r\n case \"southeast\":\r\n case \"southwest\":\r\n default: {\r\n let angle = getAngleBetweenTwoPoints(line.from, line.to);\r\n let pointToRotate1 = {x: state.midPoint.x - state.textWidth / 2 - 10, y: state.midPoint.y - 15};\r\n let rotatedPoint1 = rotatePoint(pointToRotate1, state.midPoint, angle);\r\n let pointToRotate2 = {x: state.midPoint.x + state.textWidth / 2 + 10, y: state.midPoint.y - 15};\r\n let rotatedPoint2 = rotatePoint(pointToRotate2, state.midPoint, angle);\r\n let pointToRotate3 = {x: state.midPoint.x + state.textWidth / 2 + 10, y: state.midPoint.y + 10};\r\n let rotatedPoint3 = rotatePoint(pointToRotate3, state.midPoint, angle);\r\n let pointToRotate4 = {x: state.midPoint.x - state.textWidth / 2 - 10, y: state.midPoint.y + 10};\r\n let rotatedPoint4 = rotatePoint(pointToRotate4, state.midPoint, angle);\r\n pointsArray = [\r\n [rotatedPoint1.x, rotatedPoint1.y],\r\n [rotatedPoint2.x, rotatedPoint2.y],\r\n [rotatedPoint3.x, rotatedPoint3.y],\r\n [rotatedPoint4.x, rotatedPoint4.y],\r\n // [state.midPoint.x - state.textWidth / 2 - 10, state.midPoint.y - 15],\r\n // [state.midPoint.x + state.textWidth / 2 + 10, state.midPoint.y - 15],\r\n // [state.midPoint.x + state.textWidth / 2 + 10, state.midPoint.y + 10],\r\n // [state.midPoint.x - state.textWidth / 2 - 10, state.midPoint.y + 10],\r\n ]\r\n break\r\n }\r\n }\r\n return pointsArray\r\n }\r\n\r\n function onMouseMove(mousePos, e) {\r\n void e;\r\n const {isHovered, orientation} = isMouseOverText(mousePos);\r\n state.isHovered = isHovered;\r\n if (state.isHovered) {\r\n EventManager.stealCursor();\r\n EventManager.setCursor((orientation === \"horizontal\") ? \"text\" : \"text-vertical\", self);\r\n } else {\r\n EventManager.resetCursor(self);\r\n }\r\n }\r\n\r\n const onMouseDown = () => {\r\n if (state.isHovered && !document.querySelector(\".line-input\")) {\r\n window.lineInputFocused = true;\r\n EventManager.stealCursor();\r\n state.isEditInputDisplayed = true;\r\n\r\n const maxLength = Math.round(getMaxResizeWidth(line) * config.getMeasureMultiplier());\r\n let initialValue;\r\n if (sqftConfig.measureUnit === MEASURE_UNITS.Imperial) {\r\n initialValue = Math.round10(self.getLineDistanceFull() * config.getMeasureMultiplier(), -6);\r\n initialValue = distanceToInches(initialValue).replace(\"\\\"\", \"\");\r\n } else if (sqftConfig.measureUnit === MEASURE_UNITS.Metric) {\r\n initialValue = Math.round10(self.getLineDistanceFull() * config.getMeasureMultiplier());\r\n }\r\n //console.log(\"initialValue\", initialValue);\r\n //const pointDistance = Math.sqrt(Math.pow(line.to.x - line.from.x, 2) + Math.pow(line.to.y - line.from.y, 2));\r\n //console.log(\"pointDistance\", pointDistance);\r\n\r\n\r\n const pos = { x: state.midPoint.x, y: state.midPoint.y };\r\n\r\n const inputWrapper = createAdjustableInput({\r\n position: pos,\r\n initialValue: initialValue.toString(),\r\n min: 1,\r\n max: maxLength,\r\n orientation: \"horizontal\",\r\n onChange: (value) => {\r\n if (sqftConfig.measureUnit === MEASURE_UNITS.Metric) {\r\n value = mmToInches(value);\r\n }\r\n setNewLineWidth(value - self.getAdditionalLineDistance())\r\n }, // Update line width on change\r\n onClose: () => {\r\n window.lineInputFocused = false;\r\n state.isEditInputDisplayed = false;\r\n },\r\n step: 1,\r\n });\r\n\r\n document.querySelector(\".sqft-main-grid\").appendChild(inputWrapper);\r\n\r\n // Focus and select input on creation\r\n const input = inputWrapper.querySelector(\".line-input-field\");\r\n input.focus();\r\n }\r\n };\r\n\r\n function setNewLineWidth(lineWidth) {\r\n const distance = getPointDistance(line.from, line.to);\r\n const diff = lineWidth - distance;\r\n const roundedDiff = Math.round10(diff, -4)\r\n //console.log(\"setNewLineWidth roundedDiff\", roundedDiff);\r\n const reduxState = store.getState();\r\n const isWallsLockMode = reduxState.sqftMenuState.isWallsLockMode;\r\n resizeLine(line, roundedDiff, isWallsLockMode);\r\n updateShapeWaterfallLength(line);\r\n updateMiteredLength(line);\r\n updateUnderlaymentLength(line);\r\n\r\n const state = store.getState();\r\n const updateCalculations = state.sqftState.updateCalculations;\r\n store.dispatch(updateSQFTCalculations(updateCalculations + 1));\r\n }\r\n function getCtxColor(ctx, lineType) {\r\n return (lineType === \"wall\")\r\n ? state.isHovered ? state.hoveredColor : ctx.fillStyle\r\n : state.isHovered ? state.hoveredColor : COLOR_THEMES[config.activeTheme].primary;\r\n }\r\n this.destroy = (protect) => {\r\n if (!protect) {\r\n EventManager.removeEvent(self);\r\n this.isInited = false\r\n }\r\n };\r\n this.import = (data) => {\r\n state = data.state;\r\n this.id = data.id\r\n };\r\n this.export = () => {\r\n return { id: this.id, state: cloneDeep(state) }\r\n };\r\n this.init = function(line) {\r\n setLine(line);\r\n this.initEvents();\r\n };\r\n this.initEvents = () => {\r\n this.isInited = true;\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_MOVE,\r\n onMouseMove,\r\n this,\r\n EventManager.priorities.SEGMENT\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_DOWN,\r\n onMouseDown,\r\n this,\r\n EventManager.priorities.SEGMENT\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.RENDER,\r\n this.render,\r\n this,\r\n EventManager.priorities.OVERLAY\r\n );\r\n };\r\n this.deregisterEvents = () => {\r\n EventManager.removeEvent(this);\r\n this.isInited = false;\r\n };\r\n this.reInitEvents = () => {\r\n if (!this.isInited) {\r\n this.initEvents();\r\n }\r\n };\r\n this.removeLineText = function () {\r\n state.originalLineText = '';\r\n lineType = 'edge'; // by default\r\n lineTextColor = COLOR_THEMES[config.activeTheme].primary;\r\n };\r\n this.renderEdgeText = (edgeName) => {\r\n state.originalLineText = edgeName;\r\n lineType = 'edge';\r\n lineTextColor = COLOR_THEMES[config.activeTheme].active;\r\n };\r\n this.renderBacksplashText = (backsplashName, type) => {\r\n //lineText = backsplashName;\r\n state.originalLineText = line.getBacksplashHeight() + sqftConfig.getMeasureUnitPostfix() +\" \" + workspace.intl.formatMessage({id: \"sqft.navigation.submenu.backsplash\"});\r\n lineType = type;\r\n lineTextColor = (type === \"wall\") ? \"#000000\" : COLOR_THEMES[config.activeTheme].primary;\r\n };\r\n this.renderWaterfallText = (name, type) => {\r\n state.originalLineText = name;\r\n lineType = type;\r\n lineTextColor = (type === \"wall\") ? \"#000000\" : COLOR_THEMES[config.activeTheme].primary;\r\n };\r\n this.getMidpoint = function () {\r\n return state.midPoint;\r\n };\r\n this.setMidpointOffset = function (xOffset, yOffset) {\r\n state.midPoint.xOffset = xOffset;\r\n state.midPoint.yOffset = yOffset;\r\n };\r\n this.getLineLength = function () {\r\n var distance = getPointDistance(line.from, line.to);\r\n\r\n return measureDistanceToInches(distance);\r\n };\r\n this.getLineLengthText = function () {\r\n let distance = this.getLineDistanceFull();\r\n\r\n return config.measureUnit === \"Metric\" ? distanceToMillimeters(distance) : distanceToInches(distance);\r\n };\r\n this.getLineDistanceFull = function () {\r\n return getPointDistance(line.from, line.to) + this.getAdditionalLineDistance();\r\n };\r\n this.getLineDistanceFullInPixels = function () {\r\n const lineLengthInPx = getPointDistance(line.calculateRenderPosition(line.from), line.calculateRenderPosition(line.to));\r\n const scale = config.scale;\r\n let additionalLineDistance = this.getAdditionalLineDistance() * scale;\r\n if (additionalLineDistance < 0) {\r\n additionalLineDistance -= this.design.offsetFromLineEnd; // add gray line margin\r\n } else if (additionalLineDistance > 0) {\r\n additionalLineDistance += this.design.offsetFromLineEnd; // add gray line margin\r\n }\r\n\r\n return lineLengthInPx + additionalLineDistance;\r\n };\r\n this.getAdditionalLineDistance = function () {\r\n let additionalDistance = 0;\r\n const prevLine = line.getParent().getPrevLine(line);\r\n if (line.to.angle > 0 || line.to.arcLength > 0) {\r\n additionalDistance -= get45CornerLegDistanceByHypotenuse(line.to.angle || line.to.arcLength);\r\n }\r\n\r\n if (prevLine.to.angle > 0 || prevLine.to.arcLength > 0 ) {\r\n additionalDistance -= get45CornerLegDistanceByHypotenuse(prevLine.to.angle || prevLine.to.arcLength);\r\n }\r\n\r\n return +additionalDistance;\r\n };\r\n\r\n this.render = function(ctx) {\r\n if (state.isEditInputDisplayed) {\r\n return;\r\n }\r\n\r\n let scale = config.scale,\r\n fontSize = getFontsize(),\r\n font = (fontSize).toString() + \"px \" + config.activeFontBold,\r\n lineDirection = line.getLineDirection(),\r\n offset = line.getOffset(),\r\n distance = this.getLineDistanceFullInPixels(),\r\n dstring = this.getLineLengthText(),\r\n midPoint = getMidPoint(line.from, line.to),\r\n orientationValue = line.getOrientation(),\r\n space,\r\n mtext,\r\n medgeText,\r\n xOffset = 0,\r\n yOffset = 0,\r\n lineCornerWidth = 0,\r\n fromPosOnField = getPointField(line.from.x, line.from.y, line),\r\n prevLine;\r\n\r\n state.lineTextResized = _.clone(state.originalLineText);\r\n const parent = line.getParent();\r\n\r\n ctx.beginPath();\r\n ctx.font = font;\r\n\r\n mtext = ctx.measureText(dstring);\r\n medgeText = ctx.measureText(state.lineTextResized);\r\n space = ctx.measureText(' ');\r\n state.textWidth = Math.round(mtext.width * 100) / 100;\r\n\r\n let marginTotal = 0;\r\n\r\n for (let i in lineDirection.cornerMargins) {\r\n marginTotal += lineDirection.cornerMargins[i];\r\n }\r\n\r\n if (medgeText.width + ctx.measureText(dstring).width > distance) {\r\n fontSize = 14;\r\n ctx.font = \"14px \" + config.activeFontBold;\r\n mtext = ctx.measureText(dstring);\r\n medgeText = ctx.measureText(state.lineTextResized);\r\n space = ctx.measureText(' ');\r\n\r\n // Adjust text size based on distance\r\n if (distance < 20 * config.scale + marginTotal * 40) {\r\n state.lineTextResized = '';\r\n medgeText = ctx.measureText(state.lineTextResized);\r\n } else {\r\n if (state.originalLineText && (medgeText.width + ctx.measureText(dstring).width > distance - marginTotal * 40)) {\r\n while (medgeText.width && (medgeText.width + ctx.measureText(dstring).width > distance - marginTotal * 40)) {\r\n state.lineTextResized = state.lineTextResized.slice(0, -1);\r\n medgeText = ctx.measureText(state.lineTextResized);\r\n }\r\n }\r\n }\r\n }\r\n\r\n lineCornerWidth += line.get45CornerLegDistance() / 2 * scale;\r\n prevLine = parent.getPrevLine(line);\r\n lineCornerWidth -= prevLine.get45CornerLegDistance() / 2 * scale;\r\n\r\n midPoint.y = midPoint.y * scale + offset.y;\r\n midPoint.x = midPoint.x * scale + offset.x;\r\n ctx.textAlign = \"center\";\r\n //midPoint.y += fontSize / 2;\r\n // ctx.fillStyle = \"rgba(255,255,255,0)\";\r\n // ctx.fillRect(midPoint.x - tLen/2 - 4, midPoint.y - (fontSize), tLen + 4, fontSize + 4);\r\n ctx.beginPath();\r\n ctx.fillStyle = state.isHovered\r\n ? state.hoveredColor\r\n : (lineType === \"wall\") ? \"#000000\" : COLOR_THEMES[config.activeTheme].primary;\r\n\r\n let marginFrom = 0,\r\n marginTo = 0;\r\n\r\n switch (lineDirection.orientation) {\r\n case \"horizontal\": {\r\n if (lineDirection.newDirection === \"east\") {\r\n midPoint.x -= lineCornerWidth;\r\n marginFrom = (lineDirection.cornerMargins.fromLeft) ? marginFrom + 9 : marginFrom;\r\n marginTo = (lineDirection.cornerMargins.fromRight) ? marginTo + 9 : marginTo;\r\n } else if (lineDirection.newDirection === \"west\") {\r\n midPoint.x += lineCornerWidth;\r\n marginFrom = (lineDirection.cornerMargins.fromRight) ? marginFrom + 9 : marginFrom;\r\n marginTo = (lineDirection.cornerMargins.fromLeft) ? marginTo + 9 : marginTo;\r\n }\r\n yOffset = (lineDirection.newDirection === \"west\" ? 33 : -20) + (state.midPoint.yOffset * scale);\r\n if (state.lineTextResized) {\r\n ctx.fillStyle = lineTextColor;\r\n ctx.wrapText(state.lineTextResized, midPoint.x - mtext.width / 2 - marginFrom + marginTo, midPoint.y + yOffset, medgeText, fontSize);\r\n ctx.fillStyle = getCtxColor(ctx, lineType);\r\n state.midPoint.x = midPoint.x + medgeText.width / 2 + space.width - marginFrom + marginTo;\r\n state.midPoint.y = midPoint.y + yOffset;\r\n } else {\r\n state.midPoint.x = midPoint.x - marginFrom + marginTo;\r\n state.midPoint.y = midPoint.y + yOffset;\r\n }\r\n ctx.wrapText(dstring, state.midPoint.x, state.midPoint.y, mtext, fontSize);\r\n break;\r\n }\r\n case \"vertical\": {\r\n if (lineDirection.newDirection === \"south\") {\r\n marginFrom = (lineDirection.cornerMargins.fromTop) ? marginFrom + 9 : marginFrom;\r\n marginTo = (lineDirection.cornerMargins.fromBottom) ? marginTo + 9 : marginTo;\r\n midPoint.y -= lineCornerWidth;\r\n } else if (lineDirection.newDirection === \"north\") {\r\n marginTo = (lineDirection.cornerMargins.fromTop) ? marginTo + 9 : marginTo;\r\n marginFrom = (lineDirection.cornerMargins.fromBottom) ? marginFrom + 9 : marginFrom;\r\n midPoint.y += lineCornerWidth;\r\n }\r\n xOffset += state.midPoint.xOffset * scale;\r\n state.midPoint.x = midPoint.x + xOffset;\r\n state.midPoint.y = midPoint.y + yOffset\r\n ? lineDirection.newDirection === \"south\"\r\n ? midPoint.y + medgeText.width / 2 + space.width\r\n : midPoint.y - medgeText.width / 2 + space.width\r\n : midPoint.y;\r\n ctx.save();\r\n ctx.translate(\r\n lineDirection.newDirection === \"south\" ? midPoint.x + xOffset : midPoint.x + xOffset,\r\n lineDirection.newDirection === \"south\" ? midPoint.y - 5 : midPoint.y - 10\r\n );\r\n ctx.rotate(lineDirection.newDirection === \"south\" ? Math.PI / 2 : -Math.PI / 2);\r\n if (state.lineTextResized) {\r\n ctx.fillStyle = lineTextColor;\r\n ctx.wrapText(state.lineTextResized, 0 - mtext.width / 2 + marginFrom - marginTo, -fontSize, medgeText, fontSize);\r\n ctx.fillStyle = getCtxColor(ctx, lineType);\r\n ctx.wrapText(dstring, 0 + medgeText.width / 2 + space.width + marginFrom - marginTo, -fontSize - yOffset, mtext, fontSize);\r\n } else {\r\n ctx.wrapText(dstring, 0 + marginFrom - marginTo, -fontSize, mtext, fontSize);\r\n }\r\n break;\r\n }\r\n case \"NORTHWEST\":\r\n case \"NORTHEAST\":\r\n case \"SOUTHWEST\":\r\n case \"SOUTHEAST\": {\r\n ctx.save();\r\n if (state.lineTextResized) {\r\n dstring = state.lineTextResized + ' ' + dstring;\r\n }\r\n //this.renderFrameBorder(ctx, dstring, fontSize, midPoint, orientationValue);\r\n const [parallelPoint1] = getParallelPoints(fromPosOnField, midPoint, -30);\r\n state.midPoint.x = parallelPoint1.x;\r\n state.midPoint.y = parallelPoint1.y;\r\n this.renderText(ctx, dstring, state.midPoint, fontSize, orientationValue);\r\n break;\r\n }\r\n default:\r\n break;\r\n }\r\n\r\n ctx.restore();\r\n\r\n if (Config.isDevMode()) {\r\n this.renderHoveredArea(ctx);\r\n }\r\n };\r\n\r\n this.renderHoveredArea = (ctx) => {\r\n //console.log(\"state.midPoint.\", state.midPoint);\r\n const hoveredArea = this.getHoveredArea();\r\n ctx.beginPath();\r\n ctx.moveTo(hoveredArea[0][0], hoveredArea[0][1]);\r\n ctx.lineTo(hoveredArea[1][0], hoveredArea[1][1]);\r\n ctx.lineTo(hoveredArea[2][0], hoveredArea[2][1]);\r\n ctx.lineTo(hoveredArea[3][0], hoveredArea[3][1]);\r\n ctx.lineTo(hoveredArea[0][0], hoveredArea[0][1]);\r\n ctx.lineWidth = 2;\r\n ctx.strokeStyle = 'rgba(0, 0, 0, 0.5)';\r\n ctx.stroke();\r\n ctx.closePath();\r\n }\r\n\r\n this.getFrameBorderPosition = (ctx, pos, value, fontHeight, orientationValue) => {\r\n const mText = ctx.measureText(value);\r\n let position = {\r\n x: pos.x,\r\n y: pos.y\r\n };\r\n\r\n switch (orientationValue) {\r\n case orientation.HORIZONTAL: {\r\n break;\r\n }\r\n case orientation.VERTICAL: {\r\n break;\r\n }\r\n case orientation.NORTHWEST: {\r\n position = {\r\n x: pos.x - mText.width,\r\n y: pos.y - this.design.offsetFromLineEnd\r\n };\r\n break;\r\n }\r\n case orientation.NORTHEAST: {\r\n position = {\r\n x: pos.x - mText.width,\r\n y: pos.y - this.design.offsetFromLineEnd\r\n };\r\n break;\r\n }\r\n case orientation.SOUTHWEST: {\r\n\r\n break;\r\n }\r\n case orientation.SOUTHEAST: {\r\n\r\n break;\r\n }\r\n default:\r\n break;\r\n }\r\n return position\r\n }\r\n\r\n this.renderFrameBorder = (ctx, value, fontHeight, pos, orientationValue) => {\r\n ctx.beginPath();\r\n const mText = ctx.measureText(value);\r\n ctx.strokeStyle = COLOR_THEMES[sqftConfig.activeTheme].primary;\r\n ctx.lineWidth = 2;\r\n ctx.fillStyle = COLOR.white\r\n\r\n const angle = getAngleBetweenTwoPoints(line.from, line.to);\r\n let position = this.getFrameBorderPosition(ctx, pos, value, fontHeight, orientationValue);\r\n\r\n ctx.save();\r\n ctx.translate(\r\n position.x,\r\n position.y,\r\n );\r\n ctx.rotate(angle * (Math.PI / 180));\r\n RenderFigures.roundedRect(ctx,\r\n 0, // absolute pos: //pos.x - mText.width / 1.25 / sqftConfig.scale * sqftConfig.defaultScale,\r\n 0, // absolute pos: //pos.y - fontHeight,\r\n mText.width * 1.5 + sqftConfig.scale / sqftConfig.defaultScale,\r\n fontHeight + 6,\r\n 5,\r\n true,\r\n true\r\n );\r\n ctx.restore();\r\n ctx.closePath();\r\n }\r\n\r\n this.renderText = (ctx, value, pos, fontHeight, orientationValue) => {\r\n const //scale = sqftConfig.scale,\r\n font = fontHeight + \"px \" + config.activeFontBold,\r\n mText = ctx.measureText(value);\r\n\r\n //let position = this.getTextPosition(ctx, pos, value, fontHeight, orientationValue);\r\n\r\n ctx.beginPath();\r\n ctx.font = font;\r\n ctx.textAlign = \"center\";\r\n ctx.fillStyle = getCtxColor(ctx, lineType);\r\n\r\n let angle = getAngleBetweenTwoPoints(line.from, line.to);\r\n //this will help to rotate upside down text\r\n if ([orientation.NORTHWEST, orientation.SOUTHWEST].indexOf(orientationValue) !== -1) {\r\n angle += 180;\r\n }\r\n ctx.save();\r\n //RenderFigures.renderCircle(pos, 5,1, '#284da8');\r\n ctx.translate(\r\n pos.x,\r\n pos.y\r\n );\r\n ctx.rotate(angle * (Math.PI / 180));\r\n //ctx.wrapText(value, fontHeight / 2, mText.width / ( 2 * scale), mText, fontHeight);\r\n ctx.wrapText(value, 0, 0, mText, fontHeight);\r\n ctx.restore();\r\n ctx.closePath();\r\n }\r\n}\r\n","import { v4 as uuidv4 } from 'uuid';\r\nimport {\r\n distanceToInches,\r\n distanceToMillimeters, getFontsize, getFontsizeSmall, getIntersectCordsBetweenLines,\r\n getMidPoint,\r\n getPointDistance, isDisabledInPopupWithParents,\r\n measureDistanceToInches,\r\n mmToInches,\r\n orientation\r\n} from \"../../../../../helpers/sqftHelper\";\r\nimport point from \"../point\";\r\nimport shapeLine from \"../line\";\r\nimport {getMaxResizeWidth} from \"./resizeLine\";\r\nimport COLOR_THEMES from \"../../../store/colorThemes\";\r\nimport Config from \"../../../store/sqftConfig\";\r\nimport configGlobal from \"../../../store/sqftConfig\";\r\nimport EventManager from \"../../../store/sqftEventManager\";\r\nimport {pnpolyArray} from \"../../../../../lib/pnpoly\";\r\nimport workspace from \"../../workspace\";\r\nimport $ from \"jquery\";\r\nimport store from \"../../../../../../../store\";\r\nimport {updateSQFTCalculations} from \"../../../../../../../actions/sqftFunctions\";\r\nimport sqftEventManager from \"../../../store/sqftEventManager\";\r\nimport {isDisabledInPopupShouldBeHidden, MEASURE_UNITS} from \"../../../../../constants\";\r\nimport SqftStore from \"../../../store/sqftStore\";\r\nimport {renderResetSeamPopup, shouldResetSlabModePopupOnPointMoveBeDisplayed} from \"../../../canvasPopup/resetSeam\";\r\nimport {crossProduct2D} from \"../../../../../helpers/coordinatesHelper\";\r\nimport {getBumpoutFeature} from \"../../../../../helpers/featureHelper\";\r\nimport {createAdjustableInput} from \"../../../../../helpers/uiHelper\";\r\nimport sqftConfig from \"../../../store/sqftConfig\";\r\n\r\nexport default function() {\r\n var self = this,\r\n state = {\r\n mousePos: {},\r\n mouseDown: false,\r\n mouseDownPosition: null,\r\n isHoveringRect: false,\r\n isHoveringPoint: false,\r\n hoveredPoint: null,\r\n isHoveredOverText: false,\r\n hoveredText: {\r\n area:[],\r\n midPoint: {x: 0, y: 0},\r\n pointsDistance: 0,\r\n points: {point1: null, point2: null},\r\n orientation: 0\r\n },\r\n midPoint: {\r\n x: 0,\r\n y: 0,\r\n }\r\n },\r\n config = {\r\n initialSize: 30,\r\n minBumpoutSize: 1,\r\n dragPointMargin: 28,\r\n rulerMargin: 25,\r\n movePointOffset: 100,\r\n lineTextColor: COLOR_THEMES[Config.activeTheme].primary\r\n },\r\n bumpoutPoints = {\r\n point1: null,\r\n point2: null,\r\n point3: null,\r\n point4: null,\r\n dragPoint: null\r\n },\r\n bumpoutTextParameters = {\r\n lengthFrom1 : {\r\n area:[],\r\n midPoint: {x: 0, y: 0},\r\n pointsDistance: 0,\r\n points: {point1: null, point2: null},\r\n orientation: 0\r\n },\r\n length14 : {\r\n area:[],\r\n midPoint: {x: 0, y: 0},\r\n pointsDistance: 0,\r\n points: {point1: null, point2: null},\r\n orientation: 0\r\n },\r\n length34 : {\r\n area:[],\r\n midPoint: {x: 0, y: 0},\r\n pointsDistance: 0,\r\n points: {point1: null, point2: null},\r\n orientation: 0\r\n },\r\n length4to : {\r\n area:[],\r\n midPoint: {x: 0, y: 0},\r\n pointsDistance: 0,\r\n points: {point1: null, point2: null},\r\n orientation: 0\r\n },\r\n },\r\n deleteFillStyle = \"rgba(253,2,33, 0.5)\",\r\n line = null,\r\n bumpoutLines = null;\r\n\r\n this.id = uuidv4(); // sqftId (this is not attached resource id)\r\n this.featureId = null; // will be assigned on init\r\n\r\n //private property setters\r\n function setLine(value) { line = value; }\r\n function setBumpoutPoints(value) { bumpoutPoints = value; }\r\n\r\n //private functions\r\n function preparePoints() {\r\n var midPoint = getMidPoint(line.from, line.to),\r\n point1,\r\n point2,\r\n point3,\r\n point4,\r\n dragPoint,\r\n dragPointMargin,\r\n flipPoints = false;\r\n\r\n const lineDirection = line.getLineDirection();\r\n\r\n switch (lineDirection.orientation) {\r\n case \"horizontal\": {\r\n flipPoints = lineDirection.newDirection === \"west\";\r\n dragPointMargin = flipPoints ? config.dragPointMargin : -config.dragPointMargin;\r\n point1 = new point(midPoint.x - config.initialSize / 2, midPoint.y, undefined, undefined, false);\r\n point2 = new point(midPoint.x - config.initialSize / 2, midPoint.y, undefined, undefined, false);\r\n point3 = new point(midPoint.x + config.initialSize / 2, midPoint.y, undefined, undefined, false);\r\n point4 = new point(midPoint.x + config.initialSize / 2, midPoint.y, undefined, undefined, false);\r\n dragPoint = new point(midPoint.x, midPoint.y + dragPointMargin, undefined, undefined, false);\r\n\r\n break;\r\n }\r\n case \"vertical\": {\r\n flipPoints = lineDirection.newDirection === \"north\";\r\n dragPointMargin = flipPoints ? -config.dragPointMargin : config.dragPointMargin;\r\n point1 = new point(midPoint.x, midPoint.y - config.initialSize / 2, undefined, undefined, false);\r\n point2 = new point(midPoint.x, midPoint.y - config.initialSize / 2, undefined, undefined, false);\r\n point3 = new point(midPoint.x, midPoint.y + config.initialSize / 2, undefined, undefined, false);\r\n point4 = new point(midPoint.x, midPoint.y + config.initialSize / 2, undefined, undefined, false);\r\n dragPoint = new point(midPoint.x + dragPointMargin, midPoint.y, undefined, undefined, false);\r\n break;\r\n }\r\n case \"NORTHWEST\":\r\n case \"NORTHEAST\":\r\n case \"SOUTHWEST\":\r\n case \"SOUTHEAST\": {\r\n //todo rotation\r\n point1 = new point(midPoint.x, midPoint.y - bumpoutPoints.initialSize / 2, undefined, undefined, false);\r\n point4 = new point(midPoint.x, midPoint.y + bumpoutPoints.initialSize / 2, undefined, undefined, false);\r\n dragPoint = new point(midPoint.x, midPoint.y, undefined, undefined, false);\r\n\r\n break;\r\n }\r\n default:\r\n break;\r\n }\r\n\r\n setBumpoutPoints ({\r\n point1: flipPoints ? point4 : point1,\r\n point2: flipPoints ? point3 : point2,\r\n point3: flipPoints ? point2 : point3,\r\n point4: flipPoints ? point1 : point4,\r\n dragPoint: dragPoint\r\n });\r\n }\r\n\r\n function movePointInOrStop(point1, point2, axis, diff, biggestPoint, smallestPoint, stopPoint) {\r\n // stop on other bumpout move point\r\n if (point1[axis] > stopPoint[axis]) {\r\n smallestPoint = stopPoint[axis] + config.minBumpoutSize;\r\n } else {\r\n biggestPoint = stopPoint[axis] - config.minBumpoutSize;\r\n }\r\n\r\n if (point1[axis] - diff >= biggestPoint) {\r\n point1[axis] = point2[axis] = biggestPoint;\r\n } else if (point1[axis] - diff <= smallestPoint) {\r\n point1[axis] = point2[axis] = smallestPoint;\r\n } else {\r\n point1[axis] -= diff;\r\n point2[axis] -= diff;\r\n }\r\n }\r\n\r\n function movePointOutOrStop(point1, point2, axis, diff, biggestPoint, smallestPoint) {\r\n let direction = line.getLineDirection().newDirection;\r\n let dragPointMargin;\r\n let lengthMidPoint;\r\n\r\n if (point1[axis] - diff > smallestPoint && (direction === \"east\" || direction === \"north\")) {\r\n dragPointMargin = -config.dragPointMargin;\r\n point1[axis] = point2[axis] = smallestPoint;\r\n bumpoutPoints.dragPoint[axis] = smallestPoint + dragPointMargin\r\n } else if (point1[axis] - diff < biggestPoint && (direction === \"west\" || direction === \"south\")) {\r\n dragPointMargin = +config.dragPointMargin;\r\n point1[axis] = point2[axis] = biggestPoint;\r\n bumpoutPoints.dragPoint[axis] = smallestPoint + dragPointMargin\r\n } else {\r\n point1[axis] -= diff;\r\n point2[axis] -= diff;\r\n bumpoutPoints.dragPoint[axis] -= diff;\r\n lengthMidPoint = line.overlay.getMidpoint();\r\n line.overlay.setMidpointOffset(lengthMidPoint.xOffset - diff, lengthMidPoint.yOffset - diff);\r\n }\r\n }\r\n\r\n function move23Point(point1, point2, axis, diff) {\r\n // Check for intersection with all lines in the parent shape\r\n point1[axis] -= diff;\r\n point2[axis] -= diff;\r\n let intersects = line.getParent().getLines().some(parentLine => {\r\n // Don't check against itself\r\n if (parentLine === line) return false;\r\n\r\n // Check if bumpoutPoints {from: point1, to: point2} line would intersect this parent line\r\n return getIntersectCordsBetweenLines(\r\n { x: parentLine.from.x, y: parentLine.from.y },\r\n { x: parentLine.to.x, y: parentLine.to.y },\r\n { x: bumpoutPoints.point1.x, y: bumpoutPoints.point1.y },\r\n { x: bumpoutPoints.point2.x, y: bumpoutPoints.point2.y }\r\n );\r\n });\r\n\r\n // Only move points if no intersection detected\r\n if (!intersects) {\r\n let lengthMidPoint = line.overlay.getMidpoint();\r\n bumpoutPoints.dragPoint[axis] -= diff;\r\n line.overlay.setMidpointOffset(lengthMidPoint.xOffset - diff, lengthMidPoint.yOffset - diff);\r\n } else {\r\n // rollback points if intersection was found\r\n point1[axis] += diff;\r\n point2[axis] += diff;\r\n }\r\n }\r\n\r\n function getMousePosPointDiff(diff, point, mousePos, sameOrientation = false) {\r\n if (configGlobal.measureUnit === \"Metric\") {\r\n var offset = 0;\r\n switch(line.getOrientation()) {\r\n case orientation.HORIZONTAL:\r\n offset = sameOrientation ? mousePos.x - point.getPointField().x : mousePos.y - point.getPointField().y;\r\n break;\r\n case orientation.VERTICAL:\r\n offset = sameOrientation? mousePos.y - point.getPointField().y : mousePos.x - point.getPointField().x;\r\n break;\r\n case orientation.NORTHWEST:\r\n case orientation.SOUTHEAST:\r\n break;\r\n case orientation.NORTHEAST:\r\n case orientation.SOUTHWEST:\r\n break;\r\n }\r\n\r\n if (-config.movePointOffset < offset && offset < config.movePointOffset) {\r\n diff = diff / configGlobal.millimetersMultiplier;\r\n }\r\n }\r\n\r\n return diff\r\n }\r\n\r\n //public property getters\r\n\r\n this.getParent = () => { return line; };\r\n this.getGrandParent = () => {\r\n const parent = this.getParent();\r\n if (parent && parent.getParent) {\r\n return parent.getParent();\r\n }\r\n return null\r\n };\r\n this.getBumpoutPoints = function() { return bumpoutPoints; };\r\n this.getBumpoutLines = () => {\r\n if (bumpoutLines) {\r\n return bumpoutLines\r\n }\r\n return this.createBumpoutLines();\r\n };\r\n this.createBumpoutLines = () => {\r\n const points = this.getBumpoutPoints();\r\n bumpoutLines = [\r\n new shapeLine(line.from, points.point1, line.getParent()),\r\n new shapeLine(points.point1, points.point2, line.getParent()),\r\n new shapeLine(points.point2, points.point3, line.getParent()),\r\n new shapeLine(points.point3, points.point4, line.getParent()),\r\n new shapeLine(points.point4, line.to, line.getParent()),\r\n ];\r\n\r\n return bumpoutLines\r\n };\r\n this.getBumpoutPointCords = function() {\r\n let bumpoutPointsCords = [];\r\n for (const bumpoutPointsKey in bumpoutPoints) {\r\n if (bumpoutPointsKey !== 'dragPoint') {\r\n bumpoutPointsCords.push(bumpoutPoints[bumpoutPointsKey]);\r\n }\r\n }\r\n return bumpoutPointsCords\r\n };\r\n this.getBumpoutTextParameter = function() { return bumpoutTextParameters; };\r\n\r\n this.destroy = function(protect) {\r\n if (!protect) {\r\n EventManager.removeEvent(self);\r\n }\r\n const reduxState = store.getState();\r\n const updateCalculations = reduxState.sqftState.updateCalculations;\r\n store.dispatch(updateSQFTCalculations(updateCalculations + 1));\r\n };\r\n\r\n this.init = (line, importPoints = null, featureId = null) => {\r\n setLine(line);\r\n if (!importPoints) {\r\n preparePoints();\r\n }\r\n this.featureId = featureId\r\n if (!featureId) {\r\n const bumpoutFeature = getBumpoutFeature();\r\n const isFeatureExist = Array.isArray(bumpoutFeature)\r\n && bumpoutFeature.length\r\n && bumpoutFeature[0].part\r\n && bumpoutFeature[0].part.dbFeature\r\n\r\n this.featureId = isFeatureExist ? bumpoutFeature[0].part.dbFeature.id : null;\r\n }\r\n this.initEvents();\r\n\r\n //points\r\n bumpoutPoints.point1.init(self);\r\n bumpoutPoints.point1.layout = 'white-circle';\r\n\r\n bumpoutPoints.point2.init(self);\r\n bumpoutPoints.point2.layout = 'blank';\r\n\r\n bumpoutPoints.point3.init(self);\r\n bumpoutPoints.point3.layout = 'blank';\r\n\r\n bumpoutPoints.point4.init(self);\r\n bumpoutPoints.point4.layout = 'white-circle';\r\n\r\n bumpoutPoints.dragPoint.init(self);\r\n bumpoutPoints.dragPoint.layout = 'arrow-circle';\r\n\r\n // set line overlay length offset\r\n if (!importPoints) {\r\n var xOffset = 0;\r\n var yOffset = 0;\r\n var lineDirection = line.getLineDirection();\r\n switch (lineDirection.orientation) {\r\n case \"horizontal\": {\r\n yOffset = (lineDirection.newDirection === \"west\" ? config.dragPointMargin - 15 : -config.dragPointMargin + 15);\r\n break;\r\n }\r\n case \"vertical\": {\r\n xOffset = (lineDirection.newDirection === \"south\" ? config.dragPointMargin - 15 : -config.dragPointMargin + 15);\r\n break;\r\n }\r\n // todo rotation\r\n case \"NORTHWEST\": { break;}\r\n case \"NORTHEAST\": { break;}\r\n case \"SOUTHWEST\": { break;}\r\n case \"SOUTHEAST\": { break;}\r\n default:\r\n break;\r\n }\r\n line.overlay.setMidpointOffset(xOffset, yOffset)\r\n }\r\n\r\n // todo fix bumpout rotation and remove this\r\n $('.button--angle').addClass('button--disabled');\r\n /////////////////////////////////////////\r\n };\r\n this.initEvents = () => {\r\n EventManager.addEvent(\r\n EventManager.events.RENDER,\r\n self.render,\r\n self,\r\n EventManager.priorities.SEGMENT\r\n );\r\n //todo priority\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_MOVE,\r\n onMouseMove,\r\n self,\r\n EventManager.priorities.SEGMENT\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_DOWN,\r\n onMouseDown,\r\n self,\r\n EventManager.priorities.SEGMENT\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_UP,\r\n onMouseUp,\r\n self,\r\n EventManager.priorities.SEGMENT\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_LEAVE,\r\n onMouseLeave,\r\n self,\r\n EventManager.priorities.OVERALL\r\n );\r\n }\r\n this.deregisterEvents = () => {\r\n sqftEventManager.removeEvent(this);\r\n this.isHidden = true;\r\n for (let i = 0; i < bumpoutPoints.length; i++) {\r\n bumpoutPoints[i].deregisterEvents();\r\n }\r\n };\r\n this.reInitEvents = () => {\r\n this.initEvents();\r\n this.isHidden = false;\r\n for (let i = 0; i < bumpoutPoints.length; i++) {\r\n bumpoutPoints[i].reInitEvents();\r\n }\r\n };\r\n this.export = function() {\r\n return {\r\n bumpoutPoints : {\r\n point1: bumpoutPoints.point1.export(),\r\n point2: bumpoutPoints.point2.export(),\r\n point3: bumpoutPoints.point3.export(),\r\n point4: bumpoutPoints.point4.export(),\r\n dragPoint: bumpoutPoints.dragPoint.export()\r\n },\r\n overlay: {\r\n midpoint: line.overlay.getMidpoint(),\r\n id: this.id\r\n }\r\n }\r\n };\r\n this.import = (line, bumpoutData) => {\r\n for (let bumpoutPoint in bumpoutData.bumpoutPoints) {\r\n bumpoutPoints[bumpoutPoint] = new point();\r\n bumpoutPoints[bumpoutPoint].import(bumpoutData.bumpoutPoints[bumpoutPoint])\r\n }\r\n this.init(line, bumpoutData.bumpoutPoints, bumpoutData.overlay.id);\r\n };\r\n this.getOffset = function() {\r\n return line.getOffset();\r\n };\r\n this.getBumpoutLength = function () {\r\n var bumpoutDistance = getPointDistance(bumpoutPoints.point1, bumpoutPoints.point2);\r\n\r\n return measureDistanceToInches(bumpoutDistance);\r\n };\r\n this.getBumpoutTotalHeight = function () {\r\n var bumpoutDistance = getPointDistance(bumpoutPoints.point1, bumpoutPoints.point2);\r\n\r\n return measureDistanceToInches(bumpoutDistance * 2);\r\n };\r\n this.getBumpoutTotalArea = () => {\r\n if (this.bumpoutInOrOut() === 'in') {\r\n return {\r\n inches: 0,\r\n millimeters: 0\r\n }\r\n }\r\n\r\n var lineLengthInches = line.getLineLength(),\r\n lineLengthMm = line.getLineLengthMm(),\r\n\r\n bumpoutLength = this.getBumpoutLength(),\r\n bumpoutLengthInches = line.addDecimalToLength(bumpoutLength),\r\n bumpoutLengthMM = bumpoutLength.millimeters;\r\n\r\n return {\r\n inches : lineLengthInches * bumpoutLengthInches,\r\n millimeters : lineLengthMm * bumpoutLengthMM\r\n }\r\n };\r\n\r\n this.isHoveringRect = () => { return state.isHoveringRect };\r\n\r\n this.moveBumpout = function(xDiff = 0, yDiff = 0) {\r\n for (let bumpoutPoint in bumpoutPoints ) {\r\n bumpoutPoints[bumpoutPoint].x -= xDiff;\r\n bumpoutPoints[bumpoutPoint].y -= yDiff;\r\n }\r\n };\r\n\r\n this.moveLineWithMouse = function(mousePos) {\r\n let scale = workspace.getScale();\r\n let xDiff = (state.mouseDownPosition.x - mousePos.x) / scale;\r\n let yDiff = (state.mouseDownPosition.y - mousePos.y) / scale;\r\n\r\n yDiff = getMousePosPointDiff(yDiff, bumpoutPoints.dragPoint, mousePos);\r\n xDiff = getMousePosPointDiff(xDiff, bumpoutPoints.dragPoint, mousePos);\r\n\r\n this.moveLine(xDiff, yDiff);\r\n\r\n state.mouseDownPosition.y = mousePos.y;\r\n state.mouseDownPosition.x = mousePos.x;\r\n };\r\n\r\n this.isBumpoutPointMoving = () => { return state.mouseDown};\r\n this.moveLine = function(xDiff, yDiff) {\r\n if (SqftStore.isRegularMode() && shouldResetSlabModePopupOnPointMoveBeDisplayed(this.getGrandParent())) {\r\n renderResetSeamPopup(this.getGrandParent())\r\n }\r\n\r\n var o = line.getOrientation();\r\n\r\n if (o === orientation.VERTICAL) {\r\n move23Point(bumpoutPoints.point2, bumpoutPoints.point3, 'x', xDiff);\r\n void movePointOutOrStop\r\n //movePointOutOrStop(bumpoutPoints.point2, bumpoutPoints.point3, 'x', xDiff, line.getBiggestXPoint().x, line.getSmallestXPoint().x, false);\r\n } else if (o === orientation.HORIZONTAL) {\r\n // let distance = line.getSmallestYPoint().y;\r\n // const closetParallelLineAndPoint = findClosestIntersectingPointAndLine(line, line.getParent().getLines());\r\n // if (closetParallelLineAndPoint) {\r\n // const midPoint = getMidPoint(line.from, line.to);\r\n // distance = getPointDistance(midPoint, closetParallelLineAndPoint.point);\r\n // }\r\n // movePointOutOrStop(bumpoutPoints.point2, bumpoutPoints.point3, 'y', yDiff, distance, distance, false);\r\n\r\n move23Point(bumpoutPoints.point2, bumpoutPoints.point3, 'y', yDiff);\r\n } else {\r\n //todo\r\n // const nextLine = parent.getNextLine(self);\r\n // const prevLine = parent.getPrevLine(self);\r\n // moveDiagonalLine(self, nextLine, prevLine, state.movePointDistance, yDiff, o);\r\n }\r\n\r\n const state = store.getState();\r\n const updateCalculations = state.sqftState.updateCalculations;\r\n\r\n store.dispatch(updateSQFTCalculations(updateCalculations + 1));\r\n };\r\n\r\n this.movePointWithMouse = function(mousePos, point1, point2, stopPoint) {\r\n var scale = workspace.getScale();\r\n var xDiff = (state.mouseDownPosition.x - mousePos.x) / scale;\r\n var yDiff = (state.mouseDownPosition.y - mousePos.y) / scale;\r\n\r\n yDiff = getMousePosPointDiff(yDiff, point1, mousePos, true);\r\n xDiff = getMousePosPointDiff(xDiff, point1, mousePos, true);\r\n\r\n this.movePoint(xDiff, yDiff, point1, point2, stopPoint);\r\n\r\n state.mouseDownPosition.y = mousePos.y;\r\n state.mouseDownPosition.x = mousePos.x;\r\n };\r\n\r\n this.resizeBumpoutPart = function(value, hoveredText) {\r\n let yDiff = 0,\r\n xDiff = 0,\r\n pointDistance = getPointDistance(hoveredText.points.point1, hoveredText.points.point2),\r\n lineDirection = line.getLineDirection();\r\n\r\n switch(line.getOrientation()) {\r\n case orientation.HORIZONTAL:\r\n\r\n switch (hoveredText.part) {\r\n case \"lengthFrom1\":\r\n xDiff = lineDirection.newDirection === \"west\" ? value - pointDistance: -value + pointDistance;\r\n this.movePoint(xDiff, yDiff, bumpoutPoints.point1, bumpoutPoints.point2, bumpoutPoints.point4);\r\n break;\r\n case \"length4to\":\r\n xDiff = lineDirection.newDirection === \"west\" ? -value + pointDistance : value - pointDistance;\r\n this.movePoint(xDiff, yDiff, bumpoutPoints.point3, bumpoutPoints.point4, bumpoutPoints.point1);\r\n break;\r\n case \"length14\":\r\n xDiff = lineDirection.newDirection === \"west\" ? -value + pointDistance: value - pointDistance;\r\n this.movePoint(xDiff / 2, yDiff, bumpoutPoints.point1, bumpoutPoints.point2, bumpoutPoints.point4);\r\n\r\n xDiff = lineDirection.newDirection === \"west\" ? value - pointDistance: -value + pointDistance;\r\n this.movePoint(xDiff / 2, yDiff, bumpoutPoints.point3, bumpoutPoints.point4, bumpoutPoints.point1);\r\n\r\n break;\r\n case \"length34\":\r\n pointDistance = this.bumpoutInOrOut() === \"in\" ? -pointDistance : pointDistance;\r\n yDiff = lineDirection.newDirection === \"west\" ? -value + pointDistance: value - pointDistance;\r\n this.moveLine(xDiff, yDiff);\r\n break;\r\n }\r\n break;\r\n case orientation.VERTICAL:\r\n switch (hoveredText.part) {\r\n case \"lengthFrom1\":\r\n yDiff = lineDirection.newDirection === \"south\" ? -value + pointDistance: value - pointDistance;\r\n this.movePoint(xDiff, yDiff, bumpoutPoints.point1, bumpoutPoints.point2, bumpoutPoints.point4);\r\n break;\r\n case \"length4to\":\r\n yDiff = lineDirection.newDirection === \"south\" ? value - pointDistance : -value + pointDistance;\r\n this.movePoint(xDiff, yDiff, bumpoutPoints.point3, bumpoutPoints.point4, bumpoutPoints.point1);\r\n break;\r\n case \"length14\":\r\n yDiff = lineDirection.newDirection === \"south\" ? -value + pointDistance: value - pointDistance;\r\n this.movePoint(xDiff, yDiff / 2, bumpoutPoints.point3, bumpoutPoints.point4, bumpoutPoints.point1);\r\n\r\n yDiff = lineDirection.newDirection === \"south\" ? value - pointDistance : -value + pointDistance;\r\n this.movePoint(xDiff, yDiff / 2, bumpoutPoints.point1, bumpoutPoints.point2, bumpoutPoints.point4);\r\n break;\r\n case \"length34\":\r\n pointDistance = this.bumpoutInOrOut() === \"in\" ? -pointDistance : pointDistance;\r\n xDiff = lineDirection.newDirection === \"south\" ? -value + pointDistance: value - pointDistance;\r\n this.moveLine(xDiff, yDiff);\r\n break;\r\n }\r\n break;\r\n case orientation.NORTHWEST:\r\n case orientation.SOUTHEAST:\r\n break;\r\n case orientation.NORTHEAST:\r\n case orientation.SOUTHWEST:\r\n break;\r\n }\r\n };\r\n\r\n this.movePoint = function(xDiff, yDiff, point1, point2, stopPoint) {\r\n if (SqftStore.isRegularMode() && shouldResetSlabModePopupOnPointMoveBeDisplayed(this.getGrandParent())) {\r\n renderResetSeamPopup(this.getGrandParent())\r\n }\r\n let o = line.getOrientation(),\r\n midPoint,\r\n dragPointMargin,\r\n lineDirection = line.getLineDirection(),\r\n toCornerLength = line.to.getArcLength() || line.get45CornerLegDistance(),\r\n prevLine = line.getParent().getPrevLine(line),\r\n fromCornerLength = prevLine.to.getArcLength() || prevLine.get45CornerLegDistance(),\r\n toCornerMargin = 0,\r\n fromCornerMargin = 0;\r\n\r\n if (o === orientation.VERTICAL) {\r\n midPoint = getMidPoint(bumpoutPoints.point2, bumpoutPoints.point3);\r\n dragPointMargin = lineDirection.newDirection === \"north\" ? -config.dragPointMargin : +config.dragPointMargin;\r\n bumpoutPoints.dragPoint.x = midPoint.x + dragPointMargin;\r\n bumpoutPoints.dragPoint.y = midPoint.y;\r\n toCornerMargin = lineDirection.newDirection === \"north\" ? -fromCornerLength : -toCornerLength;\r\n fromCornerMargin = lineDirection.newDirection === \"north\" ? +toCornerLength : +fromCornerLength;\r\n\r\n // stop point on overline move\r\n movePointInOrStop(\r\n point1, point2, 'y', yDiff,\r\n line.getBiggestYPoint().y + toCornerMargin,\r\n line.getSmallestYPoint().y + fromCornerMargin,\r\n stopPoint\r\n );\r\n } else if (o === orientation.HORIZONTAL) {\r\n midPoint = getMidPoint(bumpoutPoints.point2, bumpoutPoints.point3);\r\n dragPointMargin = lineDirection.newDirection === \"east\" ? -config.dragPointMargin : +config.dragPointMargin;\r\n bumpoutPoints.dragPoint.x = midPoint.x;\r\n bumpoutPoints.dragPoint.y = midPoint.y + dragPointMargin;\r\n toCornerMargin = lineDirection.newDirection === \"east\" ? -toCornerLength : -fromCornerLength;\r\n fromCornerMargin = lineDirection.newDirection === \"east\" ? +fromCornerLength : +toCornerLength;\r\n\r\n // stop point on overline move\r\n movePointInOrStop(\r\n point1, point2, 'x', xDiff,\r\n line.getBiggestXPoint().x + toCornerMargin,\r\n line.getSmallestXPoint().x + fromCornerMargin,\r\n stopPoint\r\n );\r\n } else {\r\n //todo rotation\r\n // const nextLine = parent.getNextLine(self);\r\n // const prevLine = parent.getPrevLine(self);\r\n // moveDiagonalLine(self, nextLine, prevLine, state.movePointDistance, yDiff, o);\r\n // state.mouseDownPosition = mousePos;\r\n }\r\n\r\n\r\n // self.from = lockPointToCanvas(self.from); // removed locking because of this issue http://jira.mozidev.com/browse/QC-802\r\n // self.to = lockPointToCanvas(self.to);\r\n };\r\n\r\n\r\n\r\n // Define a function to determine if the bumpout is in or out.\r\n this.bumpoutInOrOut = (pointA = line.from, pointB = line.to, dragPoint = bumpoutPoints.point2) => {\r\n // Calculate vectors.\r\n const vectorAB = { x: pointB.x - pointA.x, y: pointB.y - pointA.y };\r\n const vectorADrag = { x: dragPoint.x - pointA.x, y: dragPoint.y - pointA.y };\r\n\r\n // Calculate the cross product of vectorAB and vectorADrag.\r\n const crossProdZ = crossProduct2D(vectorAB, vectorADrag);\r\n\r\n // Determine if the bumpout is in or out based on the cross product.\r\n if (crossProdZ > 0) {\r\n // Positive Z component indicates an outward bumpout (peak).\r\n return 'in';\r\n } else {\r\n // Negative Z component indicates an inward bumpout (valley).\r\n return 'out';\r\n }\r\n }\r\n\r\n this.drawBumpoutRect = (ctx) => {\r\n var point1 = line.calculateRenderPosition(bumpoutPoints.point1),\r\n point2 = line.calculateRenderPosition(bumpoutPoints.point2),\r\n point3 = line.calculateRenderPosition(bumpoutPoints.point3),\r\n point4 = line.calculateRenderPosition(bumpoutPoints.point4);\r\n //bumpoutHeight = getPointDistance(bumpoutPoints.point1, bumpoutPoints.point2),\r\n //bumpoutLength = getPointDistance(bumpoutPoints.point1, bumpoutPoints.point4);\r\n\r\n ctx.save();\r\n ctx.beginPath();\r\n ctx.moveTo(point1.x, point1.y);\r\n ctx.lineTo(point2.x, point2.y);\r\n ctx.lineTo(point3.x, point3.y);\r\n ctx.lineTo(point4.x, point4.y);\r\n ctx.closePath();\r\n ctx.fillStyle = deleteFillStyle;\r\n ctx.stroke();\r\n ctx.fill();\r\n ctx.restore();\r\n };\r\n\r\n this.render = function(ctx) {\r\n if (isDisabledInPopupShouldBeHidden() && isDisabledInPopupWithParents(line)) {\r\n return\r\n }\r\n renderTopBlueLine(ctx);\r\n renderRuler(ctx);\r\n renderMeasurements(ctx);\r\n };\r\n\r\n //blue line between middle points\r\n function renderTopBlueLine(ctx) {\r\n var renderFrom = line.calculateRenderPosition(bumpoutPoints.point2),\r\n renderTo = line.calculateRenderPosition(bumpoutPoints.point3);\r\n\r\n ctx.beginPath();\r\n ctx.moveTo(renderFrom.x, renderFrom.y);\r\n ctx.lineTo(renderTo.x, renderTo.y);\r\n ctx.lineWidth = 8;\r\n ctx.strokeStyle = config.lineTextColor;\r\n ctx.stroke();\r\n ctx.closePath();\r\n }\r\n\r\n const renderRuler = (ctx) => {\r\n let\r\n //toCornerLength = line.to.getAngle() || line.to.getArcLength(),\r\n //prevLine = line.getParent().getPrevLine(line),\r\n //fromCornerLength = prevLine.to.getAngle() || prevLine.to.getArcLength(),\r\n lineDirection = line.getLineDirection(),\r\n renderTo = line.calculateRenderPosition(line.to),\r\n renderFrom = line.calculateRenderPosition(line.from),\r\n point1 = line.calculateRenderPosition(bumpoutPoints.point1),\r\n point4 = line.calculateRenderPosition(bumpoutPoints.point4),\r\n xMargin = 0,\r\n yMargin = 0,\r\n xOffset = 3,\r\n yOffset = 3,\r\n bumpoutXOffset = 0,\r\n bumpoutYOffset = 0,\r\n scale = configGlobal.scale,\r\n pointDistance34 = getPointDistance(bumpoutPoints.point3, bumpoutPoints.point4);\r\n\r\n switch (lineDirection.orientation) {\r\n case \"horizontal\": {\r\n yMargin = (lineDirection.newDirection === \"west\" ? config.rulerMargin : -config.rulerMargin);\r\n bumpoutYOffset = (lineDirection.newDirection === \"west\" ? pointDistance34 * scale : -(pointDistance34 * scale));\r\n // we need to change sign of bumpoutYOffset if it is bumoutIN\r\n if (this.bumpoutInOrOut(line.from, line.to, bumpoutPoints.point2) === \"in\") {\r\n bumpoutYOffset = -bumpoutYOffset\r\n }\r\n xOffset = (lineDirection.newDirection === \"west\") ? -xOffset : xOffset;\r\n yOffset = 0;\r\n break;\r\n }\r\n case \"vertical\": {\r\n xMargin = (lineDirection.newDirection === \"south\" ? config.rulerMargin: -config.rulerMargin);\r\n bumpoutXOffset = (lineDirection.newDirection === \"south\" ? pointDistance34 * scale: -(pointDistance34 * scale));\r\n // we need to change sign of bumpoutYOffset if it is bumoutIN\r\n if (this.bumpoutInOrOut(line.from, line.to, bumpoutPoints.point2) === \"in\") {\r\n bumpoutXOffset = -bumpoutXOffset\r\n }\r\n yOffset = (lineDirection.newDirection === \"south\") ? yOffset : -yOffset;\r\n xOffset = 0;\r\n break;\r\n }\r\n // todo rotation\r\n case \"NORTHWEST\": { break;}\r\n case \"NORTHEAST\": { break;}\r\n case \"SOUTHWEST\": { break;}\r\n case \"SOUTHEAST\": { break;}\r\n default:\r\n break;\r\n }\r\n\r\n ctx.beginPath();\r\n drawArrow(ctx, renderFrom.x + xMargin, renderFrom.y + yMargin, point1.x + xMargin, point1.y + yMargin);\r\n drawArrow( ctx,\r\n point1.x + xMargin + xOffset + bumpoutXOffset,\r\n point1.y + yMargin + yOffset + bumpoutYOffset,\r\n point4.x + xMargin - xOffset + bumpoutXOffset,\r\n point4.y + yMargin - yOffset + bumpoutYOffset\r\n );\r\n drawArrow(ctx, point4.x + xMargin, point4.y + yMargin, renderTo.x + xMargin, renderTo.y + yMargin);\r\n ctx.lineWidth = 1;\r\n ctx.strokeStyle = config.lineTextColor;\r\n ctx.stroke();\r\n ctx.closePath();\r\n }\r\n\r\n const renderMeasurements = (ctx) => {\r\n var scale = configGlobal.scale,\r\n fontSize = getFontsizeSmall(),\r\n font = (fontSize).toString() + \"px \" + Config.activeFontBold,\r\n lineDirection = line.getLineDirection(),\r\n lineTextColor = config.lineTextColor,\r\n xOffset = 0,\r\n yOffset = 0;\r\n\r\n ctx.beginPath();\r\n ctx.font = font;\r\n ctx.textAlign = \"center\";\r\n ctx.fillStyle = lineTextColor;\r\n\r\n //todo rotation\r\n // const rotateAnglePart = line.from.rotateAnglePart;\r\n // const rotatedAngleValue = line.from.rotateAnglePart ? line.from.rotateAnglePart.rotatedAngleValue : 0;\r\n // const parent = line.getParent();\r\n // let moveFrom, moveTo, prevLine, nextLine, prevParallelLine, nextParallelLine;\r\n // if (lineDirection.orientation !== \"horizontal\" && lineDirection.orientation !== \"vertical\") {\r\n // prevLine = parent.getPrevLine(line);\r\n // nextLine = parent.getNextLine(line);\r\n // prevParallelLine = parent.getPrevLine(prevLine);\r\n // nextParallelLine = parent.getNextLine(nextLine);\r\n // }\r\n\r\n switch (lineDirection.orientation) {\r\n case \"horizontal\": {\r\n // renderTextBetweenPoints34\r\n xOffset = (lineDirection.newDirection === \"west\" ? -45 : 45);\r\n yOffset = (lineDirection.newDirection === \"west\" ? 60 : -60);\r\n renderHorizontalText(bumpoutPoints.point3, bumpoutPoints.point4, xOffset, yOffset, fontSize, ctx, bumpoutTextParameters.length34, 'length34');\r\n\r\n //renderTextBetweenPoints14\r\n let pointDistance34 = getPointDistance(bumpoutPoints.point3, bumpoutPoints.point4);\r\n // we need to change sign of bumpoutYOffset if it is bumoutIN\r\n if (this.bumpoutInOrOut(line.from, line.to, bumpoutPoints.point2) === \"in\") {\r\n pointDistance34 = -pointDistance34\r\n }\r\n xOffset = (lineDirection.newDirection === \"west\" ? -10 : 10);\r\n yOffset = (lineDirection.newDirection === \"west\" ? 45 + (pointDistance34 * scale) : -45 - (pointDistance34 * scale));\r\n renderHorizontalText(bumpoutPoints.point1, bumpoutPoints.point4, xOffset, yOffset, fontSize, ctx, bumpoutTextParameters.length14, 'length14');\r\n\r\n // renderTextBetweenPointsFrom1\r\n xOffset = (lineDirection.newDirection === \"west\" ? 40 : -30);\r\n yOffset = (lineDirection.newDirection === \"west\" ? 45 : -45);\r\n renderHorizontalText(line.from, bumpoutPoints.point1, xOffset, yOffset, fontSize, ctx, bumpoutTextParameters.lengthFrom1, 'lengthFrom1');\r\n\r\n //renderTextBetweenPoints4To\r\n xOffset = (lineDirection.newDirection === \"west\" ? -40 : 40);\r\n yOffset = (lineDirection.newDirection === \"west\" ? 45 : -45);\r\n renderHorizontalText(bumpoutPoints.point4, line.to, xOffset, yOffset, fontSize, ctx, bumpoutTextParameters.length4to, 'length4to');\r\n\r\n //ctx.wrapText(dstring, state.midPoint.x, state.midPoint.y, medgeText, fontSize);\r\n break;\r\n }\r\n case \"vertical\": {\r\n //renderTextBetweenPoints34\r\n yOffset = (lineDirection.newDirection === \"south\" ? 25 : -25 );\r\n xOffset = (lineDirection.newDirection === \"south\" ? 80 : -80 );\r\n\r\n renderHorizontalText(bumpoutPoints.point3, bumpoutPoints.point4, xOffset, yOffset, fontSize, ctx, bumpoutTextParameters.length34, 'length34');\r\n\r\n xOffset = (lineDirection.newDirection === \"south\" ? 35 : -35);\r\n yOffset = (lineDirection.newDirection === \"south\" ? -45 : 30 );\r\n\r\n // renderTextBetweenPointsFrom1\r\n renderRotatedText(ctx, line.from, bumpoutPoints.point1, fontSize, xOffset, yOffset, bumpoutTextParameters.lengthFrom1, 'lengthFrom1');\r\n\r\n yOffset = (lineDirection.newDirection === \"south\" ? 30 : -45 );\r\n // renderTextBetweenPoints4To\r\n renderRotatedText(ctx, bumpoutPoints.point4, line.to, fontSize, xOffset, yOffset, bumpoutTextParameters.length4to, 'length4to');\r\n\r\n // renderTextBetweenPoints14\r\n let pointDistance34 = getPointDistance(bumpoutPoints.point3, bumpoutPoints.point4);\r\n // we need to change sign of bumpoutYOffset if it is bumoutIN\r\n if (this.bumpoutInOrOut(line.from, line.to, bumpoutPoints.point2) === \"in\") {\r\n pointDistance34 = -pointDistance34\r\n }\r\n xOffset = (lineDirection.newDirection === \"south\" ? 35 + (pointDistance34 * scale) : -35 - (pointDistance34 * scale));\r\n yOffset = 0;\r\n renderRotatedText(ctx, bumpoutPoints.point1, bumpoutPoints.point4, fontSize, xOffset, yOffset, bumpoutTextParameters.length14, 'length14');\r\n\r\n break;\r\n }\r\n //TODO rotation\r\n case \"NORTHWEST\": {\r\n break;\r\n }\r\n case \"NORTHEAST\": {\r\n break;\r\n }\r\n case \"SOUTHWEST\": {\r\n break;\r\n }\r\n case \"SOUTHEAST\": {\r\n break;\r\n }\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n // private functions\r\n function renderHorizontalText(point1, point2, xOffset, yOffset, fontSize, ctx, bumpoutTextParameter, part) {\r\n let scale = configGlobal.scale,\r\n midPoint = getMidPoint(point1, point2),\r\n offset = line.getOffset(),\r\n pointsDistance = getPointDistance(point1, point2),\r\n renderText = configGlobal.measureUnit === \"Metric\" ? distanceToMillimeters(pointsDistance.toString()) : distanceToInches(pointsDistance.toString()),\r\n mText = ctx.measureText(renderText);\r\n\r\n midPoint.x = midPoint.x * scale + offset.x;\r\n midPoint.y = midPoint.y * scale + offset.y + fontSize / 2;\r\n ctx.wrapText(renderText, midPoint.x + xOffset, midPoint.y + yOffset, mText, fontSize);\r\n\r\n bumpoutTextParameter.area = getTextPointsArea(midPoint.x + xOffset, midPoint.y + yOffset, mText, orientation.HORIZONTAL);\r\n bumpoutTextParameter.midPoint = {x: midPoint.x + xOffset, y: midPoint.y + yOffset};\r\n bumpoutTextParameter.pointsDistance = pointsDistance;\r\n bumpoutTextParameter.points = { point1: point1, point2: point2 };\r\n bumpoutTextParameter.part = part;\r\n bumpoutTextParameter.orientation = orientation.HORIZONTAL;\r\n }\r\n\r\n function renderRotatedText(ctx, point1, point2, fontSize, xOffset, yOffset, bumpoutTextParameter, part) {\r\n let scale = configGlobal.scale,\r\n midPoint = getMidPoint(point1, point2),\r\n offset = line.getOffset(),\r\n pointsDistance = getPointDistance(point1, point2),\r\n textToRender = configGlobal.measureUnit === \"Metric\" ? distanceToMillimeters(pointsDistance.toString()) : distanceToInches(pointsDistance.toString()),\r\n mText = ctx.measureText(textToRender),\r\n lineDirection = line.getLineDirection();\r\n\r\n midPoint.x = midPoint.x * scale + offset.x;\r\n midPoint.y = midPoint.y * scale + offset.y + fontSize / 2;\r\n\r\n ctx.save();\r\n ctx.translate(\r\n lineDirection.newDirection === \"south\" ? midPoint.x + xOffset : midPoint.x + xOffset,\r\n lineDirection.newDirection === \"south\" ? midPoint.y + yOffset : midPoint.y + yOffset\r\n );\r\n ctx.rotate(lineDirection.newDirection === \"south\" ? Math.PI / 2 : -Math.PI / 2);\r\n ctx.wrapText(textToRender, 0, 0, ctx.measureText(textToRender), fontSize);\r\n ctx.restore();\r\n\r\n bumpoutTextParameter.area = getTextPointsArea(midPoint.x + xOffset, midPoint.y + yOffset, mText, orientation.VERTICAL);\r\n bumpoutTextParameter.midPoint = {x: midPoint.x + xOffset, y: midPoint.y + yOffset};\r\n bumpoutTextParameter.pointsDistance = pointsDistance;\r\n bumpoutTextParameter.points = { point1: point1, point2: point2 };\r\n bumpoutTextParameter.part = part;\r\n bumpoutTextParameter.orientation = orientation.VERTICAL;\r\n }\r\n\r\n function drawArrow(context, fromX, fromY, toX, toY) {\r\n var headLen = 10; // length of head in pixels\r\n var dx = toX - fromX;\r\n var dy = toY - fromY;\r\n var angle = Math.atan2(dy, dx);\r\n\r\n context.moveTo(fromX, fromY);\r\n context.lineTo(toX, toY);\r\n context.lineTo(toX - headLen * Math.cos(angle - Math.PI / 6), toY - headLen * Math.sin(angle - Math.PI / 6));\r\n context.moveTo(toX, toY);\r\n context.lineTo(toX - headLen * Math.cos(angle + Math.PI / 6), toY - headLen * Math.sin(angle + Math.PI / 6));\r\n\r\n context.moveTo(fromX, fromY);\r\n context.lineTo(fromX + headLen * Math.cos(angle - Math.PI / 6), fromY + headLen * Math.sin(angle - Math.PI / 6));\r\n context.moveTo(fromX, fromY);\r\n context.lineTo(fromX + headLen * Math.cos(angle + Math.PI / 6), fromY + headLen * Math.sin(angle + Math.PI / 6));\r\n }\r\n\r\n function onMouseMove(mousePos, e) {\r\n void e;\r\n state.isHoveredOverText = false;\r\n state.isHoveringRect = false;\r\n\r\n for (const property in bumpoutTextParameters) {\r\n if (isMouseOverText(bumpoutTextParameters[property].area, mousePos)) {\r\n state.isHoveredOverText = true;\r\n state.hoveredText = bumpoutTextParameters[property];\r\n break;\r\n }\r\n }\r\n\r\n if (isMouseOverRect(mousePos)) {\r\n state.isHoveringRect = true;\r\n }\r\n\r\n if (isMouseOverPoint(mousePos, bumpoutPoints.dragPoint)) {\r\n // todo angle\r\n // if (workspace.getAllowBumpoutEdges() && !line.from.angleIsChanged && !line.to.angleIsChanged) {\r\n\r\n if (state.mouseDown) {\r\n self.moveLineWithMouse(mousePos);\r\n }\r\n EventManager.releaseStealLock(parent); //TODO Cursor\r\n EventManager.stealCursor(true, true);\r\n switch(line.getOrientation()) {\r\n case orientation.HORIZONTAL:\r\n EventManager.setCursor(\"n-resize\", self);\r\n break;\r\n case orientation.VERTICAL:\r\n EventManager.setCursor(\"e-resize\", self);\r\n break;\r\n case orientation.NORTHWEST:\r\n case orientation.SOUTHEAST:\r\n EventManager.setCursor(\"ne-resize\", self);\r\n break;\r\n case orientation.NORTHEAST:\r\n case orientation.SOUTHWEST:\r\n EventManager.setCursor(\"nw-resize\", self);\r\n break;\r\n }\r\n\r\n return state.mouseDown;\r\n\r\n\r\n // if (configGlobal.highlight.lines && state.isHoveringPoint) {\r\n // EventManager.releaseStealLock(line.parent);\r\n // EventManager.stealCursor();\r\n // return false;\r\n // }\r\n\r\n } else if (isMouseOverPoint(mousePos, bumpoutPoints.point1)) {\r\n // todo angle\r\n // if (workspace.getAllowBumpoutEdges() && !line.from.angleIsChanged && !line.to.angleIsChanged) {\r\n if (state.mouseDown) {\r\n self.movePointWithMouse(mousePos, bumpoutPoints.point1, bumpoutPoints.point2, bumpoutPoints.point4);\r\n }\r\n return state.mouseDown;\r\n\r\n } else if (isMouseOverPoint(mousePos, bumpoutPoints.point4)) {\r\n if (state.mouseDown) {\r\n self.movePointWithMouse(mousePos, bumpoutPoints.point4, bumpoutPoints.point3, bumpoutPoints.point1);\r\n }\r\n return state.mouseDown;\r\n\r\n } else if (state.isHoveredOverText) {\r\n EventManager.stealCursor();\r\n EventManager.setCursor((state.hoveredText.orientation === orientation.HORIZONTAL) ? \"text\" : \"text-vertical\", self);\r\n\r\n } else {\r\n EventManager.resetCursor(self);\r\n return false;\r\n }\r\n\r\n // if (workspace.getHoverShape() !== parent) {\r\n // state.isHoveringPoint = false;\r\n // }\r\n\r\n }\r\n\r\n function isMouseOverPoint(mousePos, point) {\r\n state.isHoveringPoint = !!point.isOverPointField();\r\n // console.log(\"point\", point.id);\r\n // console.log(\"state.hoveredPoint\", state.hoveredPoint.id);\r\n // console.log(\"mousePos\", state.isHoveringPoint);\r\n return state.isHoveringPoint || state.mouseDown && state.hoveredPoint && point.id === state.hoveredPoint.id;\r\n }\r\n\r\n function isMouseOverText(pointArea, mousePos) {\r\n return pnpolyArray(pointArea, mousePos);\r\n }\r\n\r\n function isMouseOverRect(mousePos) {\r\n let point1 = line.calculateRenderPosition(bumpoutPoints.point1),\r\n point2 = line.calculateRenderPosition(bumpoutPoints.point2),\r\n point3 = line.calculateRenderPosition(bumpoutPoints.point3),\r\n point4 = line.calculateRenderPosition(bumpoutPoints.point4);\r\n\r\n let pointArea = [\r\n [point1.x, point1.y],\r\n [point2.x, point2.y],\r\n [point3.x, point3.y],\r\n [point4.x, point4.y]\r\n ];\r\n\r\n return pnpolyArray(pointArea, mousePos);\r\n }\r\n\r\n function getTextPointsArea(x, y, mtext, textOrientation) {\r\n const lineDirection = line.getLineDirection();\r\n let pointsArray = [];\r\n if (textOrientation === orientation.HORIZONTAL) {\r\n pointsArray = [\r\n [x - Math.ceil10(mtext.width ,-2)/2 - 10, y - 15],\r\n [x + Math.ceil10(mtext.width ,-2)/2 + 10, y - 15],\r\n [x + Math.ceil10(mtext.width ,-2)/2 + 10, y + 10],\r\n [x - Math.ceil10(mtext.width ,-2)/2 - 10, y + 10],\r\n ]\r\n } else if (textOrientation === orientation.VERTICAL) {\r\n if (lineDirection.newDirection === \"south\") {\r\n pointsArray = [\r\n [x + 25, y - Math.ceil10(mtext.width ,-2)/2 - 10],\r\n [x + 5, y - Math.ceil10(mtext.width ,-2)/2 - 10],\r\n [x + 5, y + Math.ceil10(mtext.width ,-2)/2 - 5],\r\n [x + 25, y + Math.ceil10(mtext.width ,-2)/2 - 5],\r\n ];\r\n } else if (lineDirection.newDirection === \"north\") {\r\n pointsArray = [\r\n [x - 25, y - Math.ceil10(mtext.width ,-2)/2 - 10],\r\n [x - 5, y - Math.ceil10(mtext.width ,-2)/2 - 10],\r\n [x - 5, y + Math.ceil10(mtext.width ,-2)/2 + 5],\r\n [x - 25, y + Math.ceil10(mtext.width ,-2)/2 + 5],\r\n ];\r\n }\r\n } else {\r\n // debugger;//eslint-disable-line\r\n }\r\n\r\n return pointsArray;\r\n }\r\n\r\n function onMouseUp(mousePos, e) {\r\n void mousePos;\r\n void e;\r\n if (state.mouseDown) {\r\n state.mouseDown = false;\r\n state.mouseDownPosition = null;\r\n }\r\n }\r\n\r\n function onMouseDown(mousePos, e) {\r\n void e;\r\n if (state.isHoveringPoint) {\r\n state.mouseDown = true;\r\n state.mouseDownPosition = mousePos;\r\n for (const point in bumpoutPoints) {\r\n if (bumpoutPoints[point].isOverPointField(mousePos)) {\r\n state.hoveredPoint = bumpoutPoints[point];\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n if (state.isHoveredOverText && !document.querySelector(\".line-input\")) {\r\n window.lineInputFocused = true;\r\n EventManager.stealCursor();\r\n\r\n const maxLength = Math.round(getMaxResizeWidth(line) * configGlobal.getMeasureMultiplier());\r\n const fontSize = getFontsize();\r\n const parent = line.getParent();\r\n const nextLine = parent.getNextLine(line);\r\n const minValue = -nextLine.getLineDistance();\r\n const inputPosition = { x: state.hoveredText.midPoint.x, y: state.hoveredText.midPoint.y };\r\n\r\n // Set orientation and position adjustments based on line direction\r\n let inputClass = \"line-input\";\r\n if (state.hoveredText.orientation === orientation.HORIZONTAL) {\r\n inputClass = \"line-input\";\r\n } else if (state.hoveredText.orientation === orientation.VERTICAL) {\r\n const lineDirection = line.getLineDirection();\r\n if (lineDirection.newDirection === \"south\") {\r\n inputClass = \"line-input line-input--vertical-rotated\";\r\n inputPosition.x -= fontSize;\r\n } else {\r\n inputClass = \"line-input line-input--vertical\";\r\n inputPosition.x += fontSize;\r\n }\r\n }\r\n\r\n const inputValue = self.bumpoutInOrOut() === \"in\"\r\n ? -Math.round(state.hoveredText.pointsDistance * configGlobal.getMeasureMultiplier())\r\n : Math.round(state.hoveredText.pointsDistance * configGlobal.getMeasureMultiplier());\r\n\r\n const hoveredText = state.hoveredText;\r\n // Create adjustable input\r\n const inputWrapper = createAdjustableInput({\r\n position: inputPosition,\r\n initialValue: inputValue.toString(),\r\n min: minValue,\r\n max: maxLength,\r\n orientation: inputClass.includes(\"vertical\") ? \"vertical\" : \"horizontal\",\r\n onChange: (value) => {\r\n if (sqftConfig.measureUnit === MEASURE_UNITS.Metric) {\r\n value = mmToInches(value);\r\n }\r\n let scaledValue = Math.round10(value / configGlobal.getMeasureMultiplier(), -2);\r\n self.resizeBumpoutPart(scaledValue, hoveredText);\r\n },\r\n onClose: () => {\r\n window.lineInputFocused = false;\r\n EventManager.removeEvent({ name: 'lineInput' });\r\n },\r\n step: 1,\r\n });\r\n\r\n // Append the input wrapper to the DOM\r\n document.querySelector(\".sqft-main-grid\").appendChild(inputWrapper);\r\n // Focus and select input on creation\r\n const input = inputWrapper.querySelector(\".line-input-field\");\r\n input.focus();\r\n\r\n return false;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n function onMouseLeave() {\r\n state.isHoveringPoint = false;\r\n state.mouseDown = false;\r\n state.hoveredPoint = null;\r\n state.isHoveredOverText = false;\r\n state.hoveredText = {};\r\n }\r\n}\r\n","import config from \"../../../../store/sqftConfig\";\r\nimport COLOR_THEMES, {COLOR} from \"../../../../store/colorThemes\";\r\nimport {RESOURCE_ATTACHED_TO_TYPE} from \"../../../../../../constants\";\r\n\r\nexport default class Color {\r\n static getOutlineHoverStrokeStyle() {\r\n switch (config.highlight.type) {\r\n case 'edge':\r\n default:\r\n return COLOR_THEMES[config.activeTheme].active_transparent;\r\n case 'backsplash':\r\n return COLOR_THEMES[config.activeTheme].primary_hover;\r\n case 'wall':\r\n return 'rgba(0,0,0,0.5)';\r\n }\r\n }\r\n\r\n static getOutlineStrokeStyle(type) {\r\n switch (type) {\r\n case 'edge':\r\n return COLOR_THEMES[config.activeTheme].active;\r\n case 'backsplash':\r\n return COLOR_THEMES[config.activeTheme].primary;\r\n case 'wall':\r\n return '#000000';\r\n case RESOURCE_ATTACHED_TO_TYPE.end_cap:\r\n return COLOR.red;\r\n default:\r\n return COLOR_THEMES[config.activeTheme].active_transparent;\r\n }\r\n }\r\n}\r\n","class LineAttachmentsComposite {\r\n constructor() {\r\n this.children = [];\r\n }\r\n\r\n add(component) {\r\n this.children.push(component);\r\n }\r\n\r\n execute() {\r\n this.children.forEach(child => child.execute());\r\n }\r\n}\r\n\r\nexport default LineAttachmentsComposite\r\n","import {orientation} from \"../../../../helpers/sqftHelper\";\r\nimport point from \"./point\";\r\n\r\nexport const getAngle = (rotateAnglePart, angleValue) => {\r\n return (rotateAnglePart && rotateAnglePart.angleDirection === \"right\")\r\n ? (angleValue < 90) ? -angleValue : 90 - angleValue\r\n : (angleValue < 90) ? angleValue : angleValue - 90;\r\n};\r\n\r\nexport const getRotationCentrePoint = (rotateAnglePart, angleValue, bottomLine, basePoint, secondaryPoint) => {\r\n let {\r\n basePointX, basePointX2, basePointY, basePointY2, baseOldX, baseOldY, baseOldX1, baseOldY1, widthDiff, rotated90_1, rotated90_2\r\n } = rotateAnglePart.baseConfiguration;\r\n\r\n void baseOldX; void baseOldY; void baseOldX1; void baseOldY1; void rotated90_1; void rotated90_2;\r\n let rotationCenterPoint;\r\n let line;\r\n let newDirection;\r\n widthDiff = Math.round(widthDiff);\r\n\r\n if (rotateAnglePart && rotateAnglePart.shapeType === \"horseshoe\" || rotateAnglePart && rotateAnglePart.shapeType === \"wideangle\") {\r\n if(angleValue < 90) {\r\n rotationCenterPoint = {\r\n x: basePointX2,\r\n y: basePointY2\r\n };\r\n } else {\r\n if(rotateAnglePart && rotateAnglePart.angleDirection === \"right\") {\r\n line = secondaryPoint.getParent();\r\n newDirection = line.getLineDirection().newDirection;\r\n\r\n switch (line.getOrientation()) {\r\n case orientation.HORIZONTAL:{\r\n if (newDirection === \"east\") { rotationCenterPoint = { x: basePointX + widthDiff, y: basePointY }}\r\n if (newDirection === \"west\") { rotationCenterPoint = { x: basePointX - widthDiff, y: basePointY }}\r\n break;\r\n }\r\n case orientation.VERTICAL: {\r\n if (newDirection === \"north\") { rotationCenterPoint = { x: basePointX, y: basePointY - widthDiff }}\r\n if (newDirection === \"south\") { rotationCenterPoint = { x: basePointX, y: basePointY + widthDiff }}\r\n break;\r\n }\r\n default:\r\n break;\r\n }\r\n } else {\r\n line = basePoint.getParent();\r\n newDirection = line.getLineDirection().newDirection;\r\n\r\n switch (line.getOrientation()) {\r\n case orientation.HORIZONTAL:{\r\n if (newDirection === \"east\") { rotationCenterPoint = { x: basePointX + widthDiff, y: basePointY }}\r\n if (newDirection === \"west\") { rotationCenterPoint = { x: basePointX - widthDiff, y: basePointY }}\r\n break;\r\n }\r\n case orientation.VERTICAL: {\r\n if (newDirection === \"north\") { rotationCenterPoint = { x: basePointX, y: basePointY - widthDiff }}\r\n if (newDirection === \"south\") { rotationCenterPoint = { x: basePointX, y: basePointY + widthDiff }}\r\n break;\r\n }\r\n default:\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (rotationCenterPoint === undefined) {\r\n var tempLinePointFrom = new point(line.from.x, line.from.y);\r\n var tempLinePointTo = new point(line.to.x, line.to.y);\r\n tempLinePointFrom.init(bottomLine);\r\n tempLinePointFrom.layout = 'white-circle';\r\n\r\n tempLinePointTo.init(bottomLine);\r\n tempLinePointTo.layout = 'white-circle';\r\n\r\n rotationCenterPoint = getRotationCentrePointByBottomLine(rotateAnglePart, angleValue, bottomLine);\r\n }\r\n\r\n return rotationCenterPoint\r\n};\r\n\r\nexport const getRotationCentrePointByBottomLine = (rotateAnglePart, angleValue, bottomLine) => {\r\n const {\r\n basePointX, basePointX2, basePointY, basePointY2, baseOldX, baseOldY, baseOldX1, baseOldY1, widthDiff, rotated90_1, rotated90_2\r\n } = rotateAnglePart.baseConfiguration;\r\n void baseOldX; void baseOldY; void baseOldX1; void baseOldY1; void rotated90_1; void rotated90_2;\r\n\r\n let rotationCenterPoint;\r\n if (rotateAnglePart && rotateAnglePart.shapeType === \"wideangle\") {\r\n rotationCenterPoint = {\r\n x: angleValue < 90 ? basePointX2 : (rotateAnglePart && rotateAnglePart.angleDirection === \"right\") ? basePointX - widthDiff : basePointX + widthDiff,\r\n y: angleValue < 90 ? basePointY2 : basePointY,\r\n };\r\n } else if (rotateAnglePart && rotateAnglePart.shapeType === \"horseshoe\") {\r\n if(angleValue < 90) {\r\n rotationCenterPoint = {\r\n x: basePointX2,\r\n y: basePointY2\r\n };\r\n } else {\r\n if(rotateAnglePart && rotateAnglePart.angleDirection === \"right\") {\r\n switch (bottomLine.getOrientation()) {\r\n case orientation.HORIZONTAL:{ rotationCenterPoint = { x: basePointX, y: basePointY }; break;}\r\n case orientation.VERTICAL: { rotationCenterPoint = { x: basePointX, y: basePointY }; break;}\r\n case orientation.SOUTHEAST: { rotationCenterPoint = { x: basePointX - widthDiff, y: basePointY}; break;}\r\n case orientation.NORTHEAST: { rotationCenterPoint = { x: basePointX, y: basePointY + widthDiff }; break; }\r\n case orientation.SOUTHWEST: { rotationCenterPoint = { x: basePointX, y: basePointY - widthDiff}; break; }\r\n case orientation.NORTHWEST: { rotationCenterPoint = { x: basePointX + widthDiff, y: basePointY }; break; }\r\n default:\r\n break;\r\n }\r\n } else {\r\n switch (bottomLine.getOrientation()) {\r\n case orientation.HORIZONTAL: { rotationCenterPoint = { x: basePointX, y: basePointY }; break; }\r\n case orientation.VERTICAL: { rotationCenterPoint = { x: basePointX, y: basePointY }; break; }\r\n case orientation.SOUTHEAST: { rotationCenterPoint = { x: basePointX, y: basePointY + widthDiff}; break; }\r\n case orientation.NORTHEAST: { rotationCenterPoint = { x: basePointX + widthDiff, y: basePointY}; break; }\r\n case orientation.SOUTHWEST: { rotationCenterPoint = { x: basePointX - widthDiff, y: basePointY}; break; }\r\n case orientation.NORTHWEST: { rotationCenterPoint = { x: basePointX, y: basePointY - widthDiff}; break; }\r\n default:\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return rotationCenterPoint\r\n};\r\n","import workspace from \"../../workspace\";\r\nimport COLOR_THEMES from \"../../../store/colorThemes\";\r\nimport sqftConfig from \"../../../store/sqftConfig\";\r\nimport store from \"../../../../../../../store\";\r\nimport SeamTool from \"./slabParts/seamTool\";\r\nimport {RENDER_TEMPLATES, SHAPE_PART_ID, SIDEBAR_SLAB_SEAM_BUTTONS} from \"../../../../../constants\";\r\nimport RenderParts from \"../../../helpers/renderParts\";\r\nimport ShapeMeasurementArrows from \"./shapeMeasurementArrows\";\r\nimport ShapeAbsolute from \"./shapeAbsolute\";\r\nimport workspaceControllers from \"../../../store/workspaceControllers\";\r\nimport {getPointField} from \"../../../../../helpers/sqftHelper\";\r\nimport RenderFigures from \"../../../helpers/renderFigures\";\r\n\r\nclass ShapeSlab {\r\n __shape;\r\n __seamTool;\r\n __intersectionPoints = [];\r\n __minLengthToIntersectionPoints;\r\n __absolutePos = null; //not used?\r\n shapeAbsolute = new ShapeAbsolute(this);\r\n\r\n constructor(shape) {\r\n this.__shape = shape;\r\n this.__seamTool = new SeamTool(shape);\r\n this.__measurementArrows = new ShapeMeasurementArrows(shape);\r\n }\r\n setSlabPos(pos) {\r\n this.__shape.slabPos = pos\r\n }\r\n setParentId(parentId) {\r\n this.__shape.shapeParent = parentId\r\n }\r\n setRotationDegreesSlab(rotationDegrees) {\r\n this.__shape.rotatedDegreesSlab = rotationDegrees\r\n }\r\n addSeamPieceVertical = (mousePos) => {\r\n this.__seamTool.addSeamPieceVertical(mousePos);\r\n workspaceControllers.snappedShapeGroups.updateShapesSnappedGroups(false);\r\n };\r\n addSeamPieceHorizontal = (mousePos) => {\r\n this.__seamTool.addSeamPieceHorizontal(mousePos);\r\n workspaceControllers.snappedShapeGroups.updateShapesSnappedGroups(false);\r\n };\r\n setAbsolutePos = (pos) => {\r\n //this.__absolutePos = pos;\r\n this.shapeAbsolute.setAbsolutePos(pos);\r\n };\r\n getAbsolutePosition = () => {\r\n //return this.__absolutePos;\r\n return this.shapeAbsolute.getAbsolutePosition();\r\n };\r\n getPosition = () => {\r\n let absolutePos = this.getAbsolutePosition();\r\n\r\n if (absolutePos) {\r\n return absolutePos\r\n }\r\n\r\n return this.__shape.slabPos;\r\n };\r\n setIntersectionsPoints = (points) => {\r\n this.__intersectionPoints = points;\r\n };\r\n setMinLengthToIntersectionPoints = (length) => {\r\n this.__minLengthToIntersectionPoints = length;\r\n };\r\n resetShapeSeams = () => {\r\n for (let i = this.__shape.shapePieces.length - 1; i >= 0; i--) {\r\n let shp = workspace.getShapeById(this.__shape.shapePieces[i]);\r\n if (shp.shapePieces) {\r\n shp.shapeSlab.resetShapeSeams();\r\n }\r\n workspace.removeShape(shp);\r\n }\r\n this.__shape.shapePieces.splice(0, this.__shape.shapePieces.length);\r\n };\r\n import = (data) => {\r\n this.shapeAbsolute.setAbsolutePos(data ? data.absolutePosition : null);\r\n }\r\n export = () => {\r\n return {\r\n absolutePosition: this.getAbsolutePosition()\r\n }\r\n }\r\n\r\n render = (ctx,\r\n staticOffset = null,\r\n strokeTemplate= RENDER_TEMPLATES.default,\r\n fillTemplate = RENDER_TEMPLATES.accordingToFeature\r\n ) => {\r\n if (workspace && workspace.getState().loading) return;\r\n if (this.__shape.partId === SHAPE_PART_ID.slabPlaceHolder) {\r\n RenderParts.drawDiagonalStripes(ctx, this.__shape, 2);\r\n } else {\r\n RenderParts.drawShapeBorders(ctx, staticOffset, strokeTemplate, fillTemplate, this.__shape);\r\n }\r\n const reduxState = store.getState()\r\n let isMeasurementVisibleInSlabMode = reduxState.sqftSlabState.isMeasurementVisibleInSlabMode;\r\n if (isMeasurementVisibleInSlabMode) {\r\n this.renderMeasurementArrows(ctx);\r\n }\r\n this.renderSeamLinesOnHover(ctx);\r\n this.renderSeamCutPoints(ctx);\r\n };\r\n\r\n renderSeamLinesOnHover = (ctx) => {\r\n if (this.__shape.isHovering() && workspace.getHoveredSqftShape() === this.__shape ) {\r\n let sqftMenuState = store.getState().sqftMenuState;\r\n if (sqftMenuState.activeButton === SIDEBAR_SLAB_SEAM_BUTTONS.addSeamVertical) {\r\n this.__seamTool.seamToolRender.renderSeamVerticalIntersection(ctx);\r\n } else if (sqftMenuState.activeButton === SIDEBAR_SLAB_SEAM_BUTTONS.addSeamHorizontal) {\r\n this.__seamTool.seamToolRender.renderSeamHorizontalIntersection(ctx);\r\n }\r\n }\r\n }\r\n\r\n renderSeamCutPoints = (ctx) => {\r\n const strokeStyle = '#e01333';\r\n for (const seamCutPoint of this.__shape.seamCutPoints) {\r\n const seamCutPointOnField = getPointField(seamCutPoint.x, seamCutPoint.y, this.__shape);\r\n RenderFigures.renderCircle(seamCutPointOnField, 4, 1, strokeStyle, strokeStyle);\r\n RenderFigures.renderCircle(seamCutPointOnField, 7, 1, strokeStyle);\r\n }\r\n if (this.__shape.seamCutPoints.length === 2) {\r\n const startPoint = this.__shape.seamCutPoints[0];\r\n const endPoint = this.__shape.seamCutPoints[1];\r\n const startPointOnField = getPointField(startPoint.x, startPoint.y, this.__shape);\r\n const endPointOnField = getPointField(endPoint.x, endPoint.y, this.__shape);\r\n ctx.moveTo(startPointOnField.x, startPointOnField.y);\r\n ctx.lineTo(endPointOnField.x, endPointOnField.y);\r\n ctx.strokeStyle = strokeStyle;\r\n ctx.stroke();\r\n }\r\n }\r\n\r\n renderLinesWithoutStroke = (ctx, staticOffset = null, sqftMode) => {\r\n if (workspace && workspace.getState().loading) return;\r\n let lines = this.__shape.getLines();\r\n ctx.lineWidth = 2;\r\n ctx.strokeStyle = COLOR_THEMES[sqftConfig.activeTheme].active;\r\n for (let i = 0; i < lines.length; i++) {\r\n lines[i].staticOffset = staticOffset;\r\n lines[i].render(ctx, i > 0, sqftMode);\r\n lines[i].staticOffset = null;\r\n }\r\n };\r\n\r\n renderMeasurementArrows = (ctx) => {\r\n const snappedShapeGroup = this.shapeAbsolute.getSnappedShapeGroup();\r\n //We will render measurement arrows only if there are no shapes snaps to the current shape;\r\n if (snappedShapeGroup !== null) {\r\n const snappedShapes = workspaceControllers.snappedShapeGroups.getSnappedShapes(snappedShapeGroup);\r\n if (snappedShapes.length > 1) {\r\n return\r\n }\r\n }\r\n\r\n this.__measurementArrows.render(ctx);\r\n };\r\n}\r\n\r\nexport default ShapeSlab\r\n","import _ from 'lodash';\r\n\r\nimport {\r\n getPointField,\r\n} from \"../../../../../../helpers/sqftHelper\";\r\nimport sqftShapeManager from \"../../../../store/sqftShapeManager\";\r\nimport {SHAPE_PART_ID, SHAPE_ROTATE_DIRECTION} from \"../../../../../../constants\";\r\nimport SqftStore from \"../../../../store/sqftStore\";\r\nimport ShapeHelper from \"../../../../../../helpers/shapeHelper\";\r\nimport SeamToolRender from \"./seamToolRender\";\r\nimport SlabWorkspace from \"../../../slab/slabWorkspace\";\r\nimport SlabAdditionalShape from \"../../../slab/slabAdditionalShape\";\r\nimport {getHorizontalLineIntersectionPoints, getVerticalLineIntersectionPoints} from \"./seamToolHelper\";\r\nimport {createShapeFromPoints} from \"../../../../../../helpers/freeDrawHelper\";\r\n\r\nclass SeamTool {\r\n __shape;\r\n seamToolRender;\r\n\r\n constructor(_shape) {\r\n this.__shape = _shape;\r\n this.seamToolRender = new SeamToolRender(this);\r\n }\r\n\r\n getMaxLength = () => {\r\n //todo\r\n return 10\r\n }\r\n //todo\r\n addSeamPieceHorizontal = (mousePos) => {\r\n // const mousePosOnFiled = getMousePositionOnField(mousePos.x, mousePos.y);\r\n // const serverState = store.getState().serverState;\r\n // const pos = this.__shape.getPosition();\r\n //let intersectionPoint1 = {x: -serverState.windowWidth, y: mousePosOnFiled.y - pos.y};\r\n //let intersectionPoint2 = {x: serverState.windowWidth, y: mousePosOnFiled.y - pos.y};\r\n\r\n let absoluteLinePoint1Pos = this.seamToolRender.absoluteLinePoint1Pos;\r\n let toPoint = {...mousePos};\r\n if (absoluteLinePoint1Pos && absoluteLinePoint1Pos.y) {\r\n let pf = getPointField(absoluteLinePoint1Pos.x, absoluteLinePoint1Pos.y, this.__shape);\r\n toPoint.y = pf.y;\r\n }\r\n const lines = this.__shape.getLines();\r\n console.log(\"linesPoints\", lines.map((line) => { return {x: line.from.x, y: line.from.y}}));\r\n\r\n const linesWithoutAnglePoints = this.__shape.createLinesWithoutAngle();\r\n let [intersectionPointAndLine1, intersectionPointAndLine2] = getHorizontalLineIntersectionPoints(toPoint, this.__shape, linesWithoutAnglePoints);\r\n if (intersectionPointAndLine1 && intersectionPointAndLine2) {\r\n let seamShapesPoints = this.splitShape(linesWithoutAnglePoints, intersectionPointAndLine1, intersectionPointAndLine2, 'vertical');\r\n console.log(\"intersectionPoint1\", intersectionPointAndLine1);\r\n console.log(\"intersectionPoint2\", intersectionPointAndLine2);\r\n\r\n console.log(\"linesWithoutAnglePoints\", linesWithoutAnglePoints.map((line) => { return {x: line.from.x, y: line.from.y}}));\r\n console.log(\"piece1Points\", seamShapesPoints[0].map(point => { return {x: point.x, y: point.y}}));\r\n console.log(\"piece2Points\", seamShapesPoints[1].map(point => { return {x: point.x, y: point.y}}));\r\n this.createShapesFromSeamPointsAndSetSlabRotation(seamShapesPoints);\r\n\r\n this.__shape.deregisterEvents();\r\n //this.__shape.shapeSlab.setRotationDegreesSlab(0); //? not needed\r\n SqftStore.addSeamHistory(this.__shape);\r\n } else {\r\n console.log(\"getHorizontalLineIntersectionPoints error missing intersections\");\r\n }\r\n }\r\n\r\n createShapesFromSeamPointsAndSetSlabRotation = (seamShapesPoints) => {\r\n let parentShapeCenter = this.__shape.getCenter();\r\n\r\n for (let seamPoints of seamShapesPoints) {\r\n let isBacksplashPiece = [SHAPE_PART_ID.backsplashPiece, SHAPE_PART_ID.waterfallPiece].includes(this.__shape.partId);\r\n let partId = SHAPE_PART_ID.seamPiece;\r\n seamPoints = this.preparePointCords(seamPoints);\r\n let shapePieceId = createShapeFromPoints(seamPoints, partId, true);\r\n let shapePiece = sqftShapeManager.getShapeById(shapePieceId);\r\n shapePiece.featureId = this.__shape.featureId;\r\n shapePiece.featureName = this.__shape.featureName;\r\n shapePiece.colorSet = this.__shape.colorSet;\r\n shapePiece.deregisterPartEvents();\r\n let rotatedDiffPos = {x: 0, y: 0};\r\n\r\n if (isBacksplashPiece) {\r\n //add additional backsplash to slabWorkspace\r\n let parentSlabAdditionalShape = SlabWorkspace.slabAdditionalShapes.findOneByBacksplashShapeId(this.__shape.id);\r\n let newSlabAdditionalShape = new SlabAdditionalShape(parentSlabAdditionalShape.line, shapePieceId);\r\n SlabWorkspace.slabAdditionalShapes.addActiveBacksplash(newSlabAdditionalShape);\r\n }\r\n\r\n shapePiece.shapeSlab.setSlabPos(Object.assign({}, this.__shape.slabPos));\r\n if (this.__shape.rotatedDegreesSlab !== 0) {\r\n\r\n // this will rotate sqft and slab shape points to 0 it is required for correct rotation and drawing images in the right part\r\n let shapePieceCenterPointBeforeRotation = ShapeHelper.getCenterPoint(shapePiece.getLines().map(line => line.from));\r\n let reqRotatedDegreesToZero = 360 - this.__shape.rotatedDegreesSlab;\r\n //console.log(\"piece before rotate1\", shapePiece.getLines().map((line) => { return {x: line.from.x, y: line.from.y}}));\r\n shapePiece.rotate(reqRotatedDegreesToZero, SHAPE_ROTATE_DIRECTION.left, true, parentShapeCenter);\r\n //console.log(\"piece rotate2\", shapePiece.getLines().map((line) => { return {x: line.from.x, y: line.from.y}}));\r\n shapePiece.rotate(360, SHAPE_ROTATE_DIRECTION.left, false, parentShapeCenter);\r\n //console.log(\"piece rotate3\", shapePiece.getLines().map((line) => { return {x: line.from.x, y: line.from.y}}));\r\n shapePiece.setRotationDegrees(0);\r\n shapePiece.shapeSlab.setRotationDegreesSlab(0);\r\n\r\n //rotate shape and move it to diff position (this is for correct displaying right part)\r\n shapePiece.rotate(this.__shape.rotatedDegreesSlab, SHAPE_ROTATE_DIRECTION.left, true);\r\n let shapePieceCenterPointAfterRotation = ShapeHelper.getCenterPoint(shapePiece.getLines().map(line => line.from));\r\n this.__shape.setIsPointsChanged(false); // prevent points change after rotation\r\n console.log(\"piece rotate4\", shapePiece.getLines().map((line) => { return {x: line.from.x, y: line.from.y}}));\r\n\r\n rotatedDiffPos = {\r\n x: shapePieceCenterPointBeforeRotation.x - shapePieceCenterPointAfterRotation.x,\r\n y: shapePieceCenterPointBeforeRotation.y - shapePieceCenterPointAfterRotation.y,\r\n }\r\n }\r\n let coreShapeAbsolutePosition = this.__shape.getSlabAbsolutePosition()\r\n let slabAbsolutePosition = coreShapeAbsolutePosition ? coreShapeAbsolutePosition : this.__shape.getSlabPosition();\r\n shapePiece.slabPos = {\r\n x: slabAbsolutePosition.x + rotatedDiffPos.x,\r\n y: slabAbsolutePosition.y + rotatedDiffPos.y,\r\n }\r\n\r\n shapePiece.shapeSlab.setParentId(this.__shape.id); //this is not needed maybe in future\r\n shapePiece.setPosition(Object.assign({}, this.__shape.getRegularPosition()));\r\n\r\n this.__shape.addShapePieceId(shapePiece.id);\r\n }\r\n };\r\n\r\n addSeamPieceVertical = (mousePos) => {\r\n // const mousePosOnFiled = getMousePositionOnField(mousePos.x, mousePos.y);\r\n // const serverState = store.getState().serverState;\r\n // const pos = this.__shape.getPosition();\r\n //\r\n // let intersectionPoint1 = {x: mousePosOnFiled.x - pos.x, y: -serverState.windowHeight};\r\n // let intersectionPoint2 = {x: mousePosOnFiled.x - pos.x, y: serverState.windowHeight};\r\n let absoluteLinePoint1Pos = this.seamToolRender.absoluteLinePoint1Pos;\r\n let toPoint = {...mousePos};\r\n if (absoluteLinePoint1Pos && absoluteLinePoint1Pos.x) {\r\n let pf = getPointField(absoluteLinePoint1Pos.x, absoluteLinePoint1Pos.y, this.__shape);\r\n toPoint.x = pf.x;\r\n }\r\n const linesWithoutAnglePoints = this.__shape.createLinesWithoutAngle();\r\n let [intersectionPointAndLine1, intersectionPointAndLine2] = getVerticalLineIntersectionPoints(toPoint, this.__shape, linesWithoutAnglePoints);\r\n\r\n if (intersectionPointAndLine1 && intersectionPointAndLine2) {\r\n let seamShapesPoints = this.splitShape(linesWithoutAnglePoints, intersectionPointAndLine1, intersectionPointAndLine2, 'horizontal');\r\n // console.log(\"intersectionPoint1\", intersectionPointAndLine1);\r\n // console.log(\"intersectionPoint2\", intersectionPointAndLine2);\r\n // console.log(\"shapePoints\", this.__shape.getLines().map((line) => { return {x: line.from.x, y: line.from.y}}));\r\n // console.log(\"piece1Points\", seamShapesPoints[0].map(point => { return {x: point.x, y: point.y}}));\r\n // console.log(\"piece2Points\", seamShapesPoints[1].map(point => { return {x: point.x, y: point.y}}));\r\n this.createShapesFromSeamPointsAndSetSlabRotation(seamShapesPoints);\r\n\r\n this.__shape.deregisterEvents();\r\n //this.__shape.shapeSlab.setRotationDegreesSlab(0); //? not needed\r\n SqftStore.addSeamHistory(this.__shape);\r\n } else {\r\n console.log(\"getVerticalLineIntersectionPoints error missing intersections\");\r\n }\r\n };\r\n\r\n preparePointCords = (seamPoints) => {\r\n return seamPoints.map((seamPoint) => {\r\n seamPoint.x = Math.round10(seamPoint.x, -1);\r\n seamPoint.y = Math.round10(seamPoint.y, -1);\r\n return seamPoint\r\n })\r\n };\r\n\r\n /**\r\n * @param {[]} lines\r\n * @param {*} intersectionPointAndLine1\r\n * @param {*} intersectionPointAndLine2\r\n * @param {string} splitOnlyOrientation\r\n */\r\n splitShape = (lines, intersectionPointAndLine1, intersectionPointAndLine2, splitOnlyOrientation) => {\r\n let piece1Points = [];\r\n let piece2Points = [];\r\n let intersectionNumber = 1;\r\n let lastPoint;\r\n let intersectionPoint1 = intersectionPointAndLine1.intersectionCords\r\n let intersectionPoint2 = intersectionPointAndLine2.intersectionCords\r\n\r\n lines.forEach((line) => {\r\n let intersectionCords = null;\r\n void splitOnlyOrientation;\r\n\r\n // version 1.0 search cords again\r\n //if (line.getLineDirection().orientation === splitOnlyOrientation || !splitOnlyOrientation) {\r\n // intersectionCords = getIntersectCords(\r\n // Math.round10(line.from.x, -1), Math.round10(line.from.y, -1),\r\n // Math.round10(line.to.x, -1), Math.round10(line.from.y, -1),\r\n // Math.round10(intersectionPoint1.x, -1), Math.round10(intersectionPoint1.y, -1),\r\n // Math.round10(intersectionPoint2.x, -1), Math.round10(intersectionPoint2.y,-1),\r\n // false\r\n // )\r\n //}\r\n\r\n // version 2.0 use existing intersection cords\r\n if ((line === intersectionPointAndLine1.line || line === intersectionPointAndLine2.line)) {\r\n intersectionCords = line === intersectionPointAndLine1.line\r\n ? intersectionPointAndLine1.intersectionCords\r\n : intersectionPointAndLine2.intersectionCords\r\n }\r\n\r\n if (intersectionCords) {\r\n let ip = (Math.round10(intersectionCords.x, -1) === Math.round10(intersectionPoint1.x, -1)\r\n && Math.round10(intersectionCords.y, -1) === Math.round10(intersectionPoint1.y, -1))\r\n ? intersectionPoint1 : intersectionPoint2\r\n if (piece2Points.length === 1) { // triangle shape\r\n piece2Points.push(line.from);\r\n }\r\n const nextLine = line.getParent().getNextLine(line, undefined, true);\r\n if (piece1Points.length === 1\r\n && (nextLine.id === intersectionPointAndLine1.line.id || nextLine.id === intersectionPointAndLine2.line.id)\r\n ) {\r\n piece1Points.push(line.to); // triangle shape\r\n }\r\n piece1Points.push(ip);\r\n piece2Points.push(ip);\r\n } else {\r\n if (intersectionNumber % 2 !== 0) {\r\n lastPoint = piece1Points[piece1Points.length - 1];\r\n if (!lastPoint || !lastPoint.id || lastPoint.id !== line.from.id) {\r\n piece1Points.push(line.from);\r\n }\r\n if (piece1Points[0] !== line.to) {\r\n piece1Points.push(line.to);\r\n }\r\n }\r\n if (intersectionNumber % 2 === 0) {\r\n lastPoint = piece2Points[piece2Points.length - 1];\r\n if (!lastPoint || !lastPoint.id || lastPoint.id !== line.from.id) {\r\n piece2Points.push(line.from);\r\n }\r\n if (piece2Points[0] !== line.to) {\r\n piece2Points.push(line.to);\r\n }\r\n }\r\n }\r\n\r\n if (intersectionCords) {\r\n intersectionNumber += 1;\r\n }\r\n //console.log(\"intersectionCords\", intersectionCords);\r\n });\r\n //console.log(\"piece1Points before filter\", piece1Points.map(point => { return {x: point.x, y: point.y}}));\r\n //console.log(\"piece2Points before filter\", piece2Points.map(point => { return {x: point.x, y: point.y}}));\r\n\r\n function filterEqualAndPointsOnTheSameLine(pointsArray) {\r\n return pointsArray.filter((point, index, array) => {\r\n let prev = array[index - 1];\r\n let next = array[index + 1];\r\n if (!prev) { // include first point\r\n prev = array[array.length - 1];\r\n }\r\n if (!next) {\r\n next = array[0]; // next point for the last point in array is the first point in array\r\n }\r\n const isEqual = _.isEqual({x: point.x, y: point.y}, {x: prev.x, y: prev.y});\r\n const isOnTheSameLine = point.x === prev.x && point.x === next.x || point.y === prev.y && point.y === next.y\r\n return !isEqual && !isOnTheSameLine\r\n })\r\n }\r\n\r\n return [filterEqualAndPointsOnTheSameLine(piece1Points), filterEqualAndPointsOnTheSameLine(piece2Points)]\r\n }\r\n}\r\n\r\nexport default SeamTool\r\n","import store from \"../../../../../../../../store\";\r\nimport sqftEventManager from \"../../../../store/sqftEventManager\";\r\nimport {\r\n getMidPoint,\r\n getMousePositionOnField,\r\n getPointDistance,\r\n getPointField\r\n} from \"../../../../../../helpers/sqftHelper\";\r\nimport COLOR_THEMES from \"../../../../store/colorThemes\";\r\nimport sqftConfig from \"../../../../store/sqftConfig\";\r\nimport NumberText from \"../../../workspace/text/numberText\";\r\nimport workspace from \"../../../workspace\";\r\nimport {\r\n getClosestIntersectionPoints,\r\n getIntersectionPointsAndLines,\r\n} from \"./seamToolHelper\";\r\nimport ShapeHelper from \"../../../../../../helpers/shapeHelper\";\r\nimport RenderFigures from \"../../../../helpers/renderFigures\";\r\nimport config from \"../../../../store/sqftConfig\";\r\n\r\nclass SeamToolRender {\r\n __measurement1 = new NumberText(0, {}, {}, workspace, Function(), false);\r\n __measurement2 = new NumberText(0, {}, {}, workspace, Function(), false);\r\n seamTool;\r\n absoluteLinePoint1Pos = {};\r\n absoluteLinePoint2Pos = {};\r\n\r\n constructor(seamTool) {\r\n this.seamTool = seamTool;\r\n }\r\n\r\n renderSeamHorizontalIntersection = (ctx) => {\r\n const serverState = store.getState().serverState;\r\n const mousePos = sqftEventManager.getMousePos();\r\n const mousePosOnFiled = getMousePositionOnField(mousePos.x, mousePos.y);\r\n const pos = this.seamTool.__shape.getPosition();\r\n const mousePosOnShape = {x: mousePosOnFiled.x - pos.x, y: mousePosOnFiled.y - pos.y};\r\n this.absoluteLinePoint1Pos = null; //reset minLength for correct calculations without stacking\r\n this.absoluteLinePoint2Pos = null; //reset minLength for correct calculations without stacking\r\n\r\n // vertical line\r\n let verticalLinePoint1 = {x: -serverState.windowWidth, y: mousePosOnShape.y};\r\n let verticalLinePoint2 = {x: serverState.windowWidth, y: mousePosOnShape.y};\r\n let distancesToLines = ShapeHelper.getDistancesToPoint(mousePos);\r\n let snappingPossibilitiesToLines = ShapeHelper.getSnappingPossibilitiesToLines(distancesToLines);\r\n if (snappingPossibilitiesToLines.length > 0) {\r\n //console.log(\"distancesToLines\", distancesToLines);\r\n //console.log(\"getSnappingPossibilitiesToLines\", snappingPossibilitiesToLines);\r\n this.setAbsolutePosFromSnapPossibilities(snappingPossibilitiesToLines, verticalLinePoint1, verticalLinePoint2);\r\n verticalLinePoint1 = this.absoluteLinePoint1Pos;\r\n verticalLinePoint2 = this.absoluteLinePoint2Pos;\r\n }\r\n this.renderSeamDashedLine(ctx, verticalLinePoint1, verticalLinePoint2);\r\n\r\n // horizontal line\r\n let horizontalLinePoint1 = {x: mousePosOnShape.x , y: -serverState.windowHeight};\r\n let horizontalLinePoint2 = {x: mousePosOnShape.x, y: serverState.windowHeight};\r\n if (snappingPossibilitiesToLines.length > 0) {\r\n mousePosOnShape.y = this.absoluteLinePoint1Pos.y\r\n }\r\n this.renderSeamArrowLine(ctx, horizontalLinePoint1, horizontalLinePoint2, mousePos, mousePosOnShape);\r\n }\r\n\r\n renderSeamVerticalIntersection = (ctx) => {\r\n const serverState = store.getState().serverState;\r\n const mousePos = sqftEventManager.getMousePos();\r\n const mousePosOnFiled = getMousePositionOnField(mousePos.x, mousePos.y);\r\n const pos = this.seamTool.__shape.getPosition();\r\n const mousePosOnShape = {x: mousePosOnFiled.x - pos.x, y: mousePosOnFiled.y - pos.y};\r\n this.absoluteLinePoint1Pos = null; //reset minLength for correct calculations without stacking\r\n this.absoluteLinePoint2Pos = null; //reset minLength for correct calculations without stacking\r\n\r\n // vertical line\r\n let verticalLinePoint1 = {x: mousePosOnShape.x, y: -serverState.windowHeight};\r\n let verticalLinePoint2 = {x: mousePosOnShape.x, y: serverState.windowHeight};\r\n let distancesToLines = ShapeHelper.getDistancesToPoint(mousePos);\r\n let snappingPossibilitiesToLines = ShapeHelper.getSnappingPossibilitiesToLines(distancesToLines);\r\n if (snappingPossibilitiesToLines.length > 0) {\r\n //console.log(\"distancesToLines\", distancesToLines);\r\n //console.log(\"getSnappingPossibilitiesToLines\", snappingPossibilitiesToLines);\r\n this.setAbsolutePosFromSnapPossibilities(snappingPossibilitiesToLines, verticalLinePoint1, verticalLinePoint2);\r\n verticalLinePoint1 = this.absoluteLinePoint1Pos;\r\n verticalLinePoint2 = this.absoluteLinePoint2Pos;\r\n }\r\n this.renderSeamDashedLine(ctx, verticalLinePoint1, verticalLinePoint2);\r\n\r\n // horizontal line\r\n let horizontalLinePoint1 = {x: -serverState.windowWidth , y: mousePosOnShape.y};\r\n let horizontalLinePoint2 = {x: serverState.windowWidth, y: mousePosOnShape.y};\r\n if (snappingPossibilitiesToLines.length > 0) {\r\n mousePosOnShape.x = this.absoluteLinePoint1Pos.x\r\n }\r\n this.renderSeamArrowLine(ctx, horizontalLinePoint1, horizontalLinePoint2, mousePos, mousePosOnShape);\r\n };\r\n\r\n setAbsolutePosFromSnapPossibilities = (snapPossibilities, verticalLinePoint1, verticalLinePoint2) => {\r\n if (snapPossibilities.length > 0) {\r\n let scale = sqftConfig.scale;\r\n let absoluteLinePoint1Pos = {...verticalLinePoint1};\r\n let absoluteLinePoint2Pos = {...verticalLinePoint2};\r\n snapPossibilities.forEach((snap) => {\r\n switch (snap.orientation) {\r\n case \"horizontal\":\r\n absoluteLinePoint1Pos.y -= snap.diff / scale\r\n absoluteLinePoint2Pos.y -= snap.diff / scale\r\n break;\r\n case \"vertical\":\r\n absoluteLinePoint1Pos.x -= snap.diff / scale\r\n absoluteLinePoint2Pos.x -= snap.diff / scale\r\n break;\r\n }\r\n this.absoluteLinePoint1Pos = absoluteLinePoint1Pos;\r\n this.absoluteLinePoint2Pos = absoluteLinePoint2Pos;\r\n })\r\n }\r\n }\r\n\r\n renderSeamDashedLine = (ctx, verticalLinePoint1, verticalLinePoint2) => {\r\n let [intersection1, intersection2] = getIntersectionPointsAndLines(\r\n this.seamTool.__shape.getLines(), verticalLinePoint1, verticalLinePoint2\r\n );\r\n ctx.strokeStyle = COLOR_THEMES[sqftConfig.activeTheme].primary;\r\n\r\n if (intersection1 && intersection2) {\r\n let intersectionYPoint1 = intersection1.intersectionCords;\r\n let intersectionYPoint2 = intersection2.intersectionCords;\r\n let intersectionYPoint1PointField = getPointField(intersectionYPoint1.x, intersectionYPoint1.y, this.seamTool.__shape);\r\n let intersectionYPoint2PointField = getPointField(intersectionYPoint2.x, intersectionYPoint2.y, this.seamTool.__shape);\r\n ctx.beginPath();\r\n ctx.setLineDash([10, 10]);\r\n ctx.moveTo(intersectionYPoint1PointField.x , intersectionYPoint1PointField.y);\r\n ctx.lineTo(intersectionYPoint2PointField.x, intersectionYPoint2PointField.y);\r\n ctx.closePath();\r\n ctx.stroke();\r\n ctx.setLineDash([0]);\r\n }\r\n }\r\n\r\n renderSeamArrowLine = (ctx, horizontalLinePoint1, horizontalLinePoint2, mousePos, mousePosOnShape) => {\r\n let mousePosOnShapePointField = getPointField(mousePosOnShape.x, mousePosOnShape.y, this.seamTool.__shape);\r\n let [intersectionXPointAndLine1, intersectionXPointAndLine2] = getClosestIntersectionPoints(\r\n this.seamTool.__shape.getLines(), horizontalLinePoint1, horizontalLinePoint2, mousePosOnShape\r\n );\r\n\r\n if (intersectionXPointAndLine1 && intersectionXPointAndLine2) {\r\n let intersectionXPoint1 = intersectionXPointAndLine1.intersectionCords;\r\n let intersectionXPoint2 = intersectionXPointAndLine2.intersectionCords;\r\n let intersectionXPoint1PointField = getPointField(intersectionXPoint1.x, intersectionXPoint1.y, this.seamTool.__shape);\r\n let intersectionXPoint2PointField = getPointField(intersectionXPoint2.x, intersectionXPoint2.y, this.seamTool.__shape);\r\n ctx.beginPath();\r\n RenderFigures.drawArrow(ctx,\r\n intersectionXPoint1PointField.x,\r\n intersectionXPoint1PointField.y,\r\n mousePosOnShapePointField.x,\r\n mousePosOnShapePointField.y\r\n );\r\n let measurement1Midpoint = getMidPoint(mousePosOnShapePointField, intersectionXPoint1PointField);\r\n let measurement1Distance = getPointDistance(intersectionXPoint1, mousePosOnShape);\r\n RenderFigures.drawArrow(ctx,\r\n mousePosOnShapePointField.x,\r\n mousePosOnShapePointField.y,\r\n intersectionXPoint2PointField.x,\r\n intersectionXPoint2PointField.y\r\n );\r\n let measurement2Midpoint = getMidPoint(mousePosOnShapePointField, intersectionXPoint2PointField);\r\n let measurement2Distance = getPointDistance(intersectionXPoint2, mousePosOnShape);\r\n ctx.closePath();\r\n ctx.stroke();\r\n\r\n this.renderMeasurements(ctx, measurement1Midpoint, measurement1Distance, measurement2Midpoint, measurement2Distance)\r\n }\r\n }\r\n\r\n renderMeasurements = (ctx, measurement1Midpoint, measurement1Distance, measurement2Midpoint, measurement2Distance) => {\r\n let measurement1Pos = getMousePositionOnField(measurement1Midpoint.x, measurement1Midpoint.y);\r\n let measurement2Pos = getMousePositionOnField(measurement2Midpoint.x, measurement2Midpoint.y);\r\n\r\n this.__measurement1.pos.x = measurement1Pos.x;\r\n this.__measurement1.pos.y = measurement1Pos.y;\r\n this.__measurement1.value = Math.round(config.getMeasureMultiplier() * measurement1Distance);\r\n\r\n this.__measurement2.pos.x = measurement2Pos.x;\r\n this.__measurement2.pos.y = measurement2Pos.y;\r\n this.__measurement2.value = Math.round(config.getMeasureMultiplier() * measurement2Distance);\r\n\r\n this.__measurement1.render(ctx);\r\n this.__measurement2.render(ctx);\r\n }\r\n}\r\n\r\nexport default SeamToolRender\r\n","import workspace from \"../../workspace\";\r\nimport RenderParts from \"../../../helpers/renderParts\";\r\nimport RenderFigures from \"../../../helpers/renderFigures\";\r\n\r\nclass ShapeMeasurementArrows {\r\n __shape;\r\n\r\n constructor(shape) {\r\n this.__shape = shape;\r\n }\r\n\r\n import = (data) => {\r\n void data\r\n }\r\n\r\n render = (ctx) => {\r\n if (workspace && workspace.getState().loading) return;\r\n //this.renderDimensionsInsideShape(ctx);\r\n if (!this.__shape.shapeAbsolute.getAbsolutePosition() && !this.__shape.shapeAbsolute.getSnappedWithShape()) {\r\n this.renderDimensionsOutsideShape(ctx);\r\n }\r\n }\r\n\r\n renderMeasurementArrows = (ctx) => {\r\n const points = this.__shape.getPointsPointField();\r\n RenderFigures.drawArrowsAroundPoints(ctx, points, 10)\r\n }\r\n\r\n renderMeasurementLength = (ctx) => {\r\n const points = this.__shape.getPointsPointField();\r\n RenderParts.drawMeasurementAroundPoints(ctx, points);\r\n }\r\n\r\n renderDimensionsOutsideShape = (ctx) => {\r\n ctx.save();\r\n ctx.beginPath();\r\n this.renderMeasurementArrows(ctx);\r\n this.renderMeasurementLength(ctx);\r\n ctx.closePath();\r\n ctx.restore();\r\n }\r\n}\r\n\r\nexport default ShapeMeasurementArrows\r\n","import {RENDER_TEMPLATES} from \"../../../../../constants\";\r\nimport workspace from \"../../workspace\";\r\nimport sqftConfig from \"../../../store/sqftConfig\";\r\nimport COLOR_THEMES from \"../../../store/colorThemes\";\r\nimport store from \"../../../../../../../store\";\r\n\r\nexport default class ShapeEditable {\r\n __shape;\r\n\r\n constructor(shape) {\r\n this.__shape = shape;\r\n }\r\n\r\n render = (ctx, template= RENDER_TEMPLATES.default) => {\r\n if (workspace && workspace.getState().loading) return;\r\n let lines = this.__shape.getLines();\r\n\r\n ctx.beginPath();\r\n for (let i = 0; i < lines.length; i++) {\r\n lines[i].render(ctx, i > 0);\r\n }\r\n if (this.__shape.isHovering() && workspace.getHoverShape() === this.__shape ) {\r\n ctx.strokeStyle = COLOR_THEMES[sqftConfig.activeTheme].active_hover;\r\n } else {\r\n ctx.strokeStyle = COLOR_THEMES[sqftConfig.activeTheme].active;\r\n }\r\n ctx.fillStyle = COLOR_THEMES[sqftConfig.activeTheme].active_disabled;\r\n switch (template) {\r\n case RENDER_TEMPLATES.linesOnly:\r\n ctx.lineWidth = 0;\r\n ctx.closePath();\r\n break;\r\n case RENDER_TEMPLATES.default:\r\n default:\r\n //ctx.fill();\r\n ctx.lineWidth = 2; // Math.ceil(scale);\r\n ctx.closePath();\r\n ctx.stroke();\r\n break;\r\n }\r\n\r\n if (this.__shape.isHovering() && workspace.getHoveredSqftShape() === this.__shape ) {\r\n let sqftMenuState = store.getState().sqftMenuState;\r\n void sqftMenuState;\r\n }\r\n };\r\n\r\n // renderLinesBetweenPoints = (ctx) => {\r\n // ctx.beginPath();\r\n // ctx.lineWidth = lineWidth;\r\n // ctx.strokeStyle = color;\r\n // drawLines(ctx);\r\n //\r\n // ctx.stroke();\r\n // };\r\n}\r\n","import workspace from \"../../workspace\";\r\nimport RenderParts from \"../../../helpers/renderParts\";\r\nimport RenderFigures from \"../../../helpers/renderFigures\";\r\nimport COLOR_THEMES from \"../../../store/colorThemes\";\r\nimport sqftConfig from \"../../../store/sqftConfig\";\r\n\r\nclass ShapeSpacer {\r\n __shape;\r\n\r\n constructor(shape) {\r\n this.__shape = shape;\r\n }\r\n\r\n import = (data) => {\r\n void data\r\n }\r\n\r\n export = () => {\r\n return {\r\n }\r\n }\r\n\r\n render = (ctx, staticOffset = null) => {\r\n if (workspace && workspace.getState().loading) return;\r\n\r\n this.renderBorders(ctx, staticOffset);\r\n if (!this.__shape.shapeAbsolute.getAbsolutePosition() && !this.__shape.shapeAbsolute.getSnappedWithShape()) {\r\n //this.renderCrownMolding(ctx);\r\n this.renderDimensionsOutsideShape(ctx);\r\n }\r\n }\r\n\r\n renderBorders = (ctx,\r\n staticOffset = null,\r\n ) => {\r\n RenderParts.drawSpacerBorders(ctx, staticOffset, this.__shape);\r\n };\r\n\r\n renderDimensionsOutsideShape = (ctx) => {\r\n ctx.save();\r\n ctx.beginPath();\r\n ctx.strokeStyle = COLOR_THEMES[sqftConfig.activeTheme].primary_hover;\r\n this.renderMeasurementArrows(ctx);\r\n this.renderMeasurementLength(ctx);\r\n ctx.closePath();\r\n ctx.restore();\r\n }\r\n\r\n renderMeasurementArrows = (ctx) => {\r\n const points = this.__shape.getPointsPointField();\r\n void ctx; void points;\r\n RenderFigures.drawArrowsAroundPoints(ctx, points, 10)\r\n }\r\n\r\n renderMeasurementLength = (ctx) => {\r\n const points = this.__shape.getPointsPointField();\r\n RenderParts.drawMeasurementAroundPoints(ctx, points);\r\n }\r\n\r\n}\r\n\r\nexport default ShapeSpacer\r\n","import SqftStore from \"../../../store/sqftStore\";\r\nimport sqftSlabManager from \"../../../store/sqftSlabManager\";\r\nimport sqftShapeIntersectionsManager from \"../../../store/sqftShapeIntersectionsManager\";\r\n\r\nexport default class ShapeIntersections {\r\n __shape;\r\n overlappedWithShapeIds = [];\r\n\r\n constructor(shape) {\r\n this.__shape = shape;\r\n }\r\n\r\n setOverlappedWithShapeIds = (ids) => {\r\n this.overlappedWithShapeIds = ids\r\n }\r\n\r\n addOverlappedWithShape = (id) => {\r\n if (!this.overlappedWithShapeIds.includes(id)) {\r\n this.overlappedWithShapeIds.push(id);\r\n }\r\n }\r\n\r\n removeOverlappedWithShape = (id) => {\r\n if (this.overlappedWithShapeIds.includes(id)) {\r\n this.overlappedWithShapeIds = this.overlappedWithShapeIds.filter(overlappedId => id !== overlappedId);\r\n }\r\n }\r\n\r\n handleSlabPlaceholderIntersections = () => {\r\n if (SqftStore.isSlabMode()) {\r\n const slabPlaceHolderShapes = sqftSlabManager.getSlabPlaceHolderShapes();\r\n if (slabPlaceHolderShapes.length) {\r\n\r\n // if (this.__shape.partId === SHAPE_PART_ID.slabPlaceHolder) {\r\n // this.onSlabPlaceHolderMove();\r\n // } else {\r\n // this.onCountertopShapeMove(slabPlaceHolderShapes);\r\n // }\r\n sqftShapeIntersectionsManager.updateShapesIntersections();\r\n sqftShapeIntersectionsManager.updateSlabPlaceholderFeatureId();\r\n\r\n const errorCallback = () => {\r\n this.__shape.shapeMemory.restoreShapePosition();\r\n this.__shape.resetMouseDown();\r\n sqftShapeIntersectionsManager.updateShapesIntersections();\r\n }\r\n\r\n sqftShapeIntersectionsManager.showSlabPlaceHolderErrorMessage(slabPlaceHolderShapes, errorCallback);\r\n }\r\n }\r\n }\r\n\r\n // onSlabPlaceHolderMove = () => {\r\n // const counterTopShapes = sqftShapeManager.getCounterTopShapes();\r\n // let overlapsWithIds = [];\r\n // this.setOverlappedWithShapeIds([]);\r\n //\r\n // for (const counterTopShape of counterTopShapes) {\r\n // const shapeIntersections = ShapeHelper.getTwoShapesIntersections(this.__shape, counterTopShape);\r\n // const shapeIds = Object.keys(shapeIntersections);\r\n // if (shapeIds.length) {\r\n // this.__shape.setFeatureId(_.clone(counterTopShape.featureId))\r\n // overlapsWithIds.push(shapeIds[0]);\r\n // }\r\n // //console.log(\"shapeIntersections\", shapeIntersections);\r\n // }\r\n // this.setOverlappedWithShapeIds(overlapsWithIds);\r\n // }\r\n //\r\n // onCountertopShapeMove = (slabPlaceHolderShapes) => {\r\n // for (const slabPlaceHolderShape of slabPlaceHolderShapes) {\r\n // slabPlaceHolderShape.shapeIntersections.removeOverlappedWithShape(this.__shape.id);\r\n // const shapeIntersections = ShapeHelper.getTwoShapesIntersections(slabPlaceHolderShape, this.__shape);\r\n // //console.log(\"shapeIntersections\", shapeIntersections);\r\n // const shapeIds = Object.keys(shapeIntersections);\r\n // if (shapeIds.length) {\r\n // slabPlaceHolderShape.setFeatureId(_.clone(this.__shape.featureId));\r\n // slabPlaceHolderShape.shapeIntersections.addOverlappedWithShape(+shapeIds[0]);\r\n // }\r\n // }\r\n // }\r\n\r\n\r\n}\r\n","import _ from 'lodash';\r\n\r\nexport default class ShapeMemory {\r\n __shape;\r\n memory = {\r\n pos: {x: 0, y: 0},\r\n slabPos: {x: 0, y: 0},\r\n absolutePos: {x: 0, y: 0}\r\n };\r\n\r\n constructor(shape) {\r\n this.__shape = shape;\r\n }\r\n\r\n rememberShapePosition = () => {\r\n this.memory = {\r\n pos: _.clone(this.__shape.pos),\r\n slabPos: _.clone(this.__shape.slabPos),\r\n shapeSlabAbsolutePos: _.clone(this.__shape.shapeSlab.getAbsolutePosition()),\r\n shapeAbsolutePos: _.clone(this.__shape.shapeAbsolute.getAbsolutePosition())\r\n }\r\n }\r\n\r\n restoreShapePosition = () => {\r\n this.__shape.pos = _.clone(this.memory.pos)\r\n this.__shape.slabPos = _.clone(this.memory.slabPos)\r\n this.__shape.shapeSlab.setAbsolutePos( _.clone(this.memory.shapeSlabAbsolutePos));\r\n this.__shape.shapeAbsolute.setAbsolutePos( _.clone(this.memory.shapeAbsolutePos));\r\n }\r\n}\r\n","import workspace from \"../../workspace\";\r\nimport {isDisabledInPopupShouldBeHidden} from \"../../../../../constants\";\r\nimport {getPointField, isDisabledInPopupWithParents} from \"../../../../../helpers/sqftHelper\";\r\nimport SqftStore from \"../../../store/sqftStore\";\r\nimport config from \"../../../store/sqftConfig\";\r\nimport COLOR_THEMES from \"../../../store/colorThemes\";\r\nimport sqftConfig from \"../../../store/sqftConfig\";\r\nimport sqftEventManager from \"../../../store/sqftEventManager\";\r\nimport BlinkingHighlight from \"../../../helpers/commonParts/blink\";\r\n\r\nexport default class ShapeRender {\r\n __shape;\r\n\r\n constructor(shape) {\r\n this.__shape = shape;\r\n this.blink = new BlinkingHighlight;\r\n }\r\n\r\n render(ctx) {\r\n // if (sqftStore && sqftStore.getState().loading) return;\r\n if (workspace && workspace.getState().loading) {\r\n return\r\n }\r\n if (isDisabledInPopupShouldBeHidden() && isDisabledInPopupWithParents(this)) {\r\n return\r\n }\r\n\r\n const isShowSlabTool = SqftStore.isSlabMode();\r\n const shapeState = this.__shape.getState();\r\n this.renderDevMode(ctx);\r\n\r\n if (isShowSlabTool) {\r\n return this.__shape.shapeSlab.render(ctx);\r\n } else if (shapeState.isPointsMovable) {\r\n return this.__shape.shapeEditable.render(ctx);\r\n } else if (shapeState.isRotatable) {\r\n return this.__shape.shapeRotatable.render(ctx);\r\n } else if (this.__shape.shapeParams !== undefined && this.__shape.shapeParams.shapeCabinet && !this.__shape.shapeParams.isSpacer) {\r\n return this.__shape.shapeCabinet.render(ctx);\r\n } else if (this.__shape.shapeParams !== undefined && this.__shape.shapeParams.isSpacer && this.__shape.shapeSpacer) {\r\n return this.__shape.shapeSpacer.render(ctx);\r\n }\r\n\r\n this.renderRegularShape(ctx);\r\n }\r\n\r\n renderDevMode = (ctx) => {\r\n if (config.isDevMode()) {\r\n // render center pos\r\n ctx.save();\r\n ctx.beginPath();\r\n let pf = getPointField(this.__shape.pos.x, this.__shape.pos.y);\r\n ctx.arc(pf.x, pf.y, 5, 0, 2 * Math.PI);\r\n ctx.stroke();\r\n ctx.closePath();\r\n\r\n ctx.beginPath();\r\n let shapeCenter = this.__shape.getCenter();\r\n const pos = getPointField(shapeCenter.x, shapeCenter.y, this.__shape);\r\n ctx.arc(pos.x, pos.y, 12, 0, 2 * Math.PI);\r\n\r\n ctx.stroke();\r\n ctx.closePath();\r\n ctx.restore();\r\n\r\n // render shape group\r\n if (this.__shape.getSnappedShapeGroup) {\r\n const renderText = this.__shape.getSnappedShapeGroup() + \".group\";\r\n const mText = ctx.measureText(renderText);\r\n ctx.wrapText(renderText, pos.x, pos.y, mText, 16);\r\n }\r\n\r\n // render shape center\r\n // ctx.beginPath();\r\n // let position = this.__shape.getOffset();\r\n // ctx.arc(position.x, position.y, 50, 0, 2 * Math.PI);\r\n //\r\n // ctx.stroke();\r\n // ctx.closePath();\r\n }\r\n }\r\n\r\n renderRegularShape = (ctx) => {\r\n // const scale = sqftConfig.scale;\r\n // const canvas = sqftStore.getCanvas();\r\n const lines = this.__shape.getLines();\r\n const shapeDesign = this.__shape.getDesign();\r\n const shapeColorSet = this.__shape.getColorset();\r\n\r\n ctx.save();\r\n ctx.beginPath();\r\n for (let i = 0; i < lines.length; i++) {\r\n lines[i].render(ctx, i > 0);\r\n }\r\n if (this.__shape.isHovering() && workspace.getHoverShape() === this.__shape) {\r\n ctx.strokeStyle = shapeColorSet ? shapeColorSet.primary_border : COLOR_THEMES[sqftConfig.activeTheme].primary_hover;\r\n } else {\r\n ctx.strokeStyle = shapeColorSet ? shapeColorSet.primary_border : COLOR_THEMES[sqftConfig.activeTheme].primary;\r\n }\r\n ctx.lineWidth = 2; // Math.ceil(scale);\r\n ctx.closePath();\r\n ctx.stroke();\r\n\r\n if (this.__shape.isHoveringOnlyShape()\r\n && workspace.getHoverShape()\r\n && !sqftConfig.highlight.rotateAngle\r\n && ( sqftEventManager.getCursor().indexOf(\"move\") >= 0\r\n || sqftEventManager.getCursor().indexOf(\"rotate-left\") >= 0\r\n || sqftEventManager.getCursor().indexOf(\"delete\") >= 0\r\n )\r\n ) {\r\n if (sqftEventManager.getCursor().indexOf(\"delete\") >= 0\r\n && !workspace.textBoxManager.isBoxActive()\r\n && !this.__shape.getHoverLabel()\r\n ) {\r\n const hoverLine = this.__shape.getHoverSegment(),\r\n hoverPoint = this.__shape.getHoverPointOnClick();\r\n\r\n // if ((hoverLine && hoverLine.getAttachedItems()) || (hoverPoint && (hoverPoint.getAngle() || hoverPoint.getArcLength()))) {\r\n if (hoverLine || hoverPoint) {\r\n ctx.fillStyle = shapeColorSet ? shapeColorSet.primary_hover : shapeDesign.fillColor;\r\n } else {\r\n ctx.fillStyle = shapeDesign.redHoverShapeColor;\r\n }\r\n } else {\r\n ctx.fillStyle = shapeColorSet ? shapeColorSet.primary_hover : shapeDesign.hoverShapeColor;\r\n }\r\n } else {\r\n if (this.blink.isHighlightedLightOn) {\r\n ctx.fillStyle = shapeColorSet ? shapeColorSet.primary_hover : shapeDesign.fillColor;\r\n } else {\r\n ctx.fillStyle = shapeColorSet ? shapeColorSet.primary : shapeDesign.fillColor;\r\n }\r\n }\r\n ctx.fill();\r\n ctx.restore();\r\n\r\n for (let i = 0; i < lines.length; i++) {\r\n lines[i].renderLineField(ctx); // renderLineField should be called after render method and ctx.fill()\r\n }\r\n\r\n // red highlight bumpout\r\n lines.forEach((line) => {\r\n if (line.isWithBumpout()) {\r\n if (sqftEventManager.getCursor().indexOf(\"delete\") >= 0 && line.bumpoutOverlay.isHoveringRect() && !workspace.textBoxManager.isBoxActive()) {\r\n line.bumpoutOverlay.drawBumpoutRect(ctx);\r\n }\r\n }\r\n });\r\n\r\n //green highlight selected part\r\n if (sqftConfig.highlight.rotateAngle) {\r\n // todo fix bumpout rotation and remove this\r\n if (!this.__shape.isWithBumpout() && !this.__shape.isWithBumpout() && !this.__shape.isPointsMoved && this.__shape.rotatedDegrees === 0) {\r\n /////////////////////////////////////////\r\n for (const rotateAnglePart of this.__shape.rotateAngleParts) {\r\n if (this.__shape.isAngleRotatedPartsWithCorner(rotateAnglePart)) {\r\n continue;\r\n }\r\n if (rotateAnglePart.isActive || rotateAnglePart.isHovered) {\r\n this.__shape.renderAnglePartActive(rotateAnglePart, ctx);\r\n }\r\n if (rotateAnglePart.isPulsing) { //green highlight selected part intro\r\n this.__shape.renderAnglePartActive(rotateAnglePart, ctx);\r\n setTimeout(() => {\r\n rotateAnglePart.isPulsing = false;\r\n }, 1000);\r\n }\r\n }\r\n }\r\n }\r\n\r\n //render counter?\r\n // var vertices = [];\r\n // for (var i = 0; i < lines.length; i++) {\r\n // var s = lines[i];\r\n // vertices.push([s.from.x, s.from.y]);\r\n // }\r\n //var newTriangles = earcut([vertices]);\r\n\r\n if (sqftConfig.workspace.debug) {\r\n ctx.beginPath();\r\n // for (var n = 0; n < newTriangles.length; n+=3) {\r\n // var lines = new triangle(newTriangles[n], newTriangles[n+1], newTriangles[n+2]);\r\n // for (let i = 0; i < lines.length; i++) {\r\n // var l = lines[i];\r\n // l.init(this.__shape, true); //initialize as temporary line\r\n // l.render(ctx, false); //render temp line\r\n // }\r\n // }\r\n ctx.lineWidth = 1;\r\n ctx.closePath();\r\n ctx.strokeStyle = \"#FF0000\";\r\n ctx.stroke();\r\n }\r\n //return newTriangles;\r\n };\r\n}\r\n","import {className} from \"../../misc/utils\";\r\n\r\nexport class Exception {\r\n message = '';\r\n\r\n /**\r\n *\r\n * @param message {string}\r\n */\r\n constructor(message) {\r\n this.message = message;\r\n }\r\n\r\n static NotImplemented(message) {\r\n console.error(message || \"Not implemented.\");\r\n }\r\n\r\n static NotImplementedBaseClass(instance) {\r\n console.error(`Not implemented in base class ${className(instance)}`);\r\n }\r\n}\r\n\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {Vanity} from \"../../parts/vanity\";\r\nimport {createParentPositions} from \"../../constants\";\r\n\r\nexport default class VanityHandle extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'vanity_handle';\r\n this.partName = 'Handle';\r\n this.translateId = \"visualizer.bathroom.vanity.vanity_handle\";\r\n this.dbName = \"Vanity Handle\";\r\n this.visible = [Vanity.Types.Custom];\r\n this.canBeDisabled = false;\r\n if (isChild) {\r\n createParentPositions(this);\r\n }\r\n }\r\n\r\n disabledClick() {\r\n this.getParent().toggleVanityParts(this.disabled);\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n const vanityParent = this.getParent();\r\n conditions.push({\r\n propName: \"VanitySize\",\r\n propValue: vanityParent.counterTopSize(this)\r\n })\r\n conditions.push({\r\n propName: \"CabinetStyle\",\r\n propValue: vanityParent.vanityCabinet && vanityParent.vanityCabinet.activeFeature\r\n && vanityParent.vanityCabinet.activeFeature.metaData[\"CabinetStyle\"]\r\n ? vanityParent.vanityCabinet.activeFeature.metaData[\"CabinetStyle\"]\r\n : \"No handles\" // if no cabinet style - hide handles\r\n });\r\n return conditions\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {Vanity} from \"../../parts/vanity\";\r\nimport store from \"../../../../../store\";\r\nimport {Layout} from \"../../layout\";\r\nimport {createParentPositions, METADATA, SIDE_POSITIONS, VANITY_TYPES, LOOK_ROOM_TYPES} from \"../../constants\";\r\nimport {updateSinkWithNewFeature} from \"../../../lookNavigation/lookNavigationFunctions\";\r\nimport {getCurrentRoomType} from \"../../../../appLayout\";\r\n\r\nexport default class VanityCabinet extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'vanity_cabinet';\r\n this.partName = 'Vanity Cabinet';\r\n this.translateId = \"visualizer.bathroom.vanity.vanity_cabinet\";\r\n this.dbName = \"Vanitie\";\r\n this.homePageTitle = 'Vanity Bases';\r\n this.visible = [Vanity.Types.Custom];\r\n this.canBeDisabled = true;\r\n this.canUseWizard = true;\r\n if (isChild) {\r\n createParentPositions(this);\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n if (dbFeature.groupName === \"Vanitie\") {\r\n dbFeature.groupName = \"Vanity\"\r\n }\r\n if (!dbFeature.metaData[\"MatchingFeature\"]) {\r\n dbFeature.metaData[\"MatchingFeature\"] = [METADATA.NO];\r\n }\r\n if (!dbFeature.metaData[\"Side\"]) {\r\n dbFeature.metaData[\"Side\"] = [METADATA.LeftSide];\r\n }\r\n if (Array.isArray(dbFeature.metaData[\"VanitySize\"]) && dbFeature.metaData[\"VanitySize\"][0]) {\r\n dbFeature.metaData[\"VanityWidth\"] = +dbFeature.metaData[\"VanitySize\"][0];\r\n if (dbFeature.metaData[\"VanityWidth\"] === 72) {\r\n dbFeature.metaData[\"VanityWidth\"] = 64;\r\n }\r\n } else if (dbFeature.metaData[\"VanitySize\"]) {\r\n console.log(\"dbFeature.metaData[\\\"VanitySize\\\"] should be an array!\", dbFeature.metaData[\"VanitySize\"]);\r\n }\r\n return super.load(dbFeature);\r\n }\r\n\r\n disabledClick() {\r\n const vanityParent = this.getParent();\r\n if (getCurrentRoomType(vanityParent.layout) === LOOK_ROOM_TYPES.as) {\r\n this.toggleLayerPositions();\r\n [\"drawerPull\", \"vanityLegs\", \"vanityMiddle\"].forEach(name => {\r\n if (vanityParent && vanityParent[name]) {\r\n vanityParent[name].disabled = this.disabled || !vanityParent[name].canBeEnabled(); // true or check if it can be enabled;\r\n }\r\n });\r\n if (this.activeFeature && this.activeFeature.metaData[\"MatchingFeature\"] && this.activeFeature.metaData[\"MatchingFeature\"].includes(METADATA.NO)) {\r\n [\"sink\", \"countertop\", \"vanityPTrap\", \"faucet\"].forEach(name => {\r\n if (vanityParent && vanityParent[name]) {\r\n vanityParent[name].disabled = this.disabled || !vanityParent[name].canBeEnabled(); // true or check if it can be enabled;\r\n }\r\n });\r\n }\r\n }\r\n }\r\n\r\n handleClick(ignoreLocked, updateSink = true) {\r\n const vanityParent = this.getParent().getParent();\r\n vanityParent.vanity_type = VANITY_TYPES.vanity_cabinet;\r\n super.handleClick(ignoreLocked);\r\n if (updateSink) {\r\n updateSinkWithNewFeature(this);\r\n }\r\n vanityParent.updateVanityParts();\r\n }\r\n\r\n // navigationSubItems() {\r\n // return super.navigationSubItemsWithFilter('VanitySize', this.getParent().counterTopSize(this));\r\n // }\r\n\r\n // disabledClick() {\r\n // this.getParent().toggleVanityParts(this.disabled);\r\n // }\r\n\r\n hideLayerCondition() {\r\n const vanityParent = this.getParent();\r\n return (getCurrentRoomType(vanityParent.layout) === LOOK_ROOM_TYPES.as) && (vanityParent.vanity_type !== VANITY_TYPES.vanity_cabinet)\r\n }\r\n\r\n setActiveFeatureByFilter(filterName, filterValue) {\r\n\r\n // console.log('filterName', filterName);\r\n // console.log('filterValue', filterValue);\r\n\r\n const filterGroups = store.getState().filterState.filterGroups;\r\n const group = filterGroups.find(group => group.name === filterName);\r\n const groupId = group.id;\r\n const filterValueId = Layout.getfilterValueIdByValue(groupId, filterValue);\r\n const filteredFeatures = this.features.filter(\r\n feature => feature.dbFeature && feature.dbFeature.filterValueIDs[groupId] && feature.dbFeature.filterValueIDs[groupId].includes(filterValueId)\r\n ); // find among all features only those, who have filter with value === props size\r\n if (!super.tryToSetTheSameFeature(filteredFeatures, null, \"ustom\")) {\r\n this.activeFeature = filteredFeatures[0];\r\n const placeholderAvailableFeatures = filteredFeatures.filter(feature => {\r\n return feature.dbFeature.displayName.includes(\"laceholder\") && feature.dbFeature.displayName.includes(\"ustom\")\r\n });\r\n this.placeholderFeature = placeholderAvailableFeatures[0];\r\n }\r\n }\r\n\r\n // getAvailableFeatures() {\r\n // return this.features.filter(f => f.vanitySize+'in' === this.getParent().counterTopSize(this));\r\n // }\r\n\r\n canDisplayDemoPoint(parentObject) {\r\n if (getCurrentRoomType() === LOOK_ROOM_TYPES.as && parentObject.layerPosition === SIDE_POSITIONS[0]) {\r\n return false\r\n }\r\n return this.getParent().vanity_type === VANITY_TYPES.vanity_cabinet\r\n }\r\n}\r\n","import snakeCase from \"lodash/snakeCase\";\r\nimport {Part} from \"../part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport NonVisualizerSubPart from \"../subparts/nonVisualizerSubPart\";\r\n\r\nexport default class Other extends Part {\r\n static id = 'Other';\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Other';\r\n this.categoryEnabled = false;\r\n }\r\n\r\n load(dbFeature) {\r\n // console.log(\"load other\", dbFeature.groupName);\r\n const partId = snakeCase(dbFeature.groupName);\r\n let relatedItem = this.relatedItems.find(relatedItem => relatedItem.partId === partId);\r\n if (!relatedItem) {\r\n relatedItem = new NonVisualizerSubPart(true, partId, dbFeature.groupName);\r\n this.relatedItems.push(relatedItem);\r\n }\r\n relatedItem.getParent = () => this;\r\n relatedItem.load(dbFeature);\r\n return true\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n handleSubPartClick() {\r\n\r\n }\r\n\r\n}\r\n","import {Part} from \"../part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport BackgroundBG from \"../subparts/backgrounds/BackgroundBG\";\r\n\r\nexport default class Background extends Part {\r\n static id = 'Background';\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Background';\r\n this.categoryEnabled = false;\r\n this.relatedGroupNames = [\"Background\"];\r\n }\r\n\r\n load(dbFeature, loadFeature = true) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Background\":\r\n switch (true) {\r\n case (!loadFeature || (dbFeature.displayName && dbFeature.displayName.includes(\"Background - BG\"))):\r\n relatedItemName = \"backgroundBG\";\r\n RelatedItemClass = BackgroundBG;\r\n break;\r\n }\r\n break;\r\n default:\r\n break;\r\n }\r\n return this.loadCommon(relatedItemName, RelatedItemClass, dbFeature, loadFeature)\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n handleSubPartClick() {\r\n\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {Shower} from \"../../parts/shower\";\r\nimport {IS_BATHROOM_OLD_BV_SCENE} from \"../../../../../config\";\r\n\r\nexport default class BackgroundBG extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'background_bg';\r\n this.partName = 'Background BG';\r\n this.windowNeededLayouts = [1];\r\n }\r\n\r\n getArrayOfConditions() {\r\n const layout = this.getParent().layout;\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n // const windowParent = layout.parts[WindowParent.id];\r\n const showerParent = layout.parts[Shower.id];\r\n\r\n // const windowBody = windowParent.windowBody;\r\n // if (windowBody && this.windowNeededLayouts.includes(layout.type)) {\r\n // conditions.push({\r\n // propName: \"Window\",\r\n // propValue: (windowBody && windowBody.activeFeature && windowBody.disabled) ? \"Off\" : \"On\"\r\n // })\r\n // }\r\n\r\n if (showerParent && showerParent.showerSize() && !IS_BATHROOM_OLD_BV_SCENE) {\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerParent.showerSize()\r\n })\r\n }\r\n\r\n return conditions\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Background.BackgroundBG;\r\n }\r\n }\r\n}\r\n","import TubCommon from \"./tubCommon\";\r\n\r\nexport default class BathTubLiner extends TubCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = \"bathtub_liner\";\r\n this.bottomTubId = \"bathtub_liner\";\r\n this.visible = true;\r\n this.partName = \"Tub Liner\";\r\n this.translateId = \"visualizer.bathroom.shower_tub_combo.bathtub_liner\";\r\n this.dbName = \"Bathtub Liner\";\r\n this.isStoneFeature = false;\r\n this.disableOnHomeSections = true;\r\n }\r\n}\r\n","import TubCommon from \"./tubCommon\";\r\nimport {IS_LIXIL_SERVERS} from \"../../../../../config\";\r\n\r\nexport default class ReplacementTub extends TubCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'replacement_tub';\r\n this.bottomTubId = \"replacement_tub\";\r\n this.visible = true;\r\n this.partName = 'Replacement Tub';\r\n this.translateId = \"visualizer.bathroom.shower_tub_combo.replacement_tub\";\r\n this.isStoneFeature = false;\r\n this.disableOnHomeSections = true;\r\n this.canBeDisabled = IS_LIXIL_SERVERS; // request by Lixil\r\n if (isChild) {\r\n this.oneLayerPosition = true;\r\n }\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n return this.navigationSubItemsWithSides(filters, searchText);\r\n }\r\n}\r\n","import TubCommon from \"./tubCommon\";\r\nimport {getSkuWithoutDot} from \"../../../lookNavigation/lookFunctions2\";\r\n\r\nexport default class WalkInTub extends TubCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'walk_in_tub';\r\n this.bottomTubId = \"walk_in_tub\";\r\n this.visible = true;\r\n this.partName = 'Walk In Tub';\r\n this.translateId = \"visualizer.bathroom.shower_tub_combo.walk_in_tub\";\r\n this.isStoneFeature = false;\r\n if (isChild) {\r\n this.oneLayerPosition = true;\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n dbFeature.metaData[\"layerPosition\"] = dbFeature.metaData[\"Side\"] ? dbFeature.metaData[\"Side\"][0] : \"\";\r\n if (dbFeature.metaData[\"ActualDisplayedName\"] && dbFeature.metaData[\"ActualDisplayedName\"][0]) {\r\n dbFeature.metaData[\"ActualDisplayedName\"] = getSkuWithoutDot(dbFeature.metaData[\"ActualDisplayedName\"][0]);\r\n } else {\r\n dbFeature.metaData[\"ActualDisplayedName\"] = getSkuWithoutDot(dbFeature.sharedFeatureName);\r\n }\r\n return super.load_(dbFeature, new WalkInTub());\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n return this.navigationSubItemsWithSides(filters, searchText);\r\n }\r\n\r\n}\r\n","import TubCommon from \"./tubCommon\";\r\n\r\nexport default class JettedTub extends TubCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'jetted_tub';\r\n this.bottomTubId = \"jetted_tub\";\r\n this.visible = true;\r\n this.partName = 'Jetted Tub';\r\n this.translateId = \"visualizer.bathroom.shower_tub_combo.jetted_tub\";\r\n this.isStoneFeature = false;\r\n this.disableOnHomeSections = true;\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class WallConfiguration extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'wall_configuration';\r\n this.partName = 'Wall Configuration';\r\n this.translateId = \"visualizer.bathroom.shower_tub_combo.wall_configuration\";\r\n this.visible = true;\r\n this.isStoneFeature = false;\r\n this.disableOnHomeSections = true;\r\n this.createdManually = true;\r\n }\r\n\r\n // setLayers(layout) {\r\n // this.activeFeature = this.features.find((feature) => {\r\n // return feature.partName === this.getParent().showerBody.activeFeature.partName // set the same glass as Body\r\n // });\r\n // return super.setLayers(layout);\r\n // }\r\n\r\n handleClick() {\r\n super.handleClick();\r\n const showerTubComboParent = this.getParent().getParent();\r\n showerTubComboParent.setShowerTubCombo();\r\n showerTubComboParent.setShowerSize(this.leftShowerWallType, this.showerComboSize);\r\n this.featureClicked();\r\n }\r\n\r\n setZIndex() {}\r\n}\r\n","import TubCommon from \"./tubCommon\";\r\n\r\nexport default class WalkInTubFixture extends TubCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'walk_in_tub_fixture';\r\n this.visible = true;\r\n this.partName = 'Walk In Tub Fixture';\r\n this.translateId = \"visualizer.bathroom.shower_tub_combo.walk_in_tub_fixture\";\r\n this.bottomTubId = \"walk_in_tub\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n getArrayOfConditions() {\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n const showerComboParent = this.getParent();\r\n if (showerComboParent.walkInTub && showerComboParent.walkInTub.activeFeature\r\n && !showerComboParent.walkInTub.disabled) {\r\n conditions.push({\r\n propName: \"MatchingFeature\",\r\n propValue: showerComboParent.walkInTub.activeFeature.metaData[\"ActualDisplayedName\"]\r\n });\r\n }\r\n return conditions\r\n }\r\n\r\n}\r\n","import TubCommon from \"./tubCommon\";\r\nimport {Shower} from \"../../parts/shower\";\r\nimport {createParentPositions, LOOK_ROOM_TYPES, METADATA, ShowerHeadTypes} from \"../../constants\";\r\nimport {getCurrentRoomType} from \"../../../../appLayout\";\r\n\r\nexport default class ReplacementTubFixture extends TubCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'replacement_tub_fixture';\r\n this.visible = true;\r\n this.partName = 'Replacement Tub Fixture';\r\n this.dbName = 'Replacement tub Fixture';\r\n this.translateId = \"visualizer.bathroom.shower_tub_combo.replacement_tub_fixture\";\r\n this.bottomTubId = \"replacement_tub\";\r\n this.canBeDisabled = true;\r\n if (isChild) {\r\n createParentPositions(this);\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n if (!dbFeature.metaData[\"Side\"] || (Array.isArray(dbFeature.metaData[\"Side\"]) && dbFeature.metaData[\"Side\"][0] === \"0\")) {\r\n dbFeature.metaData[\"Side\"] = [METADATA.LeftSide];\r\n }\r\n dbFeature.metaData[\"layerPosition\"] = dbFeature.metaData[\"Side\"] ? dbFeature.metaData[\"Side\"][0] : \"\";\r\n if (Array.isArray(dbFeature.metaData[\"ShowerSize\"]) && dbFeature.metaData[\"ShowerSize\"].includes(\"0\")) {\r\n dbFeature.metaData[\"ShowerSize\"] = [METADATA.ALL];\r\n }\r\n return super.load(dbFeature)\r\n }\r\n\r\n handleClick() {\r\n const showerTubComboParent = this.getParent().getParent();\r\n const showerParent = showerTubComboParent.layout.parts[\"Shower\"];\r\n showerParent.setShowerHeadType(ShowerHeadTypes.shower_fixture);\r\n if (getCurrentRoomType() === LOOK_ROOM_TYPES.as) {\r\n if (Array.isArray(this.metaData[\"MountType\"]) && this.metaData[\"MountType\"].includes(\"S\")\r\n && ((showerParent.shower_head_type === ShowerHeadTypes.shower_arm && showerParent.showerArm && !showerParent.showerArm.disabled)\r\n || (showerParent.shower_head_type === ShowerHeadTypes.shower_head_bundle && showerParent.showerHeadBundle && !showerParent.showerHeadBundle.disabled))) {\r\n // store.dispatch(setLookOverlayOpened(LOOK_OVERLAYS.notCompatiblePopup));\r\n // return;\r\n this.applyFeatureIfNotCompatible();\r\n }\r\n }\r\n super.handleClick();\r\n }\r\n\r\n applyFeatureIfNotCompatible() {\r\n const showerParent = this.getParent().getParent();\r\n if (showerParent.showerArm) {\r\n showerParent.showerArm.disabled = true;\r\n }\r\n if (showerParent.showerHead) {\r\n showerParent.showerHead.disabled = true;\r\n }\r\n if (showerParent.showerHeadBundle) {\r\n showerParent.showerHeadBundle.disabled = true;\r\n }\r\n }\r\n\r\n hideLayerCondition() {\r\n const showerTubComboParent = this.getParent();\r\n const showerParent = showerTubComboParent.layout.parts[\"Shower\"];\r\n if (!showerTubComboParent.showerTubComboIsActive || showerTubComboParent.bottomTub === \"walk_in_tub\") { // they don't have repl tub fixture\r\n return false\r\n }\r\n return showerParent.shower_head_type !== ShowerHeadTypes.shower_fixture && this.activeFeature\r\n }\r\n\r\n getArrayOfConditions() {\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n // const showerComboParent = this.getParent();\r\n // if (showerComboParent.replacementTub && showerComboParent.replacementTub.activeFeature\r\n // && !showerComboParent.replacementTub.disabled) {\r\n // conditions.push({\r\n // propName: \"MatchingFeature\",\r\n // propValue: showerComboParent.replacementTub.activeFeature.metaData[\"ActualDisplayedName\"]\r\n // });\r\n // } else if (showerComboParent.walkInTub && showerComboParent.walkInTub.activeFeature\r\n // && !showerComboParent.walkInTub.disabled) {\r\n // conditions.push({\r\n // propName: \"MatchingFeature\",\r\n // propValue: showerComboParent.walkInTub.activeFeature.metaData[\"ActualDisplayedName\"]\r\n // });\r\n // }\r\n const layout = this.getParent().layout;\r\n const showerParent = layout.parts[Shower.id];\r\n const showerSize = showerParent.showerSize();\r\n if (showerParent && showerSize) {\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerSize\r\n });\r\n }\r\n return conditions\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {METADATA, LOOK_ROOM_TYPES, ShowerHeadTypes, createParentPositions, ShowerComboTubType} from \"../../constants\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\nimport {getCurrentRoomType} from \"../../../../appLayout\";\r\nimport {IS_LIXIL_SERVERS} from \"../../../../../config\";\r\n// import {setLookOverlayOpened} from \"../../../../../actions/lookFunctions\";\r\n// import store from \"../../../../../store\";\r\n\r\nexport default class ShowerFixture extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_fixture';\r\n this.partName = 'Fixture';\r\n this.translateId = \"visualizer.bathroom.shower.shower_fixture\";\r\n this.dbName = 'Shower Fixture';\r\n this.layerPriority = 4;\r\n this.canBeDisabled = true;\r\n if (isChild) {\r\n createParentPositions(this);\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n if (!dbFeature.metaData[\"Side\"] || (Array.isArray(dbFeature.metaData[\"Side\"]) && dbFeature.metaData[\"Side\"][0] === \"0\")) {\r\n dbFeature.metaData[\"Side\"] = [METADATA.LeftSide];\r\n }\r\n dbFeature.metaData[\"layerPosition\"] = dbFeature.metaData[\"Side\"] ? dbFeature.metaData[\"Side\"][0] : \"\";\r\n if (dbFeature.isFromAsRoom) {\r\n // Eugene Balan: добавил для Shower Fixture в метадату MountType значения для бандлов\r\n // S - прячем эти группы Shower Arm, Shower Head (т.к. они уже включены в набор)\r\n // T - показываем только если включен Replacement Tub + тоже что и S + прячем Tub Spout\r\n // 0 - можем показывать группы Shower Arm, Shower Head, Tub Spout (если включен Replacement Tub)\r\n // 0 - Hand Shower Kit должен показываться вместе с shower fixture у которых MountType: 0\r\n // if (Array.isArray(dbFeature.metaData[\"MountType\"]) && !dbFeature.metaData[\"MountType\"].includes(\"T\")) {\r\n // dbFeature.metaData[\"MountType\"].push(METADATA.ALL)\r\n // }\r\n if (!Array.isArray(dbFeature.metaData[\"MountType\"])) {\r\n console.log(\"alarm, alarm , this shower fixture has no MountType metadata!\", dbFeature);\r\n }\r\n if (Array.isArray(dbFeature.metaData[\"ShowerSize\"]) && dbFeature.metaData[\"ShowerSize\"].includes(\"0\")) {\r\n dbFeature.metaData[\"ShowerSize\"] = [METADATA.ALL];\r\n }\r\n }\r\n return super.load(dbFeature)\r\n }\r\n\r\n handleClick() {\r\n const showerParent = this.getParent().getParent();\r\n showerParent.setShowerHeadType(ShowerHeadTypes.shower_fixture);\r\n if (getCurrentRoomType() === LOOK_ROOM_TYPES.as) {\r\n if (Array.isArray(this.metaData[\"MountType\"]) && this.metaData[\"MountType\"].includes(\"S\")\r\n && ((showerParent.shower_head_type === ShowerHeadTypes.shower_arm && showerParent.showerArm && !showerParent.showerArm.disabled)\r\n || (showerParent.shower_head_type === ShowerHeadTypes.shower_head_bundle && showerParent.showerHeadBundle && !showerParent.showerHeadBundle.disabled))) {\r\n // store.dispatch(setLookOverlayOpened(LOOK_OVERLAYS.notCompatiblePopup));\r\n // return;\r\n this.applyFeatureIfNotCompatible();\r\n }\r\n }\r\n super.handleClick();\r\n }\r\n\r\n hideLayerCondition() {\r\n const showerParent = this.getParent();\r\n const showerTubComboParent = showerParent.layout.parts[\"Shower Tub Combo\"];\r\n if (showerTubComboParent && showerTubComboParent.showerTubComboIsActive\r\n && showerTubComboParent.bottomTub !== \"walk_in_tub\" && !IS_LIXIL_SERVERS) { // they don't have repl tub fixture\r\n return true\r\n }\r\n return showerParent.shower_head_type !== ShowerHeadTypes.shower_fixture && this.activeFeature\r\n }\r\n\r\n applyFeatureIfNotCompatible() {\r\n const showerParent = this.getParent().getParent();\r\n if (showerParent.showerArm) {\r\n showerParent.showerArm.disabled = true;\r\n }\r\n if (showerParent.showerHead) {\r\n showerParent.showerHead.disabled = true;\r\n }\r\n if (showerParent.showerHeadBundle) {\r\n showerParent.showerHeadBundle.disabled = true;\r\n }\r\n }\r\n\r\n getArrayOfConditions() {\r\n const showerParent = this.getParent();\r\n if (getCurrentRoomType(showerParent.layout) === LOOK_ROOM_TYPES.as) {\r\n const showerComboParent = showerParent.layout.parts[ShowerTubCombo.id];\r\n\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n const showerSize = showerParent.showerSize();\r\n if (showerSize) {\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerSize\r\n })\r\n }\r\n conditions.push({\r\n propName: \"MountType\",\r\n propValue: (showerComboParent && showerParent.showerTubComboIsActive()\r\n && showerComboParent.bottomTub === ShowerComboTubType.replacement_tub) ? \"T\" : \"S\"\r\n })\r\n return conditions\r\n }\r\n return super.getArrayOfConditions()\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport Walls from \"../../parts/walls\";\r\n\r\nexport default class ShowerScreen extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_screen';\r\n this.partName = 'Shower Screen';\r\n this.translateId = \"visualizer.bathroom.shower.shower_screen\";\r\n this.layerPriority = 12;\r\n this.canBeDisabled = true;\r\n }\r\n\r\n handleClick() {\r\n const wallParent = this.getParent().getParent().layout.parts[Walls.id];\r\n if (wallParent && wallParent.splitWall) {\r\n wallParent.splitWall.disabled = true;\r\n }\r\n super.handleClick();\r\n }\r\n\r\n setLayers(layout) {\r\n const wallParent = layout.parts[Walls.id];\r\n if (wallParent && wallParent.splitWall && wallParent.splitWall.activeFeature && !wallParent.splitWall.disabled) {\r\n super.hideLayers();\r\n return;\r\n }\r\n return super.setLayers(layout);\r\n }\r\n\r\n}\r\n","import WallCommon from \"./wallCommon\";\r\nimport {createPageToLoadArray} from \"../../constants\";\r\n\r\nexport default class LeftWall extends WallCommon {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'left_wall';\r\n this.partName = 'Left Wall';\r\n this.dbName = 'Left Wall';\r\n this.translateId = \"visualizer.bathroom.walls.left_wall\";\r\n this.activeFeatureBeforeAllWalls = null;\r\n this.allWallsApplied = true;\r\n this.isStoneFeature = true;\r\n this.hasAdditionalParts = true;\r\n this.additionalPartPartId = \"left_wall_crop\";\r\n if (isChild) {\r\n createPageToLoadArray(this);\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n const partNumber = dbFeature.groupName === this.dbName ? 1 : 2;\r\n return super.load_(dbFeature, new LeftWall(false, partNumber),\r\n true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n\r\n}\r\n","import WallCommon from \"./wallCommon\";\r\nimport {createPageToLoadArray} from \"../../constants\";\r\n\r\nexport default class RightWall extends WallCommon {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'right_wall';\r\n this.partName = 'Right Wall';\r\n this.dbName = 'Right Wall';\r\n this.translateId = \"visualizer.bathroom.walls.right_wall\";\r\n this.activeFeatureBeforeAllWalls = null;\r\n this.allWallsApplied = true;\r\n this.isStoneFeature = true;\r\n this.hasAdditionalParts = true;\r\n this.additionalPartPartId = \"right_wall_crop\";\r\n if (isChild) {\r\n createPageToLoadArray(this);\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n const partNumber = dbFeature.groupName === this.dbName ? 1 : 2;\r\n return super.load_(dbFeature, new RightWall(false, partNumber),\r\n true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n\r\n}\r\n\r\n","import WallCommon from \"./wallCommon\";\r\nimport {createPageToLoadArray} from \"../../constants\";\r\n\r\nexport default class CenterWall extends WallCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'center_wall';\r\n this.partName = 'Center Wall';\r\n this.translateId = \"visualizer.bathroom.walls.center_wall\";\r\n this.activeFeatureBeforeAllWalls = null;\r\n this.allWallsApplied = true;\r\n this.isStoneFeature = true;\r\n if (isChild) {\r\n createPageToLoadArray(this);\r\n }\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes) {\r\n const zIndex = zIndexes.Background.CenterWall;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n }\r\n}\r\n","import WallCommon from \"./wallCommon\";\r\nimport {createPageToLoadArray} from \"../../constants\";\r\n\r\nexport default class BackWall extends WallCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'back_wall';\r\n this.partName = 'Back Wall';\r\n this.translateId = \"visualizer.bathroom.walls.back_wall\";\r\n this.activeFeatureBeforeAllWalls = null;\r\n this.allWallsApplied = true;\r\n this.isStoneFeature = true;\r\n if (isChild) {\r\n createPageToLoadArray(this);\r\n }\r\n }\r\n}\r\n","import WallCommon from \"./wallCommon\";\r\n\r\nexport default class Ceiling extends WallCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'walls_ceiling';\r\n this.partName = 'Ceiling';\r\n this.translateId = \"visualizer.kitchen.walls.walls_ceiling\";\r\n this.isStoneFeature = true;\r\n }\r\n}\r\n","import WallCommon from \"./wallCommon\";\r\nimport {createPageToLoadArray} from \"../../constants\";\r\n\r\nexport default class FrontWall extends WallCommon {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'front_wall';\r\n this.partName = 'Front Wall';\r\n this.dbName = 'Front Wall';\r\n this.translateId = \"visualizer.bathroom.walls.front_wall\";\r\n this.activeFeatureBeforeAllWalls = null;\r\n this.allWallsApplied = true;\r\n this.isStoneFeature = true;\r\n this.hasAdditionalParts = true;\r\n this.additionalPartPartId = \"front_wall_crop\";\r\n if (isChild) {\r\n createPageToLoadArray(this);\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n const partNumber = dbFeature.groupName === this.dbName ? 1 : 2;\r\n return super.load_(dbFeature, new FrontWall(false, partNumber),\r\n true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n\r\n}\r\n","import WallCommon from \"./wallCommon\";\r\nimport {Shower} from \"../../parts/shower\";\r\nimport {createPageToLoadArray} from \"../../constants\";\r\n\r\nexport default class SplitWall extends WallCommon {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'split_wall';\r\n this.partName = 'Split Wall';\r\n this.translateId = \"visualizer.bathroom.walls.split_wall\";\r\n this.activeFeatureBeforeAllWalls = null;\r\n this.allWallsApplied = true;\r\n this.isStoneFeature = true;\r\n // this.hasAdditionalParts = true;\r\n // this.additionalPartPartId = \"split_wall_crop\";\r\n if (isChild) {\r\n createPageToLoadArray(this);\r\n }\r\n }\r\n\r\n handleClick() {\r\n const showerParent = this.getParent().getParent().layout.parts[Shower.id];\r\n if (showerParent && showerParent.showerScreen) {\r\n showerParent.showerScreen.disabled = true;\r\n }\r\n super.handleClick();\r\n }\r\n\r\n // setLayers(layout) { // we can't enable it since nothing will be selected on the very first load\r\n // const wallParent = layout.parts[Shower.id];\r\n // if (wallParent && wallParent.showerScreen && !wallParent.showerScreen.disabled) {\r\n // super.hideLayers();\r\n // return;\r\n // }\r\n // return super.setLayers(layout);\r\n // }\r\n\r\n}\r\n\r\n","import WallCommon from \"./wallCommon\";\r\nimport {createPageToLoadArray} from \"../../constants\";\r\n\r\nexport default class LeftWallSplitter extends WallCommon {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'left_wall_splitter';\r\n this.partName = 'Left Wall Splitter';\r\n this.translateId = \"visualizer.bathroom.walls.left_wall_splitter\";\r\n this.activeFeatureBeforeAllWalls = null;\r\n this.allWallsApplied = true;\r\n this.isStoneFeature = true;\r\n // this.hasAdditionalParts = true;\r\n // this.additionalPartPartId = \"split_wall_crop\";\r\n if (isChild) {\r\n createPageToLoadArray(this);\r\n }\r\n }\r\n}\r\n\r\n","import WallCommon from \"./wallCommon\";\r\n\r\nexport default class CeilingPanels extends WallCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'ceiling_panels';\r\n this.partName = 'Ceiling Panels';\r\n this.translateId = \"visualizer.bathroom.ceiling_panels\";\r\n this.isStoneFeature = true;\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class ShowerGlass extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_glass';\r\n this.partName = 'Shower Glass';\r\n this.translateId = \"visualizer.bathroom.shower.shower_glass\";\r\n this.layerPriority = 12;\r\n this.canBeDisabled = true;\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {Vanity} from \"../../parts/vanity\";\r\n\r\nimport {LayoutType} from \"../../constants\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\nimport {\r\n custom30in15X4Shower,\r\n custom30in30X8Shower,\r\n custom30inPonyShower,\r\n custom60in15X4Shower,\r\n custom60in30X8Shower,\r\n custom60inPonyShower\r\n} from \"../../../../bvComponent/core/assets\";\r\n\r\nexport default class ShowerBody extends IntermediatePart {\r\n\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partId = 'shower_body';\r\n this.partName = 'Shower Body';\r\n this.translateId = \"visualizer.bathroom.shower.shower_body\";\r\n this.homePageTitle = 'Shower Doors & Glass';\r\n this.partNumber = partNumber;\r\n this.activeFeatureParts = [];\r\n this.canBeDisabled = false;\r\n this.placeholderChanged = true; // never show placeholder to body\r\n this.firstClick = {\r\n \"0\": true // never show placeholder to body\r\n }\r\n this.layerPriority = 1;\r\n this.createdManually = true;\r\n }\r\n\r\n load(dbFeature) {\r\n const loadedShowerBody = super.load_(dbFeature, new ShowerBody());\r\n if (loadedShowerBody) { // it can be false (just skip it)\r\n const featureName = loadedShowerBody.dbFeature.sharedFeatureName;\r\n loadedShowerBody.featureName = featureName;\r\n loadedShowerBody.showerBodyType = 'Custom';\r\n loadedShowerBody.showerDimensions = this.loadShowerDimensions(featureName);\r\n loadedShowerBody.metaData = this.loadShowerMetaData(featureName, loadedShowerBody.showerDimensions);\r\n loadedShowerBody.showerBodyId = featureName.toLowerCase().replace(/ /gi, \"-\");\r\n loadedShowerBody.notAvailableInVisualizer = false;\r\n if (!loadedShowerBody.dbFeature.thumbnailUrl) {\r\n loadedShowerBody.customThumbnail = this.loadThumbnail(featureName)\r\n }\r\n }\r\n return loadedShowerBody\r\n }\r\n\r\n loadShowerDimensions(featureName = this.activeFeature.featureName) {\r\n switch (true) {\r\n case featureName.includes(\"15X4\"):\r\n return \"15X4\"\r\n case featureName.includes(\"Pony\"):\r\n return \"Pony\"\r\n case featureName.includes(\"30X8\"):\r\n default:\r\n return \"30X8\"\r\n }\r\n }\r\n\r\n loadShowerMetaData(featureName = this.activeFeature.featureName, showerDimensions) {\r\n const featureNameSplitted = featureName.split(\"in\")[0];\r\n return {\r\n \"ShowerSize\": featureNameSplitted.length > 1 ? [featureNameSplitted.substr(featureNameSplitted.length - 2)] : ['60'],\r\n \"CountertopSize\": showerDimensions === \"30X8\" ? [\"72in\"] : [\"20in\", \"24in\", \"30in\", \"36in\", \"48in\", \"60in\"]\r\n }\r\n }\r\n\r\n loadThumbnail(featureName = this.activeFeature.featureName) {\r\n switch (true) {\r\n case featureName.includes(\"15X4\"):\r\n return featureName.includes(\"30in\") ? custom30in15X4Shower : custom60in15X4Shower\r\n case featureName.includes(\"Pony\"):\r\n return featureName.includes(\"30in\") ? custom30inPonyShower : custom60inPonyShower\r\n case featureName.includes(\"30X8\"):\r\n default:\r\n return featureName.includes(\"30in\") ? custom30in30X8Shower : custom60in30X8Shower\r\n }\r\n }\r\n\r\n handleClick() {\r\n const parent = this.getParent();\r\n if (parent.getParent && parent.getParent()) {\r\n super.handleClick();\r\n parent.activeFeatureParts = parent.setActiveFeatureParts();\r\n } else {\r\n parent.showerBody.activeFeature = this;\r\n }\r\n this.getParent().showerBodySelectedByUser = true;\r\n const shower = this.getParent().layout ? this.getParent() : this.getParent().getParent(); // workaround for complete & custom click\r\n if (shower.showerTubComboIsActive) {\r\n const comboPart = shower.layout.parts[ShowerTubCombo.id];\r\n comboPart.showerTubComboIsActive = false;\r\n }\r\n this.featureClicked();\r\n }\r\n\r\n disabledClick() {\r\n const showerParent = this.getParent();\r\n showerParent.relatedItems.forEach((relItem) => {\r\n relItem.disabled = this.disabled;\r\n if (relItem.activeFeatureParts && relItem.activeFeatureParts.length) {\r\n relItem.activeFeatureParts.forEach((activeFeaturePart) => {\r\n if (activeFeaturePart) {\r\n activeFeaturePart.disabled = this.disabled\r\n }\r\n });\r\n }\r\n });\r\n if (showerParent.layout && showerParent.showerTubComboIsActive) {\r\n const comboPart = showerParent.layout.parts[ShowerTubCombo.id];\r\n comboPart.showerTubComboIsActive = false;\r\n }\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n const wallParent = showerParent.layout.parts.Walls;\r\n wallParent.wallExL.disabled = this.disabled;\r\n // wallParent.wallExR.disabled = this.disabled;\r\n\r\n const bathtubParent = showerParent.layout.parts.Bathtub;\r\n\r\n if (showerParent.layout.type === LayoutType.Small && !this.disabled && bathtubParent) { // switch off all bathtub features\r\n if (bathtubParent.bathTubBody) {\r\n bathtubParent.bathTubBody.disabled = true;\r\n }\r\n if (bathtubParent.bathTubBody) {\r\n bathtubParent.bathTubBase.disabled = true;\r\n bathtubParent.bathTubBase.disabledClick();\r\n }\r\n }\r\n }\r\n\r\n availableFeatures(filters) {\r\n const layout = this.getParent().layout;\r\n const filteredAvailableFeatures = filters ? super.getFilteredFeaturesByFilters(filters) : this.features;\r\n const counterTopSize = layout.parts[Vanity.id].counterTopSize(this);\r\n return filteredAvailableFeatures.filter((feature) => {\r\n if (counterTopSize === '72in' && layout.type === 1) {\r\n return feature.showerDimensions === \"30X8\" || feature.showerDimensions === \"Pony\"\r\n }\r\n return true\r\n })\r\n }\r\n\r\n getArrayOfConditions() {\r\n return []\r\n }\r\n\r\n setActiveFeatureParts() {\r\n const activeFeatureParts = (this.activeFeature && this.activeFeature.partNumber) ? this.featuresParts.filter((feature) => {\r\n return feature.partName === this.activeFeature.partName\r\n }) : [];\r\n activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n return activeFeatureParts\r\n }\r\n\r\n setDefault() {\r\n const availableFeatures = this.availableFeatures();\r\n const layout = this.getParent().layout;\r\n let hardCodedDefault = availableFeatures.find((feature) => {\r\n return feature.partName === \"Custom B 60in 15X4\";\r\n });\r\n const counterTopSize = layout.parts[Vanity.id].counterTopSize(this);\r\n if (counterTopSize === '72in' && layout.type === 1 && this.activeFeature) {\r\n hardCodedDefault = availableFeatures.find((feature) => {\r\n return this.activeFeature.partName.includes(\"60in\")\r\n ? feature.partName.includes(\"60in\")\r\n : feature.partName.includes(\"30in\")\r\n });\r\n }\r\n this.activeFeature = hardCodedDefault || availableFeatures[0];\r\n this.activeFeatureParts = this.setActiveFeatureParts();\r\n }\r\n\r\n setLayers(layout) {\r\n if (this.getParent().showerTubComboIsActive()) {\r\n super.hideLayers();\r\n return;\r\n }\r\n super.setLayers(layout);\r\n }\r\n\r\n setZIndex() {}\r\n\r\n changeLayout(layoutType) {\r\n if (layoutType === 1 && this.disabled) {\r\n this.disabled = false;\r\n this.disabledClick();\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport Walls from \"../../parts/walls\";\r\nimport {getCurrentRoomType} from \"../../../../appLayout\";\r\nimport {createPageToLoadArray, LOOK_ROOM_TYPES} from \"../../constants\";\r\n\r\nexport default class ShowerWall extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_wall';\r\n this.partName = 'Shower Wall';\r\n this.translateId = \"visualizer.bathroom.shower.shower_wall\";\r\n this.homePageTitle = 'Interior Shower Walls';\r\n this.isStoneFeature = true;\r\n this.canUseWizard = true;\r\n this.layerPriority = 2;\r\n if (isChild) {\r\n createPageToLoadArray(this);\r\n }\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n const showerParent = this.getParent();\r\n const showerSize = showerParent ? showerParent.showerSize() : null;\r\n if (showerSize) {\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerSize\r\n })\r\n }\r\n // if (wallParent && wallParent.splitWallType) {\r\n // conditions.push({\r\n // propName: \"SplitWallType\",\r\n // propValue: wallParent.splitWallType\r\n // })\r\n // }\r\n const wallParent = showerParent.layout.parts[Walls.id];\r\n if (getCurrentRoomType(showerParent.layout) === LOOK_ROOM_TYPES.as && wallParent && wallParent.splitWall) {\r\n conditions.push({\r\n propName: \"SplitWallType\",\r\n propValue: wallParent.getSplitWallType()\r\n })\r\n }\r\n return conditions\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {getFeatureIsLocked} from \"../../../../../misc/helpers\";\r\n\r\nexport default class ShowerWallAccent extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = \"shower_wall_accent\";\r\n this.partName = \"Shower Walls Accent\";\r\n this.translateId = \"visualizer.bathroom.shower.shower_wall_accent\";\r\n this.dbName = \"Shower Wall Accent\";\r\n this.homePageTitle = 'Interior Shower Walls';\r\n this.isStoneFeature = true;\r\n this.canUseWizard = true;\r\n this.layerPriority = 2;\r\n }\r\n\r\n handleClick(ignoreLocked) {\r\n const parent = this.getParent();\r\n super.handleClick(ignoreLocked);\r\n const shower = parent.getParent();\r\n if (shower.showerWallAccent && shower.showerWallAccent.canBeDisabled\r\n && !shower.showerWallAccent.placeholderChanged && !getFeatureIsLocked(this)) {\r\n shower.showerWallAccent.disabled = true;\r\n shower.showerWallAccent.disabledClick();\r\n }\r\n this.featureClicked();\r\n }\r\n\r\n getArrayOfConditions() {\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n const showerParent = this.getParent();\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerParent.showerSize()\r\n });\r\n return conditions\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.ShowerWallAccent;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {getFeatureIsLocked} from \"../../../../../misc/helpers\";\r\n// import {ShowerComboTubType} from \"../../constants\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\nimport {ShowerAccessories} from \"../../parts/showerAccessories\";\r\nimport {removeLookPointFor} from \"../../../lookNavigation/lookFunctions2\";\r\nimport {getCurrentRoomType} from \"../../../../appLayout\";\r\nimport {LayoutType, LOOK_ROOM_TYPES, METADATA, ShowerComboTubType} from \"../../constants\";\r\nimport {IS_QKB_UI} from \"../../../../../config\";\r\n\r\nexport default class ShowerDoor extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_door';\r\n this.partName = 'Shower Door';\r\n this.translateId = \"visualizer.bathroom.shower.shower_door\";\r\n this.visible = true;\r\n this.isStoneFeature = false;\r\n this.canBeDisabled = true;\r\n this.layerPriority = 5;\r\n\r\n /* only shower door properties */\r\n if (isChild) {\r\n this.previouslySelectedFeatures = {};\r\n this.oneLayerPosition = true;\r\n Object.keys(LayoutType).forEach(layoutName => {\r\n this.previouslySelectedFeatures[layoutName] = {};\r\n })\r\n }\r\n this.currentShowerBodyId = \"\"; // for example \"custom-a-60in-30x8\"\r\n }\r\n\r\n load(dbFeature) {\r\n if (!dbFeature.metaData[\"Side\"]) {\r\n dbFeature.metaData[\"Side\"] = [METADATA.LeftSide];\r\n }\r\n dbFeature.metaData[\"layerPosition\"] = dbFeature.metaData[\"Side\"] ? dbFeature.metaData[\"Side\"][0] : \"\";\r\n dbFeature.lixilProductSubCategory = \"Shower Doors\"; // because some of them are missing this subcategory!\r\n return super.load(dbFeature);\r\n }\r\n\r\n navigationSubItems(...props) {\r\n if (IS_QKB_UI) {\r\n return this.navigationSubItemsWithSides(...props);\r\n }\r\n return super.navigationSubItems(...props);\r\n }\r\n\r\n disabledClick() {\r\n const showerParent = this.getParent();\r\n const showerDoorHandle = showerParent.showerDoorHandle;\r\n if (showerDoorHandle && showerDoorHandle) {\r\n showerDoorHandle.disabled = this.disabled || !showerDoorHandle.canBeEnabled(); // true or check if it can be enabled;\r\n }\r\n const accParent = showerParent.layout.parts[ShowerAccessories.id]\r\n if (!this.disabled && accParent && accParent.showerRod && !accParent.showerRod.disabled\r\n && accParent.showerRod) {\r\n accParent.showerRod.disabled = true\r\n }\r\n }\r\n\r\n handleClick() {\r\n super.handleClick();\r\n if (!this.notAvailableInVisualizer && !getFeatureIsLocked(this)) {\r\n // this.getParent().getParent().setShowerTubCombo();\r\n // let doorWithLiner = false;\r\n // if(this.metaData && this.metaData.length) {\r\n // const activeDoorMetadata = this.metaData.find(metaDataObject => metaDataObject.isFor);\r\n // const showerPanValues = activeDoorMetadata.conditions.find(condition => condition.name === \"BathtubLiner\");\r\n // if (showerPanValues) {\r\n // doorWithLiner = true;\r\n // }\r\n // }\r\n // this.getParent().getParent().setLinerActive(doorWithLiner);\r\n const shower = this.getParent().getParent();\r\n const showerPanCondition = this.metaData[\"ShowerPan\"];\r\n if (!shower.showerTubComboIsActive()) {\r\n shower.showerFloorIsActive = showerPanCondition && showerPanCondition.includes(\"Threshold\");\r\n }\r\n const accParent = shower.layout.parts[ShowerAccessories.id]\r\n if (accParent && accParent.showerRod && !accParent.showerRod.disabled) {\r\n accParent.showerRod.disabled = true\r\n }\r\n if(!this.matchesMetaForArrayOfConditions(this.getParent().getArrayOfConditions())) {\r\n const showerSizeValues = this.metaData[\"ShowerSize\"];\r\n const showerBodyParent = this.getParent().getParent().showerBody;\r\n if (showerSizeValues) {\r\n const showerBodyThatFits = showerBodyParent.features.filter(showerBodyFeature => {\r\n const showerSizeValues2 = showerBodyFeature.metaData[\"ShowerSize\"];\r\n return showerSizeValues.some(condValue => {\r\n return showerSizeValues2.some(condValue2 => condValue === condValue2);\r\n });\r\n });\r\n if (showerBodyThatFits.length && showerBodyThatFits.every(shBody => shBody.partName !== showerBodyParent.activeFeature.partName)) {\r\n let showerBodyToSet = showerBodyThatFits.find(shBody => {\r\n return shBody.showerDimensions === showerBodyParent.activeFeature.showerDimensions\r\n }) || showerBodyThatFits[0];\r\n showerBodyParent.showerBodySelectedByUser = true;\r\n showerBodyParent.activeFeature = showerBodyToSet;\r\n }\r\n }\r\n }\r\n this.featureClicked();\r\n }\r\n }\r\n\r\n // setLayers(layout) {\r\n // const showerParent = this.getParent();\r\n // // const comboParent = showerParent.layout.parts[ShowerTubCombo.id];\r\n // // if (showerParent.showerTubComboIsActive() && comboParent.bottomTub === ShowerComboTubType.walk_in_tub) {\r\n // if (showerParent.showerTubComboIsActive()) {\r\n // super.hideLayers();\r\n // return;\r\n // }\r\n // return super.setLayers(layout);\r\n // }\r\n\r\n getArrayOfConditions() {\r\n const showerParent = this.getParent();\r\n const comboParent = showerParent.layout.parts[ShowerTubCombo.id];\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n const showerSize = showerParent.showerSize();\r\n if (showerSize) {\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerSize\r\n })\r\n }\r\n // if (showerParent.showerTubComboIsActive() && comboParent.bottomTub === ShowerComboTubType.replacement_tub\r\n // && comboParent.replacementTub && comboParent.replacementTub.activeFeature && comboParent.replacementTub.activeFeature.metaData[\"ShowerPanHeight\"]) {\r\n // conditions.push({\r\n // propName: \"ShowerPanHeight\",\r\n // propValue: comboParent.replacementTub.activeFeature.metaData[\"ShowerPanHeight\"]\r\n // })\r\n if (showerParent.showerTubComboIsActive()) {\r\n if (comboParent && comboParent.bottomTub === ShowerComboTubType.replacement_tub) {\r\n if (comboParent.replacementTub && comboParent.replacementTub.activeFeature\r\n && comboParent.replacementTub.activeFeature.metaData\r\n && comboParent.replacementTub.activeFeature.metaData[\"ShowerPanHeight\"]) {\r\n conditions.push({\r\n propName: \"ShowerPanHeight\",\r\n propValue: comboParent.replacementTub.activeFeature.metaData[\"ShowerPanHeight\"]\r\n })\r\n }\r\n } else {\r\n conditions.push({\r\n propName: \"NOT_EXISTING_METADATA\",\r\n propValue: \"whatever\"\r\n })\r\n }\r\n } else if (showerParent && showerParent.showerPanCombo\r\n && showerParent.showerPanCombo.activeFeature && showerParent.showerPanCombo.activeFeature.metaData[\"ShowerPanHeight\"]) {\r\n conditions.push({\r\n propName: \"ShowerPanHeight\",\r\n propValue: showerParent.showerPanCombo.activeFeature.metaData[\"ShowerPanHeight\"]\r\n })\r\n }\r\n return conditions\r\n }\r\n\r\n canDisplayDemoPoint(parentObject) {\r\n if (getCurrentRoomType() === LOOK_ROOM_TYPES.as) {\r\n return removeLookPointFor(parentObject, 3, \"1\") && removeLookPointFor(parentObject, 6, \"1\")\r\n }\r\n return true\r\n }\r\n}\r\n","import {Shower} from \"../../parts/shower\";\r\nimport {createParentPositions} from \"../../constants\";\r\nimport AccessoryCommon from \"./accessoryCommon\";\r\n\r\nexport default class LargeCornerSeat extends AccessoryCommon {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'large_corner_seat';\r\n this.partName = 'Large Corner Seat';\r\n this.translateId = \"visualizer.bathroom.accessories.large_corner_seat\";\r\n this.visible = true;\r\n this.canBeDisabled = true;\r\n if (isChild) {\r\n createParentPositions(this);\r\n }\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const showerParent = this.getParent().layout.parts[Shower.id];\r\n if (showerParent && showerParent.showerTubComboIsActive()) { // shower tub combo - remove\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions()))) {\r\n // this.checkIfFeaturePartIsMatching();\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n // setZIndex(zIndexes) {\r\n // if (zIndexes) {\r\n // Object.keys(this.layerPositions).forEach((key, keyIndex) => {\r\n // if (this.layerPositions[key]) {\r\n // this.layerPositions[key].layer.zIndex = zIndexes.Accessories.LargeCornerSeat + keyIndex*10;\r\n // }\r\n // })\r\n // }\r\n // }\r\n\r\n}\r\n\r\n","import {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\nimport {Shower} from \"../../parts/shower\";\r\nimport {createParentPositions, METADATA, SIDE_POSITIONS} from \"../../constants\";\r\nimport AccessoryCommon from \"./accessoryCommon\";\r\n\r\nexport default class SoapDish extends AccessoryCommon {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'soap_dish';\r\n this.partName = 'Soap Dish';\r\n this.translateId = \"visualizer.bathroom.accessories.soap_dish\";\r\n this.visible = true;\r\n this.canBeDisabled = true;\r\n if (isChild) {\r\n createParentPositions(this);\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n dbFeature.metaData[\"layerPosition\"] = dbFeature.metaData[\"Side\"] ? dbFeature.metaData[\"Side\"][0] : METADATA.LeftSide;\r\n const partNumber = dbFeature.metaData[\"layerPosition\"] === SIDE_POSITIONS[0] ? 1 : 2;\r\n return super.load_(dbFeature, new SoapDish(false, partNumber),\r\n true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n\r\n disabledClick() {\r\n if (!this.disabled && this.activeFeature) {\r\n this.activeFeature.handleClick() // check soapDish\r\n }\r\n }\r\n\r\n availableFeatures(features) {\r\n return features.filter(feature => feature.partNumber === 1)\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const showerParent = this.getParent().layout.parts[Shower.id];\r\n const showerComboParent = layout.parts[ShowerTubCombo.id];\r\n\r\n if (showerParent && showerComboParent && showerParent.showerTubComboIsActive() && showerComboParent.bottomTub === \"walk_in_tub\") {\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n const conditions = this.getArrayOfConditions();\r\n if ((this.activeFeature && this.activeFeature.matchesMetaForArrayOfConditions(conditions)\r\n || (this.activeFeature && this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n // setZIndex(zIndexes) {\r\n // if (zIndexes) {\r\n // Object.keys(this.layerPositions).forEach((key, keyIndex) => {\r\n // if (this.layerPositions[key]) {\r\n // this.layerPositions[key].layer.zIndex = zIndexes.Accessories.SoapDish + keyIndex*10;\r\n // }\r\n // })\r\n // }\r\n // }\r\n}\r\n","import {createParentPositions} from \"../../constants\";\r\nimport AccessoryCommon from \"./accessoryCommon\";\r\n\r\nexport default class CornerCaddie extends AccessoryCommon {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'corner_caddie';\r\n this.partName = 'Corner Caddie';\r\n this.translateId = \"visualizer.bathroom.accessories.corner_caddie\";\r\n this.visible = true;\r\n this.canBeDisabled = true;\r\n if (isChild) {\r\n createParentPositions(this);\r\n }\r\n }\r\n\r\n availableFeatures(features) {\r\n return features.filter(feature => feature.partNumber === 1)\r\n }\r\n\r\n handleClick() {\r\n const accessoriesParent = this.getParent().getParent();\r\n accessoriesParent.caddie_type = this.partId;\r\n super.handleClick();\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const accessoriesParent = this.getParent();\r\n if (accessoriesParent.caddie_type !== this.partId) {\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions()))) {\r\n // this.checkIfFeaturePartIsMatching();\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n // setZIndex(zIndexes) {\r\n // if (zIndexes) {\r\n // Object.keys(this.layerPositions).forEach((key, keyIndex) => {\r\n // if (this.layerPositions[key]) {\r\n // this.layerPositions[key].layer.zIndex = zIndexes.Accessories.CornerCaddie + keyIndex*10;\r\n // }\r\n // })\r\n // }\r\n // }\r\n\r\n}\r\n","import {createParentPositions} from \"../../constants\";\r\nimport AccessoryCommon from \"./accessoryCommon\";\r\n\r\nexport default class LargeCornerCaddie extends AccessoryCommon {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'large_corner_caddie';\r\n this.partName = 'Large Corner Caddie';\r\n this.translateId = \"visualizer.bathroom.accessories.large_corner_caddie\";\r\n this.visible = true;\r\n this.canBeDisabled = true;\r\n if (isChild) {\r\n createParentPositions(this);\r\n }\r\n }\r\n\r\n handleClick() {\r\n const accessoriesParent = this.getParent().getParent();\r\n accessoriesParent.caddie_type = this.partId;\r\n super.handleClick();\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const accessoriesParent = this.getParent();\r\n if (accessoriesParent.caddie_type !== this.partId) {\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions()))) {\r\n // this.checkIfFeaturePartIsMatching();\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n // setZIndex(zIndexes) {\r\n // if (zIndexes) {\r\n // Object.keys(this.layerPositions).forEach((key, keyIndex) => {\r\n // if (this.layerPositions[key]) {\r\n // this.layerPositions[key].layer.zIndex = zIndexes.Accessories.LargeCornerCaddie + keyIndex*10;\r\n // }\r\n // })\r\n // }\r\n // }\r\n\r\n}\r\n","import {METADATA, SIDE_POSITIONS} from \"../../constants\";\r\nimport AccessoryCommon from \"./accessoryCommon\";\r\nimport {Shower} from \"../../parts/shower\";\r\n\r\nexport default class GrabBar extends AccessoryCommon {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'grab_bar';\r\n this.partName = 'Grab Bar';\r\n this.translateId = \"visualizer.bathroom.accessories.grab_bar\";\r\n this.visible = true;\r\n this.canBeDisabled = true;\r\n if (isChild) {\r\n this.layerPositions = {\r\n [SIDE_POSITIONS[0]]: null,\r\n [SIDE_POSITIONS[1]]: null,\r\n [SIDE_POSITIONS[2]]: null,\r\n };\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n dbFeature.metaData[\"layerPosition\"] = dbFeature.metaData[\"Side\"] ? dbFeature.metaData[\"Side\"][0] : METADATA.LeftSide;\r\n const partNumber = dbFeature.metaData[\"layerPosition\"] !== SIDE_POSITIONS[1] ? 1 : 2;\r\n return super.load_(dbFeature, new GrabBar(false, partNumber),\r\n true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n\r\n disabledClick() {\r\n if (!this.disabled && this.activeFeature) {\r\n this.activeFeature.handleClick() // check soapDish\r\n }\r\n }\r\n\r\n availableFeatures(features) {\r\n return features.filter(feature => feature.partNumber === 1)\r\n }\r\n\r\n handleClick() { // \"this\" is feature!! not the feature group\r\n super.handleClick();\r\n const parent = this.getParent();\r\n const accessoriesParent = parent.getParent();\r\n const showerParent = accessoriesParent.layout.parts[Shower.id];\r\n const showerSize = showerParent.showerSize();\r\n if (showerSize !== \"60\" && parent.activeFeature) {\r\n parent.layerPositions[parent.activeFeature.metaData[\"layerPosition\"]] = parent.activeFeature;\r\n }\r\n // parent.checkRelatedFeatureGroupPositions(this.metaData[\"layerPosition\"]);\r\n }\r\n\r\n checkCenterGrabWall(clickedPosition) { // L or R and C can't be together\r\n if (!clickedPosition) {\r\n return\r\n }\r\n Object.keys(this.layerPositions).forEach(position => {\r\n if (clickedPosition === \"C\") {\r\n if (position !== \"C\") {\r\n this.layerPositions[position] = null;\r\n }\r\n } else if (position === \"C\") {\r\n this.layerPositions[position] = null;\r\n }\r\n })\r\n }\r\n\r\n checkCurrentPositions(position) {\r\n const feature = this.layerPositions[position];\r\n if (!feature) {\r\n return\r\n }\r\n const nameSplitted = feature.dbFeature.sharedFeatureName.split(\" \");\r\n const size = nameSplitted[nameSplitted.length - 1] ? nameSplitted[nameSplitted.length - 1].replace(\"in\", \"\") : \"\";\r\n const newPosition = position === SIDE_POSITIONS[0] ? SIDE_POSITIONS[1] : SIDE_POSITIONS[0];\r\n if (!size || !this.layerPositions[newPosition]) {\r\n return\r\n }\r\n if (this.layerPositions[newPosition]) {\r\n const nameSplitted2 = this.layerPositions[newPosition].dbFeature.sharedFeatureName.split(\" \");\r\n const size2 = nameSplitted2[nameSplitted2.length - 1] ? nameSplitted2[nameSplitted2.length - 1].replace(\"in\", \"\") : \"\";\r\n if (!size || (+size2 === 12 && +size === 12)) { // last chance to keep other side layer\r\n return;\r\n }\r\n }\r\n this.layerPositions[newPosition] = null;\r\n }\r\n\r\n showLayerPositionsModal(forFeature) {\r\n const showerParent = this.getParent().layout.parts[Shower.id];\r\n if (showerParent.showerSize() !== \"60\") {\r\n return false\r\n }\r\n return super.showLayerPositionsModal(forFeature)\r\n }\r\n\r\n}\r\n","import {CORNER_SHELVES_POSITIONS} from \"../../constants\";\r\nimport AccessoryCommon from \"./accessoryCommon\";\r\n\r\nexport default class CornerShelf extends AccessoryCommon {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = \"corner_shelf\";\r\n this.partName = \"Corner Shelf\";\r\n this.translateId = \"visualizer.bathroom.accessories.corner_shelf\";\r\n this.dbName = \"Small Corner Shelf\";\r\n this.visible = true;\r\n this.canBeDisabled = true;\r\n if (isChild) {\r\n this.layerPositions = {};\r\n CORNER_SHELVES_POSITIONS.forEach(pos => {\r\n this.layerPositions[pos] = null\r\n })\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n dbFeature.metaData[\"layerPosition\"] = (dbFeature.metaData[\"Side\"] && dbFeature.metaData[\"Part\"])\r\n ? dbFeature.metaData[\"Side\"][0] + dbFeature.metaData[\"Part\"][0]\r\n : \"\"\r\n const partNumber = dbFeature.metaData[\"layerPosition\"] === CORNER_SHELVES_POSITIONS[0] ? 1 : 2;\r\n return super.load_(dbFeature, new CornerShelf(false, partNumber),\r\n true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n\r\n handleClick() {\r\n const accessoriesParent = this.getParent().getParent();\r\n accessoriesParent.caddie_type = this.partId;\r\n super.handleClick();\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const accessoriesParent = this.getParent();\r\n if (accessoriesParent.caddie_type !== this.partId) {\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions()))) {\r\n // this.checkIfFeaturePartIsMatching();\r\n super.setLayers(layout);\r\n } else {\r\n this.setDefault();\r\n super.setLayers(layout);\r\n }\r\n\r\n // if (this.layerPositions) {\r\n // const windowParent = this.getParent().layout.parts.Window;\r\n // if (windowParent && windowParent.windowKits && !windowParent.windowKits.disabled) {\r\n // Object.keys(this.layerPositions).forEach(key => {\r\n // if (!key.includes(\"3\") && this.layerPositions[key]) {\r\n // this.layerPositions[key].layer.src = '';\r\n // }\r\n // })\r\n // }\r\n // }\r\n\r\n }\r\n\r\n // setZIndex(zIndexes) {\r\n // if (zIndexes) {\r\n // Object.keys(this.layerPositions).forEach((key, keyIndex) => {\r\n // if (this.layerPositions[key]) {\r\n // this.layerPositions[key].layer.zIndex = zIndexes.Accessories.CornerShelf1 + keyIndex*10;\r\n // }\r\n // })\r\n // }\r\n // }\r\n\r\n showLayerPositionsModal() {\r\n return true\r\n }\r\n\r\n}\r\n","import AccessoryCommon from \"./accessoryCommon\";\r\n// import DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\n\r\nexport default class ShowerPod extends AccessoryCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_pod';\r\n this.partName = 'Shower Pod';\r\n this.translateId = \"visualizer.bathroom.accessories.shower_pod\";\r\n this.dbName = document.kvConfig.userId === 157639 ? 'Storage Pods' : 'Storage Pod'; // window.location.href.includes(\"american_standard_website\")\r\n this.visible = true;\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n if (document.kvConfig.userId !== 157639 && dbFeature.groupName !== 'Storage Pod') {\r\n return false\r\n }\r\n return super.load_(dbFeature, new ShowerPod());\r\n }\r\n\r\n // navigationSubItems(filters, searchText) {\r\n // const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n // const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n // const parent = this.getParent();\r\n // featuresToDisplay.forEach(feature => {\r\n // if (parent.layout.parts.Window && parent.layout.parts.Window.windowKits && !parent.layout.parts.Window.windowKits.disabled) {\r\n // feature.matchesMetaFailed = true;\r\n // } else if (feature.matchesMetaFailed) {\r\n // feature.matchesMetaFailed = false;\r\n // }\r\n // });\r\n // return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n // }\r\n\r\n handleChangeParent(nonCompatibleWith) {\r\n if (nonCompatibleWith === \"Window Kit\") {\r\n const showerPodParent = this.getParent();\r\n const accessoriesParent = showerPodParent.getParent();\r\n accessoriesParent.layout.parts.Window.windowKits.disabled = true;\r\n showerPodParent.disabled = false;\r\n this.handleClick();\r\n }\r\n }\r\n\r\n disabledClick() {\r\n const accessoriesParent = this.getParent();\r\n const windowParent = accessoriesParent.layout.parts.Window;\r\n if (windowParent && windowParent.windowKits && !windowParent.windowKits.disabled) {\r\n windowParent.windowKits.disabled = true;\r\n }\r\n }\r\n\r\n // setZIndex(zIndexes) {\r\n // const zIndex = zIndexes.Accessories.ShowerPod;\r\n // if (zIndexes && this.activeFeature) {\r\n // this.activeFeature.layer.zIndex = zIndex;\r\n // }\r\n // if (zIndexes && this.placeholderFeature) {\r\n // this.placeholderFeature.layer.zIndex = zIndex;\r\n // }\r\n // }\r\n\r\n}\r\n","import AccessoryCommon from \"./accessoryCommon\";\r\nimport {createParentPositions, SIDE_POSITIONS} from \"../../constants\";\r\nimport {Shower} from \"../../parts/shower\";\r\n\r\nexport default class Seats extends AccessoryCommon {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'shower_seats';\r\n this.partName = 'Seats';\r\n this.dbName = 'Seats';\r\n this.translateId = \"visualizer.bathroom.accessories.shower_seats\";\r\n this.visible = true;\r\n this.canBeDisabled = true;\r\n this.conflictingPositions = [\"valve_trim\"];\r\n if (isChild) {\r\n createParentPositions(this);\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n dbFeature.metaData[\"layerPosition\"] = dbFeature.metaData[\"Side\"] ? dbFeature.metaData[\"Side\"][0] : \"\";\r\n const partNumber = dbFeature.metaData[\"layerPosition\"] === SIDE_POSITIONS[0] ? 1 : 2;\r\n return super.load_(dbFeature, new Seats(false, partNumber),\r\n true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n\r\n setLayers(layout) {\r\n const showerParent = this.getParent().layout.parts[Shower.id];\r\n if (showerParent && showerParent.showerTubComboIsActive()) { // shower tub combo - remove\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n return super.setLayers(layout);\r\n }\r\n //\r\n // setZIndex(zIndexes) {\r\n // if (zIndexes) {\r\n // Object.keys(this.layerPositions).forEach((key, keyIndex) => {\r\n // if (this.layerPositions[key]) {\r\n // this.layerPositions[key].layer.zIndex = zIndexes.Accessories.Seats + keyIndex*10;\r\n // }\r\n // })\r\n // }\r\n // }\r\n\r\n}\r\n","import AccessoryCommon from \"./accessoryCommon\";\r\nimport {Shower} from \"../../parts/shower\";\r\n// import DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\n\r\nexport default class ShowerRod extends AccessoryCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_rod';\r\n this.partName = 'Shower Rod';\r\n this.translateId = \"visualizer.bathroom.accessories.shower_rod\";\r\n this.visible = true;\r\n this.canBeDisabled = true;\r\n }\r\n\r\n handleClick(ignoreLocked = false) {\r\n const parent = this.getParent()\r\n const showerParent = parent.getParent().layout.parts[Shower.id];\r\n if (showerParent && showerParent.showerDoor && !showerParent.showerDoor.disabled) { // shower tub combo - remove\r\n showerParent.showerDoor.disabled = true\r\n }\r\n super.handleClick(ignoreLocked);\r\n }\r\n\r\n // navigationSubItems(filters, searchText) {\r\n // const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n // const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n // const parent = this.getParent();\r\n // featuresToDisplay.forEach(feature => {\r\n // if (parent.layout.parts.Window && parent.layout.parts.Window.windowKits && !parent.layout.parts.Window.windowKits.disabled) {\r\n // feature.matchesMetaFailed = true;\r\n // } else if (feature.matchesMetaFailed) {\r\n // feature.matchesMetaFailed = false;\r\n // }\r\n // });\r\n // return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n // }\r\n\r\n // handleChangeParent(nonCompatibleWith) {\r\n // if (nonCompatibleWith === \"Window Kit\") {\r\n // const showerRodParent = this.getParent();\r\n // const accessoriesParent = showerRodParent.getParent();\r\n // accessoriesParent.layout.parts.Window.windowKits.disabled = true;\r\n // showerRodParent.disabled = false;\r\n // this.handleClick();\r\n // }\r\n // }\r\n\r\n disabledClick() {\r\n const showerParent = this.getParent().layout.parts[Shower.id];\r\n if (!this.disabled && showerParent && showerParent.showerDoor && !showerParent.showerDoor.disabled) { // shower tub combo - remove\r\n showerParent.showerDoor.disabled = true\r\n }\r\n }\r\n\r\n // setZIndex(zIndexes) {\r\n // const zIndex = zIndexes.Accessories.ShowerRod;\r\n // if (zIndexes && this.activeFeature) {\r\n // this.activeFeature.layer.zIndex = zIndex;\r\n // }\r\n // }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class ToiletBrush extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'toilet_brush';\r\n this.partName = 'Toilet Brush';\r\n this.translateId = \"visualizer.bathroom.accessories.toilet_brush\";\r\n this.canBeDisabled = true;\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {Toilet} from \"../../parts/toilet\";\r\nimport {removeLookPointFor} from \"../../../lookNavigation/lookFunctions2\";\r\nimport {getCurrentRoomType} from \"../../../../appLayout\";\r\nimport {LOOK_ROOM_TYPES} from \"../../constants\";\r\n\r\nexport default class PaperHolder extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'paper_holder';\r\n this.partName = 'Paper Holder';\r\n this.translateId = \"visualizer.bathroom.accessories.paper_holder\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n disabledClick() {\r\n const toiletParent = this.getParent().layout.parts[Toilet.id];\r\n if (toiletParent && toiletParent.toilet && toiletParent.toilet.disabled) {\r\n toiletParent.toilet.disabled = this.disabled || !toiletParent.toilet.canBeEnabled(); // true or check if it can be enabled;\r\n }\r\n }\r\n\r\n canDisplayDemoPoint(parentObject) {\r\n if (getCurrentRoomType() === LOOK_ROOM_TYPES.as) {\r\n return true\r\n }\r\n return removeLookPointFor(parentObject, 3, \"2\")\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {createParentPositions, LOOK_ROOM_TYPES, SIDE_POSITIONS} from \"../../constants\";\r\nimport {removeLookPointFor} from \"../../../lookNavigation/lookFunctions2\";\r\nimport {getCurrentRoomType} from \"../../../../appLayout\";\r\n\r\nexport default class RobeHook extends IntermediatePart {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'robe_hook';\r\n this.partName = 'Robe Hook';\r\n this.translateId = \"visualizer.bathroom.accessories.robe_hook\";\r\n this.canBeDisabled = true;\r\n if (isChild) {\r\n createParentPositions(this);\r\n }\r\n }\r\n\r\n canDisplayDemoPoint(parentObject) {\r\n if (getCurrentRoomType() === LOOK_ROOM_TYPES.as) {\r\n return true\r\n }\r\n return removeLookPointFor(parentObject, 1, \"1\", SIDE_POSITIONS[1])\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {createParentPositions} from \"../../constants\";\r\n\r\nexport default class TowelBar extends IntermediatePart {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'towel_bar';\r\n this.partName = 'Towel Bar';\r\n this.translateId = \"visualizer.bathroom.accessories.towel_bar\";\r\n this.canBeDisabled = true;\r\n if (isChild) {\r\n createParentPositions(this);\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {LOOK_ROOM_TYPES, SIDE_POSITIONS} from \"../../constants\";\r\nimport {removeLookPointFor} from \"../../../lookNavigation/lookFunctions2\";\r\nimport {getCurrentRoomType} from \"../../../../appLayout\";\r\n\r\nexport default class TowelRing extends IntermediatePart {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'towel_ring';\r\n this.partName = 'Towel Ring';\r\n this.translateId = \"visualizer.bathroom.accessories.towel_ring\";\r\n this.canBeDisabled = true;\r\n if (isChild) {\r\n this.layerPositions = {\r\n [SIDE_POSITIONS[0]]: null,\r\n [SIDE_POSITIONS[1]]: null,\r\n };\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n dbFeature.lixilProductSubCategory = \"Towel Rings\"; // hardcode to match other towel rings // LX-846\r\n return super.load(dbFeature);\r\n }\r\n\r\n canDisplayDemoPoint(parentObject) {\r\n if (getCurrentRoomType() === LOOK_ROOM_TYPES.as) {\r\n return removeLookPointFor(parentObject, 6, \"1\", SIDE_POSITIONS[1])\r\n }\r\n return removeLookPointFor(parentObject, 3, \"2\", SIDE_POSITIONS[1])\r\n && removeLookPointFor(parentObject, 1, \"1\", SIDE_POSITIONS[1])\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {createParentPositions} from \"../../constants\";\r\nimport {IS_PRODUCT_JOURNEY} from \"../../../../../config\";\r\n\r\nexport default class GlassHolder extends IntermediatePart {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'glass_holder';\r\n this.partName = 'Glass Holder';\r\n this.translateId = \"visualizer.bathroom.shower.glass_holder\";\r\n this.layerPriority = 13;\r\n if (isChild) {\r\n createParentPositions(this);\r\n }\r\n }\r\n\r\n canDisplayDemoPoint() {\r\n return IS_PRODUCT_JOURNEY\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class TowelRack extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'towel_rack';\r\n this.partName = 'Towel Rack';\r\n this.translateId = \"visualizer.bathroom.accessories.towel_rack\";\r\n this.canBeDisabled = true;\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class Wainscoting extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'wainscoting';\r\n this.partName = 'Wainscoting';\r\n this.translateId = \"visualizer.bathroom.accessories.wainscoting\";\r\n this.canBeDisabled = true;\r\n this.isStoneFeature = true;\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class Towel extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = \"towel\";\r\n this.partName = \"Towel\";\r\n this.translateId = \"visualizer.bathroom.accessories.towel\";\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {createParentPositions} from \"../../constants\";\r\n\r\nexport default class TowelTowelRing extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = \"towel_towel_ring\";\r\n this.partName = \"Towel\";\r\n this.translateId = \"visualizer.bathroom.accessories.towel\";\r\n if (isChild) {\r\n createParentPositions(this);\r\n }\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n const towelRing = this.getParent().towelRing;\r\n if (towelRing && towelRing.layerPositions && towelRing.activeFeature) {\r\n conditions.push({\r\n propName: \"MatchingFeature\",\r\n propValue: towelRing.activeFeature.getSplittedSku()\r\n });\r\n }\r\n return conditions\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {createParentPositions} from \"../../constants\";\r\n\r\nexport default class TowelTowelBar extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = \"towel_towel_bar\";\r\n this.partName = \"Towel\";\r\n this.translateId = \"visualizer.bathroom.accessories.towel\";\r\n if (isChild) {\r\n createParentPositions(this);\r\n }\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n const towelBar = this.getParent().towelBar;\r\n if (towelBar && towelBar.layerPositions && towelBar.activeFeature) {\r\n conditions.push({\r\n propName: \"MatchingFeature\",\r\n propValue: towelBar.activeFeature.getSplittedSku()\r\n });\r\n }\r\n return conditions\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {createParentPositions} from \"../../constants\";\r\n\r\nexport default class TowelTowelHook extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = \"towel_towel_hook\";\r\n this.partName = \"Towel\";\r\n this.translateId = \"visualizer.bathroom.accessories.towel\";\r\n if (isChild) {\r\n createParentPositions(this);\r\n }\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n const robeHook = this.getParent().robeHook;\r\n if (robeHook && robeHook.layerPositions && robeHook.activeFeature) {\r\n conditions.push({\r\n propName: \"MatchingFeature\",\r\n propValue: robeHook.activeFeature.getSplittedSku()\r\n });\r\n }\r\n return conditions\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\nimport {SIDE_POSITIONS} from \"../../constants\";\r\nimport {IS_LIXIL_SERVERS} from \"../../../../../config\";\r\n\r\nconst hardcodedSkus = [\"6438AM-FCOL.218\", \"6434AM-FCOL.218\", \"A8007D-FCO.020\", \"A8007D-FCO.020\", \"A8004L-CO.020\", \"4836SM-COL.218\"];\r\n\r\nexport default class ShowerPanCombo extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_pan_combo';\r\n this.partName = 'Shower Pan';\r\n this.translateId = \"visualizer.bathroom.shower.shower_pan_combo\";\r\n this.visible = true;\r\n this.isStoneFeature = false;\r\n this.layerPriority = 8;\r\n this.canBeDisabled = true;\r\n if (isChild) {\r\n this.oneLayerPosition = true;\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n // dbFeature.metaData[\"layerPosition\"] = dbFeature.metaData[\"Side\"] ? dbFeature.metaData[\"Side\"][0] : \"\";\r\n\r\n // Our Shower Doors only fit openings: 56\"-60\" (1422-1524mm) The skus below are too wide and would not be compatible.\r\n // If a user selects one of these shower bases please hide/do not display a shower door with it.\r\n if (IS_LIXIL_SERVERS && Array.isArray(dbFeature.metaData[\"ShowerPanHeight\"]) && hardcodedSkus.some(sku => dbFeature.sharedFeatureName === sku)) {\r\n dbFeature.metaData[\"ShowerPanHeight\"] = [\"99\"]; // do not show shower door for these sku's\r\n }\r\n dbFeature.metaData[\"CustomShowerPanSide\"] = (dbFeature.sharedFeatureName || \"\").includes(\"LHO\")\r\n ? \"LHO\"\r\n : (dbFeature.sharedFeatureName || \"\").includes(\"RHO\") ? \"RHO\" : \"\";\r\n dbFeature.metaData[\"layerPosition\"] = dbFeature.metaData[\"Side\"] && dbFeature.metaData[\"Side\"][0] !== \"0\"\r\n ? dbFeature.metaData[\"Side\"][0]\r\n : (dbFeature.metaData[\"CustomShowerPanSide\"] === \"RHO\") ? \"R\" : SIDE_POSITIONS[0];\r\n dbFeature.metaData[\"CustomNameWithoutShowerPanSide\"] = (dbFeature.sharedFeatureName || \"\")\r\n .replace(/LHO/g, \"\").replace(/RHO/g, \"\");\r\n\r\n return super.load_(dbFeature, new ShowerPanCombo())\r\n }\r\n\r\n disabledClick() {\r\n const shower = this.getParent();\r\n shower.showerFloorIsActive = !this.disabled;\r\n if (shower.showerDoor) {\r\n shower.showerDoor.disabled = this.disabled;\r\n shower.showerDoor.disabledClick(); // accessories and shower door handle\r\n }\r\n }\r\n\r\n applyFeatureIfNotCompatible() {\r\n const parent = this.getParent();\r\n const shower = parent.getParent();\r\n shower.showerFloorIsActive = false;\r\n if (shower.layout && shower.showerTubComboIsActive()) {\r\n const comboPart = shower.layout.parts[ShowerTubCombo.id];\r\n comboPart.showerTubComboIsActive = false;\r\n }\r\n }\r\n\r\n hideLayerCondition() {\r\n return this.getParent().showerTubComboIsActive()\r\n }\r\n\r\n handleClick(ignoreLocked) {\r\n super.handleClick(ignoreLocked); // set active item & not in visualizer item\r\n this.applyFeatureIfNotCompatible();\r\n }\r\n\r\n /**\r\n * @param navItems {[navItemInterface]}\r\n * @param forFeature {featureInterface}\r\n */\r\n filterNavigationItems = (navItems, forFeature = null) => {\r\n let finalNavItems = [];\r\n const forMeta = forFeature && forFeature.metaData && forFeature.metaData[\"CustomShowerPanSide\"] ? forFeature.metaData[\"CustomShowerPanSide\"] : \"LHO\";\r\n const leftNavItems = navItems.filter(navItem => {\r\n if (!navItem.part.metaData[\"CustomShowerPanSide\"] || (navItem.part.metaData[\"CustomShowerPanSide\"] === forMeta)) {\r\n finalNavItems.push(navItem);\r\n return false\r\n }\r\n return true\r\n })\r\n leftNavItems.forEach(navItem => {\r\n if (!finalNavItems.some(existingNavItem => {\r\n if (IS_LIXIL_SERVERS) {\r\n return existingNavItem.part.metaData[\"CustomNameWithoutShowerPanSide\"] &&\r\n navItem.part.metaData[\"CustomNameWithoutShowerPanSide\"] === existingNavItem.part.metaData[\"CustomNameWithoutShowerPanSide\"]\r\n }\r\n return existingNavItem.part.metaData[\"MatchingFeature\"] && navItem.part.metaData[\"MatchingFeature\"] &&\r\n navItem.part.metaData[\"MatchingFeature\"][0] === existingNavItem.part.metaData[\"MatchingFeature\"][0]\r\n })) {\r\n finalNavItems.push(navItem)\r\n }\r\n })\r\n return finalNavItems\r\n }\r\n\r\n // /**\r\n // * @param neededPosition {string} LHO|RHO\r\n // * @param lookActiveFeature {featureInterface}\r\n // */\r\n // getMatchingOutletFeature = (neededPosition = \"\", lookActiveFeature) => {\r\n // if (IS_LIXIL_SERVERS) {\r\n // const nameWithoutPos = lookActiveFeature.metaData[\"CustomNameWithoutShowerPanSide\"];\r\n // const allNavItems = this.navigationSubItemsSimple();\r\n // return allNavItems.find(navItem => {\r\n // return (navItem.part.dbFeature.metaData[\"CustomShowerPanSide\"] === neededPosition)\r\n // && (navItem.part.metaData[\"CustomNameWithoutShowerPanSide\"] === nameWithoutPos)\r\n // })\r\n // }\r\n // const nameWithoutPos = lookActiveFeature.metaData[\"MatchingFeature\"];\r\n // const allNavItems = this.navigationSubItemsSimple();\r\n // return allNavItems.find(navItem => {\r\n // return (navItem.part.dbFeature.metaData[\"CustomShowerPanSide\"] === neededPosition)\r\n // && (navItem.part.metaData[\"MatchingFeature\"][0] === nameWithoutPos)\r\n // })\r\n // }\r\n\r\n // navigationSubItems(filters, searchText) {\r\n // return this.navigationSubItemsWithSides(filters, searchText);\r\n // }\r\n\r\n setLayers(layout) {\r\n const showerParent = this.getParent();\r\n if (showerParent.showerTubComboIsActive() || showerParent.showerFloorIsActive) {\r\n super.hideLayers();\r\n return;\r\n }\r\n return super.setLayers(layout);\r\n }\r\n\r\n // getArrayOfConditions() {\r\n // let conditions = super.getArrayOfConditions(); //roomLayout\r\n // const showerParent = this.getParent();\r\n // conditions.push({\r\n // propName: \"ShowerSize\",\r\n // propValue: showerParent.showerSize()\r\n // });\r\n // return conditions\r\n // }\r\n\r\n canDisplayDemoPoint() {\r\n const shower = this.getParent();\r\n return !shower.showerTubComboIsActive()\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class ShowerDoorHandle extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_door_handle';\r\n this.partName = 'Handle';\r\n this.translateId = \"visualizer.bathroom.shower.shower_door_handle\";\r\n this.dbName = 'Shower Door Handle';\r\n this.visible = true;\r\n this.isStoneFeature = false;\r\n this.layerPriority = 9;\r\n if (isChild) {\r\n this.previouslySelectedFeatures = {\r\n Layout1: {},\r\n };\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n const handle = this.load_(dbFeature, new ShowerDoorHandle());\r\n if (handle) {\r\n ShowerDoorHandle.setAdditionalMetaData(handle);\r\n }\r\n }\r\n\r\n static setAdditionalMetaData(handle) {\r\n const compatible = handle.metaData[\"CompatibleTub\"];\r\n const showerSize = handle.metaData[\"ShowerSize\"];\r\n if (!compatible) {\r\n handle.metaData[\"CompatibleTub\"] = [\"None\"];\r\n }\r\n if (!showerSize) {\r\n handle.metaData[\"ShowerSize\"] = [\"60in\"];\r\n }\r\n }\r\n\r\n disabledClick() {\r\n const showerDoor = this.getParent().showerDoor;\r\n if (showerDoor) {\r\n showerDoor.disabled = this.disabled || !showerDoor.canBeEnabled(); // true or check if it can be enabled;\r\n }\r\n }\r\n\r\n handleClick() {\r\n super.handleClick();\r\n // this.getParent().getParent().setShowerTubCombo();\r\n //\r\n // let doorWithLiner = false;\r\n // if(this.metaData && this.metaData.length) {\r\n // const activeDoorMetadata = this.metaData.find(metaDataObject => metaDataObject.isFor);\r\n // const showerPanValues = activeDoorMetadata.conditions.find(condition => condition.name === \"BathtubLiner\");\r\n // if (showerPanValues) {\r\n // doorWithLiner = true;\r\n // }\r\n // }\r\n //\r\n // this.getParent().getParent().setLinerActive(doorWithLiner);\r\n // this.featureClicked();\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const showerParent = this.getParent();\r\n\r\n if (!showerParent.showerDoor || !showerParent.showerDoor.activeFeature ||\r\n (showerParent.showerDoor.activeFeature.metaData && showerParent.showerDoor.activeFeature.metaData[\"ShowerHandle\"]\r\n && showerParent.showerDoor.activeFeature.metaData[\"ShowerHandle\"][0] === \"None\")) {\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n // getArrayOfConditions() {\r\n // const layout = this.getParent().layout;\r\n // const showerComboParent = layout.parts[ShowerTubCombo.id];\r\n // const showerParent = this.getParent();\r\n // const layoutAbr = layout.getCurrentLayoutAbbreviation();\r\n //\r\n // let showerSize = showerComboParent.showerTubComboIsActive\r\n // ? showerComboParent.showerSize()\r\n // : showerParent.showerSize();\r\n //\r\n // let compatibleValue = \"None\";\r\n // if (showerComboParent.showerTubComboIsActive) {\r\n // if (showerComboParent.bottomTub === ShowerComboTubType.bathtub_liner) {\r\n // compatibleValue = \"BathtubLiner\"\r\n // } else if (showerComboParent.bottomTub === ShowerComboTubType.replacement_tub) {\r\n // compatibleValue = \"ReplacementTub\"\r\n // } else if (showerComboParent.bottomTub === ShowerComboTubType.walk_in_tub) {\r\n // compatibleValue = \"WalkInTub\"\r\n // } else if (showerComboParent.bottomTub === ShowerComboTubType.jetted_tub) {\r\n // compatibleValue = \"JettedTub\"\r\n // }\r\n // }\r\n //\r\n // const conditions = [{\r\n // propName: 'ShowerSize',\r\n // propValue: showerSize\r\n // },{\r\n // propName: 'CompatibleTub',\r\n // propValue: compatibleValue\r\n // }];\r\n //\r\n // if (layoutAbr === LayoutAbbreviation.Large) {\r\n // let showerDimensions = showerComboParent.showerTubComboIsActive\r\n // ? showerComboParent.showerDimensions()\r\n // : showerParent.showerDimensions();\r\n //\r\n // showerDimensions = getMetadataByDimensions(showerDimensions);\r\n //\r\n // const vanity = layout.parts[Vanity.id];\r\n // let counterTopSize = vanity.counterTopSize(this);\r\n // if (counterTopSize === '72in' && layout.type === 1 && (showerDimensions !== \"Full\" || showerDimensions !== \"Pony\")) {\r\n // showerDimensions = \"Full\"\r\n // }\r\n //\r\n // conditions.push({\r\n // propName: \"EX L\",\r\n // propValue: showerDimensions\r\n // })\r\n // }\r\n //\r\n // if (showerParent.showerDoor && showerParent.showerDoor.activeFeature) { // add shower pan condition only if it is shower\r\n // const doorCondition = showerParent.showerDoor.activeFeature.metaData[\"ShowerDoor\"];\r\n // const handleCondition = showerParent.showerDoor.activeFeature.metaData[\"ShowerHandle\"];\r\n // // console.log('doorCondition', doorCondition);\r\n // if (doorCondition) {\r\n // conditions.push({\r\n // propName: 'ShowerDoor',\r\n // propValue: doorCondition\r\n // })\r\n // }\r\n // if (handleCondition) {\r\n // conditions.push({\r\n // propName: 'ShowerHandle',\r\n // propValue: handleCondition\r\n // })\r\n // }\r\n // }\r\n //\r\n // if (!showerParent.showerTubComboIsActive()) {\r\n // if (showerParent.showerFloorIsActive) {\r\n // conditions.push({\r\n // propName: \"ShowerPan\",\r\n // propValue: \"Threshold\"\r\n // })\r\n // } else if (showerParent.showerPanCombo && showerParent.showerPanCombo.activeFeature) {\r\n // conditions.push({\r\n // propName: \"ShowerPan\",\r\n // propValue: showerParent.showerPanCombo.activeFeature.metaData[\"ShowerPan\"]\r\n // })\r\n // }\r\n // }\r\n // // console.log('conditions', conditions);\r\n // return conditions\r\n // }\r\n\r\n setDefault() {\r\n const shower = this.getParent();\r\n const currentActiveFeature = this.activeFeature;\r\n const filteredFeatures = this.features.filter(f => f.matchesMetaForArrayOfConditions(this.getArrayOfConditions()));\r\n if (!super.tryToSetTheSameFeature(filteredFeatures)) {\r\n this.setDefaultAccordingToPreviousSelect(shower, filteredFeatures, \"Brantford\");\r\n }\r\n this.rememberPreviousSelection(shower, currentActiveFeature);\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Shower.ShowerDoorHandle;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {LayoutAbbreviation} from \"../../constants\";\r\n\r\nexport default class PonyWallCap extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'pony_wall_cap';\r\n this.isPonyWallPart = true;\r\n this.visible = true;\r\n this.partName = 'Pony Wall Cap';\r\n this.translateId = \"visualizer.bathroom.shower.pony_wall_cap\";\r\n this.isStoneFeature = true;\r\n this.disableOnHomeSections = true;\r\n this.layerPriority = 11;\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Shower.PonyWallCap;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const showerParent = this.getParent().getActiveShowerGroup();\r\n if (showerParent.showerDimensions() !== \"Pony\") {\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n const conditions = this.getArrayOfConditions();\r\n\r\n const layoutAbr = layout.getCurrentLayoutAbbreviation();\r\n const matchesByBindings = this.activeFeature && this.activeFeature.dbFeature && this.activeFeature.s3Bindings && this.activeFeature.dbFeature.s3Bindings.some(binding => {\r\n return binding.layout === LayoutAbbreviation.All || binding.layout === layoutAbr\r\n });\r\n if (matchesByBindings && (this.activeFeature.matchesMetaForArrayOfConditions(conditions)\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n // getArrayOfConditions() {\r\n // const parent = this.getParent();\r\n // const layout = parent.layout;\r\n // const layoutAbr = layout.getCurrentLayoutAbbreviation();\r\n // if (layoutAbr === LayoutAbbreviation.Small){\r\n // const activeShower = parent.showerTubComboIsActive()\r\n // ? layout.parts[ShowerTubCombo.id]\r\n // : layout.parts[Shower.id];\r\n // const showerSize = activeShower.showerSize(); // 60in, 30in, ..\r\n // // const showerDimensions = activeShower.showerDimensions(); // 15x4, Pony, ...\r\n // return [{\r\n // propName: 'Shower',\r\n // propValue: 'Custom'\r\n // }, {\r\n // propName: 'Size',\r\n // propValue: showerSize\r\n // }];\r\n // }\r\n //\r\n // return []\r\n // }\r\n\r\n setDefault() {\r\n const filteredFeatures = this.features.filter(f => f.matchesMetaForArrayOfConditions(this.getArrayOfConditions()));\r\n if (!super.tryToSetTheSameFeature(filteredFeatures, '', '', true)) {\r\n const hardCodedDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName\r\n && feature.dbFeature.displayName.includesCI(\"Pony Wall Cap - Model[For=Shower=(Custom)=Size=(30in_60in)]\");\r\n });\r\n const placeholderDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includesCI(\" - Placeholder\");\r\n });\r\n this.activeFeature = hardCodedDefault || filteredFeatures[0];\r\n this.placeholderFeature = placeholderDefault || null;\r\n }\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class PonyWallGlass extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'pony_wall_glass';\r\n this.isPonyWallPart = true;\r\n this.visible = true;\r\n this.partName = 'Pony Wall Glass';\r\n this.translateId = \"visualizer.bathroom.shower.pony_wall_glass\";\r\n this.isStoneFeature = false;\r\n this.disableOnHomeSections = true;\r\n this.layerPriority = 10;\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n const showerParent = this.getParent();\r\n if (showerParent && showerParent.showerDoor && showerParent.showerDoor.activeFeature) {\r\n if (showerParent.showerDoor.activeFeature.metaData[\"ShowerPanHeight\"]) {\r\n conditions.push({\r\n propName: \"ShowerPanHeight\",\r\n propValue: showerParent.showerDoor.activeFeature.metaData[\"ShowerPanHeight\"]\r\n })\r\n }\r\n if (showerParent.showerDoor.activeFeature.metaData[\"DoorHeight\"]) {\r\n conditions.push({\r\n propName: \"DoorHeight\",\r\n propValue: showerParent.showerDoor.activeFeature.metaData[\"DoorHeight\"]\r\n })\r\n }\r\n }\r\n return conditions\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {LOOK_OVERLAYS, ShowerBodyType} from \"../../constants\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\nimport {getFeatureIsLocked} from \"../../../../../misc/helpers\";\r\nimport store from \"../../../../../store\";\r\nimport {setLookOverlayOpened} from \"../../../../../actions/lookFunctions\";\r\n\r\nexport default class ShowerFloor extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_floor';\r\n this.translateId = \"visualizer.bathroom.shower.shower_floor\";\r\n this.partName = 'Floor';\r\n this.homePageTitle = 'Shower Flooring';\r\n this.dbName = 'Shower Floor';\r\n this.isStoneFeature = true;\r\n this.selectedByUser = false;\r\n this.layerPriority = 6;\r\n }\r\n\r\n applyFeatureIfNotCompatible() {\r\n const parent = this.getParent();\r\n const shower = parent.getParent();\r\n shower.showerFloorIsActive = true;\r\n if (shower.layout && shower.showerTubComboIsActive()) {\r\n const comboPart = shower.layout.parts[ShowerTubCombo.id];\r\n comboPart.showerTubComboIsActive = false;\r\n }\r\n }\r\n\r\n handleClick(ignoreLocked) {\r\n super.handleClick(ignoreLocked);\r\n if (this.notAvailableInVisualizer || getFeatureIsLocked(this)) {\r\n return\r\n }\r\n const parent = this.getParent();\r\n const shower = parent.getParent();\r\n if ((!shower.showerFloorIsActive || shower.showerTubComboIsActive()) && !window.location.hash.includes(\"visualizer\")) {\r\n store.dispatch(setLookOverlayOpened(LOOK_OVERLAYS.notCompatiblePopup));\r\n return;\r\n }\r\n\r\n this.applyFeatureIfNotCompatible();\r\n\r\n this.getParent().selectedByUser = true;\r\n const threshold = shower.threshold;\r\n if (threshold && !threshold.selectedByUser) {\r\n const thresholdAvailableFeatures = threshold.navigationSubItems();\r\n const currentFloorName = this.getSplittedFeatureName();\r\n const sameThreshold = thresholdAvailableFeatures.find(tr => tr.part.getSplittedFeatureName() === currentFloorName);\r\n if (sameThreshold) {\r\n super.handleClick.call(sameThreshold.part);\r\n threshold.selectedByUser = false;\r\n }\r\n }\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n if (this.getParent().showerTubComboIsActive()) {\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n if (this.getParent().customBodyType === ShowerBodyType.Door) {\r\n const showerDoorParent = this.getParent().showerDoor;\r\n if (showerDoorParent && showerDoorParent.activeFeature) {\r\n const currentShowerPanCondition = showerDoorParent.activeFeature.metaData[\"ShowerPan\"];\r\n if (!currentShowerPanCondition || (currentShowerPanCondition && !currentShowerPanCondition.includes(\"Threshold\"))) {\r\n super.hideLayers();\r\n return;\r\n }\r\n }\r\n }\r\n\r\n const conditions = this.getArrayOfConditions();\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(conditions)\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n const showerParent = this.getParent();\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerParent.showerSize()\r\n });\r\n return conditions\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {LOOK_OVERLAYS, ShowerBodyType} from \"../../constants\";\r\nimport {Shower} from \"../../parts/shower\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\nimport {getFeatureIsLocked} from \"../../../../../misc/helpers\";\r\nimport store from \"../../../../../store\";\r\nimport {setLookOverlayOpened} from \"../../../../../actions/lookFunctions\";\r\n\r\nexport default class Threshold extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'threshold';\r\n this.partName = 'Threshold';\r\n this.translateId = \"visualizer.bathroom.shower.threshold\";\r\n this.homePageTitle = 'Threshold';\r\n this.dbName = 'ShowerPan';\r\n this.isStoneFeature = true;\r\n this.selectedByUser = false;\r\n this.layerPriority = 7;\r\n }\r\n\r\n applyFeatureIfNotCompatible() {\r\n const parent = this.getParent();\r\n const shower = parent.getParent();\r\n shower.showerFloorIsActive = true;\r\n if (shower.layout && shower.showerTubComboIsActive()) {\r\n const comboPart = shower.layout.parts[ShowerTubCombo.id];\r\n comboPart.showerTubComboIsActive = false;\r\n }\r\n }\r\n\r\n handleClick(ignoreLocked) {\r\n super.handleClick(ignoreLocked);\r\n if (this.notAvailableInVisualizer || getFeatureIsLocked(this)) {\r\n return\r\n }\r\n const parent = this.getParent();\r\n const shower = parent.getParent();\r\n if ((!shower.showerFloorIsActive || shower.showerTubComboIsActive()) && !window.location.hash.includes(\"visualizer\")) {\r\n store.dispatch(setLookOverlayOpened(LOOK_OVERLAYS.notCompatiblePopup));\r\n return;\r\n }\r\n\r\n this.applyFeatureIfNotCompatible();\r\n\r\n this.getParent().selectedByUser = true;\r\n const showerFloor = shower.showerFloor;\r\n if (showerFloor && !showerFloor.selectedByUser) {\r\n const showerFloorAvailableFeatures = showerFloor.navigationSubItems();\r\n const currentThresholdName = this.getSplittedFeatureName();\r\n const sameShowerFloor = showerFloorAvailableFeatures.find(navItemFloor => {\r\n return navItemFloor.part.getSplittedFeatureName() === currentThresholdName\r\n });\r\n if (sameShowerFloor) {\r\n super.handleClick.call(sameShowerFloor.part);\r\n showerFloor.selectedByUser = false;\r\n }\r\n }\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n if (this.getParent().showerTubComboIsActive() || !this.getParent().showerFloorIsActive) {\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n if (this.getParent().customBodyType === ShowerBodyType.Door) {\r\n const showerDoorParent = this.getParent().showerDoor;\r\n if (showerDoorParent && showerDoorParent.activeFeature) {\r\n const currentShowerPanCondition = showerDoorParent.activeFeature.metaData[\"ShowerPan\"];\r\n if (!currentShowerPanCondition || (currentShowerPanCondition && !currentShowerPanCondition.includes(\"Threshold\"))) {\r\n super.hideLayers();\r\n return;\r\n }\r\n }\r\n }\r\n const conditions = this.getArrayOfConditions();\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(conditions)\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n // getArrayOfConditions() {\r\n // const layout = this.getParent().layout;\r\n // const showerSize = this.getParent().showerSize();\r\n // let showerDimensions = getMetadataByDimensions(this.getParent().showerDimensions());\r\n //\r\n // const vanity = layout.parts[Vanity.id];\r\n // let counterTopSize = vanity.counterTopSize(this);\r\n // if (counterTopSize === '72in' && layout.type === 1 && (showerDimensions !== \"Full\" || showerDimensions !== \"Pony\")) {\r\n // showerDimensions = \"Full\"\r\n // }\r\n //\r\n // return [{\r\n // propName: 'ShowerSize',\r\n // propValue: showerSize\r\n // }, {\r\n // propName: 'EX L',\r\n // propValue: showerDimensions\r\n // }];\r\n // }\r\n\r\n getArrayOfConditions() {\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n const showerParent = this.getParent();\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerParent.showerSize()\r\n });\r\n return conditions\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (this.getParent().activeSubType() === Shower.Type.Custom) {\r\n const zIndex = zIndexes.Shower.Threshold;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class ShowerDrain extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_drain';\r\n this.partName = 'Shower Drain';\r\n this.translateId = \"visualizer.bathroom.shower.shower_drain\";\r\n this.homePageTitle = 'Shower Drain';\r\n this.visible = false;\r\n this.layerPriority = 14;\r\n }\r\n\r\n setLayers(layout) {\r\n const showerParent = this.getParent();\r\n if (!showerParent.showerFloorIsActive || showerParent.showerTubComboIsActive()) {\r\n super.hideLayers();\r\n return;\r\n }\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n const showerParent = this.getParent();\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerParent.showerSize()\r\n })\r\n return conditions\r\n }\r\n\r\n setDefault() {\r\n const filteredFeatures = this.features.filter(f => f.matchesMetaForArrayOfConditions(this.getArrayOfConditions()));\r\n this.activeFeature = filteredFeatures[0];\r\n this.placeholderFeature = filteredFeatures[0];\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Shower.ShowerDrain;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n}\r\n","import {createParentPositions, METADATA, ShowerHeadTypes} from \"../../constants\";\r\nimport ShowerCommon from \"../showerNew/showerCommon\";\r\nimport store from \"../../../../../store\";\r\nimport {IS_QKB_UI} from \"../../../../../config\";\r\n\r\nexport default class ShowerHead extends ShowerCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_head';\r\n this.partName = 'Shower Head';\r\n this.translateId = \"visualizer.bathroom.shower.shower_head\";\r\n this.layerPriority = 4;\r\n this.canBeDisabled = true;\r\n // this.useMatchingFeatureReplacement = \"MountPosition\";\r\n if (isChild) {\r\n this.previouslySelectedFeatures = {\r\n Layout1: {},\r\n Layout4: {},\r\n };\r\n createParentPositions(this);\r\n }\r\n }\r\n\r\n navigationSubItems(...props) {\r\n if (IS_QKB_UI) {\r\n return this.navigationSubItemsWithSides(...props)\r\n }\r\n return super.navigationSubItems(...props);\r\n }\r\n\r\n load(dbFeature) {\r\n if (!dbFeature.metaData[\"Side\"] || (Array.isArray(dbFeature.metaData[\"Side\"]) && dbFeature.metaData[\"Side\"][0] === \"0\")) {\r\n dbFeature.metaData[\"Side\"] = [METADATA.LeftSide];\r\n }\r\n return super.load(dbFeature)\r\n }\r\n\r\n handleClick() {\r\n this.setArmHeadType();\r\n super.handleClick();\r\n }\r\n\r\n applyFeatureIfNotCompatible() {\r\n const showerParent = this.getParent().getParent();\r\n if (showerParent.showerFixture) {\r\n showerParent.showerFixture.disabled = true;\r\n }\r\n }\r\n\r\n disabledClick() {\r\n const showerArm = this.getParent().showerArm;\r\n if (showerArm) {\r\n showerArm.disabled = this.disabled || !showerArm.canBeEnabled(); // true or check if it can be enabled\r\n }\r\n }\r\n\r\n hideLayerCondition() {\r\n const showerParent = this.getParent();\r\n return showerParent.shower_head_type !== ShowerHeadTypes.shower_arm && this.activeFeature\r\n }\r\n\r\n setLayers(layout) {\r\n const showerParent = this.getParent();\r\n if (this.hideLayerCondition()) {\r\n super.hideLayers();\r\n return;\r\n }\r\n if (showerParent.showerArm && showerParent.showerArm.layerPositions && this.layerPositions && this.activeFeature) {\r\n Object.keys(showerParent.showerArm.layerPositions).forEach(position => {\r\n if (!this.layerPositions[position] && showerParent.showerArm.layerPositions[position]) {\r\n this.layerPositions[position] = this.getMatchingPositionFeature(position)\r\n } else if (this.layerPositions[position] && !showerParent.showerArm.layerPositions[position]) {\r\n const {wizardActiveItem} = store.getState().wizardState;\r\n if (!wizardActiveItem || !wizardActiveItem.hideItems) {\r\n this.layerPositions[position] = null\r\n }\r\n }\r\n })\r\n }\r\n return super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n const showerParent = this.getParent();\r\n const showerSize = showerParent.showerSize();\r\n if (showerSize) {\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerSize\r\n });\r\n }\r\n if (showerParent.showerArm && showerParent.showerArm.activeFeature && showerParent.showerArm.activeFeature.metaData[\"MountType\"]) {\r\n conditions.push({\r\n propName: \"MountType\",\r\n propValue: showerParent.showerArm.activeFeature.metaData[\"MountType\"][0]\r\n })\r\n }\r\n if (showerParent.showerArm && showerParent.showerArm.activeFeature && showerParent.showerArm.activeFeature.metaData[\"MountPosition\"]) {\r\n conditions.push({\r\n propName: \"MountPosition\",\r\n propValue: showerParent.showerArm.activeFeature.metaData[\"MountPosition\"][0]\r\n })\r\n }\r\n return conditions;\r\n }\r\n\r\n canDisplayDemoPoint() {\r\n return this.getParent().shower_head_type === ShowerHeadTypes.shower_arm\r\n }\r\n\r\n}\r\n","import ShowerCommon from \"../showerNew/showerCommon\";\r\nimport {createParentPositions, METADATA, ShowerHeadTypes} from \"../../constants\";\r\nimport store from \"../../../../../store\";\r\nimport {IS_QKB_UI} from \"../../../../../config\";\r\n\r\nexport default class ShowerArm extends ShowerCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_arm';\r\n this.partName = 'Shower Arm';\r\n this.translateId = \"visualizer.bathroom.accessories.shower_arm\";\r\n this.canBeDisabled = true;\r\n this.layerPriority = 8;\r\n // this.useMatchingFeatureReplacement = \"MountPosition\";\r\n if (isChild) {\r\n createParentPositions(this);\r\n }\r\n }\r\n\r\n navigationSubItems(...props) {\r\n if (IS_QKB_UI) {\r\n return this.navigationSubItemsWithSides(...props)\r\n }\r\n return super.navigationSubItems(...props);\r\n }\r\n\r\n load(dbFeature) {\r\n if (!dbFeature.metaData[\"Side\"] || (Array.isArray(dbFeature.metaData[\"Side\"]) && dbFeature.metaData[\"Side\"][0] === \"0\")) {\r\n dbFeature.metaData[\"Side\"] = [METADATA.LeftSide];\r\n }\r\n return super.load(dbFeature)\r\n }\r\n\r\n handleClick() {\r\n this.setArmHeadType();\r\n super.handleClick();\r\n }\r\n\r\n checkForSameMountPosition(newFeature) {\r\n if (newFeature.metaData[\"MountPosition\"] || newFeature.metaData[\"MountType\"]) {\r\n let conditions = [];\r\n if (newFeature.metaData[\"MountPosition\"]) {\r\n conditions.push({\r\n propName: \"MountPosition\",\r\n propValue: newFeature.metaData[\"MountPosition\"]\r\n });\r\n }\r\n if (newFeature.metaData[\"MountType\"]) {\r\n conditions.push({\r\n propName: \"MountType\",\r\n propValue: newFeature.metaData[\"MountType\"]\r\n });\r\n }\r\n Object.keys(this.layerPositions).forEach(position => {\r\n if ((position !== newFeature.metaData.layerPosition) && this.layerPositions[position]\r\n && !this.layerPositions[position].matchesMetaForArrayOfConditions(conditions)) {\r\n this.layerPositions[position] = null; // erase current position\r\n }\r\n })\r\n }\r\n }\r\n\r\n applyFeatureIfNotCompatible() {\r\n const showerParent = this.getParent().getParent();\r\n if (showerParent.showerFixture) {\r\n showerParent.showerFixture.disabled = true;\r\n }\r\n }\r\n\r\n disabledClick() {\r\n const showerHead = this.getParent().showerHead;\r\n if (showerHead) {\r\n showerHead.disabled = this.disabled || !showerHead.canBeEnabled(); // true or check if it can be enabled;\r\n }\r\n }\r\n\r\n hideLayerCondition() {\r\n const showerParent = this.getParent();\r\n return showerParent.shower_head_type !== ShowerHeadTypes.shower_arm && this.activeFeature\r\n }\r\n\r\n setLayers(layout) {\r\n const showerParent = this.getParent();\r\n if (this.hideLayerCondition()) {\r\n super.hideLayers();\r\n return;\r\n }\r\n if (showerParent.showerHead && showerParent.showerHead.layerPositions && this.layerPositions && this.activeFeature) {\r\n Object.keys(showerParent.showerHead.layerPositions).forEach(position => {\r\n if (!this.layerPositions[position] && showerParent.showerHead.layerPositions[position]) {\r\n this.layerPositions[position] = this.getMatchingPositionFeature(position)\r\n } else if (this.layerPositions[position] && !showerParent.showerHead.layerPositions[position]) {\r\n const {wizardActiveItem} = store.getState().wizardState;\r\n if (!wizardActiveItem || !wizardActiveItem.hideItems) {\r\n this.layerPositions[position] = null\r\n }\r\n }\r\n })\r\n }\r\n return super.setLayers(layout);\r\n }\r\n\r\n canDisplayDemoPoint() {\r\n return this.getParent().shower_head_type === ShowerHeadTypes.shower_arm\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {ShowerHeadTypes} from \"../../constants\";\r\n\r\nexport default class ShowerHeadBundle extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_head_bundle';\r\n this.partName = 'Shower Head Bundle';\r\n this.translateId = \"visualizer.bathroom.shower.shower_head_bundle\";\r\n this.canBeDisabled = true;\r\n this.layerPriority = 12;\r\n }\r\n\r\n handleClick() {\r\n const showerParent = this.getParent().getParent();\r\n showerParent.setShowerHeadType(ShowerHeadTypes.shower_head_bundle);\r\n if (showerParent.showerFixture && showerParent.showerFixture.activeFeature && showerParent.showerFixture.activeFeature.metaData[\"MountType\"]\r\n && !showerParent.showerFixture.activeFeature.metaData[\"MountType\"].includes(\"0\") && !showerParent.showerFixture.disabled) {\r\n // store.dispatch(setLookOverlayOpened(LOOK_OVERLAYS.notCompatiblePopup));\r\n // return;\r\n this.applyFeatureIfNotCompatible();\r\n }\r\n super.handleClick();\r\n }\r\n\r\n applyFeatureIfNotCompatible() {\r\n const showerParent = this.getParent().getParent();\r\n if (showerParent.showerFixture) {\r\n showerParent.showerFixture.disabled = true;\r\n }\r\n }\r\n\r\n hideLayerCondition() {\r\n const showerParent = this.getParent();\r\n return showerParent.shower_head_type !== ShowerHeadTypes.shower_head_bundle && this.activeFeature\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n const showerParent = this.getParent();\r\n const showerSize = showerParent.showerSize();\r\n if (showerSize) {\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerSize\r\n });\r\n }\r\n // if (showerParent.showerHead && showerParent.showerHead.activeFeature && showerParent.showerHead.activeFeature.metaData[\"MountType\"]) {\r\n // conditions.push({\r\n // propName: \"MountType\",\r\n // propValue: showerParent.showerHead.activeFeature.metaData[\"MountType\"][0]\r\n // })\r\n // }\r\n return conditions;\r\n }\r\n\r\n canDisplayDemoPoint() {\r\n return this.getParent().shower_head_type === ShowerHeadTypes.shower_head_bundle\r\n }\r\n\r\n}\r\n","import {Shower} from \"../../parts/shower\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\nimport {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class TubSpout extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'tub_spout';\r\n this.partName = 'Tub Spout';\r\n this.translateId = \"visualizer.bathroom.shower.tub_spout\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n hideLayerCondition() {\r\n const showerParent = this.getParent();\r\n const showerComboParent = showerParent.layout.parts[ShowerTubCombo.id];\r\n if (!showerParent.showerTubComboIsActive() || showerComboParent.bottomTub !== \"replacement_tub\") {\r\n return true\r\n }\r\n if (showerParent.showerFixture && showerParent.showerFixture.activeFeature && showerParent.showerFixture.activeFeature.metaData[\"MountType\"]\r\n && showerParent.showerFixture.activeFeature.metaData[\"MountType\"].includes(\"T\")) { // S and 0 is ok\r\n return true;\r\n }\r\n return false\r\n }\r\n\r\n getArrayOfConditions() {\r\n const showerParent = this.getParent();\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n const showerSize = showerParent.showerSize();\r\n if (showerSize) {\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerSize\r\n })\r\n }\r\n return conditions\r\n }\r\n\r\n canDisplayDemoPoint() {\r\n const layout = this.getParent().layout;\r\n const showerParent = layout.parts[Shower.id];\r\n const showerComboParent = layout.parts[ShowerTubCombo.id];\r\n return showerParent.showerTubComboIsActive() && showerComboParent.bottomTub === \"replacement_tub\";\r\n }\r\n\r\n}\r\n","import {ShowerHeadTypes, ShowerHandTypes} from \"../../constants\";\r\nimport ShowerCommon from \"../showerNew/showerCommon\";\r\n\r\nexport default class HandShowerKit extends ShowerCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'hand_shower_kit';\r\n this.partName = 'Hand Shower Kit';\r\n this.translateId = \"visualizer.bathroom.shower.hand_shower_kit\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n if (!Array.isArray(dbFeature.metaData[\"MountType\"])) {\r\n dbFeature.metaData[\"MountType\"] = [\"0\"]\r\n }\r\n return super.load_(dbFeature, new HandShowerKit());\r\n }\r\n\r\n handleClick() {\r\n const showerParent = this.getParent().getParent();\r\n showerParent.setShowerHeadType(ShowerHeadTypes.shower_arm);\r\n showerParent.setShowerHandType(ShowerHandTypes.hand_shower_kit);\r\n super.handleClick();\r\n }\r\n\r\n hideLayerCondition() {\r\n const showerParent = this.getParent();\r\n return showerParent.shower_head_type !== ShowerHeadTypes.shower_arm || showerParent.shower_hand_type !== ShowerHandTypes.hand_shower_kit\r\n }\r\n\r\n getArrayOfConditions() {\r\n const showerParent = this.getParent();\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n //Hand Shower Kit should be displayed with the fixtures that have MountType: 0\r\n if (showerParent.showerFixture && showerParent.showerFixture.activeFeature && showerParent.showerFixture.activeFeature.metaData[\"MountType\"]) {\r\n conditions.push({\r\n propName: \"MountType\",\r\n propValue: showerParent.showerFixture.activeFeature.metaData[\"MountType\"]\r\n })\r\n }\r\n return conditions\r\n }\r\n\r\n canDisplayDemoPoint() {\r\n return this.getParent().shower_head_type !== ShowerHeadTypes.shower_head_bundle\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class ShowerCurb extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_curb';\r\n this.partName = 'Shower Curb';\r\n this.translateId = \"visualizer.bathroom.shower.shower_curb\";\r\n this.canBeDisabled = false;\r\n this.isStoneFeature = true;\r\n }\r\n\r\n getArrayOfConditions() {\r\n const showerParent = this.getParent();\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n const showerSize = showerParent.showerSize();\r\n if (showerSize) {\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerSize\r\n })\r\n }\r\n return conditions\r\n }\r\n\r\n}\r\n","import ShowerCommon from \"./showerCommon\";\r\nimport {CORNER_SHELVES_POSITIONS} from \"../../constants\";\r\n\r\nexport default class BodySpray extends ShowerCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'body_spray';\r\n this.partName = 'Body Spray';\r\n this.translateId = \"visualizer.bathroom.shower.body_spray\";\r\n this.canBeDisabled = true;\r\n if (isChild) {\r\n this.layerPositions = {};\r\n CORNER_SHELVES_POSITIONS.forEach(pos => {\r\n this.layerPositions[pos] = null\r\n })\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n dbFeature.metaData[\"layerPosition\"] = (dbFeature.metaData[\"Side\"] && dbFeature.metaData[\"MountPosition\"])\r\n ? dbFeature.metaData[\"Side\"][0] + dbFeature.metaData[\"MountPosition\"][0]\r\n : CORNER_SHELVES_POSITIONS[0] // should be \"\" here!!!\r\n const partNumber = dbFeature.metaData[\"layerPosition\"] === CORNER_SHELVES_POSITIONS[0] ? 1 : 2;\r\n return super.load_(dbFeature, new this.constructor(false, partNumber),\r\n true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n\r\n handleClick() {\r\n this.setArmHeadType(); // body spray can be used with everything? not sure\r\n super.handleClick();\r\n }\r\n\r\n setLayers(layout) {\r\n // const showerParent = this.getParent();\r\n // if (showerParent.shower_head_type !== ShowerHeadTypes.shower_arm || !this.isActiveFeatureGroup(\"diverterTrim\")) {\r\n // super.hideLayers();\r\n // return;\r\n // }\r\n return super.setLayers(layout);\r\n }\r\n\r\n // getArrayOfConditions() {\r\n // const showerParent = this.getParent();\r\n // let conditions = super.getArrayOfConditions(); //roomLayout\r\n // if (showerParent.handShowerHolder && showerParent.handShowerHolder.activeFeature) {\r\n // conditions.push({\r\n // propName: \"MountPosition\",\r\n // propValue: showerParent.handShowerHolder.activeFeature.metaData[\"MountPosition\"]\r\n // ? showerParent.handShowerHolder.activeFeature.metaData[\"MountPosition\"]\r\n // : [\"2\"]\r\n // })\r\n // }\r\n // return conditions\r\n // }\r\n\r\n}\r\n","import ShowerCommon from \"./showerCommon\";\r\nimport {createParentPositions, ShowerHeadTypes} from \"../../constants\";\r\n\r\nexport default class DiverterTrim extends ShowerCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'diverter_trim';\r\n this.partName = 'Diverter Trim';\r\n this.translateId = \"visualizer.bathroom.shower.diverter_trim\";\r\n this.canBeDisabled = true;\r\n this.disabled = true;\r\n if (isChild) {\r\n createParentPositions(this);\r\n }\r\n }\r\n\r\n handleClick() {\r\n this.setArmHeadType();\r\n super.handleClick();\r\n }\r\n\r\n hideLayerCondition() {\r\n const showerParent = this.getParent();\r\n return showerParent.shower_head_type !== ShowerHeadTypes.shower_arm\r\n }\r\n\r\n}\r\n","import ShowerCommon from \"./showerCommon\";\r\nimport {createParentPositions, ShowerHandTypes, ShowerHeadTypes} from \"../../constants\";\r\n\r\nexport default class HandShowerHolder extends ShowerCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'hand_shower_holder';\r\n this.partName = 'Hand Shower Holder';\r\n this.translateId = \"visualizer.bathroom.shower.hand_shower_holder\";\r\n this.canBeDisabled = true;\r\n if (isChild) {\r\n createParentPositions(this);\r\n }\r\n }\r\n\r\n handleClick() {\r\n const showerParent = this.getParent().getParent();\r\n showerParent.setShowerHandType(ShowerHeadTypes.shower_arm);\r\n showerParent.setShowerHandType(ShowerHandTypes.hand_shower_holder);\r\n super.handleClick();\r\n }\r\n\r\n hideLayerCondition() {\r\n const showerParent = this.getParent();\r\n return showerParent.shower_head_type !== ShowerHeadTypes.shower_arm || showerParent.shower_hand_type !== ShowerHandTypes.hand_shower_holder\r\n }\r\n\r\n // getArrayOfConditions() {\r\n // const showerParent = this.getParent();\r\n // let conditions = super.getArrayOfConditions(); //roomLayout\r\n // //Hand Shower Kit should be displayed with the fixtures that have MountType: 0\r\n // if (showerParent.wallUnion && showerParent.wallUnion.activeFeature && showerParent.wallUnion.activeFeature.metaData[\"MountPosition\"]) {\r\n // conditions.push({\r\n // propName: \"MountPosition\",\r\n // propValue: showerParent.showerFixture.activeFeature.metaData[\"MountPosition\"]\r\n // })\r\n // }\r\n // return conditions\r\n // }\r\n\r\n}\r\n","import ShowerCommon from \"./showerCommon\";\r\nimport {createParentPositions, ShowerHandTypes, ShowerHeadTypes} from \"../../constants\";\r\n\r\nexport default class HandShowerOnly extends ShowerCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'hand_shower_only';\r\n this.partName = 'Hand Shower Only';\r\n this.translateId = \"visualizer.bathroom.shower.hand_shower_only\";\r\n this.canBeDisabled = true;\r\n this.useMatchingFeatureReplacement = \"MountPosition\";\r\n if (isChild) {\r\n createParentPositions(this);\r\n }\r\n }\r\n\r\n handleClick() {\r\n const showerParent = this.getParent().getParent();\r\n showerParent.setShowerHeadType(ShowerHeadTypes.shower_arm);\r\n showerParent.setShowerHandType(ShowerHandTypes.hand_shower_holder);\r\n super.handleClick();\r\n }\r\n\r\n hideLayerCondition() {\r\n const showerParent = this.getParent();\r\n return showerParent.shower_head_type !== ShowerHeadTypes.shower_arm || showerParent.shower_hand_type !== ShowerHandTypes.hand_shower_holder\r\n }\r\n\r\n getArrayOfConditions() {\r\n const showerParent = this.getParent();\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n //Hand Shower Kit should be displayed with the fixtures that have MountType: 0\r\n if (showerParent.handShowerHolder && showerParent.handShowerHolder.activeFeature) {\r\n conditions.push({\r\n propName: \"MountPosition\",\r\n propValue: showerParent.handShowerHolder.activeFeature.metaData[\"MountPosition\"]\r\n ? showerParent.handShowerHolder.activeFeature.metaData[\"MountPosition\"]\r\n : [\"2\"]\r\n })\r\n }\r\n return conditions\r\n }\r\n\r\n}\r\n","import ShowerCommon from \"./showerCommon\";\r\nimport {createParentPositions, ShowerHandTypes, ShowerHeadTypes} from \"../../constants\";\r\n\r\nexport default class ShowerHose extends ShowerCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_hose';\r\n this.partName = 'Shower Hose';\r\n this.translateId = \"visualizer.bathroom.shower.shower_hose\";\r\n this.canBeDisabled = true;\r\n if (isChild) {\r\n createParentPositions(this);\r\n }\r\n }\r\n\r\n handleClick() {\r\n const showerParent = this.getParent().getParent();\r\n showerParent.setShowerHeadType(ShowerHeadTypes.shower_arm);\r\n showerParent.setShowerHandType(ShowerHandTypes.hand_shower_holder);\r\n super.handleClick();\r\n }\r\n\r\n hideLayerCondition() {\r\n const showerParent = this.getParent();\r\n return showerParent.shower_head_type !== ShowerHeadTypes.shower_arm || showerParent.shower_hand_type !== ShowerHandTypes.hand_shower_holder\r\n }\r\n\r\n getArrayOfConditions() {\r\n const showerParent = this.getParent();\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n if (showerParent.handShowerHolder && showerParent.handShowerHolder.activeFeature) {\r\n conditions.push({\r\n propName: \"MountPosition\",\r\n propValue: showerParent.handShowerHolder.activeFeature.metaData[\"MountPosition\"]\r\n ? showerParent.handShowerHolder.activeFeature.metaData[\"MountPosition\"]\r\n : [\"2\"]\r\n })\r\n }\r\n return conditions\r\n }\r\n\r\n}\r\n","import ShowerCommon from \"./showerCommon\";\r\nimport {createParentPositions, ShowerHeadTypes} from \"../../constants\";\r\n\r\nexport default class ShowerSystem extends ShowerCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_system';\r\n this.partName = 'Shower System';\r\n this.translateId = \"visualizer.bathroom.shower.shower_system\";\r\n this.canBeDisabled = true;\r\n if (isChild) {\r\n createParentPositions(this);\r\n }\r\n }\r\n\r\n handleClick() {\r\n const showerParent = this.getParent().getParent();\r\n showerParent.setShowerHeadType(ShowerHeadTypes.shower_system);\r\n super.handleClick();\r\n }\r\n\r\n hideLayerCondition() {\r\n const showerParent = this.getParent();\r\n return showerParent.shower_head_type !== ShowerHeadTypes.shower_system && this.activeFeature\r\n }\r\n}\r\n","import ShowerCommon from \"./showerCommon\";\r\nimport {createParentPositions, ShowerHeadTypes} from \"../../constants\";\r\n\r\nexport default class ShowerTrimKit extends ShowerCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_trim_kit';\r\n this.partName = 'Shower Trim Kit';\r\n this.translateId = \"visualizer.bathroom.shower.shower_trim_kit\";\r\n this.canBeDisabled = true;\r\n if (isChild) {\r\n createParentPositions(this);\r\n }\r\n }\r\n\r\n handleClick() {\r\n const showerParent = this.getParent().getParent();\r\n showerParent.setShowerHeadType(ShowerHeadTypes.shower_trim_kit);\r\n super.handleClick();\r\n }\r\n\r\n hideLayerCondition() {\r\n const showerParent = this.getParent();\r\n return showerParent.shower_head_type !== ShowerHeadTypes.shower_trim_kit && this.activeFeature\r\n }\r\n}\r\n","import ShowerCommon from \"./showerCommon\";\r\nimport {createParentPositions, ShowerHeadTypes} from \"../../constants\";\r\n\r\nexport default class ValveTrim extends ShowerCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'valve_trim';\r\n this.partName = 'Valve Trim';\r\n this.translateId = \"visualizer.bathroom.shower.valve_trim\";\r\n this.canBeDisabled = true;\r\n this.conflictingPositions = [\"shower_seats\"];\r\n if (isChild) {\r\n createParentPositions(this);\r\n }\r\n }\r\n\r\n handleClick() {\r\n this.setArmHeadType();\r\n super.handleClick();\r\n }\r\n\r\n hideLayerCondition() {\r\n const showerParent = this.getParent();\r\n return showerParent.shower_head_type !== ShowerHeadTypes.shower_arm\r\n }\r\n}\r\n","import ShowerCommon from \"./showerCommon\";\r\nimport {createParentPositions, ShowerHandTypes, ShowerHeadTypes} from \"../../constants\";\r\n\r\nexport default class WallUnion extends ShowerCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'wall_union';\r\n this.partName = 'Wall Union';\r\n this.translateId = \"visualizer.bathroom.shower.wall_union\";\r\n this.canBeDisabled = true;\r\n this.useMatchingFeatureReplacement = \"MountPosition\";\r\n if (isChild) {\r\n createParentPositions(this);\r\n }\r\n }\r\n handleClick() {\r\n this.setArmHeadType();\r\n super.handleClick();\r\n }\r\n\r\n hideLayerCondition() {\r\n const showerParent = this.getParent();\r\n return showerParent.shower_head_type !== ShowerHeadTypes.shower_arm\r\n }\r\n\r\n getArrayOfConditions() {\r\n const showerParent = this.getParent();\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n if (showerParent.shower_hand_type === ShowerHandTypes.hand_shower_kit) {\r\n if (showerParent.handShowerKit && showerParent.handShowerKit.activeFeature && showerParent.handShowerKit.activeFeature.metaData[\"MountPosition\"]) {\r\n conditions.push({\r\n propName: \"MountPosition\",\r\n propValue: [\"3\"]\r\n })\r\n }\r\n } else if (showerParent.shower_hand_type === ShowerHandTypes.hand_shower_holder) {\r\n if (showerParent.handShowerHolder && showerParent.handShowerHolder.activeFeature) {\r\n conditions.push({\r\n propName: \"MountPosition\",\r\n propValue: showerParent.handShowerHolder.activeFeature.metaData[\"MountPosition\"]\r\n ? showerParent.handShowerHolder.activeFeature.metaData[\"MountPosition\"]\r\n : [\"2\"]\r\n })\r\n }\r\n }\r\n\r\n return conditions\r\n }\r\n\r\n}\r\n","import {Part} from \"../part\";\r\nimport {windowThumbnail} from '../../../bvComponent/core/assets';\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport WindowKits from \"../subparts/window/windowKits\";\r\nimport WindowBody from \"../subparts/window/windowBody\";\r\n\r\nexport class WindowParent extends Part {\r\n static id = 'Window';\r\n\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Window';\r\n this.homePageTitle = 'Windows';\r\n this.translateId = \"visualizer.bathroom.window\";\r\n this.partThumbnail = windowThumbnail;\r\n this.windowBody = null;\r\n this.relatedGroupNames = [\"Window Kit\", \"Window\"];\r\n }\r\n\r\n load(dbFeature, loadFeature = true) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Window Kit\":\r\n case \"Window Kits\": {\r\n relatedItemName = \"windowKits\";\r\n RelatedItemClass = WindowKits;\r\n break;\r\n }\r\n case \"Window\": {\r\n relatedItemName = \"windowBody\";\r\n RelatedItemClass = WindowBody;\r\n break;\r\n }\r\n }\r\n return this.loadCommon(relatedItemName, RelatedItemClass, dbFeature, loadFeature)\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n setDefaultPartAfterSubTypeClick() {\r\n return this.subParts()[0]\r\n }\r\n\r\n setDefault(layout) {\r\n this.relatedItems.forEach(_ => _.setDefault(layout));\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {Shower} from \"../../parts/shower\";\r\n// import DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\nimport {ShowerAccessories} from \"../../parts/showerAccessories\";\r\nimport {CORNER_SHELVES_POSITIONS} from \"../../constants\";\r\n\r\nexport default class WindowKits extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = \"window_kits\";\r\n this.dbName = window.location.href.includes(\"quotekandb\") ? \"Window Kits\" : \"Window Kit\";\r\n this.partName = \"Window Kits\";\r\n this.translateId = \"visualizer.bathroom.window.kits\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n // navigationSubItems(filters, searchText) {\r\n // const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n // const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n // const windowParent = this.getParent();\r\n // const accessoriesParent = windowParent.layout.parts[ShowerAccessories.id];\r\n // featuresToDisplay.forEach(feature => {\r\n // if (accessoriesParent && accessoriesParent.showerPod && !accessoriesParent.showerPod.disabled) {\r\n // feature.matchesMetaFailed = \"shower_pod\";\r\n // } else if (accessoriesParent.cornerShelf && !accessoriesParent.cornerShelf.disabled\r\n // && CORNER_SHELVES_POSITIONS.some(pos => accessoriesParent.cornerShelf.layerPositions[pos] && !pos.includes(\"3\"))) {\r\n // feature.matchesMetaFailed = \"corner_shelf\";\r\n // } else if (feature.matchesMetaFailed) {\r\n // feature.matchesMetaFailed = false;\r\n // }\r\n // });\r\n // return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n // }\r\n\r\n // handleChangeParent(nonCompatibleWith) {\r\n // if (nonCompatibleWith === \"Shower Pod\") {\r\n //\r\n // }\r\n // }\r\n handleChangeParent() {\r\n // this.removeInterferingParts();\r\n this.getParent().disabled = false;\r\n this.handleClick();\r\n }\r\n\r\n removeInterferingParts = () => {\r\n const kitsParent = this.getParent();\r\n const windowParent = kitsParent.getParent();\r\n const accessoriesParent = windowParent.layout.parts[ShowerAccessories.id];\r\n if (accessoriesParent) {\r\n if (accessoriesParent.showerPod) {\r\n accessoriesParent.showerPod.disabled = true;\r\n }\r\n if (accessoriesParent.cornerShelf) {\r\n CORNER_SHELVES_POSITIONS.forEach(pos => {\r\n if (accessoriesParent.cornerShelf.layerPositions[pos] && !pos.includes(\"3\")) {\r\n accessoriesParent.cornerShelf.layerPositions[pos] = null;\r\n }\r\n })\r\n }\r\n }\r\n }\r\n\r\n // disabledClick() {\r\n // if (!this.disabled) {\r\n // this.removeInterferingParts();\r\n // }\r\n // }\r\n\r\n getArrayOfConditions() {\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n const windowParent = this.getParent();\r\n const layout = windowParent.layout;\r\n const showerParent = layout.parts[Shower.id];\r\n const showerSize = showerParent.showerSize();\r\n if (showerParent && showerSize) {\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerSize\r\n });\r\n }\r\n // if (windowBody && this.windowNeededLayouts.includes(layout.type)) {\r\n // conditions.push({\r\n // propName: \"Window\",\r\n // propValue: (windowBody && windowBody.activeFeature && windowBody.disabled) ? \"Off\" : \"On\"\r\n // })\r\n // }\r\n return conditions\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Window.WindowKits;\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {Shower} from \"../../parts/shower\";\r\n\r\nexport default class WindowBody extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'window_body';\r\n this.partName = 'Window';\r\n this.translateId = \"visualizer.bathroom.window\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n getArrayOfConditions() {\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n const layout = this.getParent().layout;\r\n const showerParent = layout.parts[Shower.id];\r\n const showerSize = showerParent.showerSize();\r\n if (showerParent && showerSize) {\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerSize\r\n });\r\n }\r\n return conditions\r\n }\r\n\r\n}\r\n","import {Part} from \"../part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport {floorThumbnail} from \"../../../kvComponent/core/assets\";\r\n\r\nimport {IntermediatePart} from \"../intermediatePart\";\r\nimport {Shower} from \"./shower\";\r\nimport Walls from \"./walls\";\r\nimport {getCurrentRoomType} from \"../../../appLayout\";\r\nimport {LOOK_ROOM_TYPES} from \"../constants\";\r\n\r\nexport default class Floor extends Part {\r\n static id = 'Floor';\r\n\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n this.partId = 'parent_floor';\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Floor';\r\n this.translateId = \"visualizer.bathroom.floor\";\r\n this.partThumbnail = floorThumbnail;\r\n this.relatedGroupNames = [\"Floor\"];\r\n }\r\n\r\n load(dbFeature, loadFeature = true) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Flor\":\r\n case \"Floor\":\r\n relatedItemName = \"floorBody\";\r\n RelatedItemClass = FloorBody;\r\n break;\r\n }\r\n return this.loadCommon(relatedItemName, RelatedItemClass, dbFeature, loadFeature)\r\n }\r\n\r\n}\r\n\r\nclass FloorBody extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'bathroom_floor';\r\n this.partName = 'Floor';\r\n this.translateId = \"visualizer.bathroom.floor\";\r\n this.isStoneFeature = true;\r\n }\r\n\r\n getArrayOfConditions() {\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n const layout = this.getParent().layout;\r\n const showerParent = layout.parts[Shower.id];\r\n const showerSize = showerParent ? showerParent.showerSize() : null;\r\n if (showerSize) {\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerSize\r\n })\r\n }\r\n const wallParent = layout.parts[Walls.id];\r\n if ((getCurrentRoomType(layout) === LOOK_ROOM_TYPES.as) && wallParent && wallParent.splitWall) {\r\n conditions.push({\r\n propName: \"SplitWallType\",\r\n propValue: wallParent.getSplitWallType()\r\n })\r\n }\r\n return conditions\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes) {\r\n const zIndex = zIndexes.Background.Floor;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n }\r\n}\r\n\r\n\r\n","import {Part} from \"../part\";\r\nimport {wallsThumbnail} from \"../../../bvComponent/core/assets\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\n\r\nimport Attachment from \"../subparts/globals/attachment\";\r\nimport Decor from \"../subparts/globals/decor\";\r\nimport ShowerWallMirror from \"../subparts/globals/showerWallMirror\";\r\nimport {DECORS_MAX} from \"../constants\";\r\n\r\nconst compareMountPosition = (checkFeature, dbFeatureLoading) => {\r\n return checkFeature.metaData[\"MountPosition\"] && checkFeature.matchesMetaForCondition(\"MountPosition\", dbFeatureLoading.metaData[\"MountPosition\"])\r\n}\r\n\r\nconst checkForExistingDecor = (currentDecorFeatureGroup, dbFeature) => {\r\n if (!currentDecorFeatureGroup) { // we skipped all decors, but didn't find the same\r\n return true\r\n }\r\n if (dbFeature.sharedFeatureName === currentDecorFeatureGroup.decorName) { // decors are matching by name\r\n return true\r\n }\r\n if (dbFeature.metaData[\"MountPosition\"]) {\r\n if (Array.isArray(dbFeature.metaData[\"RoomLayout\"])) {\r\n return dbFeature.metaData[\"RoomLayout\"].some(layoutName => {\r\n return currentDecorFeatureGroup.featuresList && Array.isArray(currentDecorFeatureGroup.featuresList[layoutName])\r\n && currentDecorFeatureGroup.featuresList[layoutName].some(feature => compareMountPosition(feature, dbFeature))\r\n })\r\n } else {\r\n return currentDecorFeatureGroup.some(feature => compareMountPosition(feature, dbFeature))\r\n }\r\n }\r\n return false\r\n}\r\n\r\nexport default class Globals extends Part {\r\n static id = \"Globals\";\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = \"Globals\";\r\n this.partThumbnail = wallsThumbnail;\r\n\r\n // related items\r\n this.toiletPaper = null;\r\n this.decor1 = null; // can be up to 10\r\n this.showerWallMirror = null; // mirror reflection\r\n this.lamp = null; // mirror reflection\r\n this.mirrors = null; // mirror reflection\r\n }\r\n\r\n load(dbFeature) {\r\n let\r\n relatedItemName = \"\",\r\n decorCount = 0,\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Decor\":\r\n case \"Decore\": {\r\n for (let i = 1; i <= DECORS_MAX; i++) {\r\n const currentDecorFeatureGroup = this[\"decor\" + i];\r\n if (checkForExistingDecor(currentDecorFeatureGroup, dbFeature)) {\r\n relatedItemName = \"decor\" + i;\r\n decorCount = i;\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n case \"Attachment\": {\r\n relatedItemName = \"attachment\";\r\n RelatedItemClass = Attachment;\r\n break;\r\n }\r\n case \"Shower Wall Mirror\": {\r\n relatedItemName = \"showerWallMirror\";\r\n RelatedItemClass = ShowerWallMirror;\r\n break;\r\n }\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n if (dbFeature.groupName === \"Decor\" || dbFeature.groupName === \"Decore\") {\r\n this[relatedItemName] = new Decor(true, decorCount);\r\n this[relatedItemName].decorName = dbFeature.sharedFeatureName;\r\n } else {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n }\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n handleSubPartClick() {}\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport isEqual from \"lodash/isEqual\";\r\nimport {METADATA} from \"../../constants\";\r\n\r\nexport default class Attachment extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = \"attachment\";\r\n this.partName = \"Attachment\";\r\n this.hasAdditionalParts = true;\r\n }\r\n\r\n load(dbFeature) {\r\n if (!dbFeature.metaData[\"Side\"] && dbFeature.sharedFeatureName.includes(\"ountertop\")) {\r\n dbFeature.metaData[\"Side\"] = [METADATA.LeftSide];\r\n }\r\n return super.load(dbFeature);\r\n }\r\n\r\n checkIfFeaturePartIsMatching() {\r\n this.activeFeatureParts = this.setActiveFeatureParts();\r\n }\r\n\r\n setActiveFeatureParts() {\r\n const layout = this.getParent().layout;\r\n const activeFeatures = layout.getActiveFeatures(true, true);\r\n let matchingFeatures = [];\r\n const currentConditions = this.getArrayOfConditions();\r\n const selectFrom = this.features.filter(attFeature => attFeature.matchesMetaForArrayOfConditions(currentConditions));\r\n activeFeatures.forEach(cartItem => {\r\n if (!cartItem.cartFeature || cartItem.featureGroup.disabled || !cartItem.cartFeature.metaData[\"MatchingFeature\"]\r\n || (cartItem.partId === this.partId)) {\r\n return\r\n }\r\n selectFrom.forEach(attFeature => {\r\n if (attFeature.metaData[\"MatchingFeature\"] && attFeature.metaData[\"MatchingFeature\"].includes(\"Splitwall\")) {\r\n const splitWall = layout.parts.Walls.splitWall;\r\n if (splitWall && !splitWall.disabled && splitWall.activeFeature && splitWall.activeFeature.layer.src\r\n && !matchingFeatures.some(alreadyAddedFeature => alreadyAddedFeature.metaData[\"MatchingFeature\"]\r\n && alreadyAddedFeature.metaData[\"MatchingFeature\"].includes(\"Splitwall\"))) {\r\n matchingFeatures.push(attFeature);\r\n }\r\n } else if (isEqual(attFeature.metaData[\"MatchingFeature\"], cartItem.cartFeature.metaData[\"MatchingFeature\"])\r\n && isEqual(attFeature.metaData[\"Side\"], cartItem.cartFeature.metaData[\"Side\"])\r\n && !matchingFeatures.some(alreadyAddedFeature => {\r\n return isEqual(attFeature.metaData[\"MatchingFeature\"], alreadyAddedFeature.metaData[\"MatchingFeature\"])\r\n && isEqual(attFeature.metaData[\"Side\"], alreadyAddedFeature.metaData[\"Side\"])\r\n })) {\r\n matchingFeatures.push(attFeature)\r\n }\r\n })\r\n })\r\n return matchingFeatures;\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class Decor extends IntermediatePart {\r\n constructor(isChild, decorCount) {\r\n super(isChild);\r\n this.decorCount = decorCount;\r\n this.partId = \"decor_\" + decorCount;\r\n this.partName = \"Decor \" + decorCount;\r\n }\r\n\r\n load(dbFeature) {\r\n if (dbFeature.metaData && dbFeature.metaData[\"ShowerSize\"]) {\r\n this.needShowerSizeMeta = true;\r\n }\r\n return super.load_(dbFeature, new Decor(false, this.decorCount));\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n if (this.needShowerSizeMeta) {\r\n const showerParent = this.getParent().layout.parts[\"Shower\"];\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerParent.showerSize()\r\n });\r\n }\r\n return conditions\r\n }\r\n\r\n}\r\n","import {Shower} from \"../../parts/shower\";\r\nimport Walls from \"../../parts/walls\";\r\nimport {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class ShowerWallMirror extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = \"shower_wall_mirror\";\r\n this.partName = \"Shower Wall Mirror\";\r\n }\r\n\r\n load(dbFeature) {\r\n dbFeature.metaData[\"MatchingWallName\"] = dbFeature.metaData[\"ActualDisplayedName\"];\r\n return super.load_(dbFeature, new ShowerWallMirror());\r\n }\r\n\r\n setLayers(layout) {\r\n const showerParent = layout.parts[Shower.id];\r\n if (!showerParent || !showerParent.showerWall || !showerParent.showerWall.activeFeature || showerParent.showerWall.disabled) {\r\n super.hideLayers();\r\n return;\r\n }\r\n super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n const layout = this.getParent().layout;\r\n const showerParent = layout.parts[Shower.id];\r\n const wallParent = layout.parts[Walls.id];\r\n\r\n const showerSize = showerParent ? showerParent.showerSize() : null;\r\n if (showerSize) {\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerSize\r\n })\r\n }\r\n if (wallParent && wallParent.splitWall) {\r\n conditions.push({\r\n propName: \"SplitWallType\",\r\n propValue: wallParent.getSplitWallType()\r\n })\r\n }\r\n if (showerParent && showerParent.showerWall && showerParent.showerWall.activeFeature) {\r\n conditions.push({\r\n propName: \"MatchingWallName\",\r\n propValue: showerParent.showerWall.activeFeature.dbFeature.sharedFeatureName\r\n })\r\n }\r\n return conditions\r\n }\r\n\r\n}\r\n","import {Part} from \"../part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\n// import {BathTubType, LayoutType} from \"../constants\";\r\nimport {bathTubThumbnail} from \"../../../bvComponent/core/assets\";\r\n\r\nimport BathTubBody from \"../subparts/bathTub/bathTubBody\";\r\nimport BathTubFixture from \"../subparts/bathTub/bathTubFixture\";\r\nimport EnclosureTop from \"../subparts/bathTub/enclosureTop\";\r\nimport EnclosureBottom from \"../subparts/bathTub/enclosureBottom\";\r\nimport SkirtingBoard from \"../subparts/bathTub/skirtingBoard\";\r\n\r\nexport class Bathtub extends Part {\r\n static id = 'Bathtub';\r\n\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Bathtub';\r\n this.translateId = \"visualizer.bathroom.bathtub\";\r\n this.partThumbnail = bathTubThumbnail;\r\n this.bathTubBody = null;\r\n this.bathTubFixture = null;\r\n this.enclosureTop = null;\r\n this.enclosureBottom = null;\r\n this.skirtingBoard = null;\r\n this.relatedItems = [];\r\n this.relatedGroupNames = [\"Bathtub\", \"Bathtub Fixture\", \"Enclosure Top\", \"Enclosure Bottom\", \"Skirting Board\"];\r\n\r\n }\r\n\r\n load(dbFeature, loadFeature = true) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Bathtub\":\r\n relatedItemName = \"bathTubBody\";\r\n RelatedItemClass = BathTubBody;\r\n break;\r\n case \"Bathtub Fixture\":\r\n relatedItemName = \"bathTubFixture\";\r\n RelatedItemClass = BathTubFixture;\r\n break;\r\n case \"Enclosure Top\":\r\n case \"EnclosureTop\":\r\n relatedItemName = \"enclosureTop\";\r\n RelatedItemClass = EnclosureTop;\r\n break;\r\n case \"Enclosure Bottom\":\r\n case \"EnclosureBottom\":\r\n relatedItemName = \"enclosureBottom\";\r\n RelatedItemClass = EnclosureBottom;\r\n break;\r\n case \"Skirting Board\":\r\n relatedItemName = \"skirtingBoard\";\r\n RelatedItemClass = SkirtingBoard;\r\n break;\r\n }\r\n return this.loadCommon(relatedItemName, RelatedItemClass, dbFeature, loadFeature)\r\n }\r\n\r\n changeLayout() {\r\n // changeLayout(layoutType) {\r\n // if (layoutType === LayoutType.Layout1 && this.bathTubBody) {\r\n // // this.activeSubType_ = BathTubType.Custom60in;\r\n // // this.bathTubType_ = BathTubType.Custom60in;\r\n // if (!this.layout.parts.Shower.showerBody.disabled) { // disable bathtub if shower is active\r\n // if (this.bathTubBody) {\r\n // this.bathTubBody.disabled = true;\r\n // }\r\n // }\r\n // } else {\r\n // if (this.bathTubBody) {\r\n // this.bathTubBody.disabled = false;\r\n // }\r\n // }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {METADATA} from \"../../constants\";\r\n\r\nexport default class BathTubBody extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = \"bathtub_body\";\r\n this.partName = 'Bathtub';\r\n this.translateId = \"visualizer.bathroom.bathtub.bathtub\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n if (!dbFeature.metaData[\"BathType\"]) {\r\n dbFeature.metaData[\"BathType\"] = [METADATA.BathtubWithoutEnclosures]; // remove enclosure top and bottom\r\n }\r\n return super.load(dbFeature);\r\n }\r\n\r\n disabledClick() {\r\n const bathParent = this.getParent();\r\n [\"bathTubFixture\", \"enclosureTop\", \"enclosureBottom\"].forEach(relName => {\r\n if (bathParent[relName]) {\r\n bathParent[relName].disabled = this.disabled;\r\n }\r\n })\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {LOOK_ROOM_TYPES} from \"../../constants\";\r\nimport {getCurrentRoomType} from \"../../../../appLayout\";\r\n\r\nexport default class BathTubFixture extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = \"bathtub_fixture\";\r\n this.partName = \"Fixture\";\r\n this.translateId = \"visualizer.bathroom.bathtub.bathtub_fixture\";\r\n this.dbName = \"Bathtub Fixture\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n disabledClick() {\r\n const bathTubBody = this.getParent().bathTubBody;\r\n if (bathTubBody) {\r\n bathTubBody.disabled = this.disabled || !bathTubBody.canBeEnabled(); // true or check if it can be enabled;\r\n }\r\n }\r\n\r\n getArrayOfConditions() {\r\n if (getCurrentRoomType() === LOOK_ROOM_TYPES.as) {\r\n const bathtubParent = this.getParent();\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n if (bathtubParent.bathTubBody && bathtubParent.bathTubBody.activeFeature && bathtubParent.bathTubBody.activeFeature.metaData[\"MountType\"]) {\r\n conditions.push({\r\n propName: \"MountType\",\r\n propValue: bathtubParent.bathTubBody.activeFeature.metaData[\"MountType\"]\r\n })\r\n }\r\n return conditions\r\n }\r\n return super.getArrayOfConditions()\r\n }\r\n\r\n}\r\n","import EnclosureCommon from \"./enclosureCommon\";\r\n\r\nexport default class EnclosureTop extends EnclosureCommon {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'enclosure_top';\r\n this.dbName = 'EnclosureTop';\r\n this.partName = 'Enclosure Top';\r\n this.translateId = \"visualizer.bathroom.shower.enclosure_top\";\r\n this.canBeDisabled = false;\r\n this.isStoneFeature = true;\r\n }\r\n\r\n}\r\n","import EnclosureCommon from \"./enclosureCommon\";\r\n\r\nexport default class EnclosureBottom extends EnclosureCommon {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'enclosure_bottom';\r\n this.dbName = 'EnclosureBottom';\r\n this.partName = 'Enclosure Bottom';\r\n this.translateId = \"visualizer.bathroom.shower.enclosure_bottom\";\r\n this.canBeDisabled = false;\r\n this.isStoneFeature = true;\r\n }\r\n\r\n}\r\n","import EnclosureCommon from \"./enclosureCommon\";\r\nimport {METADATA} from \"../../constants\";\r\n\r\nexport default class SkirtingBoard extends EnclosureCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'skirting_board';\r\n this.partName = 'Skirting Board';\r\n this.translateId = \"visualizer.bathroom.accessories.skirting_board\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n if (!dbFeature.metaData[\"BathType\"]) {\r\n dbFeature.metaData[\"BathType\"] = [METADATA.BathtubWithoutEnclosures]; // for free standing bath\r\n }\r\n return super.load(dbFeature);\r\n }\r\n\r\n}\r\n","import {Part} from \"../part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport { showerAccessoriesThumbnail } from '../../../bvComponent/core/assets';\r\n\r\nimport Table from \"../subparts/accessories/table\";\r\nimport Chair from \"../subparts/accessories/chair\";\r\nimport Carpet from \"../subparts/accessories/carpet\";\r\nimport Lamp from \"../subparts/accessories/lamp\";\r\nimport Basket from \"../subparts/accessories/basket\";\r\nimport Frame from \"../subparts/accessories/frame\";\r\nimport Plant from \"../subparts/accessories/plant\";\r\n\r\nexport class Accessories extends Part {\r\n static id = 'Accessories';\r\n\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partThumbnail = showerAccessoriesThumbnail;\r\n this.partName = 'Accessories';\r\n this.translateId = \"visualizer.bathroom.accessories2\";\r\n this.relatedItems = [];\r\n\r\n // related items\r\n this.table = null;\r\n this.chair = null;\r\n this.lamp = null;\r\n this.carpet = null;\r\n this.basket = null;\r\n this.frame = null;\r\n this.plant = null;\r\n\r\n //current active caddie type\r\n this.relatedGroupNames = [\"Table\", \"Chair\", \"Lamp\", \"Carpet\", \"Basket\", \"Frame\", \"Plant\"];\r\n }\r\n load(dbFeature, loadFeature = true) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Table\": {\r\n relatedItemName = \"table\";\r\n RelatedItemClass = Table;\r\n break;\r\n }\r\n case \"Chair\": {\r\n relatedItemName = \"chair\";\r\n RelatedItemClass = Chair;\r\n break;\r\n }\r\n case \"Lamp\":\r\n case \"Lamps\": {\r\n relatedItemName = \"lamp\";\r\n RelatedItemClass = Lamp;\r\n break;\r\n }\r\n case \"Carpet\":\r\n case \"Carpets\": {\r\n relatedItemName = \"carpet\";\r\n RelatedItemClass = Carpet;\r\n break;\r\n }\r\n case \"Basket\": {\r\n relatedItemName = \"basket\";\r\n RelatedItemClass = Basket;\r\n break;\r\n }\r\n case \"Frame\": {\r\n relatedItemName = \"frame\";\r\n RelatedItemClass = Frame;\r\n break;\r\n }\r\n case \"Plant\": {\r\n relatedItemName = \"plant\";\r\n RelatedItemClass = Plant;\r\n break;\r\n }\r\n }\r\n return this.loadCommon(relatedItemName, RelatedItemClass, dbFeature, loadFeature)\r\n }\r\n\r\n}\r\n\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class Table extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'table';\r\n this.partName = 'Table';\r\n this.translateId = \"visualizer.bathroom.shower.table\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class Chair extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'chair';\r\n this.partName = 'Chair';\r\n this.translateId = \"visualizer.bathroom.shower.chair\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class Carpet extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'carpet';\r\n this.partName = 'Carpet';\r\n this.translateId = \"visualizer.bathroom.shower.carpet\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class Lamp extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'lamp';\r\n this.partName = 'Lamp';\r\n this.translateId = \"visualizer.bathroom.shower.lamp\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class Basket extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'basket';\r\n this.partName = 'Basket';\r\n this.translateId = \"visualizer.bathroom.basket\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class Frame extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'frame';\r\n this.partName = 'Frame';\r\n this.translateId = \"visualizer.bathroom.frame\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class Plant extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'plant';\r\n this.partName = 'Plant';\r\n this.translateId = \"visualizer.bathroom.plant\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n}\r\n","import {Vanity} from \"../../parts/vanity\";\r\nimport {createParentPositions, METADATA, LOOK_ROOM_TYPES, LayoutAbbreviations} from \"../../constants\";\r\nimport VanityCommon from \"./vanityCommon\";\r\nimport {getCurrentRoomType} from \"../../../../appLayout\";\r\n\r\nexport default class VanityCountertop extends VanityCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'vanity_countertop';\r\n this.partName = 'Countertop';\r\n this.translateId = \"visualizer.bathroom.vanity.vanity_countertop\";\r\n this.homePageTitle = 'Countertops';\r\n this.visible = [Vanity.Types.Custom];\r\n this.isStoneFeature = true;\r\n this.canBeDisabled = true;\r\n if (isChild) {\r\n createParentPositions(this);\r\n this.nextFeaturesPageToLoadArray = {};\r\n LayoutAbbreviations.forEach(layoutAbbreviation => {\r\n this.nextFeaturesPageToLoadArray[layoutAbbreviation] = {\r\n page: 0,\r\n allReceived: false,\r\n };\r\n });\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n if (!dbFeature.metaData[\"MatchingFeature\"]) {\r\n dbFeature.metaData[\"MatchingFeature\"] = [METADATA.NO];\r\n }\r\n if (!dbFeature.metaData[\"Side\"]) {\r\n dbFeature.metaData[\"Side\"] = [METADATA.LeftSide];\r\n }\r\n return super.load(dbFeature);\r\n }\r\n\r\n disabledClick() {\r\n // this.getParent().toggleVanityParts(this.disabled); // temporary removed for demo\r\n }\r\n\r\n getArrayOfConditions() {\r\n const vanityParent = this.getParent();\r\n let conditions = super.getArrayOfConditions();\r\n if (getCurrentRoomType(vanityParent.layout) === LOOK_ROOM_TYPES.as) {\r\n const activeMatchingSink = vanityParent.getActiveMatchingMetaFromRelatedItem(\"vanity_sink\");\r\n const activeMatchingSinkSku = vanityParent.getActiveSkuFromRelatedItem(\"vanity_sink\");\r\n if ((activeMatchingSink && activeMatchingSink.includes(METADATA.NO)) || activeMatchingSinkSku) {\r\n const propValue = !activeMatchingSink.includes(METADATA.NO) && activeMatchingSinkSku ? activeMatchingSinkSku : activeMatchingSink;\r\n conditions.push({\r\n propName: \"MatchingFeature\",\r\n propValue,\r\n });\r\n if (!(Array.isArray(propValue) && propValue[0] === METADATA.NO)) { // remove since we need to use Lixil matchingfeature logic\r\n conditions = conditions.filter(condition => condition.propName !== \"VanitySize\");\r\n }\r\n }\r\n const activeSideMeta = vanityParent.getActiveMatchingMetaFromRelatedItem(vanityParent.vanity_type, \"Side\");\r\n if (activeSideMeta && activeSideMeta.includes(\"C\")) {\r\n conditions.push({\r\n propName: \"Side\",\r\n propValue: activeSideMeta\r\n });\r\n }\r\n }\r\n return conditions\r\n }\r\n}\r\n","import {Vanity} from \"../../parts/vanity\";\r\nimport VanityCommon from \"./vanityCommon\";\r\nimport {createParentPositions, LayoutAbbreviations, METADATA, VANITY_TYPES} from \"../../constants\";\r\n\r\nexport default class VanityBacksplash extends VanityCommon {\r\n\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'vanity_backsplash';\r\n this.partName = 'Backsplash';\r\n this.translateId = \"visualizer.bathroom.vanity.vanity_backsplash\";\r\n this.visible = [Vanity.Types.Custom];\r\n this.canBeDisabled = true;\r\n this.isStoneFeature = true;\r\n if (isChild) {\r\n createParentPositions(this);\r\n this.nextFeaturesPageToLoadArray = {};\r\n LayoutAbbreviations.forEach(layoutAbbreviation => {\r\n this.nextFeaturesPageToLoadArray[layoutAbbreviation] = {\r\n page: 0,\r\n allReceived: false,\r\n };\r\n });\r\n }\r\n }\r\n\r\n hideLayerCondition() {\r\n const vanityParent = this.getParent();\r\n return !vanityParent.vanityCabinet\r\n || !vanityParent.vanityCabinet.activeFeature\r\n || vanityParent.vanity_type !== VANITY_TYPES.vanity_cabinet\r\n || !vanityParent.vanityCabinet.activeFeature.metaData[\"MatchingFeature\"].includes(METADATA.NO)\r\n }\r\n\r\n}\r\n","import {Vanity} from \"../../parts/vanity\";\r\nimport VanityCommon from \"./vanityCommon\";\r\nimport {createParentPositions, METADATA} from \"../../constants\";\r\n\r\nexport default class Mirror extends VanityCommon {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'vanity_mirror';\r\n this.partName = 'Mirror';\r\n this.translateId = \"visualizer.bathroom.vanity.vanity_mirror\";\r\n this.homePageTitle = 'Mirrors';\r\n this.visible = [Vanity.Types.Complete, Vanity.Types.Custom];\r\n this.canBeDisabled = false;\r\n if (isChild) {\r\n createParentPositions(this);\r\n }\r\n }\r\n load(dbFeature) {\r\n if (Array.isArray(dbFeature.metaData[\"VanitySize\"]) && dbFeature.metaData[\"VanitySize\"][0] === \"0\") {\r\n dbFeature.metaData[\"VanitySize\"] = [METADATA.ALL];\r\n }\r\n if (Array.isArray(dbFeature.metaData[\"MirrorShape\"]) && dbFeature.metaData[\"MirrorShape\"][0] === \"00\") {\r\n dbFeature.metaData[\"MirrorShape\"] = [METADATA.ALL];\r\n }\r\n return super.load(dbFeature);\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport { Vanity } from \"../../parts/vanity\";\r\nimport {createParentPositions, METADATA, SIDE_POSITIONS, VANITY_TYPES, LOOK_ROOM_TYPES} from \"../../constants\";\r\nimport {getSkuWithoutDot, removeLookPointFor} from \"../../../lookNavigation/lookFunctions2\";\r\nimport {navFeatureCLick} from \"../../../lookNavigation/lookFunctions\";\r\nimport {getCurrentRoomType} from \"../../../../appLayout\";\r\nimport {findNextVanityTypeFeature} from \"../../../lookNavigation/lookNavigationFunctions\";\r\nimport {IS_QKB_UI} from \"../../../../../config\";\r\nimport {getFeatureIsLocked} from \"../../../../../misc/helpers\";\r\n\r\nexport default class Sink extends IntermediatePart {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'vanity_sink';\r\n this.partName = 'Sink';\r\n this.translateId = \"visualizer.bathroom.vanity.vanity_sink\";\r\n this.homePageTitle = 'Sinks';\r\n this.visible = [Vanity.Types.Custom];\r\n // this.canBeDisabled = true;\r\n if (isChild) {\r\n createParentPositions(this);\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n if (!dbFeature.metaData[\"MountType\"]) {\r\n dbFeature.metaData[\"MountType\"] = [METADATA.Inner]\r\n }\r\n if (!dbFeature.metaData[\"MatchingFeature\"] || dbFeature.metaData[\"MountLevel\"]) {\r\n // added MountLevel for new sinks that can be applied for vanities with countertops\r\n dbFeature.metaData[\"MatchingFeature\"] = [METADATA.NO];\r\n dbFeature.metaData[\"CustomVanityType\"] = VANITY_TYPES.vanity_cabinet;\r\n }\r\n if (dbFeature.metaData[\"MountHoles\"] && dbFeature.metaData[\"MountHoles\"].includes(\"0\")) {\r\n dbFeature.metaData[\"MountHoles\"] = [\"0\", \"1\", \"4\", \"8\"]; // UnderMount Sinks - they can be used with all faucet types\r\n }\r\n // if (!dbFeature.metaData[\"SingleHole\"]) {\r\n // dbFeature.metaData[\"SingleHole\"] = dbFeature.lixilProductSubCategory === METADATA.WallHungSinks // todo change to filters\r\n // ? [METADATA.WallHungSinks]\r\n // : [METADATA.ALL];\r\n // }\r\n if (Array.isArray(dbFeature.metaData[\"SinkWidth\"]) && dbFeature.metaData[\"SinkWidth\"][0]) {\r\n dbFeature.metaData[\"SinkWidth\"] = +dbFeature.metaData[\"SinkWidth\"][0] + 5; // convert to number\r\n // for example, width is 23, 23 + 5 = 28, vanities with VanitySize 24 will be hidden\r\n }\r\n if (Array.isArray(dbFeature.metaData[\"WaterLevel\"]) && dbFeature.metaData[\"WaterLevel\"][0]) {\r\n dbFeature.metaData[\"WaterLevel\"] = +dbFeature.metaData[\"WaterLevel\"][0] + 3; // convert to number and add 3! they should be higher + 3\r\n }\r\n dbFeature.metaData[\"layerPosition\"] = !dbFeature.metaData[\"Side\"]\r\n ? SIDE_POSITIONS[0]\r\n : dbFeature.metaData[\"Side\"] ? dbFeature.metaData[\"Side\"][0] : \"\";\r\n const partNumber = dbFeature.metaData[\"layerPosition\"] === SIDE_POSITIONS[0] ? 1 : 2;\r\n return super.load_(dbFeature, new Sink(false, partNumber), true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n\r\n // eslint-disable-next-line no-unused-vars\r\n navigationSubItems(filters, searchText, forFeature, filterGroups, restOptions = {}) {\r\n const {firstOpenedConditions, returnAllFeatures} = restOptions;\r\n if (getCurrentRoomType() === LOOK_ROOM_TYPES.as && !IS_QKB_UI) {\r\n const featuresList = this.getFeaturesForNavigationFrom(returnAllFeatures);\r\n const filteredAvailableFeatures = this.getFeaturesBySearchText(this.getFilteredFeaturesByFilters(filters, featuresList), searchText);\r\n let featuresToDisplay = this.navigationSubItemsWithFilterMultipleConditions(firstOpenedConditions || this.getArrayOfConditions(true), filteredAvailableFeatures);\r\n filteredAvailableFeatures.forEach(feature => {\r\n if (!feature.metaData[\"CustomVanityType\"] || !feature.metaData[\"CustomVanityType\"].length\r\n && featuresToDisplay.every(shownFeature => shownFeature.dbFeature.id !== feature.dbFeature.id)) {\r\n featuresToDisplay.push(feature);\r\n }\r\n });\r\n let sinkFeatures = [];\r\n if (this.activeFeature && this.activeFeature.metaData.layerPosition && Array.isArray(this.activeFeature.metaData.MountType)) {\r\n for (let sinkFeature of featuresToDisplay) {\r\n const alreadyExistingIndex = sinkFeatures.findIndex(feature => {\r\n return feature.dbFeature.sharedFeatureName === sinkFeature.dbFeature.sharedFeatureName\r\n });\r\n if (alreadyExistingIndex > -1) {\r\n if (sinkFeature.metaData.layerPosition && (this.activeFeature.metaData.layerPosition === sinkFeature.metaData.layerPosition)\r\n && sinkFeature.metaData.MountType && (this.activeFeature.metaData.MountType[0] === sinkFeature.metaData.MountType[0])) {\r\n sinkFeatures.splice(alreadyExistingIndex, 1, sinkFeature)\r\n }\r\n } else {\r\n sinkFeatures.push(sinkFeature);\r\n }\r\n }\r\n } else {\r\n sinkFeatures = featuresToDisplay;\r\n }\r\n return this.navigationItemsWithOptions(filters, forFeature, filterGroups, sinkFeatures)\r\n }\r\n return super.navigationSubItems(filters, searchText, forFeature, filterGroups, restOptions)\r\n }\r\n\r\n getNextVanityTypeFeature(shouldCheckSize = false) {\r\n const vanityParent = this.getParent().getParent();\r\n const currentActiveMatchingFeatureSku = vanityParent.getActiveSkuFromRelatedItem(vanityParent.vanity_type);\r\n const currentActiveMatchingFeatureMeta = vanityParent.getActiveMatchingMetaFromRelatedItem(vanityParent.vanity_type);\r\n const sinkSku = getSkuWithoutDot(this.dbFeature.sharedFeatureName);\r\n\r\n const currentMatchingMatchingFeature = this.metaData[\"MatchingFeature\"] && (!currentActiveMatchingFeatureSku || !this.metaData[\"MatchingFeature\"].includes(currentActiveMatchingFeatureSku));\r\n const currentMatchingMatchingSku = currentActiveMatchingFeatureMeta && !currentActiveMatchingFeatureMeta.includes(sinkSku);\r\n if (currentMatchingMatchingFeature || currentMatchingMatchingSku) {\r\n const relatedItem = vanityParent.relatedItems.find(relItem => relItem.partId === vanityParent.vanity_type);\r\n if (relatedItem) {\r\n return findNextVanityTypeFeature(this, relatedItem, shouldCheckSize)\r\n }\r\n }\r\n return null\r\n }\r\n\r\n handleClick(forceClick = false, setVanityOnly = false) {\r\n const asBathroom = getCurrentRoomType() === LOOK_ROOM_TYPES.as;\r\n const featureIsLocked = getFeatureIsLocked(this, forceClick);\r\n if (asBathroom && !featureIsLocked) {\r\n const vanityParent = this.getParent().getParent();\r\n if (!this.metaData[\"CustomVanityType\"] || !this.metaData[\"CustomVanityType\"].length) {\r\n vanityParent.vanity_type = null;\r\n // } else if (!vanityParent.vanity_type || !this.metaData[\"CustomVanityType\"].includes(vanityParent.vanity_type)) {\r\n } else if (!this.metaData[\"CustomVanityType\"].includes(vanityParent.vanity_type)) {\r\n vanityParent.vanity_type = this.metaData[\"CustomVanityType\"][0];\r\n }\r\n if (setVanityOnly) {\r\n return // vanity should be set after the sink updates it's layer positions\r\n }\r\n const matchFeature = this.getNextVanityTypeFeature();\r\n console.log(\"matchFeature\", matchFeature);\r\n // console.log(\"forceClick\", forceClick);\r\n if (matchFeature) {\r\n navFeatureCLick(matchFeature, false, forceClick, false)\r\n }\r\n // if (vanityParent.sink_type && vanityParent.sink_type.includes(SINK_TYPES.standAlone)) {\r\n // // vanityParent.vanityCabinet.disabled = true;\r\n // if (vanityParent.vanityCabinet.layerPositions) {\r\n // Object.keys(vanityParent.vanityCabinet.layerPositions).forEach(position => {\r\n // vanityParent.vanityCabinet.layerPositions[position] = null;\r\n // })\r\n // }\r\n // } else {\r\n // // vanityParent.vanityCabinet.disabled = false;\r\n // if (vanityParent.vanityCabinet.layerPositions) {\r\n // Object.keys(vanityParent.vanityCabinet.layerPositions).forEach(position => {\r\n // vanityParent.vanityCabinet.layerPositions[position] = vanityParent.vanityCabinet.getMatchingPositionFeature(position, vanityParent.vanityCabinet.activeFeature);\r\n // })\r\n // }\r\n // }\r\n }\r\n super.handleClick(forceClick);\r\n if (asBathroom && !featureIsLocked) {\r\n const vanityParent = this.getParent().getParent();\r\n vanityParent.updateVanityParts();\r\n }\r\n }\r\n\r\n handleChangeParent(nonCompatibleWith) {\r\n if (nonCompatibleWith === \"faucet\") {\r\n // some additional logic if needed\r\n } else {\r\n this.getParent().getParent().vanityCabinet.setActiveFeatureByFilter(\"Size\", this.metaData[\"VanitySize\"] ? this.metaData[\"VanitySize\"][0] : null); // \"60in\", etc.\r\n }\r\n }\r\n\r\n setActiveFeatureByFilter(filterName, filterValue) {\r\n const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions());\r\n const filteredFeatures = featuresToDisplay.filter((feature) => {\r\n return feature.metaData[filterName] && feature.metaData[filterName].includes(filterValue);\r\n });\r\n if (!super.tryToSetTheSameFeature(filteredFeatures)) {\r\n this.activeFeature = filteredFeatures.find(feature => !feature.dbFeature.displayName.includes(\"laceholder\")) || filteredFeatures[0];\r\n const placeholderAvailableFeatures = filteredFeatures.filter(feature => {\r\n return feature.dbFeature.displayName.includes(\"laceholder\")\r\n });\r\n this.placeholderFeature = placeholderAvailableFeatures[0];\r\n }\r\n }\r\n\r\n getCurrentFaucetMetaData() {\r\n const faucetParent = this.getParent().faucet;\r\n let metaObject = {};\r\n if (faucetParent && faucetParent.activeFeature) {\r\n const singleHoleMeta = faucetParent.activeFeature.dbFeature.lixilProductSubCategory === METADATA.SingleHole\r\n || faucetParent.activeFeature.dbFeature.lixilProductSubCategory === METADATA.WidespreadFaucets // todo change to filters\r\n ? METADATA.WallHungSinks\r\n : METADATA.ALL\r\n if (singleHoleMeta) {\r\n metaObject[\"SingleHole\"] = singleHoleMeta\r\n }\r\n }\r\n return metaObject\r\n }\r\n\r\n // getArrayOfConditions(forNavigation = false) {\r\n getArrayOfConditions(forNavigation = false) {\r\n const conditions = super.getArrayOfConditions();\r\n // const currentFaucetMetaData = this.getCurrentFaucetMetaData();\r\n // if (currentFaucetMetaData[\"SingleHole\"]) {\r\n // conditions.push({\r\n // propName: 'SingleHole',\r\n // propValue: currentFaucetMetaData[\"SingleHole\"]\r\n // })\r\n // }\r\n const vanityParent = this.getParent();\r\n if (getCurrentRoomType(vanityParent.layout) === LOOK_ROOM_TYPES.as) {\r\n if (vanityParent.vanity_type && !forNavigation) {\r\n conditions.push({\r\n propName: \"CustomVanityType\",\r\n propValue: vanityParent.vanity_type\r\n });\r\n const activeMatchingVanity = vanityParent.getActiveSkuFromRelatedItem(vanityParent.vanity_type);\r\n const activeMatchingFeatures = vanityParent.getActiveMatchingMetaFromRelatedItem(vanityParent.vanity_type);\r\n const activeSideMeta = vanityParent.getActiveMatchingMetaFromRelatedItem(vanityParent.vanity_type, \"Side\");\r\n if (activeMatchingVanity) {\r\n conditions.push({\r\n propName: \"MatchingFeature\",\r\n propValue: activeMatchingFeatures.includes(METADATA.NO) ? METADATA.NO : activeMatchingVanity\r\n });\r\n }\r\n if (activeMatchingFeatures) {\r\n conditions.push({\r\n propName: \"FeatureSku\",\r\n propValue: activeMatchingFeatures\r\n });\r\n }\r\n if (activeSideMeta && activeSideMeta.includes(\"C\") && !vanityParent.isDoubleVanity()) {\r\n conditions.push({\r\n propName: \"Side\",\r\n propValue: activeSideMeta\r\n });\r\n }\r\n }\r\n }\r\n return conditions;\r\n }\r\n\r\n getActiveFeatureConditions(fromFeature = this.activeFeature) {\r\n let arrayOfConditions = super.getArrayOfConditions();\r\n ['MountType', 'MountHoles'].forEach((propName) => {\r\n if (fromFeature.metaData[propName]) {\r\n arrayOfConditions.push({\r\n propName,\r\n propValue: fromFeature.metaData[propName]\r\n })\r\n }\r\n })\r\n return arrayOfConditions\r\n }\r\n\r\n canDisplayDemoPoint(parentObject) {\r\n if (getCurrentRoomType() === LOOK_ROOM_TYPES.as) {\r\n const vanityParent = this.getParent();\r\n return !vanityParent.vanity_type // pedestal sink only\r\n }\r\n return removeLookPointFor(parentObject, 3, \"2\", SIDE_POSITIONS[1])\r\n && removeLookPointFor(parentObject, 1, \"1\", SIDE_POSITIONS[1])\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport { Vanity } from \"../../parts/vanity\";\r\nimport {createParentPositions, METADATA, SIDE_POSITIONS, LOOK_ROOM_TYPES} from \"../../constants\";\r\nimport {getSkuWithoutDot, removeLookPointFor} from \"../../../lookNavigation/lookFunctions2\";\r\nimport {navFeatureCLick} from \"../../../lookNavigation/lookFunctions\";\r\nimport store from \"../../../../../store\";\r\nimport {getCurrentRoomType} from \"../../../../appLayout\";\r\n\r\nexport default class VanityFaucet extends IntermediatePart {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'vanity_faucet';\r\n this.partName = 'Faucet';\r\n this.homePageTitle = 'Faucets';\r\n this.translateId = \"visualizer.bathroom.vanity.vanity_faucet\";\r\n this.visible = [Vanity.Types.Custom];\r\n this.useMatchesFailedNavigation = true;\r\n // this.canBeDisabled = true;\r\n if (isChild) {\r\n createParentPositions(this);\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n if (dbFeature.filterValueIDs && Array.isArray(dbFeature.filterValueIDs[\"27\"])) { // Collection\r\n const concettoTMIndex = dbFeature.filterValueIDs[\"27\"].findIndex(filterValueId => filterValueId === 10410);\r\n if (concettoTMIndex > -1) { // here we remove Concetto™ filter as it comes from the feed, we can't remove if rome dashboard\r\n // we replace it to \"Concetto\"\r\n dbFeature.filterValueIDs[\"27\"].includes(9755)\r\n ? dbFeature.filterValueIDs[\"27\"].splice(concettoTMIndex, 1)\r\n : dbFeature.filterValueIDs[\"27\"].splice(concettoTMIndex, 1, 9755)\r\n }\r\n }\r\n if (!dbFeature.metaData[\"MountType\"]) {\r\n dbFeature.metaData[\"MountType\"] = [METADATA.Inner]\r\n // } else if(dbFeature.metaData[\"MountType\"].includes(METADATA.Outer) && !dbFeature.metaData[\"MountType\"].includes(METADATA.Inner)) {\r\n // dbFeature.metaData[\"MountType\"].push(METADATA.Inner)\r\n // }\r\n }\r\n if (!dbFeature.metaData[\"MountHoles\"]) {\r\n if (dbFeature.customDisplayName.includes(\"8 inch\")) {\r\n dbFeature.metaData[\"MountHoles\"] = [\"8\"]\r\n } else if (dbFeature.customDisplayName.includes(\"Single Hole\")) {\r\n dbFeature.metaData[\"MountHoles\"] = [\"1\"]\r\n } else if (dbFeature.customDisplayName.includes(\"Centerset\")) {\r\n dbFeature.metaData[\"MountHoles\"] = [\"4\"]\r\n } else {\r\n console.log(\"NO FAUCET DBFEATURE META MountHoles!\", dbFeature.customDisplayName);\r\n }\r\n // } else if(dbFeature.metaData[\"MountType\"].includes(METADATA.Outer) && !dbFeature.metaData[\"MountType\"].includes(METADATA.Inner)) {\r\n // dbFeature.metaData[\"MountType\"].push(METADATA.Inner)\r\n // }\r\n } else if (dbFeature.metaData[\"MountHoles\"].includes(\"0\")) {\r\n dbFeature.metaData[\"MountHoles\"] = [\"0\", \"1\", \"4\", \"8\"]\r\n }\r\n if (Array.isArray(dbFeature.metaData[\"Height\"]) && dbFeature.metaData[\"Height\"][0]) {\r\n dbFeature.metaData[\"Height\"] = +dbFeature.metaData[\"Height\"][0]; // convert to number\r\n }\r\n if (dbFeature.isFromAsRoom) {\r\n\r\n if (!dbFeature.metaData[\"MountLevel\"]) {\r\n if (Array.isArray(dbFeature.metaData[\"MountType\"]) && dbFeature.metaData[\"MountType\"][0]) {\r\n if (dbFeature.metaData[\"MountType\"][0] === \"U\") {\r\n dbFeature.metaData[\"MountLevel\"] = [\"0\"]\r\n } else if (dbFeature.metaData[\"MountType\"][0] === \"S\") {\r\n dbFeature.metaData[\"MountLevel\"] = [\"2\"]\r\n }\r\n } else {\r\n dbFeature.metaData[\"MountLevel\"] = [\"2\"]\r\n }\r\n }\r\n\r\n if (dbFeature.metaData[\"MountType\"].includes(METADATA.Outer)) {\r\n [\"ST\", \"T\", \"W\", \"S\", \"A\"].forEach(metaValue => {\r\n if (!dbFeature.metaData[\"MountType\"].includes(metaValue)) {\r\n dbFeature.metaData[\"MountType\"].push(metaValue);\r\n }\r\n })\r\n }\r\n if (dbFeature.metaData[\"MountType\"].includes(METADATA.StandAlone) && !dbFeature.metaData[\"MountType\"].includes(METADATA.Outer)) {\r\n dbFeature.metaData[\"MountType\"].push(METADATA.Outer);\r\n }\r\n }\r\n // if (!dbFeature.metaData[\"SingleHole\"]) {\r\n // dbFeature.metaData[\"SingleHole\"] = [dbFeature.lixilProductSubCategory]; // todo change to filters\r\n // }\r\n dbFeature.metaData[\"layerPosition\"] = dbFeature.metaData[\"Side\"] ? dbFeature.metaData[\"Side\"][0] : \"\";\r\n const partNumber = dbFeature.metaData[\"layerPosition\"] === SIDE_POSITIONS[0] ? 1 : 2;\r\n return super.load_(dbFeature, new VanityFaucet(false, partNumber), true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n\r\n getMatchingSinks() { // method is used for feature, to find the same sink as the current one\r\n const faucetParent = this.getParent();\r\n const vanityParent = faucetParent.getParent();\r\n const sinkParent = vanityParent.sink;\r\n const layout = vanityParent.layout;\r\n const currentSinkNavItems = layout.designNavigationItems({part: sinkParent});\r\n const matchingByCabinetType = currentSinkNavItems.filter(navItem => {\r\n return faucetParent.getActiveFeatureConditions(this).every(condition => navItem.part.matchesMetaForCondition(condition.propName, condition.propValue))\r\n });\r\n const withCurrentVanityType = matchingByCabinetType.filter(navItem => {\r\n if (!vanityParent.vanity_type) {\r\n return navItem.part.metaData[\"MountType\"] && navItem.part.metaData[\"MountType\"].includes(\"ST\")\r\n }\r\n return navItem.part.matchesMetaForCondition(\"CustomVanityType\", vanityParent.vanity_type)\r\n });\r\n const {filterGroups} = store.getState().filterState;\r\n const sinkCollectionName = vanityParent.sink && vanityParent.sink.activeFeature\r\n ? vanityParent.sink.activeFeature.getCollectionName(filterGroups)\r\n : \"\";\r\n const sinkCustomFullDisplayName = vanityParent.sink && vanityParent.sink.activeFeature\r\n ? vanityParent.sink.activeFeature.getCustomFullDisplayName()\r\n : \"\";\r\n const sameCollectionName = !sinkCollectionName ? withCurrentVanityType : withCurrentVanityType.filter(navItem => {\r\n return navItem.part.getCollectionName(filterGroups) === sinkCollectionName\r\n });\r\n const sameCustomName = !sinkCustomFullDisplayName ? sameCollectionName : sameCollectionName.filter(navItem => {\r\n return navItem.part.getCustomFullDisplayName() === sinkCustomFullDisplayName\r\n });\r\n return {\r\n matchingByCabinetType,\r\n withCurrentVanityType,\r\n sameCollectionName,\r\n sameCustomName,\r\n }\r\n }\r\n\r\n getSinkToClickFromMatchingSinks = (sinkActiveFeature) => {\r\n const {\r\n matchingByCabinetType,\r\n withCurrentVanityType,\r\n sameCollectionName,\r\n sameCustomName,\r\n } = this.getMatchingSinks();\r\n // console.log(\"matchingByCabinetType\", matchingByCabinetType);\r\n // console.log(\"withCurrentVanityType\", withCurrentVanityType);\r\n // console.log(\"sameCollectionName\", sameCollectionName);\r\n // console.log(\"sameCustomName\", sameCustomName);\r\n const fromWhereToPick = sameCustomName.length\r\n ? sameCustomName\r\n : sameCollectionName.length\r\n ? sameCollectionName\r\n : withCurrentVanityType.length\r\n ? withCurrentVanityType\r\n : matchingByCabinetType;\r\n let featureToCLick = null;\r\n if (sinkActiveFeature) {\r\n const faucetParent = this.getParent();\r\n const vanityParent = faucetParent.getParent();\r\n const relatedItem = vanityParent.relatedItems.find(relItem => relItem.partId === vanityParent.vanity_type);\r\n if (relatedItem && relatedItem.activeFeature && sinkActiveFeature.metaData[\"MatchingFeature\"]) {\r\n featureToCLick = fromWhereToPick.find(navItem => {\r\n return navItem.part.metaData[\"MatchingFeature\"].includes(getSkuWithoutDot(relatedItem.activeFeature.dbFeature.sharedFeatureName))\r\n })\r\n }\r\n if (!featureToCLick) {\r\n featureToCLick = fromWhereToPick.find(navItem => navItem.part.getColorName() === sinkActiveFeature.getColorName())\r\n }\r\n }\r\n if (!featureToCLick) {\r\n featureToCLick = fromWhereToPick[0];\r\n }\r\n console.log(\"featureToCLick\", featureToCLick);\r\n return featureToCLick ? featureToCLick.part : null;\r\n }\r\n\r\n handleClick(ignoreLocked = false) {\r\n const faucetParent = this.getParent();\r\n const vanityParent = faucetParent.getParent();\r\n const sinkParent = vanityParent.sink;\r\n\r\n if (!sinkParent.activeFeature || !sinkParent.activeFeature.matchesMetaForArrayOfConditions(faucetParent.getActiveFeatureConditions(this))) {\r\n const featureToCLick = this.getSinkToClickFromMatchingSinks(sinkParent.activeFeature)\r\n if (featureToCLick) {\r\n console.log(\"sink featureToCLick\", featureToCLick);\r\n navFeatureCLick(featureToCLick, false, ignoreLocked, false);\r\n }\r\n }\r\n\r\n super.handleClick(ignoreLocked);\r\n }\r\n\r\n getCurrentSinkMetaData() {\r\n const sinkParent = this.getParent().sink;\r\n let metaObject = {};\r\n if (sinkParent && sinkParent.activeFeature) {\r\n const sinkMeta = sinkParent.activeFeature.metaData[\"MountType\"];\r\n if (sinkMeta) {\r\n metaObject[\"MountType\"] = Array.isArray(sinkMeta) ? sinkMeta[0] : sinkMeta\r\n }\r\n // const singleHoleMeta = sinkParent.activeFeature.dbFeature.lixilProductSubCategory === \"Wall Hung Sinks\" //\r\n // if (singleHoleMeta) {\r\n // metaObject[\"SingleHole\"] = METADATA.SingleHole\r\n // }\r\n const mountHolesMeta = sinkParent.activeFeature.metaData[\"MountHoles\"] // American Standard\r\n if (mountHolesMeta && !(getCurrentRoomType() === LOOK_ROOM_TYPES.grohe && mountHolesMeta.includes(\"0\"))) {\r\n metaObject[\"MountHoles\"] = mountHolesMeta\r\n }\r\n }\r\n return metaObject\r\n }\r\n\r\n getArrayOfConditions(forNavigation = false) {\r\n // const counterTopSize = this.getParent().counterTopSize(this);\r\n // const conditions = [{\r\n // propName: 'VanitySize',\r\n // propValue: counterTopSize\r\n // }];\r\n const conditions = super.getArrayOfConditions();\r\n const currentSinkMetaData = this.getCurrentSinkMetaData();\r\n [\"MountType\", \"MountHoles\"].forEach(propName => {\r\n if ((!forNavigation || ((getCurrentRoomType() === LOOK_ROOM_TYPES.grohe) && propName === \"MountType\")) && currentSinkMetaData[propName]\r\n && !(propName === \"MountHoles\" && currentSinkMetaData[propName].includes(\"0\") && currentSinkMetaData[\"MountType\"] && currentSinkMetaData[\"MountType\"].includes(\"U\"))) {\r\n if (propName === \"MountType\" && (currentSinkMetaData[propName] === \"V\")) { // do not check V sinks\r\n return\r\n }\r\n conditions.push({\r\n propName,\r\n propValue: currentSinkMetaData[propName]\r\n })\r\n }\r\n })\r\n // if (currentSinkMetaData[\"SingleHole\"]) {\r\n // conditions.push({\r\n // propName: 'SingleHole',\r\n // propValue: currentSinkMetaData[\"SingleHole\"]\r\n // })\r\n // }\r\n const vanityParent = this.getParent();\r\n const activeSideMeta = vanityParent.getActiveMatchingMetaFromRelatedItem(vanityParent.vanity_type, \"Side\");\r\n if (activeSideMeta && activeSideMeta.includes(\"C\") && !vanityParent.isDoubleVanity()) {\r\n conditions.push({\r\n propName: \"Side\",\r\n propValue: activeSideMeta\r\n });\r\n }\r\n // const countertopSize = vanityParent.counterTopSize(this);\r\n // if (countertopSize) {\r\n // conditions.push({\r\n // propName: \"VanitySize\",\r\n // propValue: countertopSize && countertopSize[0] && (countertopSize[0] === \"32\") ? \"48\" : countertopSize\r\n // })\r\n // }\r\n if (vanityParent.sink && vanityParent.sink.activeFeature) {\r\n const sinkType = vanityParent.sink.activeFeature.metaData[\"SinkType\"]\r\n if (sinkType) {\r\n conditions.push({\r\n propName: \"SinkType\",\r\n propValue: vanityParent.sink.activeFeature.metaData[\"SinkType\"]\r\n })\r\n }\r\n const mountLevel = vanityParent.sink.activeFeature.metaData[\"MountLevel\"]\r\n if (mountLevel) {\r\n conditions.push({\r\n propName: \"MountLevel\",\r\n propValue: vanityParent.sink.activeFeature.metaData[\"MountLevel\"]\r\n });\r\n if ((Array.isArray(mountLevel) && mountLevel[0] === \"0\") || mountLevel === \"0\") {\r\n const waterLevel = vanityParent.sink.activeFeature.metaData[\"WaterLevel\"]\r\n if (waterLevel) {\r\n conditions.push({\r\n propName: \"WaterLevel\", // sink WaterLevel - is faucet Height, all logic is in the matchesMetaForCondition func\r\n propValue: vanityParent.sink.activeFeature.metaData[\"WaterLevel\"]\r\n })\r\n }\r\n }\r\n }\r\n }\r\n // console.log(\"conditions\", conditions);\r\n return conditions;\r\n }\r\n\r\n getActiveFeatureConditions(fromFeature = this.activeFeature) {\r\n let arrayOfConditions = this.getArrayOfConditions();\r\n arrayOfConditions = arrayOfConditions.map(condition => {\r\n if ((condition.propName === 'MountType' || condition.propName === 'MountHoles') && fromFeature.metaData[condition.propName]) {\r\n return {\r\n propName: condition.propName,\r\n propValue: fromFeature.metaData[condition.propName]\r\n }\r\n }\r\n return condition\r\n });\r\n if (fromFeature.metaData[\"MountLevel\"]) {\r\n arrayOfConditions.push({\r\n propName: \"MountLevel\",\r\n propValue: fromFeature.metaData[\"MountLevel\"]\r\n })\r\n }\r\n return arrayOfConditions\r\n }\r\n\r\n getAvailableFeatures() {\r\n return this.features.filter(f => f.matchesMetaForCondition('VanitySize', this.getParent().counterTopSize(this)));\r\n }\r\n\r\n handleChangeParent(nonCompatibleWith) {\r\n if (nonCompatibleWith === \"sink\") {\r\n this.getParent().getParent().sink.setActiveFeatureByFilter(\"MountType\", METADATA.Inner)\r\n } else {\r\n this.getParent().getParent().vanityCabinet.setActiveFeatureByFilter(\"Size\", this.metaData[\"VanitySize\"] ? this.metaData[\"VanitySize\"][0] : null); // \"60in\", etc.\r\n }\r\n }\r\n\r\n canDisplayDemoPoint(parentObject) {\r\n if (getCurrentRoomType() === LOOK_ROOM_TYPES.as) {\r\n return removeLookPointFor(parentObject, 6, \"1\", SIDE_POSITIONS[1])\r\n }\r\n return removeLookPointFor(parentObject, 3, \"2\", SIDE_POSITIONS[1])\r\n && removeLookPointFor(parentObject, 1, \"1\", SIDE_POSITIONS[1])\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {Vanity} from \"../../parts/vanity\";\r\nimport {createParentPositions, SIDE_POSITIONS, VANITY_TYPES} from \"../../constants\";\r\n\r\nexport default class Ptrap extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'vanity_ptrap';\r\n this.partName = 'Ptrap';\r\n this.translateId = \"visualizer.bathroom.vanity.vanity_ptrap\";\r\n this.visible = [Vanity.Types.Custom];\r\n // this.canBeDisabled = true;\r\n if (isChild) {\r\n createParentPositions(this);\r\n }\r\n }\r\n\r\n disabledClick() {\r\n this.toggleLayerPositions();\r\n }\r\n\r\n // handleClick(ignoreLocked) {\r\n // const vanityParent = this.getParent().getParent();\r\n // if ((vanityParent.vanity_type !== VANITY_TYPES.vanity_washstand && vanityParent.vanity_type !== VANITY_TYPES.vanity_console)) {\r\n // if (vanityParent.vanityConsole && vanityParent.vanityConsole.activeFeature) {\r\n // vanityParent.vanityConsole.disabled = false;\r\n // vanityParent.vanity_type = VANITY_TYPES.vanity_console;\r\n // } else if (vanityParent.vanityWashstand && vanityParent.vanityWashstand.activeFeature) {\r\n // vanityParent.vanityWashstand.disabled = false;\r\n // vanityParent.vanity_type = VANITY_TYPES.vanity_washstand;\r\n // }\r\n // }\r\n // super.handleClick(ignoreLocked);\r\n // vanityParent.updateVanityParts();\r\n // }\r\n\r\n hideLayerCondition() {\r\n const vanityParent = this.getParent();\r\n return (vanityParent.vanity_type === VANITY_TYPES.vanity_cabinet && (!vanityParent.vanityCabinet || !vanityParent.vanityCabinet.activeFeature))\r\n || (vanityParent.vanity_type === VANITY_TYPES.vanity_washstand && (!vanityParent.vanityWashstand || !vanityParent.vanityWashstand.activeFeature))\r\n || (vanityParent.vanity_type === VANITY_TYPES.vanity_console && (!vanityParent.vanityConsole || !vanityParent.vanityConsole.activeFeature))\r\n }\r\n\r\n // getArrayOfConditions() {\r\n // const conditions = super.getArrayOfConditions();\r\n // const activeMatchingSink = this.getParent().getActiveSkuFromRelatedItem(\"vanity_sink\");\r\n // if (activeMatchingSink) {\r\n // conditions.push({\r\n // propName: \"MatchingFeature\",\r\n // propValue: activeMatchingSink\r\n // });\r\n // }\r\n // console.log(\"conditions\", conditions);\r\n // console.log(\"this\", this.activeFeature ? this.activeFeature.metaData : \"\");\r\n // return conditions\r\n // }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n const vanityParent = this.getParent();\r\n const activeSideMeta = vanityParent.getActiveMatchingMetaFromRelatedItem(vanityParent.vanity_type, \"Side\");\r\n if (activeSideMeta && activeSideMeta.includes(\"C\")) {\r\n conditions.push({\r\n propName: \"Side\",\r\n propValue: activeSideMeta\r\n });\r\n }\r\n // console.log(\"conditions\", conditions);\r\n return conditions;\r\n }\r\n\r\n canDisplayDemoPoint(parentObject) {\r\n const vanityParent = this.getParent();\r\n return vanityParent.vanity_type && (vanityParent.vanity_type !== VANITY_TYPES.vanity_cabinet) && (parentObject.layerPosition !== SIDE_POSITIONS[0])\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {Vanity} from \"../../parts/vanity\";\r\nimport {createParentPositions, SIDE_POSITIONS, VANITY_TYPES} from \"../../constants\";\r\nimport {updateSinkWithNewFeature} from \"../../../lookNavigation/lookNavigationFunctions\";\r\n\r\nexport default class VanityWashstand extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'vanity_washstand';\r\n this.partName = 'Washstand';\r\n this.translateId = \"visualizer.bathroom.vanity.vanity_washstand\";\r\n this.visible = [Vanity.Types.Custom];\r\n this.canBeDisabled = true;\r\n if (isChild) {\r\n createParentPositions(this);\r\n }\r\n }\r\n\r\n disabledClick() {\r\n this.toggleLayerPositions();\r\n const vanityParent = this.getParent();\r\n if (vanityParent && vanityParent.wsTowelBar) {\r\n vanityParent.wsTowelBar.disabled = this.disabled || !vanityParent.wsTowelBar.canBeEnabled(); // true or check if it can be enabled;;\r\n }\r\n }\r\n\r\n handleClick(ignoreLocked) {\r\n const vanityParent = this.getParent().getParent();\r\n vanityParent.vanity_type = VANITY_TYPES.vanity_washstand;\r\n super.handleClick(ignoreLocked);\r\n updateSinkWithNewFeature(this);\r\n vanityParent.updateVanityParts();\r\n }\r\n\r\n hideLayerCondition() {\r\n const vanityParent = this.getParent();\r\n return vanityParent.vanity_type !== VANITY_TYPES.vanity_washstand && !!this.activeFeature\r\n }\r\n\r\n // getArrayOfConditions() {\r\n // const conditions = super.getArrayOfConditions();\r\n // const activeMatchingSink = this.getParent().getActiveSkuFromRelatedItem(\"vanity_sink\");\r\n // if (activeMatchingSink) {\r\n // conditions.push({\r\n // propName: \"MatchingFeature\",\r\n // propValue: activeMatchingSink\r\n // });\r\n // }\r\n // return conditions\r\n // }\r\n\r\n canDisplayDemoPoint(parentObject) {\r\n return this.getParent().vanity_type === VANITY_TYPES.vanity_washstand && (parentObject.layerPosition !== SIDE_POSITIONS[0])\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {Vanity} from \"../../parts/vanity\";\r\nimport {VANITY_TYPES} from \"../../constants\";\r\n\r\nexport default class VanityMiddle extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'vanity_middle';\r\n this.partName = 'Vanity Middle';\r\n this.translateId = \"visualizer.bathroom.vanity.vanity_middle\";\r\n this.visible = [Vanity.Types.Custom];\r\n this.canBeDisabled = true;\r\n this.isStoneFeature = true;\r\n }\r\n\r\n hideLayerCondition() {\r\n const vanityParent = this.getParent();\r\n return !vanityParent.vanityCabinet\r\n || !vanityParent.vanityCabinet.activeFeature\r\n || vanityParent.vanity_type !== VANITY_TYPES.vanity_cabinet\r\n || (vanityParent.vanityCabinet.layerPositions && vanityParent.vanityCabinet.layerPositions[\"C\"])\r\n || (this.activeFeature && !this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions()))\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n const activeMatchingVanity = this.getParent().getActiveSkuFromRelatedItem(\"vanity_cabinet\");\r\n if (activeMatchingVanity) {\r\n conditions.push({\r\n propName: \"MatchingFeature\",\r\n propValue: activeMatchingVanity\r\n });\r\n }\r\n return conditions\r\n }\r\n\r\n canDisplayDemoPoint() {\r\n return this.getParent().vanity_type === VANITY_TYPES.vanity_cabinet\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {Vanity} from \"../../parts/vanity\";\r\nimport {createParentPositions, VANITY_TYPES} from \"../../constants\";\r\n\r\nexport default class DrawerPull extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'vanity_drawer_pull';\r\n this.partName = 'Drawer Pull';\r\n this.translateId = \"visualizer.bathroom.vanity.vanity_drawer_pull\";\r\n this.visible = [Vanity.Types.Custom];\r\n this.canBeDisabled = true;\r\n if (isChild) {\r\n createParentPositions(this);\r\n }\r\n }\r\n\r\n disabledClick() {\r\n this.toggleLayerPositions();\r\n }\r\n\r\n handleClick(ignoreLocked) {\r\n const vanityParent = this.getParent().getParent();\r\n vanityParent.vanity_type = VANITY_TYPES.vanity_cabinet;\r\n super.handleClick(ignoreLocked);\r\n vanityParent.updateVanityParts();\r\n }\r\n\r\n hideLayerCondition() {\r\n const vanityParent = this.getParent();\r\n return !vanityParent.vanityCabinet || !vanityParent.vanityCabinet.activeFeature || vanityParent.vanity_type !== VANITY_TYPES.vanity_cabinet\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n const activeMatchingVanity = this.getParent().getActiveSkuFromRelatedItem(VANITY_TYPES.vanity_cabinet);\r\n if (activeMatchingVanity) {\r\n conditions.push({\r\n propName: \"MatchingFeature\",\r\n propValue: activeMatchingVanity\r\n });\r\n }\r\n return conditions\r\n }\r\n\r\n canDisplayDemoPoint() {\r\n return this.getParent().vanity_type === VANITY_TYPES.vanity_cabinet\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {Vanity} from \"../../parts/vanity\";\r\nimport {createParentPositions, VANITY_TYPES} from \"../../constants\";\r\n\r\nexport default class WSTowelBar extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'vanity_ws_towel_bar';\r\n this.partName = 'WS Towel Bar';\r\n this.translateId = \"visualizer.bathroom.vanity.vanity_ws_towel_bar\";\r\n this.visible = [Vanity.Types.Custom];\r\n this.canBeDisabled = true;\r\n if (isChild) {\r\n createParentPositions(this);\r\n }\r\n }\r\n\r\n disabledClick() {\r\n this.toggleLayerPositions();\r\n }\r\n\r\n handleClick(ignoreLocked) {\r\n const vanityParent = this.getParent().getParent();\r\n vanityParent.vanity_type = VANITY_TYPES.vanity_washstand;\r\n super.handleClick(ignoreLocked);\r\n vanityParent.updateVanityParts();\r\n }\r\n\r\n hideLayerCondition() {\r\n const vanityParent = this.getParent();\r\n return !vanityParent.vanityWashstand || !vanityParent.vanityWashstand.activeFeature || vanityParent.vanity_type !== VANITY_TYPES.vanity_washstand\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n const activeMatchingSink = this.getParent().getActiveSkuFromRelatedItem(\"vanity_washstand\");\r\n if (activeMatchingSink) {\r\n conditions.push({\r\n propName: \"MatchingFeature\",\r\n propValue: activeMatchingSink\r\n });\r\n }\r\n return conditions\r\n }\r\n\r\n canDisplayDemoPoint() {\r\n return this.getParent().vanity_type === VANITY_TYPES.vanity_washstand\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {Vanity} from \"../../parts/vanity\";\r\nimport {createParentPositions, SIDE_POSITIONS, VANITY_TYPES, LOOK_ROOM_TYPES} from \"../../constants\";\r\nimport {removeLookPointFor} from \"../../../lookNavigation/lookFunctions2\";\r\nimport {getCurrentRoomType} from \"../../../../appLayout\";\r\n\r\nexport default class VanityLegs extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'vanity_legs';\r\n this.partName = 'Vanity Legs';\r\n this.translateId = \"visualizer.bathroom.vanity.vanity_legs\";\r\n this.visible = [Vanity.Types.Custom];\r\n this.canBeDisabled = true;\r\n if (isChild) {\r\n createParentPositions(this);\r\n }\r\n }\r\n\r\n disabledClick() {\r\n this.toggleLayerPositions();\r\n }\r\n\r\n hideLayerCondition() {\r\n const vanityParent = this.getParent();\r\n return !vanityParent.vanityCabinet || !vanityParent.vanityCabinet.activeFeature || vanityParent.vanity_type !== VANITY_TYPES.vanity_cabinet\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n const vanityParent = this.getParent();\r\n const activeMatchingVanity = vanityParent.getActiveSkuFromRelatedItem(\"vanity_cabinet\");\r\n if (activeMatchingVanity) {\r\n conditions.push({\r\n propName: \"MatchingFeature\",\r\n propValue: activeMatchingVanity\r\n });\r\n }\r\n const activeSideMeta = vanityParent.getActiveMatchingMetaFromRelatedItem(\"vanity_cabinet\", \"Side\");\r\n if (activeSideMeta && activeSideMeta.includes(\"C\")) {\r\n conditions.push({\r\n propName: \"Side\",\r\n propValue: activeSideMeta\r\n });\r\n }\r\n return conditions\r\n }\r\n\r\n canDisplayDemoPoint(parentObject) {\r\n if (getCurrentRoomType() === LOOK_ROOM_TYPES.as) {\r\n return parentObject.layerPosition !== SIDE_POSITIONS[0] && removeLookPointFor(parentObject, 6, \"1\")\r\n }\r\n return this.getParent().vanity_type === VANITY_TYPES.vanity_cabinet\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {Vanity} from \"../../parts/vanity\";\r\nimport {createParentPositions, SIDE_POSITIONS, VANITY_TYPES} from \"../../constants\";\r\nimport {updateSinkWithNewFeature} from \"../../../lookNavigation/lookNavigationFunctions\";\r\n\r\nexport default class VanityConsole extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'vanity_console';\r\n this.partName = 'Console';\r\n this.translateId = \"visualizer.bathroom.vanity.vanity_console\";\r\n this.visible = [Vanity.Types.Custom];\r\n this.canBeDisabled = true;\r\n if (isChild) {\r\n createParentPositions(this);\r\n }\r\n }\r\n\r\n disabledClick() {\r\n this.toggleLayerPositions();\r\n }\r\n\r\n handleClick(ignoreLocked) {\r\n const vanityParent = this.getParent().getParent();\r\n vanityParent.vanity_type = VANITY_TYPES.vanity_console;\r\n super.handleClick(ignoreLocked);\r\n updateSinkWithNewFeature(this);\r\n vanityParent.updateVanityParts();\r\n }\r\n\r\n hideLayerCondition() {\r\n const vanityParent = this.getParent();\r\n return vanityParent.vanity_type !== VANITY_TYPES.vanity_console && !!this.activeFeature\r\n }\r\n\r\n // getArrayOfConditions() {\r\n // const conditions = super.getArrayOfConditions();\r\n // const activeMatchingSink = this.getParent().getActiveSkuFromRelatedItem(\"vanity_sink\");\r\n // if (activeMatchingSink) {\r\n // conditions.push({\r\n // propName: \"MatchingFeature\",\r\n // propValue: activeMatchingSink\r\n // });\r\n // }\r\n // return conditions\r\n // }\r\n\r\n canDisplayDemoPoint(parentObject) {\r\n return this.getParent().vanity_type === VANITY_TYPES.vanity_console && (parentObject.layerPosition !== SIDE_POSITIONS[0])\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {Vanity} from \"../../parts/vanity\";\r\nimport {createParentPositions} from \"../../constants\";\r\n\r\nexport default class DoorHandle extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'door_handle';\r\n this.partName = 'Door Handle';\r\n this.translateId = \"visualizer.kitchen.cabinet.door_handle\";\r\n this.visible = [Vanity.Types.Custom];\r\n this.canBeDisabled = false;\r\n if (isChild) {\r\n createParentPositions(this);\r\n }\r\n }\r\n\r\n disabledClick() {\r\n this.getParent().toggleVanityParts(this.disabled);\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n const vanityParent = this.getParent();\r\n conditions.push({\r\n propName: \"VanitySize\",\r\n propValue: vanityParent.counterTopSize(this)\r\n })\r\n return conditions\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {Vanity} from \"../../parts/vanity\";\r\nimport {createParentPositions} from \"../../constants\";\r\n\r\nexport default class DrawerHandle extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'drawer_handle';\r\n this.partName = 'Drawer Handle';\r\n this.translateId = \"visualizer.kitchen.cabinet.drawer_handle\";\r\n this.visible = [Vanity.Types.Custom];\r\n this.canBeDisabled = false;\r\n if (isChild) {\r\n createParentPositions(this);\r\n }\r\n }\r\n\r\n disabledClick() {\r\n this.getParent().toggleVanityParts(this.disabled);\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n const vanityParent = this.getParent();\r\n conditions.push({\r\n propName: \"VanitySize\",\r\n propValue: vanityParent.counterTopSize(this)\r\n })\r\n return conditions\r\n }\r\n}\r\n","import workspace from \"../../workspace\";\r\nimport {findLowestRightmostPoint} from \"../../../../../helpers/coordinatesHelper\";\r\nimport {canShapeBeAutoShifted, getLineDirection} from \"../../../../../helpers/shapeHelper\";\r\nimport sqftShapeManager from \"../../../store/sqftShapeManager\";\r\nimport {getPointDistance} from \"../../../../../helpers/sqftHelper\";\r\nimport {isHorizontalDirection, isVerticalDirection} from \"../../../helpers/lineHelper\";\r\nimport workspaceControllers from \"../../../store/workspaceControllers\";\r\nimport sqftShapeIntersectionsManager from \"../../../store/sqftShapeIntersectionsManager\";\r\n\r\nexport default class ShapeAutoShuffle {\r\n __shape;\r\n\r\n constructor(shape) {\r\n this.__shape = shape;\r\n }\r\n\r\n handlePlaceShapeOnTheLine = () => {\r\n //Auto Shuffle\r\n const hoveredLines = workspace.getHoveredLines([this.__shape.id]);\r\n\r\n if (hoveredLines.length > 0) {\r\n // Get relevant shapes and lines\r\n const hoveredLine = this.getHoveredLine(hoveredLines);\r\n const hoveredShape = hoveredLine.getParent();\r\n\r\n if (canShapeBeAutoShifted(this.__shape, hoveredShape)) {\r\n const newPosition = this.calculateNewPosition(hoveredLine, hoveredShape);\r\n\r\n if (newPosition) {\r\n // Move shape to new positions\r\n this.moveShapeToPositionAndRotate(newPosition, hoveredLine);\r\n\r\n //set same snapped shape group before get shapes to shift\r\n workspaceControllers.snappedShapeGroups.setSameSnappedShapesGroup(this.__shape, hoveredShape);\r\n\r\n //Get shapes to shift\r\n const shapesToShift = this.getShapesToShift(hoveredShape, newPosition);\r\n //console.log(\"shapesToShift\", shapesToShift);\r\n\r\n // Calculate new positions\r\n const [xDiff, yDiff] = this.calculatePositionDiffForOtherShapes(hoveredLine);\r\n this.moveShapesToPositions(shapesToShift, xDiff, yDiff);\r\n\r\n this.__shape.resetState();\r\n sqftShapeIntersectionsManager.updateShapesIntersections();\r\n workspaceControllers.snappedShapeGroups.updateShapesSnappedGroups(true);\r\n workspace.getHoveredLines(); // update hovered lines\r\n return true\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Will return line for the lowest and rightmost shape\r\n * @param hoveredLines\r\n */\r\n getHoveredLine = (hoveredLines) => {\r\n const hoveredLinesShapes = hoveredLines.map(line => line.getParent());\r\n const lowestRightmostPoint = findLowestRightmostPoint(hoveredLinesShapes.map(shape => shape.getPosition()));\r\n const shapeToShift = hoveredLinesShapes.find(shape => {\r\n return shape.getPosition() === lowestRightmostPoint\r\n && shape.id !== this.__shape.id // skip current moving shape\r\n });\r\n\r\n return hoveredLines.find(line => line.getParent().id === shapeToShift.id);\r\n }\r\n\r\n /**\r\n * Will return all shapes that are lower or on the same line then point\r\n * @param hoveredShape\r\n * @param point\r\n */\r\n getShapesToShift = (hoveredShape, point) => {\r\n const snappedShapeGroup = hoveredShape.shapeAbsolute.getSnappedShapeGroup();\r\n if (snappedShapeGroup !== null && snappedShapeGroup !== undefined) {\r\n const snappedShapes = workspaceControllers.snappedShapeGroups.getSnappedShapes(snappedShapeGroup);\r\n if (snappedShapes) {\r\n const snappedShapesWithoutMovingShape = snappedShapes.filter(shape =>\r\n shape.id !== this.__shape.id\r\n && (hoveredShape.partId === shape.partId\r\n || hoveredShape.partId === shape.parentPartId\r\n || (hoveredShape.parentPartId && hoveredShape.parentPartId === shape.partId) //add spacers\r\n )\r\n )\r\n return this.findShapesRightAndBelow(snappedShapesWithoutMovingShape, point);\r\n } else {\r\n return this.findShapesRightAndBelow(hoveredShape, point);\r\n }\r\n }\r\n return []\r\n }\r\n\r\n /**\r\n * TODO diagonal\r\n */\r\n calculateNewPosition(hoveredLine, shapeToShift) {\r\n const shapeToShiftMeasurementPoints = sqftShapeManager.getMinMaxShapesPointsOnWorkspace([shapeToShift]);\r\n //console.log(\"shapeToShiftMeasurementPoints\", shapeToShiftMeasurementPoints);\r\n //console.log(\"shapeToShift\", shapeToShift);\r\n\r\n const hoveredLineDirection = getLineDirection(hoveredLine.from, hoveredLine.to);\r\n\r\n let newShapePosition = null;\r\n const hoveredLinePointFromPosOnWorkspace = hoveredLine.from.getPointPosOnWorkspace();\r\n if (isVerticalDirection(hoveredLineDirection)) {\r\n // Check whether it is shape start or end\r\n if (shapeToShiftMeasurementPoints[1].x === hoveredLinePointFromPosOnWorkspace.x) {\r\n newShapePosition = shapeToShiftMeasurementPoints[1];\r\n // Shift shape only if it is first line\r\n } else if (shapeToShiftMeasurementPoints[0].x === hoveredLinePointFromPosOnWorkspace.x) {\r\n newShapePosition = shapeToShiftMeasurementPoints[0];\r\n }\r\n } else if (isHorizontalDirection(hoveredLineDirection)) {\r\n // Check whether it is shape start or end\r\n if (shapeToShiftMeasurementPoints[0].y === hoveredLinePointFromPosOnWorkspace.y) {\r\n newShapePosition = shapeToShiftMeasurementPoints[0];\r\n // Shift shape only if it is first line\r\n } else if (shapeToShiftMeasurementPoints[3].y === hoveredLinePointFromPosOnWorkspace.y) {\r\n newShapePosition = shapeToShiftMeasurementPoints[3];\r\n }\r\n }\r\n\r\n return newShapePosition\r\n }\r\n\r\n /**\r\n *\r\n */\r\n calculatePositionDiffForOtherShapes(hoveredLine) {\r\n let xDiff = 0;\r\n let yDiff = 0;\r\n const thisShapeMeasurementPoints = sqftShapeManager.getMinMaxShapesPointsOnWorkspace([this.__shape]);\r\n const hoveredLineDirection = getLineDirection(hoveredLine.from, hoveredLine.to);\r\n if (isVerticalDirection(hoveredLineDirection)) {\r\n xDiff = getPointDistance(thisShapeMeasurementPoints[0], thisShapeMeasurementPoints[1]);\r\n } else if (isHorizontalDirection(hoveredLineDirection)) {\r\n yDiff = getPointDistance(thisShapeMeasurementPoints[3], thisShapeMeasurementPoints[0]);\r\n }\r\n\r\n return [xDiff, yDiff]\r\n }\r\n\r\n /**\r\n *\r\n */\r\n moveShapesToPositions(shapesToShift, xDiff, yDiff) {\r\n shapesToShift.forEach(shape => {\r\n const shapeCurrentPos = shape.getPosition();\r\n const shapeNewPos = {x: shapeCurrentPos.x + xDiff, y: shapeCurrentPos.y + yDiff};\r\n shape.setPosition(shapeNewPos);\r\n shape.shapeAbsolute.setAbsolutePos(shapeNewPos);\r\n })\r\n }\r\n\r\n /**\r\n * Moves and rotates the shape based on the line's orientation and the current rotation angle.\r\n */\r\n moveShapeToPositionAndRotate(newPosition, hoveredLine) {\r\n // Set the new position\r\n this.__shape.setPosition(newPosition);\r\n this.__shape.shapeAbsolute.setAbsolutePos(newPosition);\r\n\r\n // Determine the required rotation based on the line direction\r\n const hoveredLineDirection = getLineDirection(hoveredLine.from, hoveredLine.to);\r\n\r\n const isHorizontal = isHorizontalDirection(hoveredLineDirection);\r\n const isVertical = isVerticalDirection(hoveredLineDirection);\r\n const hoveredShape = hoveredLine.getParent();\r\n\r\n // Rotate by -90 degrees (right) if the current angle is 90 and the line is vertical\r\n if (hoveredShape.rotatedDegrees === 270 && isHorizontal) {\r\n let desiredAngle = 270;\r\n let normalizedCurrentAngle = ((this.__shape.rotatedDegrees % 360) + 360) % 360;\r\n let angleDifference = desiredAngle - normalizedCurrentAngle;\r\n this.__shape.rotate(angleDifference, this.__shape.Direction.LEFT, false);\r\n //todo\r\n //console.log(\"shape.getPosition()\", this.__shape.getPosition());\r\n //this.moveShapesToPositions([this.__shape], -this.__shape.getWidth(), -this.__shape.getHeight());\r\n //console.log(\"shape.getPosition()\", this.__shape.getPosition());\r\n //debugger // eslint-disable-line no-debugger\r\n }\r\n // Rotate by 90 degrees if the current angle is 0 and the line is horizontal\r\n else if (this.__shape.rotatedDegrees === 0 && isHorizontal) {\r\n this.__shape.rotate(90, this.__shape.Direction.LEFT, false);\r\n }\r\n // Rotate by -90 degrees (right) if the current angle is 90 and the line is vertical\r\n else if (this.__shape.rotatedDegrees === 90 && isVertical) {\r\n this.__shape.rotate(-90, this.__shape.Direction.LEFT, false);\r\n }\r\n\r\n // Calculate the new coordinates for the upper left corner after potential rotation\r\n if (isHorizontalDirection(hoveredLineDirection)) {\r\n // Calculate shift is not needed if the center remains in place\r\n const cos = Math.cos(this.__shape.rotatedDegrees * Math.PI / 180);\r\n const sin = Math.sin(this.__shape.rotatedDegrees * Math.PI / 180);\r\n const originalWidth = this.__shape.getWidth();\r\n const originalHeight = this.__shape.getHeight();\r\n\r\n // Calculate the center coordinates\r\n const centerX = newPosition.x + originalWidth / 2;\r\n const centerY = newPosition.y + originalHeight / 2;\r\n\r\n // Coordinates of the upper left corner after rotation\r\n const upperLeftX = centerX - (originalWidth / 2 * cos + originalHeight / 2 * sin);\r\n const upperLeftY = centerY - (originalWidth / 2 * sin - originalHeight / 2 * cos);\r\n\r\n // Set the new coordinates for the upper left corner\r\n this.__shape.setPosition({\r\n x: upperLeftX,\r\n y: upperLeftY\r\n });\r\n this.__shape.shapeAbsolute.setAbsolutePos({\r\n x: upperLeftX,\r\n y: upperLeftY\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Function for finding all shapes that are to the right and below a point\r\n * @param {Array} shapes\r\n * @param referencePosition\r\n * @returns {Array}\r\n */\r\n findShapesRightAndBelow(shapes, referencePosition) {\r\n const resultShapes = [];\r\n\r\n shapes.forEach(shape => {\r\n const shapeMeasurementPoints = sqftShapeManager.getMinMaxShapesPointsOnWorkspace([shape]);\r\n const shapeTopLeftPoint = shapeMeasurementPoints[0];\r\n\r\n if (shapeTopLeftPoint.x >= referencePosition.x && shapeTopLeftPoint.y >= referencePosition.y) {\r\n resultShapes.push(shape);\r\n }\r\n });\r\n\r\n return resultShapes;\r\n }\r\n}\r\n","import Polygon from \"../shapes/layouts/polygon\";\r\nimport {IRONING_BOARD_DIRECTION} from \"./cabinetShapes\";\r\n\r\nexport const createIroningBoardShape = (width, height, radius, direction) => {\r\n const points = [];\r\n const steps = 20; // number of points for the arc\r\n\r\n // Straight lines\r\n points.push({ x: 0, y: 0 });\r\n points.push({ x: width, y: 0 });\r\n //points.push({ x: width, y: height});\r\n\r\n if (direction === IRONING_BOARD_DIRECTION.left) {\r\n for (let i = steps; i >= 0; i--) {\r\n const angle = (Math.PI / 2) * (i / steps); // quarter circle\r\n const x = width - radius * Math.cos(angle);\r\n const y = height - radius + radius * Math.sin(angle);\r\n points.push({x, y});\r\n }\r\n }\r\n\r\n if (direction === IRONING_BOARD_DIRECTION.right) {\r\n for (let i = 0; i <= steps; i++) {\r\n const angle = (Math.PI / 2) * (i / steps); // quarter circle\r\n const x = width - radius + radius * Math.cos(angle);\r\n const y = height - radius + radius * Math.sin(angle);\r\n points.push({ x, y });\r\n }\r\n }\r\n\r\n // Straight lines\r\n //points.push({ x: 0, y: height - radius });\r\n\r\n return new Polygon(points, true, true);\r\n};\r\n","import {post} from \"../../../api/api\";\r\n//import {getResponse, handleHttpError} from \"../../../api/api\";\r\n\r\nexport function getUrlBase() {\r\n let {subDomain} = document.kvConfig;\r\n let {domain} = document.kvConfig;\r\n domain = domain || 'quotesflooring.com';\r\n subDomain = subDomain ? subDomain + '.' : '';\r\n\r\n return (location.port === \"9007\" || document.kvConfig.kioskMode) ? `${subDomain}${domain}` : \"\";\r\n}\r\n\r\nexport const sqftPost = async (url, data, options = {}) => {\r\n return post(url, data, options);\r\n //void post;\r\n\r\n // const fullUrl = 'https://quotekitchenandbath.com' + url;\r\n // const isFormData = Object.prototype.toString.call(data) === '[object FormData]';\r\n // const headers = {\r\n // 'Accept': 'application/json'\r\n // };\r\n // if (!isFormData) {\r\n // headers['Content-Type'] = 'application/json';\r\n // }\r\n //\r\n // return fetch(fullUrl, {\r\n // method: 'post',\r\n // body: isFormData ? data : JSON.stringify(data),\r\n // headers: new Headers(headers),\r\n // signal: options.signal,\r\n // })\r\n // .then(handleHttpError)\r\n // .then(response => getResponse(response))\r\n // .catch(reason => {\r\n // if (reason.name === 'AbortError') {\r\n // console.log('Fetch aborted');\r\n // } else {\r\n // return Promise.reject(reason);\r\n // }\r\n // });\r\n};\r\n\r\nexport const fetchDataWithCancellation = (url, key, shouldSaveDataInStore = false) => {\r\n return async () => {\r\n const controller = new AbortController();\r\n const signal = controller.signal;\r\n\r\n store.dispatch({ type: 'REQUEST_STARTED', payload: { key, controller } });\r\n\r\n try {\r\n const response = await fetch(url, { signal });\r\n if (!response.ok) {\r\n throw new Error('Network response was not ok.');\r\n }\r\n\r\n const data = await response.json();\r\n store.dispatch({ type: 'REQUEST_SUCCESS', payload: { key, data: shouldSaveDataInStore ? data : null} });\r\n\r\n return data\r\n } catch (error) {\r\n if (error.name === 'AbortError') {\r\n console.log('Fetch aborted:', key);\r\n } else {\r\n store.dispatch({ type: 'REQUEST_FAILURE', payload: { key, error: error.message } });\r\n }\r\n }\r\n };\r\n};\r\n\r\nexport const cancelFetch = (key) => {\r\n return () => {\r\n const state = store.getState();\r\n const controller = state.sqftState.requests[key];\r\n\r\n if (controller) {\r\n controller.abort();\r\n store.dispatch({ type: 'REQUEST_CANCELLED', payload: { key } });\r\n store.dispatch({ type: 'REMOVE_CONTROLLER', payload: { key } });\r\n }\r\n };\r\n};\r\n","import EventManager from \"../../../store/sqftEventManager\";\r\nimport workspace from \"../../workspace\";\r\nimport config from \"../../../store/sqftConfig\";\r\nimport {getPointField} from \"../../../../../helpers/sqftHelper\";\r\nimport Movable from \"./../mixin/movable\";\r\nimport COLOR_THEMES from \"../../../store/colorThemes\";\r\nimport PointV2, {CORE_POINT_LAYOUTS} from \"../../shapes/pointV2\";\r\nimport RenderFigures from \"../../../helpers/renderFigures\";\r\n\r\nexport default class Box {\r\n\r\n design = {\r\n fillStyle: '#6A6A6A',\r\n fillStyleDelete: 'rgba(208,1,27,0.3)', //'rgba(253,2,33, 0.5)',\r\n strokeStyle: COLOR_THEMES[config.activeTheme].primary,\r\n lineWidth: 1,\r\n borderRadius: 10,\r\n shadowColor: '#eeeeee',\r\n shadowBlur: 15,\r\n minimumHeight: 4,\r\n minimumWidth: 15,\r\n width: 50,\r\n height: 10\r\n };\r\n params = {\r\n isCenteredByY: false\r\n };\r\n points = {};\r\n children = [];\r\n _mixin = {\r\n movable: null\r\n };\r\n\r\n constructor(pos, design) {\r\n this.design = Object.assign(this.design, design);\r\n\r\n this.mixin.movable = new Movable(pos.x, pos.y, this.design.width, this.design.height, EventManager.priorities.SEGMENT, this);\r\n this.initPoints();\r\n this.initEvents();\r\n }\r\n\r\n initEvents() {\r\n EventManager.addEvent(\r\n EventManager.events.RENDER,\r\n this.render.bind(this),\r\n this,\r\n EventManager.priorities.BOX\r\n );\r\n\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_UP,\r\n this.onMouseUp.bind(this),\r\n this,\r\n EventManager.priorities.SEGMENT\r\n );\r\n }\r\n\r\n delete() {\r\n this.deleteEvents();\r\n workspace.textBoxManager.removeBox(this);\r\n }\r\n\r\n deregisterEvents = () => {\r\n EventManager.removeEvent(this);\r\n if (this.mixin.movable) {\r\n this.mixin.movable.deregisterEvents();\r\n }\r\n for (const point in this.points) {\r\n if (this.points.hasOwnProperty(point)) {\r\n this.points[point].deregisterEvents();\r\n }\r\n }\r\n this.isHidden = true;\r\n }\r\n\r\n reInitEvents = () => {\r\n this.initEvents();\r\n if (this.mixin.movable) {\r\n this.mixin.movable.reInitEvents();\r\n }\r\n for (const point in this.points) {\r\n if (this.points.hasOwnProperty(point)) {\r\n this.points[point].reInitEvents();\r\n }\r\n }\r\n this.isHidden = true;\r\n }\r\n\r\n deleteEvents() {\r\n EventManager.resetCursor(this);\r\n EventManager.removeEvent(this);\r\n EventManager.removeEvent(this.mixin.movable);\r\n\r\n for(let child of this.children) {\r\n child.delete();\r\n }\r\n\r\n for (const point in this.points) {\r\n if (this.points.hasOwnProperty(point)) {\r\n this.points[point].delete();\r\n }\r\n }\r\n }\r\n\r\n get width() {\r\n return this.design.width;\r\n }\r\n\r\n set width(value) {\r\n this.design.width = value;\r\n }\r\n\r\n get height() {\r\n return this.design.height;\r\n }\r\n\r\n set height(value) {\r\n this.design.height = value;\r\n }\r\n\r\n get mixin() {\r\n return this._mixin;\r\n }\r\n\r\n set mixin(value) {\r\n this._mixin = value;\r\n }\r\n\r\n get posX() {\r\n return this.mixin.movable.posX;\r\n }\r\n\r\n get posY() {\r\n return this.mixin.movable.posY;\r\n }\r\n\r\n set posX(value) {\r\n this.mixin.movable.posX = value;\r\n }\r\n\r\n set posY(value) {\r\n this.mixin.movable.posY = value;\r\n }\r\n\r\n initPoints() {\r\n let point;\r\n\r\n // 0 1 2\r\n // 3 4\r\n // 5 6 7\r\n\r\n let pointsParams = [\r\n // {x: 0, y: 0}, // {x: this.posX, y: this.posY},\r\n // {x: this.design.width / 2, y: 0},\r\n // {x: this.design.width, y: 0},\r\n // {x: 0, y: this.design.height / 2},\r\n {id: 'p4', x: this.design.width, y: this.design.height / 2, isCenteredByY: true, isResizedByPoint: true, isScaledByPoint: false, radius: 10, layout: CORE_POINT_LAYOUTS.ear},\r\n // {x: 0, y: this.design.height},\r\n // {x: this.design.width / 2, y: this.design.height},\r\n {id: 'p7', x: this.design.width, y: this.design.height, isCenteredByY: true, isResizedByPoint: false, isScaledByPoint: true, radius: 10, layout: CORE_POINT_LAYOUTS.resize}\r\n ];\r\n for (let [i, pointParams] of pointsParams.entries()) {\r\n void i;\r\n let pointState = {\r\n priority: EventManager.priorities.BOX_POINT,\r\n movable: true,\r\n isCenteredByY: pointParams.isCenteredByY,\r\n isResizedByPoint: pointParams.isResizedByPoint,\r\n isScaledByPoint: pointParams.isScaledByPoint,\r\n isVisibleOnHover: true\r\n };\r\n let pointDesign = {\r\n radius: pointParams.radius,\r\n lineWidth: 1,\r\n layout: pointParams.layout\r\n };\r\n point = new PointV2(pointParams.x, pointParams.y, this, pointState, pointDesign);\r\n point.isResizedByPoint = true;\r\n\r\n this.points[pointParams.id] = point;\r\n }\r\n }\r\n\r\n getOffset = function() {\r\n let self = this;\r\n\r\n return getPointField(self.posX, self.posY);\r\n };\r\n\r\n getPosition = function() {\r\n let self = this;\r\n\r\n return {x: self.posX, y: self.posY};\r\n };\r\n\r\n getPointField = function(posX, posY) {\r\n let fieldWidth = config.fieldWidth,\r\n center = fieldWidth / 2;\r\n\r\n let scale = workspace.getScale(),\r\n offset = workspace.getOffset();\r\n\r\n return {\r\n x: (posX * scale) + offset.x - center,\r\n y: (posY * scale) + offset.y - center\r\n };\r\n };\r\n\r\n onMouseUp = () => {\r\n if (EventManager.getCursor().indexOf(\"delete\") >= 0 && this.mixin.movable.state.hovering) {\r\n this.delete();\r\n }\r\n };\r\n\r\n render = (ctx) => {\r\n let pointField = getPointField(this.posX, this.posY);\r\n let scale = config.scale;\r\n let width = this.mixin.movable.width * scale;\r\n let height = this.mixin.movable.height * scale;\r\n let radius = this.design.borderRadius;\r\n let fill = this.design.fillStyle;\r\n\r\n ctx.save();\r\n ctx.beginPath();\r\n ctx.fillStyle = this.design.fillStyle;\r\n ctx.strokeStyle = this.design.strokeStyle;\r\n ctx.lineWidth = this.design.lineWidth;\r\n //ctx.shadowColor = this.design.shadowColor;\r\n //ctx.shadowBlur = this.design.shadowBlur;\r\n\r\n if(EventManager.getCursor().indexOf(\"delete\") >= 0 && this.mixin.movable.state.hovering) {\r\n ctx.fillStyle = this.design.fillStyleDelete;\r\n }\r\n\r\n //ctx.rect(pointField.x, pointField.y, this.design.width * scale, this.design.height * scale);\r\n //ctx.rect(pointField.x, pointField.y, this.mixin.movable.width * scale, this.mixin.movable.height * scale);\r\n RenderFigures.roundedRect(ctx, pointField.x, pointField.y, width, height, radius, fill, true);\r\n\r\n ctx.stroke();\r\n ctx.fill();\r\n ctx.closePath();\r\n ctx.restore();\r\n };\r\n}\r\n","import EventManager from \"../../../store/sqftEventManager\";\r\nimport workspace from \"../../workspace\";\r\nimport config from \"../../../store/sqftConfig\";\r\nimport ModelText from \"./model/modelText\";\r\nimport {getPointField} from \"../../../../../helpers/sqftHelper\";\r\nimport $ from \"jquery\";\r\nimport {setIsItextEditing} from \"../../../../../../../actions/sqftMenuFunctions\";\r\nimport store from \"../../../../../../../store\";\r\n\r\nexport default class IText {\r\n\r\n _modelText;\r\n _fontHeight = 1;\r\n _hMargin = 11;\r\n wMargin = 14;\r\n fillStyle = '#999999'; // fontColor\r\n fillStyleGray = '#999999';\r\n fillStyleTransparent = \"rgba(255, 255, 255, 0.5)\";\r\n lineHeight = 1.2; //1.286;\r\n placeholder = 'Add text by dbl click';\r\n state = {\r\n active: false\r\n };\r\n\r\n constructor(txt, font, posX, posY, width, height, angle, parent = workspace) {\r\n if(txt === ''){\r\n txt = this.placeholder;\r\n }\r\n this.modelText = new ModelText(txt, font, posX, posY, width, height, angle, parent);\r\n this.initEvents();\r\n if(parent.children) {\r\n parent.children.push(this);\r\n }\r\n }\r\n\r\n get modelText() {\r\n return this._modelText;\r\n }\r\n\r\n set modelText(value) {\r\n this._modelText = value;\r\n }\r\n\r\n get fontHeight() {\r\n return this._fontHeight * config.scale / config.defaultScale + (this.getHeight() / 5); // todo wtf /5 ?\r\n }\r\n\r\n set fontHeight(value) {\r\n this._fontHeight = value;\r\n }\r\n\r\n get hMargin() {\r\n // todo perhaps make borders smaller\r\n // return this._hMargin * config.scale / config.defaultScale;\r\n return this._hMargin;\r\n }\r\n\r\n set hMargin(value) {\r\n this._hMargin = value;\r\n }\r\n\r\n initEvents() {\r\n EventManager.addEvent(\r\n EventManager.events.RENDER,\r\n this.render.bind(this),\r\n this,\r\n EventManager.priorities.BOX\r\n );\r\n\r\n EventManager.addEvent(\r\n EventManager.events.DBLCLICK,\r\n this.onDblClick.bind(this),\r\n this,\r\n EventManager.priorities.IMAGE\r\n );\r\n\r\n //todo remove deleting from menu here\r\n // EventManager.addEvent(\r\n // EventManager.events.MOUSE_UP,\r\n // this.onMouseUp.bind(this),\r\n // this,\r\n // EventManager.priorities.BOX\r\n // );\r\n }\r\n\r\n delete() {\r\n this.deleteEvents();\r\n }\r\n\r\n deleteEvents() {\r\n EventManager.removeEvent(this);\r\n }\r\n\r\n deregisterEvents = () => {\r\n EventManager.removeEvent(this);\r\n this.isHidden = true;\r\n }\r\n\r\n reInitEvents = () => {\r\n this.initEvents();\r\n this.isHidden = false;\r\n }\r\n\r\n getWidth() {\r\n let scale = config.scale;\r\n let parentWidth = this.modelText.parent.width * scale;\r\n\r\n return parentWidth ? parentWidth: this.modelText.width * scale ;\r\n }\r\n\r\n getHeight() {\r\n let scale = config.scale;\r\n let parentHeight = this.modelText.parent.height * scale;\r\n\r\n return parentHeight ? parentHeight : this.modelText.height * scale ;\r\n }\r\n\r\n getPosX() {\r\n return this.modelText.parent.posX ? this.modelText.parent.posX : this.modelText.posX;\r\n }\r\n\r\n getPosY() {\r\n return this.modelText.parent.posY ? this.modelText.parent.posY : this.modelText.posY;\r\n }\r\n\r\n onDblClick(mousePos) {\r\n void mousePos;\r\n let self = this;\r\n let state = this.modelText.parent\r\n ? this.modelText.parent.mixin.movable.state\r\n : this.modelText.state; //todo\r\n\r\n if (state.hovering && !document.querySelector(\".i-text\")) {\r\n window.lineInputFocused = true;\r\n EventManager.stealCursor();\r\n const ENTER_KEY = 13;\r\n const textarea = this.createTextArea();\r\n\r\n document.querySelector(\".sqft-main-grid\").appendChild(textarea);\r\n\r\n textarea.focus();\r\n textarea.onkeydown = function(e) {\r\n if (e.keyCode === ENTER_KEY) {\r\n e.target.blur();\r\n }\r\n };\r\n\r\n const blur = function (e) {\r\n if (!e.target.closest('.i-text')) {\r\n textarea.blur();\r\n }\r\n };\r\n\r\n textarea.oninput = function() {\r\n this.style.height = \"5px\";\r\n this.style.height = (this.scrollHeight)+\"px\";\r\n };\r\n\r\n textarea.onblur = function () {\r\n window.lineInputFocused = false;\r\n self.modelText.txt = textarea.value;\r\n // restore placeholder\r\n if (textarea.value === '') {\r\n self.modelText.txt = self.placeholder;\r\n }\r\n self.fillStyle = self.fillStyleGray; // return color back to gray\r\n textarea.parentNode.removeChild(textarea);\r\n document.removeEventListener(\"click\", blur);\r\n store.dispatch(setIsItextEditing(false));\r\n };\r\n\r\n this.fillStyle = this.fillStyleTransparent; // make color transparent\r\n\r\n $(textarea).on(\"change keyup paste\", function() {\r\n self.modelText.txt = $(this).val();\r\n });\r\n textarea.onchange = function (event) {\r\n void event;\r\n self.modelText.txt = textarea.value;\r\n }.bind({ hoveredText: state.hoveredText});\r\n\r\n setTimeout(() => {\r\n document.addEventListener(\"click\", blur);\r\n }, 500);\r\n store.dispatch(setIsItextEditing(true));\r\n return false;\r\n }\r\n }\r\n\r\n wrapText(ctx, text, x, y, maxWidth, fontSize, fontFace) {\r\n let firstY = y;\r\n let lineHeight = fontSize * this.lineHeight;\r\n\r\n ctx.font = fontSize + \"px \" + fontFace; // Set the font for the context\r\n\r\n // Split the text into lines using wrapWord (handles word wrapping and ellipsis)\r\n let lines = this.wrapWords(ctx, text, maxWidth, 1);\r\n\r\n // Loop through each line and draw it on the canvas\r\n for (let line of lines) {\r\n ctx.fillText(line, x, y);\r\n y += lineHeight;\r\n }\r\n\r\n let scale = workspace.getScale();\r\n\r\n // Adjust the parent box height based on the new text block height\r\n this.modelText.parent.mixin.movable.height = (y - firstY) / scale + (lineHeight + this.hMargin * 2) / scale;\r\n\r\n // Adjust point positions based on the new height\r\n this.modelText.parent.points.p4.modelCorePoint.mixins.movable.posY = this.modelText.parent.mixin.movable.height / 2;\r\n this.modelText.parent.points.p7.modelCorePoint.mixins.movable.posY = this.modelText.parent.mixin.movable.height;\r\n }\r\n\r\n\r\n // onMouseUp = () => {\r\n // if (EventManager.getCursor().indexOf(\"delete\") >= 0 && this.modelText.parent.mixin.movable.state.hovering) {\r\n // this.delete();\r\n // }\r\n // };\r\n\r\n render(ctx) {\r\n //let angle = this.modelText.angle || 0;\r\n\r\n let fontHeight = this.fontHeight;\r\n let pointField = getPointField(this.modelText.posX, this.modelText.posY, this.modelText.parent);\r\n // let pointField = getPointField(this.getPosX(), this.getPosY(), this.modelText.parent);\r\n\r\n //let txtWidth = ctx.measureText(this.modelText.txt).width + 2 * this.hMargin;\r\n //let scale = config.scale;\r\n let width = this.getWidth();\r\n //let height = this.getHeight();\r\n\r\n ctx.save();\r\n ctx.font = fontHeight + 'px ' + this.modelText.font;\r\n ctx.textAlign = 'left';\r\n ctx.textBaseline = 'top';\r\n ctx.fillStyle = this.fillStyle;\r\n\r\n //TODO remove\r\n //ctx.translate(pointField.x, pointField.y);\r\n //ctx.translate(pointField.x + width / 2, pointField.y); //centering for scale\r\n //ctx.rotate(angle); // text rotation\r\n //ctx.lineWidth = 1;\r\n //ctx.strokeRect(-width / 2, 0, width, height); //rect around text\r\n //ctx.scale(width / txtWidth, height / fontHeight); // text scale\r\n //ctx.translate(this.hMargin, 0);\r\n //ctx.fillText(this.modelText.txt, -txtWidth/2, 0, width / 2);\r\n // this.wrapText(ctx, this.modelText.txt, -txtWidth/2, 0, width, this.fontHeight, this.modelText.font);\r\n //ctx.fillText(this.modelText.txt, pointField.x, pointField.y);\r\n this.wrapText(\r\n ctx,\r\n this.modelText.txt,\r\n pointField.x + this.wMargin,\r\n pointField.y + this.hMargin,\r\n width - this.wMargin,\r\n this.fontHeight,\r\n this.modelText.font\r\n );\r\n\r\n ctx.restore();\r\n }\r\n\r\n createTextArea() {\r\n let textarea = document.createElement(\"textarea\");\r\n let pointField = getPointField(this.modelText.posX, this.modelText.posY, this.modelText.parent);\r\n let scale = workspace.getScale();\r\n\r\n textarea.className = \"i-text\";\r\n textarea.style.left = pointField.x + this.wMargin + \"px\";\r\n textarea.style.top = pointField.y + this.hMargin + \"px\"; // todo -2 hook for first line\r\n textarea.style.width = this.getWidth() - this.wMargin + \"px\";\r\n // textarea.style.height = this.getHeight() + \"px\";\r\n textarea.style.height = this.modelText.parent.mixin.movable.height * scale + \"px\";\r\n textarea.style.fontSize = this.fontHeight + \"px\";\r\n textarea.style.lineHeight = this.fontHeight * this.lineHeight + 0.8 + \"px\"; // 2 hook for first line\r\n textarea.style.fontFamily = this.modelText.font;\r\n textarea.style.color = this.fillStyle;\r\n if (this.modelText.txt === this.placeholder) {\r\n textarea.value = '';\r\n } else {\r\n textarea.value = this.modelText.txt;\r\n }\r\n return textarea\r\n }\r\n\r\n /**\r\n * Split the text into lines using wrapWord (handles word wrapping and ellipsis)\r\n * @param ctx\r\n * @param testLine\r\n * @param maxWidth\r\n * @param spaces\r\n * @return {[]}\r\n */\r\n wrapWords(ctx, testLine, maxWidth, spaces) {\r\n let i = 0;\r\n let lines = [];\r\n let currentLine = '';\r\n const ellipsis = '...';\r\n\r\n // Split the text into individual words\r\n const words = testLine.split(' ');\r\n\r\n // Iterate through the words and add them to lines while checking for width\r\n for (let word of words) {\r\n let testLine = currentLine + word + ' ';\r\n let testWidth = ctx.measureText(testLine).width;\r\n\r\n // If adding the word exceeds maxWidth, move it to the next line\r\n if (testWidth > maxWidth) {\r\n // If the word itself is too long, truncate it and add ellipsis\r\n if (ctx.measureText(word).width > maxWidth) {\r\n while (ctx.measureText(word).width > maxWidth && i < word.length) {\r\n if (ctx.measureText(word.slice(0, i + spaces) + ellipsis).width >= maxWidth) {\r\n lines.push(word.slice(0, i) + ellipsis);\r\n return lines;\r\n }\r\n i++;\r\n }\r\n }\r\n // Push the current line and start a new line with the current word\r\n lines.push(currentLine.trim());\r\n currentLine = word + ' ';\r\n } else {\r\n currentLine = testLine; // Add the word to the current line\r\n }\r\n }\r\n\r\n // Add the last line to the lines array\r\n if (currentLine.length > 0) {\r\n lines.push(currentLine.trim());\r\n }\r\n\r\n return lines;\r\n }\r\n}\r\n","export default class ModelText {\r\n _txt;\r\n _font;\r\n _posX;\r\n _posY;\r\n _width;\r\n _height;\r\n _angle;\r\n _parent;\r\n\r\n constructor(txt, font, posX, posY, width, height, angle, parent) {\r\n this._txt = txt;\r\n this._font = font;\r\n this._posX = posX;\r\n this._posY = posY;\r\n this._width = width;\r\n this._height = height;\r\n this._angle = angle;\r\n this._parent = parent;\r\n }\r\n\r\n get txt() {\r\n return this._txt;\r\n }\r\n\r\n set txt(value) {\r\n this._txt = value;\r\n }\r\n\r\n get font() {\r\n return this._font;\r\n }\r\n\r\n set font(value) {\r\n this._font = value;\r\n }\r\n\r\n get posX() {\r\n return this._posX;\r\n }\r\n\r\n set posX(value) {\r\n this._posX = value;\r\n }\r\n\r\n get posY() {\r\n return this._posY;\r\n }\r\n\r\n set posY(value) {\r\n this._posY = value;\r\n }\r\n\r\n get width() {\r\n return this._width;\r\n }\r\n\r\n set width(value) {\r\n this._width = value;\r\n }\r\n\r\n get height() {\r\n return this._height;\r\n }\r\n\r\n set height(value) {\r\n this._height = value;\r\n }\r\n\r\n get angle() {\r\n return this._angle;\r\n }\r\n\r\n set angle(value) {\r\n this._angle = value;\r\n }\r\n\r\n get parent() {\r\n return this._parent;\r\n }\r\n\r\n set parent(value) {\r\n this._parent = value;\r\n }\r\n\r\n}\r\n","/**\r\n * @param e KeyboardEvent\r\n */\r\nexport const isBackspaceKeyCode = (e) => {\r\n return e.keyCode === 8\r\n}\r\n\r\n/**\r\n * @param e KeyboardEvent\r\n */\r\nexport const isDeleteKeyCode = (e) => {\r\n return e.keyCode === 46\r\n}\r\n\r\n/**\r\n * @param e KeyboardEvent\r\n */\r\nexport const isLengthKeyCode = (e) => {\r\n return isNumericKey(e) || isCommaKey(e) || isPeriodKey(e) || isSpace(e) || isSlash(e) || e.key === \"'\" || e.key === \"\\\"\"\r\n}\r\n\r\n/**\r\n * @param e KeyboardEvent\r\n */\r\nexport const isNumericKey = (e) => {\r\n return (e.keyCode >= 48 && e.keyCode <= 57) || (e.keyCode >= 96 && e.keyCode <= 105)\r\n}\r\n\r\n/**\r\n * is \",\"\r\n * @param e KeyboardEvent\r\n */\r\nexport const isCommaKey = (e) => {\r\n return e.keyCode === 188\r\n}\r\n\r\n/**\r\n * is \".\"\r\n * @param e KeyboardEvent\r\n */\r\nexport const isPeriodKey = (e) => {\r\n return e.keyCode === 190\r\n}\r\n\r\n/**\r\n * is \" \"\r\n * @param e KeyboardEvent\r\n */\r\nexport const isSpace = (e) => {\r\n return e.keyCode === 32\r\n}\r\n\r\n/**\r\n * is \"/\"\r\n * @param e KeyboardEvent\r\n */\r\nexport const isSlash = (e) => {\r\n return e.keyCode === 191\r\n}\r\n","import uuid from \"uuid\";\r\nimport workspace from \"../workspace\";\r\nimport {attachResource} from \"./resourseCanas\";\r\nimport store from \"../../../../../../store\";\r\nimport {addSqftCroppedSlabImage} from \"../../../../../../actions/sqftSlabFunctions\";\r\nimport {MOVABLE_IMAGE_TYPES, SHAPE_PART_ID} from \"../../../../constants\";\r\nimport {initTitle} from \"./labels/labelsHelper\";\r\nimport {SLAB_IMAGE_TYPES} from \"../../../../../../reducers/sqftSlabReducer\";\r\n\r\nconst Duplicate = function () {\r\n this.cloneShape = (shape) => {\r\n let shapeData = shape.export();\r\n const workspaceIds = workspace.getObjIds();\r\n const newId = workspaceIds + 1;\r\n const currentShapePosition = shape.getPosition();\r\n\r\n const newShape = workspace.importShape(shapeData);\r\n newShape.setPosition({\r\n x: currentShapePosition.x + 10,\r\n y: currentShapePosition.y + 10,\r\n });\r\n newShape.shapeSlab.__absolutePos = null;\r\n newShape.shapePieces = [];\r\n newShape.setId(newId);\r\n workspace.setObjIds(newId);\r\n this.cloneShapeLines(newShape);\r\n if (newShape.partId === SHAPE_PART_ID.slabPlaceHolder) {\r\n newShape.init({\r\n x: currentShapePosition.x + 10,\r\n y: currentShapePosition.y + 10,\r\n });\r\n initTitle('PLACEHOLDER', SLAB_IMAGE_TYPES.placeholder, newShape);\r\n }\r\n }\r\n this.cloneShapeLines = (shape) => {\r\n const lines = shape.getLines();\r\n for (const line of lines) {\r\n this.cloneShapeLine(line);\r\n }\r\n }\r\n this.cloneShapeLine = (line) => {\r\n const attachedResource = workspace.getAttachedTo(line);\r\n line.id = uuid();\r\n line.from.id = uuid();\r\n if (attachedResource) {\r\n line.isDisabledInPopup = attachedResource.isDisabledInPopup;\r\n attachResource(line, null, attachedResource.type, attachedResource.featureId, null, attachedResource.name, attachedResource.height, uuid());\r\n }\r\n }\r\n\r\n this.cloneMovableImage = (shape) => {\r\n let imageData = shape.export();\r\n const workspaceIds = workspace.getObjIds();\r\n const newId = workspaceIds + 1;\r\n const currentMovableImagePosition = shape.getPosition();\r\n const movableImage = workspace.importImage(imageData);\r\n movableImage.setPosition({\r\n x: currentMovableImagePosition.x + 10,\r\n y: currentMovableImagePosition.y + 10,\r\n });\r\n movableImage.setId(newId);\r\n workspace.setObjIds(newId);\r\n\r\n if (movableImage.type === MOVABLE_IMAGE_TYPES.slabImage) {\r\n store.dispatch(addSqftCroppedSlabImage(movableImage));\r\n }\r\n }\r\n}\r\n\r\nexport default new Duplicate()\r\n","import EventManager from \"../../store/sqftEventManager\";\r\nimport workspace from \"../workspace\";\r\nimport config from \"../../store/sqftConfig\";\r\n\r\nexport default new function() {\r\n var self = this;\r\n const fontColor = \"#999999\";\r\n\r\n this.init = function() {\r\n EventManager.addEvent(\r\n EventManager.events.RENDER,\r\n self.render,\r\n self,\r\n EventManager.priorities.OVERLAY - 1\r\n );\r\n };\r\n this.render = function(ctx) {\r\n let i, text, width, posText,\r\n canvas = workspace.getCanvas(),\r\n canvasWidth = canvas.width,\r\n canvasHeight = canvas.height,\r\n scale = config.scale,\r\n gridSize = config.workspace.gridSize * scale,\r\n adjustedSize = (gridSize / 3),\r\n rulerSize = adjustedSize + 6,\r\n pos = workspace.getPosition(),\r\n start = {\r\n x: (pos.x % gridSize) * -1,\r\n y: (pos.y % gridSize) * -1\r\n };\r\n while(start.y < rulerSize || start.y < 0) {\r\n start.y += gridSize;\r\n }\r\n while(start.x < rulerSize || start.x < 0) {\r\n start.x += gridSize;\r\n }\r\n //render ruler\r\n ctx.clearRect(0, 0, canvasWidth, rulerSize);\r\n ctx.clearRect(0, 0, rulerSize, canvasHeight);\r\n //horizontal ruler\r\n ctx.font = adjustedSize.toString() + \"px sans-serif\";\r\n ctx.fillStyle = fontColor;\r\n for(i = start.x; i < canvasWidth; i+=gridSize) {\r\n text = getText(pos.x + i);\r\n width = ctx.measureText(text).width;\r\n posText = {\r\n x: i - (width / 2),\r\n y: adjustedSize,\r\n width: width,\r\n height: adjustedSize,\r\n text: text\r\n };\r\n ctx.fillText(posText.text, posText.x, posText.y);\r\n }\r\n //vertical ruler\r\n for(i = start.y; i < canvasHeight; i+=gridSize) {\r\n text = Math.round((pos.y + i) / scale).toString();\r\n width = ctx.measureText(text).width;\r\n posText = {\r\n x: adjustedSize,\r\n y: i,\r\n width: width,\r\n height: adjustedSize,\r\n text: text\r\n };\r\n ctx.save();\r\n ctx.translate(posText.x, posText.y);\r\n ctx.rotate(-Math.PI/2);\r\n ctx.textAlign = \"center\";\r\n ctx.fillText(posText.text, 0, 0);\r\n ctx.restore();\r\n }\r\n\r\n ctx.beginPath();\r\n ctx.lineWidth = 1;\r\n ctx.strokeStyle = fontColor;\r\n ctx.moveTo(0,rulerSize);\r\n ctx.lineTo(canvasWidth, rulerSize);\r\n ctx.stroke();\r\n\r\n ctx.beginPath();\r\n ctx.lineWidth = 1;\r\n ctx.moveTo(rulerSize, 0);\r\n ctx.lineTo(rulerSize, canvasHeight);\r\n ctx.stroke();\r\n\r\n };\r\n function getText(pos) {\r\n let text = Math.round((pos) / config.scale * config.getMeasureMultiplier());\r\n if(config.measureUnit === \"Metric\") {\r\n text = Math.round(text / 100) * 100;\r\n }\r\n\r\n return text.toString();\r\n }\r\n};\r\n","import config from \"../../store/sqftConfig\";\r\nimport {enableRegularMode, enableSlabMode} from \"../../store/canvasHelper\";\r\nimport store from \"../../../../../../store\";\r\nimport SqftStore from \"../../store/sqftStore\";\r\nimport {showSlabTool} from \"../../../../../../actions/sqftSlabFunctions\";\r\nimport SlabWorkspace from \"../slab/slabWorkspace\";\r\nimport {renderSlabRightPart} from \"../slab/sqftSlabDraw\";\r\nimport sqftEventManager from \"../../store/sqftEventManager\";\r\nimport sqftImageManager from \"../../store/sqftImageManager\";\r\nimport sqftShapeManager from \"../../store/sqftShapeManager\";\r\nimport workspace from \"../workspace\";\r\nimport {MOVABLE_IMAGE_TYPES, SHAPE_PART_ID} from \"../../../../constants\";\r\n\r\nexport default class ResultImages {\r\n workspace;\r\n dimensionsMultiplier = 3;\r\n\r\n constructor(workspace) {\r\n this.workspace = workspace;\r\n }\r\n\r\n getCanvasImageScaled = () => {\r\n const isSlabMode = SqftStore.isSlabMode();\r\n let shouldReturnToSlabMode = false;\r\n if (isSlabMode) {\r\n enableRegularMode();\r\n store.dispatch(showSlabTool(false));\r\n shouldReturnToSlabMode = true;\r\n }\r\n\r\n const pointsMinMax = sqftShapeManager.getMinMaxShapesPointsOnWorkspace(this.workspace.getShapes());\r\n\r\n if (pointsMinMax.length > 0) {\r\n const minX = pointsMinMax[0].x;\r\n const minY = pointsMinMax[0].y;\r\n const maxX = pointsMinMax[2].x;\r\n const maxY = pointsMinMax[2].y;\r\n\r\n const offset = 200;\r\n const startPoint = {\r\n x: minX * config.defaultScaleExport - offset,\r\n y: minY * config.defaultScaleExport - offset\r\n }\r\n const clippingWidth = (maxX - minX) * config.defaultScaleExport + offset * 2;\r\n const clippingHeight = (maxY - minY) * config.defaultScaleExport + offset * 2;\r\n\r\n const resultImage = this.getCanvasScreen(\r\n config.defaultScaleExport,\r\n 0,\r\n 0,\r\n clippingWidth,\r\n clippingHeight,\r\n startPoint,\r\n this.updateCanvasAtStartPoint\r\n );\r\n\r\n //todo not needed to change back\r\n void shouldReturnToSlabMode\r\n // if (shouldReturnToSlabMode) {\r\n // enableSlabMode();\r\n // store.dispatch(showSlabTool(true));\r\n // }\r\n\r\n return resultImage;\r\n }\r\n\r\n return \"\"\r\n };\r\n\r\n getSlabResultImage = () => {\r\n const isSlabMode = SqftStore.isSlabMode();\r\n let shouldReturnToRegularMode = false;\r\n if (!isSlabMode) {\r\n enableSlabMode();\r\n store.dispatch(showSlabTool(true));\r\n shouldReturnToRegularMode = true\r\n }\r\n\r\n //1. Lets get only countertop shapes\r\n const shapesWithoutSlabImages = this.workspace.getShapesWithoutAttachedResources().filter(shp => {\r\n return shp.partId !== SHAPE_PART_ID.slabPlaceHolder\r\n && shp.type !== MOVABLE_IMAGE_TYPES.slabImage\r\n });\r\n\r\n //2. Now get minimum point\r\n const pointsMinMaxRegular = sqftShapeManager.getMinMaxShapesPointsOnWorkspace(shapesWithoutSlabImages, true);\r\n\r\n if (pointsMinMaxRegular.length > 0) {\r\n const minX = pointsMinMaxRegular[0].x;\r\n const minY = pointsMinMaxRegular[0].y;\r\n const maxX = pointsMinMaxRegular[2].x;\r\n const maxY = pointsMinMaxRegular[2].y;\r\n\r\n const workspacePos = workspace.getPosition();\r\n const offset = 200;\r\n\r\n //3. This is minimum point on field\r\n let startPoint = {\r\n x: (minX) * config.defaultScaleExport - offset - workspacePos.x,\r\n y: (minY) * config.defaultScaleExport - offset - workspacePos.y\r\n }\r\n\r\n //4.Canvas width\r\n const clippingWidth = (maxX - minX) * config.defaultScaleExport + offset * 2;\r\n const clippingHeight = (maxY - minY) * config.defaultScaleExport + offset * 2;\r\n\r\n //5.Lets distract canvas width (see renderSlabRightPart staticOffset)\r\n startPoint = {\r\n x: startPoint.x + clippingWidth / 2,\r\n y: startPoint.y\r\n }\r\n\r\n const resultImage = this.getCanvasScreen(\r\n config.defaultScaleExport,\r\n 0,\r\n 0,\r\n clippingWidth,\r\n clippingHeight,\r\n startPoint,\r\n this.updateCanvasSlab\r\n );\r\n\r\n if (shouldReturnToRegularMode) {\r\n enableRegularMode();\r\n store.dispatch(showSlabTool(false));\r\n }\r\n\r\n return resultImage\r\n }\r\n\r\n return \"\"\r\n };\r\n\r\n getSlabCalcImage = () => {\r\n const isSlabMode = SqftStore.isSlabMode();\r\n let shouldReturnToRegularMode = false;\r\n if (!isSlabMode) {\r\n enableSlabMode();\r\n store.dispatch(showSlabTool(true));\r\n shouldReturnToRegularMode = true\r\n }\r\n SlabWorkspace.disableSlabImages();\r\n\r\n const pointsMinMax = sqftShapeManager.getMinMaxShapesPointsOnWorkspace(this.workspace.getShapes());\r\n\r\n if (pointsMinMax.length > 0) {\r\n const minX = pointsMinMax[0].x;\r\n const minY = pointsMinMax[0].y;\r\n const maxX = pointsMinMax[2].x;\r\n const maxY = pointsMinMax[2].y;\r\n\r\n const offset = 200;\r\n const startPoint = {\r\n x: (minX) * config.defaultScaleExport - offset,\r\n y: (minY) * config.defaultScaleExport - offset\r\n }\r\n const clippingWidth = (maxX - minX) * config.defaultScaleExport + offset * 2;\r\n const clippingHeight = (maxY - minY) * config.defaultScaleExport + offset * 2;\r\n\r\n const resultImage = this.getCanvasScreen(\r\n config.defaultScaleExport,\r\n 0,\r\n 0,\r\n clippingWidth,\r\n clippingHeight,\r\n startPoint,\r\n this.updateCanvasAtStartPoint\r\n );\r\n\r\n if (shouldReturnToRegularMode) {\r\n enableRegularMode();\r\n store.dispatch(showSlabTool(false));\r\n }\r\n // else {\r\n // SlabWorkspace.init();\r\n // }\r\n\r\n return resultImage\r\n }\r\n\r\n return \"\"\r\n }\r\n\r\n /**\r\n * Will return array of zoomed shape + AppliancesThatShouldRenderMeasurementsInsideTheShape images. One image per shape\r\n * @return {*}\r\n */\r\n getCanvasApplianceImages = () => {\r\n const applianceImages = sqftImageManager.getAppliancesThatShouldRenderMeasurementsInsideTheShape();\r\n const createdImagesForShapes = new Set();\r\n\r\n return applianceImages.reduce((result, applianceImage) => {\r\n const outerShape = applianceImage.getOuterShape();\r\n if (outerShape) {\r\n\r\n if (createdImagesForShapes.has(outerShape.id)) {\r\n return result;\r\n }\r\n\r\n createdImagesForShapes.add(outerShape.id);\r\n\r\n const outerShapePosition = outerShape.getPosition();\r\n let shapesPoints = outerShape.getPoints();\r\n let pointsMinMax = sqftShapeManager.getMinMaxPoints(shapesPoints, false);\r\n\r\n const offset = 200;\r\n const startPoint = {\r\n x: (outerShapePosition.x + pointsMinMax.minX) * config.defaultScaleExport - offset,\r\n y: (outerShapePosition.y + pointsMinMax.minY) * config.defaultScaleExport - offset\r\n };\r\n const clippingWidth = (pointsMinMax.maxX - pointsMinMax.minX) * config.defaultScaleExport + offset * 2;\r\n const clippingHeight = (pointsMinMax.maxY - pointsMinMax.minY) * config.defaultScaleExport + offset * 2;\r\n\r\n const canvasImage = this.getCanvasImage(config.defaultScaleExport,\r\n startPoint,\r\n clippingWidth,\r\n clippingHeight\r\n );\r\n result.push(canvasImage);\r\n }\r\n return result;\r\n }, []);\r\n };\r\n\r\n getCanvasImage = (newScale = config.defaultScaleExport, startPoint, imageWidth, imageHeight) => {\r\n const isSlabMode = SqftStore.isSlabMode();\r\n if (isSlabMode) {\r\n enableRegularMode();\r\n store.dispatch(showSlabTool(false));\r\n }\r\n\r\n return this.getCanvasScreen(\r\n newScale,\r\n 0,\r\n 0,\r\n imageWidth,\r\n imageHeight,\r\n startPoint,\r\n this.updateCanvasAtStartPoint\r\n );\r\n };\r\n\r\n getCanvasScreen = (newScale, startClippingX, startClippingY, clippingWidth, clippingHeight, centerPoint, updateCallback) => {\r\n // fix transparent background by drawing canvas onto another canvas with a white background\r\n // https://stackoverflow.com/questions/18609715/html5-canvas-todataurl-image-has-no-background-color\r\n\r\n const srcCanvas = this.workspace.getCanvas();\r\n const temp = {\r\n scale: config.scale,\r\n width: srcCanvas.width,\r\n height: srcCanvas.height,\r\n };\r\n updateCallback(srcCanvas, newScale, clippingWidth, clippingHeight, centerPoint);\r\n\r\n //create a dummy CANVAS\r\n const destinationCanvas = document.createElement(\"canvas\");\r\n const destCtx = destinationCanvas.getContext('2d');\r\n destinationCanvas.width = srcCanvas.width ;\r\n destinationCanvas.height = srcCanvas.height ;\r\n\r\n //create a rectangle with the desired color\r\n destCtx.fillStyle = \"#FFFFFF\";\r\n destCtx.fillRect(0,0, destinationCanvas.width, destinationCanvas.height);\r\n\r\n //draw the original canvas onto the destination canvas\r\n if (clippingWidth > srcCanvas.width) clippingWidth = srcCanvas.width;\r\n if (clippingHeight > srcCanvas.height) clippingHeight = srcCanvas.height;\r\n\r\n destCtx.drawImage(\r\n srcCanvas,\r\n startClippingX,\r\n startClippingY,\r\n clippingWidth,\r\n clippingHeight,\r\n 0,\r\n 0,\r\n srcCanvas.width,\r\n srcCanvas.height\r\n );\r\n\r\n //restore canvas\r\n updateCallback(srcCanvas, temp.scale, temp.width, temp.height, centerPoint);\r\n\r\n return destinationCanvas.toDataURL();\r\n }\r\n\r\n updateCanvas = (srcCanvas, scale, width, height, centerPoint) => {\r\n srcCanvas.width = width;\r\n srcCanvas.height = height;\r\n config.scale = scale;\r\n this.workspace.setCenter(centerPoint.width, centerPoint.height); // return canvas to default position\r\n sqftEventManager.trigger(sqftEventManager.events.RENDER);\r\n sqftEventManager.trigger(sqftEventManager.events.RENDER);\r\n }\r\n\r\n updateCanvasAtStartPoint = (srcCanvas, scale, width, height, startPoint) => {\r\n srcCanvas.width = width;\r\n srcCanvas.height = height;\r\n config.scale = scale;\r\n this.workspace.setPosition(startPoint); // return canvas to default position\r\n\r\n sqftEventManager.trigger(sqftEventManager.events.RENDER);\r\n sqftEventManager.trigger(sqftEventManager.events.RENDER);\r\n }\r\n\r\n updateCanvasSlab = (srcCanvas, scale, width, height, centerPoint) => {\r\n srcCanvas.width = width;\r\n srcCanvas.height = height;\r\n config.scale = scale;\r\n //this.workspace.setCenter(centerPoint.width, centerPoint.height); // return canvas to default position\r\n //this.workspace.setPosition({x: 0, y: 0}); // return canvas to default position NOTE setPosition will also update SlabWorkspace position\r\n SlabWorkspace.setPos(centerPoint); // return canvas to default position\r\n renderSlabRightPart(sqftEventManager.getCtx(), true);\r\n }\r\n}\r\n","import store from \"../../../../../../store\";\r\nimport {getCurrentLayout} from \"../../../../../appLayout\";\r\nimport {ALLOWED_LABEL_NAV_ITEMS, BACKSPLASH_LABELS, COUNTERTOP_LABELS, EDGE_LABELS} from \"../../../../constants\";\r\nimport {IS_LIXIL_UI} from \"../../../../../../config\";\r\nimport {SHAPE_HARDCODED_PART_IDS} from \"../../../../constantsFeature\";\r\n\r\n/**\r\n * is used for category switching available partIds\r\n * @param {string} partId default part id used for shape type\r\n * @return {string} final partId\r\n */\r\nexport const checkShapeForAvailablePartId = (partId) => {\r\n const {fabricatorState, qtState, sqftState, wizardState} = store.getState();\r\n const layout = getCurrentLayout();\r\n const wizardIsActive = wizardState.wizardIsActive;\r\n\r\n if (SHAPE_HARDCODED_PART_IDS.includes(partId)) {\r\n return partId\r\n }\r\n\r\n if (IS_LIXIL_UI || !layout.qtCategories && document.kvConfig.visualizerType === \"Fireplace\") {\r\n // lixil-1) if we opened feature from QuotingTool - try to assign this partId\r\n if (sqftState.sqftFromFeature && sqftState.sqftFromFeature.cartFeature\r\n && !Object.keys(BACKSPLASH_LABELS).includes(sqftState.sqftFromFeature.cartFeature.partId)\r\n && !Object.keys(EDGE_LABELS).includes(sqftState.sqftFromFeature.cartFeature.partId)\r\n && Object.keys(ALLOWED_LABEL_NAV_ITEMS).includes(sqftState.sqftFromFeature.cartFeature.partId)\r\n ) {\r\n return sqftState.sqftFromFeature.cartFeature.partId\r\n }\r\n }\r\n\r\n if (wizardIsActive) {\r\n if (sqftState.sqftFromFeature && sqftState.sqftFromFeature.cartFeature\r\n && Object.keys(COUNTERTOP_LABELS).includes(sqftState.sqftFromFeature.cartFeature.partId)\r\n ) {\r\n return sqftState.sqftFromFeature.cartFeature.partId\r\n }\r\n return partId\r\n }\r\n\r\n if ((!fabricatorState.settings.useCategorySwitching || !layout.qtCategories || !qtState.qtActiveCategory)) {\r\n return partId\r\n }\r\n\r\n const currentCategory = layout.qtCategories.find(qtCat => qtCat.name === qtState.qtActiveCategory);\r\n if (!currentCategory || !currentCategory.subParts) {\r\n return partId\r\n }\r\n\r\n // 1) if we opened feature from QuotingTool - try to assign this partId\r\n if (sqftState.sqftFromFeature && sqftState.sqftFromFeature.cartFeature\r\n && currentCategory.subParts.some(subPart => subPart.part.partId === sqftState.sqftFromFeature.cartFeature.partId)\r\n && !Object.keys(BACKSPLASH_LABELS).includes(sqftState.sqftFromFeature.cartFeature.partId)\r\n && !Object.keys(EDGE_LABELS).includes(sqftState.sqftFromFeature.cartFeature.partId)\r\n && Object.keys(ALLOWED_LABEL_NAV_ITEMS).includes(sqftState.sqftFromFeature.cartFeature.partId)\r\n ) {\r\n return sqftState.sqftFromFeature.cartFeature.partId\r\n }\r\n\r\n // 2) check for center island feature group\r\n const isCountertop = partId === \"countertop\" || partId === \"center_island_countertop\";\r\n if (isCountertop) {\r\n const countertopNavItem = currentCategory.subParts.find(subPart => {\r\n return subPart.part.partId.includes(partId)\r\n });\r\n\r\n if (countertopNavItem) {\r\n return countertopNavItem.part.partId\r\n }\r\n }\r\n\r\n // 3) check for existing navItem\r\n const existingPartId = currentCategory.subParts.some(subPart => {\r\n return subPart.part.partId === partId\r\n });\r\n if (existingPartId) {\r\n return partId\r\n }\r\n\r\n // 4) here we replace default partId with existing in category partId\r\n for (let i = 0; i < currentCategory.subParts.length; i++) {\r\n if (ALLOWED_LABEL_NAV_ITEMS[currentCategory.subParts[i].part.partId]) {\r\n return currentCategory.subParts[i].part.partId\r\n }\r\n }\r\n\r\n // 5) if nothing found - let it be at least default shape's partId\r\n return partId\r\n}\r\n","import {getCurrentLayout} from \"../../../../../appLayout\";\r\nimport cabinetWorkspace from \"./cabinetWorkspace\";\r\nimport {SHAPE_PART_ID} from \"../../../../constants\";\r\n\r\nclass CabinetShapesLayout {\r\n\r\n /**\r\n * Create cabinets from cabinets data\r\n * @param data\r\n */\r\n createShapesFromCabinetSet = (data) => {\r\n data.positions.forEach((cabinetData) => {\r\n if ([SHAPE_PART_ID.lower_cabinet_boxes, SHAPE_PART_ID.upper_cabinet_boxes].includes(cabinetData.partId)) {\r\n const layout = getCurrentLayout();\r\n const feature = layout.getFeatureById(cabinetData.featureId, true);\r\n const parentFeature = layout.getFeatureById(cabinetData.parentFeatureId);\r\n const position = {x: cabinetData.x, y: cabinetData.z};\r\n cabinetWorkspace.cabinetShapes.addShape(feature, parentFeature, position)\r\n }\r\n })\r\n }\r\n}\r\n\r\nexport default CabinetShapesLayout;\r\n","// textBoxManager.js\r\nimport TextBox from \"./textBox\";\r\nimport workspace from \"../workspace\";\r\n\r\nclass TextBoxManager {\r\n constructor() {\r\n this.textBoxes = [];\r\n }\r\n\r\n getExportedTextBoxes = () => {\r\n return this.textBoxes.map(box => box.export());\r\n };\r\n\r\n setImportedTextBoxes = (_textBoxes) => {\r\n if (_textBoxes === undefined) {\r\n return []\r\n }\r\n for (let i = 0; i < _textBoxes.length; i++) {\r\n let textBox = new TextBox(_textBoxes[i].posOnField, _textBoxes[i].placeholder, _textBoxes[i].design);\r\n textBox.init();\r\n }\r\n\r\n return this.textBoxes;\r\n };\r\n\r\n getTextBoxes = () => {\r\n return this.textBoxes;\r\n };\r\n\r\n getHoveredTextBox = () => {\r\n\r\n }\r\n\r\n addTextBox = (box) => {\r\n this.textBoxes.push(box);\r\n\r\n return this.textBoxes;\r\n };\r\n\r\n removeBox = (box) => {\r\n let boxes = this.textBoxes.map((textBox => textBox.box));\r\n const index = boxes.indexOf(box);\r\n if (index > -1) {\r\n this.textBoxes.splice(index, 1);\r\n }\r\n\r\n return this.textBoxes;\r\n };\r\n\r\n removeAllTextBoxes = () => {\r\n for (let i = this.textBoxes.length - 1; i >= 0; i--) {\r\n this.textBoxes[i].box.delete();\r\n //textBoxes[i].text.delete();\r\n }\r\n this.textBoxes = [];\r\n\r\n return this.textBoxes;\r\n };\r\n\r\n isBoxActive() {\r\n const boxes = workspace.textBoxManager.getTextBoxes();\r\n\r\n if (boxes.length > 0) {\r\n for (let textBox of boxes) {\r\n if (textBox.box.mixin.movable.state.hovering) {\r\n return true;\r\n }\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n getHoveredTexBox() {\r\n const boxes = workspace.textBoxManager.getTextBoxes();\r\n\r\n if (boxes.length > 0) {\r\n for (let textBox of boxes) {\r\n if (textBox.box.mixin.movable.state.hovering) {\r\n return textBox;\r\n }\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n}\r\n\r\nexport default TextBoxManager;\r\n","import {getQtCatName} from \"../helpers/sqftQuotesHelper\";\r\n\r\nexport class FeatureObjectDTO {\r\n constructor(id, partId, featureId, quantity = 1) {\r\n this.id = id;\r\n this.qtCatName = getQtCatName();\r\n this.partId = partId;\r\n this.featureId = featureId;\r\n this.quantity = quantity;\r\n }\r\n\r\n addBumpoutArea(area) {\r\n this.area = area;\r\n }\r\n}\r\n","import JsonApi from \"./jsonApi\";\r\n\r\nexport const getMarkUpForFeatures = (featuresArray = []) => {\r\n const arrayIds = featuresArray.map(dbFeature => dbFeature.id);\r\n return JsonApi.getMarkUpForFeatures(arrayIds)\r\n .then(response => response.data)\r\n .catch(error => {\r\n console.log(\"Server error getMarkUpForFeatures \"+new Error(error));\r\n })\r\n};\r\n","import {getPercentage} from \"./misc2\";\r\nimport Config from \"../config\";\r\n\r\nexport const MARK_UP_APPLY_TO_TYPES = { // QKB\r\n retailPrice: \"retailPrice\",\r\n cost: \"cost\",\r\n retailPriceAndCost: \"retailPriceAndCost\",\r\n shippingCost: \"shippingCost\",\r\n discount: \"discount\",\r\n}\r\n\r\nconst MARK_UP_PROPS_MATCH = { // CAES\r\n Retail: \"cost\",\r\n Cost: \"price\",\r\n Discount: \"fabricatorCost\",\r\n};\r\n\r\n/**\r\n * @param dbFeaturesArray {[dbFeatureInterface]}\r\n * @param markUpResponse {object}\r\n * @return {[dbFeatureInterface]}\r\n */\r\nexport const setResponseFeaturesMarkUp = (dbFeaturesArray, markUpResponse) => {\r\n if (Config.isDevMode()) {\r\n console.log(\"markUpResponse\", markUpResponse);\r\n }\r\n if (!Array.isArray(dbFeaturesArray) || (typeof markUpResponse !== \"object\") || (markUpResponse === null)\r\n || !Object.keys(markUpResponse).length) {\r\n return dbFeaturesArray\r\n }\r\n Object.keys(markUpResponse).forEach(dbFeatureIdString => {\r\n const dbFeatureId = +dbFeatureIdString;\r\n let dbFeature = dbFeaturesArray.find(feature => feature.id === dbFeatureId);\r\n if (dbFeature && !dbFeature.markUpString) {\r\n // if (Config.isDevMode()) {\r\n // console.log(\"featureWithMarkUp\", dbFeature.customDisplayName, dbFeature);\r\n // }\r\n // here we update dbFeature with new mark up price!\r\n dbFeature = setFeaturePriceFromMarkItem(markUpResponse[dbFeatureIdString], dbFeature);\r\n }\r\n })\r\n return dbFeaturesArray\r\n}\r\n\r\nconst getUpdatedFeaturePriceFromMarkItem = (markUpListItem, originalValue, isCaes = false) => {\r\n const type = isCaes ? markUpListItem.Type : markUpListItem.type;\r\n const priceType = isCaes ? markUpListItem.PriceType : markUpListItem.priceType;\r\n const value = isCaes ? markUpListItem.Value : markUpListItem.value;\r\n\r\n const changeValue = (priceType === \"currency\")\r\n ? +value\r\n : getPercentage(+originalValue, +value);\r\n let newValue = (type === \"mark_up\" || type === \"MarkUp\")\r\n ? +originalValue + changeValue\r\n : +originalValue - changeValue;\r\n return newValue < 0 ? 0 : +(newValue.toFixed(2));\r\n}\r\n\r\n/**\r\n * QKB set\r\n * @param markUpItem {object}\r\n * @param dbFeature {dbFeatureInterface}\r\n * @return {dbFeatureInterface}\r\n */\r\nexport const setFeaturePriceFromMarkItemQKB = (markUpItem, dbFeature) => {\r\n // console.log(\"markUpItem\", markUpItem, newDbFeature);\r\n const {price, cost, shippingCost, discount} = markUpItem.originalValues;\r\n switch (markUpItem.applyTo) {\r\n case MARK_UP_APPLY_TO_TYPES.retailPrice: {\r\n dbFeature.price = getUpdatedFeaturePriceFromMarkItem(markUpItem, price);\r\n break;\r\n }\r\n case MARK_UP_APPLY_TO_TYPES.cost: {\r\n dbFeature.cost = getUpdatedFeaturePriceFromMarkItem(markUpItem, cost);\r\n break;\r\n }\r\n case MARK_UP_APPLY_TO_TYPES.retailPriceAndCost: {\r\n dbFeature.cost = getUpdatedFeaturePriceFromMarkItem(markUpItem, cost);\r\n dbFeature.price = getUpdatedFeaturePriceFromMarkItem(markUpItem, price);\r\n break;\r\n }\r\n case MARK_UP_APPLY_TO_TYPES.shippingCost: {\r\n dbFeature.shippingCost = getUpdatedFeaturePriceFromMarkItem(markUpItem, shippingCost);\r\n break;\r\n }\r\n case MARK_UP_APPLY_TO_TYPES.discount: {\r\n dbFeature.fabricatorCost = getUpdatedFeaturePriceFromMarkItem(markUpItem, discount);\r\n break;\r\n }\r\n default:\r\n break;\r\n }\r\n // console.log(\"newDbFeature\", newDbFeature);\r\n return dbFeature\r\n}\r\n\r\n/**\r\n * @param markUpString {string}\r\n * @param dbFeature {dbFeatureInterface}\r\n * @return {dbFeatureInterface}\r\n */\r\nconst setFeaturePriceFromMarkItem = (markUpString = \"\", dbFeature) => {\r\n if (!dbFeature || !markUpString) {\r\n return dbFeature\r\n }\r\n // console.log(\"markUpObject\", markUpObject, newDbFeature);\r\n const markUpObject = JSON.parse(markUpString); // {Retail: {Type: \"MarkUp\", Value: 10}, Cost, Discount}\r\n\r\n if (Array.isArray(markUpObject)) { // QKB format\r\n markUpObject.forEach(markUpListItem => {\r\n // console.log(\"dbFeature price cost\", dbFeature.price, dbFeature.cost);\r\n dbFeature = setFeaturePriceFromMarkItemQKB(markUpListItem, dbFeature);\r\n // console.log(\"dbFeature price cost\", dbFeature.price, dbFeature.cost);\r\n })\r\n } else if (typeof markUpObject === \"object\" && (markUpObject !== null)) { // CAES format!!\r\n // console.log(\"\", markUpObject);\r\n // {\r\n // Cost: {Type: 'MarkDown', Value: 10}\r\n // Discount : {Type: 'MarkDown', Value: 0}\r\n // Retail : {Type: 'MarkDown', Value: 10}\r\n // }\r\n Object.keys(markUpObject).forEach(key => {\r\n if (!markUpObject[key].Value || !MARK_UP_PROPS_MATCH[key]) {\r\n return\r\n }\r\n dbFeature[MARK_UP_PROPS_MATCH[key]] = getUpdatedFeaturePriceFromMarkItem(markUpObject[key], dbFeature[MARK_UP_PROPS_MATCH[key]], true);\r\n })\r\n }\r\n dbFeature.markUpString = markUpString; // just to be able to find it after job is saved on restore\r\n // console.log(\"newDbFeature\", newDbFeature);\r\n return dbFeature\r\n}\r\n","/**\r\n * // Example usage\r\n * const rate = 0.05 / 12; // Monthly interest rate (5% annual)\r\n * const nper = 60; // Number of payments (5 years)\r\n * const pv = 30000; // Loan amount (present value)\r\n * */\r\nexport function PMT(rate, nper, pv, fv = 0, type = 0) {\r\n if (rate === 0) {\r\n return -(pv + fv) / nper;\r\n }\r\n\r\n const pvif = Math.pow(1 + rate, nper);\r\n let pmt = (rate * (pv * pvif + fv)) / (pvif - 1);\r\n\r\n // Adjust for payments at the beginning of the period\r\n if (type === 1) {\r\n pmt /= (1 + rate);\r\n }\r\n\r\n return -pmt; // Return negative for outflow\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport Appliance from \"../../parts/appliance\";\r\n\r\nexport default class Handle extends IntermediatePart {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'handle';\r\n this.partName = 'Handle';\r\n this.translateId = \"visualizer.kitchen.cabinet.handle\";\r\n this.hasAdditionalParts = true;\r\n this.layerPriority = 8;\r\n }\r\n\r\n load(dbFeature) {\r\n const partNumber = (dbFeature.metaData[\"Part\"] && +dbFeature.metaData[\"Part\"][0]) === 0 ? 1 : 2;\r\n return super.load_(dbFeature, new Handle(false, partNumber), true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n\r\n getActiveFeaturePartsAccordingToActiveFeature(fromFeature = this.activeFeature, activeFeatureConditions = []) {\r\n let activeFeatureParts = [];\r\n if (fromFeature && fromFeature.partNumber) {\r\n const name1 = fromFeature.getSplittedFeatureName();\r\n // console.log(\"name1\", name1);\r\n let arrayOfConditions = activeFeatureConditions.length\r\n ? activeFeatureConditions\r\n : this.getActiveFeatureConditions(fromFeature);\r\n\r\n const cabinetParent = this.getParent();\r\n const applianceParent = cabinetParent.layout.parts[Appliance.id];\r\n\r\n // part 0 - показываем всегда\r\n // part 1 - только если выключен холодильник\r\n // part 2 - показываем всегда, но зависит от MountType part 2 нижних кабинетов (S, U или ST, FM, SM)\r\n // part 3 - если включен part 3 нижних кабинетов (это срабатывает при выключенной посудомойке)\r\n // part 4 - если включен part 4 нижних кабинетов (это срабатывает при выключенной плите)\r\n // part 5 - если включен part 2 верхних кабинетов (это срабатывает при выключенной вытяжке)\r\n // part 6 - если включен fridge и матчим по его метадате Width и Height, так же как и кабинеты\r\n activeFeatureParts = this.featuresParts.filter((feature) => {\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"1\")\r\n && (!applianceParent || !applianceParent.fridge || !applianceParent.fridge.activeFeature && applianceParent.fridge.disabled)) {\r\n return false\r\n }\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"2\")) {\r\n if (cabinetParent && cabinetParent.bottomCabinet && cabinetParent.bottomCabinet.activeFeatureParts) {\r\n const part2 = cabinetParent.bottomCabinet.activeFeatureParts.find(featuresPart => featuresPart.metaData[\"Part\"].includes(\"2\"));\r\n if (part2) {\r\n return name1 === feature.getSplittedFeatureName() && feature.matchesMetaForArrayOfConditions([\r\n ...arrayOfConditions,\r\n {propName: \"MountType\", propValue: part2.metaData[\"MountType\"]}\r\n ])\r\n }\r\n }\r\n return false\r\n }\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"3\")\r\n && applianceParent && applianceParent.dishwasher && !applianceParent.dishwasher.disabled && applianceParent.dishwasher.activeFeature) {\r\n return false\r\n }\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"4\")\r\n && applianceParent && applianceParent.stove && !applianceParent.stove.disabled && applianceParent.stove.activeFeature) {\r\n return false\r\n }\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"5\")\r\n && applianceParent && applianceParent.hood && !applianceParent.hood.disabled && applianceParent.hood.activeFeature) {\r\n return false\r\n }\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"6\")) { // 6 is fridge related\r\n if (!applianceParent || !applianceParent.fridge || applianceParent.fridge.disabled || !applianceParent.fridge.activeFeature) {\r\n return false\r\n }\r\n const fridgeConditions = applianceParent.fridge.getFridgeWidthAndHeightConditions();\r\n return name1 === feature.getSplittedFeatureName() && feature.matchesMetaForArrayOfConditions([...arrayOfConditions, ...fridgeConditions])\r\n }\r\n return name1 === feature.getSplittedFeatureName() && feature.matchesMetaForArrayOfConditions(arrayOfConditions)\r\n });\r\n\r\n // console.log(\"this.featuresParts\", this.featuresParts);\r\n // console.log(\"activeFeatureParts\", activeFeatureParts);\r\n activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n }\r\n return activeFeatureParts\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class Dishwasher extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'dishwasher';\r\n this.partName = 'Dishwasher';\r\n this.translateId = \"visualizer.kitchen.appliance.dishwasher\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new Dishwasher());\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nconst widthAndHeightArray = [\"Width\", \"Height\"];\r\n\r\nexport default class Fridge extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'fridge';\r\n this.partName = 'Fridge';\r\n this.translateId = \"visualizer.kitchen.appliance.fridge\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new Fridge());\r\n }\r\n\r\n getFridgeWidthAndHeightConditions = () => {\r\n let widthHeightConditions = []\r\n if (!this.activeFeature || !this.activeFeature.metaData) {\r\n return widthHeightConditions\r\n }\r\n widthAndHeightArray.forEach(metaName => {\r\n if (this.activeFeature.metaData[metaName]) {\r\n widthHeightConditions.push({\r\n propName: metaName,\r\n propValue: Array.isArray(this.activeFeature.metaData[metaName])\r\n ? this.activeFeature.metaData[metaName][0]\r\n : this.activeFeature.metaData[metaName],\r\n })\r\n }\r\n });\r\n return widthHeightConditions\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport store from \"../../../../../store\";\r\nimport {getFeatureIsLocked} from \"../../../../../misc/helpers\";\r\n\r\nexport default class Hood extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'hood';\r\n this.partName = 'Hood';\r\n this.translateId = \"visualizer.kitchen.appliance.hood\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new Hood());\r\n }\r\n\r\n handleClick(ignoreLocked = false, clickFrom = \"\") {\r\n const {isEncore} = store.getState().fabricatorState;\r\n if (isEncore) {\r\n const featureIsLocked = getFeatureIsLocked(this, ignoreLocked);\r\n if (ignoreLocked || !featureIsLocked) {\r\n const applianceParent = this.getParent().getParent();\r\n if (applianceParent.layout.type === 6) {\r\n if (applianceParent.range && !applianceParent.range.disabled) {\r\n applianceParent.range.disabled = true;\r\n }\r\n if (applianceParent.stovetop && applianceParent.stovetop.disabled) {\r\n applianceParent.stovetop.disabled = false;\r\n }\r\n }\r\n }\r\n }\r\n return super.handleClick(ignoreLocked, clickFrom);\r\n }\r\n\r\n // add dependency on stove width, if width is 24 - we need width 30, if stove is 60 - we need 48\r\n\r\n disabledClick() {\r\n const applianceParent = this.getParent();\r\n const stove = applianceParent.stove;\r\n if (stove && !this.disabled && stove.disabled) {\r\n stove.disabled = false;\r\n }\r\n if ((applianceParent.layout.type === 6) && !this.disabled && applianceParent.microwave\r\n && !applianceParent.microwave.disabled) {\r\n applianceParent.microwave.disabled = true;\r\n }\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport store from \"../../../../../store\";\r\nimport {getFeatureIsLocked} from \"../../../../../misc/helpers\";\r\n\r\nexport default class Microwave extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'microwave';\r\n this.partName = 'Microwave';\r\n this.translateId = \"visualizer.kitchen.appliance.microwave\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new Microwave());\r\n }\r\n\r\n handleClick(ignoreLocked = false, clickFrom = \"\") {\r\n const {isEncore} = store.getState().fabricatorState;\r\n if (isEncore) {\r\n const featureIsLocked = getFeatureIsLocked(this, ignoreLocked);\r\n if (ignoreLocked || !featureIsLocked) {\r\n const applianceParent = this.getParent().getParent();\r\n if (applianceParent.layout.type === 6) {\r\n if (applianceParent.stovetop && !applianceParent.stovetop.disabled) {\r\n applianceParent.stovetop.disabled = true;\r\n }\r\n if (applianceParent.oven && !applianceParent.oven.disabled) {\r\n applianceParent.oven.disabled = true;\r\n }\r\n if (applianceParent.range && applianceParent.range.disabled) {\r\n applianceParent.range.disabled = false;\r\n }\r\n }\r\n }\r\n }\r\n return super.handleClick(ignoreLocked, clickFrom);\r\n }\r\n\r\n disabledClick() {\r\n const applianceParent = this.getParent();\r\n if ((applianceParent.layout.type === 6) && !this.disabled && applianceParent.hood\r\n && !applianceParent.hood.disabled) {\r\n applianceParent.hood.disabled = true;\r\n }\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport store from \"../../../../../store\";\r\nimport {getFeatureIsLocked} from \"../../../../../misc/helpers\";\r\n\r\nexport default class Range extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'range';\r\n this.partName = 'Range';\r\n this.translateId = \"visualizer.kitchen.appliance.range\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new Range());\r\n // const rangeType = dbFeature.metaData && dbFeature.metaData[\"RangeType\"];\r\n // if (!rangeType) {\r\n // dbFeature.metaData[\"RangeType\"] = [\"ALL\"];\r\n // }\r\n }\r\n\r\n handleClick(ignoreLocked = false, clickFrom = \"\") {\r\n const {isEncore} = store.getState().fabricatorState;\r\n const applianceParent = this.getParent().getParent();\r\n const featureIsLocked = getFeatureIsLocked(this, ignoreLocked);\r\n\r\n if (isEncore) {\r\n if (ignoreLocked || !featureIsLocked) {\r\n if (applianceParent.layout.type === 6) {\r\n if (applianceParent.hood && !applianceParent.hood.disabled) {\r\n applianceParent.hood.disabled = true;\r\n }\r\n if (applianceParent.oven && !applianceParent.oven.disabled) {\r\n applianceParent.oven.disabled = true;\r\n }\r\n if (applianceParent.microwave && applianceParent.microwave.disabled) {\r\n applianceParent.microwave.disabled = false;\r\n }\r\n }\r\n }\r\n }\r\n if (ignoreLocked || !featureIsLocked) {\r\n const currentHoodWidth = applianceParent.hood.activeFeature.metaData[\"Width\"];\r\n const newWidth = this.metaData[\"Width\"];\r\n if (newWidth && (!currentHoodWidth || (newWidth[0] !== currentHoodWidth[0]))) {\r\n const currentHoodNavItems = applianceParent.hood.navigationSubItems();\r\n const sameWidth = currentHoodNavItems.filter(navItem => {\r\n if (!navItem.part.metaData[\"Width\"]) {\r\n return false\r\n }\r\n if (newWidth[0] === \"24\") {\r\n return navItem.part.metaData[\"Width\"][0] === newWidth[0] || navItem.part.metaData[\"Width\"][0] === \"30\"\r\n }\r\n return navItem.part.metaData[\"Width\"][0] === newWidth[0]\r\n });\r\n console.log(\"newWidth\", newWidth[0]);\r\n console.log(\"sameWidth\", sameWidth);\r\n if (sameWidth.length) { // here we can filter by the same name, color etc.\r\n applianceParent.hood.activeFeature = sameWidth[0].part;\r\n }\r\n }\r\n if (applianceParent && applianceParent.stove && !applianceParent.stove.disabled) {\r\n applianceParent.stove.disabled = true;\r\n }\r\n }\r\n return super.handleClick(ignoreLocked, clickFrom);\r\n }\r\n\r\n disabledClick() {\r\n const applianceParent = this.getParent();\r\n if ((applianceParent.layout.type === 6) && !this.disabled && applianceParent.stovetop\r\n && !applianceParent.stovetop.disabled) {\r\n applianceParent.stovetop.disabled = true;\r\n }\r\n if (applianceParent.hood) {\r\n applianceParent.hood.disabled = this.disabled;\r\n }\r\n if (!this.disabled && applianceParent.stove && !applianceParent.stove.disabled) {\r\n applianceParent.stove.disabled = true;\r\n }\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport store from \"../../../../../store\";\r\nimport {getFeatureIsLocked} from \"../../../../../misc/helpers\";\r\n\r\nexport default class Oven extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'oven';\r\n this.partName = 'Oven';\r\n this.translateId = \"visualizer.kitchen.appliance.oven\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new Oven());\r\n }\r\n\r\n handleClick(ignoreLocked = false, clickFrom = \"\") {\r\n const {isEncore} = store.getState().fabricatorState;\r\n if (isEncore) {\r\n const featureIsLocked = getFeatureIsLocked(this, ignoreLocked);\r\n if (ignoreLocked || !featureIsLocked) {\r\n const applianceParent = this.getParent().getParent();\r\n if (applianceParent.layout.type === 6) {\r\n if (applianceParent.stovetop && applianceParent.stovetop.disabled) {\r\n applianceParent.stovetop.disabled = false;\r\n }\r\n if (applianceParent.hood && applianceParent.hood.disabled) {\r\n applianceParent.hood.disabled = false;\r\n }\r\n if (applianceParent.range && !applianceParent.range.disabled) {\r\n applianceParent.range.disabled = true;\r\n }\r\n if (applianceParent.microwave && !applianceParent.microwave.disabled) {\r\n applianceParent.microwave.disabled = true;\r\n }\r\n }\r\n }\r\n }\r\n return super.handleClick(ignoreLocked, clickFrom);\r\n }\r\n\r\n hideLayerCondition() {\r\n const applianceParent = this.getParent();\r\n // on the second layout we should show Oven only if stove has Metadata \"T\" (top)\r\n return (applianceParent.layout.type === 2) && applianceParent && applianceParent.stove && applianceParent.stove.activeFeature\r\n && applianceParent.stove.activeFeature && (!applianceParent.stove.activeFeature.metaData[\"Stove Type\"]\r\n || (applianceParent.stove.activeFeature.metaData[\"Stove Type\"][0] !== \"T\"))\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n if (this.hideLayerCondition()) {\r\n conditions.push({\r\n propName: \"Stove Type\",\r\n propValue: \"F\"\r\n });\r\n }\r\n return conditions\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {getFeatureIsLocked} from \"../../../../../misc/helpers\";\r\n\r\nexport default class Stove extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'stove';\r\n this.partName = 'Stove';\r\n this.translateId = \"visualizer.kitchen.appliance.stove\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new Stove());\r\n }\r\n\r\n handleClick(ignoreLocked, clickFrom = \"\") {\r\n const applianceParent = this.getParent().getParent();\r\n const featureIsLocked = getFeatureIsLocked(this, ignoreLocked);\r\n if (ignoreLocked || !featureIsLocked) {\r\n if (applianceParent && applianceParent.hood && applianceParent.hood.activeFeature) {\r\n const currentHoodWidth = applianceParent.hood.activeFeature.metaData[\"Width\"];\r\n const newWidth = this.metaData[\"Width\"];\r\n if (newWidth && (!currentHoodWidth || (newWidth[0] !== currentHoodWidth[0]))) {\r\n const currentHoodNavItems = applianceParent.hood.navigationSubItems();\r\n const sameWidth = currentHoodNavItems.filter(navItem => {\r\n if (!navItem.part.metaData[\"Width\"]) {\r\n return false\r\n }\r\n if (newWidth[0] === \"24\") {\r\n return navItem.part.metaData[\"Width\"][0] === newWidth[0] || navItem.part.metaData[\"Width\"][0] === \"30\"\r\n }\r\n return navItem.part.metaData[\"Width\"][0] === newWidth[0]\r\n });\r\n console.log(\"newWidth\", newWidth[0]);\r\n console.log(\"sameWidth\", sameWidth);\r\n if (sameWidth.length) { // here we can filter by the same name, color etc.\r\n applianceParent.hood.activeFeature = sameWidth[0].part;\r\n }\r\n }\r\n }\r\n if (applianceParent && applianceParent.range && applianceParent.range.activeFeature && !applianceParent.range.disabled) {\r\n applianceParent.range.disabled = true\r\n }\r\n }\r\n super.handleClick(ignoreLocked, clickFrom);\r\n }\r\n\r\n hideLayerCondition() {\r\n const applianceParent = this.getParent();\r\n const hideLayer = applianceParent && applianceParent.range && applianceParent.range.activeFeature\r\n && !applianceParent.range.disabled;\r\n if (hideLayer && !this.disabled) {\r\n this.disabled = true;\r\n }\r\n return hideLayer\r\n }\r\n\r\n disabledClick() {\r\n const applianceParent = this.getParent();\r\n if (applianceParent.hood) {\r\n applianceParent.hood.disabled = this.disabled;\r\n }\r\n if (!this.disabled && applianceParent.range && !applianceParent.range.disabled) {\r\n applianceParent.range.disabled = true;\r\n }\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {useOldCabinetLogic} from \"../../constants\";\r\n\r\nexport default class FridgeEnclosure extends IntermediatePart {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'fridge_enclosure';\r\n this.partName = 'Fridge Enclosure';\r\n this.dbName = \"Fridge Enclosure\";\r\n this.visible = true;\r\n this.translateId = \"visualizer.kitchen.appliance.fridge_enclosure\";\r\n this.hasAdditionalParts = true;\r\n this.allWallsCanBeApplied = true;\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n if (dbFeature.metaData[\"RoomLayout\"] && dbFeature.metaData[\"RoomLayout\"].includes(\"Layout4\")) {\r\n dbFeature.metaData[\"Part\"] = [\"0\"]; // we don't have part 0 on Layout4\r\n }\r\n if (useOldCabinetLogic) {\r\n const partNumber = dbFeature.metaData[\"Part\"] ? +dbFeature.metaData[\"Part\"][0] : 0;\r\n return super.load_(dbFeature, new FridgeEnclosure(false, partNumber), true, partNumber === 0 ? 'features' : 'featuresParts');\r\n }\r\n const partNumber = dbFeature.metaData[\"Part\"] ? dbFeature.metaData[\"Part\"][0] : \"1\";\r\n return super.load_(dbFeature, new FridgeEnclosure(false, partNumber), true, partNumber === \"1\" ? 'features' : 'featuresParts');\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n if (layout.type === 4) {\r\n const fridge = this.getParent().fridge;\r\n // show layers only if fridge is disabled\r\n if (!(!fridge || fridge.disabled || !fridge.activeFeature || !fridge.activeFeature.layer || !fridge.activeFeature.layer.src)) {\r\n super.hideLayers();\r\n return\r\n }\r\n }\r\n\r\n return super.setLayers(layout);\r\n }\r\n\r\n setActiveFeatureParts(fromFeature = this.activeFeature, activeFeatureConditions = []) {\r\n const parent = this.getParent();\r\n //show second part only if fridge is disabled\r\n if (!parent.fridge || parent.fridge.disabled || !parent.fridge.activeFeature || !parent.fridge.activeFeature.layer || !parent.fridge.activeFeature.layer.src) {\r\n return this.getActiveFeaturePartsAccordingToActiveFeature(fromFeature, activeFeatureConditions, true);\r\n }\r\n return []\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n const applianceParent = this.getParent();\r\n if (applianceParent && applianceParent.fridge && !applianceParent.fridge.disabled && applianceParent.fridge.activeFeature) {\r\n const fridgeConditions = applianceParent.fridge.getFridgeWidthAndHeightConditions();\r\n if (!fridgeConditions.some(condition => condition.propName === \"Width\")) {\r\n conditions.push({\r\n propName: \"Width\",\r\n propValue: \"36\"\r\n });\r\n }\r\n return [...conditions, ...fridgeConditions]\r\n }\r\n return conditions\r\n }\r\n\r\n getFridgeEnclosureSplittedFeatureName = () => {\r\n if (this._fridgeEnclosureSplittedFeatureName == null) {\r\n this._fridgeEnclosureSplittedFeatureName = this.getSplittedFeatureName().split(/.{5}$/)[0]; // \"Benton Maple Stone-NC-Aspen-00 1 21\" -> \"Benton Maple Stone-NC-Aspen-00\"\r\n }\r\n return this._fridgeEnclosureSplittedFeatureName\r\n };\r\n\r\n getActiveFeaturePartsAccordingToActiveFeature(fromFeature = this.activeFeature, activeFeatureConditions = []) {\r\n let activeFeatureParts = [];\r\n if (fromFeature && Number.isInteger(fromFeature.partNumber)) {\r\n let activeFeaturePart;\r\n const name1 = fromFeature.getFridgeEnclosureSplittedFeatureName();\r\n // console.log(\"name1\", name1);\r\n let arrayOfConditions = activeFeatureConditions.length\r\n ? activeFeatureConditions\r\n : this.getActiveFeatureConditions(fromFeature);\r\n // if (this.partId === \"right_wall\") {\r\n // arrayOfConditions = arrayOfConditions.filter(condition => condition.propName !== \"MirrorSize\");\r\n // }\r\n activeFeatureParts = this.featuresParts.filter((feature) => name1 === feature.getFridgeEnclosureSplittedFeatureName());\r\n // console.log(\"this.featuresParts\", this.featuresParts);\r\n // console.log(\"activeFeatureParts\", activeFeatureParts);\r\n if (activeFeatureParts.length) {\r\n activeFeaturePart = activeFeatureParts.find((feature) => {\r\n return feature.matchesMetaForArrayOfConditions(arrayOfConditions)\r\n });\r\n if (!activeFeaturePart) {\r\n activeFeaturePart = activeFeatureParts[0];\r\n }\r\n }\r\n activeFeatureParts = activeFeaturePart ? [activeFeaturePart] : [];\r\n activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n }\r\n return activeFeatureParts\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class FridgeEnclosureHandle extends IntermediatePart {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'fridge_enclosure_handle';\r\n this.partName = \"Fridge Enclosure Handle\";\r\n this.visible = true;\r\n this.translateId = \"visualizer.kitchen.appliance.fridge_enclosure_handle\";\r\n this.hasAdditionalParts = true;\r\n this.allWallsCanBeApplied = true;\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n if (dbFeature.metaData[\"RoomLayout\"] && dbFeature.metaData[\"RoomLayout\"].includes(\"Layout4\")) {\r\n dbFeature.metaData[\"Part\"] = [\"0\"]; // we don't have part 0 on Layout4\r\n }\r\n const partNumber = dbFeature.metaData[\"Part\"] ? dbFeature.metaData[\"Part\"][0] : \"1\";\r\n return super.load_(dbFeature, new FridgeEnclosureHandle(false, partNumber), true, partNumber === \"1\" ? 'features' : 'featuresParts');\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n const applianceParent = this.getParent();\r\n if (applianceParent && applianceParent.fridge && !applianceParent.fridge.disabled && applianceParent.fridge.activeFeature) {\r\n const fridgeConditions = applianceParent.fridge.getFridgeWidthAndHeightConditions();\r\n if (!fridgeConditions.some(condition => condition.propName === \"Width\")) {\r\n conditions.push({\r\n propName: \"Width\",\r\n propValue: \"36\"\r\n });\r\n }\r\n return [...conditions, ...fridgeConditions]\r\n }\r\n return conditions\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n if (layout.type === 4) {\r\n const fridge = this.getParent().fridge;\r\n // show layers only if fridge is disabled\r\n if (!(!fridge || fridge.disabled || !fridge.activeFeature || !fridge.activeFeature.layer || !fridge.activeFeature.layer.src)) {\r\n super.hideLayers();\r\n return\r\n }\r\n }\r\n\r\n return super.setLayers(layout);\r\n }\r\n\r\n setActiveFeatureParts(fromFeature = this.activeFeature, activeFeatureConditions = []) {\r\n const parent = this.getParent();\r\n //show second part only if fridge is disabled\r\n if (!parent.fridge || parent.fridge.disabled || !parent.fridge.activeFeature || !parent.fridge.activeFeature.layer || !parent.fridge.activeFeature.layer.src) {\r\n return this.getActiveFeaturePartsAccordingToActiveFeature(fromFeature, activeFeatureConditions, true);\r\n }\r\n return []\r\n }\r\n\r\n getFridgeEnclosureSplittedFeatureName = () => {\r\n if (this._fridgeEnclosureSplittedFeatureName == null) {\r\n this._fridgeEnclosureSplittedFeatureName = this.getSplittedFeatureName().split(/.{5}$/)[0]; // \"Benton Maple Stone-NC-Aspen-00 1 21\" -> \"Benton Maple Stone-NC-Aspen-00\"\r\n }\r\n return this._fridgeEnclosureSplittedFeatureName\r\n };\r\n\r\n getActiveFeaturePartsAccordingToActiveFeature(fromFeature = this.activeFeature, activeFeatureConditions = []) {\r\n let activeFeatureParts = [];\r\n if (fromFeature && Number.isInteger(fromFeature.partNumber)) {\r\n let activeFeaturePart;\r\n const name1 = fromFeature.getFridgeEnclosureSplittedFeatureName();\r\n // console.log(\"name1\", name1);\r\n let arrayOfConditions = activeFeatureConditions.length\r\n ? activeFeatureConditions\r\n : this.getActiveFeatureConditions(fromFeature);\r\n // if (this.partId === \"right_wall\") {\r\n // arrayOfConditions = arrayOfConditions.filter(condition => condition.propName !== \"MirrorSize\");\r\n // }\r\n activeFeatureParts = this.featuresParts.filter((feature) => name1 === feature.getFridgeEnclosureSplittedFeatureName());\r\n // console.log(\"this.featuresParts\", this.featuresParts);\r\n // console.log(\"activeFeatureParts\", activeFeatureParts);\r\n if (activeFeatureParts.length) {\r\n activeFeaturePart = activeFeatureParts.find((feature) => {\r\n return feature.matchesMetaForArrayOfConditions(arrayOfConditions)\r\n });\r\n if (!activeFeaturePart) {\r\n activeFeaturePart = activeFeatureParts[0];\r\n }\r\n }\r\n activeFeatureParts = activeFeaturePart ? [activeFeaturePart] : [];\r\n activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n }\r\n return activeFeatureParts\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport store from \"../../../../../store\";\r\nimport {getFeatureIsLocked} from \"../../../../../misc/helpers\";\r\n\r\nexport default class Stovetop extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'stovetop';\r\n this.partName = 'Stovetop';\r\n this.translateId = \"visualizer.kitchen.center_island.center_island_stovetop\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new Stovetop());\r\n }\r\n\r\n handleClick(ignoreLocked = false, clickFrom = \"\") {\r\n const {isEncore} = store.getState().fabricatorState;\r\n if (isEncore) {\r\n const featureIsLocked = getFeatureIsLocked(this, ignoreLocked);\r\n if (ignoreLocked || !featureIsLocked) {\r\n const applianceParent = this.getParent().getParent();\r\n if (applianceParent.layout.type === 6) {\r\n if (applianceParent.microwave && !applianceParent.microwave.disabled) {\r\n applianceParent.microwave.disabled = true;\r\n }\r\n if (applianceParent.hood && applianceParent.hood.disabled) {\r\n applianceParent.hood.disabled = false;\r\n }\r\n }\r\n }\r\n }\r\n return super.handleClick(ignoreLocked, clickFrom);\r\n }\r\n\r\n disabledClick() {\r\n const applianceParent = this.getParent();\r\n // if (!this.disabled) {\r\n // // centerIslandParent.cabinet.disabled = false;\r\n // // centerIslandParent.cabinet.disabledClick();\r\n // } else {\r\n // if (applianceParent.hood) {\r\n // applianceParent.hood.disabled = this.disabled;\r\n // }\r\n // }\r\n if ((applianceParent.layout.type === 6) && !this.disabled && applianceParent.range\r\n && !applianceParent.range.disabled) {\r\n applianceParent.range.disabled = true;\r\n }\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport Appliance from \"../../parts/appliance\";\r\nimport {LayoutAbbreviations, useOldCabinetLogic} from \"../../constants\";\r\n\r\nexport default class TopCabinet extends IntermediatePart {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'top_cabinet';\r\n this.partName = 'Top Cabinet';\r\n this.translateId = \"visualizer.kitchen.cabinet.top_cabinet\";\r\n this.canBeDisabled = false;\r\n this.hasAdditionalParts = true;\r\n this.layerPriority = 1;\r\n this.allWallsCanBeApplied = true;\r\n if (isChild) {\r\n this.nextFeaturesPageToLoadArray = {};\r\n LayoutAbbreviations.forEach(layoutAbbreviation => {\r\n this.nextFeaturesPageToLoadArray[layoutAbbreviation] = {\r\n page: 0,\r\n allReceived: false,\r\n };\r\n });\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n const partNumber = (dbFeature.metaData[\"Part\"] && +dbFeature.metaData[\"Part\"][0]) === 1 ? 1 : 2;\r\n return super.load_(dbFeature, new TopCabinet(false, partNumber), true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n\r\n disabledClick() {\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n const topHandle = this.getParent().topHandle;\r\n if (topHandle) {\r\n topHandle.disabled = this.disabled;\r\n }\r\n const crownMolding = this.getParent().crownMolding;\r\n if (crownMolding) {\r\n crownMolding.disabled = this.disabled;\r\n }\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n if (useOldCabinetLogic) {\r\n return conditions\r\n }\r\n const cabinetParent = this.getParent();\r\n const applianceParent = cabinetParent.layout.parts[Appliance.id];\r\n const hoodIsVisible = applianceParent && applianceParent.hood && applianceParent.hood.activeFeature && !applianceParent.hood.disabled;\r\n const microwaveIsVisible = applianceParent && applianceParent.microwave && applianceParent.microwave.activeFeature && !applianceParent.microwave.disabled;\r\n conditions.push({\r\n propName: \"Hood\",\r\n propValue: hoodIsVisible || ((cabinetParent.layout.type === 6) && microwaveIsVisible) ? \"H\" : \"C\"\r\n });\r\n if (hoodIsVisible && applianceParent.hood.activeFeature.metaData[\"Width\"]) {\r\n conditions.push({\r\n propName: \"Width\",\r\n propValue: applianceParent.hood.activeFeature.metaData[\"Width\"]\r\n });\r\n }\r\n return conditions\r\n }\r\n\r\n getActiveFeatureConditions() {\r\n return this.getArrayOfConditions().filter(metaObject => {\r\n return metaObject.propName !== \"Hood\" && metaObject.propName !== \"Width\"\r\n })\r\n }\r\n\r\n getActiveFeaturePartsAccordingToActiveFeature(fromFeature = this.activeFeature, activeFeatureConditions = []) {\r\n let activeFeatureParts = [];\r\n if (fromFeature && fromFeature.partNumber) {\r\n const name1 = fromFeature.getSplittedFeatureName();\r\n // console.log(\"name1\", name1);\r\n let arrayOfConditions = activeFeatureConditions.length\r\n ? activeFeatureConditions\r\n : this.getActiveFeatureConditions(fromFeature);\r\n\r\n const cabinetParent = this.getParent();\r\n const applianceParent = cabinetParent.layout.parts[Appliance.id];\r\n\r\n // part1 - depends on hood - H hood enabled, С - disabled\r\n // part1 - depends on hood \"Width\"\r\n // part2 - depends on Fridge\r\n // part3 - was part 6\r\n activeFeatureParts = this.featuresParts.filter((feature) => {\r\n if (useOldCabinetLogic) {\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"2\")\r\n && (!applianceParent || !applianceParent.hood || applianceParent.hood.disabled || !applianceParent.hood.activeFeature)) {\r\n return name1 === feature.getSplittedFeatureName() && feature.matchesMetaForArrayOfConditions(arrayOfConditions)\r\n }\r\n if (cabinetParent.layout.type === 4 && feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"3\")\r\n && applianceParent && applianceParent.fridge && (applianceParent.fridge.disabled || !applianceParent.fridge.activeFeature)) {\r\n return name1 === feature.getSplittedFeatureName() && feature.matchesMetaForArrayOfConditions(arrayOfConditions)\r\n }\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"6\")) { // 6 is fridge related\r\n if (!applianceParent || !applianceParent.fridge || applianceParent.fridge.disabled || !applianceParent.fridge.activeFeature) {\r\n return false\r\n }\r\n const fridgeConditions = applianceParent.fridge.getFridgeWidthAndHeightConditions();\r\n return name1 === feature.getSplittedFeatureName() && feature.matchesMetaForArrayOfConditions([...arrayOfConditions, ...fridgeConditions])\r\n }\r\n } else {\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"2\")) {\r\n const fridgeIsVisible = applianceParent && applianceParent.fridge && !applianceParent.fridge.disabled\r\n && applianceParent.fridge.activeFeature;\r\n const fridgeConditions = applianceParent && applianceParent.fridge\r\n ? applianceParent.fridge.getFridgeWidthAndHeightConditions()\r\n : [];\r\n return name1 === feature.getSplittedFeatureName() && feature.matchesMetaForArrayOfConditions([\r\n ...arrayOfConditions, {\r\n propName: \"Fridge\",\r\n propValue: fridgeIsVisible ? \"F\" : \"C\"\r\n }, ...fridgeConditions\r\n ])\r\n } else if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"3\")) {\r\n if (!applianceParent || !applianceParent.oven || applianceParent.oven.disabled || !applianceParent.oven.activeFeature) {\r\n return false\r\n }\r\n return name1 === feature.getSplittedFeatureName() && feature.matchesMetaForArrayOfConditions(arrayOfConditions)\r\n }\r\n }\r\n return false\r\n });\r\n\r\n // console.log(\"this.featuresParts\", this.featuresParts);\r\n // console.log(\"activeFeatureParts\", activeFeatureParts);\r\n activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n }\r\n return activeFeatureParts\r\n }\r\n\r\n}\r\n\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport Appliance from \"../../parts/appliance\";\r\nimport {LayoutAbbreviations, useOldCabinetLogic} from \"../../constants\";\r\nimport CountertopGroup from \"../../parts/countertopGroup\";\r\n\r\nexport default class TallCabinet extends IntermediatePart {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'tall_cabinet';\r\n this.partName = 'Tall Cabinet';\r\n this.translateId = \"visualizer.kitchen.cabinet.tall_cabinet\";\r\n this.canBeDisabled = false;\r\n this.hasAdditionalParts = true;\r\n this.layerPriority = 1;\r\n this.allWallsCanBeApplied = true;\r\n if (isChild) {\r\n this.nextFeaturesPageToLoadArray = {};\r\n LayoutAbbreviations.forEach(layoutAbbreviation => {\r\n this.nextFeaturesPageToLoadArray[layoutAbbreviation] = {\r\n page: 0,\r\n allReceived: false,\r\n };\r\n });\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n const partNumber = (dbFeature.metaData[\"Part\"] && +dbFeature.metaData[\"Part\"][0]) === 1 ? 1 : 2;\r\n return super.load_(dbFeature, new TallCabinet(false, partNumber), true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n\r\n disabledClick() {\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n if (useOldCabinetLogic) {\r\n return conditions\r\n }\r\n const cabinetParent = this.getParent();\r\n const countertopParent = cabinetParent.layout.parts[CountertopGroup.id];\r\n // const applianceParent = cabinetParent.layout.parts[Appliance.id];\r\n const sinkIsVisible = countertopParent && countertopParent.sink && countertopParent.sink.activeFeature && !countertopParent.sink.disabled;\r\n if (sinkIsVisible) {\r\n conditions.push({\r\n propName: \"MountType\",\r\n propValue: countertopParent.sink.activeFeature.metaData[\"MountType\"]\r\n });\r\n }\r\n return conditions\r\n }\r\n\r\n getActiveFeatureConditions() {\r\n return this.getArrayOfConditions().filter(metaObject => {\r\n return metaObject.propName !== \"MountType\"\r\n })\r\n }\r\n\r\n getActiveFeaturePartsAccordingToActiveFeature(fromFeature = this.activeFeature, activeFeatureConditions = []) {\r\n let activeFeatureParts = [];\r\n if (fromFeature && fromFeature.partNumber) {\r\n const name1 = fromFeature.getSplittedFeatureName();\r\n // console.log(\"name1\", name1);\r\n let arrayOfConditions = activeFeatureConditions.length\r\n ? activeFeatureConditions\r\n : this.getActiveFeatureConditions(fromFeature);\r\n\r\n const cabinetParent = this.getParent();\r\n const countertopParent = cabinetParent.layout.parts[CountertopGroup.id];\r\n const applianceParent = cabinetParent.layout.parts[Appliance.id];\r\n const sink = countertopParent.sink;\r\n\r\n //part 1 will be with MountType\r\n // part 2 dishwasher - depends on dishwasher metaData Width\r\n //part 3 depends on stove metaData Width\r\n // part 4 - fridge\r\n // part 5 - peninsula\r\n\r\n const withStoveConditions = [...arrayOfConditions, {\r\n propName: \"Width\",\r\n propValue: applianceParent && applianceParent.stove && applianceParent.stove.activeFeature\r\n && applianceParent.stove.activeFeature.metaData[\"Width\"]\r\n ? applianceParent.stove.activeFeature.metaData[\"Width\"]\r\n : \"30\",\r\n }];\r\n const withDishWasherConditions = [...arrayOfConditions, {\r\n propName: \"Width\",\r\n propValue: applianceParent && applianceParent.dishwasher && applianceParent.dishwasher.activeFeature\r\n && applianceParent.dishwasher.activeFeature.metaData[\"Width\"]\r\n ? applianceParent.dishwasher.activeFeature.metaData[\"Width\"]\r\n : \"24\",\r\n }];\r\n const withFridgeConditions = [...arrayOfConditions, {\r\n propName: \"Width\",\r\n propValue: applianceParent && applianceParent.fridge && applianceParent.fridge.activeFeature\r\n && applianceParent.fridge.activeFeature.metaData[\"Width\"]\r\n ? applianceParent.fridge.activeFeature.metaData[\"Width\"]\r\n : \"36\",\r\n }];\r\n activeFeatureParts = this.featuresParts.filter((feature) => {\r\n if (useOldCabinetLogic) {\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"2\")\r\n && sink && !sink.disabled && sink.activeFeature) {\r\n return name1 === feature.getSplittedFeatureName() && feature.matchesMetaForArrayOfConditions([\r\n ...arrayOfConditions,\r\n {propName: \"MountType\", propValue: sink.activeFeature.metaData[\"MountType\"]}\r\n ])\r\n }\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"3\")\r\n && applianceParent && applianceParent.dishwasher && !applianceParent.dishwasher.disabled && applianceParent.dishwasher.activeFeature) {\r\n return false\r\n }\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"4\")\r\n && applianceParent && applianceParent.stove && !applianceParent.stove.disabled && applianceParent.stove.activeFeature) {\r\n return false\r\n }\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"6\")) { // 6 is fridge related\r\n if (!applianceParent || !applianceParent.fridge || applianceParent.fridge.disabled || !applianceParent.fridge.activeFeature) {\r\n return false\r\n }\r\n const fridgeConditions = applianceParent.fridge.getFridgeWidthAndHeightConditions();\r\n return name1 === feature.getSplittedFeatureName() && feature.matchesMetaForArrayOfConditions([...arrayOfConditions, ...fridgeConditions])\r\n }\r\n } else {\r\n if (name1 !== feature.getSplittedFeatureName()) {\r\n return false\r\n }\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"2\")) {\r\n return feature.matchesMetaForArrayOfConditions(withDishWasherConditions)\r\n }\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"3\")) {\r\n return feature.matchesMetaForArrayOfConditions(withStoveConditions)\r\n }\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"4\")) {\r\n return feature.matchesMetaForArrayOfConditions(withFridgeConditions)\r\n }\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"5\")) {\r\n if (!applianceParent || !applianceParent.oven || applianceParent.oven.disabled || !applianceParent.oven.activeFeature) {\r\n return false\r\n }\r\n }\r\n return feature.matchesMetaForArrayOfConditions(arrayOfConditions)\r\n }\r\n\r\n return name1 === feature.getSplittedFeatureName() && feature.matchesMetaForArrayOfConditions(arrayOfConditions)\r\n });\r\n\r\n // console.log(\"this.featuresParts\", this.featuresParts);\r\n // console.log(\"activeFeatureParts\", activeFeatureParts);\r\n activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n }\r\n return activeFeatureParts\r\n }\r\n\r\n\r\n}\r\n\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {PLACEMENTS} from \"../../../../kvComponent/core/constants\";\r\n\r\nexport default class Sink extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'sink';\r\n this.partName = 'Sink';\r\n this.translateId = \"visualizer.kitchen.countertop.sink\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n if (dbFeature.metaData && dbFeature.metaData[\"Placement\"] && dbFeature.metaData[\"Placement\"].includes(PLACEMENTS.Island)) {\r\n return false\r\n }\r\n return super.load_(dbFeature, new Sink());\r\n }\r\n\r\n disabledClick() {\r\n const relatedFaucet = this.getParent().faucet;\r\n if (relatedFaucet) {\r\n relatedFaucet.disabled = this.disabled;\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {METADATA, PLACEMENTS} from \"../../constants\";\r\n\r\nexport default class Faucet extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'faucet';\r\n this.partName = 'Faucet';\r\n this.translateId = \"visualizer.kitchen.countertop.faucet\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n if (dbFeature.metaData && dbFeature.metaData[\"Placement\"] && dbFeature.metaData[\"Placement\"].includes(PLACEMENTS.Island)) {\r\n return false\r\n }\r\n const mountTypeMeta = dbFeature.metaData[\"MountType\"];\r\n if (mountTypeMeta && mountTypeMeta.includes(\"U\")) {\r\n METADATA.sinkUTypes.forEach(metaValue => {\r\n if (!mountTypeMeta.includes(metaValue)){\r\n mountTypeMeta.push(metaValue)\r\n }\r\n })\r\n }\r\n return super.load_(dbFeature, new Faucet());\r\n }\r\n\r\n getCurrentSinkMetaData() {\r\n const sinkParent = this.getParent().sink;\r\n let metaObject = {};\r\n if (sinkParent && sinkParent.activeFeature) {\r\n const sinkMeta = sinkParent.activeFeature.metaData[\"MountType\"];\r\n if (sinkMeta && (sinkMeta !== \"0\") && !sinkMeta.includes(\"0\")) {\r\n metaObject[\"MountType\"] = Array.isArray(sinkMeta) ? sinkMeta[0] : sinkMeta\r\n }\r\n const mountHolesMeta = sinkParent.activeFeature.metaData[\"MountHoles\"];\r\n if (mountHolesMeta && (mountHolesMeta !== \"0\") && !mountHolesMeta.includes(\"0\")) { // if 0 - we are showing all faucets\r\n metaObject[\"MountHoles\"] = mountHolesMeta\r\n }\r\n }\r\n return metaObject\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n const currentSinkMetaData = this.getCurrentSinkMetaData();\r\n [\"MountType\", \"MountHoles\"].forEach(propName => {\r\n if (currentSinkMetaData[propName]) {\r\n conditions.push({\r\n propName,\r\n propValue: currentSinkMetaData[propName]\r\n })\r\n }\r\n })\r\n // console.log(\"conditions\", conditions);\r\n return conditions;\r\n }\r\n\r\n disabledClick() {\r\n const relatedFaucet = this.getParent().sink;\r\n if (relatedFaucet) {\r\n relatedFaucet.disabled = this.disabled;\r\n }\r\n }\r\n}\r\n","import EdgeCommon from \"../edgeCommon\";\r\n\r\nexport default class EdgeProfile extends EdgeCommon {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'edge_profile';\r\n this.partName = 'Edge Profile';\r\n this.translateId = \"visualizer.kitchen.countertop.edge_profile\";\r\n // this.isStoneFeature = true;\r\n this.customClassName = \"edge\";\r\n this.hasNoVisualizerLayers = true;\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class Cutouts extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'cutouts';\r\n this.partName = 'Cutouts';\r\n this.translateId = \"visualizer.kitchen.countertop.cutouts\";\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new Cutouts());\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class Radius extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'radius';\r\n this.partName = 'Radius';\r\n this.translateId = \"visualizer.kitchen.countertop.radius\";\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new Radius());\r\n }\r\n}\r\n","import orderBy from \"lodash/orderBy\";\r\n\r\nimport {IntermediatePart} from \"../../intermediatePart\";\r\nimport store from \"../../../../../store\";\r\nimport {getColorFilterValue} from \"../../../../../misc/filtersFunctions\";\r\nimport Appliance from \"../../parts/appliance\";\r\n\r\n\r\nexport default class CrownMolding extends IntermediatePart {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'crown_molding';\r\n this.partName = 'Crown Molding';\r\n this.canBeDisabled = true;\r\n this.layerPriority = 3;\r\n this.translateId = \"visualizer.kitchen.cabinet.crown_molding\";\r\n this.hasAdditionalParts = true;\r\n }\r\n\r\n load(dbFeature) {\r\n const partNumber = (dbFeature.metaData[\"Part\"] && dbFeature.metaData[\"Part\"][0]) === \"1\" ? 1 : 2;\r\n return super.load_(dbFeature, new CrownMolding(false, partNumber), true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n\r\n sortNavigationItems(navItems) {\r\n\r\n const cabinetParent = this.getParent();\r\n if (!cabinetParent.topCabinet || !cabinetParent.topCabinet.activeFeature) {\r\n return navItems\r\n }\r\n\r\n const filterGroups = store.getState().filterState.filterGroups;\r\n const colorFilterGroup = filterGroups.find(group => group.name === \"Color\");\r\n if (!colorFilterGroup) {\r\n return navItems\r\n }\r\n\r\n const currentTopCabinetColor = getColorFilterValue(cabinetParent.topCabinet.activeFeature, filterGroups, colorFilterGroup);\r\n if (!currentTopCabinetColor) {\r\n return navItems\r\n }\r\n\r\n navItems = orderBy(navItems, (navItem) => {\r\n const colorFilterValue = getColorFilterValue(navItem.part, filterGroups, colorFilterGroup);\r\n if (!colorFilterValue) {\r\n return false\r\n }\r\n return colorFilterValue.id === currentTopCabinetColor.id\r\n }, ['desc'])\r\n return navItems\r\n }\r\n\r\n disabledClick() {\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n const topCabinet = this.getParent().topCabinet;\r\n if (topCabinet && topCabinet.disabled && !this.disabled) {\r\n topCabinet.disabled = this.disabled;\r\n topCabinet.activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n const topHandle = this.getParent().topHandle;\r\n if (topHandle) {\r\n topHandle.disabled = this.disabled;\r\n }\r\n }\r\n }\r\n\r\n handleClick(ignoreLocked) {\r\n const parent = this.getParent();\r\n if (parent.getParent && parent.getParent()) {\r\n super.handleClick(ignoreLocked);\r\n parent.activeFeatureParts = parent.setActiveFeatureParts();\r\n } else {\r\n parent.crownMolding.activeFeature = this;\r\n }\r\n this.featureClicked();\r\n }\r\n\r\n availableFeatures(cabinetFeatures) {\r\n return cabinetFeatures.filter(cabinetFeature => cabinetFeature.partNumber === 1)\r\n }\r\n\r\n setLayers(layout) {\r\n const topCabinet = this.getParent().topCabinet;\r\n if (topCabinet && (topCabinet.disabled || !topCabinet.featureGroupEnabled)) {\r\n super.hideLayers();\r\n return\r\n }\r\n super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n let conditions = super.getArrayOfConditions();\r\n const cabinetParent = this.getParent();\r\n if (cabinetParent.topCabinet && cabinetParent.topCabinet.activeFeature\r\n && cabinetParent.topCabinet.activeFeature.metaData[\"MatchingFeature\"]) {\r\n conditions.push({\r\n propName: 'MatchingFeature',\r\n propValue: cabinetParent.topCabinet.activeFeature.metaData[\"MatchingFeature\"]\r\n })\r\n }\r\n return conditions\r\n }\r\n\r\n getActiveFeaturePartsAccordingToActiveFeature(fromFeature = this.activeFeature, activeFeatureConditions = []) {\r\n let activeFeatureParts = [];\r\n if (fromFeature && fromFeature.partNumber) {\r\n const name1 = fromFeature.getSplittedFeatureName();\r\n // console.log(\"name1\", name1);\r\n let arrayOfConditions = activeFeatureConditions.length\r\n ? activeFeatureConditions\r\n : this.getActiveFeatureConditions(fromFeature);\r\n\r\n const cabinetParent = this.getParent();\r\n const applianceParent = cabinetParent.layout.parts[Appliance.id];\r\n\r\n activeFeatureParts = this.featuresParts.filter((feature) => {\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"3\")) {\r\n if (!applianceParent || !applianceParent.oven || applianceParent.oven.disabled || !applianceParent.oven.activeFeature) {\r\n return false\r\n }\r\n return name1 === feature.getSplittedFeatureName() && feature.matchesMetaForArrayOfConditions(arrayOfConditions)\r\n }\r\n return false\r\n });\r\n\r\n // console.log(\"this.featuresParts\", this.featuresParts);\r\n // console.log(\"activeFeatureParts\", activeFeatureParts);\r\n activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n }\r\n return activeFeatureParts\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport Appliance from \"../../parts/appliance\";\r\nimport CountertopGroup from \"../../parts/countertopGroup\";\r\nimport {LayoutAbbreviations, METADATA, useOldCabinetLogic} from \"../../constants\";\r\n\r\nexport default class BottomCabinet extends IntermediatePart {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'bottom_cabinet';\r\n this.partName = 'Bottom Cabinet';\r\n this.translateId = \"visualizer.kitchen.cabinet.bottom_cabinet\";\r\n this.hasAdditionalParts = true;\r\n this.layerPriority = 4;\r\n this.allWallsCanBeApplied = true;\r\n if (isChild) {\r\n this.nextFeaturesPageToLoadArray = {};\r\n LayoutAbbreviations.forEach(layoutAbbreviation => {\r\n this.nextFeaturesPageToLoadArray[layoutAbbreviation] = {\r\n page: 0,\r\n allReceived: false,\r\n };\r\n });\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n const partNumber = (dbFeature.metaData[\"Part\"] && +dbFeature.metaData[\"Part\"][0]) === 1 ? 1 : 2;\r\n if (Array.isArray(dbFeature.metaData[\"MountType\"]) && dbFeature.metaData[\"MountType\"][0] === \"0\") {\r\n if (!dbFeature.metaData[\"MountType\"].includes(\"FM\")) {\r\n dbFeature.metaData[\"MountType\"].push(\"FM\")\r\n }\r\n if (!dbFeature.metaData[\"MountType\"].includes(\"ST\")) {\r\n dbFeature.metaData[\"MountType\"].push(\"ST\")\r\n }\r\n }\r\n if (dbFeature.metaData[\"RoomLayout\"]\r\n && (dbFeature.metaData[\"RoomLayout\"].includes(\"Layout3\") || dbFeature.metaData[\"RoomLayout\"].includes(\"3\"))) {\r\n // на этом лаяуте синки с разным маунтайпом, а у bottom есть только один парт с маунтайпом S, U\r\n // т.е. тут можно вообще игнорить маунттайп и матчить все синки с боттом кабинетами\r\n dbFeature.metaData[\"MountType\"] = METADATA.ALL\r\n }\r\n if (!dbFeature.metaData[\"Stovetop\"]) {\r\n dbFeature.metaData[\"Stovetop\"] = METADATA.NO\r\n }\r\n return super.load_(dbFeature, new BottomCabinet(false, partNumber), true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n\r\n disabledClick() {\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n const applianceParent = this.getParent().layout.parts[Appliance.id];\r\n if (applianceParent && applianceParent.stovetop) {\r\n applianceParent.stovetop.disabled = this.disabled\r\n }\r\n }\r\n\r\n handleClick(ignoreLocked, clickFrom = \"\") {\r\n const parent = this.getParent();\r\n if (parent.getParent && parent.getParent()) {\r\n super.handleClick(ignoreLocked, clickFrom);\r\n parent.activeFeatureParts = parent.setActiveFeatureParts();\r\n } else {\r\n parent.bottomCabinet.activeFeature = this;\r\n }\r\n this.featureClicked();\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n if (useOldCabinetLogic) {\r\n return conditions\r\n }\r\n const cabinetParent = this.getParent();\r\n const countertopParent = cabinetParent.layout.parts[CountertopGroup.id];\r\n // const applianceParent = cabinetParent.layout.parts[Appliance.id];\r\n conditions.push({\r\n propName: \"MountType\",\r\n propValue: countertopParent && countertopParent.sink && countertopParent.sink.activeFeature\r\n && !countertopParent.sink.disabled && countertopParent.sink.featureGroupEnabled\r\n ? countertopParent.sink.activeFeature.metaData[\"MountType\"]\r\n : [\"U\"]\r\n });\r\n return conditions\r\n }\r\n\r\n getActiveFeatureConditions() {\r\n return this.getArrayOfConditions().filter(metaObject => {\r\n return metaObject.propName !== \"MountType\"\r\n })\r\n }\r\n\r\n getActiveFeaturePartsAccordingToActiveFeature(fromFeature = this.activeFeature, activeFeatureConditions = []) {\r\n let activeFeatureParts = [];\r\n if (fromFeature && fromFeature.partNumber) {\r\n const name1 = fromFeature.getSplittedFeatureName();\r\n // console.log(\"name1\", name1);\r\n let arrayOfConditions = activeFeatureConditions.length\r\n ? activeFeatureConditions\r\n : this.getActiveFeatureConditions(fromFeature);\r\n\r\n const cabinetParent = this.getParent();\r\n const countertopParent = cabinetParent.layout.parts[CountertopGroup.id];\r\n const applianceParent = cabinetParent.layout.parts[Appliance.id];\r\n const sink = countertopParent.sink;\r\n\r\n //part 1 will be with MountType\r\n // part 2 dishwasher - depends on dishwasher metaData Width\r\n //part 3 depends on stove metaData Width // on Room Layout 6 we have Range + Stovetop, not Stove\r\n // part 4 - fridge\r\n // part 5 - peninsula\r\n\r\n let withStoveConditions = [...arrayOfConditions];\r\n const rangeIsActive = applianceParent && applianceParent.range && !applianceParent.range.disabled && applianceParent.range.activeFeature;\r\n if (applianceParent && applianceParent.layout.type === 6) {\r\n withStoveConditions.push({\r\n propName: \"Stovetop\",\r\n propValue: rangeIsActive ? METADATA.NO : \"ST\",\r\n });\r\n }\r\n withStoveConditions.push({\r\n propName: \"Width\",\r\n propValue: rangeIsActive\r\n ? applianceParent.range.activeFeature.metaData[\"Width\"] || \"30\"\r\n : applianceParent\r\n && applianceParent.stove\r\n && applianceParent.stove.activeFeature\r\n && applianceParent.stove.activeFeature.metaData[\"Width\"]\r\n ? applianceParent.stove.activeFeature.metaData[\"Width\"]\r\n : \"30\"\r\n })\r\n // console.log(\"withStoveConditions\", withStoveConditions);\r\n const withDishWasherConditions = [...arrayOfConditions, {\r\n propName: \"Width\",\r\n propValue: applianceParent && applianceParent.dishwasher && applianceParent.dishwasher.activeFeature\r\n && applianceParent.dishwasher.activeFeature.metaData[\"Width\"]\r\n ? applianceParent.dishwasher.activeFeature.metaData[\"Width\"]\r\n : \"24\",\r\n }];\r\n const withFridgeConditions = [...arrayOfConditions, {\r\n propName: \"Width\",\r\n propValue: applianceParent && applianceParent.fridge && applianceParent.fridge.activeFeature\r\n && applianceParent.fridge.activeFeature.metaData[\"Width\"]\r\n ? applianceParent.fridge.activeFeature.metaData[\"Width\"]\r\n : \"36\",\r\n }];\r\n activeFeatureParts = this.featuresParts.filter((feature) => {\r\n if (useOldCabinetLogic) {\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"2\")\r\n && sink && !sink.disabled && sink.activeFeature) {\r\n return name1 === feature.getSplittedFeatureName() && feature.matchesMetaForArrayOfConditions([\r\n ...arrayOfConditions,\r\n {propName: \"MountType\", propValue: sink.activeFeature.metaData[\"MountType\"]}\r\n ])\r\n }\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"3\")\r\n && applianceParent && applianceParent.dishwasher && !applianceParent.dishwasher.disabled && applianceParent.dishwasher.activeFeature) {\r\n return false\r\n }\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"4\")\r\n && applianceParent && applianceParent.stove && !applianceParent.stove.disabled && applianceParent.stove.activeFeature) {\r\n return false\r\n }\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"6\")) { // 6 is fridge related\r\n if (!applianceParent || !applianceParent.fridge || applianceParent.fridge.disabled || !applianceParent.fridge.activeFeature) {\r\n return false\r\n }\r\n const fridgeConditions = applianceParent.fridge.getFridgeWidthAndHeightConditions();\r\n return name1 === feature.getSplittedFeatureName() && feature.matchesMetaForArrayOfConditions([...arrayOfConditions, ...fridgeConditions])\r\n }\r\n } else {\r\n if (name1 !== feature.getSplittedFeatureName()) {\r\n return false\r\n }\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"2\")) {\r\n return feature.matchesMetaForArrayOfConditions(withDishWasherConditions)\r\n }\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"3\")) {\r\n return feature.matchesMetaForArrayOfConditions(withStoveConditions)\r\n }\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"4\")) {\r\n return feature.matchesMetaForArrayOfConditions(withFridgeConditions)\r\n }\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"5\")) {\r\n if (!applianceParent || !applianceParent.oven || applianceParent.oven.disabled || !applianceParent.oven.activeFeature) {\r\n return false\r\n }\r\n }\r\n return feature.matchesMetaForArrayOfConditions(arrayOfConditions)\r\n }\r\n\r\n return name1 === feature.getSplittedFeatureName() && feature.matchesMetaForArrayOfConditions(arrayOfConditions)\r\n });\r\n\r\n // console.log(\"this.featuresParts\", this.featuresParts);\r\n // console.log(\"activeFeatureParts\", activeFeatureParts);\r\n activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n }\r\n return activeFeatureParts\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport Appliance from \"../../parts/appliance\";\r\nimport CountertopGroup from \"../../parts/countertopGroup\";\r\nimport {METADATA} from \"../../constants\";\r\n\r\nexport default class BottomHandle extends IntermediatePart {\r\n\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'bottom_handle';\r\n this.partName = 'Bottom Handle';\r\n this.translateId = \"visualizer.kitchen.cabinet.bottom_handle\";\r\n this.canBeDisabled = true;\r\n this.layerPriority = 5;\r\n this.hasAdditionalParts = true;\r\n }\r\n\r\n load(dbFeature) {\r\n if (Array.isArray(dbFeature.metaData[\"MountType\"]) && dbFeature.metaData[\"MountType\"][0] === \"0\") {\r\n if (!dbFeature.metaData[\"MountType\"].includes(\"FM\")) {\r\n dbFeature.metaData[\"MountType\"].push(\"FM\")\r\n }\r\n if (!dbFeature.metaData[\"MountType\"].includes(\"ST\")) {\r\n dbFeature.metaData[\"MountType\"].push(\"ST\")\r\n }\r\n }\r\n if (dbFeature.metaData[\"RoomLayout\"]\r\n && (dbFeature.metaData[\"RoomLayout\"].includes(\"Layout3\") || dbFeature.metaData[\"RoomLayout\"].includes(\"3\"))) {\r\n // if (!dbFeature.metaData[\"MountType\"].includes(\"U\")) {\r\n // dbFeature.metaData[\"MountType\"].push(\"U\")\r\n // }\r\n // if (!dbFeature.metaData[\"MountType\"].includes(\"S\")) {\r\n // dbFeature.metaData[\"MountType\"].push(\"S\")\r\n // }\r\n dbFeature.metaData[\"MountType\"] = METADATA.ALL\r\n }\r\n if (!dbFeature.metaData[\"Stovetop\"]) {\r\n dbFeature.metaData[\"Stovetop\"] = METADATA.NO\r\n }\r\n const partNumber = (dbFeature.metaData[\"Part\"] && dbFeature.metaData[\"Part\"][0]) === \"1\" ? 1 : 2;\r\n return super.load_(dbFeature, new BottomHandle(false, partNumber), true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n\r\n handleClick(ignoreLocked, clickFrom = \"\") {\r\n const parent = this.getParent();\r\n if (parent.getParent && parent.getParent()) {\r\n super.handleClick(ignoreLocked, clickFrom);\r\n parent.activeFeatureParts = parent.setActiveFeatureParts();\r\n } else {\r\n parent.bottomHandle.activeFeature = this;\r\n }\r\n this.featureClicked();\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n const cabinetParent = this.getParent();\r\n const countertopParent = cabinetParent.layout.parts[CountertopGroup.id];\r\n // const applianceParent = cabinetParent.layout.parts[Appliance.id];\r\n conditions.push({\r\n propName: \"MountType\",\r\n propValue: countertopParent && countertopParent.sink && countertopParent.sink.activeFeature\r\n && !countertopParent.sink.disabled && countertopParent.sink.featureGroupEnabled\r\n ? countertopParent.sink.activeFeature.metaData[\"MountType\"]\r\n : [\"U\"]\r\n });\r\n return conditions\r\n }\r\n\r\n getActiveFeatureConditions() {\r\n return this.getArrayOfConditions().filter(metaObject => {\r\n return metaObject.propName !== \"MountType\"\r\n })\r\n }\r\n\r\n getActiveFeaturePartsAccordingToActiveFeature(fromFeature = this.activeFeature, activeFeatureConditions = []) {\r\n let activeFeatureParts = [];\r\n if (fromFeature && fromFeature.partNumber) {\r\n const name1 = fromFeature.getSplittedFeatureName();\r\n // console.log(\"name1\", name1);\r\n let arrayOfConditions = activeFeatureConditions.length\r\n ? activeFeatureConditions\r\n : this.getActiveFeatureConditions(fromFeature);\r\n\r\n const cabinetParent = this.getParent();\r\n const applianceParent = cabinetParent.layout.parts[Appliance.id];\r\n\r\n //part 1 will be with MountType\r\n // part 2 dishwasher - depends on dishwasher metaData Width\r\n //part 3 depends on stove metaData Width // on Room Layout 6 we have Range + Stovetop, not Stove\r\n // part 4 - fridge\r\n // part 5 - peninsula\r\n\r\n let withStoveConditions = [...arrayOfConditions];\r\n const rangeIsActive = applianceParent && applianceParent.range && !applianceParent.range.disabled && applianceParent.range.activeFeature;\r\n if (applianceParent && applianceParent.layout.type === 6) {\r\n withStoveConditions.push({\r\n propName: \"Stovetop\",\r\n propValue: rangeIsActive ? METADATA.NO : \"ST\",\r\n });\r\n }\r\n withStoveConditions.push({\r\n propName: \"Width\",\r\n propValue: rangeIsActive\r\n ? applianceParent.range.activeFeature.metaData[\"Width\"] || \"30\"\r\n : applianceParent\r\n && applianceParent.stove\r\n && applianceParent.stove.activeFeature\r\n && applianceParent.stove.activeFeature.metaData[\"Width\"]\r\n ? applianceParent.stove.activeFeature.metaData[\"Width\"]\r\n : \"30\"\r\n })\r\n const withDishWasherConditions = [...arrayOfConditions, {\r\n propName: \"Width\",\r\n propValue: applianceParent && applianceParent.dishwasher && applianceParent.dishwasher.activeFeature\r\n && applianceParent.dishwasher.activeFeature.metaData[\"Width\"]\r\n ? applianceParent.dishwasher.activeFeature.metaData[\"Width\"]\r\n : \"24\",\r\n }];\r\n const withFridgeConditions = [...arrayOfConditions, {\r\n propName: \"Width\",\r\n propValue: applianceParent && applianceParent.fridge && applianceParent.fridge.activeFeature\r\n && applianceParent.fridge.activeFeature.metaData[\"Width\"]\r\n ? applianceParent.fridge.activeFeature.metaData[\"Width\"]\r\n : \"36\",\r\n }];\r\n activeFeatureParts = this.featuresParts.filter((feature) => {\r\n if (name1 !== feature.getSplittedFeatureName()) {\r\n return false\r\n }\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"2\")) {\r\n return feature.matchesMetaForArrayOfConditions(withDishWasherConditions)\r\n }\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"3\")) {\r\n return feature.matchesMetaForArrayOfConditions(withStoveConditions)\r\n }\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"4\")) {\r\n return feature.matchesMetaForArrayOfConditions(withFridgeConditions)\r\n }\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"5\")) {\r\n if (!applianceParent || !applianceParent.oven || applianceParent.oven.disabled || !applianceParent.oven.activeFeature) {\r\n return false\r\n }\r\n }\r\n return feature.matchesMetaForArrayOfConditions(arrayOfConditions)\r\n });\r\n\r\n // console.log(\"this.featuresParts\", this.featuresParts);\r\n // console.log(\"activeFeatureParts\", activeFeatureParts);\r\n activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n }\r\n return activeFeatureParts\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport Appliance from \"../../parts/appliance\";\r\n\r\nexport default class TopHandle extends IntermediatePart {\r\n\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'top_handle';\r\n this.partName = 'Top Handle';\r\n this.canBeDisabled = true;\r\n this.layerPriority = 2;\r\n this.translateId = \"visualizer.kitchen.cabinet.top_handle\";\r\n this.hasAdditionalParts = true;\r\n }\r\n\r\n load(dbFeature) {\r\n const partNumber = (dbFeature.metaData[\"Part\"] && dbFeature.metaData[\"Part\"][0]) === \"1\" ? 1 : 2;\r\n return super.load_(dbFeature, new TopHandle(false, partNumber), true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n const cabinetParent = this.getParent();\r\n const applianceParent = cabinetParent.layout.parts[Appliance.id];\r\n const hoodIsVisible = applianceParent && applianceParent.hood && applianceParent.hood.activeFeature && !applianceParent.hood.disabled;\r\n const microwaveIsVisible = applianceParent && applianceParent.microwave && applianceParent.microwave.activeFeature && !applianceParent.microwave.disabled;\r\n conditions.push({\r\n propName: \"Hood\",\r\n propValue: hoodIsVisible || ((cabinetParent.layout.type === 6) && microwaveIsVisible) ? \"H\" : \"C\"\r\n });\r\n if (hoodIsVisible && applianceParent.hood.activeFeature.metaData[\"Width\"]) {\r\n conditions.push({\r\n propName: \"Width\",\r\n propValue: applianceParent.hood.activeFeature.metaData[\"Width\"]\r\n });\r\n }\r\n return conditions\r\n }\r\n\r\n getActiveFeatureConditions() {\r\n return this.getArrayOfConditions().filter(metaObject => {\r\n return metaObject.propName !== \"Hood\" && metaObject.propName !== \"Width\"\r\n })\r\n }\r\n\r\n getActiveFeaturePartsAccordingToActiveFeature(fromFeature = this.activeFeature, activeFeatureConditions = []) {\r\n let activeFeatureParts = [];\r\n if (fromFeature && fromFeature.partNumber) {\r\n const name1 = fromFeature.getSplittedFeatureName();\r\n // console.log(\"name1\", name1);\r\n let arrayOfConditions = activeFeatureConditions.length\r\n ? activeFeatureConditions\r\n : this.getActiveFeatureConditions(fromFeature);\r\n\r\n const cabinetParent = this.getParent();\r\n const applianceParent = cabinetParent.layout.parts[Appliance.id];\r\n\r\n // part1 - depends on hood - H hood enabled, С - disabled\r\n // part1 - depends on hood \"Width\"\r\n // part2 - depends on Fridge\r\n activeFeatureParts = this.featuresParts.filter((feature) => {\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"2\")) {\r\n const fridgeIsVisible = applianceParent && applianceParent.fridge && !applianceParent.fridge.disabled\r\n && applianceParent.fridge.activeFeature;\r\n const fridgeConditions = applianceParent && applianceParent.fridge\r\n ? applianceParent.fridge.getFridgeWidthAndHeightConditions()\r\n : [];\r\n return name1 === feature.getSplittedFeatureName() && feature.matchesMetaForArrayOfConditions([\r\n ...arrayOfConditions, {\r\n propName: \"Fridge\",\r\n propValue: fridgeIsVisible ? \"F\" : \"C\"\r\n }, ...fridgeConditions\r\n ])\r\n } else if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"3\")) {\r\n if (!applianceParent || !applianceParent.oven || applianceParent.oven.disabled || !applianceParent.oven.activeFeature) {\r\n return false\r\n }\r\n return name1 === feature.getSplittedFeatureName() && feature.matchesMetaForArrayOfConditions(arrayOfConditions)\r\n }\r\n return false\r\n });\r\n\r\n // console.log(\"this.featuresParts\", this.featuresParts);\r\n // console.log(\"activeFeatureParts\", activeFeatureParts);\r\n activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n }\r\n return activeFeatureParts\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport Appliance from \"../../parts/appliance\";\r\nimport {METADATA} from \"../../constants\";\r\nimport Countertop from \"../countertop/countertop\";\r\n\r\nexport default class DoorHandle extends IntermediatePart {\r\n\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'door_handle';\r\n this.partName = 'Door Handle';\r\n this.canBeDisabled = true;\r\n this.layerPriority = 2;\r\n this.translateId = \"visualizer.kitchen.cabinet.door_handle\";\r\n this.hasAdditionalParts = true;\r\n // Door Handle and Drawer Handle are the same as Top Handle and Bottom Handle\r\n // Top Handle, part 1, size 30, H --> Door Handle, part 1, size 30, H\r\n // Top Handle, part 1, size 30, C --> Door Handle, part 1, size 30, C\r\n // Top Handle, part 2, size 36 --> Door Handle, part 2, size 36\r\n // Top Handle, part 3, size 30 --> Door Handle, part 3, size 30\r\n // 9:42\r\n // Bottom Handle, part 1, size 0, S U --> Drawer Handle, part 1, size 0, S U /// Placement Bottom\r\n // --> Door Handle, part 1, size 0, S U /// Placement Bottom\r\n // 2. Bottom Handle, part 3, size 30 --> Drawer Handle, part 3, size 30 /// Placement Bottom\r\n // --> Door Handle, part 3, size 30 /// Placement Bottom\r\n // 3. Bottom Handle, part 3, size 30, ST --> Drawer Handle, part 3, size 30, ST /// Placement Bottom\r\n // --> Door Handle, part 3, size 30, ST /// Placement Bottom\r\n // 4. Bottom Handle, part 4, size 36 --> Drawer Handle, part 4, size 36 /// Placement Bottom\r\n // --> Door Handle, part 4, size 36 /// Placement Bottom\r\n // 5. Bottom Handle, part 5, size 30, O --> Drawer Handle, part 5, size 30, O (edited) /// Placement Bottom\r\n }\r\n\r\n load(dbFeature) {\r\n if (((dbFeature.metaData[\"Part\"] && dbFeature.metaData[\"Part\"][0]) === \"1\") && dbFeature.metaData[\"Placement\"]\r\n && dbFeature.metaData[\"Placement\"].includes(\"Bottom\")) {\r\n dbFeature.metaData[\"Part\"] = [\"6\"];\r\n // console.log(\"dbFeaturedbF6\", dbFeature);\r\n } else if (((dbFeature.metaData[\"Part\"] && dbFeature.metaData[\"Part\"][0]) === \"3\") && dbFeature.metaData[\"Placement\"]\r\n && dbFeature.metaData[\"Placement\"].includes(\"Bottom\")) {\r\n dbFeature.metaData[\"Part\"] = [\"7\"];\r\n // console.log(\"dbFeaturedbFeature7\", dbFeature);\r\n }\r\n if (Array.isArray(dbFeature.metaData[\"MountType\"]) && dbFeature.metaData[\"MountType\"][0] === \"0\") {\r\n if (!dbFeature.metaData[\"MountType\"].includes(\"FM\")) {\r\n dbFeature.metaData[\"MountType\"].push(\"FM\")\r\n }\r\n if (!dbFeature.metaData[\"MountType\"].includes(\"ST\")) {\r\n dbFeature.metaData[\"MountType\"].push(\"ST\")\r\n }\r\n }\r\n if (dbFeature.metaData[\"RoomLayout\"]\r\n && (dbFeature.metaData[\"RoomLayout\"].includes(\"Layout3\") || dbFeature.metaData[\"RoomLayout\"].includes(\"3\"))) {\r\n dbFeature.metaData[\"MountType\"] = METADATA.ALL\r\n }\r\n if (dbFeature.metaData[\"RoomLayout\"]\r\n && (dbFeature.metaData[\"RoomLayout\"].includes(\"Layout6\") || dbFeature.metaData[\"RoomLayout\"].includes(\"6\"))) {\r\n if (!dbFeature.metaData[\"Stovetop\"]) {\r\n dbFeature.metaData[\"Stovetop\"] = METADATA.NO\r\n }\r\n }\r\n const partNumber = (dbFeature.metaData[\"Part\"] && dbFeature.metaData[\"Part\"][0]) === \"1\" ? 1 : 2;\r\n return super.load_(dbFeature, new DoorHandle(false, partNumber), true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n const cabinetParent = this.getParent();\r\n const applianceParent = cabinetParent.layout.parts[Appliance.id];\r\n const hoodIsVisible = applianceParent && applianceParent.hood && applianceParent.hood.activeFeature && !applianceParent.hood.disabled;\r\n const microwaveIsVisible = applianceParent && applianceParent.microwave && applianceParent.microwave.activeFeature && !applianceParent.microwave.disabled;\r\n conditions.push({\r\n propName: \"Hood\",\r\n propValue: hoodIsVisible || ((cabinetParent.layout.type === 6) && microwaveIsVisible) ? \"H\" : \"C\"\r\n });\r\n if (hoodIsVisible && applianceParent.hood.activeFeature.metaData[\"Width\"]) {\r\n conditions.push({\r\n propName: \"Width\",\r\n propValue: applianceParent.hood.activeFeature.metaData[\"Width\"]\r\n });\r\n }\r\n return conditions\r\n }\r\n\r\n getActiveFeatureConditions() {\r\n return this.getArrayOfConditions().filter(metaObject => {\r\n return metaObject.propName !== \"Hood\" && metaObject.propName !== \"Width\"\r\n })\r\n }\r\n\r\n getActiveFeaturePartsAccordingToActiveFeature(fromFeature = this.activeFeature, activeFeatureConditions = []) {\r\n let activeFeatureParts = [];\r\n if (fromFeature && fromFeature.partNumber) {\r\n const name1 = fromFeature.getSplittedFeatureName();\r\n // console.log(\"name1\", name1);\r\n let arrayOfConditions = activeFeatureConditions.length\r\n ? activeFeatureConditions\r\n : this.getActiveFeatureConditions(fromFeature);\r\n\r\n const cabinetParent = this.getParent();\r\n const applianceParent = cabinetParent.layout.parts[Appliance.id];\r\n const countertopParent = cabinetParent.layout.parts[Countertop.id];\r\n\r\n //part 1 will be with MountType\r\n // part 2 dishwasher - depends on dishwasher metaData Width\r\n //part 3 depends on stove metaData Width // on Room Layout 6 we have Range + Stovetop, not Stove\r\n // part 4 - fridge\r\n // part 5 - peninsula\r\n\r\n let withStoveConditions = [...arrayOfConditions];\r\n if (applianceParent && applianceParent.layout.type === 6) {\r\n const rangeIsActive = applianceParent && applianceParent.range && !applianceParent.range.disabled && applianceParent.range.activeFeature;\r\n withStoveConditions.push({\r\n propName: \"Stovetop\",\r\n propValue: rangeIsActive ? METADATA.NO : \"ST\",\r\n });\r\n if (rangeIsActive && applianceParent.range.activeFeature.metaData[\"Width\"]) {\r\n withStoveConditions.push({\r\n propName: \"Width\",\r\n propValue: applianceParent.range.activeFeature.metaData[\"Width\"],\r\n })\r\n }\r\n } else {\r\n withStoveConditions.push({\r\n propName: \"Width\",\r\n propValue: applianceParent && applianceParent.stove && applianceParent.stove.activeFeature\r\n && applianceParent.stove.activeFeature.metaData[\"Width\"]\r\n ? applianceParent.stove.activeFeature.metaData[\"Width\"]\r\n : \"30\",\r\n })\r\n }\r\n const withFridgeConditions = [...arrayOfConditions, {\r\n propName: \"Width\",\r\n propValue: applianceParent && applianceParent.fridge && applianceParent.fridge.activeFeature\r\n && applianceParent.fridge.activeFeature.metaData[\"Width\"]\r\n ? applianceParent.fridge.activeFeature.metaData[\"Width\"]\r\n : \"36\",\r\n }];\r\n activeFeatureParts = this.featuresParts.filter((feature) => {\r\n if (name1 !== feature.getSplittedFeatureName()) {\r\n return false\r\n }\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"2\")) {\r\n const fridgeIsVisible = applianceParent && applianceParent.fridge && !applianceParent.fridge.disabled\r\n && applianceParent.fridge.activeFeature;\r\n const fridgeConditions = applianceParent && applianceParent.fridge\r\n ? applianceParent.fridge.getFridgeWidthAndHeightConditions()\r\n : [];\r\n return feature.matchesMetaForArrayOfConditions([\r\n ...arrayOfConditions, {\r\n propName: \"Fridge\",\r\n propValue: fridgeIsVisible ? \"F\" : \"C\"\r\n }, ...fridgeConditions\r\n ])\r\n } else if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"3\")) {\r\n if (!applianceParent || !applianceParent.oven || applianceParent.oven.disabled || !applianceParent.oven.activeFeature) {\r\n return false\r\n }\r\n return feature.matchesMetaForArrayOfConditions(arrayOfConditions)\r\n }\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"4\")) {\r\n return feature.matchesMetaForArrayOfConditions(withFridgeConditions)\r\n }\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"5\")) {\r\n if (!applianceParent || !applianceParent.oven || applianceParent.oven.disabled || !applianceParent.oven.activeFeature) {\r\n return false\r\n }\r\n }\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"6\")) {\r\n if (countertopParent && countertopParent.sink && countertopParent.sink.activeFeature && !countertopParent.sink.disabled) {\r\n return feature.matchesMetaForArrayOfConditions([\r\n ...arrayOfConditions, {\r\n propName: \"MountType\",\r\n propValue: countertopParent.sink.activeFeature.metaData[\"MountType\"]\r\n }])\r\n }\r\n }\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"7\")) {\r\n return feature.matchesMetaForArrayOfConditions(withStoveConditions)\r\n }\r\n return feature.matchesMetaForArrayOfConditions(arrayOfConditions)\r\n });\r\n\r\n // console.log(\"this.featuresParts\", this.featuresParts);\r\n // console.log(\"activeFeatureParts\", activeFeatureParts);\r\n activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n }\r\n return activeFeatureParts\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport Appliance from \"../../parts/appliance\";\r\nimport CountertopGroup from \"../../parts/countertopGroup\";\r\nimport {METADATA} from \"../../constants\";\r\n\r\nexport default class DrawerHandle extends IntermediatePart {\r\n\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'drawer_handle';\r\n this.partName = 'Drawer Handle';\r\n this.translateId = \"visualizer.kitchen.cabinet.drawer_handle\";\r\n this.canBeDisabled = true;\r\n this.layerPriority = 5;\r\n this.hasAdditionalParts = true;\r\n }\r\n\r\n load(dbFeature) {\r\n if (Array.isArray(dbFeature.metaData[\"MountType\"]) && dbFeature.metaData[\"MountType\"][0] === \"0\") {\r\n if (!dbFeature.metaData[\"MountType\"].includes(\"FM\")) {\r\n dbFeature.metaData[\"MountType\"].push(\"FM\")\r\n }\r\n if (!dbFeature.metaData[\"MountType\"].includes(\"ST\")) {\r\n dbFeature.metaData[\"MountType\"].push(\"ST\")\r\n }\r\n }\r\n if (dbFeature.metaData[\"RoomLayout\"]\r\n && (dbFeature.metaData[\"RoomLayout\"].includes(\"Layout3\") || dbFeature.metaData[\"RoomLayout\"].includes(\"3\"))) {\r\n // if (!dbFeature.metaData[\"MountType\"].includes(\"U\")) {\r\n // dbFeature.metaData[\"MountType\"].push(\"U\")\r\n // }\r\n // if (!dbFeature.metaData[\"MountType\"].includes(\"S\")) {\r\n // dbFeature.metaData[\"MountType\"].push(\"S\")\r\n // }\r\n dbFeature.metaData[\"MountType\"] = METADATA.ALL\r\n }\r\n if (dbFeature.metaData[\"RoomLayout\"]\r\n && (dbFeature.metaData[\"RoomLayout\"].includes(\"Layout6\") || dbFeature.metaData[\"RoomLayout\"].includes(\"6\"))) {\r\n if (!dbFeature.metaData[\"Stovetop\"]) {\r\n dbFeature.metaData[\"Stovetop\"] = METADATA.NO\r\n }\r\n }\r\n const partNumber = (dbFeature.metaData[\"Part\"] && dbFeature.metaData[\"Part\"][0]) === \"1\" ? 1 : 2;\r\n return super.load_(dbFeature, new DrawerHandle(false, partNumber), true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n\r\n handleClick(ignoreLocked, clickFrom = \"\") {\r\n const parent = this.getParent();\r\n if (parent.getParent && parent.getParent()) {\r\n super.handleClick(ignoreLocked, clickFrom);\r\n parent.activeFeatureParts = parent.setActiveFeatureParts();\r\n } else {\r\n parent.bottomHandle.activeFeature = this;\r\n }\r\n this.featureClicked();\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n const cabinetParent = this.getParent();\r\n const countertopParent = cabinetParent.layout.parts[CountertopGroup.id];\r\n // const applianceParent = cabinetParent.layout.parts[Appliance.id];\r\n const sinkIsVisible = countertopParent && countertopParent.sink && countertopParent.sink.activeFeature && !countertopParent.sink.disabled;\r\n if (sinkIsVisible) {\r\n conditions.push({\r\n propName: \"MountType\",\r\n propValue: countertopParent.sink.activeFeature.metaData[\"MountType\"]\r\n });\r\n }\r\n return conditions\r\n }\r\n\r\n getActiveFeatureConditions() {\r\n return this.getArrayOfConditions().filter(metaObject => {\r\n return metaObject.propName !== \"MountType\"\r\n })\r\n }\r\n\r\n getActiveFeaturePartsAccordingToActiveFeature(fromFeature = this.activeFeature, activeFeatureConditions = []) {\r\n let activeFeatureParts = [];\r\n if (fromFeature && fromFeature.partNumber) {\r\n const name1 = fromFeature.getSplittedFeatureName();\r\n // console.log(\"name1\", name1);\r\n let arrayOfConditions = activeFeatureConditions.length\r\n ? activeFeatureConditions\r\n : this.getActiveFeatureConditions(fromFeature);\r\n\r\n const cabinetParent = this.getParent();\r\n const applianceParent = cabinetParent.layout.parts[Appliance.id];\r\n\r\n //part 1 will be with MountType\r\n // part 2 dishwasher - depends on dishwasher metaData Width\r\n //part 3 depends on stove metaData Width // on Room Layout 6 we have Range + Stovetop, not Stove\r\n // part 4 - fridge\r\n // part 5 - peninsula\r\n\r\n let withStoveConditions = [...arrayOfConditions];\r\n if (applianceParent && applianceParent.layout.type === 6) {\r\n const rangeIsActive = applianceParent && applianceParent.range && !applianceParent.range.disabled && applianceParent.range.activeFeature;\r\n withStoveConditions.push({\r\n propName: \"Stovetop\",\r\n propValue: rangeIsActive ? METADATA.NO : \"ST\",\r\n });\r\n if (rangeIsActive && applianceParent.range.activeFeature.metaData[\"Width\"]) {\r\n withStoveConditions.push({\r\n propName: \"Width\",\r\n propValue: applianceParent.range.activeFeature.metaData[\"Width\"],\r\n })\r\n }\r\n } else {\r\n withStoveConditions.push({\r\n propName: \"Width\",\r\n propValue: applianceParent && applianceParent.stove && applianceParent.stove.activeFeature\r\n && applianceParent.stove.activeFeature.metaData[\"Width\"]\r\n ? applianceParent.stove.activeFeature.metaData[\"Width\"]\r\n : \"30\",\r\n })\r\n }\r\n const withDishWasherConditions = [...arrayOfConditions, {\r\n propName: \"Width\",\r\n propValue: applianceParent && applianceParent.dishwasher && applianceParent.dishwasher.activeFeature\r\n && applianceParent.dishwasher.activeFeature.metaData[\"Width\"]\r\n ? applianceParent.dishwasher.activeFeature.metaData[\"Width\"]\r\n : \"24\",\r\n }];\r\n const withFridgeConditions = [...arrayOfConditions, {\r\n propName: \"Width\",\r\n propValue: applianceParent && applianceParent.fridge && applianceParent.fridge.activeFeature\r\n && applianceParent.fridge.activeFeature.metaData[\"Width\"]\r\n ? applianceParent.fridge.activeFeature.metaData[\"Width\"]\r\n : \"36\",\r\n }];\r\n activeFeatureParts = this.featuresParts.filter((feature) => {\r\n if (name1 !== feature.getSplittedFeatureName()) {\r\n return false\r\n }\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"2\")) {\r\n return feature.matchesMetaForArrayOfConditions(withDishWasherConditions)\r\n }\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"3\")) {\r\n return feature.matchesMetaForArrayOfConditions(withStoveConditions)\r\n }\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"4\")) {\r\n return feature.matchesMetaForArrayOfConditions(withFridgeConditions)\r\n }\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"5\")) {\r\n if (!applianceParent || !applianceParent.oven || applianceParent.oven.disabled || !applianceParent.oven.activeFeature) {\r\n return false\r\n }\r\n }\r\n return feature.matchesMetaForArrayOfConditions(arrayOfConditions)\r\n });\r\n\r\n // console.log(\"this.featuresParts\", this.featuresParts);\r\n // console.log(\"activeFeatureParts\", activeFeatureParts);\r\n activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n }\r\n return activeFeatureParts\r\n }\r\n}\r\n","import React, {Fragment} from \"react\";\r\nimport {View, Text, Image} from \"@react-pdf/renderer\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport {wizardGroupInterface} from \"../../../interfaces/wizardItemInterface\";\r\nimport {getCartItemName} from \"./printDocumentFunctions\";\r\n\r\nconst PrintDocumentBodyWizardItem = (props) => {\r\n\r\n const {styles, wizardGroup, selectedFeature, fabricatorData, printContext, locale, cartItemsThumbnails} = props;\r\n\r\n const baseInfo = (\r\n \r\n \r\n {selectedFeature\r\n ? getCartItemName(selectedFeature, fabricatorData, printContext, locale)\r\n : wizardGroup.productCartTitle || wizardGroup.title || wizardGroup.groupName}\r\n \r\n \r\n \r\n {wizardGroup.productCartDescription || \"\"}\r\n \r\n \r\n \r\n )\r\n\r\n const withThumbnail = fabricatorData.receiptSettings && fabricatorData.receiptSettings.showThumbnailsAndDescriptions\r\n && cartItemsThumbnails\r\n && cartItemsThumbnails[wizardGroup.id];\r\n\r\n return (\r\n \r\n \r\n {wizardGroup.title || wizardGroup.groupName}\r\n \r\n \r\n {withThumbnail ? (\r\n \r\n \r\n \r\n \r\n \r\n {baseInfo}\r\n \r\n \r\n ) : baseInfo}\r\n \r\n \r\n )\r\n};\r\n\r\nPrintDocumentBodyWizardItem.propTypes = {\r\n wizardGroup: PropTypes.shape(wizardGroupInterface),\r\n // locale: PropTypes.string.isRequired,\r\n styles: PropTypes.object.isRequired,\r\n};\r\n\r\nexport default PrintDocumentBodyWizardItem\r\n","import React, {useContext} from \"react\";\r\nimport {View, Text} from '@react-pdf/renderer';\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport {\r\n getCurrencySign,\r\n getPriceWithCurrency,\r\n getQuotePriceWithTaxes,\r\n getTotalPrice, sortByOrder,\r\n toFixedPrice\r\n} from \"../../../misc/helpers\";\r\nimport {DISCOUNT_TYPES} from \"../../priceWorksheet/discounstInterface\";\r\nimport {\r\n getDepositAmount, getDepositDiscount,\r\n getDiscountsForSection,\r\n getSubTotalPrice,\r\n shouldCalculateDiscount\r\n} from \"../../priceWorksheet/discountFunctions\";\r\nimport {PrintDocumentContext} from \"./printDocumentContext\";\r\nimport PrintDocumentDisclaimer from \"./printDocumentDisclaimer\";\r\nimport {getShowPrice} from \"../../../misc/priceFunctions\";\r\nimport {getDifferentCurrencyCartItems} from \"../../../misc/misc2\";\r\nimport {isCafeCountetops} from \"../../../misc/fabricatorHardcode\";\r\n\r\nconst PrintDocumentTotal = (props) => {\r\n const {styles, priceWorksheetState, fabricatorData, locale, cartItems} = props;\r\n const {discountSections, customAddedDiscounts} = priceWorksheetState;\r\n const fabricatorSettings = fabricatorData.settings;\r\n const printContext = useContext(PrintDocumentContext);\r\n\r\n if (fabricatorData.isAmericanImport) {\r\n return null\r\n }\r\n\r\n let subTotalPrice = getTotalPrice(null, false).materialPrice;\r\n const totalPrice = getTotalPrice();\r\n let grandTotal = getQuotePriceWithTaxes(totalPrice);\r\n\r\n let allTaxes = totalPrice.priceTaxes.length\r\n ? totalPrice.priceTaxes\r\n : [{name: \"\", materialTax: totalPrice.materialTaxes}];\r\n const showTaxes = allTaxes.some(tax => tax.materialTax > 0);\r\n\r\n const roundedPrice = (price) => toFixedPrice(Math.trunc(price * 100) / 100);\r\n\r\n const getDiscountPercentageAmount = (discountSections, discountSection, discount) => {\r\n const currentTotal = getSubTotalPrice(discountSections, discountSection, discount, true, customAddedDiscounts);\r\n const priceTaken = currentTotal * discount.amount / 100 // for ex. 25% from 2700 = 625\r\n return roundedPrice(priceTaken);\r\n };\r\n\r\n let discountsTotalAmount = 0;\r\n if (discountSections.length) {\r\n discountSections.forEach(discountSection => {\r\n const allDiscounts = sortByOrder(getDiscountsForSection(discountSection, customAddedDiscounts));\r\n allDiscounts.forEach(discount => {\r\n if (shouldCalculateDiscount(discount)) {\r\n const discountAmount = (discount.type === DISCOUNT_TYPES.price)\r\n ? discount.amount\r\n : getDiscountPercentageAmount(discountSections, discountSection, discount);\r\n discountsTotalAmount = discountsTotalAmount + (+discountAmount);\r\n }\r\n })\r\n })\r\n }\r\n\r\n const showPrice = getShowPrice(fabricatorData, true);\r\n\r\n if (!showPrice) {\r\n return (\r\n \r\n \r\n \r\n )\r\n }\r\n\r\n const differentCurrencyObjects = getDifferentCurrencyCartItems(fabricatorSettings, cartItems);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n {differentCurrencyObjects.length ? differentCurrencyObjects.map((currObject, currObjectIndex) => {\r\n let currencySubTotal = getTotalPrice(null, false, currObject.cartItems).materialPrice;\r\n currencySubTotal = toFixedPrice(currencySubTotal, true);\r\n return (\r\n \r\n {printContext.messages[\"receipt.total.subTotal\"]}:\r\n \r\n {getCurrencySign(currObject.currency, fabricatorSettings) + currencySubTotal}\r\n \r\n \r\n )\r\n }) : null}\r\n \r\n {printContext.messages[\"receipt.total.subTotal\"]}:\r\n {getPriceWithCurrency(fabricatorSettings, subTotalPrice, null, false, true)}\r\n \r\n {discountsTotalAmount ? (\r\n \r\n {printContext.messages[\"receipt.total.discounts\"]}:\r\n -{getPriceWithCurrency(fabricatorSettings, roundedPrice(discountsTotalAmount), null, false, true)}\r\n \r\n ) : null}\r\n {showTaxes ? allTaxes.map((taxObject, taxObjectIndex) => {\r\n const taxTotal = taxObject.materialTax;\r\n const taxName = taxObject.nameIntl && taxObject.nameIntl[locale]\r\n ? taxObject.nameIntl[locale]\r\n : taxObject.state || printContext.messages[\"receipt.total.tax\"]\r\n return (\r\n \r\n {taxName}\r\n {getPriceWithCurrency(fabricatorSettings, taxTotal, null, false, true)}\r\n \r\n )\r\n }) : null}\r\n {totalPrice.installationTaxes ? (\r\n \r\n {printContext.messages[\"receipt.total.installationTaxes\"]}\r\n {getPriceWithCurrency(fabricatorSettings, totalPrice.installationTaxes, null, false, true)}\r\n \r\n ) : null}\r\n {fabricatorSettings.useShipping || isCafeCountetops ? (\r\n \r\n {printContext.messages[\"grohe.cart.confirm.columns.delivery\"]}\r\n {getPriceWithCurrency(fabricatorSettings, totalPrice.totalDeliveryCost, null, false, true)}\r\n \r\n ) : null}\r\n {(fabricatorSettings.deposit && fabricatorSettings.enableDeposit) || getDepositDiscount(discountSections) ? (\r\n \r\n {printContext.messages[\"depositPopup.depositAmount\"]}:\r\n \r\n {getPriceWithCurrency(fabricatorSettings, getDepositAmount(discountSections, grandTotal, fabricatorData), null, false, true)}\r\n \r\n \r\n ) : null}\r\n {differentCurrencyObjects.length ? differentCurrencyObjects.map(currObject => {\r\n const currentTotal = getTotalPrice(null, true, currObject.cartItems);\r\n const total = toFixedPrice(getQuotePriceWithTaxes(currentTotal), true)\r\n return (\r\n \r\n {printContext.messages[\"receipt.total.total\"]}:\r\n {getCurrencySign(currObject.currency, fabricatorSettings) + total}\r\n \r\n )\r\n }) : null}\r\n \r\n {printContext.messages[\"receipt.total.total\"]}:\r\n {getPriceWithCurrency(fabricatorSettings, grandTotal, null, false, true)}\r\n \r\n \r\n \r\n )\r\n};\r\n\r\nPrintDocumentTotal.propTypes = {\r\n priceWorksheetState: PropTypes.object.isRequired,\r\n fabricatorData: PropTypes.object.isRequired,\r\n styles: PropTypes.object.isRequired,\r\n cartItems: PropTypes.array.isRequired,\r\n};\r\n\r\nexport default PrintDocumentTotal\r\n","import React, {useContext} from \"react\";\r\nimport {View, Text, Image} from '@react-pdf/renderer';\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport {PrintDocumentContext} from \"./printDocumentContext\";\r\n\r\nconst PrintDocumentSignature = (props) => {\r\n const {styles, isContractSign, receiptSignature, userInfo, assignQuotePopupCustomer, locale, fabricatorData} = props;\r\n const {receiptSettings} = fabricatorData;\r\n const printContext = useContext(PrintDocumentContext);\r\n\r\n const customerName = assignQuotePopupCustomer\r\n ? assignQuotePopupCustomer.fullName\r\n : userInfo.firstName + (userInfo.lastName ? (\" \" + userInfo.lastName) : \"\");\r\n\r\n const formattedDate = (new Date().toLocaleString(locale,\r\n {year: 'numeric', month: 'numeric', day: 'numeric', hour: '2-digit', minute: '2-digit'}\r\n )).replace(/,/g, \"\");\r\n\r\n return (\r\n \r\n \r\n \r\n {receiptSettings && receiptSettings.doNotFillNameAndDate ? null : customerName}\r\n \r\n {printContext.messages[\"receipt.signature.name\"]}\r\n \r\n \r\n \r\n {receiptSettings && receiptSettings.doNotFillNameAndDate ? null : formattedDate}\r\n \r\n {printContext.messages[\"receipt.signature.date\"]}\r\n \r\n \r\n {receiptSignature && !isContractSign\r\n && !(fabricatorData.receiptSettings && fabricatorData.receiptSettings.hideSignatureField)\r\n ? \r\n : null}\r\n {printContext.messages[\"receipt.signature.signature\"]}\r\n \r\n \r\n )\r\n};\r\n\r\nPrintDocumentSignature.propTypes = {\r\n styles: PropTypes.object.isRequired,\r\n locale: PropTypes.string.isRequired,\r\n userInfo: PropTypes.object.isRequired,\r\n assignQuotePopupCustomer: PropTypes.object,\r\n isContractSign: PropTypes.bool,\r\n receiptSignature: PropTypes.string,\r\n};\r\n\r\nexport default PrintDocumentSignature\r\n","import React from \"react\";\r\nimport {View, Text} from '@react-pdf/renderer';\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport PrintDocumentDiscount from \"./printDocumentDiscount\";\r\nimport {\r\n getDiscountsForSection,\r\n isSaveOnlyDiscount,\r\n shouldCalculateDiscount\r\n} from \"../../priceWorksheet/discountFunctions\";\r\nimport {getQuotePriceWithTaxes, getTotalPrice, sortByOrder} from \"../../../misc/helpers\";\r\nimport {DISCOUNT_SECTION_TYPES} from \"../../priceWorksheet/discounstInterface\";\r\n\r\n\r\nconst PrintDocumentDiscountsList = (props) => {\r\n const {styles, priceWorksheetState, fabricatorSettings} = props;\r\n const {discountSections, customAddedDiscounts} = priceWorksheetState;\r\n\r\n const totalPrice = getTotalPrice();\r\n const grandTotal = getQuotePriceWithTaxes(totalPrice);\r\n\r\n return (\r\n \r\n {discountSections.map((discountSection, discountSectionIndex) => {\r\n if (discountSection.type === DISCOUNT_SECTION_TYPES.finance) {\r\n return null\r\n }\r\n const allDiscounts = getDiscountsForSection(discountSection, customAddedDiscounts);\r\n const displayDiscounts = sortByOrder(allDiscounts.filter(discount => {\r\n return shouldCalculateDiscount(discount) || isSaveOnlyDiscount(discount)\r\n }));\r\n if (!displayDiscounts.length) {\r\n return null\r\n }\r\n return (\r\n \r\n {discountSection.name}\r\n {displayDiscounts.map((discount, discountIndex) => {\r\n return \r\n })}\r\n \r\n )\r\n })}\r\n \r\n )\r\n};\r\n\r\nPrintDocumentDiscountsList.propTypes = {\r\n priceWorksheetState: PropTypes.object.isRequired,\r\n fabricatorSettings: PropTypes.object.isRequired,\r\n styles: PropTypes.object.isRequired,\r\n};\r\n\r\nexport default PrintDocumentDiscountsList\r\n","import React, {Fragment, useContext} from \"react\";\r\nimport {View, Text} from '@react-pdf/renderer';\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport {DISCOUNT_MAIN_TYPES, DISCOUNT_TYPES} from \"../../priceWorksheet/discounstInterface\";\r\nimport {getPriceWithCurrency, toFixedPrice} from \"../../../misc/helpers\";\r\nimport {getCustomDepositAmount, getSubTotalPrice} from \"../../priceWorksheet/discountFunctions\";\r\nimport PrintDocumentDiscountFinance from \"./printDocumentDiscountFinance\";\r\nimport {PrintDocumentContext} from \"./printDocumentContext\";\r\n\r\nconst PrintDocumentDiscount = (props) => {\r\n const {styles, discount, priceWorksheetState, discountSection, fabricatorSettings, grandTotal} = props;\r\n const {discountSections, customAddedDiscounts} = priceWorksheetState;\r\n\r\n const printContext = useContext(PrintDocumentContext);\r\n\r\n const getDiscountPercentageAmount = () => {\r\n const grandTotal = getSubTotalPrice(discountSections, discountSection, discount, true, customAddedDiscounts);\r\n const priceTaken = grandTotal * discount.amount / 100 // for ex. 25% from 2700 = 625\r\n return toFixedPrice(Math.trunc(priceTaken * 100) / 100);\r\n };\r\n\r\n if (discount.discountType === DISCOUNT_MAIN_TYPES.deposit) {\r\n return (\r\n \r\n {discount.name}\r\n \r\n {getPriceWithCurrency(fabricatorSettings, getCustomDepositAmount(discountSections, grandTotal))}\r\n \r\n \r\n )\r\n }\r\n\r\n if (discount.discountType === DISCOUNT_MAIN_TYPES.finance) {\r\n return \r\n }\r\n\r\n const discountAmount = discount.type === DISCOUNT_TYPES.price\r\n ? \"-\" + getPriceWithCurrency(fabricatorSettings, toFixedPrice(discount.amount))\r\n : \"-\" + getPriceWithCurrency(fabricatorSettings, getDiscountPercentageAmount());\r\n\r\n const approveOptions = discount.approveOptions ? JSON.parse(discount.approveOptions) : null;\r\n\r\n return (\r\n \r\n \r\n \r\n {discount.name}\r\n {approveOptions && approveOptions.selectedOption ? (\r\n \r\n {printContext.messages[\"receipt.discount.approvedBy\"]}: \r\n {approveOptions.selectedOption}\r\n \r\n ) : null}\r\n \r\n {discountAmount}\r\n \r\n \r\n )\r\n};\r\n\r\nPrintDocumentDiscount.propTypes = {\r\n discount: PropTypes.object.isRequired,\r\n priceWorksheetState: PropTypes.object.isRequired,\r\n discountSection: PropTypes.object.isRequired,\r\n fabricatorSettings: PropTypes.object.isRequired,\r\n styles: PropTypes.object.isRequired,\r\n grandTotal: PropTypes.number,\r\n};\r\n\r\nexport default PrintDocumentDiscount\r\n","import React, {useContext} from \"react\";\r\nimport {View, Text} from '@react-pdf/renderer';\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport {PrintDocumentContext} from \"./printDocumentContext\";\r\nimport {DISCOUNT_SECTION_TYPES, DISCOUNT_FINANCE_CELLS} from \"../../priceWorksheet/discounstInterface\";\r\nimport {calculateCellValue} from \"../../priceWorksheet/discountFunctions\";\r\n\r\nconst PrintDocumentDiscountFinance = (props) => {\r\n const {styles, discount, priceWorksheetState, fabricatorSettings, grandTotal} = props;\r\n const {discountSections, financePercentage, financeCellsVisible} = priceWorksheetState;\r\n\r\n const printContext = useContext(PrintDocumentContext);\r\n\r\n const financeSection = discountSections.find(sec => sec.type === DISCOUNT_SECTION_TYPES.finance);\r\n if (!financeSection) {\r\n return null;\r\n }\r\n\r\n let parsedOptions = typeof discount.financeOptions === \"string\"\r\n ? JSON.parse(discount.financeOptions)\r\n : [];\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n {printContext.messages[\"shoppingCart.discounts.financeTitle\"]}\r\n \r\n \r\n \r\n \r\n {printContext.messages[\"shoppingCart.discounts.financeSubTitle\"]}\r\n \r\n \r\n {priceWorksheetState.financePercentage + \"%\"}\r\n \r\n \r\n \r\n \r\n {Object.keys(DISCOUNT_FINANCE_CELLS).map((property, propertyIndex) => {\r\n const cellStyles = propertyIndex === 1\r\n ? [styles.financeCell, styles.marginL10, styles.marginR10]\r\n : styles.financeCell;\r\n const selectedDiscount = financeSection.discounts.find(dis => dis.uuId === parsedOptions[propertyIndex]);\r\n return (\r\n \r\n \r\n {selectedDiscount\r\n ? selectedDiscount.financeMonths + \" \" + printContext.messages[\"shoppingCart.discounts.months\"]\r\n : null}\r\n \r\n \r\n \r\n {financeCellsVisible ? calculateCellValue(\r\n {discountSections, financePercentage, fabricatorSettings},\r\n selectedDiscount ? selectedDiscount.financeMonths : 0,\r\n grandTotal,\r\n ) : null}\r\n \r\n \r\n \r\n )\r\n })}\r\n \r\n \r\n )\r\n};\r\n\r\nPrintDocumentDiscountFinance.propTypes = {\r\n discount: PropTypes.object.isRequired,\r\n priceWorksheetState: PropTypes.object.isRequired,\r\n discountSection: PropTypes.object.isRequired,\r\n fabricatorSettings: PropTypes.object.isRequired,\r\n styles: PropTypes.object.isRequired,\r\n};\r\n\r\nexport default PrintDocumentDiscountFinance\r\n","import React from \"react\";\r\nimport {View, Text} from '@react-pdf/renderer';\r\n\r\nconst PrintDocumentAsCentralText = (props) => {\r\n const {styles} = props;\r\n return (\r\n \r\n Buyer(s) listed above hereby jointly and severally agrees to purchase the goods and/or services listed below, in accordance with the prices and terms described on this Specification Sheet and the front and the reverse of the accompanying CUSTOM REMODELING AGREEMENT, of which this Specification Sheet is a part.\r\n \r\n )\r\n};\r\n\r\n\r\nexport default PrintDocumentAsCentralText\r\n","import {leadApiGet} from \"./api\";\r\nimport {fixWizardItem} from \"../../bvcomponents/look/lookNavigation/lookMain/lookWizard/wizardFunctionsCommon\";\r\n\r\nexport const getWizardListFromBackend = async () => {\r\n // const mainResponse = await leadApiGet(`/api/public/bvdata/${document.kvConfig.userId}/30?mode=leadForm`);\r\n const mainResponse = await leadApiGet(`/api/Public/Wizard/Get/${document.kvConfig.userId}/leadform`);\r\n // if (mainResponse.data) {\r\n // console.log(\"mainResponse\", mainResponse.data);\r\n // }\r\n if (mainResponse && mainResponse.data) {\r\n const wizardList = JSON.parse(mainResponse.data)\r\n .filter(wizardItem => wizardItem.enabled)\r\n .map((wizardItem, wizardItemIndex) => {\r\n wizardItem = fixWizardItem(wizardItem, wizardItemIndex,true);\r\n // wizardItem.id = getUpdatedWizardId(wizardItem.visualizer, wizardItem.id);\r\n return wizardItem\r\n });\r\n\r\n return {wizardList, error: mainResponse.data.error}\r\n }\r\n return {wizardList: [], error: mainResponse.error}\r\n}\r\n","import {getLixilCampaignInfo} from \"../lixilLogic/lixilActions\";\r\nimport {\r\n formatCalendarDateToMatchAvailableDate,\r\n getSelectedLixilDateObject\r\n} from \"../appointmentLogic/appointmentActions\";\r\nimport {replaceMaskToPassPhoneOnTheBackend} from \"../userLogic/userActions\";\r\n\r\n/**\r\n * returns feature compressed object that can be passed on the backend (without redundant info)\r\n * @param fromFeature {featureInterface}\r\n * @returns {object}\r\n */\r\nconst getCompressedFeature = (fromFeature) => {\r\n if (!fromFeature) {\r\n return null\r\n }\r\n return {\r\n partName: fromFeature.customDisplayName || fromFeature.displayName,\r\n sharedFeatureName: fromFeature.sharedFeatureName,\r\n dbFeatureId: fromFeature.id,\r\n sku: fromFeature.sku,\r\n partId: fromFeature.partId,\r\n groupName: fromFeature.groupName,\r\n featureDefinitionID: fromFeature.featureDefinitionID,\r\n }\r\n}\r\n\r\n/**\r\n * is used to compress the data that will be passed in the job data back and force\r\n * @param allWizardsValues {array}\r\n * @param allWizardsValues {array}\r\n */\r\nconst getCompressedAllWizardValues = (allWizardsValues) => {\r\n const allWizardsValuesToSave = allWizardsValues.map(newWizObject => {\r\n let wizValues = {};\r\n Object.keys(newWizObject.wizardSelectedValues).forEach(stepIndex => {\r\n wizValues[stepIndex] = Object.assign({}, newWizObject.wizardSelectedValues[stepIndex])\r\n if (newWizObject.wizardSelectedValues[stepIndex].wizardGroup) {\r\n wizValues[stepIndex].wizardGroup = Object.assign(\r\n {},\r\n newWizObject.wizardSelectedValues[stepIndex].wizardGroup,\r\n {featuresExcluded: [], featuresIncluded: []} // to keep clean in json\r\n )\r\n if (wizValues[stepIndex].wizardGroup.mergedGroups) {\r\n wizValues[stepIndex].wizardGroup.mergedGroups = wizValues[stepIndex].wizardGroup.mergedGroups.map(wizGroup => {\r\n return {id: wizGroup.id, groupName: wizGroup.groupName}\r\n });\r\n }\r\n }\r\n if (newWizObject.wizardSelectedValues[stepIndex].selectedFeature) {\r\n wizValues[stepIndex].selectedFeature = getCompressedFeature(\r\n newWizObject.wizardSelectedValues[stepIndex].selectedFeature,\r\n newWizObject.quoteIndex\r\n ); // to keep clean in json\r\n }\r\n if (newWizObject.wizardSelectedValues[stepIndex].selectedFeatures) {\r\n wizValues[stepIndex].selectedFeatures = newWizObject.wizardSelectedValues[stepIndex].selectedFeatures.map(feature => getCompressedFeature(\r\n feature,\r\n newWizObject.quoteIndex\r\n ))\r\n }\r\n })\r\n return Object.assign({}, newWizObject, {wizardSelectedValues: wizValues})\r\n });\r\n // console.log(\"allWizardsValues to save ->\", allWizardsValuesToSave);\r\n return allWizardsValuesToSave\r\n}\r\nconst getJobRecords = (store) => {\r\n const {wizardState, userState} = store;\r\n return [{\r\n bvImage: \"\",\r\n features: [],\r\n imageUrl: null,\r\n installationCost: 0,\r\n installationTaxes: 0,\r\n isCreatedInSQFT: false,\r\n isVisibleInSQFT: false,\r\n layoutType: 1,\r\n leadFeatures: [],\r\n materialCost: 0,\r\n materialTaxes: 0,\r\n priceTaxes: [],\r\n qtCatName: \"\",\r\n room: \"LeadForm\",\r\n sFtCalcDataJson: null,\r\n sqFtCalcImage: null,\r\n staticCanvasImage: \"\",\r\n data: JSON.stringify({ // here is the main stored info\r\n id: 1,\r\n lookId: 1,\r\n layout_type: 1,\r\n cartState: {},\r\n navigationType: \"LeadForm\",\r\n toolVersion: 1,\r\n userState: Object.assign({}, userState, {\r\n userInfo: Object.assign({}, userState.userInfo, {\r\n phone: replaceMaskToPassPhoneOnTheBackend(userState.userInfo.phone)\r\n })\r\n }),\r\n allWizardsValues: getCompressedAllWizardValues(wizardState.allWizardsValues)\r\n })\r\n }]\r\n}\r\n\r\nexport const getSaveJobData = (store, isDelayedSave = false) => {\r\n const {globalState, userState, appointmentState} = store;\r\n\r\n const {salesRepID, appointmentDate, appointmentTimeSlot, availableAppointmentDates} = appointmentState;\r\n\r\n const lixilCampaignInfo = getLixilCampaignInfo(store);\r\n if (appointmentDate) {\r\n const appDate = new Date(appointmentDate);\r\n lixilCampaignInfo.appointment_date_stc = formatCalendarDateToMatchAvailableDate(appDate, true);\r\n if (appointmentTimeSlot) {\r\n const selectedLixilDateObject = getSelectedLixilDateObject(appDate, availableAppointmentDates);\r\n if (selectedLixilDateObject) {\r\n const timeSlotObject = selectedLixilDateObject.salesRepsInSlots.find(timeSlotObject => timeSlotObject.timeSlot === appointmentTimeSlot)\r\n if (timeSlotObject && timeSlotObject.slotStartTime) {\r\n lixilCampaignInfo.appointment_time_stc = timeSlotObject.slotStartTime[0] === \"0\"\r\n ? timeSlotObject.slotStartTime.substring(1) // 04:00 -> 4:00\r\n : timeSlotObject.slotStartTime;\r\n }\r\n }\r\n }\r\n }\r\n\r\n const lixilData = {\r\n salesRepID,\r\n receiveSmsCheckbox: userState.userInfo.receiveSmsCheckbox,\r\n ...lixilCampaignInfo,\r\n isDelayedSave,\r\n }\r\n\r\n const appForm = document.getElementById(\"app-form\");\r\n if (appForm && appForm.children) {\r\n [].slice.call(appForm.children).forEach(input => {\r\n if (input.name && input.value) {\r\n lixilData[input.name] = input.value;\r\n }\r\n })\r\n }\r\n\r\n const saveDataBeforeConverting = {\r\n // fast\r\n jobId: document.kvConfig.jobId || globalState.jobId,\r\n fromBV: true,\r\n fabricatorId: document.kvConfig.userId,\r\n notes: [],\r\n documents: [],\r\n employeeId: 0,\r\n shareUrl: \"\",\r\n discountSections: [],\r\n installations: [],\r\n subId: document.subId && document.subId.toString ? document.subId.toString() : null,\r\n total: {\r\n materialCost: 0,\r\n installationCost: 0,\r\n installationTaxes: 0,\r\n materialTaxes: 0,\r\n priceTaxes: [],\r\n totalWithTaxes: 0,\r\n },\r\n records: getJobRecords(store),\r\n // fast end\r\n yesNoConsultationRequest: false,\r\n submit: true,\r\n fromCheckOutPage: false,\r\n sendConsumerEmail: true,\r\n customerEmail: userState.userInfo.email || userState.registeredUser.email || \"\",\r\n salesPerson: \"\",\r\n salesPersonEmail: \"\",\r\n leadOriginatorId: (window.salesPerson ? window.salesPerson.rawVal / ( Math.floor(Math.PI * 1000)) : 0),\r\n postalCode: userState.userInfo.postal,\r\n // isNewUser: !(code below) || (userState.registeredUser.email !== userState.userInfo.email), // not sure if we need it\r\n isNewUser: !(document.kvConfig.jobId || globalState.jobId),\r\n state: \"quote\",\r\n fromTool: \"LF\", //\"BV\",\r\n toolVersion: document.kvConfig.toolVersion,\r\n visualizerType: \"LeadForm\",\r\n navigationType: \"LeadForm\",\r\n quoteRequestType: \"ScheduleAnAppointment\", // QuoteRequestType\r\n currency: \"USD\",\r\n installationTaxesRate: 0,\r\n materialTaxesRate: 0,\r\n fromDashboard: document.kvConfig.isBackend,\r\n callFabricator: document.kvConfig.callFabricatorOnSave || false,\r\n language: \"en-US\",\r\n salesRepID,\r\n lixilData,\r\n }\r\n console.log(\"saveData\", saveDataBeforeConverting);\r\n const formData = new FormData();\r\n formData.append('json', JSON.stringify(saveDataBeforeConverting));\r\n return formData\r\n}\r\n","import {leadApiPost} from \"./api\";\r\n\r\nexport const postSaveJob = async (postData) => {\r\n const mainResponse = await leadApiPost(`api/Public/SaveQuote/`, postData);\r\n console.log(\"post SaveQuote response\", mainResponse);\r\n return mainResponse\r\n}\r\n\r\nexport const postScheduleAppointment = async (postData) => {\r\n const mainResponse = await leadApiPost(`api/Public/Schedule/`, postData);\r\n console.log(\"post Schedule response\", mainResponse);\r\n return mainResponse\r\n}\r\n","import {getSelectedLixilDateObject} from \"../appointmentLogic/appointmentActions\";\r\n\r\nexport const getSaveAppointmentData = (store, jobId) => {\r\n const {appointmentDate, appointmentTime, appointmentTimeSlot, availableAppointmentDates} = store.appointmentState;\r\n const {useLixilCalendar} = store.fabricatorState;\r\n\r\n let timeToPass = appointmentTime;\r\n\r\n if (appointmentDate && useLixilCalendar && appointmentTimeSlot) {\r\n const appDate = new Date(appointmentDate);\r\n const selectedLixilDateObject = getSelectedLixilDateObject(appDate, availableAppointmentDates);\r\n if (selectedLixilDateObject) {\r\n const timeSlotObject = selectedLixilDateObject.salesRepsInSlots.find(timeSlotObject => timeSlotObject.timeSlot === appointmentTimeSlot)\r\n if (timeSlotObject && timeSlotObject.slotStartTime) {\r\n timeToPass = timeSlotObject.slotStartTime;\r\n }\r\n }\r\n }\r\n\r\n const splittedTime = timeToPass.split(\":00\");\r\n const am = splittedTime[1] && splittedTime[1].toLowerCase().includes(\"am\");\r\n\r\n let date = \"\"+appointmentDate.getDate();\r\n let month = \"\"+(appointmentDate.getMonth() + 1); // +1 because getMonth returns starting from 0 (January is 0)\r\n let year = \"\"+appointmentDate.getFullYear();\r\n\r\n date = date.length === 1 ? \"0\" + date : date;\r\n month = month.length === 1 ? \"0\" + month : month;\r\n\r\n const scheduleData = {\r\n scheduleEntryData: {\r\n // date: \"03/02/2024\",\r\n date: `${month}/${date}/${year}`,\r\n time: `${splittedTime[0].length === 1 ? \"0\" + splittedTime[0] : splittedTime[0]}:00`, // 1:00 -> 01:00\r\n am: am,\r\n duration: 60,\r\n alert: 30,\r\n appointmentType: 'Quote'\r\n },\r\n jobId,\r\n jobIdType: 'JobQuote'\r\n };\r\n\r\n console.log(\"scheduleData\", scheduleData);\r\n return scheduleData\r\n}\r\n","import {leadApiPost} from \"./api\";\r\nimport {parseUrl} from \"../helperFunctions\";\r\n\r\nconst parsedUrl = parseUrl();\r\n\r\nconst getUserRegisterOrUpdateData = (store) => {\r\n\r\n const {userInfo, userLocation} = store.userState;\r\n const {email, firstName, lastName, phone, city, state, country, postal, address2} = userInfo; // address is not used\r\n const {streetNumber, streetName} = userLocation;\r\n\r\n return {\r\n email,\r\n firstName,\r\n lastName,\r\n phone,\r\n address1: (streetNumber ? streetNumber + \" \" : \"\") + streetName,\r\n address2,\r\n city,\r\n state,\r\n country,\r\n phone2: \"\",\r\n agreedToTerms: true,\r\n subscribeToNewsletter: true,\r\n isNew: true,\r\n postal,\r\n salesPersonEmail: (window.salesPerson ? window.salesPerson.email : \"\"),\r\n salesPersonFullName: (window.salesPerson ? window.salesPerson.name : \"\"),\r\n employeeId: window.salesPerson\r\n ? window.salesPerson.rawVal / ( Math.floor(Math.PI * 1000))\r\n : (parsedUrl && parsedUrl.p) ? +parsedUrl.p.split(\"/\")[0] : \"\",\r\n fabricatorId: document.kvConfig.userId || 61986,\r\n quoteRequestType: \"ScheduleAnAppointment\", // QuoteRequestType\r\n yesNoConsultationRequest: false,\r\n preferredCommunicationMethod: \"\",\r\n howDidYouHearAboutUs: \"\",\r\n language: \"en-US\",\r\n subId: document.subId && document.subId.toString ? document.subId.toString() : null,\r\n };\r\n}\r\n\r\nexport const registerUser = (store) => {\r\n return leadApiPost(\"/api/Public/RegisterClient\", getUserRegisterOrUpdateData(store))\r\n}\r\n\r\nexport const updateUser = (store) => {\r\n const {registeredUserAuthToken} = store.userState;\r\n const headers = {\r\n \"Content-Type\": \"application/json\",\r\n \"Authorization\": \"Bearer \" + registeredUserAuthToken,\r\n }\r\n return leadApiPost(\"/api/client/update-with-token\", getUserRegisterOrUpdateData(store), headers)\r\n}\r\n","export function parseUrl(queryString = null) {\r\n queryString = queryString || window.location.search;\r\n const query = {};\r\n const pairs = (queryString[0] === '?' ? queryString.substr(1) : queryString).split('&');\r\n for (let i = 0; i < pairs.length; i++) {\r\n let pair = pairs[i].split('=');\r\n query[decodeURIComponent(pair[0]).toLowerCase()] = decodeURIComponent(pair[1] || '');\r\n }\r\n return query;\r\n}\r\n","export const getErrorPopupObject = (text, buttons) => {\r\n return {\r\n visible: true,\r\n title: \"Error\",\r\n text,\r\n buttons: buttons || [{\r\n text: \"Close\",\r\n }],\r\n }\r\n}\r\n","import {IS_LIXIL_UI} from \"../config\";\r\nimport {getCurrentZIndexes} from \"../bvcomponents/appLayout\";\r\n\r\n\r\nexport const makeHoveringLayer = (layer, image, layoutType = \"Large\", canvasDimensions = null, fabricatorData = null) => {\r\n\r\n const zIndexesObject = getCurrentZIndexes();\r\n\r\n // console.log('layer+', layer);\r\n const withNewBackgrounds = [\"bvLook\", \"kvScene\", \"Fireplace\", \"LaundryRoom\"].some(visType => document.kvConfig.visualizerType === visType);\r\n\r\n const isBackgroundLayer =\r\n ((document.kvConfig.visualizerType === \"bvScene\") && Object.values(zIndexesObject.layouts[layoutType].Background).includes(layer.zIndex))\r\n || (withNewBackgrounds && layer.zIndex >= 50000);\r\n\r\n // step 1 - create an image from layer // get layerDimensions\r\n let layerDimensions = zIndexesObject.getLayerDimensions(withNewBackgrounds ? layer : layer.zIndex, layoutType, canvasDimensions);\r\n // console.log('layerDimensions+', layerDimensions);\r\n if (!layerDimensions) {\r\n console.log('layerDimensions not found!', layer);\r\n // return makeHoveringLayerOld(layer, image)\r\n layerDimensions = {\r\n polygonArray: [[0, 0], [canvasDimensions.width, 0], [canvasDimensions.width, canvasDimensions.height], [0, canvasDimensions.height]],\r\n width: canvasDimensions.width,\r\n height: canvasDimensions.height\r\n };\r\n // return makeHoveringLayerOld(layer, image)\r\n }\r\n\r\n const width = layer.cropCoords ? layer.cropCoords[2] - layer.cropCoords[0] : layerDimensions.width;\r\n const height = layer.cropCoords ? layer.cropCoords[3] - layer.cropCoords[1] : layerDimensions.height;\r\n\r\n // step 2 - create for each layer fake canvas\r\n const fakeCanvas = document.createElement('canvas');\r\n fakeCanvas.setAttribute('width', `${width}px`);\r\n fakeCanvas.setAttribute('height', `${height}px`);\r\n const context2D = fakeCanvas.getContext(\"2d\", { willReadFrequently: true });\r\n\r\n // step 3 - make canvas layer 0.5 transparent\r\n // if (!backGroundIndexes.includes(layer.zIndex)) { // do it for all layers\r\n context2D.globalAlpha = fabricatorData && fabricatorData.isAmericanStandard ? 0.75 : 0.5;\r\n // }\r\n\r\n // step 4 - put layer image on fake canvas\r\n context2D.clearRect(0, 0, fakeCanvas.width, fakeCanvas.height);\r\n const x1 = layer.cropCoords ? 0 : layerDimensions.polygonArray[0][0];\r\n const y1 = layer.cropCoords ? 0 : layerDimensions.polygonArray[0][1];\r\n context2D.drawImage(image, x1, y1, width, height, 0, 0, width, height);\r\n\r\n // step 5 - create green map for this layer\r\n let imageData = null\r\n try {\r\n imageData = context2D.getImageData(0, 0, width, height);\r\n } catch (error) {\r\n console.log(\"error creating hovering layer\", layer, image, layoutType, canvasDimensions, error);\r\n return null\r\n }\r\n // const imageData = context2D.getImageData(300, 400, 300, 400);\r\n\r\n const map = imageData.data;\r\n\r\n let r, g, b, a;\r\n\r\n const multipliers = {\r\n r: IS_LIXIL_UI ? 0 : 0.2,\r\n g: 0.7,\r\n b: IS_LIXIL_UI ? 1 : 0.2,\r\n }\r\n\r\n for (let p = 0, len = imageData.data.length; p < len; p += 4) {\r\n\r\n r = map[p];\r\n g = map[p + 1];\r\n b = map[p + 2];\r\n a = map[p + 3];\r\n\r\n if (a !== 0 && (r > 2) && (b > 2) && (g > 2)) { // not a background or not dark\r\n if (fabricatorData && fabricatorData.isAmericanStandard) {\r\n r = 231;\r\n g = 0;\r\n b = 38;\r\n } else {\r\n r = r * multipliers.r;\r\n g = g * multipliers.g;\r\n b = b * multipliers.b;\r\n }\r\n if (g > 255) {\r\n g = 255;\r\n }\r\n map[p] = r;\r\n map[p + 1] = g;\r\n map[p + 2] = b;\r\n map[p + 3] = a;\r\n } else if (isBackgroundLayer) {\r\n map[p] = 0;\r\n map[p + 1] = 0;\r\n map[p + 2] = 0;\r\n map[p + 3] = 0;\r\n }\r\n }\r\n\r\n // step 6 - put green map on canvas\r\n context2D.clearRect(0, 0, width, height);\r\n context2D.putImageData(imageData, 0, 0);\r\n\r\n const greenImage = fakeCanvas.toDataURL();\r\n const hoveringImage = new Image();\r\n hoveringImage.crossOrigin = 'Anonymous';\r\n hoveringImage.layerDimensions = layer.layerDimensions || null;\r\n hoveringImage.coords = layer.coords || null;\r\n try {\r\n hoveringImage.src = greenImage;\r\n } catch (e) {\r\n console.log(e, 'Can\\'t apply layer Hovering src', greenImage);\r\n }\r\n return {\r\n layer,\r\n context2D,\r\n layerDimensions,\r\n greenImage,\r\n hoveringImage,\r\n };\r\n};\r\n\r\nexport const makeHoveringLayerOld = (layer, image, width = 1620, height = 1080) => {\r\n // window.t0 = performance.now();\r\n\r\n // step 1 - create an image from layer // no needed it more, it comes rendered from this.draw() method\r\n // const img = new Image();\r\n // img.crossOrigin = \"Anonymous\";\r\n // img.src = layer.image;\r\n\r\n // step 2 - create for each layer fake canvas\r\n const fakeCanvas = document.createElement('canvas');\r\n fakeCanvas.setAttribute('height', `${height}px`);\r\n fakeCanvas.setAttribute('width', `${width}px`);\r\n const context2D = fakeCanvas.getContext(\"2d\", { willReadFrequently: true });\r\n\r\n // step 3 - make canvas layer 0.5 transparent\r\n context2D.globalAlpha = 0.5;\r\n\r\n // step 4 - put layer image on fake canvas\r\n context2D.clearRect(0, 0, fakeCanvas.width, fakeCanvas.height);\r\n\r\n if (!(image.complete && image.naturalHeight !== 0)) {\r\n return {\r\n layer,\r\n context2D,\r\n greenImage: \"\"\r\n }\r\n }\r\n\r\n context2D.drawImage(image, 0, 0);\r\n\r\n // step 5 - create green map for this layer\r\n const imageData = context2D.getImageData(0, 0, width, height);\r\n // const imageData = context2D.getImageData(300, 400, 300, 400);\r\n\r\n const map = imageData.data;\r\n\r\n let r, g, b, a;\r\n for (let p = 0, len = imageData.data.length; p < len; p += 4) {\r\n\r\n r = map[p];\r\n g = map[p + 1];\r\n b = map[p + 2];\r\n a = map[p + 3];\r\n\r\n if (a !== 0) {\r\n r = r * 0.2;\r\n b = b * 0.2;\r\n g = g * 0.7;\r\n if (g > 255) {\r\n g = 255;\r\n }\r\n map[p] = r;\r\n map[p + 1] = g;\r\n map[p + 2] = b;\r\n map[p + 3] = a;\r\n }\r\n }\r\n\r\n // step 6 - put green map on canvas\r\n context2D.clearRect(0, 0, fakeCanvas.width, fakeCanvas.height);\r\n context2D.putImageData(imageData, 0, 0);\r\n\r\n // step 7 - set values in reverse order (we need top layers to be hoverable first)\r\n // window.t1 = performance.now();\r\n // console.log(\"Call to doSomething took \" + (window.t1 - window.t0) + \" milliseconds.\");\r\n return {\r\n layer,\r\n context2D,\r\n greenImage: fakeCanvas.toDataURL()\r\n };\r\n\r\n};\r\n","/*\r\n\r\n Copyright (c) Manuel Stofer 2013 - today, PinchZoom.js\r\n\r\n Permission is hereby granted, free of charge, to any person obtaining a copy\r\n of this software and associated documentation files (the \"Software\"), to deal\r\n in the Software without restriction, including without limitation the rights\r\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n copies of the Software, and to permit persons to whom the Software is\r\n furnished to do so, subject to the following conditions:\r\n\r\n The above copyright notice and this permission notice shall be included in\r\n all copies or substantial portions of the Software.\r\n\r\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\n THE SOFTWARE.\r\n\r\n*/\r\n// import $ from 'jquery';\r\n// import ActionTypes from \"../misc/actionTypes\";\r\n\r\nimport pinchScroll from \"./pinchScroll\";\r\nimport ActionTypes from \"../misc/actionTypes\";\r\nimport {GROHE_CONFIG} from \"../bvcomponents/look/grohe/groheConfig\";\r\nimport {IS_PRODUCT_JOURNEY} from \"../config\";\r\nimport store from \"../store\";\r\nimport {setCanvasScale} from \"../actions/actionFunctions\";\r\n\r\n// polyfills\r\nif (typeof Object.assign != 'function') {\r\n // Must be writable: true, enumerable: false, configurable: true\r\n Object.defineProperty(Object, \"assign\", {\r\n value: function assign(target) { // .length of function is 2\r\n if (target == null) { // TypeError if undefined or null\r\n throw new TypeError('Cannot convert undefined or null to object');\r\n }\r\n\r\n var to = Object(target);\r\n\r\n for (var index = 1; index < arguments.length; index++) {\r\n var nextSource = arguments[index];\r\n\r\n if (nextSource != null) { // Skip over if undefined or null\r\n for (var nextKey in nextSource) {\r\n // Avoid bugs when hasOwnProperty is shadowed\r\n if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {\r\n to[nextKey] = nextSource[nextKey];\r\n }\r\n }\r\n }\r\n }\r\n return to;\r\n },\r\n writable: true,\r\n configurable: true\r\n });\r\n}\r\n\r\nif (typeof Array.from != 'function') {\r\n Array.from = function (object) {\r\n return [].slice.call(object);\r\n };\r\n}\r\n\r\n// utils\r\nvar buildElement = function(str) {\r\n // empty string as title argument required by IE and Edge\r\n var tmp = document.implementation.createHTMLDocument('');\r\n tmp.body.innerHTML = str;\r\n return Array.from(tmp.body.children)[0];\r\n};\r\n\r\nvar triggerEvent = function(el, name) {\r\n var event = document.createEvent('HTMLEvents');\r\n event.initEvent(name, true, false);\r\n el.dispatchEvent(event);\r\n};\r\n\r\nconst sanitizeValue = (newValue) => {\r\n return isNaN(newValue) ? 0 : newValue\r\n}\r\n\r\nvar definePinchZoom = function () {\r\n\r\n /**\r\n * Pinch zoom\r\n * @version 2.0.0\r\n * @author Manuel Stofer \r\n * @param el\r\n * @param options\r\n * @constructor\r\n */\r\n var PinchZoom = function (el, options) {\r\n this.el = el;\r\n this.elText = document.querySelector('.canvas-text');\r\n this.zoomFactor = 1;\r\n this.lastScale = 1;\r\n this.offset = {\r\n x: 0,\r\n y: 0\r\n };\r\n this.mousePos = {\r\n x: 0,\r\n y: 0\r\n };\r\n this.coImage = null;\r\n this.containerScrolled = false;\r\n this.mouseDown = false;\r\n this.timerId = null;\r\n this.timerId = null;\r\n this.options = Object.assign({}, this.defaults, options);\r\n this.setupMarkup();\r\n this.bindEvents();\r\n if (this.options.canUseUpdate) {\r\n this.update();\r\n }\r\n // default enable.\r\n this.enable();\r\n\r\n },\r\n sum = function (a, b) {\r\n return a + b;\r\n },\r\n isCloseTo = function (value, expected) {\r\n return value > expected - 0.01 && value < expected + 0.01;\r\n },\r\n interaction = null;\r\n\r\n PinchZoom.prototype = {\r\n\r\n defaults: {\r\n tapZoomFactor: 1.75,\r\n zoomOutFactor: 1.3,\r\n animationDuration: 500,\r\n maxZoom: 1.75,\r\n minZoom: 1,\r\n lockDragAxis: false,\r\n use2d: true,\r\n dragPixelsBeforeClick: 6,\r\n zoomStartEventName: 'pz_zoomstart',\r\n zoomEndEventName: 'pz_zoomend',\r\n dragStartEventName: 'pz_dragstart',\r\n dragEndEventName: 'pz_dragend',\r\n doubleTapEventName: 'pz_doubletap',\r\n canUseUpdate: true\r\n },\r\n\r\n /**\r\n * Event handler for 'dragstart'\r\n * @param event\r\n * @param isMobile {boolean}\r\n */\r\n handleDragStart: function (event, isMobile = true) {\r\n triggerEvent(this.el, this.options.dragStartEventName);\r\n this.stopAnimation();\r\n this.lastDragPosition = false;\r\n this.hasInteraction = true;\r\n isMobile ? this.handleDrag(event) : this.handleMove(event);\r\n },\r\n\r\n /**\r\n * Event handler for 'drag'\r\n * @param event\r\n */\r\n handleDrag: function (event) {\r\n if (this.zoomFactor > 1.0) {\r\n var touch = this.getTouches(event)[0];\r\n this.drag(touch, this.lastDragPosition);\r\n this.offset = this.sanitizeOffset(this.offset);\r\n this.lastDragPosition = touch;\r\n }\r\n },\r\n /**\r\n * Event handler for 'drag'\r\n * @param event\r\n */\r\n handleMove: function (event) {\r\n let mousePos = this.getTouches({\r\n touches: [{\r\n pageX: event.pageX,\r\n pageY: event.pageY,\r\n }]\r\n })[0];\r\n // console.log(\"mousePos\", mousePos);\r\n this.drag(mousePos, this.lastDragPosition);\r\n this.offset = this.sanitizeOffset(this.offset);\r\n this.lastDragPosition = mousePos;\r\n },\r\n\r\n handleDragEnd: function () {\r\n triggerEvent(this.el, this.options.dragEndEventName);\r\n this.end();\r\n },\r\n\r\n /**\r\n * Event handler for 'zoomstart'\r\n * @param event\r\n */\r\n handleZoomStart: function () {\r\n triggerEvent(this.el, this.options.zoomStartEventName);\r\n this.stopAnimation();\r\n this.lastScale = 1;\r\n this.nthZoom = 0;\r\n this.lastZoomCenter = false;\r\n this.hasInteraction = true;\r\n },\r\n\r\n /**\r\n * Event handler for 'zoom'\r\n * @param event\r\n */\r\n handleZoom: function (event, newScale) {\r\n // a relative scale factor is used\r\n var touchCenter = this.getTouchCenter(this.getTouches(event)),\r\n scale = newScale / this.lastScale;\r\n this.lastScale = newScale;\r\n\r\n // the first touch events are thrown away since they are not precise\r\n this.nthZoom += 1;\r\n if (this.nthZoom > 3) {\r\n\r\n this.scale(scale, touchCenter);\r\n this.drag(touchCenter, this.lastZoomCenter);\r\n }\r\n this.lastZoomCenter = touchCenter;\r\n },\r\n\r\n handleZoomEnd: function () {\r\n triggerEvent(this.el, this.options.zoomEndEventName);\r\n const closeToOne = isCloseTo(this.zoomFactor, 1);\r\n store.dispatch(setCanvasScale(closeToOne ? 1 : this.zoomFactor));\r\n this.end();\r\n },\r\n\r\n /**\r\n * Event handler for 'doubletap'\r\n * @param event\r\n */\r\n handleDoubleTap: function (event) {\r\n // document.querySelector('.canvas-text').innerHTML = 'doubleTap' + JSON.stringify(event);\r\n var center = this.getTouches(event)[0],\r\n zoomFactor = this.zoomFactor > 1 ? 1 : this.options.tapZoomFactor,\r\n startZoomFactor = this.zoomFactor,\r\n updateProgress = (function (progress) {\r\n this.scaleTo(startZoomFactor + progress * (zoomFactor - startZoomFactor), center);\r\n }).bind(this);\r\n\r\n if (this.hasInteraction) {\r\n return;\r\n }\r\n if (startZoomFactor > zoomFactor) {\r\n center = this.getCurrentZoomCenter();\r\n }\r\n\r\n this.animate(this.options.animationDuration, updateProgress, this.swing);\r\n triggerEvent(this.el, this.options.doubleTapEventName);\r\n },\r\n\r\n /**\r\n * Zoom on canvas click\r\n * @param center {object}\r\n * @param zoomFactor {number}\r\n * @param allowMoving {boolean} // only for nav = product for similar products\r\n * @param withFeatureScreen {boolean} // determines whether we display feature selections with feature screen or only feature selections\r\n */\r\n zoomToCenter: function (center, zoomFactor, allowMoving = false, withFeatureScreen = true) {\r\n // this.elText.innerHTML = 'zoomToCenter' + this.isZooming;\r\n // var center = this.getTouches(event)[0],\r\n\r\n // window.clearTimeout(this.mouseDownTimeoutId);\r\n\r\n const zoomOut = !center && zoomFactor === 1;\r\n const zoomOutFromLeft = zoomOut && this.offset.x < 0;\r\n\r\n if (!zoomFactor) {\r\n zoomFactor = this.zoomFactor > 1 ? this.zoomFactor : this.options.tapZoomFactor;\r\n }\r\n\r\n if (!center) {\r\n center = {\r\n x: this.el.clientWidth / 2,\r\n y: this.el.clientHeight / 2,\r\n }\r\n }\r\n\r\n // console.log(\"this.zoomFactor\", this.zoomFactor);\r\n // console.log(\"zoomFactor\", zoomFactor);\r\n\r\n // const alreadyZoomed = (this.zoomFactor > 1) && (zoomFactor > 1) && (zoomFactor !== this.options.maxZoom);\r\n // const alreadyZoomed = false; // here is always false, because we removed moving canvas in zoomed mode\r\n const alreadyZoomed = IS_PRODUCT_JOURNEY && allowMoving && (this.zoomFactor === this.options.maxZoom) // allow moving canvas in zoomed mode for new navigation type\r\n const startZoomFactor = this.zoomFactor;\r\n const startOffset = {\r\n x: this.zoomFactor === 1 ? 0 : this.offset.x,\r\n y: this.zoomFactor === 1 ? 0 : this.offset.y\r\n };\r\n const targetOffset = {\r\n x: sanitizeValue((zoomFactor - 1) * center.x),\r\n y: sanitizeValue((zoomFactor - 1) * center.y)\r\n };\r\n // console.log(\"this.offset\", this.offset);\r\n // console.log(\"targetOffset\", targetOffset);\r\n\r\n if (this.hasInteraction) {\r\n return;\r\n }\r\n if (startZoomFactor > zoomFactor) {\r\n center = this.getCurrentZoomCenter();\r\n }\r\n\r\n if (alreadyZoomed) { // keep it as is, old support, not sure how it works if we delete it\r\n\r\n const updateProgress = alreadyZoomed\r\n ? (function (progress) {\r\n this.offset.x = sanitizeValue(startOffset.x + progress * (targetOffset.x - startOffset.x));\r\n this.offset.y = sanitizeValue(startOffset.y + progress * (targetOffset.y - startOffset.y));\r\n this.update();\r\n }).bind(this)\r\n : (function (progress) {\r\n // console.log(\"startZoomFactor + progress * (zoomFactor - startZoomFactor)\", startZoomFactor + progress * (zoomFactor - startZoomFactor));\r\n this.scaleTo(startZoomFactor + progress * (zoomFactor - startZoomFactor), center, false);\r\n }).bind(this);\r\n\r\n this.animate(this.options.animationDuration, updateProgress, this.swing, () => {\r\n triggerEvent(this.el, this.options.zoomEndEventName);\r\n // console.log(\"finished\", );\r\n if (zoomOutFromLeft) {\r\n this.moveContainer(center, zoomFactor);\r\n }\r\n this.stopAnimation();\r\n this.end();\r\n // if (this.isInsaneOffset(this.offset)) {\r\n // this.sanitizeOffsetAnimation();\r\n // }\r\n this.offset = targetOffset;\r\n // window.clearTimeout(this.mouseDownTimeoutId);\r\n // console.log(\"end zoom\", );\r\n });\r\n } else {\r\n // console.log(\"targetOffset.x\", targetOffset.x);\r\n // if (targetOffset.x > 500) { // magic number to zoom in correct position\r\n // targetOffset.x = targetOffset.x * 1.8 // magic number to zoom in correct position\r\n // }\r\n this.update(targetOffset); // set canvas transform\r\n if (zoomOutFromLeft) {\r\n this.moveContainer(center, zoomFactor);\r\n }\r\n this.scaleTo(zoomFactor, center, false);\r\n this.offset = this.sanitizeOffset(targetOffset);\r\n this.stopAnimation();\r\n this.hasInteraction = false;\r\n this.offset = this.sanitizeOffset(targetOffset);\r\n this.end();\r\n triggerEvent(this.el, this.options.zoomEndEventName);\r\n }\r\n\r\n if (!zoomOutFromLeft) {\r\n this.moveContainer(center, zoomFactor, withFeatureScreen);\r\n }\r\n },\r\n\r\n /**\r\n * removes container and blurres from the co image\r\n * @param withAnimation {boolean}\r\n */\r\n removeContainerScroll: function (withAnimation = false) {\r\n // if (this.coImage) {\r\n // this.coImage.classList.remove(\"blurred\");\r\n // }\r\n this.setContainerTransform(null, withAnimation);\r\n this.containerScrolled = false;\r\n\r\n // if (withAnimation) {\r\n // this.setContainerTransform(null, withAnimation);\r\n // this.containerScrolled = false;\r\n // } else {\r\n // const center = this.getCurrentZoomCenter();\r\n // const updateProgress = (function (progress) {\r\n // this.scaleTo(this.zoomFactor + progress * (1 - this.zoomFactor), center, false);\r\n // }).bind(this);\r\n // this.animate(this.options.animationDuration, updateProgress, this.swing, () => {\r\n // triggerEvent(this.el, this.options.zoomEndEventName);\r\n // this.offset = {x: 0, y: 0};\r\n // this.containerScrolled = false;\r\n // });\r\n // }\r\n\r\n },\r\n\r\n /**\r\n * moves container and blurres the co image\r\n * @param center\r\n * @param zoomFactor\r\n * @param withFeatureScreen {boolean}\r\n */\r\n moveContainer: function (center, zoomFactor, withFeatureScreen) {\r\n // console.log(\"moveContainer center\", center, zoomFactor);\r\n if (zoomFactor === 1 && this.containerScrolled) {\r\n this.removeContainerScroll();\r\n return\r\n }\r\n if (IS_PRODUCT_JOURNEY) {\r\n this.moveGroheContainer(center, zoomFactor, withFeatureScreen);\r\n return;\r\n }\r\n if (center && center.featureX) {\r\n if (center.isMobile) {\r\n // const menuWidth = 316;\r\n // const shiftX = center.clientWidth - (center.clientWidth * center.featureX / 100);\r\n // // console.log(\"shiftX\", shiftX);\r\n // if (shiftX < menuWidth) {\r\n // // if (center.x === center.clientWidth) {\r\n // this.setContainerTransform('translateX(-'+menuWidth+'px)');\r\n // this.containerScrolled = true;\r\n // }\r\n } else if (!center.x) {\r\n const offsetX = center.x === 0 ? 420 : 0;\r\n const percentX = center.clientWidth * center.featureX / 100;\r\n const shiftX = percentX > 420 ? 0 : 420 - percentX;\r\n const offsetY = 0;\r\n const transform2d = 'translate(' + (offsetX + shiftX) + 'px,' + offsetY + 'px)';\r\n this.setContainerTransform(transform2d);\r\n this.containerScrolled = true;\r\n // } else {\r\n // this.removeContainerScroll();\r\n }\r\n } else if (center && !center.isMobile && center.x && this.containerScrolled) {\r\n this.removeContainerScroll();\r\n }\r\n },\r\n\r\n /**\r\n * moves container and blurres the co image (for nav type = grohe)\r\n * @param center\r\n * @param zoomFactor\r\n * @param withFeatureScreen {boolean}\r\n */\r\n moveGroheContainer: function (center, zoomFactor, withFeatureScreen) {\r\n if (center && center.featureX) {\r\n const state = store.getState();\r\n let menuWidth = center.isMobile ? GROHE_CONFIG.sidebarWidth.mobile : GROHE_CONFIG.mainBarWidth.desktop;\r\n if ((state.groheState.similarProductsOpened || state.lookState.lookActiveCategory) && !center.isMobile) {\r\n menuWidth = withFeatureScreen ? menuWidth + GROHE_CONFIG.similarProductsWidth.desktop : GROHE_CONFIG.similarProductsWidth.desktop\r\n }\r\n // console.log(\"shiftX\", shiftX);\r\n // console.log(\"center.featureX\", center.featureX);\r\n if (center.featureX > 20 && (window.innerWidth <= 1920)) { // no need to move container on full hd monitors\r\n // if feature X is less than 20 - it is ok not to scroll anywhere\r\n let translate = 0;\r\n if (center.featureX > 80) {\r\n translate = menuWidth // for the very right positions\r\n } else {\r\n translate = center.featureX * 3.4 // magic number for moving container\r\n if (center.featureX > 70) {\r\n translate = translate + 20; // plus 20 pixels\r\n } else if (center.featureX > 60) {\r\n translate = translate + 50; // plus 50 pixels if more than 60\r\n } else if (center.featureX > 50) {\r\n translate = translate + 80; // plus 80 pixels if between 50 and 70\r\n }\r\n if (translate > menuWidth) {\r\n translate = menuWidth; // just in case we are overscrolling\r\n }\r\n }\r\n this.setContainerTransform('translateX(-' + translate + 'px)', true);\r\n this.containerScrolled = true;\r\n } else if (this.containerScrolled) {\r\n // this.removeContainerScroll(true);\r\n }\r\n } else if (center && !center.isMobile && center.x && this.containerScrolled) {\r\n this.removeContainerScroll(true);\r\n }\r\n },\r\n\r\n /**\r\n * sets container transform position\r\n * @param transform2d\r\n * @param withAnimation {boolean}\r\n */\r\n setContainerTransform: function (transform2d, withAnimation = false) {\r\n // this.elText.innerHTML = 'setContainerTransform' + withAnimation;\r\n\r\n if (transform2d) {\r\n // if (this.coImage && !this.coImage.classList.contains(\"blurred\")) {\r\n // this.coImage.classList.add(\"blurred\");\r\n // }\r\n if (!this.containerScrolled) {\r\n this.containerScrolled = true;\r\n }\r\n }\r\n clearTimeout(this.containerTransition);\r\n if (withAnimation) {\r\n this.container.style.transition = \"all 0.5s ease\";\r\n }\r\n this.container.style.webkitTransform = transform2d;\r\n this.container.style.mozTransform = transform2d;\r\n this.container.style.msTransform = transform2d;\r\n this.container.style.oTransform = transform2d;\r\n this.container.style.transform = transform2d;\r\n if (withAnimation) {\r\n this.containerTransition = setTimeout(() => {\r\n this.container.style.transition = \"none\";\r\n }, 500)\r\n }\r\n },\r\n\r\n /**\r\n * Max / min values for the offset\r\n * @param offset\r\n * @return {Object} the sanitized offset\r\n */\r\n sanitizeOffset: function (offset) {\r\n var maxX = (this.zoomFactor - 1) * this.getContainerX(),\r\n maxY = (this.zoomFactor - 1) * this.getContainerY(),\r\n maxOffsetX = Math.max(maxX, 0),\r\n maxOffsetY = Math.max(maxY, 0),\r\n minOffsetX = Math.min(maxX, 0),\r\n minOffsetY = Math.min(maxY, 0);\r\n\r\n return {\r\n x: sanitizeValue(Math.min(Math.max(offset.x, minOffsetX), maxOffsetX)),\r\n y: sanitizeValue(Math.min(Math.max(offset.y, minOffsetY), maxOffsetY))\r\n };\r\n },\r\n\r\n /**\r\n * Scale to a specific zoom factor (not relative)\r\n * @param zoomFactor\r\n * @param needToMoveContainer {boolean}\r\n * @param center\r\n */\r\n scaleTo: function (zoomFactor, center, needToMoveContainer = true) {\r\n this.scale(zoomFactor / this.zoomFactor, center);\r\n if (needToMoveContainer && zoomFactor === 1) {\r\n this.moveContainer(null, zoomFactor);\r\n }\r\n },\r\n\r\n /**\r\n * Scales the element from specified center\r\n * @param scale\r\n * @param center\r\n */\r\n scale: function (scale, center) {\r\n scale = this.scaleZoomFactor(scale);\r\n this.addOffset({\r\n x: sanitizeValue((scale - 1) * (center.x + this.offset.x)),\r\n y: sanitizeValue((scale - 1) * (center.y + this.offset.y))\r\n });\r\n },\r\n\r\n /**\r\n * Scales the zoom factor relative to current state\r\n * @param scale\r\n * @return the actual scale (can differ because of max min zoom factor)\r\n */\r\n scaleZoomFactor: function (scale) {\r\n var originalZoomFactor = this.zoomFactor;\r\n this.zoomFactor *= scale;\r\n this.zoomFactor = Math.round(Math.min(this.options.maxZoom, Math.max(this.zoomFactor, this.options.minZoom)) * 1000) / 1000;\r\n return this.zoomFactor / originalZoomFactor;\r\n },\r\n\r\n /**\r\n * Drags the element\r\n * @param center\r\n * @param lastCenter\r\n */\r\n drag: function (center, lastCenter) {\r\n if (lastCenter) {\r\n if(this.options.lockDragAxis) {\r\n // lock scroll to position that was changed the most\r\n if(Math.abs(center.x - lastCenter.x) > Math.abs(center.y - lastCenter.y)) {\r\n this.addOffset({\r\n x: -(center.x - lastCenter.x),\r\n y: 0\r\n });\r\n }\r\n else {\r\n this.addOffset({\r\n y: -(center.y - lastCenter.y),\r\n x: 0\r\n });\r\n }\r\n }\r\n else {\r\n this.addOffset({\r\n y: -(center.y - lastCenter.y),\r\n x: -(center.x - lastCenter.x)\r\n });\r\n }\r\n }\r\n },\r\n\r\n /**\r\n * Calculates the touch center of multiple touches\r\n * @param touches\r\n * @return {Object}\r\n */\r\n getTouchCenter: function (touches) {\r\n return this.getVectorAvg(touches);\r\n },\r\n\r\n /**\r\n * Calculates the average of multiple vectors (x, y values)\r\n */\r\n getVectorAvg: function (vectors) {\r\n return {\r\n x: vectors.map(function (v) { return v.x; }).reduce(sum) / vectors.length,\r\n y: vectors.map(function (v) { return v.y; }).reduce(sum) / vectors.length\r\n };\r\n },\r\n\r\n /**\r\n * Adds an offset\r\n * @param offset the offset to add\r\n * @return return true when the offset change was accepted\r\n */\r\n addOffset: function (offset) {\r\n this.offset = {\r\n x: sanitizeValue(this.offset.x + offset.x),\r\n y: sanitizeValue(this.offset.y + offset.y)\r\n };\r\n },\r\n\r\n sanitize: function () {\r\n if (this.zoomFactor < this.options.zoomOutFactor) {\r\n this.zoomOutAnimation();\r\n } else if (this.isInsaneOffset(this.offset)) {\r\n this.sanitizeOffsetAnimation();\r\n }\r\n },\r\n\r\n /**\r\n * Checks if the offset is ok with the current zoom factor\r\n * @param offset\r\n * @return {Boolean}\r\n */\r\n isInsaneOffset: function (offset) {\r\n var sanitizedOffset = this.sanitizeOffset(offset);\r\n return sanitizedOffset.x !== offset.x ||\r\n sanitizedOffset.y !== offset.y;\r\n },\r\n\r\n /**\r\n * Creates an animation moving to a sane offset\r\n */\r\n sanitizeOffsetAnimation: function () {\r\n var targetOffset = this.sanitizeOffset(this.offset),\r\n startOffset = {\r\n x: this.offset.x,\r\n y: this.offset.y\r\n },\r\n updateProgress = (function (progress) {\r\n this.offset.x = sanitizeValue(startOffset.x + progress * (targetOffset.x - startOffset.x));\r\n this.offset.y = sanitizeValue(startOffset.y + progress * (targetOffset.y - startOffset.y));\r\n this.update();\r\n }).bind(this);\r\n\r\n this.animate(\r\n this.options.animationDuration,\r\n updateProgress,\r\n this.swing\r\n );\r\n },\r\n\r\n /**\r\n * Zooms back to the original position,\r\n * (no offset and zoom factor 1)\r\n */\r\n zoomOutAnimation: function () {\r\n var startZoomFactor = this.zoomFactor,\r\n zoomFactor = 1,\r\n center = this.getCurrentZoomCenter(),\r\n updateProgress = (function (progress) {\r\n this.scaleTo(startZoomFactor + progress * (zoomFactor - startZoomFactor), center);\r\n }).bind(this);\r\n\r\n this.animate(\r\n this.options.animationDuration,\r\n updateProgress,\r\n this.swing\r\n );\r\n },\r\n\r\n /**\r\n * Updates the aspect ratio\r\n */\r\n updateAspectRatio: function () {\r\n this.setContainerY(this.getContainerX() / this.getAspectRatio());\r\n },\r\n\r\n /**\r\n * Calculates the initial zoom factor (for the element to fit into the container)\r\n * @return the initial zoom factor\r\n */\r\n getInitialZoomFactor: function () {\r\n return this.container.offsetWidth / this.el.offsetWidth;\r\n },\r\n\r\n /**\r\n * Calculates the aspect ratio of the element\r\n * @return the aspect ratio\r\n */\r\n getAspectRatio: function () {\r\n return this.el.offsetWidth / this.el.offsetHeight;\r\n },\r\n\r\n /**\r\n * Calculates the virtual zoom center for the current offset and zoom factor\r\n * (used for reverse zoom)\r\n * @return {Object} the current zoom center\r\n */\r\n getCurrentZoomCenter: function () {\r\n\r\n // uses following formula to calculate the zoom center x value\r\n // offset_left / offset_right = zoomcenter_x / (container_x - zoomcenter_x)\r\n var length = this.container.offsetWidth * this.zoomFactor,\r\n offsetLeft = this.offset.x,\r\n offsetRight = length - offsetLeft - this.container.offsetWidth,\r\n widthOffsetRatio = offsetLeft / offsetRight,\r\n centerX = widthOffsetRatio * this.container.offsetWidth / (widthOffsetRatio + 1),\r\n\r\n // the same for the zoomcenter y\r\n height = this.container.offsetHeight * this.zoomFactor,\r\n offsetTop = this.offset.y,\r\n offsetBottom = height - offsetTop - this.container.offsetHeight,\r\n heightOffsetRatio = offsetTop / offsetBottom,\r\n centerY = heightOffsetRatio * this.container.offsetHeight / (heightOffsetRatio + 1);\r\n\r\n // prevents division by zero\r\n if (offsetRight === 0) { centerX = this.container.offsetWidth; }\r\n if (offsetBottom === 0) { centerY = this.container.offsetHeight; }\r\n\r\n return {\r\n x: centerX,\r\n y: centerY\r\n };\r\n },\r\n\r\n canDrag: function () {\r\n return !isCloseTo(this.zoomFactor, 1);\r\n },\r\n\r\n /**\r\n * Returns the touches of an event relative to the container offset\r\n * @param event\r\n * @return array touches\r\n */\r\n getTouches: function (event) {\r\n var rect = this.container.getBoundingClientRect();\r\n var posTop = rect.top + document.body.scrollTop;\r\n var posLeft = rect.left + document.body.scrollLeft;\r\n\r\n return Array.prototype.slice.call(event.touches).map(function (touch) {\r\n return {\r\n x: touch.pageX - posLeft,\r\n y: touch.pageY - posTop,\r\n };\r\n });\r\n },\r\n //\r\n // /**\r\n // * Returns the touches of an event relative to the container offset\r\n // * @param event\r\n // * @return array touches\r\n // */\r\n // getMousePosition: function (event, container) {\r\n // var rect = container.getBoundingClientRect();\r\n // var posTop = rect.top + document.body.scrollTop;\r\n // var posLeft = rect.left + document.body.scrollLeft;\r\n //\r\n // return {\r\n // x: event.pageX - posLeft,\r\n // y: event.pageY - posTop,\r\n // };\r\n // },\r\n\r\n /**\r\n * Animation loop\r\n * does not support simultaneous animations\r\n * @param duration\r\n * @param framefn\r\n * @param timefn\r\n * @param callback\r\n */\r\n animate: function (duration, framefn, timefn, callback) {\r\n\r\n let start = performance.now();\r\n this.inAnimation = true;\r\n const _self = this;\r\n\r\n requestAnimationFrame(function animateNew(time) {\r\n // timeFraction изменяется от 0 до 1\r\n if (!_self.inAnimation) { return; }\r\n let timeFraction = (time - start) / duration;\r\n if (timeFraction > 1) timeFraction = 1;\r\n\r\n // вычисление текущего состояния анимации\r\n let progress = timeFraction;\r\n\r\n framefn(progress); // отрисовать её\r\n _self.update();\r\n\r\n if (timeFraction < 1) {\r\n requestAnimationFrame(animateNew);\r\n } else {\r\n framefn(1);\r\n if (callback) {\r\n callback();\r\n }\r\n _self.update();\r\n _self.stopAnimation();\r\n _self.update();\r\n }\r\n });\r\n\r\n // var startTime = new Date().getTime(),\r\n // renderFrame = (function () {\r\n // if (!this.inAnimation) { return; }\r\n // var frameTime = new Date().getTime() - startTime,\r\n // progress = frameTime / duration;\r\n // if (frameTime >= duration) {\r\n // framefn(1);\r\n // if (callback) {\r\n // callback();\r\n // }\r\n // this.update();\r\n // this.stopAnimation();\r\n // this.update();\r\n // } else {\r\n // if (timefn) {\r\n // progress = timefn(progress);\r\n // }\r\n // framefn(progress);\r\n // this.update();\r\n // requestAnimationFrame(renderFrame);\r\n // }\r\n // }).bind(this);\r\n // this.inAnimation = true;\r\n // requestAnimationFrame(renderFrame);\r\n },\r\n\r\n /**\r\n * Stops the animation\r\n */\r\n stopAnimation: function () {\r\n this.inAnimation = false;\r\n },\r\n\r\n /**\r\n * Swing timing function for animations\r\n * @param p\r\n * @return {Number}\r\n */\r\n swing: function (p) {\r\n return -Math.cos(p * Math.PI) / 2 + 0.5;\r\n },\r\n\r\n getContainerX: function () {\r\n return this.container.offsetWidth;\r\n },\r\n\r\n getContainerY: function () {\r\n return this.container.offsetHeight;\r\n },\r\n\r\n setContainerY: function (y) {\r\n return this.container.style.height = y + 'px';\r\n },\r\n\r\n /**\r\n * Creates the expected html structure\r\n */\r\n setupMarkup: function () {\r\n this.container = buildElement('
    ');\r\n this.coImage = document.getElementsByClassName(\"canvas-co-image\")[0];\r\n this.el.parentNode.insertBefore(this.container, this.el);\r\n this.container.appendChild(this.el);\r\n\r\n this.container.style.overflow = 'hidden';\r\n this.container.style.position = 'relative';\r\n\r\n this.el.style.webkitTransformOrigin = '0% 0%';\r\n this.el.style.mozTransformOrigin = '0% 0%';\r\n this.el.style.msTransformOrigin = '0% 0%';\r\n this.el.style.oTransformOrigin = '0% 0%';\r\n this.el.style.transformOrigin = '0% 0%';\r\n\r\n // this.el.style.position = 'absolute';\r\n },\r\n\r\n end: function () {\r\n this.hasInteraction = false;\r\n this.sanitize();\r\n // document.querySelector('.canvas-text').innerHTML = 'update end';\r\n this.update();\r\n },\r\n\r\n /**\r\n * Binds all required event listeners\r\n */\r\n bindEvents: function () {\r\n var self = this;\r\n detectGestures(this.container, this, this.elText);\r\n\r\n window.addEventListener('resize', this.updateCheck.bind(this));\r\n Array.from(this.el.querySelectorAll('img')).forEach(function(imgEl) {\r\n imgEl.addEventListener('load', self.update.bind(self));\r\n });\r\n\r\n if (this.el.nodeName === 'IMG') {\r\n this.el.addEventListener('load', this.update.bind(this));\r\n }\r\n },\r\n\r\n updateCheck: function () {\r\n if (!(window.canvasIsDragging || window.mobileMenuOpened)) {\r\n // document.querySelector('.canvas-text').innerHTML = 'update resize';\r\n this.update();\r\n }\r\n },\r\n\r\n getCanvasTransform: function (targetOffset = this.offset, targetZoomFactor = this.zoomFactor, useNewScale = false) {\r\n // if (useNewScale) {\r\n // debugger;//eslint-disable-line\r\n // }\r\n var zoomFactor = this.getInitialZoomFactor() * targetZoomFactor,\r\n offsetX = -targetOffset.x / zoomFactor,\r\n offsetY = -targetOffset.y / zoomFactor;\r\n if (useNewScale) {\r\n offsetX = offsetX * 1.8 // magic number to zoom in correct position\r\n }\r\n var transform3d = useNewScale\r\n ? 'translate3d(' + (offsetX > 0 ? 0 : offsetX) + 'px,' + offsetY + 'px,0px)' + ' scale3d(' + zoomFactor + ', ' + zoomFactor + ',1)'\r\n : 'scale3d(' + zoomFactor + ', ' + zoomFactor + ',1)' + 'translate3d(' + (offsetX > 0 ? 0 : offsetX) + 'px,' + offsetY + 'px,0px)',\r\n transform2d = useNewScale\r\n ? 'translate(' + (offsetX > 0 ? 0 : offsetX) + 'px,' + offsetY + 'px)' + ' scale(' + zoomFactor + ', ' + zoomFactor + ')'\r\n : 'scale(' + zoomFactor + ', ' + zoomFactor + ') ' + 'translate(' + (offsetX > 0 ? 0 : offsetX) + 'px,' + offsetY + 'px)';\r\n\r\n return {zoomFactor, offsetX, offsetY, transform2d, transform3d}\r\n },\r\n\r\n setCanvasTransform: function (transform2d, transform3d = \"\") {\r\n this.el.style.webkitTransform = transform3d || transform2d;\r\n this.el.style.mozTransform = transform2d;\r\n this.el.style.msTransform = transform2d;\r\n this.el.style.oTransform = transform2d;\r\n this.el.style.transform = transform3d || transform2d;\r\n },\r\n\r\n /**\r\n * Updates the css values according to the current zoom factor and offset\r\n */\r\n update: function (targetOffset = this.offset) {\r\n if (this.updatePlaned || window.canvasIsDragging) {\r\n return;\r\n }\r\n this.updatePlaned = true;\r\n\r\n // document.querySelector('.canvas-text').innerHTML = 'ahahah update';\r\n // document.querySelector('.canvas-text').innerHTML = this.enabled;\r\n\r\n window.setTimeout((function () {\r\n this.updatePlaned = false;\r\n this.updateAspectRatio();\r\n\r\n // this.elText.innerHTML = this.offset.x + \" / \" + this.offset.y;\r\n const isMobile = this.el.dataset.mobile === \"true\";\r\n\r\n var {offsetX, transform2d, transform3d}\r\n = this.getCanvasTransform(targetOffset, this.zoomFactor, true); // new for desktop\r\n\r\n var removeClone = (function () {\r\n if (this.clone) {\r\n this.clone.parentNode.removeChild(this.clone);\r\n delete this.clone;\r\n }\r\n }).bind(this);\r\n\r\n const offsetXForContainer = offsetX / 1.8; // because we increased it in getCanvasTransform func\r\n if (offsetXForContainer > 0 && !interaction && !IS_PRODUCT_JOURNEY) {\r\n const shiftXFromLeft = isMobile ? 2 : 2.5;\r\n const translateX = offsetXForContainer > 10 ? offsetXForContainer * shiftXFromLeft : offsetXForContainer;\r\n this.setContainerTransform('translateX('+(translateX)+'px)');\r\n }\r\n\r\n // Scale 3d and translate3d are faster (at least on ios)\r\n // but they also reduce the quality.\r\n // PinchZoom uses the 3d transformations during interactions\r\n // after interactions it falls back to 2d transformations\r\n if (!this.options.use2d || this.hasInteraction || this.inAnimation) {\r\n this.is3d = true;\r\n removeClone();\r\n this.setCanvasTransform(transform2d, transform3d);\r\n } else {\r\n // When changing from 3d to 2d transform webkit has some glitches.\r\n // To avoid this, a copy of the 3d transformed element is displayed in the\r\n // foreground while the element is converted from 3d to 2d transform\r\n if (this.is3d) {\r\n this.clone = this.el.cloneNode(true);\r\n this.clone.style.pointerEvents = 'none';\r\n this.container.appendChild(this.clone);\r\n window.setTimeout(removeClone, 200);\r\n }\r\n\r\n this.setCanvasTransform(transform2d);\r\n\r\n this.is3d = false;\r\n }\r\n }).bind(this), 0);\r\n },\r\n\r\n /**\r\n * Enables event handling for gestures\r\n */\r\n enable: function() {\r\n this.enabled = true;\r\n },\r\n\r\n /**\r\n * Disables event handling for gestures\r\n */\r\n disable: function() {\r\n this.enabled = false;\r\n },\r\n\r\n /**\r\n * Returns scale\r\n */\r\n getScale: function() {\r\n return this.zoomFactor\r\n },\r\n\r\n reset: function() {\r\n // var currentTranslate = getTranslate(this.el);\r\n // this.elText.innerHTML = JSON.stringify(currentTranslate);\r\n this.zoomFactor = 1;\r\n this.offset = {\r\n x: 0,\r\n y: 0\r\n };\r\n // this.end();\r\n // this.elText.innerHTML = 'reset!';\r\n\r\n },\r\n\r\n imageCanvasScroll: function (canvasClass, removeAllClasses, layoutType) {\r\n\r\n // document.querySelector('.canvas-text').innerHTML = 'imageCanvasScroll ' + canvasClass;\r\n clearTimeout(this.timerId);\r\n if (removeAllClasses) {\r\n window.imageCanvasScroll = true;\r\n this.el.style.transition = 'all 0.5s ease';\r\n this.el.style.WebkitTransition = 'all 0.5s ease';\r\n this.el.style.MozTransition = 'all 0.5s ease';\r\n this.timerId = setTimeout(() => {\r\n if (this.el.style.transition === 'all 0.5s ease') {\r\n this.el.style.transition = 'none';\r\n this.el.style.WebkitTransition = 'none';\r\n this.el.style.MozTransition = 'none';\r\n }\r\n window.imageCanvasScroll = false;\r\n }, 500);\r\n } else {\r\n window.imageCanvasScroll2 = true;\r\n this.el.style.transition = 'all 1.3s cubic-bezier(0.4, 0.01, 0.51, 1)';\r\n this.el.style.WebkitTransition = 'all 1.3s cubic-bezier(0.4, 0.01, 0.51, 1)';\r\n this.el.style.MozTransition = 'all 1.3s cubic-bezier(0.4, 0.01, 0.51, 1)';\r\n this.timerId = setTimeout(() => {\r\n if (this.el.style.transition === 'all 1.3s cubic-bezier(0.4, 0.01, 0.51, 1)') {\r\n this.el.style.transition = 'none';\r\n this.el.style.WebkitTransition = 'none';\r\n this.el.style.MozTransition = 'none';\r\n }\r\n window.imageCanvasScroll2 = false;\r\n }, 1300);\r\n }\r\n\r\n const\r\n zoomFactor = 1,\r\n offsetX = pinchScroll(canvasClass, this.getContainerX(), layoutType),\r\n offsetY = '0';\r\n\r\n const transform2d = 'scale(' + zoomFactor + ', ' + zoomFactor + ') ' +\r\n 'translate(' + offsetX + ',' + offsetY + 'px)';\r\n this.setCanvasTransform(transform2d);\r\n },\r\n\r\n onMouseDown: function (event) {\r\n // console.log(\"mousedown\", );\r\n if (this.zoomFactor > 1) {\r\n this.firstMove = true; // was true\r\n this.mouseDown = [event.pageX, event.pageY];\r\n // this.elText.innerHTML = 'mousedown' + this.mousePos[0] + \"\";\r\n window.touchMove = false;\r\n }\r\n },\r\n onMouseMove: function (event) {\r\n if (this.mouseDown) {\r\n if (this.firstMove) {\r\n this.handleDragStart(event, false);\r\n triggerEvent(window, ActionTypes.REMOVE_GREEN_ZONE_ON_CANVAS);\r\n window.touchMove = true;\r\n this.el.classList.add(\"drag\");\r\n event.stopPropagation();\r\n event.preventDefault();\r\n } else {\r\n this.handleMove(event);\r\n this.update();\r\n }\r\n this.firstMove = false;\r\n }\r\n },\r\n onMouseUp: function (event, lookCanvasClick) {\r\n // console.log(\"mouseup\", );\r\n\r\n if (this.mouseDown) {\r\n const diffX = Math.abs(event.pageX - this.mouseDown[0]);\r\n const diffY = Math.abs(event.pageY - this.mouseDown[1]);\r\n\r\n this.mouseDown = null;\r\n window.touchMove = false;\r\n this.el.classList.remove(\"drag\");\r\n if (this.hasInteraction) {\r\n this.hasInteraction = false\r\n }\r\n\r\n if (diffX < this.options.dragPixelsBeforeClick && diffY < this.options.dragPixelsBeforeClick) {\r\n lookCanvasClick(event); // Click! we moved less than 6 pixels\r\n } else {\r\n // console.log(\"this.handleDragEnd :(\");\r\n // window.clearTimeout(this.mouseDownTimeoutId);\r\n this.handleDragEnd();\r\n }\r\n } else if (lookCanvasClick) {\r\n lookCanvasClick(event)\r\n }\r\n },\r\n\r\n };\r\n\r\n var detectGestures = function (el, target) {\r\n let fingers = 0,\r\n // lastTouchStart = null,\r\n startTouches = null,\r\n\r\n setInteraction = function (newInteraction, event) {\r\n if (interaction !== newInteraction) {\r\n\r\n if (interaction && !newInteraction) {\r\n switch (interaction) {\r\n case \"zoom\":\r\n target.handleZoomEnd(event);\r\n break;\r\n case 'drag':\r\n target.handleDragEnd(event);\r\n break;\r\n }\r\n }\r\n\r\n switch (newInteraction) {\r\n case 'zoom':\r\n target.handleZoomStart(event);\r\n break;\r\n case 'drag':\r\n target.handleDragStart(event);\r\n break;\r\n }\r\n }\r\n interaction = newInteraction;\r\n },\r\n\r\n updateInteraction = function (event) {\r\n if (fingers === 2) {\r\n setInteraction('zoom');\r\n } else if (fingers === 1 && target.canDrag()) {\r\n setInteraction('drag', event);\r\n } else {\r\n setInteraction(null, event);\r\n }\r\n },\r\n\r\n targetTouches = function (touches) {\r\n return Array.from(touches).map(function (touch) {\r\n return {\r\n x: touch.pageX,\r\n y: touch.pageY\r\n };\r\n });\r\n },\r\n\r\n getDistance = function (a, b) {\r\n var x, y;\r\n x = a.x - b.x;\r\n y = a.y - b.y;\r\n return Math.sqrt(x * x + y * y);\r\n },\r\n\r\n calculateScale = function (startTouches, endTouches) {\r\n var startDistance = getDistance(startTouches[0], startTouches[1]),\r\n endDistance = getDistance(endTouches[0], endTouches[1]);\r\n return endDistance / startDistance;\r\n },\r\n\r\n cancelEvent = function (event) {\r\n event.stopPropagation();\r\n event.preventDefault();\r\n },\r\n\r\n // detectDoubleTap = function (event) {\r\n // var time = (new Date()).getTime();\r\n //\r\n // if (fingers > 1) {\r\n // lastTouchStart = null;\r\n // }\r\n //\r\n // if (time - lastTouchStart < 300) {\r\n // cancelEvent(event);\r\n //\r\n // target.handleDoubleTap(event);\r\n // switch (interaction) {\r\n // case \"zoom\":\r\n // target.handleZoomEnd(event);\r\n // break;\r\n // case 'drag':\r\n // target.handleDragEnd(event);\r\n // break;\r\n // }\r\n // }\r\n //\r\n // if (fingers === 1) {\r\n // lastTouchStart = time;\r\n // }\r\n // },\r\n firstMove = true;\r\n\r\n el.addEventListener('touchstart', function (event) {\r\n try {\r\n // target.elText.innerHTML = 'touchstart';\r\n if(target.enabled) {\r\n firstMove = true;\r\n fingers = event.touches.length;\r\n // target.elText.innerHTML = 'touchstart 2 ' + fingers;\r\n\r\n // if (!window.mobileMenuOpened) {\r\n // detectDoubleTap(event);\r\n // }\r\n }\r\n window.touchMove = false;\r\n } catch (e) {\r\n // alert(e)\r\n }\r\n\r\n });\r\n\r\n el.addEventListener('touchmove', function (event) {\r\n try {\r\n if(target.enabled) {\r\n if (firstMove) {\r\n updateInteraction(event);\r\n if (interaction) {\r\n cancelEvent(event);\r\n }\r\n startTouches = targetTouches(event.touches);\r\n } else {\r\n switch (interaction) {\r\n case 'zoom':\r\n target.handleZoom(event, calculateScale(startTouches, targetTouches(event.touches)));\r\n break;\r\n case 'drag':\r\n target.handleDrag(event);\r\n break;\r\n }\r\n if (interaction) {\r\n cancelEvent(event);\r\n target.update();\r\n }\r\n }\r\n\r\n firstMove = false;\r\n }\r\n // target.elText.innerHTML = 'touchmove';\r\n window.touchMove = true;\r\n } catch (e) {\r\n // alert(e)\r\n target.reset();\r\n target.zoomOutAnimation()\r\n }\r\n });\r\n\r\n el.addEventListener('touchend', function (event) {\r\n try {\r\n // target.elText.innerHTML = 'touchend';\r\n window.touchMove = false;\r\n target.stopAnimation();\r\n if (+isCloseTo(target.zoomFactor, 1) && interaction) {\r\n // target.elText.innerHTML = 'touchend 2' + target.zoomFactor;\r\n target.handleDragEnd();\r\n target.reset();\r\n target.zoomOutAnimation()\r\n }\r\n if (target.enabled) {\r\n // target.elText.innerHTML = 'touchend 1' + target.zoomFactor;\r\n fingers = event.touches.length;\r\n updateInteraction(event);\r\n }\r\n } catch (e) {\r\n // alert(e)\r\n target.reset();\r\n target.zoomOutAnimation()\r\n }\r\n });\r\n\r\n };\r\n\r\n return PinchZoom;\r\n};\r\n\r\nvar PinchZoom = definePinchZoom();\r\n\r\nexport default PinchZoom;\r\n","import KitchenZIndex from \"../bvcomponents/kvComponent/core/zIndex\";\r\nimport store from \"../store\";\r\n\r\nexport default function (canvasClass, containerX, layoutType, layoutScene) {\r\n // console.log('canvasClass', canvasClass);\r\n // console.log('layoutType', layoutType);\r\n // console.log('layoutScene', layoutScene);\r\n switch(document.kvConfig.visualizerType) {\r\n case \"Bathroom\":\r\n case \"BV\":\r\n switch (canvasClass) {\r\n case 'shower':\r\n case 'shower-shower':\r\n case 'shower-shower-body':\r\n case 'shower-interior-wall':\r\n case 'shower-shower-walls':\r\n case 'shower-fixture':\r\n case 'shower-shower_head':\r\n case 'shower-shower-head':\r\n case 'shower-floor':\r\n case 'shower-pan':\r\n case 'shower-tub-combo':\r\n case 'shower-shower-door':\r\n case 'shower-shower-door-handle':\r\n case 'shower-handle':\r\n case 'shower-shower-pan':\r\n case 'shower-interior-wall-accent':\r\n case 'shower-shower-walls-accent':\r\n case 'shower-tub-combo-wall-configuration':\r\n case 'shower-tub-combo-shower-door':\r\n case 'shower-tub-combo-handle':\r\n case 'shower-tub-combo-tub-liner':\r\n case 'shower-tub-combo-jetted-tub':\r\n case 'shower-tub-combo-replacement-tub':\r\n case 'shower-tub-combo-walk-in-tub':\r\n case 'shower-tub-combo-fixture':\r\n case 'shower-tub-combo-shower-head':\r\n case 'shower-tub-combo-shower_head':\r\n case 'shower-tub-combo-interior-wall':\r\n case 'shower-tub-combo-interior-wall-accent':\r\n case 'shower-tub-combo-shower-walls':\r\n case 'shower-tub-combo-shower-walls-accent':\r\n case 'shower-tub-combo-pony-wall-cap':\r\n case 'shower-tub-combo-pony-wall-glass':\r\n case 'shower-threshold':\r\n case 'shower-accessories':\r\n case 'shower-accessories-soap-dish':\r\n case 'shower-accessories-large-corner-seat':\r\n case 'shower-accessories-corner-caddie':\r\n case 'shower-accessories-large-corner-caddie':\r\n case 'shower-accessories-small-corner-shelf':\r\n case 'shower-accessories-grab-bar':\r\n return containerX < 680 ? '-38%' : '-33%';\r\n case 'shower-pony-wall':\r\n case 'shower-pony-wall-cap':\r\n case 'shower-pony-wall-glass':\r\n case 'pony-wall':\r\n case 'wall-pony-wall':\r\n if (layoutType === \"Small\") { // small room layout\r\n return containerX < 680 ? '-60%' : '-50%';\r\n } else { // large room layout\r\n return containerX < 680 ? '-38%' : '-33%';\r\n }\r\n case 'window':\r\n case 'wall-c':\r\n case 'wall-wall-c':\r\n return containerX < 680 ? '-60%' : '-50%';\r\n case 'bathtub':\r\n case 'bathtub-bathtub':\r\n case 'bathtub-fixture':\r\n case 'bathtub-base':\r\n case 'bathtub-rim':\r\n case 'bathtub-spa':\r\n if (window.innerWidth < 991) {\r\n window.scrollTo({\r\n top: window.innerHeight,\r\n behavior: \"smooth\"\r\n });\r\n }\r\n return containerX < 680 ? '-60%' : '-50%';\r\n case 'toilet':\r\n case 'toilet-toilet':\r\n return containerX < 680 ? '-18%' : '-14.5%';\r\n case 'left-shower-wall':\r\n case 'wall-left-shower-wall':\r\n if (layoutType === \"Small\") { // small room layout\r\n return containerX < 680 ? '-50%' : '-45%';\r\n } else { // large room layout\r\n return containerX < 680 ? '-22%' : '-18%';\r\n }\r\n case 'right-shower-wall':\r\n case 'wall-right-shower-wall':\r\n if (layoutType === \"Small\") { // small room layout\r\n return containerX < 680 ? '-22%' : '-18%';\r\n } else { // large room layout\r\n return containerX < 680 ? '-50%' : '-45%';\r\n }\r\n case 'floor':\r\n return containerX < 680 ? '-40%' : '-35%';\r\n default:\r\n return \"0\"\r\n }\r\n case \"bvScene\":\r\n case \"bvLook\": {\r\n switch (canvasClass) {\r\n case 'shower':\r\n case 'shower-head':\r\n case 'shower-shower':\r\n case 'shower-shower-body':\r\n case 'shower-interior-wall':\r\n case 'shower-shower-walls':\r\n case 'shower-fixture':\r\n case 'shower-shower_head':\r\n case 'shower-shower-head':\r\n case 'shower-floor':\r\n case 'shower-pan':\r\n case 'shower-tub-combo':\r\n case 'shower-shower-door':\r\n case 'shower-shower-door-handle':\r\n case 'shower-handle':\r\n case 'shower-shower-pan':\r\n case 'shower-interior-wall-accent':\r\n case 'shower-shower-walls-accent':\r\n case 'shower-tub-combo-wall-configuration':\r\n case 'shower-tub-combo-shower-door':\r\n case 'shower-tub-combo-handle':\r\n case 'shower-tub-combo-tub-liner':\r\n case 'shower-tub-combo-jetted-tub':\r\n case 'shower-tub-combo-replacement-tub':\r\n case 'shower-tub-combo-walk-in-tub':\r\n case 'shower-tub-combo-fixture':\r\n case 'shower-tub-combo-shower-head':\r\n case 'shower-tub-combo-shower_head':\r\n case 'shower-tub-combo-interior-wall':\r\n case 'shower-tub-combo-interior-wall-accent':\r\n case 'shower-tub-combo-shower-walls':\r\n case 'shower-tub-combo-shower-walls-accent':\r\n case 'shower-tub-combo-pony-wall-cap':\r\n case 'shower-tub-combo-pony-wall-glass':\r\n case 'shower-threshold':\r\n case 'shower-accessories':\r\n case 'shower-accessories-soap-dish':\r\n case 'shower-accessories-large-corner-seat':\r\n case 'shower-accessories-corner-caddie':\r\n case 'shower-accessories-large-corner-caddie':\r\n case 'shower-accessories-small-corner-shelf':\r\n case 'shower-accessories-grab-bar':\r\n case 'shower-pony-wall':\r\n case 'shower-pony-wall-cap':\r\n case 'shower-pony-wall-glass':\r\n case 'pony-wall':\r\n case 'wall-pony-wall':\r\n if (layoutType === \"Layout4\") { // small room layout\r\n return containerX < 680 ? '-40%' : '-23%';\r\n } else { // large room layout\r\n return \"0\";\r\n }\r\n case 'window':\r\n case 'wall-c':\r\n case 'wall-wall-c':\r\n case 'right-wall':\r\n return containerX < 680 ? '-60%' : '-50%';\r\n case 'bathtub':\r\n case 'bathtub-bathtub':\r\n case 'bathtub-fixture':\r\n case 'bathtub-base':\r\n case 'bathtub-rim':\r\n case 'bathtub-spa':\r\n if (window.innerWidth < 991) {\r\n window.scrollTo({\r\n top: window.innerHeight,\r\n behavior: \"smooth\"\r\n });\r\n }\r\n return containerX < 680 ? '-60%' : '-50%';\r\n case 'toilet':\r\n case 'toilet-toilet': {\r\n switch (layoutType) {\r\n case \"Layout1\":\r\n return containerX < 680 ? '-18%' : '-14.5%';\r\n default:\r\n break;\r\n }\r\n break;\r\n }\r\n case 'left-shower-wall':\r\n case 'wall-left-shower-wall':\r\n if (layoutType === \"Small\") { // small room layout\r\n return containerX < 680 ? '-50%' : '-45%';\r\n } else { // large room layout\r\n return containerX < 680 ? '-22%' : '-18%';\r\n }\r\n case 'right-shower-wall':\r\n case 'wall-right-shower-wall':\r\n if (layoutType === \"Small\") { // small room layout\r\n return containerX < 680 ? '-22%' : '-18%';\r\n } else { // large room layout\r\n return containerX < 680 ? '-50%' : '-45%';\r\n }\r\n case 'floor':\r\n return containerX < 680 ? '-22%' : '-18%';\r\n default:\r\n return \"0\"\r\n }\r\n return \"0\"\r\n }\r\n case \"Kitchen\":\r\n case \"KV\":\r\n switch (canvasClass) {\r\n //APPLIANCE\r\n case 'hood':\r\n case 'microwave':\r\n case 'range':\r\n case 'appliance-hood':\r\n case 'appliance-range':\r\n case 'appliance-microwave':\r\n return containerX < 680 ? '-39%' : '-37%';\r\n case 'dishwasher':\r\n case 'appliance-dishwasher':\r\n return containerX < 680 ? '-23%' : '-20%';\r\n case 'fridge':\r\n case 'appliance-fridge':\r\n switch (layoutType) {\r\n case \"Small\":\r\n case \"SmallWithPeninsula\":\r\n case \"SmallWithIsland\":\r\n case \"SmallWithPeninsulaWithIsland\":\r\n return containerX < 680 ? '-15%' : '-13%';\r\n default:\r\n return \"0\";\r\n }\r\n //CABINET\r\n case \"cabinet\":\r\n case \"top-cabinet\":\r\n case \"cabinet-top-cabinet\":\r\n case \"handle\":\r\n case \"cabinet-top-handle\":\r\n case \"cabinet-bottom-handle\":\r\n case \"crown-molding\":\r\n case \"cabinet-crown-molding\":\r\n case 'bottom-cabinet':\r\n case 'cabinet-bottom-cabinet': {\r\n if (document.hoveredLayer\r\n && (document.hoveredLayer.zIndex === KitchenZIndex.layouts[layoutType].Cabinet.Peninsula)\r\n && window.innerWidth < 991) {\r\n window.scrollTo({\r\n top: window.innerHeight,\r\n behavior: \"smooth\"\r\n });\r\n }\r\n const module = store.getState().navigationState.moduleContextMenuModule;\r\n // console.log('module', module);\r\n switch (module) {\r\n case \"1\":\r\n case \"2\":\r\n case \"3\":\r\n return \"0\";\r\n case \"4\":\r\n return containerX < 680 ? '-19%' : '-17%';\r\n case \"5\":\r\n return containerX < 680 ? '-27%' : '-25%';\r\n case \"6\":\r\n return containerX < 680 ? '-43%' : '-40%';\r\n case null:\r\n default:\r\n return containerX < 680 ? '-60%' : '-50%';\r\n }\r\n }\r\n //CENTER ISLAND\r\n case 'center-island':\r\n case 'center-island-countertop':\r\n case 'center-island-edge':\r\n case 'center-island-cabinet':\r\n case 'center-island-sink':\r\n case 'center-island-faucet':\r\n return containerX < 680 ? '-22%' : '-18%';\r\n case 'chairs':\r\n case 'center-island-chairs':\r\n return containerX < 680 ? '-5%' : '-4%';\r\n case 'center-island-handle':\r\n return containerX < 680 ? '-27%' : '-25%';\r\n //COUNTERTOP\r\n case 'countertop-countertop':\r\n case 'countertop-edge-profile':\r\n case 'countertop-sink':\r\n case 'countertop-faucet':\r\n return containerX < 680 ? '-60%' : '-50%';\r\n case 'countertop':\r\n if (document.hoveredLayer) {\r\n switch (document.hoveredLayer.zIndex) {\r\n case KitchenZIndex.layouts[layoutType].CenterIsland.Countertop:\r\n return containerX < 680 ? '-22%' : '-18%';\r\n case KitchenZIndex.layouts[layoutType].CountertopGroup.Countertop2:\r\n return containerX < 680 ? '-60%' : '-50%';\r\n case KitchenZIndex.layouts[layoutType].CountertopGroup.Countertop:\r\n return containerX < 680 ? '-15%' : '-13%';\r\n default:\r\n return \"0\"\r\n }\r\n }\r\n return \"0\";\r\n case 'faucet':\r\n if (document.hoveredLayer && document.hoveredLayer.zIndex === KitchenZIndex.layouts[layoutType].CenterIsland.Faucet) {\r\n return containerX < 680 ? '-22%' : '-18%';\r\n } else {\r\n return containerX < 680 ? '-60%' : '-50%';\r\n }\r\n case 'sink':\r\n if (document.hoveredLayer && document.hoveredLayer.zIndex === KitchenZIndex.layouts[layoutType].CenterIsland.Sink) {\r\n return containerX < 680 ? '-22%' : '-18%';\r\n } else {\r\n return containerX < 680 ? '-60%' : '-50%';\r\n }\r\n //WALLS\r\n case \"backsplash\":\r\n case \"walls-backsplash\":\r\n case \"ceiling\":\r\n case \"walls-ceiling\":\r\n return containerX < 680 ? '-15%' : '-13%';\r\n case \"right-wall\":\r\n case \"walls-right-wall\":\r\n return containerX < 680 ? '-37%' : '-35%';\r\n default:\r\n return \"0\"\r\n }\r\n case \"kvScene\":\r\n switch(layoutType) {\r\n case \"Layout1\": {\r\n switch (layoutScene) {\r\n case \"1\": {\r\n switch (canvasClass) {\r\n //CENTER ISLAND\r\n case 'center-island':\r\n case 'center-island-countertop':\r\n case 'center-island-island-countertop':\r\n case 'center-island-stovetop':\r\n case 'center-island-edge':\r\n case 'center-island-cabinet':\r\n case 'center-island-sink':\r\n case 'center-island-faucet':\r\n case 'centerisland':\r\n case 'centerisland-countertop':\r\n case 'centerisland-island-countertop':\r\n case 'centerisland-stovetop':\r\n case 'centerisland-edge':\r\n case 'centerisland-cabinet':\r\n case 'centerisland-sink':\r\n case 'centerisland-faucet':\r\n return containerX < 680 ? '-30%' : '-23%';\r\n case 'chairs':\r\n case 'centerisland-chairs':\r\n case 'centerisland-handle':\r\n case 'centerisland-island-hood':\r\n return containerX < 680 ? '-35%' : '-30%';\r\n case 'faucet':\r\n case 'countertop-faucet':\r\n case 'sink':\r\n case 'countertop-sink':\r\n return containerX < 680 ? '-15%' : '-10%';\r\n case 'walls-right-wall':\r\n return containerX < 680 ? '-40%' : '-32%';\r\n case 'walls-center-wall':\r\n return containerX < 680 ? '-48%' : '-44%';\r\n case 'walls-front-wall':\r\n return '-50%';\r\n default:\r\n return \"0\"\r\n }\r\n }\r\n case \"2\": {\r\n switch (canvasClass) {\r\n //CENTER ISLAND\r\n case 'center-island':\r\n case 'center-island-countertop':\r\n case 'center-island-island-countertop':\r\n case 'center-island-stovetop':\r\n case 'center-island-edge':\r\n case 'center-island-cabinet':\r\n case 'center-island-sink':\r\n case 'center-island-faucet':\r\n case 'centerisland':\r\n case 'centerisland-countertop':\r\n case 'centerisland-island-countertop':\r\n case 'centerisland-stovetop':\r\n case 'centerisland-edge':\r\n case 'centerisland-cabinet':\r\n case 'centerisland-sink':\r\n case 'centerisland-faucet':\r\n return containerX < 680 ? '-30%' : '-23%';\r\n case 'chairs':\r\n case 'centerisland-chairs':\r\n case 'centerisland-handle':\r\n case 'centerisland-island-hood':\r\n return containerX < 680 ? '-35%' : '-30%';\r\n case 'faucet':\r\n case 'countertop-faucet':\r\n case 'sink':\r\n case 'countertop-sink':\r\n return containerX < 680 ? '-15%' : '-10%';\r\n case 'walls-center-wall':\r\n return containerX < 680 ? '-48%' : '-44%';\r\n case 'walls-front-wall':\r\n case 'walls-right-wall':\r\n return '-50%';\r\n default:\r\n return \"0\"\r\n }\r\n }\r\n case \"3\": {\r\n switch (canvasClass) {\r\n //CENTER ISLAND\r\n case 'center-island':\r\n case 'center-island-countertop':\r\n case 'center-island-island-countertop':\r\n case 'center-island-stovetop':\r\n case 'center-island-edge':\r\n case 'center-island-cabinet':\r\n case 'center-island-sink':\r\n case 'center-island-faucet':\r\n case 'centerisland':\r\n case 'centerisland-countertop':\r\n case 'centerisland-island-countertop':\r\n case 'centerisland-stovetop':\r\n case 'centerisland-edge':\r\n case 'centerisland-cabinet':\r\n case 'centerisland-sink':\r\n case 'centerisland-faucet':\r\n case 'appliances-hood':\r\n case 'appliances-stove':\r\n case 'appliances-stovetop':\r\n case 'walls-backsplash':\r\n return containerX < 680 ? '-30%' : '-23%';\r\n case 'appliances-dishwasher':\r\n return containerX < 680 ? '-35%' : '-30%';\r\n case 'faucet':\r\n case 'countertop-faucet':\r\n case 'sink':\r\n case 'countertop-sink':\r\n case 'walls-right-wall':\r\n case 'countertop-edge-profile':\r\n case 'countertop-countertop':\r\n return '-50%';\r\n default:\r\n return \"0\"\r\n }\r\n }\r\n default:\r\n return \"0\"\r\n }\r\n }\r\n case \"Layout2\": {\r\n switch (canvasClass) {\r\n //CENTER ISLAND\r\n case 'faucet':\r\n case 'countertop-faucet':\r\n case 'sink':\r\n case 'countertop-sink':\r\n case 'countertop-edge-profile':\r\n case 'walls-front-wall':\r\n case 'countertop-countertop':\r\n case 'walls-backsplash':\r\n return containerX < 680 ? '-25%' : '-20%';\r\n case 'appliances-hood':\r\n case 'appliances-stove':\r\n case 'appliances-oven':\r\n return containerX < 680 ? '-45%' : '-37%';\r\n case 'walls-center-wall':\r\n return containerX < 680 ? '-48%' : '-44%';\r\n case 'walls-right-wall':\r\n case 'appliances-fridge':\r\n case 'appliances-fridge-enclosure':\r\n return '-50%';\r\n default:\r\n return \"0\"\r\n }\r\n }\r\n case \"Layout3\": {\r\n switch (canvasClass) {\r\n //CENTER ISLAND\r\n case 'faucet':\r\n case 'countertop-faucet':\r\n case 'sink':\r\n case 'countertop-sink':\r\n case 'countertop-edge-profile':\r\n case 'walls-front-wall':\r\n case 'countertop-countertop':\r\n case 'walls-backsplash':\r\n return containerX < 680 ? '-25%' : '-20%';\r\n case 'appliances-hood':\r\n case 'appliances-stove':\r\n case 'appliances-oven':\r\n return containerX < 680 ? '-18%' : '-15%';\r\n case 'center-island':\r\n case 'center-island-countertop':\r\n case 'center-island-island-countertop':\r\n case 'center-island-stovetop':\r\n case 'center-island-edge':\r\n case 'center-island-cabinet':\r\n case 'center-island-sink':\r\n case 'center-island-faucet':\r\n case 'centerisland':\r\n case 'centerisland-countertop':\r\n case 'centerisland-island-countertop':\r\n case 'centerisland-stovetop':\r\n case 'centerisland-edge':\r\n case 'centerisland-cabinet':\r\n case 'centerisland-sink':\r\n case 'centerisland-faucet':\r\n return '-50%';\r\n default:\r\n return \"0\"\r\n }\r\n }\r\n default:\r\n return \"0\"\r\n }\r\n default:\r\n return \"0\"\r\n }\r\n}\r\n","import orderBy from \"lodash/orderBy\";\r\n\r\nimport {getCurrentRoomType} from \"../appLayout\";\r\nimport {LOOK_ROOM_TYPES} from \"../look/core/constants\";\r\n\r\nexport const getLayerPartToRender = (layerHovering, hoveredLayerIndex, layers) => {\r\n return {\r\n zIndex: layers[hoveredLayerIndex].zIndex,\r\n cropCoords: layers[hoveredLayerIndex].cropCoords,\r\n coords: layers[hoveredLayerIndex].coords,\r\n image: layerHovering.greenImage,\r\n layerDimensions: layerHovering.layerDimensions,\r\n partId: layerHovering.layer.partId || \"\",\r\n isGreenHovering: true,\r\n hoveringImage: layerHovering.hoveringImage,\r\n }\r\n}\r\n\r\nexport const checkForLayerParts = (imageCanvasComponent, layers, hoveredLayerIndex, layerHovering, allLayers) => {\r\n // 1) add new Green Layer\r\n layers.splice(hoveredLayerIndex + 1, 0, getLayerPartToRender(layerHovering, hoveredLayerIndex, layers));\r\n\r\n // 2) Check if it needs additional Part\r\n // console.log(\"layerHovering\", layerHovering);\r\n // console.log(\"layersHoverings\", layersHoverings);\r\n switch (document.kvConfig.visualizerType) {\r\n case \"Bathroom\":\r\n case \"BV\": {\r\n const ShowerBodyIndexes = imageCanvasComponent.props.layout.zIndexes[imageCanvasComponent.props.layoutType].Shower.Steam60in.Body;\r\n const ShowerIndexes = imageCanvasComponent.props.layout.zIndexes[imageCanvasComponent.props.layoutType].Shower.Custom60in;\r\n if (layerHovering.layer.zIndex === ShowerBodyIndexes[\"1\"] || layerHovering.layer.zIndex === ShowerBodyIndexes[\"2\"]) {\r\n\r\n const missingBodyPart = layerHovering.layer.zIndex === ShowerBodyIndexes[\"1\"] ? \"2\" : \"1\";\r\n\r\n const layerHovering2 = imageCanvasComponent.state.layersHoverings.find((layersHoveringItem) => {\r\n return layersHoveringItem.layer.zIndex === ShowerBodyIndexes[missingBodyPart]\r\n });\r\n const hoveredLayerIndex = layers.findIndex((layer) => {\r\n return layer.zIndex === layerHovering2.layer.zIndex\r\n });\r\n\r\n layers.splice(hoveredLayerIndex + 1, 0, {\r\n zIndex: ShowerBodyIndexes[missingBodyPart],\r\n image: layerHovering2.greenImage,\r\n layerDimensions: layerHovering2.layerDimensions,\r\n isGreenHovering: true,\r\n hoveringImage: layerHovering2.hoveringImage,\r\n });\r\n }\r\n if (layerHovering.layer.zIndex === ShowerIndexes.Wall || layerHovering.layer.zIndex === ShowerIndexes.Wall2\r\n || layerHovering.layer.zIndex === ShowerIndexes.WallAccent || layerHovering.layer.zIndex === ShowerIndexes.WallAccent2) {\r\n let missingZIndex = 0;\r\n if (layerHovering.layer.zIndex === ShowerIndexes.Wall || layerHovering.layer.zIndex === ShowerIndexes.Wall2) {\r\n missingZIndex = layerHovering.layer.zIndex === ShowerIndexes.Wall ? ShowerIndexes.Wall2 : ShowerIndexes.Wall;\r\n }\r\n if (layerHovering.layer.zIndex === ShowerIndexes.WallAccent || layerHovering.layer.zIndex === ShowerIndexes.WallAccent2) {\r\n missingZIndex = layerHovering.layer.zIndex === ShowerIndexes.WallAccent ? ShowerIndexes.WallAccent2 : ShowerIndexes.WallAccent;\r\n }\r\n const layerHovering2 = imageCanvasComponent.state.layersHoverings.find((layersHoveringItem) => {\r\n return layersHoveringItem.layer.zIndex === missingZIndex\r\n });\r\n if (layerHovering2) {\r\n const hoveredLayerIndex = layers.findIndex((layer) => {\r\n return layer.zIndex === layerHovering2.layer.zIndex\r\n });\r\n layers.splice(hoveredLayerIndex + 1, 0, {\r\n zIndex: missingZIndex,\r\n image: layerHovering2.greenImage,\r\n layerDimensions: layerHovering2.layerDimensions,\r\n isGreenHovering: true,\r\n hoveringImage: layerHovering2.hoveringImage,\r\n });\r\n }\r\n }\r\n break;\r\n }\r\n case \"bvScene\": {\r\n // const CabinetIndexes = imageCanvasComponent.props.layout.zIndexes[imageCanvasComponent.props.layoutType].Cabinet;\r\n let missingZindex = 0;\r\n let missingZindex2 = 0;\r\n // switch(layerHovering.layer.zIndex) {\r\n // case CabinetIndexes[\"CrownMolding\"]:\r\n // missingZindex = CabinetIndexes[\"CrownMolding2\"];\r\n // break;\r\n // }\r\n if (missingZindex) {\r\n const layerHovering2 = imageCanvasComponent.state.layersHoverings.find((layersHoveringItem) => {\r\n return layersHoveringItem.layer.zIndex === missingZindex\r\n });\r\n const hoveredLayerIndex2 = layers.findIndex((layer) => {\r\n return layer.zIndex === missingZindex\r\n });\r\n if (layerHovering2 && hoveredLayerIndex2) {\r\n layers.splice(hoveredLayerIndex2 + 1, 0, {\r\n zIndex: missingZindex,\r\n image: layerHovering2.greenImage,\r\n layerDimensions: layerHovering2.layerDimensions,\r\n isGreenHovering: true,\r\n hoveringImage: layerHovering2.hoveringImage,\r\n });\r\n }\r\n }\r\n if (missingZindex2) {\r\n const layerHovering3 = imageCanvasComponent.state.layersHoverings.find((layersHoveringItem) => {\r\n return layersHoveringItem.layer.zIndex === missingZindex2\r\n });\r\n const hoveredLayerIndex3 = layers.findIndex((layer) => {\r\n return layer.zIndex === missingZindex2\r\n });\r\n if (layerHovering3 && hoveredLayerIndex3) {\r\n layers.splice(hoveredLayerIndex3 + 1, 0, {\r\n zIndex: missingZindex2,\r\n image: layerHovering3.greenImage,\r\n layerDimensions: layerHovering3.layerDimensions,\r\n isGreenHovering: true,\r\n hoveringImage: layerHovering3.hoveringImage,\r\n });\r\n }\r\n }\r\n break;\r\n }\r\n case \"Kitchen\": {\r\n const CabinetIndexes = imageCanvasComponent.props.layout.zIndexes[imageCanvasComponent.props.layoutType].Cabinet;\r\n const CountertopGroupIndexes = imageCanvasComponent.props.layout.zIndexes[imageCanvasComponent.props.layoutType].CountertopGroup;\r\n let missingZindex = 0;\r\n let missingZindex2 = 0;\r\n switch(layerHovering.layer.zIndex) {\r\n case CabinetIndexes[\"TopCabinet\"]:\r\n missingZindex = CabinetIndexes[\"TopCabinet2\"];\r\n break;\r\n case CabinetIndexes[\"TopCabinet2\"]:\r\n missingZindex = CabinetIndexes[\"TopCabinet\"];\r\n break;\r\n case CabinetIndexes[\"BottomCabinet\"]:\r\n missingZindex = CabinetIndexes[\"BottomCabinet2\"];\r\n missingZindex2 = CabinetIndexes[\"Peninsula\"];\r\n break;\r\n case CabinetIndexes[\"BottomCabinet2\"]:\r\n missingZindex = CabinetIndexes[\"BottomCabinet\"];\r\n missingZindex2 = CabinetIndexes[\"Peninsula\"];\r\n break;\r\n case CabinetIndexes[\"Peninsula\"]:\r\n missingZindex = CabinetIndexes[\"BottomCabinet\"];\r\n missingZindex2 = CabinetIndexes[\"BottomCabinet2\"];\r\n break;\r\n case CabinetIndexes[\"CrownMolding\"]:\r\n missingZindex = CabinetIndexes[\"CrownMolding2\"];\r\n break;\r\n case CabinetIndexes[\"CrownMolding2\"]:\r\n missingZindex = CabinetIndexes[\"CrownMolding\"];\r\n break;\r\n case CountertopGroupIndexes[\"Countertop\"]:\r\n missingZindex = CountertopGroupIndexes[\"Countertop2\"];\r\n break;\r\n case CountertopGroupIndexes[\"Countertop2\"]:\r\n missingZindex = CountertopGroupIndexes[\"Countertop\"];\r\n break;\r\n case CabinetIndexes[\"TopHandle\"]:\r\n missingZindex = CabinetIndexes[\"TopHandle2\"];\r\n break;\r\n case CabinetIndexes[\"TopHandle2\"]:\r\n missingZindex = CabinetIndexes[\"TopHandle\"];\r\n break;\r\n case CabinetIndexes[\"BottomHandle\"]:\r\n missingZindex = CabinetIndexes[\"BottomHandle2\"];\r\n break;\r\n case CabinetIndexes[\"BottomHandle2\"]:\r\n missingZindex = CabinetIndexes[\"BottomHandle\"];\r\n break;\r\n }\r\n if (missingZindex) {\r\n const layerHovering2 = imageCanvasComponent.state.layersHoverings.find((layersHoveringItem) => {\r\n return layersHoveringItem.layer.zIndex === missingZindex\r\n });\r\n const hoveredLayerIndex2 = layers.findIndex((layer) => {\r\n return layer.zIndex === missingZindex\r\n });\r\n if (layerHovering2 && hoveredLayerIndex2) {\r\n layers.splice(hoveredLayerIndex2 + 1, 0, {\r\n zIndex: missingZindex,\r\n image: layerHovering2.greenImage,\r\n layerDimensions: layerHovering2.layerDimensions,\r\n isGreenHovering: true,\r\n hoveringImage: layerHovering2.hoveringImage,\r\n });\r\n }\r\n }\r\n if (missingZindex2) {\r\n const layerHovering3 = imageCanvasComponent.state.layersHoverings.find((layersHoveringItem) => {\r\n return layersHoveringItem.layer.zIndex === missingZindex2\r\n });\r\n const hoveredLayerIndex3 = layers.findIndex((layer) => {\r\n return layer.zIndex === missingZindex2\r\n });\r\n if (layerHovering3 && hoveredLayerIndex3) {\r\n layers.splice(hoveredLayerIndex3 + 1, 0, {\r\n zIndex: missingZindex2,\r\n image: layerHovering3.greenImage,\r\n layerDimensions: layerHovering3.layerDimensions,\r\n isGreenHovering: true,\r\n hoveringImage: layerHovering3.hoveringImage,\r\n });\r\n }\r\n }\r\n break;\r\n }\r\n case \"kvMaster\": {\r\n // 2) Check if it needs additional Part\r\n const CabinetIndexes = imageCanvasComponent.props.layout.zIndexes[imageCanvasComponent.props.layoutType].Cabinet;\r\n const CountertopGroupIndexes = imageCanvasComponent.props.layout.zIndexes[imageCanvasComponent.props.layoutType].CountertopGroup;\r\n let missingZindex = 0;\r\n let missingZindex2 = 0;\r\n switch(layerHovering.layer.zIndex) {\r\n case CabinetIndexes[\"TopCabinet\"]:\r\n missingZindex = CabinetIndexes[\"TopCabinet2\"];\r\n break;\r\n case CabinetIndexes[\"TopCabinet2\"]:\r\n missingZindex = CabinetIndexes[\"TopCabinet\"];\r\n break;\r\n case CabinetIndexes[\"BottomCabinet\"]:\r\n missingZindex = CabinetIndexes[\"BottomCabinet2\"];\r\n missingZindex2 = CabinetIndexes[\"Peninsula\"];\r\n break;\r\n case CabinetIndexes[\"BottomCabinet2\"]:\r\n missingZindex = CabinetIndexes[\"BottomCabinet\"];\r\n missingZindex2 = CabinetIndexes[\"Peninsula\"];\r\n break;\r\n case CabinetIndexes[\"Peninsula\"]:\r\n missingZindex = CabinetIndexes[\"BottomCabinet\"];\r\n missingZindex2 = CabinetIndexes[\"BottomCabinet2\"];\r\n break;\r\n case CabinetIndexes[\"CrownMolding\"]:\r\n missingZindex = CabinetIndexes[\"CrownMolding2\"];\r\n break;\r\n case CabinetIndexes[\"CrownMolding2\"]:\r\n missingZindex = CabinetIndexes[\"CrownMolding\"];\r\n break;\r\n case CountertopGroupIndexes[\"Countertop\"]:\r\n missingZindex = CountertopGroupIndexes[\"Countertop2\"];\r\n break;\r\n case CountertopGroupIndexes[\"Countertop2\"]:\r\n missingZindex = CountertopGroupIndexes[\"Countertop\"];\r\n break;\r\n case CabinetIndexes[\"TopHandle\"]:\r\n missingZindex = CabinetIndexes[\"TopHandle2\"];\r\n break;\r\n case CabinetIndexes[\"TopHandle2\"]:\r\n missingZindex = CabinetIndexes[\"TopHandle\"];\r\n break;\r\n case CabinetIndexes[\"BottomHandle\"]:\r\n missingZindex = CabinetIndexes[\"BottomHandle2\"];\r\n break;\r\n case CabinetIndexes[\"BottomHandle2\"]:\r\n missingZindex = CabinetIndexes[\"BottomHandle\"];\r\n break;\r\n }\r\n if (missingZindex) {\r\n const layerHovering2 = imageCanvasComponent.state.layersHoverings.find((layersHoveringItem) => {\r\n return layersHoveringItem.layer.zIndex === missingZindex\r\n });\r\n const hoveredLayerIndex2 = layers.findIndex((layer) => {\r\n return layer.zIndex === missingZindex\r\n });\r\n if (layerHovering2 && hoveredLayerIndex2) {\r\n layers.splice(hoveredLayerIndex2 + 1, 0, {\r\n zIndex: missingZindex,\r\n image: layerHovering2.greenImage,\r\n layerDimensions: layerHovering2.layerDimensions,\r\n isGreenHovering: true,\r\n hoveringImage: layerHovering2.hoveringImage,\r\n });\r\n }\r\n }\r\n if (missingZindex2) {\r\n const layerHovering3 = imageCanvasComponent.state.layersHoverings.find((layersHoveringItem) => {\r\n return layersHoveringItem.layer.zIndex === missingZindex2\r\n });\r\n const hoveredLayerIndex3 = layers.findIndex((layer) => {\r\n return layer.zIndex === missingZindex2\r\n });\r\n if (layerHovering3 && hoveredLayerIndex3) {\r\n layers.splice(hoveredLayerIndex3 + 1, 0, {\r\n zIndex: missingZindex2,\r\n image: layerHovering3.greenImage,\r\n layerDimensions: layerHovering3.layerDimensions,\r\n isGreenHovering: true,\r\n hoveringImage: layerHovering3.hoveringImage,\r\n });\r\n }\r\n }\r\n break;\r\n }\r\n case \"kvScene\":\r\n case \"bvLook\":\r\n case \"LaundryRoom\":\r\n case \"Laundryroom\":\r\n case \"laundryroom\":\r\n case \"laundryRoom\": {\r\n let needToCheck = false;\r\n if (document.kvConfig.visualizerType === \"kvScene\") {\r\n const withParts = [\"countertop\", \"top_cabinet\", \"bottom_cabinet\", \"handle\", \"crown_molding\",\r\n \"top_handle\", \"bottom_handle\", \"door_handle\", \"drawer_handle\"];\r\n needToCheck = withParts.includes(layerHovering.layer.partId);\r\n } else if (document.kvConfig.visualizerType === \"bvLook\") {\r\n needToCheck = getCurrentRoomType() === LOOK_ROOM_TYPES.as && layerHovering.layer.partId.includes(\"vanity_\");\r\n } else {\r\n const withParts = [\"slat_wall\", \"bottom_cabinet\", \"tall_cabinet\"];\r\n needToCheck = withParts.includes(layerHovering.layer.partId);\r\n }\r\n if (!needToCheck && !allLayers) {\r\n break;\r\n }\r\n imageCanvasComponent.state.layersHoverings.forEach(layerHov => {\r\n if (layerHov.layer.partId === layerHovering.layer.partId && (layerHov.layer.zIndex !== layerHovering.layer.zIndex)) {\r\n layers.push({\r\n zIndex: layerHov.layer.zIndex,\r\n cropCoords: layerHov.layer.cropCoords,\r\n image: layerHov.greenImage,\r\n layerDimensions: layerHov.layerDimensions,\r\n coords: layerHov.layer.coords || null,\r\n partId: layerHov.layer.partId || \"\",\r\n isGreenHovering: true,\r\n hoveringImage: layerHov.hoveringImage,\r\n });\r\n }\r\n });\r\n return orderBy(layers, ['zIndex'], ['desc']);\r\n }\r\n default:\r\n break;\r\n }\r\n\r\n return layers;\r\n};\r\n","import {Part} from \"./part\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport {BathTubType, bathTubTypeToString, LayoutType} from \"../constants\";\r\nimport {bathTubThumbnail} from \"../assets\";\r\n\r\nimport BathTubBody from \"../subparts/bathTub/bathTubBody\";\r\nimport BathTubBase from \"../subparts/bathTub/bathTubBase\";\r\nimport BathTubFixture from \"../subparts/bathTub/bathTubFixture\";\r\nimport BathTubRim from \"../subparts/bathTub/bathTubRim\";\r\nimport BathTubSpa from \"../subparts/bathTub/bathTubSpa\";\r\nimport BathTubTowelRack from \"../subparts/bathTub/bathTubTowelRack\";\r\n\r\nexport class Bathtub extends Part {\r\n static id = 'Bathtub';\r\n\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Bathtub';\r\n this.translateId = \"visualizer.bathroom.bathtub\";\r\n this.partThumbnail = bathTubThumbnail;\r\n this.activeSubType_ = BathTubType.FreeStanding;\r\n this.bathTubBody = null;\r\n this.towelRack = null;\r\n this.bathtubRim = null;\r\n this.bathTubBase = null;\r\n this.bathTubFixture = null;\r\n this.bathTubSpa = null;\r\n this.relatedItems = [];\r\n this.bathTubType_ = BathTubType.FreeStanding;\r\n }\r\n\r\n load(dbFeature) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Bathtub\":\r\n relatedItemName = \"bathTubBody\";\r\n RelatedItemClass = BathTubBody;\r\n break;\r\n case \"Fixture\":\r\n relatedItemName = \"bathTubFixture\";\r\n RelatedItemClass = BathTubFixture;\r\n break;\r\n case \"BathtubBase\":\r\n relatedItemName = \"bathTubBase\";\r\n RelatedItemClass = BathTubBase;\r\n break;\r\n case \"Bathtub - Spa\":\r\n relatedItemName = \"bathTubSpa\";\r\n RelatedItemClass = BathTubSpa;\r\n break;\r\n case \"BathtubRim\":\r\n relatedItemName = \"bathtubRim\";\r\n RelatedItemClass = BathTubRim;\r\n break;\r\n case \"Towel Rack\":\r\n relatedItemName = \"towelRack\";\r\n RelatedItemClass = BathTubTowelRack;\r\n break;\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n changeLayout(layoutType) {\r\n if (layoutType === LayoutType.Small) {\r\n // this.activeSubType_ = BathTubType.Custom60in;\r\n // this.bathTubType_ = BathTubType.Custom60in;\r\n if (!this.layout.parts.Shower.showerBody.disabled) { // disable bathtub if shower is active\r\n if (this.bathTubBody) {\r\n this.bathTubBody.disabled = true;\r\n }\r\n if (this.bathTubBase) {\r\n this.bathTubBase.disabled = true;\r\n this.bathTubBase.disabledClick();\r\n }\r\n }\r\n } else {\r\n if (this.bathTubBody) {\r\n this.bathTubBody.disabled = false;\r\n }\r\n if (this.bathTubBase) {\r\n this.bathTubBase.disabled = false;\r\n this.bathTubBase.disabledClick();\r\n }\r\n }\r\n }\r\n\r\n setLayers(layout, placeholdersNeeded) {\r\n const layers = [];\r\n this.getRelatedItems().forEach(relatedItem => {\r\n relatedItem.setLayers(layout);\r\n (placeholdersNeeded && !relatedItem.placeholderChanged && relatedItem.placeholderFeature)\r\n ? relatedItem.placeholderFeature.layer.addTo(layers)\r\n : relatedItem.activeFeature && relatedItem.activeFeature.layer.addTo(layers)\r\n });\r\n\r\n return layers;\r\n }\r\n\r\n navigationItem() {\r\n return new DesignNavigationItem('Bathtub', this)\r\n }\r\n\r\n subTypes() {\r\n return (this.bathTubBody && this.bathTubBase\r\n && this.bathTubBody.features.some(feature => feature.partName && !feature.partName.includes(\"laceholder\"))\r\n && this.bathTubBase.features.some(feature => feature.partName && !feature.partName.includes(\"laceholder\"))\r\n ) ? [\r\n BathTubType.Custom60in,\r\n BathTubType.FreeStanding\r\n ] : [];\r\n }\r\n\r\n subTypeToString(subType) {\r\n return bathTubTypeToString(subType);\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return true;\r\n }\r\n\r\n getRelatedItems() {\r\n return this.relatedItems.filter(item => item.visible.includes(this.bathTubType_))\r\n .sort((a, b) => a.partName !== b.partName ? a.partName < b.partName ? -1 : 1 : 0); // sort by partName\r\n }\r\n\r\n subParts() {\r\n return this.getRelatedItems().map(_ => new DesignNavigationItem(_.partName, _));\r\n }\r\n\r\n setDefault(layout) {\r\n this.getRelatedItems().forEach(relatedItem => relatedItem.setDefault(layout));\r\n }\r\n\r\n handleSubPartClick() {}\r\n\r\n handleSubTypeClick(subType) {\r\n this.bathTubType_ = subType;\r\n this.activeSubType_ = subType; // BathTubType.Custom60in or BathTubType.FreeStanding\r\n this.bathTubFixture.disabled = (this.activeSubType_=== BathTubType.Custom60in)\r\n ? this.bathTubBase.disabled\r\n : this.bathTubBody.disabled\r\n }\r\n\r\n setDefaultPartAfterSubTypeClick() {\r\n // return (this.bathTubType_ === BathTubType.Custom60in) ? this.subParts()[0] : null\r\n return this.subParts()[0]\r\n }\r\n\r\n activeSubType() {\r\n return this.activeSubType_;\r\n }\r\n\r\n getFixtureType() {\r\n if (this.activeSubType_ === BathTubType.FreeStanding && this.bathTubBody && this.bathTubBody.activeFeature) {\r\n return this.bathTubBody.activeFeature.metaData[\"Fixture\"]\r\n }\r\n return [\"All\"]\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport {BathTubType, LayoutType, ShowerComboTubType} from \"../../constants\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\nimport DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\n\r\nexport default class BathTubBody extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'bathtub';\r\n this.partName = 'Bathtub';\r\n this.translateId = \"visualizer.bathroom.bathtub.bathtub\";\r\n this.homePageTitle = 'Bathtubs';\r\n this.visible = [BathTubType.FreeStanding];\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n // return super.load_(dbFeature, this, false);\r\n const feature = this.load_(dbFeature, new BathTubBody());\r\n if (feature) {\r\n BathTubBody.setAdditionalMetaData(feature);\r\n }\r\n }\r\n\r\n static setAdditionalMetaData(feature) {\r\n if (!feature.metaData[\"Fixture\"]) {\r\n feature.metaData[\"Fixture\"] = [\"All\"];\r\n }\r\n if (!feature.metaData[\"CompatibleTub\"]) {\r\n feature.metaData[\"CompatibleTub\"] = [\"All\"];\r\n }\r\n }\r\n\r\n disabledClick() {\r\n const bathTubFixture = this.getParent().bathTubFixture;\r\n if (bathTubFixture) {\r\n bathTubFixture.disabled = this.disabled;\r\n }\r\n const bathtubParent = this.getParent();\r\n if (bathtubParent.layout.type === LayoutType.Small && !this.disabled) { // switch off all shower features\r\n const showerBody = bathtubParent.layout.parts.Shower.showerBody;\r\n if (showerBody) {\r\n showerBody.disabled = true;\r\n showerBody.disabledClick();\r\n }\r\n const comboPart = bathtubParent.layout.parts[ShowerTubCombo.id];\r\n if (comboPart) {\r\n comboPart.showerTubComboIsActive = false;\r\n }\r\n }\r\n }\r\n\r\n handleClick() {\r\n const bathTubParent = this.getParent().getParent();\r\n bathTubParent.bathTubType_ = BathTubType.FreeStanding;\r\n bathTubParent.activeSubType_ = BathTubType.FreeStanding;\r\n super.handleClick();\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n setLayers(layout) {\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n const showerTubCombo = this.getParent().layout.parts[ShowerTubCombo.id];\r\n const compatibleTubValue = (showerTubCombo.showerTubComboIsActive && showerTubCombo.bottomTub === ShowerComboTubType.walk_in_tub)\r\n ? [\"All\"]\r\n : [\"All\", \"WalkInTub\"];\r\n return [{\r\n propName: 'CompatibleTub',\r\n propValue: compatibleTubValue\r\n }];\r\n }\r\n\r\n setDefault(layout) {\r\n const filteredFeatures = this.features.filter(f => f.matchesMetaForArrayOfConditions(this.getArrayOfConditions()));\r\n if (!super.tryToSetTheSameFeature(filteredFeatures)) {\r\n const hardCodedDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"Kingston Elegance 258GRA\");\r\n });\r\n const placeholderDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"laceholder\");\r\n });\r\n this.activeFeature = hardCodedDefault || super.setDefault(layout) || filteredFeatures[0];\r\n this.placeholderFeature = placeholderDefault || null;\r\n }\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.BathTub.FreeStanding.Base;\r\n }\r\n if(zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndexes.BathTub.FreeStanding.Base;\r\n }\r\n }\r\n}\r\n","import TubCommon from \"./tubCommon\";\r\n\r\nexport default class BathTubLiner extends TubCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = \"bathtub_liner\";\r\n this.bottomTubId = \"bathtub_liner\";\r\n this.visible = true;\r\n this.partName = \"Tub Liner\";\r\n this.translateId = \"visualizer.bathroom.shower_tub_combo.bathtub_liner\";\r\n this.dbName = \"Bathtub Liner\";\r\n this.isStoneFeature = false;\r\n this.disableOnHomeSections = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new BathTubLiner());\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Shower.TubCombo.Liner;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n}\r\n","import TubCommon from \"./tubCommon\";\r\n\r\nexport default class ReplacementTub extends TubCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'replacement_tub';\r\n this.bottomTubId = \"replacement_tub\";\r\n this.visible = true;\r\n this.partName = 'Replacement Tub';\r\n this.translateId = \"visualizer.bathroom.shower_tub_combo.replacement_tub\";\r\n this.isStoneFeature = false;\r\n this.disableOnHomeSections = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new ReplacementTub());\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Shower.TubCombo.ReplacementTub;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n}\r\n","import TubCommon from \"./tubCommon\";\r\n\r\nexport default class WalkInTub extends TubCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'walk_in_tub';\r\n this.bottomTubId = \"walk_in_tub\";\r\n this.visible = true;\r\n this.partName = 'Walk In Tub';\r\n this.translateId = \"visualizer.bathroom.shower_tub_combo.walk_in_tub\";\r\n this.isStoneFeature = false;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new WalkInTub());\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Shower.TubCombo.WalkInTub;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n\r\n getFeatureByPartName(partName) {\r\n if (!partName) {\r\n return null\r\n }\r\n let walkInTubType = null;\r\n const possibleWalkInTubTypes = [\" AMD\", \" BSC\", \" WH\"];\r\n for (let i = 0; i < possibleWalkInTubTypes.length; i++) {\r\n if (partName.includes(possibleWalkInTubTypes[i])) {\r\n walkInTubType = possibleWalkInTubTypes[i];\r\n break;\r\n }\r\n }\r\n if (walkInTubType) {\r\n partName = partName.split(walkInTubType).join(\"\");\r\n }\r\n partName = partName.toLowerCase();\r\n if (partName[partName.length-1] === \"r\") {\r\n partName = partName.slice(0, partName.length-1);\r\n }\r\n return this.features.find(feature => {\r\n if (!feature.partName) {\r\n return false\r\n }\r\n let featurePartName = feature.partName;\r\n if (walkInTubType) {\r\n featurePartName = featurePartName.split(walkInTubType).join(\"\");\r\n }\r\n featurePartName = featurePartName.toLowerCase();\r\n if (featurePartName[featurePartName.length-1] === \"r\") {\r\n featurePartName = featurePartName.slice(0, featurePartName.length-1);\r\n }\r\n return partName === featurePartName\r\n });\r\n }\r\n\r\n}\r\n","import TubCommon from \"./tubCommon\";\r\n\r\nexport default class JettedTub extends TubCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'jetted_tub';\r\n this.bottomTubId = \"jetted_tub\";\r\n this.visible = true;\r\n this.partName = 'Jetted Tub';\r\n this.translateId = \"visualizer.bathroom.shower_tub_combo.jetted_tub\";\r\n this.isStoneFeature = false;\r\n this.disableOnHomeSections = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new JettedTub());\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Shower.TubCombo.JettedTub;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../parts/intermediatePart\";\r\n\r\nexport default class WallConfiguration extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'wall_configuration';\r\n this.partName = 'Wall Configuration';\r\n this.translateId = \"visualizer.bathroom.shower_tub_combo.wall_configuration\";\r\n this.visible = true;\r\n this.isStoneFeature = false;\r\n this.disableOnHomeSections = true;\r\n this.createdManually = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new WallConfiguration())\r\n }\r\n\r\n // setLayers(layout) {\r\n // this.activeFeature = this.features.find((feature) => {\r\n // return feature.partName === this.getParent().showerBody.activeFeature.partName // set the same glass as Body\r\n // });\r\n // return super.setLayers(layout);\r\n // }\r\n\r\n handleClick() {\r\n super.handleClick();\r\n const showerTubComboParent = this.getParent().getParent();\r\n showerTubComboParent.setShowerTubCombo();\r\n showerTubComboParent.setShowerSize(this.leftShowerWallType, this.showerComboSize);\r\n this.featureClicked();\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Shower.TubCombo.WallConfiguration;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport {BathTubType, LayoutType} from \"../../constants\";\r\n\r\nexport default class BathTubBase extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'bathtub_base';\r\n this.visible = [BathTubType.Custom60in];\r\n this.partName = 'Base';\r\n this.translateId = \"visualizer.bathroom.bathtub.bathtub_base\";\r\n this.dbName = 'BathtubBase';\r\n this.homePageTitle = 'Bathtubs';\r\n this.canBeDisabled = true;\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new BathTubBase());\r\n }\r\n\r\n disabledClick() {\r\n const bathtubParent = this.getParent();\r\n [bathtubParent.bathtubRim, bathtubParent.bathTubSpa, bathtubParent.bathTubFixture].forEach(subPart => {\r\n if (subPart) {\r\n subPart.disabled = this.disabled;\r\n }\r\n });\r\n if (bathtubParent.layout.type === LayoutType.Small && !this.disabled) { // switch off all shower features\r\n bathtubParent.layout.parts.Shower.showerBody.disabled = true;\r\n bathtubParent.layout.parts.Shower.showerBody.disabledClick();\r\n }\r\n }\r\n\r\n setDefault(layout) {\r\n const filteredFeatures = this.features;\r\n if (!super.tryToSetTheSameFeature(filteredFeatures)) {\r\n const sameStoneAsWalls = this.getParent().layout.parts.Walls.wallA.activeFeature\r\n && this.getParent().layout.parts.Walls.wallA.activeFeature.partName;\r\n const hardCodedDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(sameStoneAsWalls || \"Sahara Autumn Porcelain Tile\");\r\n });\r\n const placeholderDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"laceholder\");\r\n });\r\n this.activeFeature = hardCodedDefault || super.setDefault(layout) || filteredFeatures[0];\r\n this.placeholderFeature = placeholderDefault || super.setDefault(layout) || null;\r\n }\r\n }\r\n\r\n handleClick() {\r\n const bathtubParent = this.getParent().getParent();\r\n bathtubParent.bathTubType_ = BathTubType.Custom60in;\r\n bathtubParent.activeSubType_ = BathTubType.Custom60in;\r\n super.handleClick();\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.getParent().activeSubType() === BathTubType.Custom60in) {\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.BathTub.Custom60in.Base;\r\n }\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndexes.BathTub.Custom60in.Base;\r\n }\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport {BathTubType, LayoutType} from \"../../constants\";\r\nimport store from \"../../../../../store\";\r\nimport DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\n\r\nexport default class BathTubFixture extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = \"bathtub_fixture\";\r\n this.translateId = \"visualizer.bathroom.bathtub.bathtub_fixture\";\r\n this.visible = [BathTubType.Custom60in, BathTubType.FreeStanding];\r\n this.partName = 'Fixture';\r\n this.homePageTitle = 'Bathtub Fixtures';\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n const feature = this.load_(dbFeature, new BathTubFixture());\r\n if (feature) {\r\n BathTubFixture.setAdditionalMetaData(feature);\r\n }\r\n }\r\n\r\n static setAdditionalMetaData(feature) {\r\n feature.metaData[\"Fixture\"] = [\"All\"];\r\n }\r\n\r\n disabledClick() {\r\n const bathTubBody = this.getParent().bathTubBody;\r\n if (bathTubBody && bathTubBody.disabled && !this.disabled) {\r\n bathTubBody.disabled = false;\r\n }\r\n const bathtubParent = this.getParent();\r\n if (bathtubParent.layout.type === LayoutType.Small && !this.disabled) { // switch off all shower features\r\n const showerBody = bathtubParent.layout.parts.Shower.showerBody;\r\n if (showerBody) {\r\n showerBody.disabled = true;\r\n showerBody.disabledClick();\r\n }\r\n const comboPart = bathtubParent.layout.parts[ShowerTubCombo.id];\r\n if (comboPart) {\r\n comboPart.showerTubComboIsActive = false;\r\n }\r\n }\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n let activeSubType = \"\";\r\n switch (this.getParent().activeSubType()) {\r\n case BathTubType.Custom60in:\r\n activeSubType = \"Custom60in\";\r\n break;\r\n case BathTubType.FreeStanding:\r\n activeSubType = \"FreeStanding\";\r\n break;\r\n }\r\n let floorMount = false;\r\n if (zIndexes && this.activeFeature) {\r\n const filterGroups = store.getState().filterState.filterGroups;\r\n const placeTypeGroup = filterGroups.find(filterGroup => filterGroup.name === \"PlaceType\");\r\n if (placeTypeGroup) {\r\n const featurePlaceTypeValue = this.activeFeature.dbFeature.filterValueIDs[placeTypeGroup.id];\r\n if (featurePlaceTypeValue && featurePlaceTypeValue.length) {\r\n const currentValue = placeTypeGroup.values.find(filterValue => filterValue.id === featurePlaceTypeValue[0]);\r\n if (currentValue && currentValue.value === \"FloorMount\") {\r\n floorMount = true;\r\n }\r\n }\r\n }\r\n floorMount\r\n ? this.activeFeature.layer.zIndex = zIndexes.BathTub[activeSubType].FixtureFloorMount\r\n : this.activeFeature.layer.zIndex = zIndexes.BathTub[activeSubType].Fixture\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n floorMount\r\n ? this.placeholderFeature.layer.zIndex = zIndexes.BathTub[activeSubType].FixtureFloorMount\r\n : this.placeholderFeature.layer.zIndex = zIndexes.BathTub[activeSubType].Fixture\r\n }\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n setLayers(layout) {\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n return [{\r\n propName: 'Fixture',\r\n propValue: this.getParent().getFixtureType()\r\n }];\r\n }\r\n\r\n setDefault(layout) {\r\n const filteredFeatures = this.features.filter(f => f.matchesMetaForArrayOfConditions(this.getArrayOfConditions()));\r\n if (!super.tryToSetTheSameFeature(filteredFeatures)) {\r\n const hardCodedDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"Sahara Autumn Porcelain Tile\");\r\n });\r\n const placeholderDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"laceholder\");\r\n });\r\n this.activeFeature = hardCodedDefault || super.setDefault(layout) || filteredFeatures[0];\r\n this.placeholderFeature = placeholderDefault || null;\r\n }\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport {BathTubType} from \"../../constants\";\r\n\r\nexport default class BathTubRim extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'bathtub_rim';\r\n this.translateId = \"visualizer.bathroom.bathtub.bathtub_rim\";\r\n this.visible = [BathTubType.Custom60in];\r\n this.partName = 'Rim';\r\n this.dbName = \"BathtubRim\";\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new BathTubRim());\r\n }\r\n\r\n disabledClick() {\r\n if (this.disabled) {\r\n this.getParent().bathTubBase.disabled = true;\r\n } else {\r\n this.getParent().bathTubBase.disabled = false;\r\n }\r\n }\r\n\r\n handleClick() {\r\n const bathtubParent = this.getParent().getParent();\r\n bathtubParent.bathTubType_ = BathTubType.Custom60in;\r\n bathtubParent.activeSubType_ = BathTubType.Custom60in;\r\n super.handleClick();\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n // if (layout.type === LayoutType.Large) {\r\n // if (this.getParent().activeSubType() === BathTubType.Custom60in) {\r\n // this.activeFeature.layer.zIndex = Z.layouts.Large.BathTub.Custom60in.Top;\r\n // }\r\n // } else {\r\n // Exception.NotImplemented();\r\n // }\r\n if (zIndexes && this.getParent().activeSubType() === BathTubType.Custom60in) {\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.BathTub.Custom60in.Top;\r\n }\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndexes.BathTub.Custom60in.Top;\r\n }\r\n }\r\n }\r\n\r\n setDefault(layout) {\r\n const filteredFeatures = this.features;\r\n if (!super.tryToSetTheSameFeature(filteredFeatures)) {\r\n const hardCodedDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"Sahara Autumn Porcelain Tile\");\r\n });\r\n const placeholderDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"laceholder\");\r\n });\r\n this.activeFeature = hardCodedDefault || super.setDefault(layout) || filteredFeatures[0];\r\n this.placeholderFeature = placeholderDefault || super.setDefault(layout) || null;\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport {BathTubType} from \"../../constants\";\r\n\r\nexport default class BathTubSpa extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'bathtub_spa';\r\n this.translateId = \"visualizer.bathroom.bathtub.bathtub_spa\";\r\n this.partName = 'Spa';\r\n this.visible = [BathTubType.Custom60in];\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new BathTubSpa());\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.BathTub.Custom60in.Spa;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndexes.BathTub.Custom60in.Spa;\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../parts/intermediatePart\";\r\n\r\nexport default class BathTubTowelRack extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'bathtub_towel_rack';\r\n this.translateId = \"visualizer.bathroom.bathtub.bathtub_towel_rack\";\r\n this.partName = 'Towel Rack';\r\n this.visible = [];\r\n // this.visible = [BathTubType.Custom60in, BathTubType.FreeStanding];\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new BathTubTowelRack());\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n // if (layout.type === LayoutType.Large) {\r\n // this.activeFeature.layer.zIndex = Z.layouts.Large.Towel_Rack;\r\n // } else {\r\n // Exception.NotImplemented();\r\n // }\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Towel_Rack;\r\n }\r\n }\r\n}\r\n","import {Part} from \"./part\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport {floorThumbnail} from \"../assets\";\r\n\r\nimport {IntermediatePart} from \"./intermediatePart\";\r\n\r\nexport default class Floor extends Part {\r\n static id = 'Floor';\r\n\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n this.partId = 'bathroom_floor';\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Floor';\r\n this.homePageTitle = 'Flooring';\r\n this.translateId = \"visualizer.bathroom.floor\";\r\n this.partThumbnail = floorThumbnail;\r\n }\r\n\r\n load(dbFeature) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Floor\":\r\n relatedItemName = \"floorBody\";\r\n RelatedItemClass = FloorBody;\r\n break;\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n if (relatedItemName !== \"shadows\") {\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n navigationItem() {\r\n return new DesignNavigationItem('Floor', this)\r\n }\r\n\r\n setLayers(layout, placeholdersNeeded) {\r\n const layers = [];\r\n this.getRelatedItems().forEach(relatedItem => {\r\n relatedItem.setLayers(layout);\r\n (placeholdersNeeded && !relatedItem.placeholderChanged && relatedItem.placeholderFeature)\r\n ? relatedItem.placeholderFeature.layer.addTo(layers)\r\n : relatedItem.activeFeature && relatedItem.activeFeature.layer.addTo(layers)\r\n });\r\n\r\n return layers;\r\n }\r\n}\r\n\r\nclass FloorBody extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.isStoneFeature = true;\r\n this.partId = 'bathroom_floor';\r\n this.partName = 'Floor';\r\n this.translateId = \"visualizer.bathroom.floor\";\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new FloorBody());\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Floor;\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../parts/intermediatePart\";\r\n\r\nexport default class CompleteVanity extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'vanity';\r\n this.partName = 'Vanity';\r\n this.translateId = \"visualizer.bathroom.vanity.vanity\";\r\n this.homePageTitle = 'Complete Vanities';\r\n this.visible = true;\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new CompleteVanity());\r\n }\r\n\r\n setDefault(layout) {\r\n const availableCompleteFeatures = this.features.filter(feature => {\r\n return feature.metaData[\"Vanity\"] && feature.metaData[\"Vanity\"].includes(\"Complete\")\r\n });\r\n const hardCodedDefault = this.features.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"Buffalo Complete Sand 987SANBLK17VK24\");\r\n });\r\n // const placeholderDefault =\r\n // (\r\n // this.getParent().pedestalSink\r\n // && this.getParent().pedestalSink.features\r\n // && this.getParent().pedestalSink.features.length\r\n // && this.getParent().pedestalSink.features.find((feature) => +feature.vanitySize === 24 && feature.dbFeature.displayName.includes(\"laceholder\"))\r\n // ) || this.features.find((feature) => {\r\n // return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"Placeholder S\");\r\n // });\r\n const placeholderDefault = this.features.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"Placeholder S\");\r\n });\r\n // console.log('this.features', this.features);\r\n // console.log('placeholderDefault', placeholderDefault);\r\n this.activeFeature = hardCodedDefault || super.setDefault(layout) || availableCompleteFeatures[0];\r\n this.placeholderFeature = placeholderDefault || super.setDefault(layout) || null;\r\n }\r\n\r\n // setLayers(layout) {\r\n // // const s3Binding = find(this.dbFeature.s3Bindings, {entityID: this.featureDefinitionId(this)});\r\n // if (!this.activeFeature) {\r\n // this.setDefault(layout);\r\n // }\r\n //\r\n // let s3Binding = find(this.activeFeature.dbFeature.s3Bindings, {\r\n // entityID: this.getParent().featureDefinitionId(this),\r\n // layout: layout.getCurrentLayoutAbbreviation()\r\n // });\r\n // if (!s3Binding) {\r\n // s3Binding = find(this.activeFeature.dbFeature.s3Bindings, {entityID: this.featureDefinitionId(this)});\r\n // }\r\n // this.activeFeature.layer.fromS3Binding(s3Binding);\r\n // }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Vanity.Complete.Cabinet;\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndexes.Vanity.Complete.Cabinet;\r\n }\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport {Vanity} from \"../../parts/vanity\";\r\nimport DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\n\r\nexport default class VanityHandle extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'vanity_handle';\r\n this.partName = 'Handle';\r\n this.translateId = \"visualizer.bathroom.vanity.vanity_handle\";\r\n this.dbName = \"Vanity Handle\";\r\n this.visible = [Vanity.Types.Custom];\r\n this.canBeDisabled = false;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new VanityHandle())\r\n }\r\n\r\n disabledClick() {\r\n this.getParent().toggleVanityParts(this.disabled);\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n getArrayOfConditions() {\r\n const counterTopSize = this.getParent().counterTopSize();\r\n return [{\r\n propName: 'VanitySize',\r\n propValue: counterTopSize\r\n }];\r\n }\r\n\r\n getAvailableFeatures() {\r\n return this.features && this.features.filter(f => f.matchesMetaForCondition('VanitySize', this.getParent().counterTopSize())) || [];\r\n }\r\n\r\n setDefault(layout) {\r\n const filteredFeatures = this.getAvailableFeatures();\r\n if (!super.tryToSetTheSameFeature(filteredFeatures)) {\r\n const hardCodedDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"Aliveri\");\r\n });\r\n const placeholderDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"laceholder\");\r\n });\r\n this.activeFeature = hardCodedDefault || super.setDefault(layout) || filteredFeatures[0];\r\n this.placeholderFeature = placeholderDefault || null;\r\n }\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const vanityPedestal = this.getParent().pedestalSink;\r\n if (vanityPedestal && vanityPedestal.activeFeature) {\r\n const handleMeta = vanityPedestal.activeFeature.metaData[\"VanityHandle\"];\r\n const hardCodedWizardConditions = vanityPedestal.activeFeature.partName.includes(\"WizardPlaceholder\") &&\r\n (\r\n vanityPedestal.activeFeature.partName.includes(\"WizardPlaceholder52 in36 S\")\r\n || (handleMeta && handleMeta.includes(\"true\")) // WizardPlaceholder QC Liberty\r\n );\r\n if (handleMeta && handleMeta.includes(\"None\") || hardCodedWizardConditions) {\r\n super.hideLayers();\r\n return;\r\n }\r\n }\r\n\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.getParent().activeSubType_ === Vanity.Types.Custom) {\r\n const zIndex = zIndexes.Vanity.Custom.Handle;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport {Vanity} from \"../../parts/vanity\";\r\nimport store from \"../../../../../store\";\r\nimport {Layout} from \"../../layout\";\r\n\r\nexport default class VanityPedestal extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'vanity_cabinet';\r\n this.partName = 'Cabinet';\r\n this.translateId = \"visualizer.bathroom.vanity.vanity_cabinet\";\r\n this.dbName = \"Vanity\";\r\n this.homePageTitle = 'Vanity Bases';\r\n this.visible = [Vanity.Types.Custom];\r\n this.canBeDisabled = true;\r\n this.canUseWizard = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new VanityPedestal())\r\n }\r\n\r\n // navigationSubItems() {\r\n // return super.navigationSubItemsWithFilter('VanitySize', this.getParent().counterTopSize());\r\n // }\r\n\r\n disabledClick() {\r\n this.getParent().toggleVanityParts(this.disabled);\r\n }\r\n\r\n setActiveFeatureByFilter(filterName, filterValue) {\r\n\r\n // console.log('filterName', filterName);\r\n // console.log('filterValue', filterValue);\r\n\r\n const filterGroups = store.getState().filterState.filterGroups;\r\n const group = filterGroups.find(group => group.name === filterName);\r\n const groupId = group.id;\r\n const filterValueId = Layout.getfilterValueIdByValue(groupId, filterValue);\r\n const filteredFeatures = this.features.filter(\r\n feature => feature.dbFeature && feature.dbFeature.filterValueIDs[groupId] && feature.dbFeature.filterValueIDs[groupId].includes(filterValueId)\r\n ); // find among all features only those, who have filter with value === props size\r\n if (!super.tryToSetTheSameFeature(filteredFeatures, null, \"ustom\")) {\r\n this.activeFeature = filteredFeatures[0];\r\n const placeholderAvailableFeatures = filteredFeatures.filter(feature => {\r\n return feature.dbFeature.displayName.includes(\"laceholder\") && feature.dbFeature.displayName.includes(\"ustom\")\r\n });\r\n this.placeholderFeature = placeholderAvailableFeatures[0];\r\n }\r\n }\r\n\r\n // getAvailableFeatures() {\r\n // return this.features.filter(f => f.vanitySize+'in' === this.getParent().counterTopSize());\r\n // }\r\n\r\n setDefault(layout) {\r\n super.setDefault(layout);\r\n const hardCodedDefault = this.features.find((feature) => {\r\n return +feature.vanitySize === 48\r\n });\r\n this.activeFeature = hardCodedDefault || super.setDefault(layout);\r\n this.placeholderFeature = this.features.find((feature) => {\r\n return +feature.vanitySize === 48\r\n && feature.dbFeature.displayName\r\n && feature.dbFeature.displayName.includes(\"laceholder\")\r\n && feature.dbFeature.displayName.includes(\"ustom\")\r\n }) || null;\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Vanity.Custom.Cabinet;\r\n }\r\n if(zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndexes.Vanity.Custom.Cabinet;\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport {Vanity} from \"../../parts/vanity\";\r\nimport DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\nimport uniqBy from \"lodash/uniqBy\";\r\n\r\nexport default class VanityCountertop extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'vanity_countertop';\r\n this.partName = 'Countertop';\r\n this.translateId = \"visualizer.bathroom.vanity.vanity_countertop\";\r\n this.homePageTitle = 'Countertops';\r\n this.visible = [Vanity.Types.Custom];\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new VanityCountertop())\r\n }\r\n\r\n disabledClick() {\r\n this.getParent().toggleVanityParts(this.disabled);\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n // return super.navigationSubItemsWithFilter('CountertopSize', this.getParent().counterTopSize(), filteredAvailableFeatures);\r\n let counterTopsAvailable = filteredAvailableFeatures.filter(feature => {\r\n return feature.matchesMetaForCondition('CountertopSize', this.getParent().counterTopSize())\r\n })\r\n return uniqBy(counterTopsAvailable, (feature) => feature.dbFeature.id)\r\n .map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n setDefault(layout) {\r\n const counterTopSize = this.getParent().counterTopSize();\r\n const filteredFeatures = this.features && this.features.filter(f => f.matchesMetaForCondition('CountertopSize', counterTopSize)) || [];\r\n if (!super.tryToSetTheSameFeature(filteredFeatures)) {\r\n const hardCodedDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"Aliveri\");\r\n });\r\n const placeholderDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"laceholder\");\r\n });\r\n this.activeFeature = hardCodedDefault || super.setDefault(layout) || filteredFeatures[0];\r\n this.placeholderFeature = placeholderDefault || super.setDefault(layout) || null;\r\n }\r\n }\r\n\r\n setLayers(layout) {\r\n const counterTopSize = this.getParent().counterTopSize();\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForCondition('CountertopSize', counterTopSize)\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault(layout);\r\n return super.setLayers(layout);\r\n\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.getParent().activeSubType_ === Vanity.Types.Custom) {\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Vanity.Custom.CounterTop;\r\n }\r\n if(this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndexes.Vanity.Custom.CounterTop;\r\n }\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport {Vanity} from \"../../parts/vanity\";\r\n\r\nexport default class LightingFixture extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'vanity_lightning_fixture';\r\n this.partName = 'Lighting Fixture';\r\n this.visible = [Vanity.Types.Complete, Vanity.Types.Custom];\r\n }\r\n\r\n setZIndex() {\r\n console.log('layout');\r\n }\r\n}","import {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport {Vanity} from \"../../parts/vanity\";\r\n\r\nexport default class VanityBacksplash extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'vanity_backsplash';\r\n this.partName = 'Backsplash';\r\n this.translateId = \"visualizer.bathroom.vanity.vanity_backsplash\";\r\n this.dbName = 'Backsplash';\r\n this.visible = [Vanity.Types.Custom];\r\n this.canBeDisabled = true;\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new VanityBacksplash())\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n return super.navigationSubItemsWithFilter('CountertopSize', this.getParent().counterTopSize(), filteredAvailableFeatures);\r\n }\r\n\r\n setDefault(layout) {\r\n const counterTopSize = this.getParent().counterTopSize();\r\n const filteredFeatures = this.features && this.features.filter(f => f.matchesMetaForCondition('CountertopSize', counterTopSize)) || [];\r\n if (!super.tryToSetTheSameFeature(filteredFeatures)) {\r\n const hardCodedDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"Aliveri\");\r\n });\r\n const placeholderDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"laceholder\");\r\n });\r\n this.activeFeature = hardCodedDefault || super.setDefault(layout) || filteredFeatures[0];\r\n this.placeholderFeature = placeholderDefault || super.setDefault(layout) || null;\r\n }\r\n }\r\n\r\n setLayers(layout) {\r\n const counterTopSize = this.getParent().counterTopSize();\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForCondition('CountertopSize', counterTopSize)\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault(layout);\r\n return super.setLayers(layout);\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.getParent().activeSubType_ === Vanity.Types.Custom) {\r\n const zIndex = zIndexes.Vanity.Custom.VanityBacksplash;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport {Vanity} from \"../../parts/vanity\";\r\nimport {NotQCVanityDoorStylesFilters} from \"../../constants\";\r\nimport store from \"../../../../../store\";\r\n\r\nexport default class Mirror extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'vanity_mirror';\r\n this.partName = 'Mirror';\r\n this.translateId = \"visualizer.bathroom.vanity.vanity_mirror\";\r\n this.homePageTitle = 'Mirrors';\r\n this.visible = [Vanity.Types.Complete, Vanity.Types.Custom];\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new Mirror())\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n let navItems = super.navigationSubItemsWithFilter('Pedestal', this.getParent().counterTopSize(), filteredAvailableFeatures);\r\n // console.log('navItems1', navItems.slice());\r\n const vanityParent = this.getParent();\r\n const vanityPart = (vanityParent.activeSubType_ === Vanity.Types.Custom)\r\n ? vanityParent.pedestalSink\r\n : vanityParent.completeVanity;\r\n /*** return Mirrors with the same Color and DoorStyle or Material - as the current selected Vanity ***/\r\n if (vanityPart && vanityPart.activeFeature && vanityPart.activeFeature.dbFeature && vanityPart.activeFeature.dbFeature.filterValueIDs) {\r\n const oldVanityType = NotQCVanityDoorStylesFilters.some(filterName => {\r\n const partName = vanityPart.activeFeature.partName;\r\n return partName.includes(filterName) && !partName.includes(\"QC\");\r\n });\r\n const filterGroups = store.getState().filterState.filterGroups;\r\n const colorFilter = filterGroups.find(group => group.name === \"Color\");\r\n const activeFilterValueIDs = vanityPart.activeFeature.dbFeature.filterValueIDs;\r\n const secondFilter = filterGroups.find(group => group.name === (oldVanityType ? \"Material\" : \"DoorStyle\"));\r\n\r\n if (colorFilter && secondFilter) {\r\n navItems = navItems.map(item => {\r\n item.mathesToCurrentVanity = IntermediatePart.featureHasFilters(item.part, activeFilterValueIDs, colorFilter, secondFilter);\r\n return item\r\n }).sort((itemA, itemB) => {\r\n return (itemA.mathesToCurrentVanity < itemB.mathesToCurrentVanity)\r\n ? 1\r\n : ((itemB.mathesToCurrentVanity < itemA.mathesToCurrentVanity)\r\n ? -1\r\n : 0)\r\n });\r\n }\r\n\r\n // console.log('sorted!', navItems);\r\n }\r\n return navItems\r\n }\r\n\r\n setDefault(layout) {\r\n const counterTopSize = this.getParent().counterTopSize();\r\n const filteredFeatures = this.features && this.features.filter(f => f.matchesMetaForCondition('Pedestal', counterTopSize)) || [];\r\n\r\n let name = null;\r\n if (this.activeFeature) {\r\n name = this.activeFeature.partName\r\n }\r\n if (name) {\r\n name = name.split(\" Single\")[0].split(\" Double\")[0].split(\" S\")[0].split(\" D\")[0]\r\n }\r\n\r\n if (!this.tryToSetTheSameFeatureByFilters(filteredFeatures) && !this.tryToSetTheSameFeature(filteredFeatures, name || null)) {\r\n const hardCodedDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"Elegant BLK\");\r\n });\r\n this.activeFeature = hardCodedDefault || super.setDefault(layout) || filteredFeatures[0];\r\n this.setPlaceholderFeature(filteredFeatures, layout);\r\n }\r\n }\r\n\r\n tryToSetTheSameFeatureByFilters(filteredFeatures, layout) {\r\n const vanityParent = this.getParent();\r\n const vanityPart = (vanityParent.activeSubType_ === Vanity.Types.Custom)\r\n ? vanityParent.pedestalSink\r\n : vanityParent.completeVanity;\r\n if (vanityPart && vanityPart.activeFeature && !vanityPart.activeFeature.partName.includes(\"WizardPlaceholder\")\r\n && vanityPart.activeFeature.dbFeature && vanityPart.activeFeature.dbFeature.filterValueIDs) {\r\n const vanityFilters = vanityPart.activeFeature.dbFeature.filterValueIDs;\r\n const filterGroups = store.getState().filterState.filterGroups;\r\n const materialFilter = filterGroups.find(group => group.name === \"Material\");\r\n const colorFilter = filterGroups.find(group => group.name === \"Color\");\r\n\r\n const matchingFilterFeature = filteredFeatures.find((feature) => {\r\n return feature.dbFeature && materialFilter && colorFilter\r\n && feature.dbFeature.filterValueIDs[materialFilter.id]\r\n && vanityFilters[materialFilter.id]\r\n && vanityFilters[colorFilter.id]\r\n && feature.dbFeature.filterValueIDs[materialFilter.id].includes(vanityFilters[materialFilter.id][0])\r\n && feature.dbFeature.filterValueIDs[colorFilter.id]\r\n && feature.dbFeature.filterValueIDs[colorFilter.id].includes(vanityFilters[colorFilter.id][0])\r\n });\r\n if (matchingFilterFeature) {\r\n this.activeFeature = matchingFilterFeature;\r\n this.setPlaceholderFeature(filteredFeatures, layout);\r\n return true\r\n }\r\n }\r\n return false\r\n }\r\n\r\n tryToSetTheSameFeature(filteredFeatures, partName, placeholderName) {\r\n if (this.activeFeature && this.activeFeature.partName) {\r\n const nameSplitted = (partName || this.activeFeature.partName).split(\" FM\")[0];\r\n this.activeFeature = filteredFeatures.find(feature => {\r\n const currentNameSplitted = feature.partName.split(\" FM\")[0];\r\n return nameSplitted === currentNameSplitted\r\n });\r\n // console.log('AF', filteredFeatures, this.activeFeature);\r\n this.placeholderFeature = filteredFeatures.find((feature) => {\r\n return placeholderName\r\n ? feature.dbFeature.displayName && feature.dbFeature.displayName.includesCI(\"placeholder\")\r\n && feature.dbFeature.displayName.includes(placeholderName)\r\n : feature.dbFeature.displayName && feature.dbFeature.displayName.includesCI(\"placeholder\")\r\n });\r\n if (this.activeFeature) {\r\n return true\r\n }\r\n }\r\n return false\r\n }\r\n\r\n setPlaceholderFeature(filteredFeatures, layout) {\r\n const placeholderDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"laceholder\");\r\n });\r\n this.placeholderFeature = placeholderDefault || super.setDefault(layout) || null;\r\n }\r\n\r\n setLayers(layout) {\r\n const counterTopSize = this.getParent().counterTopSize();\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForCondition('Pedestal', counterTopSize)\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n this.setDefault(layout);\r\n return super.setLayers(layout);\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n // if ((this.getParent().activeSubType_ === Vanity.Types.Custom) && this.activeFeature) {\r\n if (zIndexes && this.activeFeature) {\r\n // this.activeFeature.layer.zIndex = Z.layouts.Large.Vanity.Custom.Mirror;\r\n this.activeFeature.layer.zIndex = zIndexes.Vanity.Custom.Mirror;\r\n }\r\n if(zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndexes.Vanity.Custom.Mirror;\r\n }\r\n }\r\n}\r\n","import filter from 'lodash/filter';\r\n\r\nimport {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport Config from \"../../../../../config\";\r\nimport { Vanity } from \"../../parts/vanity\";\r\nimport DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\n\r\nexport default class Sink extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'vanity_sink';\r\n this.partName = 'Sink';\r\n this.translateId = \"visualizer.bathroom.vanity.vanity_sink\";\r\n this.homePageTitle = 'Sinks';\r\n this.visible = [Vanity.Types.Custom];\r\n if (Config.isDevMode()) {\r\n this.canBeDisabled = true;\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new Sink())\r\n }\r\n //\r\n // navigationSubItems(filters, searchText) {\r\n // const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n // return super.navigationSubItemsWithFilterWithInactive('VanitySize', this.getParent().counterTopSize(), filteredAvailableFeatures);\r\n // }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n disabledClick() {\r\n this.getParent().toggleVanityParts(this.disabled);\r\n }\r\n\r\n getArrayOfConditions() {\r\n const counterTopSize = this.getParent().counterTopSize();\r\n return [{\r\n propName: 'VanitySize',\r\n propValue: counterTopSize\r\n }];\r\n }\r\n\r\n setLayers(layout) {\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n handleChangeParent(nonCompatibleWith) {\r\n if (nonCompatibleWith === \"faucet\") {\r\n // some additional logic if needed\r\n } else {\r\n this.getParent().getParent().pedestalSink.setActiveFeatureByFilter(\"Size\", this.metaData[\"VanitySize\"] ? this.metaData[\"VanitySize\"][0] : null); // \"60in\", etc.\r\n }\r\n }\r\n\r\n getAvailableFeatures() {\r\n return filter(this.features, f => f.matchesMetaForCondition('VanitySize', this.getParent().counterTopSize()));\r\n }\r\n\r\n setActiveFeatureByFilter(filterName, filterValue) {\r\n const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions());\r\n const filteredFeatures = featuresToDisplay.filter((feature) => {\r\n return feature.metaData[filterName] && feature.metaData[filterName].includes(filterValue);\r\n });\r\n if (!super.tryToSetTheSameFeature(filteredFeatures)) {\r\n this.activeFeature = filteredFeatures[0];\r\n const placeholderAvailableFeatures = filteredFeatures.filter(feature => {\r\n return feature.dbFeature.displayName.includes(\"laceholder\")\r\n });\r\n this.placeholderFeature = placeholderAvailableFeatures[0];\r\n }\r\n }\r\n\r\n setDefault() {\r\n const filteredFeatures = this.getAvailableFeatures();\r\n let name = null;\r\n if (this.activeFeature) {\r\n name = this.activeFeature.partName\r\n }\r\n if (!super.tryToSetTheSameFeature(filteredFeatures, name ? name.substring(0, name.length - 2) : null)) { // remove 2 last letters\r\n this.activeFeature = filteredFeatures[0];\r\n this.placeholderFeature = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"laceholder\");\r\n });\r\n }\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.getParent().activeSubType_ === Vanity.Types.Custom) {\r\n if(this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Vanity.Custom.Sink;\r\n }\r\n if(this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndexes.Vanity.Custom.Sink;\r\n }\r\n }\r\n }\r\n}\r\n","import filter from 'lodash/filter';\r\n\r\nimport {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\nimport Config from \"../../../../../config\";\r\nimport { Vanity } from \"../../parts/vanity\";\r\n\r\nexport default class VanityFaucet extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'vanity_faucet';\r\n this.partName = 'Faucet';\r\n this.translateId = \"visualizer.bathroom.vanity.vanity_faucet\";\r\n this.homePageTitle = 'Faucets';\r\n this.useMatchesFailedNavigation = true;\r\n this.visible = [Vanity.Types.Custom];\r\n if (Config.isDevMode()) {\r\n this.canBeDisabled = true;\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n const vanityFaucetFeature = this.load_(dbFeature, new VanityFaucet());\r\n if (vanityFaucetFeature) {\r\n VanityFaucet.setAdditionalMetaData(vanityFaucetFeature);\r\n }\r\n }\r\n\r\n static setAdditionalMetaData(vanityFaucetFeature) {\r\n const compatible = vanityFaucetFeature.metaData[\"SinkSize\"];\r\n const size = vanityFaucetFeature.metaData[\"Size\"];\r\n if (compatible && compatible.includes(\"Outer\") && !compatible.includes(\"Inner\")) {\r\n compatible.push(\"Inner\")\r\n }\r\n if (size && !compatible) {\r\n vanityFaucetFeature.metaData[\"SinkSize\"] = size.includes(\"21in\") ? [\"Outer\", \"Inner\"] : [];\r\n }\r\n }\r\n\r\n disabledClick() {\r\n this.getParent().toggleVanityParts(this.disabled);\r\n }\r\n\r\n getCurrentSinkSize() {\r\n const sinkParent = this.getParent().sink;\r\n if (sinkParent && sinkParent.activeFeature) {\r\n const sinkMeta = sinkParent.activeFeature.metaData[\"SinkSize\"];\r\n if (sinkMeta) {\r\n return Array.isArray(sinkMeta) ? sinkMeta[0] : sinkMeta\r\n } else if (sinkParent.activeFeature.partName.includes(\"Placeholder\")) {\r\n return \"Outer\"\r\n }\r\n }\r\n return null\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n const sinkSize = this.getCurrentSinkSize();\r\n if (sinkSize) {\r\n return super.navigationSubItemsWithFilterWithInactive('SinkSize', sinkSize, featuresToDisplay)\r\n }\r\n return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n getArrayOfConditions(withSinkSize) {\r\n const counterTopSize = this.getParent().counterTopSize();\r\n const conditions = [{\r\n propName: 'VanitySize',\r\n propValue: counterTopSize\r\n }];\r\n if (withSinkSize) {\r\n conditions.push({\r\n propName: 'SinkSize',\r\n propValue: this.getCurrentSinkSize()\r\n })\r\n }\r\n return conditions;\r\n }\r\n\r\n setLayers(layout) {\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions(true))\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n getAvailableFeatures() {\r\n return filter(this.features, f => f.matchesMetaForCondition('VanitySize', this.getParent().counterTopSize()));\r\n }\r\n\r\n handleChangeParent(nonCompatibleWith) {\r\n if (nonCompatibleWith === \"sink\") {\r\n this.getParent().getParent().sink.setActiveFeatureByFilter(\"SinkSize\", \"Inner\")\r\n } else {\r\n this.getParent().getParent().pedestalSink.setActiveFeatureByFilter(\"Size\", this.metaData[\"VanitySize\"] ? this.metaData[\"VanitySize\"][0] : null); // \"60in\", etc.\r\n }\r\n }\r\n\r\n setDefault(layout) {\r\n const filteredFeatures = this.features && this.features.filter(f => f.matchesMetaForArrayOfConditions(this.getArrayOfConditions(true))) || [];\r\n let name = null;\r\n if (this.activeFeature) {\r\n name = this.activeFeature.partName\r\n }\r\n if (!super.tryToSetTheSameFeature(filteredFeatures, name ? name.substring(0, name.length - 2) : null)) { // remove 2 last letters // \"Platte 456AS D\"\r\n const hardCodedDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"Platte 456AS\");\r\n });\r\n const placeholderDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"laceholder\");\r\n });\r\n this.activeFeature = hardCodedDefault || super.setDefault(layout) || filteredFeatures[0];\r\n this.placeholderFeature = placeholderDefault || null;\r\n }\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.getParent().activeSubType_ === Vanity.Types.Custom) {\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Vanity.Custom.Faucet;\r\n }\r\n if(this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndexes.Vanity.Custom.Faucet;\r\n }\r\n }\r\n }\r\n}\r\n","import find from \"lodash/find\";\r\n\r\nimport {Part} from \"./part\";\r\nimport {LayoutType} from \"../constants\";\r\nimport {windowThumbnail} from \"../assets\";\r\nimport {NN} from \"../../../../misc/utils\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport {IntermediatePart} from \"./intermediatePart\";\r\n\r\nexport class Window extends Part {\r\n static id = 'Window';\r\n\r\n constructor() {\r\n super(true, false, PartMenuType.Simple);\r\n this.partId = 'window';\r\n this.menuType = PartMenuType.Simple;\r\n this.partName = 'Window';\r\n this.translateId = \"visualizer.bathroom.window\";\r\n this.homePageTitle = 'Window Coverings';\r\n this.dbName = 'Window Covering';\r\n this.partThumbnail = windowThumbnail;\r\n }\r\n\r\n load(dbFeature) {\r\n const isWindowCovering = dbFeature.groupName === 'Window Covering';\r\n const isWindow = dbFeature.groupName === 'Window';\r\n\r\n if (!isWindowCovering && !isWindow)\r\n return false;\r\n\r\n const part = new WindowBody();\r\n part.getParent = () => this;\r\n\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n\r\n if (isWindowCovering) {\r\n part.load(dbFeature);\r\n } else {\r\n this.windowDefault = part;\r\n this.windowDefault.dbFeature = dbFeature;\r\n }\r\n return true\r\n }\r\n\r\n setLayers(layout, placeholdersNeeded) {\r\n if (layout.type === LayoutType.Small)\r\n return null;\r\n\r\n if (!this.activeFeature)\r\n return null;\r\n\r\n const res = [];\r\n // let s3Binding = find(this.activeFeature.dbFeature.s3Bindings, {entityID: this.activeFeature.featureDefinitionId()});\r\n let s3Binding = find(this.activeFeature.dbFeature.s3Bindings, {entityID: this.activeFeature.featureDefinitionId(), layout: layout.getCurrentLayoutAbbreviation()});\r\n if (!s3Binding) {\r\n s3Binding = find(this.activeFeature.dbFeature.s3Bindings, {entityID: this.activeFeature.featureDefinitionId()});\r\n }\r\n\r\n if (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature) {\r\n s3Binding = find(this.placeholderFeature.dbFeature.s3Bindings, {entityID: this.featureDefinitionId(this.placeholderFeature), layout: layout.getCurrentLayoutAbbreviation()});\r\n if (!s3Binding) {\r\n s3Binding = find(this.placeholderFeature.dbFeature.s3Bindings, {entityID: this.featureDefinitionId(this.placeholderFeature)});\r\n }\r\n }\r\n\r\n this.activeFeature.layer.fromS3Binding(s3Binding);\r\n // this.activeFeature.layer.addTo(res);\r\n\r\n if (this.placeholderFeature) {\r\n let s3Binding = find(this.placeholderFeature.dbFeature.s3Bindings, {entityID: this.featureDefinitionId(this.placeholderFeature), layout: layout.getCurrentLayoutAbbreviation()});\r\n if (!s3Binding) {\r\n s3Binding = find(this.placeholderFeature.dbFeature.s3Bindings, {entityID: this.featureDefinitionId(this.placeholderFeature)});\r\n }\r\n this.placeholderFeature.layer.fromS3Binding(s3Binding);\r\n }\r\n\r\n if (this.windowDefault && this.windowDefault.dbFeature.s3Bindings) {\r\n const dbFeature = this.windowDefault.dbFeature;\r\n s3Binding = dbFeature.s3Bindings[0];\r\n this.windowDefault.layer.fromS3Binding(s3Binding);\r\n this.windowDefault.layer.addTo(res);\r\n }\r\n\r\n (placeholdersNeeded && !this.placeholderChanged && this.placeholderFeature)\r\n ? this.placeholderFeature.layer.addTo(res)\r\n : this.activeFeature.layer.addTo(res);\r\n\r\n return res;\r\n }\r\n\r\n setDefault() {\r\n const hardCodedDefault = this.features.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"Stylewise Snowblind\");\r\n });\r\n const placeholderDefault = this.features.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"laceholder\");\r\n });\r\n this.activeFeature = hardCodedDefault || this.features[0];\r\n this.placeholderFeature = placeholderDefault || this.features[0];\r\n }\r\n\r\n navigationItem() {\r\n return new DesignNavigationItem(this.partName, this);\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n // if (layout.type === LayoutType.Large) {\r\n // NN(this.windowDefault, _ => _.layer.zIndex = Z.layouts.Large.Window_Default);\r\n // NN(this.activeFeature, _ => _.layer.zIndex = Z.layouts.Large.Window_Covering);\r\n // }\r\n if(zIndexes) {\r\n NN(this.windowDefault, _ => _.layer.zIndex = zIndexes.Window_Default);\r\n NN(this.activeFeature, _ => _.layer.zIndex = zIndexes.Window_Covering);\r\n if(this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndexes.Window_Covering;\r\n }\r\n }\r\n }\r\n\r\n subParts() {\r\n return [{\r\n text: this.partName,\r\n part: this\r\n }]\r\n }\r\n\r\n}\r\n\r\nclass WindowBody extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'window';\r\n this.partName = 'Window';\r\n this.translateId = \"visualizer.bathroom.window\";\r\n }\r\n\r\n load(dbFeature) {\r\n super.load_.call(this.getParent(), dbFeature, this, false);\r\n }\r\n}\r\n","import find from \"lodash/find\";\r\n\r\nimport {Part} from \"./part\";\r\nimport {ceilingThumbnail, ceilingPlaceholder} from \"../assets\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport {IntermediatePart} from \"./intermediatePart\";\r\n\r\nexport class Ceiling extends Part {\r\n static id = 'Ceiling';\r\n\r\n constructor() {\r\n super(true, false, PartMenuType.Simple);\r\n this.partId = 'ceiling';\r\n this.menuType = PartMenuType.Simple;\r\n this.partName = 'Ceiling';\r\n this.translateId = \"visualizer.bathroom.ceiling\";\r\n this.homePageTitle = 'Ceilings';\r\n this.partThumbnail = ceilingThumbnail;\r\n this.ceilingLight = null;\r\n }\r\n\r\n load(dbFeature) {\r\n let part = null;\r\n switch (dbFeature.groupName) {\r\n case \"Ceiling\":\r\n part = new CeilingBody();\r\n break;\r\n case \"Ceiling Lights\":\r\n if (!this.ceilingLight) {\r\n this.ceilingLight = new CeilingLight(true);\r\n this.relatedItems.push(this.ceilingLight);\r\n }\r\n part = this.ceilingLight;\r\n break;\r\n }\r\n if (part) {\r\n part.getParent = () => this;\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n part.load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n setLayers(layout, placeholdersNeeded) {\r\n const layers = [];\r\n\r\n if (placeholdersNeeded && !this.placeholderChanged && this.placeholderFeature) {\r\n this.placeholderFeature.layer.src = ceilingPlaceholder;\r\n this.placeholderFeature.layer.fromS3 = false;\r\n this.placeholderFeature.layer.addTo(layers)\r\n } else if (this.activeFeature) {\r\n this.activeFeature.setLayers(layout);\r\n this.activeFeature.layer.addTo(layers);\r\n }\r\n\r\n this.relatedItems.forEach(relatedItem => {\r\n relatedItem.setLayers(layout);\r\n if (relatedItem && relatedItem.activeFeature) {\r\n relatedItem.activeFeature.layer.addTo(layers);\r\n }\r\n });\r\n\r\n return layers;\r\n }\r\n\r\n setDefault(layout) {\r\n this.relatedItems.forEach(_ => _.setDefault(layout));\r\n const hardCodedDefault = this.features.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"BR Frost\");\r\n });\r\n const placeholderDefault = this.features.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"laceholder\");\r\n });\r\n this.activeFeature = hardCodedDefault || this.features[0];\r\n this.placeholderFeature = placeholderDefault || this.features[0];\r\n }\r\n\r\n navigationItem() {\r\n return new DesignNavigationItem(this.partName, this);\r\n }\r\n\r\n handleSubPartClick() {}\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes) {\r\n this.relatedItems.forEach(_ => _.setZIndex(zIndexes));\r\n this.activeFeature && this.activeFeature.setZIndex(zIndexes);\r\n if(this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndexes.Ceiling;\r\n }\r\n }\r\n }\r\n\r\n subParts() {\r\n return [{\r\n text: this.partName,\r\n part: this\r\n }]\r\n }\r\n}\r\n\r\nclass CeilingBody extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n\r\n this.partName = 'Ceiling';\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n super.load_.call(this.getParent(), dbFeature, this, false);\r\n }\r\n\r\n setLayers(layout) {\r\n // const s3Binding = find(this.dbFeature.s3Bindings, {entityID: this.featureDefinitionId(this)});\r\n let s3Binding = find(this.dbFeature.s3Bindings, {entityID: this.featureDefinitionId(this), layout: layout.getCurrentLayoutAbbreviation()});\r\n if (!s3Binding) {\r\n s3Binding = find(this.dbFeature.s3Bindings, {entityID: this.featureDefinitionId(this)});\r\n }\r\n this.layer.fromS3Binding(s3Binding);\r\n }\r\n\r\n setDefault(layout) {\r\n this.activeFeature = super.setDefault(layout) || this.features[0];\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes)\r\n this.layer.zIndex = zIndexes.Ceiling;\r\n }\r\n}\r\n\r\nclass CeilingLight extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partName = 'Ceiling Light';\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new CeilingLight());\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature && this.activeFeature.layer) {\r\n this.activeFeature.layer.zIndex = zIndexes.Ceiling_Lights;\r\n }\r\n }\r\n}\r\n\r\n","import {Part} from \"./part\";\r\nimport {toiletThumbnail} from '../assets';\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport {IntermediatePart} from \"./intermediatePart\";\r\nimport {Vanity} from \"./vanity\";\r\n\r\nexport class Toilet extends Part {\r\n static id = 'Toilet';\r\n\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Toilet';\r\n this.translateId = \"visualizer.bathroom.toilet\";\r\n this.homePageTitle = 'Toilets';\r\n this.partThumbnail = toiletThumbnail;\r\n this.toilet = null;\r\n }\r\n\r\n setLayers(layout, placeholdersNeeded){\r\n const layers = [];\r\n this.relatedItems.forEach(relatedItem => {\r\n relatedItem.setLayers(layout);\r\n (placeholdersNeeded && !relatedItem.placeholderChanged && relatedItem.placeholderFeature)\r\n ? relatedItem.placeholderFeature.layer.addTo(layers)\r\n : relatedItem.activeFeature ? relatedItem.activeFeature.layer.addTo(layers) : null\r\n\r\n });\r\n return layers;\r\n }\r\n\r\n load(dbFeature) {\r\n if (dbFeature.groupName === \"Toilet\") {\r\n if (!this.toilet) {\r\n this.toilet = new ToiletBody(true);\r\n this.relatedItems.push(this.toilet);\r\n this.toilet.getParent = () => this;\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this.toilet.load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n subParts() {\r\n return this.relatedItems.map(_ => new DesignNavigationItem(_.partName, _));\r\n }\r\n\r\n setDefaultPartAfterSubTypeClick() {\r\n return this.subParts()[0]\r\n }\r\n\r\n navigationItem() {\r\n return new DesignNavigationItem('Toilet', this)\r\n }\r\n\r\n setDefault(layout) {\r\n this.relatedItems.forEach(_ => _.setDefault(layout));\r\n }\r\n}\r\n\r\nclass ToiletBody extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'toilet';\r\n this.partName = 'Toilet';\r\n this.translateId = \"visualizer.bathroom.toilet\";\r\n this.homePageTitle = 'Toilets';\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new ToiletBody());\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const vanitySize = layout.parts[Vanity.id].counterTopSize();\r\n\r\n // console.log('Toilet - vanity size: ', vanitySize);\r\n if (vanitySize === '72in' || vanitySize === '60in') {\r\n // console.warn('Toilet - not visible for current vanity size: ', vanitySize);\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n return super.setLayers(layout);\r\n }\r\n\r\n setDefault(layout) {\r\n const hardCodedDefault = this.features.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"Melbourne MR4CGR\");\r\n });\r\n const placeholderDefault = this.features.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"laceholder\");\r\n });\r\n this.activeFeature = hardCodedDefault || super.setDefault(layout) || this.features[0];\r\n this.placeholderFeature = placeholderDefault || super.setDefault(layout) || null;\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Toilet;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndexes.Toilet;\r\n }\r\n }\r\n}\r\n\r\n\r\n","import {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\nimport DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\nimport {Shower} from \"../../parts/shower\";\r\nimport {getFeatureIsLocked} from \"../../../../../misc/helpers\";\r\nimport store from \"../../../../../store\";\r\nimport {toggleNotCompatibleView} from \"../../../../../actions/selectionFunctions\";\r\nimport {ShowerComboTubType} from \"../../constants\";\r\n\r\nexport default class ShowerFixture extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_fixture';\r\n this.partName = 'Fixture';\r\n this.translateId = \"visualizer.bathroom.shower.shower_fixture\";\r\n this.homePageTitle = 'Shower Fixtures';\r\n this.dbName = 'Shower Fixture';\r\n this.layerPriority = 4;\r\n if (isChild) {\r\n this.previouslySelectedFeatures = {\r\n LG: {},\r\n SM: {}\r\n };\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new ShowerFixture());\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const showerTubCombo = this.getParent().layout.parts[ShowerTubCombo.id];\r\n\r\n if (this.getParent().showerTubComboIsActive() && showerTubCombo && showerTubCombo.walkInTub\r\n && showerTubCombo.bottomTub === showerTubCombo.walkInTub.bottomTubId) {\r\n super.hideLayers();\r\n return;\r\n }\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n applyFeatureIfNotCompatible() {\r\n const parent = this.getParent();\r\n const shower = parent.getParent();\r\n if (shower.layout && shower.showerTubComboIsActive()\r\n && shower.layout.parts[ShowerTubCombo.id].bottomTub === ShowerComboTubType.walk_in_tub) {\r\n const comboPart = shower.layout.parts[ShowerTubCombo.id];\r\n comboPart.showerTubComboIsActive = false;\r\n comboPart.bottomTub = ShowerComboTubType.bathtub_liner;\r\n }\r\n }\r\n\r\n handleClick(ignoreLocked) {\r\n super.handleClick(ignoreLocked); // set active item & not in visualizer item\r\n if (this.notAvailableInVisualizer || getFeatureIsLocked(this)) {\r\n return\r\n }\r\n\r\n const showerFixtureParent = this.getParent();\r\n const shower = showerFixtureParent.getParent();\r\n if (shower.showerTubComboIsActive() && shower.layout.parts[ShowerTubCombo.id].bottomTub === ShowerComboTubType.walk_in_tub\r\n && !window.location.hash.includes(\"visualizer\")) {\r\n store.dispatch(toggleNotCompatibleView(true));\r\n return;\r\n }\r\n\r\n this.applyFeatureIfNotCompatible();\r\n }\r\n\r\n getArrayOfConditions() {\r\n const showerParent = this.getParent();\r\n const activeShowerPartId = showerParent.showerTubComboIsActive() ? ShowerTubCombo.id : Shower.id;\r\n const showerSize = showerParent.layout.parts[activeShowerPartId].showerSize();\r\n return [{\r\n propName: \"Shower\",\r\n propValue: showerParent.showerTubComboIsActive()\r\n && (showerParent.layout.parts[activeShowerPartId].bottomTub !== ShowerComboTubType.walk_in_tub)\r\n ? [\"Tub\"]\r\n : showerParent.isComplete() ? \"Complete\" : \"Custom\"\r\n }, {\r\n propName: 'ShowerSize',\r\n propValue: showerSize\r\n }]\r\n }\r\n\r\n setDefault() {\r\n const shower = this.getParent();\r\n const currentActiveFeature = this.activeFeature;\r\n const filteredFeatures = this.features.filter(f => f.matchesMetaForArrayOfConditions(this.getArrayOfConditions()));\r\n if (!super.tryToSetTheSameFeature(filteredFeatures)) {\r\n this.setDefaultAccordingToPreviousSelect(shower, filteredFeatures, \"Brantford\");\r\n }\r\n this.rememberPreviousSelection(shower, currentActiveFeature);\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const ShowerType = this.getParent().activeSubType() === Shower.Type.Custom || this.getParent().showerTubComboIsActive()\r\n ? 'Custom60in'\r\n : 'Steam60in';\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Shower[ShowerType].Fixture;\r\n }\r\n if(zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndexes.Shower[ShowerType].Fixture;\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport {ShowerBodyType} from \"../../constants\";\r\nimport {Shower} from \"../../parts/shower\";\r\n\r\nexport default class ShowerGlass extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_glass';\r\n this.translateId = \"visualizer.bathroom.shower.shower_glass\";\r\n this.partName = 'Glass';\r\n this.visible = false;\r\n this.layerPriority = 12;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new ShowerGlass())\r\n }\r\n\r\n // navigationSubItems() {\r\n // const showerSize = this.getParent().showerSize().split('in')[0];\r\n // return super.navigationSubItemsWithFilter('ShowerSize', showerSize);\r\n // }\r\n setLayers(layout) {\r\n\r\n if (this.getParent().showerTubComboIsActive()) {\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n if (this.getParent().customBodyType === ShowerBodyType.Door) {\r\n this.disabled = true;\r\n }\r\n this.activeFeature = this.features.find((feature) => {\r\n const showerBodyActiveFeature = this.getParent().showerBody.activeFeature;\r\n return showerBodyActiveFeature && feature.partName === showerBodyActiveFeature.partName // set the same glass as Body\r\n });\r\n return super.setLayers(layout);\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.getParent().activeSubType() === Shower.Type.Custom && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Shower.Custom60in.Glass;\r\n }\r\n }\r\n}\r\n","import DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\n\r\nimport {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport {Vanity} from \"../../parts/vanity\";\r\n\r\nimport {ShowerType, LayoutType} from \"../../constants\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\nimport {Shower} from \"../../parts/shower\";\r\nimport {\r\n custom30in15X4Shower,\r\n custom30in30X8Shower,\r\n custom30inPonyShower,\r\n custom60in15X4Shower,\r\n custom60in30X8Shower,\r\n custom60inPonyShower\r\n} from \"../../assets\";\r\n\r\nexport default class ShowerBody extends IntermediatePart {\r\n\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partId = 'shower_body';\r\n this.partName = 'Shower Body';\r\n this.translateId = \"visualizer.bathroom.shower.shower_body\";\r\n this.homePageTitle = 'Shower Doors & Glass';\r\n this.partNumber = partNumber;\r\n this.activeFeatureParts = [];\r\n this.canBeDisabled = false;\r\n this.placeholderChanged = true; // never show placeholder to body\r\n this.firstClick = {\r\n \"0\": true // never show placeholder to body\r\n }\r\n this.layerPriority = 1;\r\n this.createdManually = true;\r\n }\r\n\r\n load(dbFeature) {\r\n const parts = dbFeature.metaData[\"Parts\"];\r\n if (parts) {\r\n const partNumber = +dbFeature.metaData[\"Part\"][0];\r\n return super.load_(dbFeature, new ShowerBody(false, partNumber), true, partNumber === 1 ? 'features' : 'featuresParts');\r\n } else {\r\n const loadedShowerBody = super.load_(dbFeature, new ShowerBody());\r\n if (loadedShowerBody) { // it can be false (just skip it)\r\n const featureName = loadedShowerBody.dbFeature.sharedFeatureName;\r\n loadedShowerBody.featureName = featureName;\r\n loadedShowerBody.showerBodyType = 'Custom';\r\n loadedShowerBody.type = ShowerType.Custom;\r\n loadedShowerBody.showerDimensions = this.loadShowerDimensions(featureName);\r\n loadedShowerBody.metaData = this.loadShowerMetaData(featureName, loadedShowerBody.showerDimensions);\r\n loadedShowerBody.showerBodyId = featureName.toLowerCase().replace(/ /gi, \"-\");\r\n loadedShowerBody.notAvailableInVisualizer = false;\r\n if (!loadedShowerBody.dbFeature.thumbnailUrl) {\r\n loadedShowerBody.customThumbnail = this.loadThumbnail(featureName)\r\n }\r\n }\r\n return loadedShowerBody\r\n }\r\n }\r\n\r\n loadShowerDimensions(featureName = this.activeFeature.featureName) {\r\n switch (true) {\r\n case featureName.includes(\"15X4\"):\r\n return \"15X4\"\r\n case featureName.includes(\"Pony\"):\r\n return \"Pony\"\r\n case featureName.includes(\"30X8\"):\r\n default:\r\n return \"30X8\"\r\n }\r\n }\r\n\r\n loadShowerMetaData(featureName = this.activeFeature.featureName, showerDimensions) {\r\n const featureNameSplitted = featureName.split(\" \");\r\n return {\r\n \"ShowerSize\": featureName.includes(\"Custom\") ? [featureNameSplitted[2]] : ['60in'],\r\n \"CountertopSize\": showerDimensions === \"30X8\" ? [\"72in\"] : [\"20in\", \"24in\", \"30in\", \"36in\", \"48in\", \"60in\"]\r\n }\r\n }\r\n\r\n loadThumbnail(featureName = this.activeFeature.featureName) {\r\n switch (true) {\r\n case featureName.includes(\"15X4\"):\r\n return featureName.includes(\"30in\") ? custom30in15X4Shower : custom60in15X4Shower\r\n case featureName.includes(\"Pony\"):\r\n return featureName.includes(\"30in\") ? custom30inPonyShower : custom60inPonyShower\r\n case featureName.includes(\"30X8\"):\r\n default:\r\n return featureName.includes(\"30in\") ? custom30in30X8Shower : custom60in30X8Shower\r\n }\r\n }\r\n\r\n handleClick() {\r\n const parent = this.getParent();\r\n if (parent.getParent && parent.getParent()) {\r\n super.handleClick();\r\n parent.activeFeatureParts = parent.setActiveFeatureParts();\r\n } else {\r\n parent.showerBody.activeFeature = this;\r\n }\r\n this.getParent().showerBodySelectedByUser = true;\r\n const shower = this.getParent().layout ? this.getParent() : this.getParent().getParent(); // workaround for complete & custom click\r\n if (shower.showerTubComboIsActive) {\r\n const comboPart = shower.layout.parts[ShowerTubCombo.id];\r\n comboPart.showerTubComboIsActive = false;\r\n }\r\n this.featureClicked();\r\n }\r\n\r\n disabledClick() {\r\n const showerParent = this.getParent();\r\n showerParent.relatedItems.forEach((relItem) => {\r\n relItem.disabled = this.disabled;\r\n if (relItem.activeFeatureParts && relItem.activeFeatureParts.length) {\r\n relItem.activeFeatureParts.forEach((activeFeaturePart) => {\r\n if (activeFeaturePart) {\r\n activeFeaturePart.disabled = this.disabled\r\n }\r\n });\r\n }\r\n });\r\n if (showerParent.layout && showerParent.showerTubComboIsActive) {\r\n const comboPart = showerParent.layout.parts[ShowerTubCombo.id];\r\n comboPart.showerTubComboIsActive = false;\r\n }\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n const wallParent = showerParent.layout.parts.Walls;\r\n wallParent.wallExL.disabled = this.disabled;\r\n // wallParent.wallExR.disabled = this.disabled;\r\n\r\n const bathtubParent = showerParent.layout.parts.Bathtub;\r\n\r\n if (showerParent.layout.type === LayoutType.Small && !this.disabled && bathtubParent) { // switch off all bathtub features\r\n if (bathtubParent.bathTubBody) {\r\n bathtubParent.bathTubBody.disabled = true;\r\n }\r\n if (bathtubParent.bathTubBody) {\r\n bathtubParent.bathTubBase.disabled = true;\r\n bathtubParent.bathTubBase.disabledClick();\r\n }\r\n }\r\n }\r\n\r\n availableFeatures(filters) {\r\n const layout = this.getParent().layout;\r\n const filteredAvailableFeatures = filters ? super.getFilteredFeaturesByFilters(filters) : this.features;\r\n const counterTopSize = layout.parts[Vanity.id].counterTopSize();\r\n return filteredAvailableFeatures.filter((feature) => {\r\n if (this.getParent().activeSubType_ === Shower.Type.Custom) {\r\n return counterTopSize === '72in' && layout.type === 1\r\n ? feature.showerDimensions === \"30X8\" || feature.showerDimensions === \"Pony\"\r\n : feature.showerBodyType === Shower.Type.Custom\r\n } else {\r\n return (feature.showerBodyType !== Shower.Type.Custom) && feature.partNumber === 1\r\n }\r\n })\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(this.availableFeatures(filters), searchText);\r\n return filteredAvailableFeatures.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n setActiveFeatureParts() {\r\n const activeFeatureParts = (this.activeFeature && this.activeFeature.partNumber) ? this.featuresParts.filter((feature) => {\r\n return feature.partName === this.activeFeature.partName\r\n }) : [];\r\n activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n return activeFeatureParts\r\n }\r\n\r\n setDefault() {\r\n const availableFeatures = this.availableFeatures();\r\n const layout = this.getParent().layout;\r\n let hardCodedDefault = availableFeatures.find((feature) => {\r\n return feature.partName === \"Custom B 60in 15X4\";\r\n });\r\n const counterTopSize = layout.parts[Vanity.id].counterTopSize();\r\n if (counterTopSize === '72in' && layout.type === 1 && this.activeFeature) {\r\n hardCodedDefault = availableFeatures.find((feature) => {\r\n return this.activeFeature.partName.includes(\"60in\")\r\n ? feature.partName.includes(\"60in\")\r\n : feature.partName.includes(\"30in\")\r\n });\r\n }\r\n this.activeFeature = hardCodedDefault || availableFeatures[0];\r\n this.activeFeatureParts = this.setActiveFeatureParts();\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n if (this.getParent().showerTubComboIsActive()) {\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n if (this.getParent().activeSubType_ === Shower.Type.Custom && this.activeFeature) {\r\n this.activeFeature.layer.src = '';\r\n const counterTopSize = layout.parts[Vanity.id].counterTopSize();\r\n const showerDimensions = this.getParent().showerDimensions();\r\n if (counterTopSize === '72in' && layout.type === 1 && (showerDimensions === \"15X4\")) {\r\n // removed showerBodySelectedByUser detect cause we need to change shower body in any case! if it is not full!\r\n this.setDefault();\r\n } else if (counterTopSize !== '72in' && layout.type === 1 && !this.showerBodySelectedByUser // set default shower back\r\n && (showerDimensions !== \"15X4\")) {\r\n this.setDefault();\r\n }\r\n } else {\r\n super.setLayers(layout);\r\n }\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const ShowerType = (this.getParent().activeSubType() === Shower.Type.Custom) ? 'Custom60in' : 'Steam60in';\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Shower[ShowerType].Body[this.activeFeature.partNumber];\r\n }\r\n if (this.activeFeatureParts && this.activeFeatureParts.length) {\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.layer.zIndex = zIndexes.Shower[ShowerType].Body[activeFeaturePart.partNumber];\r\n })\r\n }\r\n }\r\n\r\n changeLayout(layoutType) {\r\n if (layoutType === 1 && this.disabled) {\r\n this.disabled = false;\r\n this.disabledClick();\r\n }\r\n }\r\n}\r\n","import isEqual from \"lodash/isEqual\";\r\nimport {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\n\r\nimport { Shower } from \"../../parts/shower\";\r\nimport { ShowerTubCombo } from \"../../parts/showerTubCombo\";\r\nimport {getFeatureIsLocked} from \"../../../../../misc/helpers\";\r\n\r\nexport default class ShowerInteriorWall extends IntermediatePart {\r\n\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partId = 'shower_interior_wall';\r\n this.partName = 'Shower Walls';\r\n this.translateId = \"visualizer.bathroom.shower.shower_interior_wall\";\r\n this.homePageTitle = 'Interior Shower Walls';\r\n this.dbName = \"Shower Wall\";\r\n this.isStoneFeature = true;\r\n this.canUseWizard = true;\r\n this.partNumber = partNumber;\r\n this.activeFeatureParts = [];\r\n this.shadowName = \"Interior Wall\";\r\n this.layerPriority = 2;\r\n }\r\n\r\n load(dbFeature) {\r\n const parts = dbFeature.metaData && dbFeature.metaData[\"Parts\"];\r\n if (parts) {\r\n const partNumber = +dbFeature.metaData[\"Part\"][0];\r\n return super.load_(dbFeature, new ShowerInteriorWall(false, partNumber),\r\n true, partNumber === 1 ? 'features' : 'featuresParts');\r\n } else {\r\n return super.load_(dbFeature, new ShowerInteriorWall());\r\n }\r\n }\r\n\r\n handleClick(ignoreLocked) {\r\n const parent = this.getParent();\r\n super.handleClick(ignoreLocked);\r\n parent.activeFeatureParts = parent.setActiveFeatureParts();\r\n const shower = parent.getParent();\r\n if (shower.showerInteriorWallAccent && shower.showerInteriorWallAccent.canBeDisabled\r\n && !shower.showerInteriorWallAccent.placeholderChanged && !getFeatureIsLocked(this)) {\r\n shower.showerInteriorWallAccent.disabled = true;\r\n shower.showerInteriorWallAccent.disabledClick();\r\n }\r\n this.featureClicked();\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(this.availableFeatures(super.getFilteredFeaturesByFilters(filters)), searchText);\r\n const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n availableFeatures(wallFeatures) {\r\n return wallFeatures.filter(wallFeature => wallFeature.partNumber === 1)\r\n }\r\n\r\n setLayers(layout) {\r\n if (this.shadowFeature && !this.shadowFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())) {\r\n this.setShadowFeature();\r\n }\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n this.activeFeatureParts = this.setActiveFeatureParts();\r\n super.setLayers(layout);\r\n } else {\r\n this.setDefault();\r\n super.setLayers(layout);\r\n }\r\n }\r\n\r\n setDefault() {\r\n const filteredFeatures = this.features.filter(f => f.matchesMetaForArrayOfConditions(this.getArrayOfConditions()));\r\n const matchingFeatureExist = super.tryToSetTheSameFeature(filteredFeatures, null, null, true);\r\n if (!matchingFeatureExist) {\r\n const hardCodedDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"Tan Hexagon\");\r\n });\r\n const placeholderDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includesCI(\"placeholder\");\r\n });\r\n\r\n this.activeFeature = hardCodedDefault || filteredFeatures[0];\r\n this.activeFeatureParts = this.setActiveFeatureParts();\r\n this.placeholderFeature = placeholderDefault || null;\r\n } else {\r\n this.activeFeatureParts = this.setActiveFeatureParts();\r\n }\r\n this.setShadowFeature();\r\n }\r\n\r\n getArrayOfConditions() {\r\n const showerParent = this.getParent();\r\n const activeShowerPartId = showerParent.showerTubComboIsActive() ? ShowerTubCombo.id : Shower.id;\r\n const showerSize = showerParent.layout.parts[activeShowerPartId].showerSize();\r\n return [{\r\n propName: 'ShowerSize',\r\n propValue: showerSize\r\n }];\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Shower.Custom60in.Wall;\r\n const zIndex2 = zIndexes.Shower.Custom60in.Wall2;\r\n const zIndex3 = zIndexes.Shower.Custom60in.WallShadow;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.activeFeatureParts.length) {\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n if (activeFeaturePart && activeFeaturePart.layer) {\r\n activeFeaturePart.layer.zIndex = zIndex2\r\n }\r\n })\r\n }\r\n if(zIndexes && this.shadowFeature) {\r\n this.shadowFeature.layer.zIndex = zIndex3;\r\n }\r\n }\r\n\r\n setActiveFeatureParts(fromFeature = this.activeFeature) {\r\n if (!fromFeature) {\r\n return []\r\n }\r\n const showerSize = fromFeature.metaData[\"ShowerSize\"];\r\n const name1 = fromFeature.getSplittedFeatureName().split(\"30in \")[0].split(\"60in \")[0];\r\n const activeFeaturePart = fromFeature && fromFeature.partNumber && showerSize ? this.featuresParts.find((feature) => {\r\n const showerSize2 = feature.metaData[\"ShowerSize\"];\r\n const name2 = feature.getSplittedFeatureName().split(\"30in \")[0].split(\"60in \")[0];\r\n return showerSize2 && isEqual(showerSize, showerSize2) && (feature.partName === fromFeature.partName || name1 === name2)\r\n }) : null;\r\n if (activeFeaturePart) {\r\n activeFeaturePart.disabled = this.disabled\r\n return [activeFeaturePart]\r\n }\r\n return []\r\n }\r\n}\r\n","import isEqual from \"lodash/isEqual\";\r\nimport {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\n\r\nimport { Shower } from \"../../parts/shower\";\r\nimport { ShowerTubCombo } from \"../../parts/showerTubCombo\";\r\n\r\nexport default class ShowerInteriorWallAccent extends IntermediatePart {\r\n\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partId = \"shower_interior_wall_accent\";\r\n this.partName = \"Shower Walls Accent\";\r\n this.translateId = \"visualizer.bathroom.shower.shower_interior_wall_accent\";\r\n this.dbName = \"Shower Wall Accent\";\r\n // this.homePageTitle = 'Interior Shower Walls';\r\n this.isStoneFeature = true;\r\n this.partNumber = partNumber;\r\n this.activeFeatureParts = [];\r\n this.canBeDisabled = true;\r\n this.layerPriority = 3;\r\n }\r\n\r\n load(dbFeature) {\r\n const parts = dbFeature.metaData && dbFeature.metaData[\"Parts\"];\r\n if (parts) {\r\n const partNumber = +dbFeature.metaData[\"Part\"][0];\r\n return super.load_(\r\n dbFeature,\r\n new ShowerInteriorWallAccent(false, partNumber),\r\n true,\r\n partNumber === 1 ? 'features' : 'featuresParts'\r\n );\r\n } else {\r\n return super.load_(dbFeature, new ShowerInteriorWallAccent());\r\n }\r\n }\r\n\r\n disabledClick() {\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n }\r\n\r\n handleClick(ignoreLocked) {\r\n const parent = this.getParent();\r\n if (parent.getParent && parent.getParent()) {\r\n super.handleClick(ignoreLocked);\r\n parent.activeFeatureParts = parent.setActiveFeatureParts();\r\n } else {\r\n parent.showerInteriorWallAccent.activeFeature = this;\r\n }\r\n this.featureClicked();\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(this.availableFeatures(super.getFilteredFeaturesByFilters(filters)), searchText);\r\n const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n availableFeatures(wallFeatures) {\r\n return wallFeatures.filter(wallFeature => wallFeature.partNumber === 1)\r\n }\r\n\r\n setLayers(layout) {\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n this.activeFeatureParts = this.setActiveFeatureParts();\r\n super.setLayers(layout);\r\n } else {\r\n this.setDefault();\r\n super.setLayers(layout);\r\n }\r\n }\r\n\r\n setDefault() {\r\n const filteredFeatures = this.features.filter(f => f.matchesMetaForArrayOfConditions(this.getArrayOfConditions()));\r\n const matchingFeatureExist = super.tryToSetTheSameFeature(filteredFeatures, null, null, true);\r\n if (!matchingFeatureExist) {\r\n const hardCodedDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"Tan Hexagon\");\r\n });\r\n const placeholderDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"laceholder\");\r\n });\r\n this.activeFeature = hardCodedDefault || filteredFeatures[0];\r\n this.placeholderFeature = placeholderDefault || null;\r\n this.activeFeatureParts = this.setActiveFeatureParts();\r\n } else {\r\n this.activeFeatureParts = this.setActiveFeatureParts();\r\n }\r\n this.setShadowFeature();\r\n }\r\n\r\n getArrayOfConditions() {\r\n const showerParent = this.getParent();\r\n const activeShowerPartId = showerParent.showerTubComboIsActive() ? ShowerTubCombo.id : Shower.id;\r\n const showerSize = showerParent.layout.parts[activeShowerPartId].showerSize();\r\n return [{\r\n propName: 'ShowerSize',\r\n propValue: showerSize\r\n }];\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Shower.Custom60in.WallAccent;\r\n const zIndex2 = zIndexes.Shower.Custom60in.WallAccent2;\r\n\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.activeFeatureParts.length) {\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n if (activeFeaturePart && activeFeaturePart.layer) {\r\n activeFeaturePart.layer.zIndex = zIndex2\r\n }\r\n })\r\n }\r\n }\r\n\r\n setActiveFeatureParts() {\r\n const activeFeature = this.placeholderChanged ? this.activeFeature : this.placeholderFeature;\r\n if (activeFeature) {\r\n const showerSize = activeFeature.metaData[\"ShowerSize\"];\r\n const name1 = activeFeature.getSplittedFeatureName().split(\"30in \")[0].split(\"60in \")[0];\r\n const activeFeaturePart = activeFeature.partNumber && showerSize ? this.featuresParts.find((feature) => {\r\n const showerSize2 = feature.metaData[\"ShowerSize\"];\r\n const name2 = feature.getSplittedFeatureName().split(\"30in \")[0].split(\"60in \")[0];\r\n return showerSize2 && isEqual(showerSize, showerSize2) && (feature.partName === activeFeature.partName || name1 === name2)\r\n }) : [];\r\n if (activeFeaturePart) {\r\n activeFeaturePart.disabled = this.disabled;\r\n return [activeFeaturePart]\r\n }\r\n }\r\n return []\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\n\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\nimport {Vanity} from \"../../parts/vanity\";\r\nimport { ShowerComboTubType } from \"../../constants\";\r\nimport { getMetadataByDimensions } from \"../../../../../misc/utils\";\r\nimport {getFeatureIsLocked} from \"../../../../../misc/helpers\";\r\n\r\nexport default class ShowerDoor extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_door';\r\n this.partName = 'Shower Door';\r\n this.translateId = \"visualizer.bathroom.shower.shower_door\";\r\n this.visible = true;\r\n this.isStoneFeature = false;\r\n this.canBeDisabled = true;\r\n this.layerPriority = 5;\r\n\r\n /* only shower door properties */\r\n if (isChild) {\r\n this.previouslySelectedFeatures = {\r\n LG: {},\r\n SM: {}\r\n };\r\n }\r\n this.currentShowerBodyId = \"\"; // for example \"custom-a-60in-30x8\"\r\n }\r\n\r\n load(dbFeature) {\r\n const doorFeature = this.load_(dbFeature, new ShowerDoor());\r\n if (doorFeature) {\r\n ShowerDoor.setAdditionalMetaData(doorFeature);\r\n }\r\n }\r\n\r\n static setAdditionalMetaData(doorFeature) {\r\n if (!doorFeature.metaData[\"CompatibleTub\"]) {\r\n doorFeature.metaData[\"CompatibleTub\"] = [\"None\"];\r\n }\r\n }\r\n\r\n disabledClick() {\r\n const showerDoorHandle = this.getParent().showerDoorHandle;\r\n if (showerDoorHandle) {\r\n showerDoorHandle.disabled = this.disabled;\r\n }\r\n }\r\n\r\n handleClick() {\r\n super.handleClick();\r\n if (!this.notAvailableInVisualizer && !getFeatureIsLocked(this)) {\r\n // this.getParent().getParent().setShowerTubCombo();\r\n // let doorWithLiner = false;\r\n // if(this.metaData && this.metaData.length) {\r\n // const activeDoorMetadata = this.metaData.find(metaDataObject => metaDataObject.isFor);\r\n // const showerPanValues = activeDoorMetadata.conditions.find(condition => condition.name === \"BathtubLiner\");\r\n // if (showerPanValues) {\r\n // doorWithLiner = true;\r\n // }\r\n // }\r\n // this.getParent().getParent().setLinerActive(doorWithLiner);\r\n const shower = this.getParent().getParent();\r\n const showerPanCondition = this.metaData[\"ShowerPan\"];\r\n if (!shower.showerTubComboIsActive()) {\r\n shower.showerFloorIsActive = showerPanCondition && showerPanCondition.includes(\"Threshold\");\r\n }\r\n if(!this.matchesMetaForArrayOfConditions(this.getParent().getArrayOfConditions())) {\r\n const showerSizeValues = this.metaData[\"ShowerSize\"];\r\n const showerBodyParent = this.getParent().getParent().showerBody;\r\n if (showerSizeValues) {\r\n const showerBodyThatFits = showerBodyParent.features.filter(showerBodyFeature => {\r\n const showerSizeValues2 = showerBodyFeature.metaData[\"ShowerSize\"];\r\n return showerSizeValues.some(condValue => {\r\n return showerSizeValues2.some(condValue2 => condValue === condValue2);\r\n });\r\n });\r\n if (showerBodyThatFits.length && showerBodyThatFits.every(shBody => shBody.partName !== showerBodyParent.activeFeature.partName)) {\r\n let showerBodyToSet = showerBodyThatFits.find(shBody => {\r\n return shBody.showerDimensions === showerBodyParent.activeFeature.showerDimensions\r\n }) || showerBodyThatFits[0];\r\n showerBodyParent.showerBodySelectedByUser = true;\r\n showerBodyParent.activeFeature = showerBodyToSet;\r\n }\r\n }\r\n }\r\n this.featureClicked();\r\n }\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const shower = this.getParent();\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(shower.showerFloorIsActive), filteredAvailableFeatures);\r\n return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n setLayers(layout) {\r\n const shower = this.getParent();\r\n const currentConditions = this.getArrayOfConditions(shower.showerFloorIsActive);\r\n\r\n if (this.activeFeature && !this.activeFeature.notAvailableInVisualizer && this.activeFeature.matchesMetaForArrayOfConditions(currentConditions)) {\r\n this.checkIfPlaceHolderFits(currentConditions); // here we need to check if placeholder is the same as active feature\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault();\r\n this.checkIfPlaceHolderFits(currentConditions);\r\n return super.setLayers(layout);\r\n }\r\n\r\n checkIfPlaceHolderFits(currentConditions) {\r\n if (this.activeFeature && !this.placeholderChanged) {\r\n const activeFeatureShowerPanCondition = this.activeFeature.metaData[\"ShowerPan\"];\r\n if (activeFeatureShowerPanCondition) {\r\n currentConditions.push({\r\n propName: \"ShowerPan\",\r\n propValue: activeFeatureShowerPanCondition\r\n });\r\n if (!this.placeholderFeature || this.placeholderFeature.notAvailableInVisualizer\r\n || (this.placeholderFeature && !this.placeholderFeature.matchesMetaForArrayOfConditions(currentConditions))) {\r\n this.setNewPlaceHolderFeature(currentConditions);\r\n }\r\n }\r\n }\r\n }\r\n\r\n setNewPlaceHolderFeature(newConditions) {\r\n // console.log('newConditions', newConditions);\r\n const filteredFeatures = this.features ? this.features.filter(f => f.matchesMetaForArrayOfConditions(newConditions)) : [];\r\n const placeholderDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includesCI(\"placeholder\");\r\n });\r\n this.placeholderFeature = placeholderDefault || null;\r\n }\r\n\r\n getArrayOfConditions(showerFloorIsActive) {\r\n const layout = this.getParent().layout;\r\n const showerComboParent = layout.parts[ShowerTubCombo.id];\r\n const showerParent = this.getParent();\r\n\r\n let showerDimensions = showerComboParent.showerTubComboIsActive\r\n ? showerComboParent.showerDimensions()\r\n : showerParent.showerDimensions();\r\n\r\n showerDimensions = getMetadataByDimensions(showerDimensions);\r\n\r\n const vanity = layout.parts[Vanity.id];\r\n let counterTopSize = vanity.counterTopSize();\r\n if (counterTopSize === '72in' && layout.type === 1 && (showerDimensions !== \"Full\" || showerDimensions !== \"Pony\")) {\r\n showerDimensions = \"Full\"\r\n }\r\n\r\n let showerSize = showerComboParent.showerTubComboIsActive\r\n ? showerComboParent.showerSize()\r\n : showerParent.showerSize();\r\n\r\n let compatibleValue = \"None\";\r\n if (showerComboParent.showerTubComboIsActive) {\r\n if (showerComboParent.bottomTub === ShowerComboTubType.bathtub_liner) {\r\n compatibleValue = \"BathtubLiner\"\r\n } else if (showerComboParent.bottomTub === ShowerComboTubType.replacement_tub) {\r\n compatibleValue = \"ReplacementTub\"\r\n } else if (showerComboParent.bottomTub === ShowerComboTubType.walk_in_tub) {\r\n compatibleValue = \"WalkInTub\"\r\n } else if (showerComboParent.bottomTub === ShowerComboTubType.jetted_tub) {\r\n compatibleValue = \"JettedTub\"\r\n }\r\n }\r\n const conditions = [{\r\n propName: 'ShowerSize',\r\n propValue: showerSize\r\n },{\r\n propName: \"EX L\",\r\n propValue: showerDimensions\r\n },{\r\n propName: 'CompatibleTub',\r\n propValue: compatibleValue\r\n }];\r\n if (!showerComboParent.showerTubComboIsActive) {\r\n if (showerFloorIsActive) {\r\n conditions.push({\r\n propName: \"ShowerPan\",\r\n propValue: [\"Threshold\"]\r\n })\r\n } else if (showerParent.showerPanCombo && showerParent.showerPanCombo.activeFeature) {\r\n let showerPanCondition = showerParent.showerPanCombo.activeFeature.metaData[\"ShowerPan\"];\r\n // console.log('showerPanCondition', showerPanCondition);\r\n if (showerPanCondition) {\r\n conditions.push({\r\n propName: \"ShowerPan\",\r\n propValue: showerPanCondition\r\n })\r\n }\r\n }\r\n }\r\n return conditions\r\n }\r\n\r\n setDefault() {\r\n const shower = this.getParent();\r\n const currentActiveFeature = this.activeFeature;\r\n const currentConditions = this.getArrayOfConditions(shower.showerFloorIsActive)\r\n const filteredFeatures = this.features.filter(f => !f.notAvailableInVisualizer && f.matchesMetaForArrayOfConditions(currentConditions));\r\n if (!this.tryToSetTheSameFeature(filteredFeatures)) {\r\n this.setDefaultAccordingToPreviousSelect(shower, filteredFeatures, \"\", \"Placeholder\");\r\n }\r\n this.rememberPreviousSelection(shower, currentActiveFeature);\r\n // shower.showerFloorIsActive = !!(this.activeFeature && this.activeFeature.metaData[\"ShowerPan\"]\r\n // && this.activeFeature.metaData[\"ShowerPan\"].includes(\"Threshold\"));\r\n }\r\n\r\n tryToSetTheSameFeature(filteredFeatures) {\r\n if (this.activeFeature && this.activeFeature.partName) {\r\n const nameToFind = this.activeFeature.partName.replace(\" 30\", \"\").replace(\" 60\", \"\");\r\n this.activeFeature = !nameToFind.includes(\"laceholder\") && filteredFeatures.find(feature => {\r\n if (feature.partName) {\r\n const fName = feature.partName.replace(\" 30\", \"\").replace(\" 60\", \"\");\r\n return fName.includes(nameToFind)\r\n }\r\n });\r\n this.placeholderFeature = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includesCI(\"placeholder\")\r\n });\r\n if (this.activeFeature) {\r\n return true\r\n }\r\n }\r\n return false\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Shower.Custom60in.ShowerDoor;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport {getMetadataByDimensions, iStartWith} from \"../../../../../misc/utils\";\r\nimport DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\nimport store from \"../../../../../store\";\r\nimport {getFeatureIsLocked} from \"../../../../../misc/helpers\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\nimport {toggleNotCompatibleView} from \"../../../../../actions/selectionFunctions\";\r\n\r\nexport default class ShowerPanCombo extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_pan_combo';\r\n this.partName = 'Shower Pan';\r\n this.translateId = \"visualizer.bathroom.shower.shower_pan_combo\";\r\n this.visible = true;\r\n this.isStoneFeature = false;\r\n this.layerPriority = 8;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new ShowerPanCombo())\r\n }\r\n\r\n applyFeatureIfNotCompatible() {\r\n const parent = this.getParent();\r\n const shower = parent.getParent();\r\n shower.showerFloorIsActive = false;\r\n if (shower.layout && shower.showerTubComboIsActive()) {\r\n const comboPart = shower.layout.parts[ShowerTubCombo.id];\r\n comboPart.showerTubComboIsActive = false;\r\n }\r\n }\r\n\r\n handleClick(ignoreLocked) {\r\n const showerPanComboParent = this.getParent();\r\n const shower = showerPanComboParent.getParent();\r\n super.handleClick(ignoreLocked); // set active item & not in visualizer item\r\n\r\n if (this.notAvailableInVisualizer || getFeatureIsLocked(this)) {\r\n return\r\n }\r\n\r\n if ((shower.showerFloorIsActive || shower.showerTubComboIsActive()) && !window.location.hash.includes(\"visualizer\")) {\r\n store.dispatch(toggleNotCompatibleView(true));\r\n return;\r\n }\r\n\r\n this.applyFeatureIfNotCompatible();\r\n\r\n if (!this.matchesMetaForArrayOfConditions(this.getParent().getArrayOfConditions())) {\r\n const showerSizeValues = this.metaData[\"ShowerSize\"];\r\n const showerPanValues = this.metaData[\"ShowerPan\"];\r\n\r\n if (showerSizeValues && showerPanValues) {\r\n const showerDoorParent = shower.showerDoor;\r\n const showerDoorsThatFits = showerDoorParent.features.filter(showerDoorFeature => {\r\n const showerSizeValues2 = showerDoorFeature.metaData[\"ShowerSize\"];\r\n const showerPanValues2 = showerDoorFeature.metaData[\"ShowerPan\"];\r\n let showerSizePassed = showerSizeValues2 && showerSizeValues.some(condValue => {\r\n return showerSizeValues2.some(condValue2 => condValue === condValue2);\r\n });\r\n let showerPanPassed = showerPanValues2 && showerPanValues.some(condPanValue => {\r\n return showerPanValues2.some(condPanValue2 => condPanValue === condPanValue2);\r\n });\r\n return showerSizePassed && showerPanPassed\r\n });\r\n if (showerDoorsThatFits && showerDoorsThatFits.length) {\r\n const showerDimensions = getMetadataByDimensions(showerDoorParent.getParent().showerBody.activeFeature.showerDimensions);\r\n const sameWallFeatures = showerDoorsThatFits.filter((showerDoorsThatFit) => {\r\n const wallValue = showerDoorsThatFit.metaData[\"Wall\"] || showerDoorsThatFit.metaData[\"EX L\"];\r\n return wallValue && wallValue.some(val => val === showerDimensions)\r\n });\r\n\r\n showerDoorParent.activeFeature = sameWallFeatures.length ? sameWallFeatures[0] : showerDoorsThatFits[0];\r\n showerDoorParent.placeholderFeature = (sameWallFeatures.length ? sameWallFeatures : showerDoorsThatFits).find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"laceholder\");\r\n });\r\n }\r\n }\r\n const showerBodyParent = this.getParent().getParent().showerBody;\r\n if (showerSizeValues) {\r\n const showerBodyThatFits = showerBodyParent.features.filter(showerBodyFeature => {\r\n const showerSizeValues2 = showerBodyFeature.metaData[\"ShowerSize\"];\r\n return showerSizeValues2 && showerSizeValues.some(condValue => {\r\n return showerSizeValues2.some(condValue2 => condValue === condValue2);\r\n });\r\n });\r\n if (showerBodyThatFits.length && showerBodyThatFits.every(shBody => shBody.partName !== showerBodyParent.activeFeature.partName)) {\r\n let showerBodyToSet = showerBodyThatFits.find(shBody => {\r\n return shBody.showerDimensions === showerBodyParent.activeFeature.showerDimensions\r\n }) || showerBodyThatFits[0];\r\n showerBodyParent.showerBodySelectedByUser = true;\r\n showerBodyParent.activeFeature = showerBodyToSet;\r\n }\r\n }\r\n this.featureClicked();\r\n }\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(true), filteredAvailableFeatures);\r\n return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const showerParent = this.getParent();\r\n\r\n if (showerParent.showerTubComboIsActive() || showerParent.showerFloorIsActive) {\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n if (this.activeFeature && !this.activeFeature.notAvailableInVisualizer\r\n && this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions(dontFilterByDoorPanMeta) {\r\n const showerParent = this.getParent();\r\n const showerSize = showerParent.showerSize();\r\n let showerDoorType = '';\r\n const showerDoor = showerParent.showerDoor;\r\n const showerDoorActiveFeature = showerDoor ? (showerDoor.activeFeature || showerDoor.placeholderFeature) : null;\r\n if (!dontFilterByDoorPanMeta && showerDoorActiveFeature) {\r\n const showerPanValues = showerDoorActiveFeature.metaData[\"ShowerPan\"];\r\n if (showerPanValues) {\r\n showerDoorType = showerPanValues;\r\n }\r\n }\r\n\r\n // console.log('showerDoorType', showerDoorType);\r\n // const showerDimensions = this.getParent().showerDimensions() === \"30X8\" ? \"Full\" : \"Half\";\r\n const conditions = [{\r\n propName: 'ShowerSize',\r\n propValue: showerSize\r\n }];\r\n if (!dontFilterByDoorPanMeta && showerDoorType) {\r\n conditions.push({\r\n propName: 'ShowerPan',\r\n propValue: showerDoorType\r\n })\r\n }\r\n return conditions;\r\n }\r\n\r\n setDefault() {\r\n const filteredFeatures = this.features.filter(f => !f.notAvailableInVisualizer && f.matchesMetaForArrayOfConditions(this.getArrayOfConditions()));\r\n let currentShowerPanMetadata = this.activeFeature && this.activeFeature.metaData[\"ShowerPan\"]\r\n ? [...this.activeFeature.metaData[\"ShowerPan\"]]\r\n : null;\r\n let previousFeature = null;\r\n if (this.activeFeature) {\r\n previousFeature = Object.assign({} , this.activeFeature);\r\n }\r\n if (!super.tryToSetTheSameFeature(filteredFeatures)) {\r\n let featureToSet = null;\r\n if (currentShowerPanMetadata) {\r\n\r\n let currentColorArrayValue = null;\r\n const filterGroups = store.getState().filterState.filterGroups;\r\n const colorGroup = filterGroups.length && filterGroups.find(filterGroup => filterGroup.name === \"Color\");\r\n currentColorArrayValue = previousFeature.dbFeature.filterValueIDs\r\n && previousFeature.dbFeature.filterValueIDs[colorGroup.id];\r\n\r\n const existingPans = filteredFeatures.filter((feature) => {\r\n return feature.metaData[\"ShowerPan\"] && feature.metaData[\"ShowerPan\"].some((metaValue) => {\r\n return currentShowerPanMetadata.includes(metaValue)\r\n })\r\n });\r\n featureToSet = currentColorArrayValue\r\n ? existingPans.find(filteredFeature => {\r\n return filteredFeature.dbFeature.filterValueIDs\r\n && filteredFeature.dbFeature.filterValueIDs[colorGroup.id]\r\n && filteredFeature.dbFeature.filterValueIDs[colorGroup.id].some(filteredFeatureColor => {\r\n return currentColorArrayValue.some(col => col === filteredFeatureColor)\r\n })\r\n })\r\n : existingPans[0];\r\n if (!featureToSet) {\r\n let filteredByPan = [];\r\n if (currentShowerPanMetadata.includes(\"Low Threshold\")) {\r\n filteredByPan = super.getFeaturesWithMeta(filteredFeatures, \"ShowerPan\", \"Designer\")\r\n } else if (currentShowerPanMetadata.includes(\"Designer\")) {\r\n filteredByPan = super.getFeaturesWithMeta(filteredFeatures, \"ShowerPan\", \"Low Threshold\")\r\n } else if (currentShowerPanMetadata.includes(\"Custom\")) {\r\n filteredByPan = super.getFeaturesWithMeta(filteredFeatures, \"ShowerPan\", \"Standard\");\r\n if (!filteredByPan.length) {\r\n filteredByPan = super.getFeaturesWithMeta(filteredFeatures, \"ShowerPan\", \"Made In The USA\");\r\n }\r\n } else if (currentShowerPanMetadata.includes(\"Standard\")) {\r\n filteredByPan = super.getFeaturesWithMeta(filteredFeatures, \"ShowerPan\", \"Custom\");\r\n if (!filteredByPan.length) {\r\n filteredByPan = super.getFeaturesWithMeta(filteredFeatures, \"ShowerPan\", \"Made In The USA\");\r\n }\r\n } else if (currentShowerPanMetadata.includes(\"Made In The USA\")) {\r\n filteredByPan = super.getFeaturesWithMeta(filteredFeatures, \"ShowerPan\", \"Custom\");\r\n if (!filteredByPan.length) {\r\n filteredByPan = super.getFeaturesWithMeta(filteredFeatures, \"ShowerPan\", \"Standart\");\r\n }\r\n }\r\n if (filteredByPan.length && previousFeature) {\r\n\r\n if (colorGroup && previousFeature.dbFeature.filterValueIDs) {\r\n const currentColorArrayValue = previousFeature.dbFeature.filterValueIDs[colorGroup.id];\r\n if (currentColorArrayValue) {\r\n featureToSet = filteredByPan.find(filteredFeature => {\r\n return filteredFeature.dbFeature.filterValueIDs\r\n && filteredFeature.dbFeature.filterValueIDs[colorGroup.id]\r\n && filteredFeature.dbFeature.filterValueIDs[colorGroup.id].some(filteredFeatureColor => {\r\n return currentColorArrayValue.some(col => col === filteredFeatureColor)\r\n })\r\n });\r\n // console.log('featureToSet', featureToSet);\r\n }\r\n }\r\n }\r\n if (!featureToSet && filteredByPan.length) {\r\n featureToSet = filteredByPan[0]\r\n }\r\n }\r\n }\r\n const placeholderDefault = filteredFeatures.find((feature) => {\r\n return iStartWith(feature.dbFeature.displayName, 'Shower Pan - Placeholder');\r\n });\r\n this.activeFeature = featureToSet || filteredFeatures[0];\r\n this.placeholderFeature = placeholderDefault || null;\r\n }\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Shower.Custom60in.ShowerPanCombo;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\nimport {ShowerComboTubType, LayoutAbbreviation} from \"../../constants\";\r\nimport {getMetadataByDimensions} from \"../../../../../misc/utils\";\r\nimport {Vanity} from \"../../parts/vanity\";\r\n\r\nexport default class ShowerDoorHandle extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_door_handle';\r\n this.partName = 'Handle';\r\n this.translateId = \"visualizer.bathroom.shower.shower_door_handle\";\r\n this.dbName = 'Shower Door Handle';\r\n this.visible = true;\r\n this.isStoneFeature = false;\r\n this.layerPriority = 9;\r\n if (isChild) {\r\n this.previouslySelectedFeatures = {\r\n LG: {},\r\n SM: {}\r\n };\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n const handle = this.load_(dbFeature, new ShowerDoorHandle());\r\n if (handle) {\r\n ShowerDoorHandle.setAdditionalMetaData(handle);\r\n }\r\n }\r\n\r\n static setAdditionalMetaData(handle) {\r\n const compatible = handle.metaData[\"CompatibleTub\"];\r\n const showerSize = handle.metaData[\"ShowerSize\"];\r\n if (!compatible) {\r\n handle.metaData[\"CompatibleTub\"] = [\"None\"];\r\n }\r\n if (!showerSize) {\r\n handle.metaData[\"ShowerSize\"] = [\"60in\"];\r\n }\r\n }\r\n\r\n disabledClick() {\r\n const showerDoor = this.getParent().showerDoor;\r\n if (showerDoor) {\r\n showerDoor.disabled = this.disabled;\r\n }\r\n }\r\n\r\n handleClick() {\r\n super.handleClick();\r\n // this.getParent().getParent().setShowerTubCombo();\r\n //\r\n // let doorWithLiner = false;\r\n // if(this.metaData && this.metaData.length) {\r\n // const activeDoorMetadata = this.metaData.find(metaDataObject => metaDataObject.isFor);\r\n // const showerPanValues = activeDoorMetadata.conditions.find(condition => condition.name === \"BathtubLiner\");\r\n // if (showerPanValues) {\r\n // doorWithLiner = true;\r\n // }\r\n // }\r\n //\r\n // this.getParent().getParent().setLinerActive(doorWithLiner);\r\n // this.featureClicked();\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const showerParent = this.getParent();\r\n\r\n if (!showerParent.showerDoor || !showerParent.showerDoor.activeFeature ||\r\n (showerParent.showerDoor.activeFeature.metaData && showerParent.showerDoor.activeFeature.metaData[\"ShowerHandle\"]\r\n && showerParent.showerDoor.activeFeature.metaData[\"ShowerHandle\"][0] === \"None\")) {\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n const layout = this.getParent().layout;\r\n const showerComboParent = layout.parts[ShowerTubCombo.id];\r\n const showerParent = this.getParent();\r\n const layoutAbr = layout.getCurrentLayoutAbbreviation();\r\n\r\n let showerSize = showerComboParent.showerTubComboIsActive\r\n ? showerComboParent.showerSize()\r\n : showerParent.showerSize();\r\n\r\n let compatibleValue = \"None\";\r\n if (showerComboParent.showerTubComboIsActive) {\r\n if (showerComboParent.bottomTub === ShowerComboTubType.bathtub_liner) {\r\n compatibleValue = \"BathtubLiner\"\r\n } else if (showerComboParent.bottomTub === ShowerComboTubType.replacement_tub) {\r\n compatibleValue = \"ReplacementTub\"\r\n } else if (showerComboParent.bottomTub === ShowerComboTubType.walk_in_tub) {\r\n compatibleValue = \"WalkInTub\"\r\n } else if (showerComboParent.bottomTub === ShowerComboTubType.jetted_tub) {\r\n compatibleValue = \"JettedTub\"\r\n }\r\n }\r\n\r\n const conditions = [{\r\n propName: 'ShowerSize',\r\n propValue: showerSize\r\n },{\r\n propName: 'CompatibleTub',\r\n propValue: compatibleValue\r\n }];\r\n\r\n if (layoutAbr === LayoutAbbreviation.Large) {\r\n let showerDimensions = showerComboParent.showerTubComboIsActive\r\n ? showerComboParent.showerDimensions()\r\n : showerParent.showerDimensions();\r\n\r\n showerDimensions = getMetadataByDimensions(showerDimensions);\r\n\r\n const vanity = layout.parts[Vanity.id];\r\n let counterTopSize = vanity.counterTopSize();\r\n if (counterTopSize === '72in' && layout.type === 1 && (showerDimensions !== \"Full\" || showerDimensions !== \"Pony\")) {\r\n showerDimensions = \"Full\"\r\n }\r\n\r\n conditions.push({\r\n propName: \"EX L\",\r\n propValue: showerDimensions\r\n })\r\n }\r\n\r\n if (showerParent.showerDoor && showerParent.showerDoor.activeFeature) { // add shower pan condition only if it is shower\r\n const doorCondition = showerParent.showerDoor.activeFeature.metaData[\"ShowerDoor\"];\r\n const handleCondition = showerParent.showerDoor.activeFeature.metaData[\"ShowerHandle\"];\r\n // console.log('doorCondition', doorCondition);\r\n if (doorCondition) {\r\n conditions.push({\r\n propName: 'ShowerDoor',\r\n propValue: doorCondition\r\n })\r\n }\r\n if (handleCondition) {\r\n conditions.push({\r\n propName: 'ShowerHandle',\r\n propValue: handleCondition\r\n })\r\n }\r\n }\r\n\r\n if (!showerParent.showerTubComboIsActive()) {\r\n if (showerParent.showerFloorIsActive) {\r\n conditions.push({\r\n propName: \"ShowerPan\",\r\n propValue: \"Threshold\"\r\n })\r\n } else if (showerParent.showerPanCombo && showerParent.showerPanCombo.activeFeature) {\r\n conditions.push({\r\n propName: \"ShowerPan\",\r\n propValue: showerParent.showerPanCombo.activeFeature.metaData[\"ShowerPan\"]\r\n })\r\n }\r\n }\r\n // console.log('conditions', conditions);\r\n return conditions\r\n }\r\n\r\n setDefault() {\r\n const shower = this.getParent();\r\n const currentActiveFeature = this.activeFeature;\r\n const filteredFeatures = this.features.filter(f => f.matchesMetaForArrayOfConditions(this.getArrayOfConditions()));\r\n if (!super.tryToSetTheSameFeature(filteredFeatures)) {\r\n this.setDefaultAccordingToPreviousSelect(shower, filteredFeatures, \"Brantford\");\r\n }\r\n this.rememberPreviousSelection(shower, currentActiveFeature);\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Shower.Custom60in.ShowerDoorHandle;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n}\r\n","import DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\nimport {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport {LayoutAbbreviation} from \"../../constants\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\nimport {Shower} from \"../../parts/shower\";\r\n\r\nexport default class PonyWallCap extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'pony_wall_cap';\r\n this.isPonyWallPart = true;\r\n this.visible = true;\r\n this.partName = 'Pony Wall Cap';\r\n this.translateId = \"visualizer.bathroom.shower.pony_wall_cap\";\r\n this.isStoneFeature = true;\r\n this.disableOnHomeSections = true;\r\n this.shadowName = \"Pony Wall Cap\";\r\n this.layerPriority = 11;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new PonyWallCap());\r\n }\r\n\r\n disabledClick() {\r\n\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Shower.Custom60in.PonyWallCap;\r\n const zIndex2 = zIndexes.Shower.Custom60in.PonyWallCapShadow;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.shadowFeature) {\r\n this.shadowFeature.layer.zIndex = zIndex2;\r\n }\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const showerParent = this.getParent().getActiveShowerGroup();\r\n if (showerParent.showerDimensions() !== \"Pony\") {\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n const conditions = this.getArrayOfConditions();\r\n if (!this.shadowFeature || (this.shadowFeature && !this.shadowFeature.matchesMetaForArrayOfConditions(conditions))) {\r\n this.setShadowFeature();\r\n }\r\n\r\n const layoutAbr = layout.getCurrentLayoutAbbreviation();\r\n const matchesByBindings = this.activeFeature && this.activeFeature.dbFeature && this.activeFeature.s3Bindings && this.activeFeature.dbFeature.s3Bindings.some(binding => {\r\n return binding.layout === LayoutAbbreviation.All || binding.layout === layoutAbr\r\n });\r\n if (matchesByBindings && (this.activeFeature.matchesMetaForArrayOfConditions(conditions)\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n const parent = this.getParent();\r\n const layout = parent.layout;\r\n const layoutAbr = layout.getCurrentLayoutAbbreviation();\r\n if (layoutAbr === LayoutAbbreviation.Small){\r\n const activeShower = parent.showerTubComboIsActive()\r\n ? layout.parts[ShowerTubCombo.id]\r\n : layout.parts[Shower.id];\r\n const showerSize = activeShower.showerSize(); // 60in, 30in, ..\r\n // const showerDimensions = activeShower.showerDimensions(); // 15x4, Pony, ...\r\n return [{\r\n propName: 'Shower',\r\n propValue: 'Custom'\r\n }, {\r\n propName: 'Size',\r\n propValue: showerSize\r\n }];\r\n }\r\n\r\n return []\r\n }\r\n\r\n setDefault() {\r\n const filteredFeatures = this.features.filter(f => f.matchesMetaForArrayOfConditions(this.getArrayOfConditions()));\r\n if (!super.tryToSetTheSameFeature(filteredFeatures, '', '', true)) {\r\n const hardCodedDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName\r\n && feature.dbFeature.displayName.includesCI(\"Pony Wall Cap - Model[For=Shower=(Custom)=Size=(30in_60in)]\");\r\n });\r\n const placeholderDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includesCI(\" - Placeholder\");\r\n });\r\n this.activeFeature = hardCodedDefault || filteredFeatures[0];\r\n this.placeholderFeature = placeholderDefault || null;\r\n this.setShadowFeature();\r\n }\r\n }\r\n\r\n}\r\n","import DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\nimport {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport {LayoutAbbreviation} from \"../../constants\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\n\r\nexport default class PonyWallGlass extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'pony_wall_glass';\r\n this.isPonyWallPart = true;\r\n this.visible = true;\r\n this.partName = 'Pony Wall Glass';\r\n this.translateId = \"visualizer.bathroom.shower.pony_wall_glass\";\r\n this.isStoneFeature = false;\r\n this.disableOnHomeSections = true;\r\n this.layerPriority = 10;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new PonyWallGlass());\r\n }\r\n\r\n disabledClick() {\r\n\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Shower.Custom60in.PonyWallGlass;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const showerParent = this.getParent().getActiveShowerGroup();\r\n if (showerParent.showerDimensions() !== \"Pony\") {\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n const layoutAbr = layout.getCurrentLayoutAbbreviation();\r\n const matchesByBindings = this.activeFeature && this.activeFeature.dbFeature.s3Bindings.some(binding => {\r\n return binding.layout === LayoutAbbreviation.All || binding.layout === layoutAbr\r\n });\r\n\r\n if (matchesByBindings && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n const showerParent = this.getParent();\r\n const layout = showerParent.layout;\r\n const layoutAbr = layout.getCurrentLayoutAbbreviation();\r\n\r\n if (layoutAbr === LayoutAbbreviation.Small) {\r\n const showerComboParent = this.getParent().layout.parts[ShowerTubCombo.id];\r\n let showerSize = showerComboParent.showerTubComboIsActive\r\n ? showerComboParent.showerSize()\r\n : showerParent.showerSize();\r\n return [{\r\n propName: 'Size',\r\n propValue: showerSize\r\n }]\r\n }\r\n\r\n return []\r\n }\r\n\r\n setDefault() {\r\n const filteredFeatures = this.features.filter(f => f.matchesMetaForArrayOfConditions(this.getArrayOfConditions()));\r\n if (!super.tryToSetTheSameFeature(filteredFeatures)) {\r\n const hardCodedDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"Standard Pony Wall\");\r\n });\r\n const placeholderDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"laceholder\");\r\n });\r\n this.activeFeature = hardCodedDefault || filteredFeatures[0];\r\n this.placeholderFeature = placeholderDefault || null;\r\n }\r\n }\r\n\r\n}\r\n","import DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\nimport {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport {ShowerBodyType} from \"../../constants\";\r\nimport {Shower} from \"../../parts/shower\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\nimport {getFeatureIsLocked} from \"../../../../../misc/helpers\";\r\nimport store from \"../../../../../store\";\r\nimport {toggleNotCompatibleView} from \"../../../../../actions/selectionFunctions\";\r\n\r\nexport default class ShowerFloor extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_floor';\r\n this.partName = 'Floor';\r\n this.translateId = \"visualizer.bathroom.shower.shower_floor\";\r\n this.homePageTitle = 'Shower Flooring';\r\n this.dbName = 'ShowerFloor';\r\n this.isStoneFeature = true;\r\n this.selectedByUser = false;\r\n this.shadowName = \"Floor\";\r\n this.layerPriority = 6;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new ShowerFloor())\r\n }\r\n\r\n applyFeatureIfNotCompatible() {\r\n const parent = this.getParent();\r\n const shower = parent.getParent();\r\n shower.showerFloorIsActive = true;\r\n if (shower.layout && shower.showerTubComboIsActive()) {\r\n const comboPart = shower.layout.parts[ShowerTubCombo.id];\r\n comboPart.showerTubComboIsActive = false;\r\n }\r\n }\r\n\r\n handleClick(ignoreLocked) {\r\n super.handleClick(ignoreLocked);\r\n if (this.notAvailableInVisualizer || getFeatureIsLocked(this)) {\r\n return\r\n }\r\n const parent = this.getParent();\r\n const shower = parent.getParent();\r\n if ((!shower.showerFloorIsActive || shower.showerTubComboIsActive()) && !window.location.hash.includes(\"visualizer\")) {\r\n store.dispatch(toggleNotCompatibleView(true));\r\n return;\r\n }\r\n\r\n this.applyFeatureIfNotCompatible();\r\n\r\n this.getParent().selectedByUser = true;\r\n const threshold = shower.threshold;\r\n if (threshold && !threshold.selectedByUser) {\r\n const thresholdAvailableFeatures = threshold.navigationSubItems();\r\n const currentFloorName = this.getSplittedFeatureName();\r\n const sameThreshold = thresholdAvailableFeatures.find(tr => tr.part.getSplittedFeatureName() === currentFloorName);\r\n if (sameThreshold) {\r\n super.handleClick.call(sameThreshold.part);\r\n threshold.selectedByUser = false;\r\n }\r\n }\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n if (this.getParent().showerTubComboIsActive()) {\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n if (this.getParent().customBodyType === ShowerBodyType.Door) {\r\n const showerDoorParent = this.getParent().showerDoor;\r\n if (showerDoorParent && showerDoorParent.activeFeature) {\r\n const currentShowerPanCondition = showerDoorParent.activeFeature.metaData[\"ShowerPan\"];\r\n if (!currentShowerPanCondition || (currentShowerPanCondition && !currentShowerPanCondition.includes(\"Threshold\"))) {\r\n super.hideLayers();\r\n return;\r\n }\r\n }\r\n }\r\n\r\n const conditions = this.getArrayOfConditions();\r\n if (!this.shadowFeature || (this.shadowFeature && !this.shadowFeature.matchesMetaForArrayOfConditions(conditions))) {\r\n this.setShadowFeature();\r\n }\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(conditions)\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n return [{\r\n propName: 'ShowerSize',\r\n propValue: this.getParent().showerSize()\r\n }];\r\n }\r\n\r\n setDefault() {\r\n const filteredFeatures = this.features.filter(f => f.matchesMetaForArrayOfConditions(this.getArrayOfConditions()));\r\n if (!super.tryToSetTheSameFeature(filteredFeatures)) {\r\n const hardCodedDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"Sahara Autumn Porcelain Tile\");\r\n });\r\n const placeholderDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"laceholder\");\r\n });\r\n this.activeFeature = hardCodedDefault || filteredFeatures[0];\r\n this.placeholderFeature = placeholderDefault || null;\r\n this.setShadowFeature();\r\n }\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (this.getParent().activeSubType() === Shower.Type.Custom) {\r\n const zIndex = zIndexes.Shower.Custom60in.Floor;\r\n const zIndex2 = zIndexes.Shower.Custom60in.FloorShadow;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n if(zIndexes && this.shadowFeature) {\r\n this.shadowFeature.layer.zIndex = zIndex2;\r\n }\r\n }\r\n }\r\n}\r\n","import DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\nimport {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport {ShowerBodyType} from \"../../constants\";\r\nimport {Shower} from \"../../parts/shower\";\r\nimport { getMetadataByDimensions } from \"../../../../../misc/utils\";\r\nimport {Vanity} from \"../../parts/vanity\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\nimport {getFeatureIsLocked} from \"../../../../../misc/helpers\";\r\nimport store from \"../../../../../store\";\r\nimport {toggleNotCompatibleView} from \"../../../../../actions/selectionFunctions\";\r\n\r\nexport default class Threshold extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'threshold';\r\n this.partName = 'Threshold';\r\n this.translateId = \"visualizer.bathroom.shower.threshold\";\r\n this.homePageTitle = 'Threshold';\r\n this.dbName = 'ShowerPan';\r\n this.isStoneFeature = true;\r\n this.selectedByUser = false;\r\n this.shadowName = \"Pan\";\r\n this.layerPriority = 7;\r\n }\r\n\r\n applyFeatureIfNotCompatible() {\r\n const parent = this.getParent();\r\n const shower = parent.getParent();\r\n shower.showerFloorIsActive = true;\r\n if (shower.layout && shower.showerTubComboIsActive()) {\r\n const comboPart = shower.layout.parts[ShowerTubCombo.id];\r\n comboPart.showerTubComboIsActive = false;\r\n }\r\n }\r\n\r\n handleClick(ignoreLocked) {\r\n super.handleClick(ignoreLocked);\r\n if (this.notAvailableInVisualizer || getFeatureIsLocked(this)) {\r\n return\r\n }\r\n const parent = this.getParent();\r\n const shower = parent.getParent();\r\n if ((!shower.showerFloorIsActive || shower.showerTubComboIsActive()) && !window.location.hash.includes(\"visualizer\")) {\r\n store.dispatch(toggleNotCompatibleView(true));\r\n return;\r\n }\r\n\r\n this.applyFeatureIfNotCompatible();\r\n\r\n this.getParent().selectedByUser = true;\r\n const showerFloor = shower.showerFloor;\r\n if (showerFloor && !showerFloor.selectedByUser) {\r\n const showerFloorAvailableFeatures = showerFloor.navigationSubItems();\r\n const currentThresholdName = this.getSplittedFeatureName();\r\n const sameShowerFloor = showerFloorAvailableFeatures.find(navItemFloor => {\r\n return navItemFloor.part.getSplittedFeatureName() === currentThresholdName\r\n });\r\n if (sameShowerFloor) {\r\n super.handleClick.call(sameShowerFloor.part);\r\n showerFloor.selectedByUser = false;\r\n }\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n if (dbFeature.metaData) {\r\n if(Array.isArray(dbFeature.metaData[\"EX L\"])) {\r\n if (dbFeature.metaData[\"EX L\"].includes(\"Full\") && !dbFeature.metaData[\"EX L\"].includes(\"Pony\")) {\r\n dbFeature.metaData[\"EX L\"].push(\"Pony\");\r\n } else if (dbFeature.metaData[\"EX L\"].includes(\"Pony\") && !dbFeature.metaData[\"EX L\"].includes(\"Full\")) {\r\n dbFeature.metaData[\"EX L\"].push(\"Full\");\r\n }\r\n } else if (!dbFeature.metaData[\"EX L\"] && Array.isArray(dbFeature.metaData[\"ShowerSize\"]) && dbFeature.metaData[\"ShowerSize\"][0] === \"30in\"\r\n && Array.isArray(dbFeature.s3Bindings) && dbFeature.s3Bindings[0] && dbFeature.s3Bindings[0].layout === \"SM\") {\r\n dbFeature.metaData[\"EX L\"] = [\"Full\", \"Pony\"];\r\n }\r\n }\r\n return super.load_(dbFeature, new Threshold())\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n if (this.getParent().showerTubComboIsActive() || !this.getParent().showerFloorIsActive) {\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n if (this.getParent().customBodyType === ShowerBodyType.Door) {\r\n const showerDoorParent = this.getParent().showerDoor;\r\n if (showerDoorParent && showerDoorParent.activeFeature) {\r\n const currentShowerPanCondition = showerDoorParent.activeFeature.metaData[\"ShowerPan\"];\r\n if (!currentShowerPanCondition || (currentShowerPanCondition && !currentShowerPanCondition.includes(\"Threshold\"))) {\r\n super.hideLayers();\r\n return;\r\n }\r\n }\r\n }\r\n const conditions = this.getArrayOfConditions();\r\n if (!this.shadowFeature || (this.shadowFeature && !this.shadowFeature.matchesMetaForArrayOfConditions(conditions))) {\r\n this.setShadowFeature();\r\n }\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(conditions)\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n const layout = this.getParent().layout;\r\n const showerSize = this.getParent().showerSize();\r\n let showerDimensions = getMetadataByDimensions(this.getParent().showerDimensions());\r\n\r\n const vanity = layout.parts[Vanity.id];\r\n let counterTopSize = vanity.counterTopSize();\r\n if (counterTopSize === '72in' && layout.type === 1 && (showerDimensions !== \"Full\" || showerDimensions !== \"Pony\")) {\r\n showerDimensions = \"Full\"\r\n }\r\n\r\n return [{\r\n propName: 'ShowerSize',\r\n propValue: showerSize\r\n }, {\r\n propName: 'EX L',\r\n propValue: showerDimensions\r\n }];\r\n }\r\n\r\n setDefault() {\r\n const filteredFeatures = this.features.filter(f => f.matchesMetaForArrayOfConditions(this.getArrayOfConditions()));\r\n if (!super.tryToSetTheSameFeature(filteredFeatures)) {\r\n const hardCodedDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"Sahara Autumn Porcelain Tile\");\r\n });\r\n const placeholderDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"laceholder\");\r\n });\r\n this.activeFeature = hardCodedDefault || filteredFeatures[0];\r\n this.placeholderFeature = placeholderDefault || null;\r\n this.setShadowFeature();\r\n }\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (this.getParent().activeSubType() === Shower.Type.Custom) {\r\n const zIndex = zIndexes.Shower.Custom60in.Threshold;\r\n const zIndex2 = zIndexes.Shower.Custom60in.ThresholdShadow;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n if(zIndexes && this.shadowFeature) {\r\n this.shadowFeature.layer.zIndex = zIndex2;\r\n }\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../parts/intermediatePart\";\r\n\r\nexport default class ShowerDrain extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_drain';\r\n this.partName = 'Shower Drain';\r\n this.translateId = \"visualizer.bathroom.shower.shower_drain\";\r\n this.homePageTitle = 'Shower Drain';\r\n this.visible = false;\r\n this.layerPriority = 14;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new ShowerDrain())\r\n }\r\n\r\n setLayers(layout) {\r\n const showerParent = this.getParent();\r\n if (!showerParent.showerFloorIsActive || showerParent.showerTubComboIsActive()) {\r\n super.hideLayers();\r\n return;\r\n }\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n const showerSize = this.getParent().showerSize();\r\n return [{\r\n propName: 'ShowerSize',\r\n propValue: showerSize\r\n }];\r\n }\r\n\r\n setDefault() {\r\n const filteredFeatures = this.features.filter(f => f.matchesMetaForArrayOfConditions(this.getArrayOfConditions()));\r\n this.activeFeature = filteredFeatures[0];\r\n this.placeholderFeature = filteredFeatures[0];\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Shower.Custom60in.ShowerDrain;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\nimport DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\nimport {Shower} from \"../../parts/shower\";\r\n\r\nexport default class ShowerHead extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_head';\r\n this.translateId = \"visualizer.bathroom.shower.shower_head\";\r\n this.partName = 'Shower Head';\r\n this.layerPriority = 4;\r\n this.canBeDisabled = true;\r\n if (isChild) {\r\n this.previouslySelectedFeatures = {\r\n LG: {},\r\n SM: {}\r\n };\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new ShowerHead());\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const showerTubCombo = this.getParent().layout.parts[ShowerTubCombo.id];\r\n\r\n if (this.getParent().showerTubComboIsActive() && showerTubCombo && showerTubCombo.walkInTub\r\n && showerTubCombo.bottomTub === showerTubCombo.walkInTub.bottomTubId) {\r\n super.hideLayers();\r\n return;\r\n }\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n getArrayOfConditions() {\r\n const showerParent = this.getParent();\r\n const activeShowerPartId = showerParent.showerTubComboIsActive() ? ShowerTubCombo.id : Shower.id;\r\n const showerSize = showerParent.layout.parts[activeShowerPartId].showerSize();\r\n return [{\r\n propName: \"Shower\",\r\n propValue: showerParent.showerTubComboIsActive()\r\n ? [\"Tub\"]\r\n : showerParent.isComplete() ? \"Complete\" : \"Custom\"\r\n }, {\r\n propName: 'ShowerSize',\r\n propValue: showerSize\r\n }]\r\n }\r\n\r\n setDefault() {\r\n const shower = this.getParent();\r\n const currentActiveFeature = this.activeFeature;\r\n const filteredFeatures = this.features.filter(f => f.matchesMetaForArrayOfConditions(this.getArrayOfConditions()));\r\n if (!super.tryToSetTheSameFeature(filteredFeatures)) {\r\n this.setDefaultAccordingToPreviousSelect(shower, filteredFeatures, \"Brantford\");\r\n }\r\n this.rememberPreviousSelection(shower, currentActiveFeature);\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const ShowerType = this.getParent().activeSubType() === Shower.Type.Custom || this.getParent().showerTubComboIsActive()\r\n ? 'Custom60in'\r\n : 'Steam60in';\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Shower[ShowerType].ShowerHead;\r\n }\r\n if(zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndexes.Shower[ShowerType].ShowerHead;\r\n }\r\n }\r\n}\r\n","import find from \"lodash/find\";\r\n\r\nimport {Part} from \"./part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport {IntermediatePart} from \"./intermediatePart\";\r\n\r\nexport default class GlobalShadow extends Part {\r\n static id = 'Global Shadow';\r\n\r\n constructor() {\r\n super(true, false, PartMenuType.Simple);\r\n this.partId = 'global_shadow';\r\n this.menuType = PartMenuType.Simple;\r\n this.partName = 'Global Shadow';\r\n }\r\n\r\n load(dbFeature) {\r\n let part = null;\r\n switch (dbFeature.groupName) {\r\n case \"Global Shadow\":\r\n part = new GlobalShadowBody();\r\n break;\r\n }\r\n if (part) {\r\n part.getParent = () => this;\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n part.load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n setLayers(layout) {\r\n const layers = [];\r\n if (this.activeFeature) {\r\n this.activeFeature.setLayers(layout);\r\n this.activeFeature.layer.addTo(layers);\r\n }\r\n return layers;\r\n }\r\n\r\n setDefault() {\r\n this.activeFeature = this.features[0];\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.setZIndex(zIndexes);\r\n }\r\n }\r\n\r\n}\r\n\r\nclass GlobalShadowBody extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n\r\n this.partName = 'Global Shadow Body';\r\n }\r\n\r\n load(dbFeature) {\r\n super.load_.call(this.getParent(), dbFeature, this, false);\r\n }\r\n\r\n setLayers(layout) {\r\n // const s3Binding = find(this.dbFeature.s3Bindings, {entityID: this.featureDefinitionId(this)});\r\n let s3Binding = find(this.dbFeature.s3Bindings, {entityID: this.featureDefinitionId(this), layout: layout.getCurrentLayoutAbbreviation()});\r\n if (!s3Binding) {\r\n s3Binding = find(this.dbFeature.s3Bindings, {entityID: this.featureDefinitionId(this)});\r\n }\r\n this.layer.fromS3Binding(s3Binding);\r\n }\r\n\r\n setDefault() {\r\n this.activeFeature = this.features[0];\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes)\r\n this.layer.zIndex = zIndexes.Global_Shadow_Overlay;\r\n }\r\n}\r\n","import DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\nimport {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport {Shower} from \"../../parts/shower\";\r\nimport {LayoutAbbreviation} from \"../../constants\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\n\r\nexport default class PonyWall extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'pony_wall';\r\n this.isPonyWallPart = true;\r\n this.visible = true;\r\n this.partName = 'Pony Wall';\r\n this.translateId = \"visualizer.bathroom.walls.pony_wall\";\r\n this.isStoneFeature = true;\r\n this.disableOnHomeSections = true;\r\n this.shadowName = \"Pony Wall\";\r\n this.activeFeatureBeforeAllWalls = null;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new PonyWall());\r\n }\r\n\r\n disabledClick() {\r\n\r\n }\r\n\r\n handleClick(ignoreLocked, clickFrom) {\r\n super.handleClick(ignoreLocked);\r\n\r\n const wallParent = this.getParent().getParent();\r\n\r\n const layout = wallParent.layout;\r\n const layoutAbr = layout.getCurrentLayoutAbbreviation();\r\n\r\n if (layoutAbr === LayoutAbbreviation.Large) {\r\n if (clickFrom !== 'context' && clickFrom !== 'all_walls') {\r\n const wallExLFeature = wallParent.wallExL && wallParent.wallExL.features.find(feature => {\r\n return feature.partName === this.partName\r\n });\r\n if (wallExLFeature) {\r\n wallExLFeature.handleClick(ignoreLocked, 'context');\r\n }\r\n }\r\n }\r\n\r\n this.featureClicked();\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Shower.Custom60in.PonyWall;\r\n const zIndex2 = zIndexes.Shower.Custom60in.PonyWallShadow;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.shadowFeature) {\r\n this.shadowFeature.layer.zIndex = zIndex2;\r\n }\r\n }\r\n\r\n getAvailableFeatures(filters) {\r\n const filteredAvailableFeatures = super.getFilteredFeaturesByFilters(filters);\r\n return super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n setLayers(layout) {\r\n const shower = this.getParent().layout.parts[Shower.id];\r\n const showerParent = shower.getActiveShowerGroup();\r\n if (showerParent.showerDimensions() !== \"Pony\" || (!shower.showerTubComboIsActive()\r\n && shower.showerBody.disabled)) {\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n if (!this.shadowFeature\r\n || (this.shadowFeature && !this.shadowFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions()))) {\r\n this.setShadowFeature();\r\n }\r\n\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault(layout);\r\n return super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n const parent = this.getParent();\r\n const layout = parent.layout;\r\n const layoutAbr = layout.getCurrentLayoutAbbreviation();\r\n if (layoutAbr === LayoutAbbreviation.Small){\r\n const activeShower = parent.showerTubComboIsActive()\r\n ? layout.parts[ShowerTubCombo.id]\r\n : layout.parts[Shower.id];\r\n const showerSize = activeShower.showerSize(); // 60in, 30in, ..\r\n // const showerDimensions = activeShower.showerDimensions(); // 15x4, Pony, ...\r\n return [{\r\n propName: 'Shower',\r\n propValue: 'Custom'\r\n }, {\r\n propName: 'Size',\r\n propValue: showerSize\r\n }];\r\n }\r\n\r\n return []\r\n }\r\n\r\n setDefault(layout) {\r\n if (!layout)\r\n return ;\r\n\r\n const layoutAbr = layout.getCurrentLayoutAbbreviation();\r\n const filteredFeatures = this.features.filter(f => f.matchesMetaForArrayOfConditions(this.getArrayOfConditions()));\r\n if (!super.tryToSetTheSameFeature(filteredFeatures, null, null, true)) {\r\n let hardCodedName = '';\r\n switch (layoutAbr) {\r\n case LayoutAbbreviation.Small:\r\n hardCodedName = 'Pony Wall - Demo Model';\r\n break;\r\n case LayoutAbbreviation.Large:\r\n hardCodedName = 'Pony Wall - Model[For=Shower=(Custom)=Size=(30in_60in)]';\r\n break;\r\n default:\r\n console.error('PonyWall - Unknown Layout Abr', layoutAbr);\r\n }\r\n\r\n const hardCodedDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName &&\r\n feature.dbFeature.displayName.includesCI(hardCodedName);\r\n });\r\n const placeholderDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includesCI(\"placeholder\");\r\n });\r\n this.activeFeature = hardCodedDefault || filteredFeatures[0];\r\n this.placeholderFeature = placeholderDefault || null;\r\n this.setShadowFeature();\r\n }\r\n }\r\n\r\n // changeLayout(layoutType) {\r\n changeLayout() {\r\n // this.activeFeature = null;\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../parts/intermediatePart\";\r\n\r\nexport default class WallA extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'wall_a';\r\n this.activeFeatureBeforeAllWalls = null;\r\n this.partName = 'Wall A';\r\n this.translateId = \"visualizer.bathroom.walls.wall_a\";\r\n this.allWallsApplied = true;\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new WallA());\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Wall_A;\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndexes.Wall_A;\r\n }\r\n }\r\n }\r\n\r\n // handleClick(clickFrom) {\r\n // if (clickFrom === 'simpleWall' || clickFrom === 'showerWall' || clickFrom === 'vanityWall') {\r\n // const parent = this.getParent();\r\n // if (clickFrom === 'simpleWall') {\r\n // parent.allWallsApplied = true;\r\n // }\r\n // parent.activeFeatureBeforeAllWalls = parent.activeFeature;\r\n // if (!parent.placeholderChanged) {\r\n // parent.rememberToRecoverPlaceholder = true;\r\n // }\r\n // }\r\n // super.handleClick();\r\n // }\r\n\r\n // unCheckAllWalls(clickFrom, navPart) {\r\n // if (clickFrom === 'simpleWall') {\r\n // this.allWallsApplied = false;\r\n // }\r\n // if (!(navPart instanceof WallA)) {\r\n // if (this.activeFeatureBeforeAllWalls) {\r\n // this.activeFeatureBeforeAllWalls.handleClick();\r\n // this.activeFeatureBeforeAllWalls = null;\r\n // }\r\n // if (this.rememberToRecoverPlaceholder) {\r\n // this.placeholderChanged = false;\r\n // this.rememberToRecoverPlaceholder = false;\r\n // }\r\n // }\r\n // }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../parts/intermediatePart\";\r\n\r\nexport default class WallB extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'wall_b';\r\n this.activeFeatureBeforeAllWalls = null;\r\n this.partName = 'Wall B';\r\n this.translateId = \"visualizer.bathroom.walls.wall_b\";\r\n this.allWallsApplied = true;\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new WallB());\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Wall_B;\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndexes.Wall_B;\r\n }\r\n }\r\n }\r\n\r\n // handleClick(clickFrom) {\r\n // if (clickFrom === 'simpleWall' || clickFrom === 'showerWall' || clickFrom === 'vanityWall') {\r\n // const parent = this.getParent();\r\n // if (clickFrom === 'simpleWall') {\r\n // parent.allWallsApplied = true;\r\n // }\r\n // parent.activeFeatureBeforeAllWalls = parent.activeFeature;\r\n // if (!parent.placeholderChanged) {\r\n // parent.rememberToRecoverPlaceholder = true;\r\n // }\r\n // }\r\n // super.handleClick();\r\n // }\r\n\r\n // unCheckAllWalls(clickFrom, navPart) {\r\n // if (clickFrom === 'simpleWall') {\r\n // this.allWallsApplied = false;\r\n // }\r\n // if (!(navPart instanceof WallB)) {\r\n // if (this.activeFeatureBeforeAllWalls) {\r\n // this.activeFeatureBeforeAllWalls.handleClick();\r\n // this.activeFeatureBeforeAllWalls = null;\r\n // }\r\n // if (this.rememberToRecoverPlaceholder) {\r\n // this.placeholderChanged = false;\r\n // this.rememberToRecoverPlaceholder = false;\r\n // }\r\n // }\r\n // }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../parts/intermediatePart\";\r\n\r\nexport default class WallC extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'wall_c';\r\n this.activeFeatureBeforeAllWalls = null;\r\n this.partName = 'Wall C';\r\n this.translateId = \"visualizer.bathroom.walls.wall_c\";\r\n this.allWallsApplied = true;\r\n this.isStoneFeature = true;\r\n this.homePageTitle = \"Walls\"\r\n }\r\n\r\n load(dbFeature) {\r\n if (dbFeature.displayName.includes(\"laceholder\")) { // exclude ALL s3binding since WALL C can not be ALL (only LG or SM)\r\n const layoutAbr = this.getParent().layout.getCurrentLayoutAbbreviation();\r\n dbFeature.s3Bindings = dbFeature.s3Bindings && dbFeature.s3Bindings.filter(binding => {\r\n return (binding.layout !== \"ALL\") && (binding.layout === layoutAbr)\r\n });\r\n if (!dbFeature.s3Bindings || !dbFeature.s3Bindings.length) {\r\n return false\r\n }\r\n }\r\n return super.load_(dbFeature, new WallC());\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Wall_C;\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndexes.Wall_C;\r\n }\r\n }\r\n }\r\n\r\n // handleClick(clickFrom) {\r\n // if (clickFrom === 'simpleWall' || clickFrom === 'showerWall' || clickFrom === 'vanityWall') {\r\n // const parent = this.getParent();\r\n // if (clickFrom === 'simpleWall') {\r\n // parent.allWallsApplied = true;\r\n // }\r\n // parent.activeFeatureBeforeAllWalls = parent.activeFeature;\r\n // if (!parent.placeholderChanged) {\r\n // parent.rememberToRecoverPlaceholder = true;\r\n // }\r\n // }\r\n // super.handleClick();\r\n // }\r\n\r\n // unCheckAllWalls(clickFrom, navPart) {\r\n // if (clickFrom === 'simpleWall') {\r\n // this.allWallsApplied = false;\r\n // }\r\n // if (!(navPart instanceof WallC)) {\r\n // if (this.activeFeatureBeforeAllWalls) {\r\n // this.activeFeatureBeforeAllWalls.handleClick();\r\n // this.activeFeatureBeforeAllWalls = null;\r\n // }\r\n // if (this.rememberToRecoverPlaceholder) {\r\n // this.placeholderChanged = false;\r\n // this.rememberToRecoverPlaceholder = false;\r\n // }\r\n // }\r\n // }\r\n\r\n}\r\n","import {LayoutAbbreviation} from \"../../constants\";\r\nimport {iIncludes} from \"../../../../../misc/utils\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\nimport {Shower} from \"../../parts/shower\";\r\nimport {Vanity} from \"../../parts/vanity\";\r\nimport ExternallWall from \"./externallWall\";\r\n\r\nexport default class WallExR extends ExternallWall {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = \"right_shower_wall\";\r\n this.partName = \"Right Shower Wall\";\r\n this.translateId = \"visualizer.bathroom.walls.right_shower_wall\";\r\n this.wallName = \"ExtrusionWallRight\";\r\n this.shadowName = \"Popout\";\r\n this.dbName = \"EX R\";\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new WallExR());\r\n }\r\n\r\n getShadowConditions() {\r\n return this.getArrayOfConditions()\r\n }\r\n\r\n getDefaultFeature() {\r\n const layout = this.layout;\r\n const layoutAbr = layout.getCurrentLayoutAbbreviation();\r\n const filteredFeatures = this.getAvailableFeatures();\r\n\r\n let hardCodedName = '';\r\n switch (layoutAbr) {\r\n case LayoutAbbreviation.Small:\r\n hardCodedName = 'Rafter';\r\n break;\r\n case LayoutAbbreviation.Large:\r\n hardCodedName = 'Sahara Autumn Porcelain Tile';\r\n break;\r\n }\r\n const hardCodedDefault = filteredFeatures.find((feature) => {\r\n return iIncludes(feature.dbFeature.displayName, hardCodedName);\r\n });\r\n return hardCodedDefault || filteredFeatures[0];\r\n }\r\n\r\n getArrayOfConditions() {\r\n\r\n const wallParent = this.getParent();\r\n const layout = wallParent.layout;\r\n const layoutAbr = layout.getCurrentLayoutAbbreviation();\r\n\r\n const activeShowerPartId = wallParent.showerTubComboIsActive() ? ShowerTubCombo.id : Shower.id;\r\n const showerSize = wallParent.layout.parts[activeShowerPartId].showerSize();\r\n\r\n const conditions = [{\r\n propName: 'ShowerSize',\r\n propValue: showerSize\r\n }];\r\n\r\n if (layoutAbr === LayoutAbbreviation.Small) {\r\n let counterTopSize = layout.parts[Vanity.id].counterTopSize();\r\n conditions.push({\r\n propName: 'CountertopSize',\r\n propValue: counterTopSize\r\n });\r\n }\r\n\r\n return conditions;\r\n }\r\n}\r\n","import {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\nimport {Shower} from \"../../parts/shower\";\r\nimport {Vanity} from \"../../parts/vanity\";\r\nimport {LayoutAbbreviation} from \"../../constants\";\r\nimport {getMetadataByDimensions} from \"../../../../../misc/utils\";\r\nimport ExternallWall from \"./externallWall\";\r\n\r\nexport default class WallExL extends ExternallWall {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = \"left_shower_wall\";\r\n this.partName = \"Left Shower Wall\";\r\n this.translateId = \"visualizer.bathroom.walls.left_shower_wall\";\r\n this.wallName = \"ExtrusionWallLeft\";\r\n this.shadowName = \"Divider Wall\";\r\n this.shadowSmallRoomName = \"EX L\";\r\n this.dbName = \"EX L\";\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new WallExL());\r\n }\r\n\r\n getArrayOfConditions() {\r\n const parent = this.getParent();\r\n const layout = parent.layout;\r\n const layoutAbr = layout.getCurrentLayoutAbbreviation();\r\n\r\n const activeShower = parent.showerTubComboIsActive()\r\n ? layout.parts[ShowerTubCombo.id]\r\n : layout.parts[Shower.id];\r\n\r\n const showerSize = activeShower.showerSize();\r\n const showerDimensions = activeShower.showerDimensions();\r\n\r\n const showerValue = (showerSize === \"60in\" || showerSize === \"30in\") ? \"Custom\" : showerSize;\r\n let counterTopSize = layout.parts[Vanity.id].counterTopSize();\r\n\r\n counterTopSize = (counterTopSize === '72in' || showerDimensions === \"30X8\") ? '72in' : counterTopSize;\r\n\r\n if (layoutAbr === LayoutAbbreviation.Small) {\r\n let wallWidth = (showerDimensions === '30X8') ? 'Thick' : 'Half';\r\n return [{\r\n propName: 'Shower',\r\n propValue: showerSize\r\n }, {\r\n propName: 'Width',\r\n propValue: wallWidth\r\n }];\r\n }\r\n\r\n return [{\r\n propName: 'Shower',\r\n propValue: showerValue\r\n }, {\r\n propName: 'CountertopSize',\r\n propValue: counterTopSize\r\n }];\r\n\r\n }\r\n\r\n getShadowConditions() {\r\n const layout = this.getParent().layout;\r\n const conditions = this.getArrayOfConditions();\r\n const showerComboParent = layout.parts[ShowerTubCombo.id];\r\n const showerParent = layout.parts[Shower.id];\r\n const layoutAbr = layout.getCurrentLayoutAbbreviation();\r\n\r\n let showerDimensions = showerComboParent.showerTubComboIsActive\r\n ? showerComboParent.showerDimensions()\r\n : showerParent.showerDimensions();\r\n\r\n showerDimensions = getMetadataByDimensions(showerDimensions);\r\n\r\n if (!showerComboParent.showerTubComboIsActive && showerDimensions === \"Half\") {\r\n if (showerParent.showerFloorIsActive) {\r\n conditions.push({\r\n propName: \"ShowerPan\",\r\n propValue: [\"Threshold\"]\r\n })\r\n } else if (showerParent.showerPanCombo && showerParent.showerPanCombo.activeFeature && layoutAbr !== LayoutAbbreviation.Small) {\r\n let showerPanCondition = showerParent.showerPanCombo.activeFeature.metaData[\"ShowerPan\"];\r\n // console.log('showerPanCondition', showerPanCondition);\r\n conditions.push({\r\n propName: \"ShowerPan\",\r\n propValue: showerPanCondition\r\n })\r\n }\r\n }\r\n // console.log('shadow conditions', conditions);\r\n return conditions\r\n }\r\n\r\n setShadowFeature() {\r\n const parentGroup = this.getParent();\r\n\r\n let filteredAvailableFeatures = [];\r\n if (parentGroup.shadows && parentGroup.shadows.features && parentGroup.shadows.features.length) {\r\n const layout = parentGroup.layout;\r\n const layoutAbr = layout.getCurrentLayoutAbbreviation();\r\n const shadowName = (layoutAbr === LayoutAbbreviation.Small) ? this.shadowSmallRoomName : this.shadowName;\r\n\r\n const filteredFeatures = parentGroup.shadows.features.filter((shadow) => {\r\n return Array.isArray(shadow.dbFeature.s3Bindings) && shadow.dbFeature.s3Bindings.some(binding => {\r\n return binding.layout === LayoutAbbreviation.All || binding.layout === layoutAbr\r\n })\r\n });\r\n const compatibleFeatures = filteredFeatures.filter(shadowFeature => {\r\n return shadowFeature.partName && shadowName && shadowFeature.partName === shadowName\r\n });\r\n filteredAvailableFeatures = this.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), compatibleFeatures);\r\n }\r\n this.shadowFeature = filteredAvailableFeatures.length ? filteredAvailableFeatures[0] : null;\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport {Vanity} from \"../../parts/vanity\";\r\n\r\nexport default class VanityAccent extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = \"accent_wall\";\r\n this.partName = \"Accent Wall\";\r\n this.translateId = \"visualizer.bathroom.walls.accent_wall\";\r\n this.dbName = \"VanityAccent\";\r\n this.activeFeatureBeforeAllWalls = null;\r\n this.selectedByUser = false;\r\n this.visible = true;\r\n this.canBeDisabled = true;\r\n this.allWallsApplied = false;\r\n this.isStoneFeature = true;\r\n this.disabled = false;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new VanityAccent());\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n return super.navigationSubItemsWithFilter('CountertopSize', this.getParent().layout.parts[Vanity.id].counterTopSize(), filteredAvailableFeatures);\r\n }\r\n\r\n handleClick() {\r\n const wallParent = this.getParent().getParent();\r\n const vanityParent = wallParent.layout.parts[Vanity.id];\r\n if (vanityParent.vanityBacksplash && vanityParent.vanityBacksplash.canBeDisabled && !vanityParent.vanityBacksplash.placeholderChanged) {\r\n vanityParent.vanityBacksplash.disabled = true;\r\n }\r\n super.handleClick()\r\n }\r\n\r\n // handleClick(clickFrom) {\r\n // if (clickFrom === 'fromAllWalls') {\r\n // if (!this.getParent().vanityAccentSelectedByUser) {\r\n // super.handleClick();\r\n // }\r\n // } else {\r\n // this.getParent().handleChildClick(this);\r\n // this.getParent().vanityAccentSelectedByUser = true;\r\n // }\r\n //\r\n // }\r\n\r\n // handleClick(clickFrom) {\r\n // const parent = this.getParent();\r\n // if (clickFrom === 'simpleWall' || clickFrom === 'showerWall' || clickFrom === 'vanityWall') {\r\n // parent.activeFeatureBeforeAllWalls = parent.activeFeature;\r\n // if (!parent.placeholderChanged) {\r\n // parent.rememberToRecoverPlaceholder = true;\r\n // }\r\n // if (!parent.selectedByUser) {\r\n // super.handleClick();\r\n // }\r\n // } else {\r\n // super.handleClick();\r\n // parent.selectedByUser = true;\r\n // const wallB = this.getParent().getParent().layout.parts[\"Walls\"][\"wallB\"];\r\n // if (wallB.placeholderChanged && wallB.activeFeature.partName === this.partName) {\r\n // parent.selectedByUser = false;\r\n // }\r\n // }\r\n // this.featureClicked();\r\n // }\r\n //\r\n // unCheckAllWalls() {\r\n // if (!this.selectedByUser) {\r\n // const tempSelectedByUser = this.selectedByUser;\r\n // if (this.activeFeatureBeforeAllWalls) {\r\n // this.activeFeatureBeforeAllWalls.handleChildClick(this);\r\n // this.activeFeatureBeforeAllWalls = null;\r\n // }\r\n // this.selectedByUser = tempSelectedByUser;\r\n // if (this.rememberToRecoverPlaceholder) {\r\n // this.placeholderChanged = false;\r\n // this.rememberToRecoverPlaceholder = false;\r\n // }\r\n // }\r\n // }\r\n\r\n setDefault(layout) {\r\n const counterTopSize = this.getParent().layout.parts[Vanity.id].counterTopSize();\r\n const filteredFeatures = this.features && this.features.filter(f => f.matchesMetaForCondition('CountertopSize', counterTopSize)) || [];\r\n if (!super.tryToSetTheSameFeature(filteredFeatures)) {\r\n const hardCodedDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"Tan Hexagon\");\r\n });\r\n const placeholderDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"laceholder\");\r\n });\r\n this.activeFeature = hardCodedDefault || super.setDefault(layout) || filteredFeatures[0];\r\n this.placeholderFeature = placeholderDefault || super.setDefault(layout) || null;\r\n }\r\n }\r\n\r\n setLayers(layout) {\r\n const counterTopSize = this.getParent().layout.parts[Vanity.id].counterTopSize();\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForCondition('CountertopSize', counterTopSize)\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n // this.activeFeature.layer.zIndex = Z.layouts.Large.Wall_A_Accent_Mask;\r\n this.activeFeature.layer.zIndex = zIndexes.Wall_A_Accent_Mask;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndexes.Wall_A_Accent_Mask;\r\n }\r\n }\r\n}\r\n","import snakeCase from \"lodash/snakeCase\";\r\n\r\nimport {Part} from \"./part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport NonVisualizerSubPart from \"../subparts/nonVisualizerSubPart\";\r\n\r\nexport default class Other extends Part {\r\n static id = 'Other';\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Other';\r\n this.categoryEnabled = false;\r\n }\r\n\r\n load(dbFeature) {\r\n // console.log(\"load other\", dbFeature.groupName);\r\n const partId = snakeCase(dbFeature.groupName);\r\n let relatedItem = this.relatedItems.find(relatedItem => relatedItem.partId === partId);\r\n if (!relatedItem) {\r\n relatedItem = new NonVisualizerSubPart(true, partId, dbFeature.groupName);\r\n this.relatedItems.push(relatedItem);\r\n }\r\n relatedItem.getParent = () => this;\r\n relatedItem.load(dbFeature);\r\n return true\r\n }\r\n\r\n navigationItem() {\r\n return new DesignNavigationItem('Other', this);\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n handleSubPartClick() {\r\n\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\nimport {Shower} from \"../../parts/shower\";\r\n\r\nexport default class LargeCornerSeat extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'large_corner_seat';\r\n this.partName = 'Large Corner Seat';\r\n this.translateId = \"visualizer.bathroom.accessories.large_corner_seat\";\r\n this.visible = true;\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new LargeCornerSeat());\r\n }\r\n\r\n // handleClick() {\r\n // const accessoriesParent = this.getParent().getParent();\r\n // accessoriesParent.caddie_type = \"corner_caddie\";\r\n // super.handleClick();\r\n // }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const showerParent = this.getParent().layout.parts[Shower.id];\r\n if (showerParent && showerParent.showerTubComboIsActive()) { // shower tub combo - remove\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n const conditions = this.getArrayOfConditions();\r\n if ((this.activeFeature && this.activeFeature.matchesMetaForArrayOfConditions(conditions)\r\n || (this.activeFeature && this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n const accParent = this.getParent();\r\n const showerParent = accParent.layout.parts[Shower.id];\r\n const activeShowerPartId = showerParent && showerParent.showerTubComboIsActive() ? ShowerTubCombo.id : Shower.id;\r\n const showerSize = showerParent.layout.parts[activeShowerPartId].showerSize();\r\n return [{\r\n propName: 'ShowerSize',\r\n propValue: showerSize\r\n }]\r\n }\r\n\r\n setDefault() {\r\n const filteredFeatures = this.features.filter(f => f.matchesMetaForArrayOfConditions(this.getArrayOfConditions()));\r\n if (!super.tryToSetTheSameFeature(filteredFeatures, '', '', true)) {\r\n const placeholderDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includesCI(\" - Placeholder\");\r\n });\r\n this.activeFeature = filteredFeatures[0];\r\n this.placeholderFeature = placeholderDefault || null;\r\n }\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Shower.Custom60in.LargeCornerSeat;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\nimport {Shower} from \"../../parts/shower\";\r\n\r\nexport default class SoapDish extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'soap_dish';\r\n this.partName = 'Soap Dish';\r\n this.translateId = \"visualizer.bathroom.accessories.soap_dish\";\r\n this.visible = true;\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new SoapDish());\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Shower.Custom60in.SoapDish;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const showerParent = this.getParent().layout.parts[Shower.id];\r\n const showerComboParent = layout.parts[ShowerTubCombo.id];\r\n\r\n if (showerParent && showerComboParent && showerParent.showerTubComboIsActive() && showerComboParent.bottomTub === \"walk_in_tub\") {\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n const conditions = this.getArrayOfConditions();\r\n if ((this.activeFeature && this.activeFeature.matchesMetaForArrayOfConditions(conditions)\r\n || (this.activeFeature && this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n const accParent = this.getParent();\r\n const showerParent = accParent.layout.parts[Shower.id];\r\n const activeShowerPartId = showerParent && showerParent.showerTubComboIsActive() ? ShowerTubCombo.id : Shower.id;\r\n const showerSize = showerParent.layout.parts[activeShowerPartId].showerSize();\r\n return [{\r\n propName: \"Shower\",\r\n propValue: showerParent.showerTubComboIsActive()\r\n ? [\"Tub\"]\r\n : showerParent.isComplete() ? \"Complete\" : \"Custom\"\r\n }, {\r\n propName: 'ShowerSize',\r\n propValue: showerSize\r\n }]\r\n }\r\n\r\n setDefault() {\r\n const filteredFeatures = this.features.filter(f => f.matchesMetaForArrayOfConditions(this.getArrayOfConditions()));\r\n if (!super.tryToSetTheSameFeature(filteredFeatures, '', '', true)) {\r\n const placeholderDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includesCI(\" - Placeholder\");\r\n });\r\n this.activeFeature = filteredFeatures[0];\r\n this.placeholderFeature = placeholderDefault || null;\r\n }\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\nimport {Shower} from \"../../parts/shower\";\r\n\r\nexport default class SmallCornerShelf extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'small_corner_shelf';\r\n this.partName = 'Small Corner Shelf';\r\n this.translateId = \"visualizer.bathroom.accessories.small_corner_shelf\";\r\n this.visible = true;\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new SmallCornerShelf());\r\n }\r\n\r\n handleClick() {\r\n const accessoriesParent = this.getParent().getParent();\r\n accessoriesParent.caddie_type = this.partId;\r\n super.handleClick();\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const accessoriesParent = this.getParent();\r\n if (accessoriesParent.caddie_type !== this.partId) {\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n const conditions = this.getArrayOfConditions();\r\n if ((this.activeFeature && this.activeFeature.matchesMetaForArrayOfConditions(conditions)\r\n || (this.activeFeature && this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n const accParent = this.getParent();\r\n const showerParent = accParent.layout.parts[Shower.id];\r\n const activeShowerPartId = showerParent && showerParent.showerTubComboIsActive() ? ShowerTubCombo.id : Shower.id;\r\n const showerSize = showerParent.layout.parts[activeShowerPartId].showerSize();\r\n return [{\r\n propName: 'ShowerSize',\r\n propValue: showerSize\r\n }]\r\n }\r\n\r\n setDefault() {\r\n const filteredFeatures = this.features.filter(f => f.matchesMetaForArrayOfConditions(this.getArrayOfConditions()));\r\n if (!super.tryToSetTheSameFeature(filteredFeatures, '', '', true)) {\r\n const placeholderDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includesCI(\" - Placeholder\");\r\n });\r\n this.activeFeature = filteredFeatures[0];\r\n this.placeholderFeature = placeholderDefault || null;\r\n }\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Shower.Custom60in.SmallCornerShelf;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\nimport {Shower} from \"../../parts/shower\";\r\n\r\nexport default class CornerCaddie extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'corner_caddie';\r\n this.translateId = \"visualizer.bathroom.accessories.corner_caddie\";\r\n this.partName = 'Corner Caddie';\r\n this.visible = true;\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new CornerCaddie());\r\n }\r\n\r\n handleClick() {\r\n const accessoriesParent = this.getParent().getParent();\r\n accessoriesParent.caddie_type = this.partId;\r\n super.handleClick();\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const accessoriesParent = this.getParent();\r\n if (accessoriesParent.caddie_type !== this.partId) {\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n const conditions = this.getArrayOfConditions();\r\n if ((this.activeFeature && this.activeFeature.matchesMetaForArrayOfConditions(conditions)\r\n || (this.activeFeature && this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n const accParent = this.getParent();\r\n const showerParent = accParent.layout.parts[Shower.id];\r\n const activeShowerPartId = showerParent && showerParent.showerTubComboIsActive() ? ShowerTubCombo.id : Shower.id;\r\n const showerSize = showerParent.layout.parts[activeShowerPartId].showerSize();\r\n return [{\r\n propName: 'ShowerSize',\r\n propValue: showerSize\r\n }]\r\n }\r\n\r\n setDefault() {\r\n const filteredFeatures = this.features.filter(f => f.matchesMetaForArrayOfConditions(this.getArrayOfConditions()));\r\n if (!super.tryToSetTheSameFeature(filteredFeatures, '', '', true)) {\r\n const placeholderDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includesCI(\" - Placeholder\");\r\n });\r\n this.activeFeature = filteredFeatures[0];\r\n this.placeholderFeature = placeholderDefault || null;\r\n }\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Shower.Custom60in.CornerCaddie;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\nimport {Shower} from \"../../parts/shower\";\r\n\r\nexport default class LargeCornerCaddie extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'large_corner_caddie';\r\n this.partName = 'Large Corner Caddie';\r\n this.translateId = \"visualizer.bathroom.accessories.large_corner_caddie\";\r\n this.visible = true;\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new LargeCornerCaddie());\r\n }\r\n\r\n handleClick() {\r\n const accessoriesParent = this.getParent().getParent();\r\n accessoriesParent.caddie_type = this.partId;\r\n super.handleClick();\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Shower.Custom60in.LargeCornerCaddie;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const accessoriesParent = this.getParent();\r\n if (accessoriesParent.caddie_type !== this.partId) {\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n const conditions = this.getArrayOfConditions();\r\n if ((this.activeFeature && this.activeFeature.matchesMetaForArrayOfConditions(conditions)\r\n || (this.activeFeature && this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n const accParent = this.getParent();\r\n const showerParent = accParent.layout.parts[Shower.id];\r\n const activeShowerPartId = showerParent && showerParent.showerTubComboIsActive() ? ShowerTubCombo.id : Shower.id;\r\n const showerSize = showerParent.layout.parts[activeShowerPartId].showerSize();\r\n return [{\r\n propName: 'ShowerSize',\r\n propValue: showerSize\r\n }]\r\n }\r\n\r\n setDefault() {\r\n const filteredFeatures = this.features.filter(f => f.matchesMetaForArrayOfConditions(this.getArrayOfConditions()));\r\n if (!super.tryToSetTheSameFeature(filteredFeatures, '', '', true)) {\r\n const placeholderDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includesCI(\" - Placeholder\");\r\n });\r\n this.activeFeature = filteredFeatures[0];\r\n this.placeholderFeature = placeholderDefault || null;\r\n }\r\n }\r\n\r\n}\r\n","import uniqBy from \"lodash/uniqBy\";\r\n\r\nimport {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\nimport {Shower} from \"../../parts/shower\";\r\n\r\nexport default class GrabBar extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'grab_bar';\r\n this.partName = 'Grab Bar';\r\n this.translateId = \"visualizer.bathroom.accessories.grab_bar\";\r\n this.visible = true;\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new GrabBar());\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n return uniqBy(featuresToDisplay, (feature) => feature.dbFeature.id)\r\n .map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n // setLayers(layout) {\r\n //\r\n // const conditions = this.getArrayOfConditions();\r\n // if ((this.activeFeature && this.activeFeature.matchesMetaForArrayOfConditions(conditions)\r\n // || (this.activeFeature && this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n // return super.setLayers(layout);\r\n // }\r\n //\r\n // this.setDefault();\r\n // return super.setLayers(layout);\r\n // }\r\n\r\n getArrayOfConditions() {\r\n const accParent = this.getParent();\r\n const showerParent = accParent.layout.parts[Shower.id];\r\n const activeShowerPartId = showerParent && showerParent.showerTubComboIsActive() ? ShowerTubCombo.id : Shower.id;\r\n const showerSize = showerParent.layout.parts[activeShowerPartId].showerSize();\r\n return [{\r\n propName: 'ShowerSize',\r\n propValue: showerSize\r\n }]\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Shower.Custom60in.GrabBar;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n\r\n}\r\n","import React from 'react';\r\nimport {connect} from \"react-redux\";\r\nimport classNames from 'classnames';\r\nimport $ from 'jquery';\r\n\r\nimport {\r\n setVanityType,\r\n setDefaultSelectionGroup,\r\n changeActivePartRelatedItemIndex\r\n} from \"../../../actions/actionFunctions\";\r\nimport DesktopNavigationCommon from \"../../visComponents/navigation/desktopNavigationCommon\";\r\nimport Z from \"../core/parts/zIndex\";\r\nimport {Vanity} from \"../core/parts/vanity\";\r\nimport LockedView from \"../../common/lockedView\";\r\nimport {ContentType} from \"../../visComponents/constants\";\r\nimport MobileMenuSelect from \"../../visComponents/navigation/mobile/mobileMenuSelect\";\r\nimport ContextMenu from \"./contextMenu\";\r\nimport {\r\n setActiveNavigationNames, setNavigationLoading,\r\n setNavigationViewType,\r\n toggleDesktopNavigation\r\n} from \"../../../actions/navigationFunctions\";\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\nimport {setVisualizerTutorialStep, showVisualizerTutorial} from \"../../../actions/tutorialFunctions\";\r\n\r\nclass DesktopNavigation extends DesktopNavigationCommon {\r\n\r\n bindCanvasClick = (event) => {\r\n const layout = getCurrentLayout();\r\n // const canvas = document.getElementById(this.props.canvasId);\r\n this.props.setHoveredLayer(event);\r\n\r\n if (document.hoveredLayer) {\r\n\r\n const layoutType = layout.getCurrentLayoutName();\r\n\r\n const hoveredZone = Z.getMenuByHoveredLayer(layoutType, document.hoveredLayer);\r\n\r\n // console.log('hoveredZone', hoveredZone);\r\n\r\n if (hoveredZone) {\r\n if ((hoveredZone === \"shower_custom\"\r\n || hoveredZone === \"vanity_custom\"\r\n || hoveredZone === \"bathtub_custom\"\r\n || hoveredZone === \"shower_combo\"\r\n || hoveredZone === \"shower_pony_wall\"\r\n || hoveredZone === \"wall_b_custom\"\r\n || hoveredZone === \"left_wall_custom\")\r\n && !this.state.showNavigation\r\n ) {\r\n if (this.state.contextMenuOpen) {\r\n this.setState({\r\n contextMenuOpen: false,\r\n hoveredLayer: {}\r\n });\r\n } else {\r\n let contextMenuOpen = '';\r\n let ponyWallGroup = false;\r\n switch (hoveredZone) {\r\n case \"shower_custom\":\r\n case \"shower_combo\":\r\n case \"shower_pony_wall\": {\r\n const showerGroup = this.state.designNavigationItems.find(navItem => {\r\n return navItem.text === \"Shower\"\r\n });\r\n contextMenuOpen = showerGroup.part.showerTubComboIsActive() ? \"Shower Tub Combo\" : \"Shower\";\r\n if (hoveredZone === \"shower_pony_wall\") {\r\n ponyWallGroup = true;\r\n }\r\n break;\r\n }\r\n case \"vanity_custom\":\r\n contextMenuOpen = \"Vanity\";\r\n break;\r\n case \"bathtub_custom\":\r\n contextMenuOpen = \"Bathtub\";\r\n break;\r\n case \"left_wall_custom\":\r\n contextMenuOpen = \"Shower Body Selection\";\r\n break;\r\n case \"wall_b_custom\":\r\n contextMenuOpen = \"wall_b_custom\";\r\n break;\r\n }\r\n this.openContextMenu(contextMenuOpen, ponyWallGroup, event);\r\n }\r\n return false;\r\n } else if (this.state.contentType === 0) {\r\n this.setState({\r\n showNavigation: true,\r\n contentType: ContentType.Design,\r\n contextMenuOpen: false,\r\n hoveredLayer: {}\r\n }, () => {\r\n this.setNewActiveFeature();\r\n this.menuOpened();\r\n setTimeout(() => {\r\n $(document).on('click', this.handleWrapperBlur);\r\n }, 0)\r\n });\r\n }\r\n\r\n hoveredZone.child\r\n ? this.triggerOpenNavigationMenu(hoveredZone.child, hoveredZone.parent)\r\n : this.triggerOpenNavigationMenu(hoveredZone)\r\n\r\n }\r\n\r\n }\r\n\r\n };\r\n\r\n getShowerBodySelectionButtons = () => {\r\n const shower = this.state.designNavigationItems.find(desItem => desItem.text === \"Shower\");\r\n const currentShowerSize = shower.part.showerSize();\r\n const showerBody = shower && shower.part.showerBody;\r\n return (showerBody && showerBody.features.length) ? showerBody.features.filter((showerBodyFeature) => {\r\n return showerBodyFeature.partName.includes(currentShowerSize);\r\n }) : [1]\r\n };\r\n\r\n openContextMenu = (contextMenuOpen, ponyWallGroup, event) => {\r\n const hoveredParent = this.state.designNavigationItems.find(navItem => {\r\n return navItem.text === contextMenuOpen\r\n });\r\n let contextMenuButtons = [];\r\n if (contextMenuOpen === \"Shower Body Selection\") {\r\n contextMenuButtons = this.getShowerBodySelectionButtons()\r\n } else if (contextMenuOpen === \"wall_b_custom\") {\r\n contextMenuButtons = [1, 2, 3]\r\n } else {\r\n contextMenuButtons = hoveredParent.part.subParts();\r\n }\r\n if (contextMenuOpen === \"Shower\" || contextMenuOpen === \"Shower Tub Combo\") {\r\n contextMenuButtons = contextMenuButtons.filter(menuButton => {\r\n return ponyWallGroup ? menuButton.part.isPonyWallPart && menuButton.part.partId !== \"pony_wall\" : !menuButton.part.isPonyWallPart\r\n });\r\n }\r\n if (contextMenuOpen === \"Vanity\") {\r\n contextMenuButtons = contextMenuButtons.filter(menuButton => {\r\n return menuButton.part.partId !== \"vanity_mirror\" && menuButton.part.partId !== \"vanity_backsplash\";\r\n });\r\n }\r\n\r\n const isMobile = $(window).width() < 991;\r\n\r\n let left = isMobile ? '50%' : event.clientX - 50;\r\n let top = isMobile ? '50%' : event.clientY - 50;\r\n let right = 'auto';\r\n\r\n const maxAllowedWidth = contextMenuButtons.length > 2 ? 300 : 210;\r\n\r\n let maxAllowedHeight = 110;\r\n if (contextMenuButtons.length > 6) {\r\n maxAllowedHeight = 330;\r\n } else if (contextMenuButtons.length > 3) {\r\n maxAllowedHeight = 220;\r\n }\r\n if (!isMobile && (left > window.innerWidth - maxAllowedWidth)) {\r\n left = 'auto';\r\n right = 0\r\n }\r\n if (!isMobile && (top > window.innerHeight - maxAllowedHeight)) {\r\n let negativeMargin = 50;\r\n if (contextMenuButtons.length > 6) {\r\n negativeMargin = 250;\r\n } else if (contextMenuButtons.length > 3) {\r\n negativeMargin = 150;\r\n }\r\n top = top - negativeMargin;\r\n }\r\n this.setState({\r\n contextMenuPonyWall: ponyWallGroup,\r\n contextMenuOpen,\r\n hoveredLayer: document.hoveredLayer,\r\n contextMenuPosition: {\r\n left,\r\n right,\r\n top,\r\n }\r\n });\r\n };\r\n\r\n handleNavigationItemClick = (item, ignoreLocked = false, featureIsLocked) => {\r\n const layout = getCurrentLayout();\r\n this.navigationItemClickCommon(item);\r\n\r\n const updateSideBarIds = [\"shower_body\", \"wall_configuration\", \"vanity_cabinet\"];\r\n if (updateSideBarIds.includes(item.part.partId)) {\r\n this.updateSideBar();\r\n }\r\n if (this.state.parentNavigationItem && this.state.parentNavigationItem.text === \"Shower Tub Combo\"\r\n && item.part.bottomTubId && (this.state.parentNavigationItem.part.bottomTub !== item.part.bottomTubId)) {\r\n this.updateSideBar();\r\n }\r\n\r\n // console.log('this.state.parentNavigationItem', this.state.parentNavigationItem);\r\n // console.log('this.state.parentNavigationItem.part.subParts()', this.state.parentNavigationItem && this.state.parentNavigationItem.part && this.state.parentNavigationItem.part.subParts());\r\n\r\n if (item.matchesMetaFailed) {\r\n const nonCompatibleWith = item.part.partId === \"vanity_faucet\" ? \"sink\" : \"vanity\";\r\n this.callMetaMathesFailedPopup(item, nonCompatibleWith);\r\n } else if (item.part.partId === \"vanity_sink\" && this.state.parentNavigationItem.part.faucet\r\n && this.state.parentNavigationItem.part.faucet.placeholderChanged\r\n && this.state.parentNavigationItem.part.faucet.activeFeature) {\r\n\r\n const sinkSizeConditionValue = item.part.metaData[\"SinkSize\"][0];\r\n\r\n if (this.state.parentNavigationItem.part.faucet.activeFeature.matchesMetaForCondition('SinkSize', sinkSizeConditionValue)) {\r\n this.itemClick(item, ignoreLocked)\r\n } else {\r\n this.callMetaMathesFailedPopup(item, 'faucet');\r\n }\r\n } else if (item.part.partId === \"toilet\") {\r\n const vanity = layout.parts[Vanity.id];\r\n const counterTopSize = vanity.counterTopSize();\r\n if (counterTopSize === \"60in\" || counterTopSize === \"72in\") {\r\n this.callToiletFailPopup('toilet', item, ignoreLocked)\r\n } else {\r\n this.itemClick(item, ignoreLocked)\r\n }\r\n } else if (item.part.partId === \"vanity_cabinet\") {\r\n // let toilet = layout.parts[Toilet.id];\r\n // if (toilet) {\r\n // toilet = toilet.toilet; // toiletBody\r\n // }\r\n // const counterTopSize = item.part.vanitySize + 'in';\r\n // const vanity = layout.parts[Vanity.id];\r\n // const currentCounterTopSize = vanity.counterTopSize();\r\n // if (toilet && toilet.placeholderChanged && (counterTopSize === \"60in\" || counterTopSize === \"72in\")\r\n // && (currentCounterTopSize !== \"60in\" && currentCounterTopSize !== \"72in\")) {\r\n // this.callToiletFailPopup('vanity', item, ignoreLocked)\r\n // } else {\r\n // this.itemClick(item, ignoreLocked);\r\n // }\r\n this.itemClick(item, ignoreLocked);\r\n if (this.props.fabricatorSettings\r\n && (this.props.fabricatorSettings.wizardConsumers || (this.props.fabricatorSettings.wizardClients && document.kvConfig.isBackend))\r\n ) {\r\n if (!featureIsLocked && !item.part.partName.includes(\"laceholder\")) {\r\n this.setWizardFiltersFromActiveItem(item.part)\r\n }\r\n }\r\n } else if (item.part.partId === \"shower_interior_wall\") {\r\n if (!featureIsLocked && !item.part.partName.includes(\"laceholder\")) {\r\n this.setWizardFiltersFromActiveItem(item.part)\r\n }\r\n this.itemClick(item, ignoreLocked)\r\n } else {\r\n this.itemClick(item, ignoreLocked)\r\n }\r\n\r\n if (this.state.parentNavigationItem) { // update canvas only if it is child\r\n this.props.refreshCB();\r\n }\r\n };\r\n\r\n render() {\r\n const layout = getCurrentLayout();\r\n const fabricatorSettings = this.props.fabricatorSettings;\r\n const activePart = this.state.parentNavigationItem ? this.state.parentNavigationItem.part : null;\r\n const activeSubPart = this.state.childNavigationItem ? this.state.childNavigationItem.part : null;\r\n const parentItems = layout.designNavigationItems(); // parent list without filters\r\n\r\n let useWizard = false;\r\n let wizardGroups = [];\r\n if (fabricatorSettings\r\n && (fabricatorSettings.wizardConsumers || (fabricatorSettings.wizardClients && document.kvConfig.isBackend))\r\n && this.state.contentType === ContentType.Design && activeSubPart && activeSubPart.canUseWizard && activeSubPart.allFeaturesReceived) {\r\n if (activeSubPart.partId === \"shower_interior_wall\") {\r\n const featuresToDisplay = activeSubPart.navigationSubItems();\r\n const tilePatternFilterGroup = this.props.filterGroups.find(group => group.name.trim() === \"TilePattern\");\r\n const acrylicPatternFilterGroup = this.props.filterGroups.find(group => group.name.trim() === \"AcrylicPattern\");\r\n const tileID = tilePatternFilterGroup && tilePatternFilterGroup.id;\r\n const acrID = acrylicPatternFilterGroup && acrylicPatternFilterGroup.id;\r\n useWizard = featuresToDisplay.some(navItem => {\r\n return (tileID && (navItem.part.dbFeature.filterValueIDs[tileID] || navItem.part.dbFeature.fabFilterValueIDs[tileID]))\r\n || (acrID && (navItem.part.dbFeature.filterValueIDs[acrID] || navItem.part.dbFeature.fabFilterValueIDs[acrID]))\r\n })\r\n } else {\r\n useWizard = true;\r\n }\r\n wizardGroups = this.state[this.getWizardGroupsByPartId(activeSubPart.partId)];\r\n }\r\n const showLockedView = this.currentActiveItemIsLocked(useWizard);\r\n\r\n const useFilters = (activePart && activePart.partId === \"floor\" && activePart.allFeaturesReceived)\r\n || (activeSubPart && (this.isWallItem(activeSubPart) || activeSubPart.partId === \"accent_wall\"\r\n || activeSubPart.partId === \"shower_interior_wall_accent\") && activeSubPart.allFeaturesReceived);\r\n\r\n const showSmallRoomLayout = fabricatorSettings &&\r\n (fabricatorSettings.showSmallDesignForClients\r\n || (fabricatorSettings.showSmallDesignFromDashboard && document.kvConfig.isBackend));\r\n\r\n const availableNavButtons = showSmallRoomLayout\r\n ? [ContentType.Design, ContentType.Layout, ContentType.DisplayRoom]\r\n : [ContentType.Design, ContentType.DisplayRoom];\r\n\r\n return (\r\n
    \r\n \r\n
    this.navWrapper = node}>\r\n
    \r\n
    \r\n {this.content(useWizard, wizardGroups, useFilters, activePart, activeSubPart)}\r\n
    \r\n
    \r\n {this.navigationMenuButtons(availableNavButtons)}\r\n {useWizard ? null : (\r\n
    \r\n \r\n
    \r\n )}\r\n {/*
    */}\r\n {/*
    */}\r\n {/**/}\r\n {/*
    */}\r\n {/*
    */}\r\n
    \r\n {this.state.contextMenuOpen\r\n ? \r\n : null}\r\n
    \r\n {showLockedView\r\n ? \r\n : null}\r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {isPhoneNumberValidated, userIsLoggedIn} = store.userState;\r\n const {visualizerTutorialStep, visualizerTutorialIsOpened} = store.tutorialState;\r\n\r\n return {\r\n filtersVisible: store.filterState.showFilters,\r\n filterGroups: store.filterState.filterGroups,\r\n bvPresets: store.bathroomVisualizerState.bvPresets,\r\n isPhoneNumberValidated,\r\n userIsLoggedIn,\r\n visualizerTutorialIsOpened,\r\n visualizerTutorialStep,\r\n activeQuoteIndex: store.quotesState.activeQuoteIndex,\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n setNavigationViewType,\r\n setVanityType,\r\n setDefaultSelectionGroup,\r\n setActiveNavigationNames,\r\n toggleDesktopNavigation,\r\n changeActivePartRelatedItemIndex,\r\n setNavigationLoading,\r\n setVisualizerTutorialStep,\r\n showVisualizerTutorial\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(DesktopNavigation);\r\n","import React, {Component} from 'react';\r\nimport {connect} from 'react-redux';\r\nimport PropTypes from 'prop-types';\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\n\r\nimport {PartMenuType} from \"../../constants\";\r\nimport Config from \"../../../../config\";\r\n\r\nimport Filters from \"../newFilters/filters\";\r\nimport * as actions from \"../../../../actions/actionFunctions\";\r\nimport OnScreenKeyboard from \"../../../common/OnScreenKeyboard/keyboard\";\r\nimport {getFeatureGroupName, getPartThemeThumbnail} from \"../../../../misc/helpers\";\r\nimport {getSideBarSubParts} from \"../navUtils\";\r\nimport $ from \"jquery\";\r\nimport ActionTypes from \"../../../../misc/actionTypes\";\r\n\r\nclass SidebarClass extends Component {\r\n\r\n static propTypes = {\r\n part: PropTypes.object,\r\n onBackClick: PropTypes.func.isRequired,\r\n onSubTypeClick: PropTypes.func.isRequired,\r\n handleSearchInputChange: PropTypes.func.isRequired,\r\n searchText: PropTypes.string,\r\n onSubPartClick: PropTypes.func.isRequired,\r\n onSubPartHover: PropTypes.func.isRequired,\r\n activeChildNavigationItem: PropTypes.object,\r\n updateSidebarItems: PropTypes.bool\r\n };\r\n\r\n componentWillReceiveProps(nextProps) {\r\n if (nextProps.updateSidebarItems) {\r\n this.forceUpdate();\r\n }\r\n }\r\n\r\n handleRefresh = () => {\r\n this.forceUpdate();\r\n };\r\n\r\n componentDidMount() {\r\n $(window).on(ActionTypes.UPDATE_ALL_ITEMS, this.handleRefresh);\r\n }\r\n componentWillUnmount() {\r\n $(window).off(ActionTypes.UPDATE_ALL_ITEMS, this.handleRefresh);\r\n }\r\n\r\n getSideBarContent = () => {\r\n const {part, onSubPartClick, onSubPartHover, activeChildNavigationItem, activeNavigationFilter, activeTheme} = this.props;\r\n if (part.menuType === PartMenuType.Simple) {\r\n return
    \r\n } else if (activeChildNavigationItem && activeChildNavigationItem.part.partId === \"top_cabinet\"\r\n && activeNavigationFilter === \"inlay_type\") {\r\n return
    \r\n }\r\n const subParts = getSideBarSubParts(part);\r\n return (\r\n
      \r\n {subParts.map((dni, dniIndex) => {\r\n // if (name === \"Island Countertop\") {\r\n // name = \"Countertop\"\r\n // }\r\n return (\r\n
    • onSubPartHover(dni)}\r\n key={dni.text}\r\n data-index={dniIndex}\r\n data-text={dni.text}\r\n onClick={() => onSubPartClick(dni)}>\r\n {getFeatureGroupName(dni.part, this.props.intl, this.props.fabricatorData)}\r\n
    • \r\n )\r\n })}\r\n
    \r\n )\r\n };\r\n\r\n render() {\r\n\r\n const {onBackClick, searchText, handleSearchInputChange, intl} = this.props;\r\n\r\n return (\r\n
    \r\n
    \r\n
    \r\n
    \r\n 12 ? \" search-input--with-close\" : \"\")\r\n }\r\n value={searchText}\r\n onChange={handleSearchInputChange}\r\n placeholder={intl.formatMessage({id: \"mobileMenu.searchPlaceholder\"})}\r\n id=\"main-search\" />\r\n {searchText ?
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n \r\n \r\n \r\n
    \r\n {this.getSideBarContent()}\r\n
    \r\n \r\n
    \r\n );\r\n }\r\n\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {navigationCount} = store.lookState;\r\n return {\r\n activeNavigationFilter: store.navigationState.activeNavigationFilter,\r\n selectedFilters: store.filterState.selectedFilters,\r\n activeTheme: store.serverState.activeTheme,\r\n fabricatorData: store.fabricatorState,\r\n navigationCount, // update when newLayout features received\r\n };\r\n};\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n showFiltersIfHidden: () => dispatch(actions.showFiltersIfHidden('sidebar'))\r\n };\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(SidebarClass)\r\n);\r\n","import React, {PureComponent} from 'react';\r\nimport {connect} from 'react-redux';\r\nimport PropTypes from 'prop-types';\r\nimport $ from 'jquery';\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\n\r\nimport OnScreenKeyboard from '../../../common/OnScreenKeyboard/keyboard';\r\nimport { browserIsSafari } from '../../../../misc/helpers';\r\nimport Analytics from './../../../../analytics';\r\n\r\nclass FiltersSearch extends PureComponent {\r\n static propTypes = {\r\n searchText: PropTypes.string.isRequired,\r\n handleSearchInputChange: PropTypes.func.isRequired,\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n searchVisible: false,\r\n };\r\n }\r\n\r\n handleToggleSearch = () => {\r\n Analytics.sendClickEvent('filter-search-' + (this.state.searchVisible ? 'hide' : 'show'));\r\n this.setState({searchVisible: !this.state.searchVisible}, () => this.state.searchVisible && $(this.searchInputNode).focus());\r\n };\r\n\r\n handleInputSearchFocus = () => {\r\n if (this.props.windowWidth < 991 && browserIsSafari()) { // scroll to the top of the window on mobile (Safari workarounds)\r\n window.scrollTo(0, 0);\r\n setTimeout(() => {\r\n window.scrollTo(0, 0);\r\n }, 0);\r\n setTimeout(() => {\r\n window.scrollTo(0, 0);\r\n }, 300)\r\n }\r\n };\r\n\r\n render() {\r\n const {intl} = this.props;\r\n return (\r\n
    this.handleToggleSearch()}>\r\n \r\n e.stopPropagation()}>\r\n this.searchInputNode = node}\r\n className=\"filters-header-input-search\"\r\n placeholder={intl.formatMessage({id: \"filterSelection.searchPlaceholder\"})}\r\n value={this.props.searchText}\r\n onFocus={this.handleInputSearchFocus}\r\n onChange={this.props.handleSearchInputChange}\r\n onClick={(e) => e.stopPropagation()}\r\n id=\"filter-search\"\r\n />\r\n this.props.handleSearchInputChange({target: {value: v}})}\r\n type=\"text\"\r\n prependTo=\".filters-container\"\r\n top=\"40px\"\r\n left=\"10px\"\r\n />\r\n
    \r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n windowWidth: store.serverState.windowWidth,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n\r\n};\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(FiltersSearch)\r\n)\r\n","import React from \"react\";\r\nimport KeyType from \"./keyboardKeyType\";\r\nimport Analytics from './../../../analytics';\r\n\r\nexport default class KeyboardKey extends React.PureComponent {\r\n handleClick = (e) => {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n let key = this.props.keyValue;\r\n if (!this.props.raw && this.props.isUpperCase && this.props.keyValue2) {\r\n key = this.props.keyValue2;\r\n }\r\n Analytics.sendClickEvent('osk-keyboard-key');\r\n\r\n this.props.runKeyStroke(key);\r\n };\r\n\r\n render() {\r\n let enabled = true;\r\n if (this.props.isUpperCase) {\r\n if (!this.props.keyValue2) {\r\n enabled = false;\r\n }\r\n }\r\n\r\n let key = this.props.keyValue;\r\n switch (key) {\r\n case 'backspace':\r\n case \"|<\":\r\n case \"|>\":\r\n key = '';\r\n break;\r\n default:\r\n if (this.props.isUpperCase) {\r\n if (this.props.keyValue2) {\r\n key = this.props.keyValue2;\r\n } else if (this.props.type === KeyType.Types.RIGHT_PANEL) {\r\n key = key.toUpperCase();\r\n }\r\n }\r\n break;\r\n }\r\n\r\n let className = KeyType.className(this.props.type);\r\n if (this.props.type === KeyType.Types.NORMAL) {\r\n if (!enabled) {\r\n className += \" keyboard-keys-shifted-enabled\";\r\n } else if (this.props.isUpperCase) {\r\n className += \" keyboard-keys-shifted\";\r\n }\r\n\r\n if (this.props.keyValue === 'backspace') {\r\n className += \" keyboard-backspace-key\";\r\n }\r\n }\r\n\r\n switch (this.props.type) {\r\n case KeyType.Types.NUMERIC:\r\n case KeyType.Types.NUMERIC_EXTENDED:\r\n return (\r\n
    {key}
    \r\n );\r\n case KeyType.Types.RIGHT_PANEL:\r\n return (
    {key}
    );\r\n default: {\r\n let img = null;\r\n if (this.props.image) {\r\n img = (\"\");\r\n }\r\n return (

    {this.props.keyValue2}

    {key}

    {img}\r\n
    );\r\n }\r\n }\r\n }\r\n}\r\n","export default {\r\n Types: {\r\n NORMAL: 'NORMAL',\r\n NUMERIC: 'NUMERIC',\r\n NUMERIC_EXTENDED: 'NUMERIC_EXTENDED',\r\n BACKSPACE: 'BACKSPACE',\r\n NORMAL_3: 'NORMAL_3',\r\n NORMAL_5: 'NORMAL_5',\r\n NORMAL_2_5: 'NORMAL_2_5',\r\n RIGHT_PANEL: 'RIGHT_PANEL'\r\n },\r\n /**\r\n *\r\n * @param type {string}\r\n */\r\n className: function (type) {\r\n switch (type) {\r\n case this.Types.NUMERIC:\r\n return \"numberpad-keys\";\r\n case this.Types.NUMERIC_EXTENDED:\r\n return \"numberpad-keys-extended\";\r\n case this.Types.BACKSPACE:\r\n return \"numberpad-keys-extended-special keyboard-backspace-key\";\r\n case this.Types.NORMAL:\r\n return 'keyboard-keys';\r\n case this.Types.NORMAL_3:\r\n return \"keyboard-keys keyboard-keys-extended-3x\";\r\n case this.Types.NORMAL_5:\r\n return \"keyboard-keys keyboard-keys-extended-5x\";\r\n case this.Types.NORMAL_2_5:\r\n return \"keyboard-keys keyboard-keys-extended-2point5x\";\r\n case this.Types.RIGHT_PANEL:\r\n return \"keybard-right-panel-buttons\";\r\n }\r\n }\r\n};","import React, {Component} from 'react';\r\nimport {connect} from 'react-redux';\r\nimport PropTypes from 'prop-types';\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport {PartMenuType} from \"../../constants\";\r\nimport BodyPanel from \"./bodyPanel\";\r\nimport BodyItems from \"./bodyItems\";\r\nimport Analytics from \"../../../../analytics\";\r\nimport FilterSelection from \"../newFilters/filterSelection\";\r\nimport NavigationFilters from \"../newFilters/navigationFilters\";\r\nimport {CABINET_WIZARD_BUTTONS} from \"../../../kvComponent/core/constants\";\r\nimport NavigationFiltersSteps from \"../newFilters/navigationFiltersSteps\";\r\nimport {getCurrentLayout} from \"../../../appLayout\";\r\nimport Config from \"../../../../config\";\r\nimport {getPartThemeThumbnail} from \"../../../../misc/helpers\";\r\n\r\nclass BodyClass extends Component {\r\n\r\n static propTypes = {\r\n parentItem: PropTypes.instanceOf(DesignNavigationItem),\r\n childItem: PropTypes.instanceOf(DesignNavigationItem),\r\n navWidth: PropTypes.number,\r\n searchText: PropTypes.string,\r\n onItemClick: PropTypes.func.isRequired,\r\n toggleApplyWallsCheckbox: PropTypes.func,\r\n isWallItem: PropTypes.func,\r\n handleSubTypeClick: PropTypes.func,\r\n showMenu: PropTypes.bool,\r\n toggleUserPopup: PropTypes.func,\r\n activeFeature: PropTypes.object,\r\n wizardGroups: PropTypes.array,\r\n useWizard: PropTypes.bool,\r\n showFeatureWizard: PropTypes.bool,\r\n enableFeatureWizard: PropTypes.func,\r\n exitFeatureWizard: PropTypes.func,\r\n getFilterDisplayName: PropTypes.func.isRequired,\r\n useFilters: PropTypes.bool,\r\n removeFilterSelection: PropTypes.func,\r\n showFilterSelection: PropTypes.bool,\r\n toggleWizardFilterSelection: PropTypes.func,\r\n refreshCB: PropTypes.func,\r\n setStateActiveFeature: PropTypes.func\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n showLoader: false\r\n }\r\n }\r\n\r\n componentWillReceiveProps(nextProps) {\r\n if (nextProps.selectedFilters.length) {\r\n let updateComponent = false;\r\n if (nextProps.selectedFilters.length === this.props.selectedFilters.length) {\r\n updateComponent = nextProps.selectedFilters.some((filter, index) => {\r\n return filter.filterId !== this.props.selectedFilters[index].filterId\r\n || filter.filterGroupId !== this.props.selectedFilters[index].filterGroupId\r\n });\r\n }\r\n if (updateComponent) {\r\n this.refreshItems();\r\n }\r\n }\r\n if (this.props.navigationLoadingActive && !nextProps.navigationLoadingActive) {\r\n this.refreshItems();\r\n }\r\n }\r\n\r\n refreshItems = () => {\r\n this.setState({\r\n showLoader: true\r\n }, () => {\r\n this.setState({\r\n showLoader: false\r\n })\r\n })\r\n };\r\n\r\n itemsDispatcher = () => {\r\n const parentItem = this.props.parentItem;\r\n if (!parentItem) {\r\n return (\r\n
      \r\n {this.level1Items()}\r\n
    \r\n )\r\n }\r\n // if (parentItem && !childItem) {\r\n // if (parentItem.part.isSubTypeWithItems()) {\r\n // return this.level2ItemsNew(parentItem.part.navigationSubItems(selectedFilters, this.props.searchText)); // complete Vanity, complete Bathtub\r\n // }\r\n // return [];\r\n // }\r\n return this.level2ItemsNew();\r\n };\r\n\r\n level1Items = () => {\r\n const layout = getCurrentLayout();\r\n const {searchText, parentItem, selectedFilters, activeTheme} = this.props;\r\n const items = layout.designNavigationItems(parentItem, selectedFilters, searchText)\r\n .filter(item => {\r\n if (Config.showAllVisualizerGroups()) {\r\n return true\r\n }\r\n if (item.part.menuType === PartMenuType.Simple) {\r\n return layout.designNavigationItems(item).length\r\n } else {\r\n const subParts = item.part.subParts();\r\n return subParts.length && subParts.some(subPart => layout.hasNavItemsLength(subPart))\r\n }\r\n });\r\n return items.map(item => {\r\n const style = {\r\n backgroundImage: `url(${getPartThemeThumbnail(item.part.partThumbnail, activeTheme)})`,\r\n };\r\n if (item.part.partThumbnailSize) {\r\n style.backgroundSize = item.part.partThumbnailSize\r\n }\r\n return (\r\n
  • {\r\n Analytics.sendClickEvent('item-clicked');\r\n Analytics.sendClickEvent('item-clicked-' + item.part.partName);\r\n this.props.onItemClick(item)\r\n }}>\r\n
    \r\n \r\n
    \r\n
  • \r\n )\r\n })\r\n };\r\n\r\n updateComponent = () => {\r\n this.forceUpdate();\r\n };\r\n\r\n getFeatures = (layout) => {\r\n const {parentItem, childItem, searchText, selectedFilters} = this.props;\r\n const currentParent = (parentItem.part.menuType === PartMenuType.Simple) ? parentItem : childItem;\r\n if (!currentParent) {\r\n return []\r\n }\r\n return layout.designNavigationItems(currentParent, selectedFilters, searchText);\r\n };\r\n\r\n level2ItemsNew = () => {\r\n const layout = getCurrentLayout();\r\n const activePart = this.props.parentItem ? this.props.parentItem.part : null;\r\n const activeSubPart = this.props.childItem ? this.props.childItem.part : null;\r\n const currentPart = activeSubPart || activePart;\r\n const allFeaturesReceived = currentPart && currentPart.allFeaturesReceived\r\n && (!(currentPart.nextFeaturesPageToLoadArray && !currentPart.nextFeaturesPageToLoadArray[layout.getCurrentLayoutAbbreviation()].page));\r\n\r\n return ;\r\n };\r\n\r\n render() {\r\n\r\n const activePart = this.props.parentItem ? this.props.parentItem.part : null;\r\n const activeSubPart = this.props.childItem ? this.props.childItem.part : null;\r\n const activeNavPart = activeSubPart || activePart;\r\n\r\n const filterSelectionHasValues = (activeSubPart || activePart) && FilterSelection.getAvailableFilterValues(\r\n this.props.filterGroups, \"Material\", activeSubPart || activePart, this.props.fabricatorData\r\n ).length > 0;\r\n\r\n\r\n // const fabricatorSettings = this.props.fabricatorData.settings;\r\n // const useWizard = fabricatorSettings &&\r\n // (fabricatorSettings.wizardConsumers || (fabricatorSettings.wizardClients && document.kvConfig.isBackend));\r\n\r\n const useKVWizard = false; //TODO change it when BE is ready\r\n\r\n const showNavigationFilters = useKVWizard && this.props.activeNavigationFilter && activeNavPart\r\n && this.props.activeNavigationFilter !== CABINET_WIZARD_BUTTONS[0].buttonId\r\n && activeNavPart.canUseNavigationFilter && activeNavPart.canUseNavigationFilter();\r\n let showNavigationFiltersSteps = showNavigationFilters && this.props.activeNavigationFilter !== \"inlay_type\";\r\n\r\n if (useKVWizard && activeNavPart && activeNavPart.canUseNavigationFilterSteps\r\n && activeNavPart.canUseNavigationFilterSteps()) {\r\n showNavigationFiltersSteps = !this.props.countertopNavigationFilterCompleted;\r\n }\r\n\r\n return (\r\n
    \r\n {activePart\r\n ? \r\n : null}\r\n {this.props.useFilters && this.props.showFilterSelection && filterSelectionHasValues ? (\r\n \r\n ) : showNavigationFilters\r\n ? (\r\n \r\n ) : (\r\n this.state.showLoader\r\n ?
    \r\n : this.itemsDispatcher()\r\n // !this.state.showLoader\r\n // ? allFeaturesReceived\r\n // ? this.itemsDispatcher()\r\n // : (activeSubPart || activePart)\r\n // ? this.showLoadingItems(activeSubPart || activePart)\r\n // : this.itemsDispatcher()\r\n // :
    \r\n )}\r\n {showNavigationFiltersSteps ? (\r\n \r\n ) : null}\r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n fabricatorData: store.fabricatorState,\r\n filterGroups: store.filterState.filterGroups,\r\n filtersVisible: store.filterState.showFilters,\r\n selectedFilters: store.filterState.selectedFilters,\r\n navigationViewType: store.navigationState.navigationViewType,\r\n activeNavigationFilter: store.navigationState.activeNavigationFilter,\r\n countertopNavigationFilterCompleted: store.navigationState.countertopNavigationFilterCompleted,\r\n navigationLoadingActive: store.navigationState.navigationLoadingActive,\r\n activeTheme: store.serverState.activeTheme,\r\n };\r\n};\r\nconst mapDispatchToProps = () => {\r\n return {};\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(BodyClass);\r\n","import React, {Component} from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport Analytics from \"../../../../analytics\";\r\n\r\nexport default class BodyPanelCheckbox extends Component {\r\n\r\n static propTypes = {\r\n activeSubPart: PropTypes.object.isRequired,\r\n toggleApplyWallsCheckbox: PropTypes.func.isRequired,\r\n };\r\n\r\n allWallsClick = () => {\r\n Analytics.sendClickEvent('all-walls-toggled');\r\n this.props.toggleApplyWallsCheckbox();\r\n setTimeout(() => {\r\n this.forceUpdate();\r\n }, 0)\r\n };\r\n\r\n render() {\r\n return (\r\n \r\n )\r\n }\r\n}\r\n","import React, {Component} from 'react';\r\nimport {connect} from 'react-redux';\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\nimport PropTypes from 'prop-types';\r\n\r\nclass BodyPanelWizardSteps extends Component {\r\n\r\n static propTypes = {\r\n availableSteps: PropTypes.array,\r\n featureWizardStep: PropTypes.number,\r\n setFeatureWizardStep: PropTypes.func,\r\n exitFeatureWizard: PropTypes.func,\r\n enableFeatureWizard: PropTypes.func,\r\n toggleWizardFilterSelection: PropTypes.func,\r\n getFilterDisplayName: PropTypes.func.isRequired,\r\n showFeatureWizard: PropTypes.bool,\r\n activeSubPart: PropTypes.object,\r\n };\r\n\r\n setFeatureWizardStep = (nextStep) => {\r\n switch (nextStep) {\r\n case \"back\":\r\n nextStep = this.props.featureWizardStep === 0 ? 0 : this.props.featureWizardStep - 1;\r\n break;\r\n case \"next\":\r\n if (this.props.featureWizardStep === (this.props.availableSteps.length - 1)) {\r\n this.props.exitFeatureWizard(this.state.availableSteps, this.props.featureWizardStep);\r\n } else {\r\n nextStep = this.props.featureWizardStep + 1;\r\n }\r\n break;\r\n default:\r\n break;\r\n }\r\n const currentStep = this.props.availableSteps[nextStep - 1];\r\n const fabricatorSettings = this.props.fabricatorSettings;\r\n const allStepsCompleted = this.props.availableSteps.filter(step => !step.hidden).every(step => step.selectedValueId);\r\n if ((nextStep > this.props.featureWizardStep) && currentStep && !allStepsCompleted\r\n && (!currentStep.selectedValueId || (fabricatorSettings.leadCapture && currentStep.selectedItemIsLocked && !this.props.isPhoneNumberValidated))) {\r\n return\r\n }\r\n if (this.props.showFeatureWizard) {\r\n this.props.setFeatureWizardStep(nextStep);\r\n if (nextStep === 0) {\r\n this.props.toggleWizardFilterSelection(false);\r\n }\r\n } else {\r\n this.props.enableFeatureWizard(nextStep);\r\n }\r\n };\r\n\r\n render() {\r\n const fabricatorSettings = this.props.fabricatorSettings;\r\n const availableSteps = this.props.availableSteps.filter(step => !step.hidden);\r\n const allStepsCompleted = availableSteps.every(step => step.selectedValueId);\r\n\r\n const activeSubPart = this.props.activeSubPart;\r\n const itemIsSelected = (!fabricatorSettings.leadCapture\r\n || (activeSubPart.activeFeature && !activeSubPart.activeFeature.partName.includes(\"WizardPlaceholder\")\r\n && activeSubPart.firstClick[this.props.activeQuoteIndex] && activeSubPart.placeholderChanged));\r\n\r\n return (\r\n
    \r\n
      \r\n
    • this.props.exitFeatureWizard(availableSteps, this.props.featureWizardStep)}>\r\n {/**/}\r\n \r\n \r\n \r\n
    • \r\n {availableSteps.map((wizardButton, index) => {\r\n const prevStep = availableSteps[index - 1];\r\n const disabled = this.props.showFeatureWizard\r\n ? (index && !allStepsCompleted && (!prevStep.selectedValueId\r\n || (fabricatorSettings.leadCapture && prevStep.selectedItemIsLocked && !this.props.isPhoneNumberValidated)))\r\n : (index && !itemIsSelected && !availableSteps[index - 1].selectedValueId);\r\n return (\r\n
    • this.setFeatureWizardStep(index)}>\r\n \r\n \r\n {this.props.getFilterDisplayName(wizardButton.filterName, this.props.intl)}\r\n \r\n
    • \r\n )\r\n })}\r\n
    \r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => ({\r\n filterGroups: store.filterState.filterGroups,\r\n fabricatorSettings: store.fabricatorState.settings,\r\n activeQuoteIndex: store.quotesState.activeQuoteIndex,\r\n});\r\n\r\nconst mapDispatchToProps = () => ({});\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(BodyPanelWizardSteps)\r\n);\r\n","import React, {Component} from 'react';\r\nimport {connect} from 'react-redux';\r\nimport {FormattedMessage} from \"react-intl\";\r\nimport PropTypes from 'prop-types';\r\n\r\nimport {\r\n setActiveNavigationFilter,\r\n setActiveNavigationFilterStepIndex,\r\n setNavigationViewType\r\n} from \"../../../../actions/navigationFunctions\";\r\nimport {CABINET_WIZARD_BUTTONS, COUNTERTOP_WIZARD_BUTTONS} from \"../../../kvComponent/core/constants\";\r\nimport {setSelectedFilters} from \"../../../../actions/actionFunctions\";\r\n\r\nclass BodyPanelNavigationFiltersSteps extends Component {\r\n\r\n static propTypes = {\r\n activePart: PropTypes.object.isRequired,\r\n };\r\n\r\n setNavigationWizardStep = (buttonId, wizardButtonIndex) => {\r\n this.props.setActiveNavigationFilter(buttonId);\r\n this.props.setActiveNavigationFilterStepIndex(wizardButtonIndex);\r\n if (buttonId === COUNTERTOP_WIZARD_BUTTONS[2].buttonId) {\r\n this.props.setNavigationViewType(2)\r\n } else if (this.props.navigationViewType !== 3) {\r\n this.props.setNavigationViewType(3)\r\n }\r\n if (buttonId !== COUNTERTOP_WIZARD_BUTTONS[2].buttonId) {\r\n this.props.setSelectedFilters([]); // reset filters on stones & color step\r\n }\r\n };\r\n\r\n getAvailableSteps = () => {\r\n let wizardButtons = [];\r\n switch (this.props.activePart.partId) {\r\n case \"top_cabinet\":\r\n case \"bottom_cabinet\":\r\n wizardButtons = CABINET_WIZARD_BUTTONS.filter(wizardButton => wizardButton.buttonId !== \"inlay_type\");\r\n break;\r\n case \"countertop\":\r\n case \"edge_profile\":\r\n case \"backsplash\":\r\n wizardButtons = COUNTERTOP_WIZARD_BUTTONS;\r\n break;\r\n case \"center_island_countertop\":\r\n case \"center_island_edge\":\r\n wizardButtons = COUNTERTOP_WIZARD_BUTTONS.slice(0, 4);\r\n break;\r\n default:\r\n break;\r\n }\r\n return wizardButtons.map((wizardButton, wizardButtonIndex) => {\r\n wizardButton.onClick = () => this.setNavigationWizardStep(wizardButton.buttonId, wizardButtonIndex);\r\n return wizardButton\r\n })\r\n };\r\n\r\n render() {\r\n const countertopWizardPartIds = [\"countertop\", \"center_island_countertop\", \"edge_profile\", \"center_island_edge\", \"backsplash\"];\r\n let allowIcons = true;\r\n if (this.props.activePart.partId === \"backsplash\" && this.props.windowWidth < 1400) {\r\n allowIcons = false\r\n }\r\n\r\n return (\r\n
    \r\n
      \r\n {this.getAvailableSteps().map((wizardButton, index) => {\r\n const disabled = false;\r\n const buttonIcon = countertopWizardPartIds.includes(this.props.activePart.partId)\r\n && wizardButton.buttonId === \"all_products\" ? \"stones\" : wizardButton.buttonId;\r\n return (\r\n
    • {} : wizardButton.onClick}>\r\n {(buttonIcon !== CABINET_WIZARD_BUTTONS[0].buttonId) && allowIcons ? (\r\n \r\n ) : null}\r\n \r\n \r\n \r\n
    • \r\n )\r\n })}\r\n
    \r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => ({\r\n // fabricatorSettings: store.fabricatorState.settings,\r\n windowWidth: store.serverState.windowWidth,\r\n activeNavigationFilter: store.navigationState.activeNavigationFilter,\r\n activeNavigationFilterStepIndex: store.navigationState.activeNavigationFilterStepIndex,\r\n moduleContextMenuModule: store.navigationState.moduleContextMenuModule,\r\n moduleContextMenuModulePart: store.navigationState.moduleContextMenuModulePart,\r\n navigationViewType: store.navigationState.navigationViewType,\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n setActiveNavigationFilter,\r\n setActiveNavigationFilterStepIndex,\r\n setNavigationViewType,\r\n setSelectedFilters\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(BodyPanelNavigationFiltersSteps);\r\n","import React, {useEffect, useRef, useState} from \"react\";\r\nimport {FormattedMessage} from \"react-intl\";\r\nimport PropTypes from \"prop-types\";\r\nimport {connect} from \"react-redux\";\r\n\r\nimport Switch from '@mui/material/Switch';\r\nimport FormControlLabel from '@mui/material/FormControlLabel';\r\nimport Popper from \"@mui/material/Popper\";\r\nimport Grow from \"@mui/material/Grow\";\r\n\r\nimport {useIsMounted} from \"../../../../misc/helperHooks\";\r\nimport {featureInterface} from \"../../../../interfaces/featureInterface\";\r\nimport {IS_PRODUCT_JOURNEY} from \"../../../../config\";\r\n\r\n\r\nlet timeoutId = null;\r\n\r\nconst LookAllWallsRadioButtonSmall = (props) => {\r\n\r\n const {allWallsCheckboxClick, translateId, checked, viewType, lookActiveCategory, showTutorialToolTip, isMobile,\r\n lookFeature} = props;\r\n\r\n const [showTooltip, setShowTooltip] = useState(false);\r\n const anchorRef = useRef(null);\r\n const isMounted = useIsMounted();\r\n\r\n useEffect(() => {\r\n return () => clearTimeout(timeoutId);\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (showTutorialToolTip) {\r\n timeoutId = setTimeout(() => {\r\n if (isMounted()) {\r\n setShowTooltip(true);\r\n }\r\n }, 0);\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [isMounted, showTutorialToolTip]);\r\n\r\n const buttonClick = () => {\r\n setShowTooltip(true);\r\n clearTimeout(timeoutId);\r\n allWallsCheckboxClick();\r\n timeoutId = setTimeout(() => {\r\n if (isMounted()) {\r\n setShowTooltip(false);\r\n }\r\n }, 2000);\r\n }\r\n\r\n const placement = viewType !== 1 || showTutorialToolTip\r\n ? isMobile && IS_PRODUCT_JOURNEY ? \"left\" : \"right\"\r\n : \"bottom\";\r\n\r\n const getToolTipTranslate = () => {\r\n if (!showTutorialToolTip) {\r\n return translateId\r\n }\r\n switch (lookFeature ? lookFeature.partId : lookActiveCategory) {\r\n case \"countertop\":\r\n case \"center_island_countertop\":\r\n case \"vanity_countertop\":\r\n return \"look.allWallsOverlay.countertop.text\"\r\n case \"backsplash\":\r\n case \"vanity_backsplash\":\r\n return \"look.allWallsOverlay.backsplash.text\"\r\n case \"top_cabinet\":\r\n case \"bottom_cabinet\":\r\n case \"center_island_cabinet\":\r\n case \"fridge_enclosure\":\r\n return \"look.allWallsOverlay.cabinet.text\"\r\n case \"edge\":\r\n case \"edge_profile\":\r\n case \"center_island_edge\":\r\n return \"look.allWallsOverlay.edge.text\"\r\n default:\r\n return \"look.allWallsOverlay.text\"\r\n }\r\n }\r\n\r\n return (\r\n
    \r\n \r\n }\r\n />\r\n \r\n {({ TransitionProps }) => (\r\n \r\n
    \r\n \r\n \r\n : \r\n \r\n
    \r\n \r\n )}\r\n
    \r\n
    \r\n )\r\n};\r\n\r\nLookAllWallsRadioButtonSmall.propTypes = {\r\n translateId: PropTypes.string,\r\n checked: PropTypes.bool.isRequired,\r\n allWallsCheckboxClick: PropTypes.func.isRequired,\r\n viewType: PropTypes.number,\r\n showTutorialToolTip: PropTypes.bool,\r\n lookFeature: PropTypes.shape(featureInterface),\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {lookActiveCategory} = store.lookState;\r\n const {isMobile} = store.serverState;\r\n return {\r\n lookActiveCategory,\r\n isMobile,\r\n };\r\n};\r\n\r\nexport default (\r\n connect(mapStateToProps)(LookAllWallsRadioButtonSmall)\r\n)\r\n","import React, {Fragment} from 'react';\r\nimport {connect} from 'react-redux';\r\nimport {Grid} from 'react-virtualized';\r\nimport PropTypes from 'prop-types';\r\nimport $ from \"jquery\";\r\n\r\nimport NavigationItemsList from \"../navigationItemsList\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport {UserPopupTypes} from \"../../constants\";\r\nimport {getActivePartsCounts} from \"../navUtils\";\r\nimport {\r\n changeActivePartRelatedItemIndex, setCameFromPage, setQtActiveCategory, toggleBathroomVisualizerOpen,\r\n toggleSelectionFeatureInfo, toggleSelectionWindow\r\n} from \"../../../../actions/actionFunctions\";\r\n\r\nimport BodySwipable from \"./bodySwipable\";\r\nimport LoadingSpinner from \"../../../ui/loadingSpinner\";\r\nimport {checkIfNeedToReceiveFeaturesIfFiltersApplied} from \"../../../../misc/filtersFunctions\";\r\n\r\nclass BodyItemsClass extends NavigationItemsList {\r\n\r\n static propTypes = {\r\n features: PropTypes.arrayOf(PropTypes.instanceOf(DesignNavigationItem)),\r\n parentItem: PropTypes.instanceOf(DesignNavigationItem),\r\n childItem: PropTypes.instanceOf(DesignNavigationItem),\r\n onItemClick: PropTypes.func,\r\n showMenu: PropTypes.bool,\r\n existInQtCategory: PropTypes.bool,\r\n toggleUserPopup: PropTypes.func,\r\n activeFeature: PropTypes.object,\r\n searchText: PropTypes.string,\r\n layoutName: PropTypes.string,\r\n parentUpdate: PropTypes.func\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n showPlaceHolders: document.bvConfig ? document.bvConfig.showPlaceholders : false,\r\n reorderedFeatures: [],\r\n showLoader: false,\r\n childItemText: \"\",\r\n parentItemText: \"\",\r\n additionalFeaturesLoading: false\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n this.reorderItems(this.props);\r\n const childItem = this.props.childItem && this.props.childItem.part;\r\n if (childItem && childItem.partId.includes(\"countertop\") && this.props.selectedFilters.length && !this.props.activeNavigationFilter) {\r\n const checkPassed = checkIfNeedToReceiveFeaturesIfFiltersApplied(this.props.selectedFilters, childItem);\r\n if (checkPassed) {\r\n this.getFeaturesFromBackendWithFilters(childItem, checkPassed.arrayOfNeededFiltersToReceive, 1);\r\n }\r\n }\r\n }\r\n\r\n componentWillReceiveProps(nextProps) {\r\n if (\r\n (nextProps.childItem && (nextProps.childItem.text !== this.state.childItemText))\r\n || (nextProps.showMenu && !this.props.showMenu)\r\n || (!nextProps.childItem && nextProps.parentItem && (nextProps.parentItem.text !== this.state.parentItemText))\r\n || (this.props.selectedFilters.length !== nextProps.selectedFilters.length)\r\n || (this.props.searchText !== nextProps.searchText)\r\n || (nextProps.allFeaturesReceived && !this.props.allFeaturesReceived)\r\n || (nextProps.bvOpened && !this.props.bvOpened)\r\n || (this.props.features.length && nextProps.features.length && nextProps.features[0] && this.props.features[0]\r\n && nextProps.features[0].part.getParent && this.props.features[0].part.getParent\r\n && nextProps.features[0].part.getParent().partName !== this.props.features[0].part.getParent().partName)\r\n ) {\r\n this.setState({\r\n showLoader: true\r\n }, () => {\r\n this.reorderItems(nextProps);\r\n });\r\n }\r\n if (!nextProps.filtersVisible && this.props.filtersVisible) {\r\n setTimeout(() => {\r\n this.forceUpdate()\r\n }, 200);\r\n }\r\n if (this.needToUpdate && nextProps.features.length !== this.props.features.length) {\r\n this.reorderItems(nextProps);\r\n }\r\n if (nextProps.childItem && nextProps.selectedFilters.length) {\r\n const checkPassed = checkIfNeedToReceiveFeaturesIfFiltersApplied(nextProps.selectedFilters, nextProps.childItem.part);\r\n if (checkPassed) {\r\n this.setState({\r\n additionalFeaturesLoading: true\r\n })\r\n this.getFeaturesFromBackendWithFilters(nextProps.childItem.part, checkPassed.arrayOfNeededFiltersToReceive, 1);\r\n }\r\n }\r\n }\r\n\r\n reorderItems = (props) => {\r\n const selectedFirstItemIndex = this.getActiveItemIndex(props);\r\n const otherSelectedWallsIndexes = this.getSelectedWallIndexes(props.childItem, props.features, selectedFirstItemIndex); // this part is looking for the same stones that are already selected\r\n\r\n const selectedExist = (selectedFirstItemIndex || selectedFirstItemIndex === 0) && selectedFirstItemIndex > -1;\r\n const indexesToReplace = selectedExist ? [selectedFirstItemIndex, ...otherSelectedWallsIndexes] : [...otherSelectedWallsIndexes];\r\n\r\n // console.log('indexesToReplace', indexesToReplace);\r\n\r\n this.setState({\r\n childItemText: props.childItem ? props.childItem.text : \"\",\r\n parentItemText: props.parentItem ? props.parentItem.text : \"\",\r\n reorderedFeatures: this.getReorderedItems(indexesToReplace, props, selectedExist)\r\n }, () => {\r\n this.setState({\r\n showLoader: false\r\n });\r\n if (this.needToUpdate) {\r\n const $gridBody = $(\".categories-list .ReactVirtualized__Grid\");\r\n $gridBody.scrollLeft(this.needToUpdate);\r\n this.needToUpdate = false;\r\n }\r\n });\r\n };\r\n\r\n handleUserLoginClick = (userPopupType = UserPopupTypes.Unlock) => {\r\n const fabricatorSettings = this.props.fabricatorData.settings;\r\n\r\n if (this.props.userIsLoggedIn) {\r\n if (fabricatorSettings.twoFA) {\r\n if (!this.props.isPhoneNumberValidated) {\r\n this.props.toggleUserPopup({\r\n userPopupOpened: true,\r\n userPopupType\r\n });\r\n } else {\r\n this.toggleMobileButton('userLogoutActive');\r\n }\r\n } else {\r\n this.toggleMobileButton('userLogoutActive');\r\n }\r\n } else {\r\n this.props.toggleUserPopup({\r\n userPopupOpened: true,\r\n userPopupType\r\n });\r\n if (userPopupType === UserPopupTypes.GetQuote) {\r\n window.allowClickLeadCapturePopup = false;\r\n }\r\n }\r\n };\r\n\r\n toggleMobileButton = (activeFeature) => {\r\n this.setState({\r\n [activeFeature]: !this.state[activeFeature]\r\n })\r\n };\r\n\r\n renderVirtualizedGrid = () => {\r\n\r\n const elements = this.getNavItemsList();\r\n const menuBody = document.querySelector(\".categories-list\");\r\n const navigationViewType = this.props.navigationViewType === 3 ? 2 : 1; // 2\r\n const columnsCount = Math.ceil(elements.length / navigationViewType); // for ex. 28/3 = 10 columns\r\n\r\n const list = [[]]; // making list for React Virtualized\r\n if (navigationViewType === 2) {\r\n list.push([]);\r\n elements.forEach((element, index) => {\r\n let rowIndex = (index % navigationViewType === 0) ? 0 : 1;\r\n list[rowIndex].push(React.cloneElement(element))\r\n });\r\n } else {\r\n elements.forEach((element) => list[0].push(React.cloneElement(element)));\r\n }\r\n\r\n // console.log('list', list);\r\n\r\n return menuBody ? (\r\n \r\n \r\n {\r\n return
    \r\n {list[rowIndex][columnIndex]}\r\n
    \r\n }}>\r\n
    \r\n
    \r\n
    \r\n ) : null\r\n };\r\n\r\n renderLoadingList = (activePart) => {\r\n if (!activePart.counts) {\r\n return
    \r\n }\r\n\r\n const counts = getActivePartsCounts(activePart, this.props.layoutName);\r\n\r\n if (!counts) {\r\n return
    \r\n }\r\n\r\n const navigationViewType = this.props.navigationViewType === 3 ? 2 : 1;\r\n\r\n const elements = [];\r\n for (let i = 0; i < Math.ceil(counts / navigationViewType); i++ ) { // for ex. 28/3 = 10 columns\r\n const innerElements = [];\r\n for (let j = 0; j < navigationViewType;j++ ) {\r\n const currentIndex = j+(i*navigationViewType);\r\n if (currentIndex < counts) {\r\n innerElements.push(\r\n
    \r\n
    \r\n
    \r\n );\r\n }\r\n }\r\n elements.push(\r\n
  • \r\n {innerElements}\r\n
  • \r\n );\r\n }\r\n\r\n return elements\r\n };\r\n\r\n render() {\r\n const activePart = this.props.parentItem ? this.props.parentItem.part : null;\r\n const activeSubPart = this.props.childItem ? this.props.childItem.part : null;\r\n\r\n return (\r\n
    \r\n {this.state.showLoader\r\n ? \r\n : this.props.allFeaturesReceived\r\n ? (\r\n \r\n {this.state.additionalFeaturesLoading || this.props.navigationLoadingActive ? this.getLoadingFeatures() : null}\r\n {this.renderVirtualizedGrid()}\r\n \r\n )\r\n : this.renderLoadingList(activeSubPart || activePart)\r\n }\r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {isPhoneNumberValidated, userIsLoggedIn} = store.userState;\r\n return {\r\n isPhoneNumberValidated,\r\n userIsLoggedIn,\r\n bvOpened: store.bathroomVisualizerState.bvOpened,\r\n filtersVisible: store.filterState.showFilters,\r\n selectedFilters: store.filterState.selectedFilters,\r\n filterGroups: store.filterState.filterGroups,\r\n fabricatorData: store.fabricatorState,\r\n cartItems: store.cartState.cartItems,\r\n navigationViewType: store.navigationState.navigationViewType,\r\n activeNavigationFilter: store.navigationState.activeNavigationFilter,\r\n navigationLoadingActive: store.navigationState.navigationLoadingActive,\r\n activeQuoteIndex: store.quotesState.activeQuoteIndex,\r\n windowWidth: store.serverState.windowWidth, // re-render grid on resize\r\n }\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n changeActivePartRelatedItemIndex,\r\n toggleSelectionWindow,\r\n toggleSelectionFeatureInfo,\r\n setCameFromPage,\r\n setQtActiveCategory,\r\n toggleBathroomVisualizerOpen\r\n};\r\n\r\nconst BodyItems = connect(mapStateToProps, mapDispatchToProps)(BodyItemsClass);\r\n\r\n\r\nexport default BodyItems;\r\n","import React from 'react';\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\nimport classNames from 'classnames';\r\n\r\nimport {s3FeatureImagePath, THUMBNAIL_SIZES} from \"../../../misc/utils\";\r\nimport Analytics from \"../../../analytics\";\r\nimport {UserPopupTypes} from \"../constants\";\r\nimport {getFeatureIsLocked, toFixedFeatureCost} from '../../../misc/helpers';\r\nimport FeatureName from \"../featureName\";\r\nimport {isFeatureEnabled} from \"../../../misc/displayLogic\";\r\nimport {getPriceWithIncluded} from \"../../../misc/priceFunctions\";\r\n\r\nconst navigationItem = (props) => {\r\n\r\n if (!props.currentFeature) {\r\n return props.isMobile\r\n ?
  • \r\n :
    \r\n }\r\n\r\n const { fabricatorData, isPhoneNumberValidated, currentFeatureCartItemsCount } = props;\r\n\r\n const currentFeature = props.currentFeature.part;\r\n\r\n let styles = {};\r\n if (currentFeature.dbFeature.thumbnailUrl) {\r\n const size = props.isMobile\r\n ? THUMBNAIL_SIZES.small\r\n : props.largeThumbnail ? null : THUMBNAIL_SIZES.medium\r\n styles.backgroundImage = `url('${s3FeatureImagePath(currentFeature.dbFeature.thumbnailUrl, size)}')`;\r\n } else if (props.currentFeature && currentFeature.customThumbnail) {\r\n styles.backgroundImage = `url('${currentFeature.customThumbnail}')`;\r\n }\r\n\r\n const featureIsEnabledForQt = isFeatureEnabled(currentFeature, \"quotingTool\");\r\n\r\n const fabricatorSettings = fabricatorData.settings;\r\n const allPagesEnabled = !document.kvConfig.visualizerOnly;\r\n\r\n let showPrice = false;\r\n if (fabricatorSettings.showPricing && !fabricatorData.hideCheckoutBreakdownCost && !fabricatorData.hidePricesFromUser) {\r\n if (!featureIsEnabledForQt) {\r\n showPrice = false;\r\n } else if ((fabricatorSettings.leadCapture && !(document.kvConfig.isBackend && document.kvConfig.jobId && document.kvConfig.canSaveQuote)) && !currentFeature.dbFeature.unlocked) {\r\n if (props.isPhoneNumberValidated) {\r\n showPrice = true\r\n }\r\n } else {\r\n showPrice = true\r\n }\r\n }\r\n\r\n const featureIsLocked = getFeatureIsLocked(currentFeature);\r\n\r\n const getQuoteEnabled = fabricatorSettings.enableQuote && !featureIsLocked;\r\n const quoteOrUnlockButtonVisible = featureIsLocked || (getQuoteEnabled && !isPhoneNumberValidated);\r\n\r\n const isAddToCartButtonVisible = props.isActive && allPagesEnabled && fabricatorSettings.showPricing && featureIsEnabledForQt && (\r\n (fabricatorSettings.leadCapture && (currentFeature.dbFeature.unlocked || props.isPhoneNumberValidated))\r\n || !(fabricatorSettings.leadCapture && !(document.kvConfig.isBackend && document.kvConfig.jobId && document.kvConfig.canSaveQuote)))\r\n && props.existInQtCategory && !quoteOrUnlockButtonVisible;\r\n\r\n const price = toFixedFeatureCost(currentFeature, 1);\r\n\r\n return props.isMobile ? (\r\n
  • \r\n
    Analytics.sendClickEvent('feature-clicked-' + currentFeature.partName)\r\n && props.onItemClick(props.currentFeature, featureIsLocked, event)}>\r\n {currentFeature.notAvailableInVisualizer ? (\r\n \r\n ) : null}\r\n {currentFeatureCartItemsCount > 0 ?\r\n {currentFeatureCartItemsCount} : null\r\n }\r\n
    \r\n {showPrice ? (\r\n \r\n {getPriceWithIncluded(price, currentFeature, fabricatorData, props.intl.messages)}\r\n \r\n ) : null}\r\n {featureIsLocked\r\n ? \r\n : }\r\n
    \r\n
    \r\n {props.isActive && !currentFeature.dbFeature.autoAddToCart ? (\r\n
    \r\n {isAddToCartButtonVisible ? (\r\n \r\n ) : null}\r\n {quoteOrUnlockButtonVisible ? (\r\n \r\n ) : null}\r\n {allPagesEnabled && props.existInQtCategory && !isAddToCartButtonVisible && !quoteOrUnlockButtonVisible && featureIsEnabledForQt ? (\r\n {\r\n Analytics.sendClickEvent('feature-clicked-show-feature-info') &&\r\n Analytics.sendClickEvent('feature-clicked-show-feature-info-' + currentFeature.partName) &&\r\n props.switchToFeatureInfo(props.currentFeature)\r\n }}/>\r\n ) : null}\r\n
    \r\n ) : null}\r\n
  • \r\n ) : (\r\n
    Analytics.sendClickEvent('feature-clicked')\r\n && Analytics.sendClickEvent('feature-clicked-' + currentFeature.partName)\r\n && props.onItemClick(props.currentFeature, featureIsLocked, event)}>\r\n\r\n {currentFeature.vanitySize ?\r\n {currentFeature.vanitySize}\" : null\r\n }\r\n {currentFeatureCartItemsCount > 0 ?\r\n {currentFeatureCartItemsCount} : null\r\n }\r\n {props.isActive && !currentFeature.dbFeature.autoAddToCart ? (\r\n
    \r\n {isAddToCartButtonVisible ? (\r\n \r\n ) : null}\r\n {quoteOrUnlockButtonVisible ? (\r\n \r\n ) : null}\r\n {allPagesEnabled && props.existInQtCategory && featureIsEnabledForQt ? (\r\n {\r\n Analytics.sendClickEvent('feature-clicked-show-feature-info') &&\r\n Analytics.sendClickEvent('feature-clicked-show-feature-info-' + currentFeature.partName) &&\r\n props.switchToFeatureInfo(props.currentFeature)\r\n }}/>\r\n ) : null}\r\n
    \r\n ) : null}\r\n {currentFeature.notAvailableInVisualizer ? (\r\n \r\n ) : null}\r\n
    \r\n {showPrice ? (\r\n \r\n {getPriceWithIncluded(price, currentFeature, fabricatorData, props.intl.messages)}\r\n \r\n ) : null}\r\n {!featureIsLocked ? : null}\r\n
    \r\n
    \r\n );\r\n}\r\n\r\nnavigationItem.displayName = \"navigationItem\";\r\nexport default injectIntl(navigationItem)\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class Ceiling extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'walls_ceiling';\r\n this.partName = 'Ceiling';\r\n this.translateId = \"visualizer.kitchen.walls.walls_ceiling\";\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new Ceiling());\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes) {\r\n const zIndex = zIndexes.Walls.Ceiling;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class LeftWall extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'left_wall';\r\n this.partName = 'Left Wall';\r\n this.translateId = \"visualizer.kitchen.walls.left_wall\";\r\n this.activeFeatureBeforeAllWalls = null;\r\n this.allWallsApplied = true;\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new LeftWall());\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes) {\r\n const zIndex = zIndexes.Walls.LeftWall;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class RightWall extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'right_wall';\r\n this.partName = 'Right Wall';\r\n this.translateId = \"visualizer.kitchen.walls.right_wall\";\r\n this.activeFeatureBeforeAllWalls = null;\r\n this.allWallsApplied = true;\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new RightWall());\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes) {\r\n const zIndex = zIndexes.Walls.RightWall;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class PopoutWall extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'popout_wall';\r\n this.partName = 'Popout Wall';\r\n this.translateId = \"visualizer.kitchen.walls.popout_wall\";\r\n this.activeFeatureBeforeAllWalls = null;\r\n this.allWallsApplied = true;\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new PopoutWall());\r\n }\r\n\r\n setDefault() {\r\n if (!this.tryToSetTheSameFeature(this.features)) {\r\n const leftWall = this.getParent().leftWall;\r\n let sameWallAsLeftWall = null;\r\n if (leftWall && leftWall.activeFeature && leftWall.activeFeature.partName) {\r\n const leftWallName = leftWall.activeFeature.getSplittedFeatureName();\r\n sameWallAsLeftWall = this.features.find(wall => wall.getSplittedFeatureName() === leftWallName);\r\n }\r\n this.activeFeature = sameWallAsLeftWall || this.features[0]\r\n }\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes) {\r\n const zIndex = zIndexes.Walls.PopoutWall;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n }\r\n}\r\n","// import $ from \"jquery\";\r\nimport uniqBy from \"lodash/uniqBy\";\r\n\r\nimport {IntermediatePart} from \"../../intermediatePart\";\r\nimport {BACKSPLASH_TYPES, LayoutAbbreviations} from \"../../constants\";\r\nimport DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\nimport Cabinet from \"../../parts/cabinet\";\r\nimport {loaderDisable, loaderEnable} from \"../../../../ui/loaderView\";\r\nimport Navigation from \"../../../../visComponents/navigation/navigation\";\r\n// import ActionTypes from \"../../../../../misc/actionTypes\";\r\n\r\nexport default class Backsplash extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'backsplash';\r\n this.partName = 'Backsplash';\r\n this.translateId = \"visualizer.kitchen.walls.backsplash\";\r\n this.isStoneFeature = true;\r\n this.canBeDisabled = true;\r\n this.toggleSwitchedOffByUser = false;\r\n if (isChild) {\r\n this.nextFeaturesPageToLoadArray = {};\r\n LayoutAbbreviations.forEach(layoutAbbreviation => {\r\n this.nextFeaturesPageToLoadArray[layoutAbbreviation] = {\r\n page: 0,\r\n allReceived: false,\r\n };\r\n });\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n if (Array.isArray(dbFeature.metaData[\"CabinetLayout\"])\r\n && dbFeature.metaData[\"CabinetLayout\"].includes(\"4\")\r\n && !dbFeature.metaData[\"CabinetLayout\"].includes(\"5\")) {\r\n dbFeature.metaData[\"CabinetLayout\"].push(\"5\");\r\n }\r\n // if (!(Array.isArray(dbFeature.metaData[\"backsplashType\"]) || Array.isArray(dbFeature.metaData[\"BacksplashType\"]))) {\r\n // if (dbFeature.description && dbFeature.description.includes(\"4in\")) {\r\n // dbFeature.metaData[\"BacksplashType\"] = [\"4in\"];\r\n // } else if (dbFeature.description && dbFeature.description.includes(\"6in\")) {\r\n // dbFeature.metaData[\"BacksplashType\"] = [\"6in\"];\r\n // } else if (dbFeature.metaData[\"CabinetLayout\"]) {\r\n // dbFeature.metaData[\"BacksplashType\"] = [\"18in\"];\r\n // }\r\n // console.log(\"backsplash custom\", dbFeature.sharedFeatureName, dbFeature.metaData[\"BacksplashType\"]);\r\n // }\r\n return super.load_(dbFeature, new Backsplash());\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n let featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(true), filteredAvailableFeatures);\r\n if (this.activeFeature) {\r\n // const withInches = BACKSPLASH_TYPES.filter(bType => bType.includes(\"in\"));\r\n // const filterByInchSize = withInches.find(bType => this.activeFeature.partName.includes(bType));\r\n featuresToDisplay = featuresToDisplay.filter(feature => {\r\n if (Array.isArray(this.activeFeature.metaData[\"BacksplashType\"]) && Array.isArray(feature.metaData[\"BacksplashType\"])) {\r\n return feature.metaData[\"BacksplashType\"].includes(this.activeFeature.metaData[\"BacksplashType\"][0])\r\n }\r\n return false\r\n // if (!feature.partName) {\r\n // return false\r\n // }\r\n // return filterByInchSize\r\n // ? feature.partName.includes(filterByInchSize)\r\n // : withInches.every(withInchesType => !feature.partName.includes(withInchesType))\r\n }); // filter by 4in, 6in, Full\r\n\r\n if (this.featureIsFullWall(this.activeFeature)) { // full backsplashes should be filtered by CabinetLayout metaData\r\n const cabinetParent = this.getParent().layout.parts[Cabinet.id];\r\n const cabinetLayoutMetaData = cabinetParent && cabinetParent.topCabinet && cabinetParent.topCabinet.activeFeature\r\n && cabinetParent.topCabinet.activeFeature.metaData && cabinetParent.topCabinet.activeFeature.metaData[\"CabinetLayout\"];\r\n if (cabinetLayoutMetaData) {\r\n featuresToDisplay = featuresToDisplay.filter(feature => feature.metaData && feature.metaData[\"CabinetLayout\"]\r\n && feature.metaData[\"CabinetLayout\"].includes(cabinetLayoutMetaData[0]))\r\n }\r\n }\r\n }\r\n\r\n return uniqBy(this.getUniqueFeatures(featuresToDisplay), (feature) => feature.dbFeature.id)\r\n .map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n getUniqueFeatures(featuresToDisplay) { // remove bathroom backsplashes (with the same name and not in visualizer)\r\n return featuresToDisplay.filter(feature => {\r\n const featureSplittedName = feature.getSplittedFeatureName();\r\n return !(feature.notAvailableInVisualizer && featuresToDisplay.some(countertop => {\r\n return countertop.getSplittedFeatureName() === featureSplittedName\r\n }));\r\n })\r\n }\r\n\r\n getFeatureByBacksplashType(neededType, featureName = \"\") {\r\n // const withInches = BACKSPLASH_TYPES.filter(bType => bType.includes(\"in\"));\r\n const matchingFeatures = this.features.filter(feature => {\r\n if (Array.isArray(feature.metaData[\"BacksplashType\"]) && feature.metaData[\"BacksplashType\"].includes(neededType)) {\r\n return true\r\n }\r\n // return feature.partName && (withInches.includes(neededType)\r\n // ? feature.partName.includes(\" \"+neededType)\r\n // : withInches.every(withInchesType => !feature.partName.includes(withInchesType)))\r\n });\r\n\r\n let currentPartName = featureName;\r\n if (!currentPartName && this.activeFeature) {\r\n // currentPartName = this.activeFeature.removeLayoutFromPartName(this.activeFeature.partName); // remove layout name\r\n // withInches.forEach(bType => currentPartName = currentPartName.split(\" \"+bType).join(\"\")); // 2) remove 6in or 4in\r\n // currentPartName = this.activeFeature.removeCabinetLayoutFromPartName(currentPartName);\r\n currentPartName = this.activeFeature.getCountertopGroupsSplittedFeatureName();\r\n }\r\n\r\n const matchByName = matchingFeatures.filter(feature => {\r\n // let featurePartName = feature.removeLayoutFromPartName(feature.partName); // remove layout name\r\n // withInches.forEach(bType => featurePartName = featurePartName.split(\" \"+bType).join(\"\")); // 2) remove 6in or 4in\r\n // featurePartName = feature.removeCabinetLayoutFromPartName(featurePartName);\r\n return feature.getCountertopGroupsSplittedFeatureName() === currentPartName\r\n });\r\n if (matchByName.length > 1) {\r\n const cabinetLayoutMetaData = this.getTopCabinetCabinetLayoutMetadata();\r\n const sameCabinetType = matchByName.find(feature => {\r\n if (this.featureIsFullWall(feature)) {\r\n return feature.matchesMetaForArrayOfConditions([\r\n {\r\n propName: 'CabinetLayout',\r\n propValue: cabinetLayoutMetaData\r\n }\r\n ])\r\n }\r\n });\r\n return sameCabinetType || matchByName[0];\r\n }\r\n return matchByName[0] || matchingFeatures[0];\r\n }\r\n\r\n featureIsFullWall = (feature) => {\r\n // const withInches = BACKSPLASH_TYPES.filter(bType => bType.includes(\"in\"));\r\n // return !withInches.some(bType => feature.partName.includes(bType))\r\n // || (Array.isArray(feature.metaData[\"BacksplashType\"]) && feature.metaData[\"BacksplashType\"][0] === \"18in\");\r\n return Array.isArray(feature.metaData[\"BacksplashType\"]) && feature.metaData[\"BacksplashType\"][0] === \"18in\"\r\n }\r\n\r\n getCurrentActiveFeatureType() {\r\n if (this.activeFeature && Array.isArray(this.activeFeature.metaData[\"BacksplashType\"])) {\r\n return this.activeFeature.metaData[\"BacksplashType\"][0]\r\n }\r\n return \"18in\"\r\n // const withInches = BACKSPLASH_TYPES.filter(bType => bType.includes(\"in\"));\r\n // return this.activeFeature && (withInches.find(bType => {\r\n // return this.activeFeature.partName.includes(bType)\r\n // }) || BACKSPLASH_TYPES[2])\r\n }\r\n\r\n setLayers(layout) {\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault(layout);\r\n return super.setLayers(layout);\r\n }\r\n\r\n setDefault() {\r\n const filteredFeatures = this.getArrayOfConditions\r\n ? this.features.filter(f => f.matchesMetaForArrayOfConditions(this.getArrayOfConditions()))\r\n : this.features;\r\n const matchingFeatureExist = this.tryToSetTheSameFeature(filteredFeatures, null);\r\n if (!matchingFeatureExist && !window.requestInProcess) {\r\n this.activeFeature = filteredFeatures[0];\r\n }\r\n if (this.setActiveFeatureParts) {\r\n this.activeFeatureParts = this.setActiveFeatureParts();\r\n }\r\n }\r\n\r\n tryToSetTheSameFeature(filteredFeatures = [], partName = \"\") {\r\n if (this.activeFeature && this.activeFeature.partName) {\r\n this.activeFeature = this.findFeatureByPartName(\r\n partName || this.activeFeature.getCountertopGroupsSplittedFeatureName(),\r\n !partName,\r\n filteredFeatures\r\n );\r\n if (this.activeFeature) {\r\n return true\r\n }\r\n }\r\n return false\r\n }\r\n\r\n findFeatureByPartName(splittedName, alReadySplitted = true) {\r\n if (!alReadySplitted) {\r\n splittedName = this.removeLayoutFromPartName(splittedName);\r\n splittedName = this.removeCabinetLayoutFromPartName(splittedName);\r\n }\r\n const navFeature = this.navigationSubItems().find((feature) => {\r\n if (feature.part && feature.part.partName) {\r\n let currentFeatureSplittedName = feature.part.getCountertopGroupsSplittedFeatureName();\r\n return currentFeatureSplittedName === splittedName\r\n }\r\n });\r\n return navFeature && navFeature.part\r\n }\r\n\r\n setFeatureByName = async (passedName = \"\") => {\r\n window.requestInProcess = true;\r\n loaderEnable();\r\n const splittedName = passedName || this.activeFeature.getCountertopGroupsSplittedFeatureName();\r\n await Navigation.searchFeaturesByName(this, splittedName);\r\n const neededFeature = this.findFeatureByPartName(splittedName, true);\r\n if (neededFeature) {\r\n this.activeFeature = neededFeature;\r\n }\r\n window.requestInProcess = false;\r\n loaderDisable();\r\n // $(window).trigger(ActionTypes.CHANGE_LAYOUT); // update canvas\r\n return true\r\n };\r\n\r\n getTopCabinetCabinetLayoutMetadata() {\r\n const cabinetParent = this.getParent().layout.parts[Cabinet.id];\r\n return cabinetParent && cabinetParent.topCabinet && cabinetParent.topCabinet.activeFeature\r\n && cabinetParent.topCabinet.activeFeature.metaData && cabinetParent.topCabinet.activeFeature.metaData[\"CabinetLayout\"];\r\n }\r\n\r\n getArrayOfConditions() {\r\n\r\n const conditions = [{\r\n propName: 'RoomLayout',\r\n propValue: this.getParent().layout.getCurrentLayoutAbbreviation()\r\n }];\r\n\r\n const cabinetLayoutMetaData = this.getTopCabinetCabinetLayoutMetadata();\r\n\r\n if (cabinetLayoutMetaData && this.activeFeature) {\r\n if (this.featureIsFullWall(this.activeFeature)) {\r\n conditions.push({\r\n propName: 'CabinetLayout',\r\n propValue: cabinetLayoutMetaData\r\n });\r\n }\r\n }\r\n return conditions;\r\n }\r\n\r\n removeBacksplashTypeFromPartName(partName) {\r\n BACKSPLASH_TYPES.forEach(abbr => {\r\n partName = partName.replace(\" \"+abbr, \"\")\r\n });\r\n return partName\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes) {\r\n const zIndex = zIndexes.Walls.Backsplash;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n }\r\n\r\n canUseNavigationFilterSteps() {\r\n return true\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\nimport {bottomCabinetModuleSystem} from \"./cabinetModuleSystem\";\r\n\r\nexport default class BottomCabinet extends IntermediatePart {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'bottom_cabinet';\r\n this.partName = 'Bottom Cabinet';\r\n this.layerPriority = 4;\r\n this.translateId = \"visualizer.kitchen.cabinet.bottom_cabinet\";\r\n if (isChild) {\r\n this.moduleSystem = bottomCabinetModuleSystem;\r\n this.defaultInlayType = \"Wood\";\r\n this.inlayTypes = []; // array of objects, for ex. {name: \"Cascade\", moduleParts: [\"3_2\", \"7_56\"]}\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n const parts = dbFeature.metaData && dbFeature.metaData[\"Parts\"];\r\n const module = dbFeature.metaData && dbFeature.metaData[\"Module\"];\r\n if (module && module[0] !== \"0\") {\r\n return super.load_(dbFeature, new BottomCabinet(false, null),true, 'moduleParts');\r\n } else if (parts) {\r\n dbFeature.displayName = dbFeature.displayName.replace(/M_0(.*?) /, \"M \").replace(/ Part1/, \"\");\r\n const partNumber = +dbFeature.metaData[\"Part\"][0];\r\n return super.load_(dbFeature, new BottomCabinet(false, partNumber),\r\n true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n return super.load_(dbFeature, new BottomCabinet());\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n let featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n featuresToDisplay = featuresToDisplay.filter((feature) => {\r\n if (feature.metaData[\"Module\"]) {\r\n return (feature.metaData[\"Module\"][0] === \"0\" && feature.metaData[\"Part\"][0] === \"1\")\r\n && feature.metaData[\"Appliance\"] && feature.metaData[\"Appliance\"].includes(\"Range\")\r\n }\r\n return true\r\n });\r\n\r\n return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n disabledClick() {\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n }\r\n\r\n handleClick(ignoreLocked, clickFrom = \"\") {\r\n const parent = this.getParent();\r\n if (parent.getParent && parent.getParent()) {\r\n super.handleClick(ignoreLocked, clickFrom);\r\n parent.activeFeatureParts = parent.setActiveFeatureParts();\r\n } else {\r\n parent.bottomCabinet.activeFeature = this;\r\n }\r\n this.featureClicked();\r\n }\r\n\r\n availableFeatures(cabinetFeatures) {\r\n return cabinetFeatures.filter(cabinetFeature => cabinetFeature.partNumber === 1)\r\n }\r\n\r\n getArrayOfConditions() {\r\n return [{\r\n propName: 'RoomLayout',\r\n propValue: this.getParent().layout.getCurrentLayoutAbbreviation()\r\n }];\r\n }\r\n\r\n setLayers(layout) {\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions()))) {\r\n this.checkIfFeaturePartIsMatching();\r\n super.setLayers(layout);\r\n } else {\r\n this.setDefault();\r\n super.setLayers(layout);\r\n }\r\n }\r\n\r\n getActiveFeatureConditions(fromFeature = this.activeFeature) {\r\n const arrayOfConditions = this.getArrayOfConditions();\r\n const applianceType = fromFeature.metaData[\"Appliance\"] ? fromFeature.metaData[\"Appliance\"][0] : null;\r\n const cabinetLayout = fromFeature.metaData[\"CabinetLayout\"] ? fromFeature.metaData[\"CabinetLayout\"][0] : null;\r\n const doorSet = fromFeature.metaData[\"DoorSet\"] ? fromFeature.metaData[\"DoorSet\"][0] : null;\r\n if (applianceType) {\r\n arrayOfConditions.push({\r\n propName: 'Appliance',\r\n propValue: applianceType\r\n })\r\n }\r\n if (cabinetLayout) {\r\n arrayOfConditions.push({\r\n propName: 'CabinetLayout',\r\n propValue: cabinetLayout\r\n })\r\n }\r\n if (doorSet) {\r\n arrayOfConditions.push({\r\n propName: 'DoorSet',\r\n propValue: doorSet\r\n })\r\n }\r\n return arrayOfConditions\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes) {\r\n const zIndex = zIndexes.Cabinet.BottomCabinet;\r\n const zIndex2 = zIndexes.Cabinet.BottomCabinet2;\r\n const zIndex3 = zIndexes.Cabinet.Peninsula;\r\n const zIndexBox = zIndexes.Cabinet.BottomCabinetModuleBox;\r\n // const zIndexBox2 = zIndexes.Cabinet.BottomCabinetModuleBox2;\r\n if (this.activeFeature) {\r\n if (this.activeFeature.metaData[\"Module\"] && this.activeFeature.metaData[\"Module\"][0] === \"0\") {\r\n this.activeFeature.layer.zIndex = zIndexBox;\r\n } else {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n if (this.activeFeatureParts && this.activeFeatureParts.length) {\r\n this.activeFeatureParts.forEach((activeFeaturePart, activeFeaturePartIndex) => {\r\n if (activeFeaturePart && activeFeaturePart.layer) {\r\n if (activeFeaturePart.metaData[\"Module\"] && !activeFeaturePart.metaData[\"Part\"]) {\r\n const module = activeFeaturePart.metaData[\"Module\"][0];\r\n const modulePart = activeFeaturePart.metaData[\"ModulePart\"][0];\r\n activeFeaturePart.layer.zIndex = zIndexes.Cabinet.BottomCabinetModules[module+\"_\"+modulePart];\r\n } else {\r\n activeFeaturePart.layer.zIndex = activeFeaturePartIndex === 0 ? zIndex2 : zIndex3;\r\n // if (activeFeaturePart.partName.includes(\"Part2\")) {\r\n // if (this.activeFeature.metaData[\"Module\"] && this.activeFeature.metaData[\"Module\"][0] === \"0\") {\r\n // activeFeaturePart.layer.zIndex = zIndexBox2;\r\n // } else {\r\n // activeFeaturePart.layer.zIndex = zIndex2;\r\n // }\r\n // } else if (activeFeaturePart.partName.includes(\"Part3\")) {\r\n // activeFeaturePart.layer.zIndex = zIndex3;\r\n // }\r\n }\r\n }\r\n });\r\n // go again & try to find the same zIndex, cause we might have 3_3 - 2 times...\r\n // this.activeFeatureParts\r\n // .filter(activeFeaturePart => activeFeaturePart && activeFeaturePart.layer)\r\n // .forEach((activeFeaturePart) => {\r\n // const hasTheSameZIndex = this.activeFeatureParts.some(testFeaturePart => {\r\n // return (testFeaturePart.layer.zIndex === activeFeaturePart.layer.zIndex)\r\n // && (testFeaturePart.partName !== activeFeaturePart.partName)\r\n // });\r\n // if (hasTheSameZIndex) {\r\n // activeFeaturePart.layer.zIndex++;\r\n // }\r\n // })\r\n }\r\n }\r\n }\r\n\r\n setActiveFeatureParts(fromFeature = this.activeFeature, activeFeatureConditions = []) {\r\n let activeFeatureParts = this.getActiveFeaturePartsAccordingToActiveFeature(fromFeature, activeFeatureConditions);\r\n if (fromFeature && fromFeature.metaData[\"Module\"]) {\r\n const featureName = fromFeature.getModuleFeatureName();\r\n const availableFeatures = this.moduleParts.filter((currentFeature) => {\r\n // 1) filter by module names, e.g. \"Hudson Linen White\"\r\n return featureName === currentFeature.getModuleFeatureName();\r\n });\r\n for (let i = 1; i <= this.moduleSystem.length; i++ ) {\r\n const currentModuleSystemNumber = i - 1;\r\n for (let k = 0; k <= this.moduleSystem[currentModuleSystemNumber].length - 1; k++ ) {\r\n const modulePart = this.moduleSystem[currentModuleSystemNumber][k];\r\n const modulePartSplitted = modulePart.split(\"_\");\r\n const moduleMatchingPart = availableFeatures.find((feature) => {\r\n return feature.metaData[\"ModulePartWidth\"] && feature.metaData[\"ModulePartHeight\"]\r\n && +feature.metaData[\"Module\"][0] === i\r\n && feature.metaData[\"ModulePartWidth\"][0] === modulePartSplitted[0]\r\n && feature.metaData[\"ModulePartHeight\"][0] === modulePartSplitted[1]\r\n && feature.metaData[\"ModulePart\"][0] === modulePartSplitted[2]\r\n });\r\n if (moduleMatchingPart) {\r\n activeFeatureParts.push(moduleMatchingPart);\r\n // } else { // this is for debugging only - look for features which are not exist\r\n // console.log(\"this.moduleSystem[i]\", i);\r\n // console.log(\"modulePartIndex\", k);\r\n }\r\n }\r\n }\r\n activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n }\r\n return activeFeatureParts\r\n }\r\n\r\n canUseNavigationFilter() {\r\n return this.activeFeature && this.activeFeature.metaData[\"Module\"]\r\n && this.activeFeature.metaData[\"Module\"][0] === \"0\";\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\nimport {topCabinetModuleSystem} from \"./cabinetModuleSystem\";\r\nimport store from \"../../../../../store\";\r\n\r\nexport default class TopCabinet extends IntermediatePart {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'top_cabinet';\r\n this.partName = 'Top Cabinet';\r\n this.translateId = \"visualizer.kitchen.cabinet.top_cabinet\";\r\n this.canBeDisabled = true;\r\n this.layerPriority = 1;\r\n if (isChild) {\r\n this.moduleSystem = topCabinetModuleSystem;\r\n this.defaultInlayType = \"Wood\"; // Cascade or Wood\r\n this.inlayTypes = [{\r\n name: \"Cascade\",\r\n moduleParts: [\"2_4\", \"2_5\", \"5_4\", \"5_5\",\"7_4\", \"7_5\",]\r\n }]; // array of objects, for ex. {name: \"Cascade\", moduleParts: [\"3_2\", \"7_56\"]}\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n const parts = dbFeature.metaData && dbFeature.metaData[\"Parts\"];\r\n const module = dbFeature.metaData && dbFeature.metaData[\"Module\"];\r\n if (module && module[0] !== \"0\") {\r\n return super.load_(dbFeature, new TopCabinet(false, null),true, 'moduleParts');\r\n } else if (parts) {\r\n dbFeature.displayName = dbFeature.displayName.replace(/M_0(.*?) /, \"M \").replace(/ Part1/, \"\");\r\n const partNumber = +dbFeature.metaData[\"Part\"][0];\r\n return super.load_(dbFeature, new TopCabinet(false, partNumber),\r\n true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n return super.load_(dbFeature, new TopCabinet());\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n let featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n const topCabinetApplianceType = this.getParent().getTopCabinetApplianceType();\r\n const allowedPorticos = [\r\n \"Portico White Chocolate S Hood Layout 2\",\r\n \"Portico White Chocolate L Hood Layout 2\",\r\n \"Portico White Chocolate SP Hood Layout 2\",\r\n \"Portico White Chocolate S Microwave Layout 2\",\r\n \"Portico White Chocolate L Microwave Layout 2\",\r\n \"Portico White Chocolate SP Microwave Layout 2\"\r\n ];\r\n featuresToDisplay = featuresToDisplay\r\n .filter((feature) => {\r\n return feature.metaData[\"Appliance\"] && feature.metaData[\"Appliance\"].includes(topCabinetApplianceType)\r\n })\r\n .filter((feature) => {\r\n if (feature.metaData[\"Module\"]) {\r\n return (feature.metaData[\"Module\"][0] === \"0\" && feature.metaData[\"Part\"][0] === \"1\")\r\n }\r\n return true\r\n })\r\n .filter((feature) => {\r\n if (feature.partName.includes(\"Portico White Chocolate\") && !allowedPorticos.includes(feature.partName)) {\r\n return false\r\n }\r\n return true\r\n });\r\n\r\n return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n changeLayout() {\r\n if (this.disabled) {\r\n this.disabled = false;\r\n this.disabledClick();\r\n }\r\n }\r\n\r\n disabledClick() {\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n const topHandle = this.getParent().topHandle;\r\n if (topHandle) {\r\n topHandle.disabled = this.disabled;\r\n }\r\n const crownMolding = this.getParent().crownMolding;\r\n if (crownMolding) {\r\n crownMolding.disabled = this.disabled;\r\n }\r\n }\r\n\r\n async handleClick(ignoreLocked, clickFrom = \"\") {\r\n const parent = this.getParent();\r\n const layout = parent.getParent().layout;\r\n const backsplash = layout.parts[\"Walls\"] && layout.parts[\"Walls\"].backsplash;\r\n const backsplashActiveFeature = backsplash ? backsplash.activeFeature : null;\r\n\r\n if (backsplashActiveFeature && backsplash.featureIsFullWall(backsplashActiveFeature) && this.metaData[\"CabinetLayout\"]) {\r\n const splittedName = backsplashActiveFeature.getCountertopGroupsSplittedFeatureName();\r\n const conditions = [{\r\n propName: 'CabinetLayout',\r\n propValue: this.metaData[\"CabinetLayout\"]\r\n }];\r\n if (!backsplashActiveFeature.matchesMetaForArrayOfConditions(conditions)) {\r\n const matchedByName = backsplash.findFeatureByPartName(splittedName);\r\n if (!matchedByName || !matchedByName.matchesMetaForArrayOfConditions(conditions)) {\r\n await backsplash.setFeatureByName(splittedName);\r\n }\r\n }\r\n }\r\n\r\n super.handleClick(ignoreLocked, clickFrom);\r\n parent.activeFeatureParts = parent.setActiveFeatureParts();\r\n\r\n this.featureClicked();\r\n }\r\n\r\n availableFeatures(cabinetFeatures) {\r\n return cabinetFeatures.filter(cabinetFeature => cabinetFeature.partNumber === 1)\r\n }\r\n\r\n getArrayOfConditions() {\r\n const cabinetParent = this.getParent();\r\n return [{\r\n propName: 'RoomLayout',\r\n propValue: cabinetParent.layout.getCurrentLayoutAbbreviation()\r\n // },{\r\n // propName: 'Appliance',\r\n // propValue: cabinetParent.getTopCabinetApplianceType()\r\n }];\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes) {\r\n const zIndex = zIndexes.Cabinet.TopCabinet;\r\n const zIndex2 = zIndexes.Cabinet.TopCabinet2;\r\n const zIndexBox = zIndexes.Cabinet.TopCabinetModuleBox;\r\n const zIndexBox2 = zIndexes.Cabinet.TopCabinetModuleBox2;\r\n if (this.activeFeature) {\r\n if (this.activeFeature.metaData[\"Module\"] && this.activeFeature.metaData[\"Module\"][0] === \"0\") {\r\n this.activeFeature.layer.zIndex = zIndexBox;\r\n } else {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n if (this.activeFeatureParts && this.activeFeatureParts.length) {\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n if (activeFeaturePart && activeFeaturePart.layer) {\r\n if (activeFeaturePart.metaData[\"Module\"] && !activeFeaturePart.metaData[\"Part\"]) {\r\n const module = activeFeaturePart.metaData[\"Module\"][0];\r\n const modulePart = activeFeaturePart.metaData[\"ModulePart\"][0];\r\n activeFeaturePart.layer.zIndex = zIndexes.Cabinet.TopCabinetModules[module+\"_\"+modulePart];\r\n } else if (this.activeFeature.metaData[\"Module\"] && this.activeFeature.metaData[\"Module\"][0] === \"0\") {\r\n activeFeaturePart.layer.zIndex = zIndexBox2;\r\n } else {\r\n activeFeaturePart.layer.zIndex = zIndex2;\r\n }\r\n }\r\n });\r\n // // go again & try to find the same zIndex, cause we might have 3_3 - 2 times...\r\n // this.activeFeatureParts\r\n // .filter(activeFeaturePart => activeFeaturePart && activeFeaturePart.layer)\r\n // .forEach((activeFeaturePart) => {\r\n // const hasTheSameZIndex = this.activeFeatureParts.some(testFeaturePart => {\r\n // return (testFeaturePart.layer.zIndex === activeFeaturePart.layer.zIndex)\r\n // && (testFeaturePart.partName !== activeFeaturePart.partName)\r\n // });\r\n // if (hasTheSameZIndex) {\r\n // activeFeaturePart.layer.zIndex++;\r\n // }\r\n // })\r\n }\r\n }\r\n }\r\n\r\n matchesInlayType(feature, module = \"1\", modulePart = \"1\") {\r\n\r\n const featureFilterValueIDs = feature.dbFeature.filterValueIDs;\r\n if (!featureFilterValueIDs) {\r\n return true\r\n }\r\n\r\n const filterGroups = store.getState().filterState.filterGroups;\r\n const filterGroup = filterGroups.find(group => group.name === \"Inlay Type\");\r\n if (!filterGroup) {\r\n return true\r\n }\r\n\r\n const modulePartJoined = module + \"_\" + modulePart;\r\n\r\n if (this.inlayTypes.length) {\r\n for (let i = 0; i <= this.inlayTypes.length - 1; i++) {\r\n const inlayTypeObject = this.inlayTypes[i];\r\n const fValue = filterGroup.values.find(val => {\r\n return (inlayTypeObject.moduleParts.includes(modulePartJoined))\r\n ? val.value === inlayTypeObject.name\r\n : val.value === this.defaultInlayType\r\n });\r\n // console.log(\"fValue\", fValue);\r\n // console.log(\"featureFilterValueIDs[filterGroup.id]\", featureFilterValueIDs[filterGroup.id]);\r\n return fValue && featureFilterValueIDs[filterGroup.id] && featureFilterValueIDs[filterGroup.id].includes(fValue.id)\r\n }\r\n } else {\r\n const fValue = filterGroup.values.find(val => val.value === this.defaultInlayType);\r\n return fValue && featureFilterValueIDs[filterGroup.id] && featureFilterValueIDs[filterGroup.id].includes(fValue.id)\r\n }\r\n }\r\n\r\n setLayers(layout) {\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions()))) {\r\n this.checkIfFeaturePartIsMatching();\r\n super.setLayers(layout);\r\n } else {\r\n this.setDefault();\r\n super.setLayers(layout);\r\n }\r\n }\r\n\r\n getActiveFeatureConditions(fromFeature = this.activeFeature) {\r\n const arrayOfConditions = this.getArrayOfConditions();\r\n const applianceType = fromFeature.metaData[\"Appliance\"] ? fromFeature.metaData[\"Appliance\"][0] : null;\r\n const cabinetLayout = fromFeature.metaData[\"CabinetLayout\"] ? fromFeature.metaData[\"CabinetLayout\"][0] : null;\r\n const doorSet = fromFeature.metaData[\"DoorSet\"] ? fromFeature.metaData[\"DoorSet\"][0] : null;\r\n if (applianceType) {\r\n arrayOfConditions.push({\r\n propName: 'Appliance',\r\n propValue: applianceType\r\n })\r\n }\r\n if (cabinetLayout) {\r\n arrayOfConditions.push({\r\n propName: 'CabinetLayout',\r\n propValue: cabinetLayout\r\n })\r\n }\r\n if (doorSet) {\r\n arrayOfConditions.push({\r\n propName: 'DoorSet',\r\n propValue: doorSet\r\n })\r\n }\r\n return arrayOfConditions\r\n }\r\n\r\n setActiveFeatureParts(fromFeature = this.activeFeature, activeFeatureConditions = []) {\r\n let activeFeatureParts = this.getActiveFeaturePartsAccordingToActiveFeature(fromFeature, activeFeatureConditions);\r\n if (fromFeature && fromFeature.metaData[\"Module\"]) {\r\n activeFeatureParts = [...activeFeatureParts, ...this.findFeaturesByModuleSystem(fromFeature)];\r\n if (fromFeature.metaData[\"Appliance\"] && fromFeature.metaData[\"Appliance\"].includes(\"Hood\")) {\r\n activeFeatureParts = activeFeatureParts.filter(fPart => fPart.metaData[\"Module\"]\r\n && !fPart.metaData[\"Module\"].includes(\"6\"))\r\n }\r\n activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n }\r\n return activeFeatureParts\r\n }\r\n\r\n findFeaturesByModuleSystem(fromFeature = this.activeFeature) {\r\n let activeFeatureParts = [];\r\n const featureName = fromFeature.getModuleFeatureName();\r\n const availableFeatures = this.moduleParts.filter((currentFeature) => {\r\n // 1) filter by module names, e.g. \"Hudson Linen White\"\r\n return featureName === currentFeature.getModuleFeatureName();\r\n });\r\n for (let i = 1; i <= this.moduleSystem.length; i++ ) {\r\n const currentModuleSystemNumber = i - 1;\r\n for (let k = 0; k <= this.moduleSystem[currentModuleSystemNumber].length - 1; k++ ) {\r\n const modulePart = this.moduleSystem[currentModuleSystemNumber][k];\r\n const modulePartSplitted = modulePart.split(\"_\");\r\n const moduleMatchingPart = availableFeatures.find((feature) => {\r\n return +feature.metaData[\"Module\"][0] === i\r\n && feature.metaData[\"ModulePartWidth\"][0] === modulePartSplitted[0]\r\n && feature.metaData[\"ModulePartHeight\"][0] === modulePartSplitted[1]\r\n && feature.metaData[\"ModulePart\"][0] === modulePartSplitted[2]\r\n && this.matchesInlayType(feature, feature.metaData[\"Module\"][0], modulePartSplitted[2])\r\n });\r\n if (moduleMatchingPart) {\r\n activeFeatureParts.push(moduleMatchingPart);\r\n // } else { // this is for debugging only - look for features which are not exist\r\n // console.log(\"this.moduleSystem[i]\", i);\r\n // console.log(\"modulePartIndex\", k);\r\n }\r\n }\r\n }\r\n return activeFeatureParts\r\n }\r\n\r\n getFilterGroupObjectByInlayType(inlayTypeName) {\r\n const filterGroups = store.getState().filterState.filterGroups;\r\n const filterGroup = filterGroups.find(group => group.name === \"Inlay Type\");\r\n return {\r\n filterGroup,\r\n fValue: filterGroup && filterGroup.values.find(val => val.value === inlayTypeName)\r\n };\r\n }\r\n\r\n findFeatureByModuleAndModulePart(modulePart = \"1_1\", inlayTypeName = \"Wood\") {\r\n const featureName = this.activeFeature.getModuleFeatureName();\r\n const availableFeatures = this.moduleParts.filter((currentFeature) => {\r\n // 1) filter by module names, e.g. \"Hudson Linen White\"\r\n return featureName === currentFeature.getModuleFeatureName();\r\n });\r\n const modulePartSplitted = modulePart.split(\"_\");\r\n const filterObject = this.getFilterGroupObjectByInlayType(inlayTypeName);\r\n\r\n for (let i = 1; i <= this.moduleSystem.length; i++ ) {\r\n const currentModuleSystemNumber = i - 1;\r\n for (let k = 0; k <= this.moduleSystem[currentModuleSystemNumber].length - 1; k++ ) {\r\n const moduleMatchingPart = availableFeatures.find((feature) => {\r\n\r\n if (!feature.dbFeature.filterValueIDs[filterObject.filterGroup.id]) {\r\n // console.log(\"No Inlay Type Filter\", feature);\r\n return false\r\n }\r\n\r\n return +feature.metaData[\"Module\"][0] === i\r\n && feature.metaData[\"ModulePartWidth\"][0] === modulePartSplitted[0]\r\n && feature.metaData[\"ModulePartHeight\"][0] === modulePartSplitted[1]\r\n && feature.metaData[\"ModulePart\"][0] === modulePartSplitted[2]\r\n && filterObject.filterGroup && filterObject.fValue &&\r\n feature.dbFeature.filterValueIDs[filterObject.filterGroup.id].includes(filterObject.fValue.id)\r\n });\r\n if (moduleMatchingPart) {\r\n return moduleMatchingPart\r\n }\r\n }\r\n }\r\n }\r\n\r\n canUseNavigationFilter() {\r\n return this.activeFeature && this.activeFeature.metaData[\"Module\"]\r\n && this.activeFeature.metaData[\"Module\"][0] === \"0\";\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\nimport Cabinet from \"../../parts/cabinet\";\r\nimport Appliance from \"../../parts/appliance\";\r\nimport store from \"../../../../../store\";\r\n\r\nexport default class CrownMolding extends IntermediatePart {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'crown_molding';\r\n this.partName = 'Crown Molding';\r\n this.canBeDisabled = true;\r\n this.layerPriority = 3;\r\n this.dbName = \"crown Molding\";\r\n this.translateId = \"visualizer.kitchen.cabinet.crown_molding\";\r\n }\r\n\r\n load(dbFeature) {\r\n if (!dbFeature.metaData[\"CabinetLayout\"]) {\r\n dbFeature.metaData[\"CabinetLayout\"] = [\"All\"]\r\n }\r\n if (!dbFeature.metaData[\"HoodType\"]) {\r\n dbFeature.metaData[\"HoodType\"] = [\"All\"]// it can be \"Wood\"\r\n }\r\n const parts = dbFeature.metaData && dbFeature.metaData[\"Parts\"];\r\n if (parts) {\r\n const partNumber = +dbFeature.metaData[\"Part\"][0];\r\n return super.load_(dbFeature, new CrownMolding(false, partNumber),\r\n true, partNumber === 1 ? 'features' : 'featuresParts');\r\n } else {\r\n return super.load_(dbFeature, new CrownMolding());\r\n }\r\n }\r\n\r\n disabledClick() {\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n const topCabinet = this.getParent().topCabinet;\r\n if (topCabinet && topCabinet.disabled && !this.disabled) {\r\n topCabinet.disabled = this.disabled;\r\n topCabinet.activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n const topHandle = this.getParent().topHandle;\r\n if (topHandle) {\r\n topHandle.disabled = this.disabled;\r\n }\r\n }\r\n }\r\n\r\n handleClick(ignoreLocked) {\r\n const parent = this.getParent();\r\n if (parent.getParent && parent.getParent()) {\r\n super.handleClick(ignoreLocked);\r\n parent.activeFeatureParts = parent.setActiveFeatureParts();\r\n } else {\r\n parent.crownMolding.activeFeature = this;\r\n }\r\n this.featureClicked();\r\n }\r\n\r\n availableFeatures(cabinetFeatures) {\r\n return cabinetFeatures.filter(cabinetFeature => cabinetFeature.partNumber === 1)\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n let featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n featuresToDisplay = this.getFilteredFeaturesByTopCabinetFilters(featuresToDisplay);\r\n return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n getFilteredFeaturesByTopCabinetFilters(filteredFeatures) {\r\n const cabinetParent = this.getParent().layout.parts[Cabinet.id];\r\n const topCabinet = cabinetParent.topCabinet;\r\n\r\n if (topCabinet && topCabinet.activeFeature && topCabinet.activeFeature.dbFeature && topCabinet.activeFeature.dbFeature.filterValueIDs) {\r\n const activeTopCabinetFilters = topCabinet.activeFeature.dbFeature.filterValueIDs;\r\n const filterGroups = store.getState().filterState.filterGroups;\r\n const woodTypeFilter = filterGroups.find(group => group.name === \"WoodType\");\r\n const stainColorFilter = filterGroups.find(group => group.name === \"StainColor\");\r\n\r\n return filteredFeatures.filter((currentFeature) => {\r\n return woodTypeFilter && stainColorFilter && this.featureIsMatchingFilters(currentFeature, activeTopCabinetFilters, [\r\n woodTypeFilter, stainColorFilter\r\n ])\r\n });\r\n }\r\n return filteredFeatures\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const topCabinet = this.getParent().topCabinet;\r\n if (topCabinet && (topCabinet.disabled || !topCabinet.featureGroupEnabled)) {\r\n super.hideLayers();\r\n return\r\n }\r\n\r\n if (this.activeFeature && this.matchesByMetaDataAndFilters()\r\n && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions()))) {\r\n this.checkIfFeaturePartIsMatching();\r\n super.setLayers(layout);\r\n } else {\r\n this.setDefault();\r\n super.setLayers(layout);\r\n }\r\n }\r\n\r\n matchesByMetaDataAndFilters() {\r\n const cabinetParent = this.getParent().layout.parts[Cabinet.id];\r\n const topCabinet = cabinetParent.topCabinet;\r\n\r\n if (topCabinet && topCabinet.activeFeature && topCabinet.activeFeature.dbFeature && topCabinet.activeFeature.dbFeature.filterValueIDs) {\r\n const activeTopCabinetFilters = topCabinet.activeFeature.dbFeature.filterValueIDs;\r\n const filterGroups = store.getState().filterState.filterGroups;\r\n const woodTypeFilter = filterGroups.find(group => group.name === \"WoodType\");\r\n const stainColorFilter = filterGroups.find(group => group.name === \"StainColor\");\r\n return woodTypeFilter && stainColorFilter && this.featureIsMatchingFilters(this.activeFeature, activeTopCabinetFilters, [\r\n woodTypeFilter, stainColorFilter\r\n ]) && this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n }\r\n return this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n }\r\n\r\n setDefault() {\r\n const filteredFeatures = this.features.filter(f => f.matchesMetaForArrayOfConditions(this.getArrayOfConditions()));\r\n const filteredFeaturesByTopCabinetFilters = this.getFilteredFeaturesByTopCabinetFilters(filteredFeatures);\r\n this.activeFeature = filteredFeaturesByTopCabinetFilters[0] || null;\r\n this.activeFeatureParts = this.setActiveFeatureParts();\r\n }\r\n\r\n getArrayOfConditions() {\r\n const cabinetParent = this.getParent();\r\n let cabinetLayout = [\"All\"];\r\n if (cabinetParent.topCabinet && cabinetParent.topCabinet.activeFeature) {\r\n if (cabinetParent.topCabinet.activeFeature.metaData[\"CabinetLayout\"]) {\r\n cabinetLayout = cabinetParent.topCabinet.activeFeature.metaData[\"CabinetLayout\"][0]\r\n }\r\n }\r\n return [{\r\n propName: 'CabinetLayout',\r\n propValue: cabinetLayout\r\n }, {\r\n propName: \"Appliance\",\r\n propValue: cabinetParent.getTopCabinetApplianceType()\r\n }, {\r\n propName: 'RoomLayout',\r\n propValue: cabinetParent.layout.getCurrentLayoutAbbreviation()\r\n }];\r\n }\r\n\r\n getActiveFeatureConditions() {\r\n let hoodType = [\"All\"];\r\n const cabinetParent = this.getParent();\r\n const isHood = cabinetParent.getTopCabinetApplianceType() === \"Hood\";\r\n const isMicrowave = cabinetParent.getTopCabinetApplianceType() === \"Microwave\";\r\n const applianceParent = cabinetParent.layout.parts[Appliance.id];\r\n if (isHood && applianceParent.hood && applianceParent.hood.activeFeature\r\n && applianceParent.hood.activeFeature.metaData && applianceParent.hood.activeFeature.metaData[\"HoodType\"]) {\r\n hoodType = applianceParent.hood.activeFeature.metaData[\"HoodType\"][0];\r\n }\r\n const conditions = this.getArrayOfConditions();\r\n conditions.push({\r\n propName: \"HoodType\",\r\n propValue: isMicrowave ? \"Wood\" : hoodType\r\n });\r\n return conditions\r\n }\r\n\r\n setActiveFeatureParts(fromFeature = this.activeFeature, activeFeatureConditions = []) {\r\n return this.getActiveFeaturePartsAccordingToActiveFeature(fromFeature, activeFeatureConditions);\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes) {\r\n const zIndex = zIndexes.Cabinet.CrownMolding;\r\n const zIndex2 = zIndexes.Cabinet.CrownMolding2;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n if (this.activeFeatureParts && this.activeFeatureParts.length) {\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n if(activeFeaturePart && activeFeaturePart.layer) activeFeaturePart.layer.zIndex = zIndex2;\r\n })\r\n }\r\n }\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class Fridge extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'fridge';\r\n this.partName = 'Fridge';\r\n this.translateId = \"visualizer.kitchen.appliance.fridge\";\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new Fridge());\r\n }\r\n\r\n setLayers(layout) {\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault(layout);\r\n return super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n return [{\r\n propName: 'RoomLayout',\r\n propValue: this.getParent().layout.getCurrentLayoutAbbreviation()\r\n }];\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes) {\r\n const zIndex = zIndexes.Appliances.Fridge;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class FridgeShadow extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'fridge_shadow';\r\n this.partName = 'Fridge Shadow';\r\n this.visible = false;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new FridgeShadow());\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const fridge = this.getParent().fridge;\r\n if (fridge && fridge.disabled) {\r\n super.hideLayers();\r\n return\r\n }\r\n\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault(layout);\r\n return super.setLayers(layout);\r\n }\r\n\r\n setDefault() {\r\n const filteredFeatures = this.features.filter(f => f.matchesMetaForArrayOfConditions(this.getArrayOfConditions()));\r\n this.activeFeature = filteredFeatures[0];\r\n }\r\n\r\n getArrayOfConditions() {\r\n return [{\r\n propName: 'RoomLayout',\r\n propValue: this.getParent().layout.getCurrentLayoutAbbreviation()\r\n }];\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Appliances.FridgeShadow;\r\n }\r\n }\r\n}","import uniqBy from \"lodash/uniqBy\";\r\n\r\nimport {IntermediatePart} from \"../../intermediatePart\";\r\nimport DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\nimport Cabinet from \"../../parts/cabinet\";\r\nimport store from \"../../../../../store\";\r\nimport {METADATA} from \"../../constants\";\r\nimport {getFeatureIsLocked} from \"../../../../../misc/helpers\";\r\n\r\nexport default class Hood extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'hood';\r\n this.partName = 'Hood';\r\n this.canBeDisabled = true;\r\n this.translateId = \"visualizer.kitchen.appliance.hood\";\r\n }\r\n\r\n load(dbFeature) {\r\n dbFeature.metaData.Appliance = [\"Hood\"];\r\n if (!dbFeature.metaData[\"CabinetLayout\"]) {\r\n dbFeature.metaData[\"CabinetLayout\"] = [METADATA.ALL]\r\n }\r\n if (!dbFeature.metaData[\"Cabinet\"]) {\r\n dbFeature.metaData[\"Cabinet\"] = [METADATA.ALL]\r\n }\r\n return super.load_(dbFeature, new Hood());\r\n }\r\n\r\n handleClick(ignoreLocked) {\r\n super.handleClick(ignoreLocked); // 1) set hood\r\n if (!this.notAvailableInVisualizer && !getFeatureIsLocked(this, ignoreLocked)) {\r\n const parent = this.getParent();\r\n const applianceParent = parent.getParent();\r\n const cabinetParent = applianceParent.layout.parts[Cabinet.id];\r\n if (cabinetParent && cabinetParent.topCabinet && cabinetParent.topCabinet.activeFeature\r\n && cabinetParent.getTopCabinetApplianceType() !== \"Hood\") {\r\n const topCabinetConditions = cabinetParent.topCabinet.getArrayOfConditions();\r\n topCabinetConditions.push({\r\n propName: \"Appliance\",\r\n propValue: \"Hood\"\r\n });\r\n const matchingCabinets = super.navigationSubItemsWithFilterMultipleConditions(\r\n topCabinetConditions,\r\n cabinetParent.topCabinet.features\r\n );\r\n if (matchingCabinets.length) {\r\n const currentName = cabinetParent.topCabinet.activeFeature.partName.split(\" Microwave\")[0];\r\n const matchingCabinet = matchingCabinets.find(cabinet => {\r\n return cabinet.partName.split(\" Hood\")[0] === currentName\r\n });\r\n (matchingCabinet || matchingCabinets[0]).handleClick(ignoreLocked);\r\n }\r\n }\r\n this.featureClicked();\r\n }\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n let featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(true), filteredAvailableFeatures);\r\n featuresToDisplay = [\r\n ...this.getFilteredFeaturesByTopCabinetFilters(featuresToDisplay),\r\n ...this.getFeaturesMatchingAllCabinets(featuresToDisplay)\r\n ];\r\n return uniqBy(featuresToDisplay, (feature) => feature.dbFeature.id)\r\n .map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n setLayers(layout) {\r\n const cabinetParent = this.getParent().layout.parts[Cabinet.id];\r\n if (cabinetParent && cabinetParent.getTopCabinetApplianceType() === \"Microwave\") {\r\n super.hideLayers();\r\n return\r\n }\r\n\r\n if (this.activeFeature && ((\r\n this.matchesByMetaDataAndFilters() || this.getFeaturesMatchingAllCabinets()\r\n .some(feature => feature.dbFeature.id === this.activeFeature.dbFeature.id)\r\n ) || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n super.setLayers(layout);\r\n } else {\r\n this.setDefault();\r\n super.setLayers(layout);\r\n }\r\n }\r\n\r\n matchesByMetaDataAndFilters() {\r\n const cabinetParent = this.getParent().layout.parts[Cabinet.id];\r\n const topCabinet = cabinetParent.topCabinet;\r\n\r\n if (topCabinet && topCabinet.activeFeature && topCabinet.activeFeature.dbFeature && topCabinet.activeFeature.dbFeature.filterValueIDs) {\r\n const activeTopCabinetFilters = topCabinet.activeFeature.dbFeature.filterValueIDs;\r\n const filterGroups = store.getState().filterState.filterGroups;\r\n const woodTypeFilter = filterGroups.find(group => group.name === \"WoodType\");\r\n const stainColorFilter = filterGroups.find(group => group.name === \"StainColor\");\r\n return woodTypeFilter && stainColorFilter && this.featureIsMatchingFilters(this.activeFeature, activeTopCabinetFilters, [\r\n woodTypeFilter, stainColorFilter\r\n ])\r\n }\r\n return this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n }\r\n\r\n setDefault() {\r\n const filteredFeatures = this.features.filter(f => f.matchesMetaForArrayOfConditions(this.getArrayOfConditions()));\r\n const filteredFeaturesByTopCabinetFilters = this.getFilteredFeaturesByTopCabinetFilters(filteredFeatures);\r\n const featuresMatchingAllCabinets = this.getFeaturesMatchingAllCabinets(filteredFeatures);\r\n if (filteredFeaturesByTopCabinetFilters.length) {\r\n this.activeFeature = filteredFeaturesByTopCabinetFilters[0]\r\n } else {\r\n // const matchingFeatureExist = super.tryToSetTheSameFeature(filteredFeatures, null);\r\n // if (!matchingFeatureExist) {\r\n this.activeFeature = featuresMatchingAllCabinets[0] || filteredFeatures[0] || null;\r\n // }\r\n }\r\n }\r\n\r\n getFeaturesMatchingAllCabinets(filteredFeatures = this.features) {\r\n return filteredFeatures.filter((feature) => {\r\n return feature.dbFeature.metaData[\"CabinetLayout\"].includes(METADATA.ALL)\r\n || feature.dbFeature.metaData[\"Cabinet\"].includes(METADATA.ALL)\r\n });\r\n }\r\n\r\n getFilteredFeaturesByTopCabinetFilters(filteredFeatures) {\r\n const cabinetParent = this.getParent().layout.parts[Cabinet.id];\r\n const topCabinet = cabinetParent.topCabinet;\r\n\r\n if (topCabinet && topCabinet.activeFeature && topCabinet.activeFeature.dbFeature && topCabinet.activeFeature.dbFeature.filterValueIDs) {\r\n const activeTopCabinetFilters = topCabinet.activeFeature.dbFeature.filterValueIDs;\r\n const filterGroups = store.getState().filterState.filterGroups;\r\n const woodTypeFilter = filterGroups.find(group => group.name === \"WoodType\");\r\n const stainColorFilter = filterGroups.find(group => group.name === \"StainColor\");\r\n\r\n return filteredFeatures.filter((currentFeature) => {\r\n return woodTypeFilter && stainColorFilter && this.featureIsMatchingFilters(currentFeature, activeTopCabinetFilters, [\r\n woodTypeFilter, stainColorFilter\r\n ])\r\n });\r\n }\r\n return filteredFeatures\r\n }\r\n\r\n getArrayOfConditions(ignoreConditions) {\r\n const cabinetParent = this.getParent().layout.parts[Cabinet.id];\r\n const conditions = [{\r\n propName: \"Cabinet\",\r\n propValue: cabinetParent.getTopCabinetType()\r\n },{\r\n propName: 'CabinetLayout',\r\n propValue: cabinetParent.getTopCabinetShadowLayout()\r\n }];\r\n if (!ignoreConditions) {\r\n conditions.push({\r\n propName: \"Appliance\",\r\n propValue: cabinetParent.getTopCabinetApplianceType()\r\n })\r\n }\r\n return conditions;\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes) {\r\n const zIndex = zIndexes.Appliances.Hood;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class Dishwasher extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'dishwasher';\r\n this.partName = 'Dishwasher';\r\n this.translateId = \"visualizer.kitchen.appliance.dishwasher\";\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new Dishwasher());\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes) {\r\n const zIndex = zIndexes.Appliances.Dishwasher;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\nimport Cabinet from \"../../parts/cabinet\";\r\n\r\nexport default class Microwave extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'microwave';\r\n this.partName = 'Microwave';\r\n this.translateId = \"visualizer.kitchen.appliance.microwave\";\r\n }\r\n\r\n load(dbFeature) {\r\n dbFeature.metaData.Appliance = [\"Microwave\"];\r\n return super.load_(dbFeature, new Microwave());\r\n }\r\n\r\n handleClick(ignoreLocked) {\r\n const parent = this.getParent();\r\n super.handleClick(ignoreLocked); // 1) set microwave\r\n\r\n const applianceParent = parent.getParent();\r\n const cabinetParent = applianceParent.layout.parts[Cabinet.id];\r\n if (cabinetParent && cabinetParent.topCabinet && cabinetParent.topCabinet.activeFeature\r\n && cabinetParent.getTopCabinetApplianceType() !== \"Microwave\") {\r\n const topCabinetConditions = cabinetParent.topCabinet.getArrayOfConditions();\r\n topCabinetConditions.push({\r\n propName: \"Appliance\",\r\n propValue: \"Microwave\"\r\n });\r\n const matchingCabinets = super.navigationSubItemsWithFilterMultipleConditions(\r\n topCabinetConditions,\r\n cabinetParent.topCabinet.features\r\n );\r\n if (matchingCabinets.length) {\r\n const currentName = cabinetParent.topCabinet.activeFeature.getSplittedFeatureName();\r\n const matchingCabinet = matchingCabinets.find(cabinet => {\r\n return cabinet.getSplittedFeatureName() === currentName\r\n });\r\n (matchingCabinet || matchingCabinets[0]).handleClick(ignoreLocked);\r\n }\r\n }\r\n\r\n if (cabinetParent && cabinetParent.topCabinet && cabinetParent.topCabinet.disabled && !this.disabled) {\r\n cabinetParent.topCabinet.disabled = this.disabled;\r\n cabinetParent.topCabinet.activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n const topHandle = cabinetParent.topHandle;\r\n if (topHandle) {\r\n topHandle.disabled = this.disabled;\r\n }\r\n }\r\n\r\n this.featureClicked();\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(true), filteredAvailableFeatures);\r\n return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const cabinetParent = this.getParent().layout.parts[Cabinet.id];\r\n const topCabinet = cabinetParent && cabinetParent.topCabinet;\r\n if (topCabinet && (topCabinet.disabled || !topCabinet.featureGroupEnabled)) {\r\n super.hideLayers();\r\n return\r\n }\r\n\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n super.setLayers(layout);\r\n } else {\r\n this.setDefault();\r\n super.setLayers(layout);\r\n }\r\n }\r\n\r\n getArrayOfConditions(ignoreAppliance) {\r\n return ignoreAppliance\r\n ? []\r\n : [{\r\n propName: \"Appliance\",\r\n propValue: this.getParent().layout.parts[\"Cabinet\"].getTopCabinetApplianceType()\r\n }];\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes) {\r\n const zIndex = zIndexes.Appliances.Microwave;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {PLACEMENTS} from \"../../constants\";\r\nimport Cabinet from \"../../parts/cabinet\";\r\n\r\nexport default class Range extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'range';\r\n this.partName = 'Range';\r\n this.translateId = \"visualizer.kitchen.appliance.range\";\r\n }\r\n\r\n load(dbFeature) {\r\n if (dbFeature.metaData && dbFeature.metaData[\"Placement\"]\r\n && !dbFeature.metaData[\"Placement\"].includes(PLACEMENTS.Countertop)) {\r\n return false\r\n }\r\n return super.load_(dbFeature, new Range());\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const cabinetParent = this.getParent().layout.parts[Cabinet.id];\r\n if (cabinetParent && cabinetParent.bottomCabinet && cabinetParent.bottomCabinet.activeFeature\r\n && cabinetParent.bottomCabinet.activeFeature.metaData[\"Appliance\"]\r\n && cabinetParent.bottomCabinet.activeFeature.metaData[\"Appliance\"].includes(\"None\")) {\r\n super.hideLayers();\r\n return\r\n }\r\n\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n super.setLayers(layout);\r\n } else {\r\n this.setDefault();\r\n super.setLayers(layout);\r\n }\r\n }\r\n\r\n getArrayOfConditions() {\r\n return []\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes) {\r\n const zIndex = zIndexes.Appliances.Range;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\nimport Appliance from \"../../parts/appliance\";\r\n\r\nexport default class TopHandle extends IntermediatePart {\r\n\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'top_handle';\r\n this.partName = 'Top Handle';\r\n this.canBeDisabled = true;\r\n this.layerPriority = 2;\r\n this.translateId = \"visualizer.kitchen.cabinet.top_handle\";\r\n }\r\n\r\n load(dbFeature) {\r\n if (!dbFeature.metaData[\"HoodType\"]) {\r\n dbFeature.metaData[\"HoodType\"] = [\"All\"]// it can be \"Wood\"\r\n }\r\n if (!dbFeature.metaData[\"CabinetLayout\"]) {\r\n dbFeature.metaData[\"CabinetLayout\"] = [\"All\"]\r\n }\r\n if (!dbFeature.metaData[\"DoorSet\"]) {\r\n dbFeature.metaData[\"DoorSet\"] = [\"All\"]\r\n }\r\n const parts = dbFeature.metaData && dbFeature.metaData[\"Parts\"];\r\n if (parts) {\r\n const partNumber = +dbFeature.metaData[\"Part\"][0];\r\n return super.load_(dbFeature, new TopHandle(false, partNumber),\r\n true, partNumber === 1 ? 'features' : 'featuresParts');\r\n } else {\r\n return super.load_(dbFeature, new TopHandle());\r\n }\r\n }\r\n\r\n disabledClick() {\r\n const topCabinet = this.getParent().topCabinet;\r\n if (topCabinet && topCabinet.disabled && !this.disabled) {\r\n topCabinet.disabled = this.disabled;\r\n topCabinet.activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n const crownMolding = this.getParent().crownMolding;\r\n if (crownMolding) {\r\n crownMolding.disabled = this.disabled;\r\n }\r\n }\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n let featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(true), filteredAvailableFeatures);\r\n const topCabinet = this.getParent().topCabinet;\r\n if (topCabinet && topCabinet.activeFeature && topCabinet.activeFeature.partName.includes(\"Portico White Chocolate\")) {\r\n return []\r\n }\r\n return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const topCabinet = this.getParent().topCabinet;\r\n if (topCabinet && (topCabinet.disabled || !topCabinet.featureGroupEnabled)\r\n || (topCabinet && topCabinet.activeFeature && topCabinet.activeFeature.partName.includes(\"Portico White Chocolate\"))) {\r\n super.hideLayers();\r\n return\r\n }\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions()))) {\r\n this.checkIfFeaturePartIsMatching();\r\n super.setLayers(layout);\r\n } else {\r\n this.setDefault();\r\n super.setLayers(layout);\r\n }\r\n }\r\n\r\n getArrayOfConditions() {\r\n\r\n const cabinetParent = this.getParent();\r\n let cabinetLayout = [\"All\"];\r\n let doorSet = [\"All\"];\r\n if (cabinetParent.topCabinet && cabinetParent.topCabinet.activeFeature) {\r\n if (cabinetParent.topCabinet.activeFeature.metaData[\"CabinetLayout\"]) {\r\n cabinetLayout = cabinetParent.topCabinet.activeFeature.metaData[\"CabinetLayout\"][0]\r\n }\r\n if (cabinetParent.topCabinet.activeFeature.metaData[\"DoorSet\"]) {\r\n doorSet = cabinetParent.topCabinet.activeFeature.metaData[\"DoorSet\"][0];\r\n }\r\n }\r\n\r\n return [{\r\n propName: \"Appliance\",\r\n propValue: cabinetParent.getTopCabinetApplianceType()\r\n }, {\r\n propName: 'RoomLayout',\r\n propValue: cabinetParent.layout.getCurrentLayoutAbbreviation()\r\n },{\r\n propName: 'CabinetLayout',\r\n propValue: cabinetLayout\r\n },{\r\n propName: \"DoorSet\",\r\n propValue: doorSet\r\n }];\r\n }\r\n\r\n getActiveFeatureConditions() {\r\n let hoodType = [\"All\"];\r\n const cabinetParent = this.getParent();\r\n const isHood = cabinetParent.getTopCabinetApplianceType() === \"Hood\";\r\n const applianceParent = cabinetParent.layout.parts[Appliance.id];\r\n if (isHood && applianceParent.hood && applianceParent.hood.activeFeature\r\n && applianceParent.hood.activeFeature.metaData && applianceParent.hood.activeFeature.metaData[\"HoodType\"]) {\r\n hoodType = applianceParent.hood.activeFeature.metaData[\"HoodType\"][0];\r\n }\r\n const conditions = this.getArrayOfConditions();\r\n conditions.push({\r\n propName: \"HoodType\",\r\n propValue: hoodType\r\n });\r\n return conditions\r\n }\r\n\r\n setDefault() {\r\n const filteredFeatures = this.features.filter(f => f.matchesMetaForArrayOfConditions(this.getArrayOfConditions()));\r\n const matchingFeatureExist = this.tryToSetTheSameFeature(filteredFeatures, null);\r\n if (!matchingFeatureExist) {\r\n this.activeFeature = filteredFeatures[0];\r\n }\r\n this.activeFeatureParts = this.setActiveFeatureParts();\r\n }\r\n\r\n setActiveFeatureParts(fromFeature = this.activeFeature, activeFeatureConditions = []) {\r\n return this.getActiveFeaturePartsAccordingToActiveFeature(fromFeature, activeFeatureConditions);\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes) {\r\n const zIndex = zIndexes.Cabinet.TopHandle;\r\n const zIndex2 = zIndexes.Cabinet.TopHandle2;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (this.activeFeatureParts && this.activeFeatureParts.length) {\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n if (activeFeaturePart && activeFeaturePart.layer) {\r\n activeFeaturePart.layer.zIndex = zIndex2;\r\n }\r\n })\r\n }\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\n\r\nexport default class BottomHandle extends IntermediatePart {\r\n\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'bottom_handle';\r\n this.partName = 'Bottom Handle';\r\n this.translateId = \"visualizer.kitchen.cabinet.bottom_handle\";\r\n this.canBeDisabled = true;\r\n this.layerPriority = 5;\r\n }\r\n\r\n load(dbFeature) {\r\n if (!dbFeature.metaData[\"CabinetLayout\"]) {\r\n dbFeature.metaData[\"CabinetLayout\"] = [\"All\"]\r\n }\r\n if (!dbFeature.metaData[\"DoorSet\"]) {\r\n dbFeature.metaData[\"DoorSet\"] = [\"All\"]\r\n }\r\n if (!dbFeature.metaData[\"Appliance\"]) {\r\n dbFeature.metaData[\"Appliance\"] = [\"All\"]\r\n }\r\n const parts = dbFeature.metaData && dbFeature.metaData[\"Parts\"];\r\n if (parts) {\r\n const partNumber = +dbFeature.metaData[\"Part\"][0];\r\n return super.load_(dbFeature, new BottomHandle(false, partNumber),\r\n true, partNumber === 1 ? 'features' : 'featuresParts');\r\n } else {\r\n return super.load_(dbFeature, new BottomHandle());\r\n }\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(true), filteredAvailableFeatures);\r\n return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const bottomCabinet = this.getParent().bottomCabinet;\r\n if (bottomCabinet && (bottomCabinet.disabled || !bottomCabinet.featureGroupEnabled)) {\r\n super.hideLayers();\r\n return\r\n }\r\n\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions()))) {\r\n this.checkIfFeaturePartIsMatching();\r\n super.setLayers(layout);\r\n } else {\r\n this.setDefault();\r\n super.setLayers(layout);\r\n }\r\n }\r\n\r\n getArrayOfConditions() {\r\n const cabinetParent = this.getParent();\r\n let cabinetLayout = [\"All\"];\r\n let doorSet = [\"All\"];\r\n if (cabinetParent.bottomCabinet && cabinetParent.bottomCabinet.activeFeature) {\r\n if (cabinetParent.bottomCabinet.activeFeature.metaData[\"CabinetLayout\"]) {\r\n cabinetLayout = cabinetParent.bottomCabinet.activeFeature.metaData[\"CabinetLayout\"][0]\r\n }\r\n if (cabinetParent.bottomCabinet.activeFeature.metaData[\"DoorSet\"]) {\r\n doorSet = cabinetParent.bottomCabinet.activeFeature.metaData[\"DoorSet\"][0];\r\n }\r\n }\r\n return [{\r\n propName: \"Appliance\",\r\n propValue: cabinetParent.getBottomCabinetApplianceType()\r\n }, {\r\n propName: 'RoomLayout',\r\n propValue: cabinetParent.layout.getCurrentLayoutAbbreviation()\r\n },{\r\n propName: 'CabinetLayout',\r\n propValue: cabinetLayout\r\n },{\r\n propName: \"DoorSet\",\r\n propValue: doorSet\r\n }];\r\n }\r\n\r\n setDefault() {\r\n const filteredFeatures = this.features.filter(f => f.matchesMetaForArrayOfConditions(this.getArrayOfConditions()));\r\n const matchingFeatureExist = this.tryToSetTheSameFeature(filteredFeatures, null);\r\n if (!matchingFeatureExist) {\r\n this.activeFeature = filteredFeatures[0];\r\n }\r\n this.activeFeatureParts = this.setActiveFeatureParts();\r\n }\r\n\r\n getActiveFeatureConditions() {\r\n return this.getArrayOfConditions()\r\n }\r\n\r\n setActiveFeatureParts(fromFeature = this.activeFeature, activeFeatureConditions = []) {\r\n return this.getActiveFeaturePartsAccordingToActiveFeature(fromFeature, activeFeatureConditions);\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes) {\r\n const zIndex = zIndexes.Cabinet.BottomHandle;\r\n const zIndex2 = zIndexes.Cabinet.BottomHandle2;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (this.activeFeatureParts && this.activeFeatureParts.length) {\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n if (activeFeaturePart && activeFeaturePart.layer) {\r\n activeFeaturePart.layer.zIndex = zIndex2;\r\n }\r\n })\r\n }\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class TopCabinetShadow extends IntermediatePart {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'top_cabinet_shadow';\r\n this.partName = 'Top Cabinet Shadow';\r\n this.visible = false;\r\n this.layerPriority = 6;\r\n }\r\n\r\n load(dbFeature) {\r\n const parts = dbFeature.metaData && dbFeature.metaData[\"Parts\"];\r\n if (parts) {\r\n const partNumber = +dbFeature.metaData[\"Part\"][0];\r\n return super.load_(dbFeature, new TopCabinetShadow(false, partNumber),\r\n true, partNumber === 1 ? 'features' : 'featuresParts');\r\n } else {\r\n return super.load_(dbFeature, new TopCabinetShadow());\r\n }\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const topCabinet = this.getParent().topCabinet;\r\n if (topCabinet && (topCabinet.disabled || !topCabinet.featureGroupEnabled)) {\r\n super.hideLayers();\r\n return\r\n }\r\n\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n this.activeFeatureParts = this.setActiveFeatureParts();\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault(layout);\r\n return super.setLayers(layout);\r\n }\r\n\r\n setActiveFeatureParts(fromFeature = this.activeFeature) {\r\n const activeFeatureParts = fromFeature && fromFeature.partNumber ? this.featuresParts.filter((feature) => {\r\n const name1 = fromFeature.partName.split(\" Part\")[0];\r\n // console.log(\"name1\", name1);\r\n const name2 = feature.partName.split(\"Part2 \").join(\"\");\r\n // console.log(\"name2\", name2);\r\n return name1 === name2\r\n }) : [];\r\n activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n return activeFeatureParts\r\n }\r\n\r\n getArrayOfConditions() {\r\n const cabinetParent = this.getParent();\r\n return [{\r\n propName: \"Appliance\",\r\n propValue: cabinetParent.getTopCabinetApplianceType()\r\n }, {\r\n propName: 'CabinetLayout',\r\n propValue: cabinetParent.getTopCabinetShadowLayout()\r\n }, {\r\n propName: 'RoomLayout',\r\n propValue: cabinetParent.layout.getCurrentLayoutAbbreviation()\r\n }, {\r\n propName: 'CrownMolding',\r\n propValue: cabinetParent && cabinetParent.crownMolding &&\r\n cabinetParent.crownMolding.activeFeature && !cabinetParent.crownMolding.disabled ? \"On\" : \"Off\"\r\n }];\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Cabinet.TopCabinetShadow;\r\n }\r\n if (this.activeFeatureParts && this.activeFeatureParts.length) {\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.layer.zIndex = zIndexes.Cabinet.TopCabinetShadowPart2\r\n })\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class BottomCabinetShadow extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'bottom_cabinet_shadow';\r\n this.partName = 'Bottom Cabinet Shadow';\r\n this.visible = false;\r\n this.layerPriority = 7;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new BottomCabinetShadow());\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const bottomCabinet = this.getParent().bottomCabinet;\r\n if (bottomCabinet && (bottomCabinet.disabled || !bottomCabinet.featureGroupEnabled)) {\r\n super.hideLayers();\r\n return\r\n }\r\n\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault(layout);\r\n return super.setLayers(layout);\r\n }\r\n\r\n setDefault() {\r\n const filteredFeatures = this.features.filter(f => f.matchesMetaForArrayOfConditions(this.getArrayOfConditions()));\r\n this.activeFeature = filteredFeatures[0];\r\n }\r\n\r\n getArrayOfConditions() {\r\n return [{\r\n propName: 'RoomLayout',\r\n propValue: this.getParent().layout.getCurrentLayoutAbbreviation()\r\n }];\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Cabinet.BottomCabinetShadow;\r\n }\r\n }\r\n}","import store from \"../../../../../store\";\r\nimport Cabinet from \"../../parts/cabinet\";\r\nimport {LayoutAbbreviations} from \"../../constants\";\r\nimport CountertopCommon from \"../countertopCommon\";\r\n\r\nexport default class Countertop extends CountertopCommon {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'countertop';\r\n this.partName = 'Countertop';\r\n this.translateId = \"visualizer.kitchen.countertop.countertop\";\r\n this.isStoneFeature = true;\r\n this.toggleSwitchedOffByUser = false; // is used for returning toggle back when feature is found\r\n if (isChild) {\r\n this.nextFeaturesPageToLoadArray = {};\r\n LayoutAbbreviations.forEach(layoutAbbreviation => {\r\n this.nextFeaturesPageToLoadArray[layoutAbbreviation] = {\r\n page: 0,\r\n allReceived: false,\r\n };\r\n });\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n const parts = dbFeature.metaData && dbFeature.metaData[\"Parts\"];\r\n if (parts) {\r\n const partNumber = +dbFeature.metaData[\"Part\"][0];\r\n if (partNumber === 3) {\r\n dbFeature.metaData[\"RoomLayout\"] = (dbFeature.metaData[\"RoomLayout\"] && dbFeature.metaData[\"RoomLayout\"].filter(roomLayout => roomLayout.includes(\"N\"))) || [];\r\n }\r\n return super.load_(dbFeature, new Countertop(false, partNumber),\r\n true, partNumber === 1 ? 'features' : 'featuresParts');\r\n } else {\r\n return super.load_(dbFeature, new Countertop());\r\n }\r\n }\r\n\r\n disabledClick() {\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n }\r\n\r\n handleClick(ignoreLocked, clickFrom = \"\") {\r\n const parent = this.getParent();\r\n if (parent.getParent && parent.getParent()) {\r\n super.handleClick(ignoreLocked, clickFrom);\r\n parent.activeFeatureParts = parent.setActiveFeatureParts();\r\n } else {\r\n parent.countertop.activeFeature = this;\r\n }\r\n this.featureClicked();\r\n }\r\n\r\n availableFeatures(cabinetFeatures) {\r\n return cabinetFeatures.filter(cabinetFeature => cabinetFeature.partNumber === 1)\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const cabinetParent = this.getParent().layout.parts[Cabinet.id];\r\n const bottomCabinet = cabinetParent && cabinetParent.bottomCabinet;\r\n if (bottomCabinet && (bottomCabinet.disabled || !bottomCabinet.featureGroupEnabled)) {\r\n super.hideLayers();\r\n return\r\n }\r\n\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n this.activeFeatureParts = this.setActiveFeatureParts();\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n return [{\r\n propName: 'RoomLayout',\r\n propValue: this.getParent().layout.getCurrentLayoutAbbreviation()\r\n }];\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes) {\r\n const zIndex = zIndexes.CountertopGroup.Countertop;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n if (this.activeFeatureParts.length) {\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n if(activeFeaturePart && activeFeaturePart.layer && activeFeaturePart.dbFeature.metaData[\"Part\"]) {\r\n const partNumber = +activeFeaturePart.dbFeature.metaData[\"Part\"][0];\r\n activeFeaturePart.layer.zIndex = zIndexes.CountertopGroup[\"Countertop\"+partNumber];\r\n }\r\n })\r\n }\r\n }\r\n }\r\n\r\n setActiveFeatureParts(fromFeature = this.activeFeature) {\r\n let activeFeatureParts = [];\r\n if (fromFeature && fromFeature.partNumber) {\r\n const name1 = fromFeature.getCountertopGroupsSplittedFeatureName();\r\n const conditions = this.getArrayOfConditions();\r\n activeFeatureParts = this.featuresParts.filter((feature) => {\r\n const name2 = feature.getCountertopGroupsSplittedFeatureName();\r\n return (name1 === name2) && feature.matchesMetaForArrayOfConditions(conditions);\r\n });\r\n const filterGroups = store.getState().filterState.filterGroups;\r\n const edgeFilterGroup = filterGroups.find(group => group.name === \"Edge\" || group.name === \"Edge Profile\");\r\n const fromFeatureFilters = fromFeature.dbFeature.filterValueIDs;\r\n if (edgeFilterGroup && fromFeatureFilters && fromFeatureFilters[edgeFilterGroup.id]) {\r\n const edgeFilterGroupId = edgeFilterGroup.id;\r\n const realActiveFeaturePart = activeFeatureParts.find(activeFeaturePart => {\r\n return this.featureIsMatchingEdgeFilters(activeFeaturePart, fromFeatureFilters[edgeFilterGroupId], edgeFilterGroupId)\r\n });\r\n activeFeatureParts = realActiveFeaturePart ? [realActiveFeaturePart] : []\r\n }\r\n }\r\n activeFeatureParts.forEach((activeFeaturePart) => {\r\n if(activeFeaturePart) {\r\n activeFeaturePart.disabled = this.disabled\r\n }\r\n });\r\n return activeFeatureParts\r\n }\r\n\r\n featureIsMatchingEdgeFilters(currentCheckFeature, activeEdgeFilter, edgeFilterGroupId) {\r\n const currentFeatureEdgeFilters = currentCheckFeature && currentCheckFeature.dbFeature\r\n && currentCheckFeature.dbFeature.filterValueIDs\r\n && currentCheckFeature.dbFeature.filterValueIDs[edgeFilterGroupId];\r\n return currentFeatureEdgeFilters && currentFeatureEdgeFilters.some(filterValueId => filterValueId === activeEdgeFilter[0]);\r\n }\r\n\r\n canUseNavigationFilterSteps() {\r\n const parent = this.getParent();\r\n return parent.edge // display filters only if edges exist\r\n }\r\n\r\n canUseNavigationFilter() {\r\n return true //TODO[Artem] add here features filters check\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {PLACEMENTS} from \"../../constants\";\r\nimport Cabinet from \"../../parts/cabinet\";\r\n\r\nexport default class Faucet extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'faucet';\r\n this.partName = 'Faucet';\r\n this.translateId = \"visualizer.kitchen.countertop.faucet\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n if (dbFeature.metaData && dbFeature.metaData[\"Placement\"]\r\n && !dbFeature.metaData[\"Placement\"].includes(PLACEMENTS.Countertop)) {\r\n return false\r\n }\r\n return super.load_(dbFeature, new Faucet());\r\n }\r\n\r\n disabledClick() {\r\n const relatedSink = this.getParent().sink;\r\n if (relatedSink) {\r\n relatedSink.disabled = this.disabled;\r\n }\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const cabinetParent = this.getParent().layout.parts[Cabinet.id];\r\n const bottomCabinet = cabinetParent && cabinetParent.bottomCabinet;\r\n if (bottomCabinet && (bottomCabinet.disabled || !bottomCabinet.featureGroupEnabled)) {\r\n super.hideLayers();\r\n return\r\n }\r\n\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault(layout);\r\n return super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n return [{\r\n propName: 'RoomLayout',\r\n propValue: this.getParent().layout.getCurrentLayoutAbbreviation()\r\n }];\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes) {\r\n const zIndex = zIndexes.CountertopGroup.Faucet;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {PLACEMENTS} from \"../../constants\";\r\nimport Cabinet from \"../../parts/cabinet\";\r\n\r\nexport default class Sink extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'sink';\r\n this.partName = 'Sink';\r\n this.translateId = \"visualizer.kitchen.countertop.sink\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n if (dbFeature.metaData && dbFeature.metaData[\"Placement\"]\r\n && !dbFeature.metaData[\"Placement\"].includes(PLACEMENTS.Countertop)) {\r\n return false\r\n }\r\n return super.load_(dbFeature, new Sink());\r\n }\r\n\r\n disabledClick() {\r\n const relatedFaucet = this.getParent().faucet;\r\n if (relatedFaucet) {\r\n relatedFaucet.disabled = this.disabled;\r\n }\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const cabinetParent = this.getParent().layout.parts[Cabinet.id];\r\n const bottomCabinet = cabinetParent && cabinetParent.bottomCabinet;\r\n if (bottomCabinet && (bottomCabinet.disabled || !bottomCabinet.featureGroupEnabled)) {\r\n super.hideLayers();\r\n return\r\n }\r\n\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault(layout);\r\n return super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n return [{\r\n propName: 'RoomLayout',\r\n propValue: this.getParent().layout.getCurrentLayoutAbbreviation()\r\n }];\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes) {\r\n const zIndex = zIndexes.CountertopGroup.Sink;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {PLACEMENTS} from \"../../constants\";\r\nimport Cabinet from \"../../parts/cabinet\";\r\n\r\nexport default class Stovetop extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'stovetop';\r\n this.partName = 'Stovetop';\r\n this.translateId = \"visualizer.kitchen.countertop.stovetop\";\r\n }\r\n\r\n load(dbFeature) {\r\n if (dbFeature.metaData && dbFeature.metaData[\"Placement\"]\r\n && !dbFeature.metaData[\"Placement\"].includes(PLACEMENTS.Countertop)) {\r\n return false\r\n }\r\n return super.load_(dbFeature, new Stovetop());\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const cabinetParent = this.getParent().layout.parts[Cabinet.id];\r\n const bottomCabinet = cabinetParent && cabinetParent.bottomCabinet;\r\n if (bottomCabinet && (bottomCabinet.disabled || !bottomCabinet.featureGroupEnabled)) {\r\n super.hideLayers();\r\n return\r\n }\r\n\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n return [{\r\n propName: 'RoomLayout',\r\n propValue: this.getParent().layout.getCurrentLayoutAbbreviation()\r\n }];\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes) {\r\n const zIndex = zIndexes.CountertopGroup.Stovetop;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class Cutouts extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'cutouts';\r\n this.partName = 'Cutouts';\r\n this.translateId = \"visualizer.kitchen.countertop.cutouts\";\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new Cutouts());\r\n }\r\n\r\n setZIndex() {\r\n\r\n }\r\n}\r\n","import EdgeCommon from \"../edgeCommon\";\r\n\r\nexport default class EdgeProfile extends EdgeCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'edge_profile';\r\n this.partName = 'Edge Profile';\r\n this.translateId = \"visualizer.kitchen.countertop.edge_profile\";\r\n // this.isStoneFeature = true;\r\n this.customClassName = \"edge\";\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new EdgeProfile());\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class Radius extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'radius';\r\n this.partName = 'Radius';\r\n this.translateId = \"visualizer.kitchen.countertop.radius\";\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new Radius());\r\n }\r\n\r\n setZIndex() {\r\n\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class Cabinet extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.dbName = 'center Island';\r\n this.partId = 'center_island_cabinet';\r\n this.partName = 'Cabinet';\r\n this.translateId = \"visualizer.kitchen.center_island.center_island_cabinet\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n dbFeature.metaData[\"RoomLayout\"] = (dbFeature.metaData[\"RoomLayout\"] && dbFeature.metaData[\"RoomLayout\"].filter(roomLayout => roomLayout.includes(\"I\"))) || [];\r\n return super.load_(dbFeature, new Cabinet());\r\n }\r\n\r\n changeLayout() {\r\n const layoutAbbreviation = this.getParent().layout.getCurrentLayoutAbbreviation();\r\n if (layoutAbbreviation.includes(\"I\") && this.disabled) {\r\n this.disabled = false;\r\n this.disabledClick();\r\n }\r\n }\r\n\r\n disabledClick() {\r\n const centerIslandParent = this.getParent();\r\n centerIslandParent.relatedItems.forEach(relItem => {\r\n relItem.disabled = this.disabled;\r\n });\r\n }\r\n\r\n setDefault() {\r\n\r\n if (!this.tryToSetTheSameFeature(this.features)) {\r\n const layout = this.getParent().layout;\r\n if (layout.selectedLayoutFeatures[layout.type] && layout.selectedLayoutFeatures[layout.type][this.partId]) {\r\n this.activeFeature = this.getFeatureByPartName(layout.selectedLayoutFeatures[layout.type][this.partId]);\r\n } else {\r\n const existInSomeLayout = Object.keys(layout.selectedLayoutFeatures).find(layoutType => {\r\n return layout.selectedLayoutFeatures[layoutType] && layout.selectedLayoutFeatures[layoutType][this.partId];\r\n });\r\n if (existInSomeLayout) {\r\n this.activeFeature = this.getFeatureByPartName(layout.selectedLayoutFeatures[existInSomeLayout][this.partId]);\r\n }\r\n }\r\n if (!this.activeFeature) {\r\n this.activeFeature = this.features[0];\r\n }\r\n }\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes) {\r\n const zIndex = zIndexes.CenterIsland.Cabinet;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n }\r\n}\r\n","import CountertopCommon from \"../countertopCommon\";\r\n\r\nexport default class Countertop extends CountertopCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'center_island_countertop';\r\n this.dbName = 'Center Island Countertop';\r\n this.partName = 'Island Countertop';\r\n this.homePageTitle = 'Center Island Countertop';\r\n this.translateId = \"visualizer.kitchen.center_island.center_island_countertop\";\r\n this.isStoneFeature = true;\r\n this.toggleSwitchedOffByUser = false; // is used for returning toggle back when feature is found\r\n }\r\n\r\n disabledClick() {\r\n const centerIslandParent = this.getParent();\r\n if (!this.disabled && centerIslandParent.cabinet.disabled) {\r\n centerIslandParent.cabinet.disabled = false;\r\n centerIslandParent.cabinet.disabledClick();\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n dbFeature.metaData[\"RoomLayout\"] = (dbFeature.metaData[\"RoomLayout\"] && dbFeature.metaData[\"RoomLayout\"].filter(roomLayout => roomLayout.includes(\"I\"))) || [];\r\n return super.load_(dbFeature, new Countertop());\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const cabinet = this.getParent().cabinet;\r\n if (cabinet && (cabinet.disabled || !cabinet.featureGroupEnabled)) {\r\n super.hideLayers();\r\n return\r\n }\r\n\r\n return super.setLayers(layout);\r\n }\r\n\r\n setDefault() { // this is added because of the layout\r\n const layout = this.getParent && this.getParent().layout;\r\n if (layout && layout.getCurrentLayoutAbbreviation) {\r\n const currentLayoutAbbreviation = layout.getCurrentLayoutAbbreviation();\r\n if (currentLayoutAbbreviation && !currentLayoutAbbreviation.includes(\"I\")) {\r\n return null\r\n }\r\n }\r\n return super.setDefault()\r\n }\r\n\r\n getArrayOfConditions() {\r\n return [{\r\n propName: 'RoomLayout',\r\n propValue: this.getParent().layout.getCurrentLayoutAbbreviation()\r\n }];\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes) {\r\n const zIndex = zIndexes.CenterIsland.Countertop;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n }\r\n\r\n canUseNavigationFilterSteps() {\r\n const parent = this.getParent();\r\n return parent.edge // display filters only if edges exist\r\n }\r\n\r\n canUseNavigationFilter() {\r\n return true //TODO[Artem] add here features filters check\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class Chairs extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'center_island_chairs';\r\n this.partName = 'Chairs';\r\n this.dbName = 'Chair';\r\n this.translateId = \"visualizer.kitchen.center_island.center_island_chairs\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n dbFeature.metaData[\"RoomLayout\"] = (dbFeature.metaData[\"RoomLayout\"] && dbFeature.metaData[\"RoomLayout\"].filter(roomLayout => roomLayout.includes(\"I\"))) || [];\r\n return super.load_(dbFeature, new Chairs());\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const cabinet = this.getParent().cabinet;\r\n if (cabinet && (cabinet.disabled || !cabinet.featureGroupEnabled)) {\r\n super.hideLayers();\r\n return\r\n }\r\n\r\n return super.setLayers(layout);\r\n }\r\n\r\n disabledClick() {\r\n const centerIslandParent = this.getParent();\r\n if (!this.disabled && centerIslandParent.cabinet.disabled) {\r\n centerIslandParent.cabinet.disabled = false;\r\n centerIslandParent.cabinet.disabledClick();\r\n }\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes) {\r\n const zIndex = zIndexes.CenterIsland.Chairs;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {PLACEMENTS} from \"../../constants\";\r\nimport DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\n\r\nexport default class Faucet extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'center_island_faucet';\r\n this.partName = 'Faucet';\r\n this.translateId = \"visualizer.kitchen.center_island.center_island_faucet\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n dbFeature.metaData[\"RoomLayout\"] = (dbFeature.metaData[\"RoomLayout\"] && dbFeature.metaData[\"RoomLayout\"].filter(roomLayout => roomLayout.includes(\"I\"))) || [];\r\n if (dbFeature.metaData && dbFeature.metaData[\"Placement\"]\r\n && !dbFeature.metaData[\"Placement\"].includes(PLACEMENTS.Island)) {\r\n return false\r\n }\r\n return super.load_(dbFeature, new Faucet());\r\n }\r\n\r\n disabledClick() {\r\n const centerIslandParent = this.getParent();\r\n if (!this.disabled && centerIslandParent.cabinet && centerIslandParent.cabinet.disabled) {\r\n centerIslandParent.cabinet.disabled = false;\r\n centerIslandParent.cabinet.disabledClick();\r\n }\r\n const relatedSink = centerIslandParent.sink;\r\n if (relatedSink) {\r\n relatedSink.disabled = this.disabled;\r\n }\r\n const stovetop = centerIslandParent.stovetop;\r\n if (stovetop && !this.disabled && !stovetop.disabled) {\r\n stovetop.disabled = true;\r\n }\r\n const range = centerIslandParent.range;\r\n if (range && !this.disabled && !range.disabled) {\r\n range.disabled = true;\r\n }\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(true), filteredAvailableFeatures);\r\n return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const cabinet = this.getParent().cabinet;\r\n if (cabinet && (cabinet.disabled || !cabinet.featureGroupEnabled)) {\r\n super.hideLayers();\r\n return\r\n }\r\n\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n super.setLayers(layout);\r\n } else {\r\n this.setDefault();\r\n super.setLayers(layout);\r\n }\r\n }\r\n\r\n getArrayOfConditions() {\r\n const sink = this.getParent().sink;\r\n if (sink && sink.activeFeature) {\r\n return [{\r\n propName: \"FaucetPlacement\",\r\n propValue: sink.activeFeature.metaData[\"FaucetPlacement\"] || \"Moved\"\r\n }]\r\n }\r\n return [];\r\n }\r\n\r\n tryToSetTheSameFeature(filteredFeatures = [], partName = \"\") {\r\n if (this.activeFeature && this.activeFeature.partName) {\r\n const splittedName = (partName || this.activeFeature.partName).split(\" M\")[0];\r\n this.activeFeature = filteredFeatures.find(feature => {\r\n if (feature.partName) {\r\n const splittedCurrentName = feature.partName.split(\" M\")[0];\r\n return splittedCurrentName === splittedName\r\n }\r\n return false\r\n });\r\n // console.log('AF', filteredFeatures, this.activeFeature);\r\n if (this.activeFeature) {\r\n return true\r\n }\r\n }\r\n return false\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes) {\r\n const zIndex = zIndexes.CenterIsland.Faucet;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {PLACEMENTS} from \"../../constants\";\r\n\r\nexport default class Sink extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'center_island_sink';\r\n this.partName = 'Sink';\r\n this.translateId = \"visualizer.kitchen.center_island.center_island_sink\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n dbFeature.metaData[\"RoomLayout\"] = (dbFeature.metaData[\"RoomLayout\"] && dbFeature.metaData[\"RoomLayout\"].filter(roomLayout => roomLayout.includes(\"I\"))) || [];\r\n if (dbFeature.metaData && dbFeature.metaData[\"Placement\"]\r\n && !dbFeature.metaData[\"Placement\"].includes(PLACEMENTS.Island)) {\r\n return false\r\n }\r\n return super.load_(dbFeature, new Sink());\r\n }\r\n\r\n disabledClick() {\r\n const centerIslandParent = this.getParent();\r\n if (!this.disabled && centerIslandParent.cabinet && centerIslandParent.cabinet.disabled) {\r\n centerIslandParent.cabinet.disabled = false;\r\n centerIslandParent.cabinet.disabledClick();\r\n }\r\n const relatedFaucet = centerIslandParent.faucet;\r\n if (relatedFaucet) {\r\n relatedFaucet.disabled = this.disabled;\r\n }\r\n const stovetop = centerIslandParent.stovetop;\r\n if (stovetop && !this.disabled && !stovetop.disabled) {\r\n stovetop.disabled = true;\r\n }\r\n const range = centerIslandParent.range;\r\n if (range && !this.disabled && !range.disabled) {\r\n range.disabled = true;\r\n }\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const cabinet = this.getParent().cabinet;\r\n if (cabinet && (cabinet.disabled || !cabinet.featureGroupEnabled)) {\r\n super.hideLayers();\r\n return\r\n }\r\n\r\n return super.setLayers(layout);\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes) {\r\n const zIndex = zIndexes.CenterIsland.Sink;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\n\r\nexport default class Handle extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'center_island_handle';\r\n this.dbName = 'Center Island Handle';\r\n this.partName = 'Handle';\r\n this.translateId = \"visualizer.kitchen.center_island.center_island_handle\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n dbFeature.metaData[\"RoomLayout\"] = (dbFeature.metaData[\"RoomLayout\"] && dbFeature.metaData[\"RoomLayout\"].filter(roomLayout => roomLayout.includes(\"I\"))) || [];\r\n return super.load_(dbFeature, new Handle());\r\n }\r\n\r\n disabledClick() {\r\n const centerIslandParent = this.getParent();\r\n if (!this.disabled && centerIslandParent.cabinet.disabled) {\r\n centerIslandParent.cabinet.disabled = false;\r\n centerIslandParent.cabinet.disabledClick();\r\n }\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(true), filteredAvailableFeatures);\r\n return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const cabinet = this.getParent().cabinet;\r\n if (cabinet && (cabinet.disabled || !cabinet.featureGroupEnabled)) {\r\n super.hideLayers();\r\n return\r\n }\r\n\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n super.setLayers(layout);\r\n } else {\r\n this.setDefault();\r\n super.setLayers(layout);\r\n }\r\n }\r\n\r\n getArrayOfConditions() {\r\n const cabinetType = this.getParent().getCabinetType();\r\n return [{\r\n propName: \"Cabinet\",\r\n propValue: cabinetType\r\n }];\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes) {\r\n const zIndex = zIndexes.CenterIsland.Handle;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class CenterIslandShadow extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'center_island_shadow';\r\n this.partName = 'Center Island Shadow';\r\n this.visible = false;\r\n }\r\n\r\n load(dbFeature) {\r\n dbFeature.metaData[\"RoomLayout\"] = (dbFeature.metaData[\"RoomLayout\"] && dbFeature.metaData[\"RoomLayout\"].filter(roomLayout => roomLayout.includes(\"I\"))) || [];\r\n return super.load_(dbFeature, new CenterIslandShadow());\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const cabinet = this.getParent().cabinet;\r\n if (cabinet && (cabinet.disabled || !cabinet.featureGroupEnabled)) {\r\n super.hideLayers();\r\n return\r\n }\r\n\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault(layout);\r\n return super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n const cabinetType = this.getParent().getCabinetType();\r\n return [{\r\n propName: \"Cabinet\",\r\n propValue: cabinetType\r\n }, {\r\n propName: 'RoomLayout',\r\n propValue: this.getParent().layout.getCurrentLayoutAbbreviation()\r\n }];\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.CenterIsland.CenterIslandShadow;\r\n }\r\n }\r\n}","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {PLACEMENTS} from \"../../constants\";\r\n\r\nexport default class Stovetop extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'center_island_stovetop';\r\n this.partName = 'Stovetop';\r\n this.translateId = \"visualizer.kitchen.center_island.center_island_stovetop\";\r\n this.canBeDisabled = true;\r\n this.defaultDisabled = true;\r\n this.disabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n if (dbFeature.metaData && dbFeature.metaData[\"Placement\"]\r\n && !dbFeature.metaData[\"Placement\"].includes(PLACEMENTS.Island)) {\r\n return false\r\n }\r\n dbFeature.metaData[\"RoomLayout\"] = (dbFeature.metaData[\"RoomLayout\"] && dbFeature.metaData[\"RoomLayout\"].filter(roomLayout => roomLayout.includes(\"I\"))) || [];\r\n return super.load_(dbFeature, new Stovetop());\r\n }\r\n\r\n disabledClick() {\r\n const centerIslandParent = this.getParent();\r\n const cabinet = centerIslandParent.cabinet;\r\n\r\n if (!cabinet.featureGroupEnabled) {\r\n super.hideLayers();\r\n return\r\n }\r\n\r\n if (!this.disabled && cabinet.disabled) {\r\n cabinet.disabled = false;\r\n cabinet.disabledClick();\r\n }\r\n const sink = centerIslandParent.sink;\r\n const range = centerIslandParent.range;\r\n if (sink && !this.disabled && !sink.disabled) {\r\n sink.disabled = true;\r\n sink.disabledClick();\r\n }\r\n if (range && !this.disabled && !range.disabled) {\r\n range.disabled = true;\r\n }\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const centerIslandParent = this.getParent();\r\n const sink = centerIslandParent.sink;\r\n const range = centerIslandParent.range;\r\n if ((sink && !sink.disabled) || (sink && !range.disabled)) {\r\n super.hideLayers();\r\n return\r\n }\r\n\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n super.setLayers(layout);\r\n } else {\r\n this.setDefault();\r\n super.setLayers(layout);\r\n }\r\n }\r\n\r\n getArrayOfConditions() {\r\n return [{\r\n propName: 'RoomLayout',\r\n propValue: this.getParent().layout.getCurrentLayoutAbbreviation()\r\n }];\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes) {\r\n const zIndex = zIndexes.CenterIsland.Stovetop;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {PLACEMENTS} from \"../../constants\";\r\n\r\nexport default class Range extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'center_island_range';\r\n this.partName = 'Range';\r\n this.translateId = \"visualizer.kitchen.center_island.center_island_range\";\r\n this.canBeDisabled = true;\r\n this.defaultDisabled = true;\r\n this.disabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n if ((dbFeature.metaData && dbFeature.metaData[\"Placement\"]\r\n && !dbFeature.metaData[\"Placement\"].includes(PLACEMENTS.Island)) || !dbFeature.metaData[\"Placement\"]) {\r\n return false\r\n }\r\n dbFeature.metaData[\"RoomLayout\"] = (dbFeature.metaData[\"RoomLayout\"] && dbFeature.metaData[\"RoomLayout\"].filter(roomLayout => roomLayout.includes(\"I\"))) || [];\r\n return super.load_(dbFeature, new Range());\r\n }\r\n\r\n disabledClick() {\r\n const centerIslandParent = this.getParent();\r\n const sink = centerIslandParent.sink;\r\n const stovetop = centerIslandParent.stovetop;\r\n if (sink && !this.disabled && !sink.disabled) {\r\n sink.disabled = true;\r\n sink.disabledClick();\r\n }\r\n if (stovetop && !this.disabled && !stovetop.disabled) {\r\n stovetop.disabled = true;\r\n }\r\n }\r\n\r\n setLayers(layout) {\r\n const centerIslandParent = this.getParent();\r\n const cabinet = centerIslandParent.cabinet;\r\n\r\n if (!cabinet.featureGroupEnabled) {\r\n super.hideLayers();\r\n return\r\n }\r\n\r\n if (!this.disabled && cabinet.disabled) {\r\n cabinet.disabled = false;\r\n cabinet.disabledClick();\r\n }\r\n const sink = centerIslandParent.sink;\r\n const stovetop = centerIslandParent.stovetop;\r\n if ((sink && !sink.disabled) || (stovetop && !stovetop.disabled)) {\r\n super.hideLayers();\r\n return\r\n }\r\n\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n super.setLayers(layout);\r\n } else {\r\n this.setDefault();\r\n super.setLayers(layout);\r\n }\r\n }\r\n\r\n getArrayOfConditions() {\r\n return [{\r\n propName: 'RoomLayout',\r\n propValue: this.getParent().layout.getCurrentLayoutAbbreviation()\r\n }];\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes) {\r\n const zIndex = zIndexes.CenterIsland.Range;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n }\r\n}\r\n","import EdgeCommon from \"../edgeCommon\";\r\n\r\nexport default class Edge extends EdgeCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'center_island_edge';\r\n this.partName = 'Edge';\r\n this.dbName = 'Edge Profile';\r\n this.translateId = \"visualizer.kitchen.center_island.center_island_edge\";\r\n // this.isStoneFeature = true;\r\n this.customClassName = \"edge\";\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new Edge());\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class ChairsShadow extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'center_island_chairs_shadow';\r\n this.partName = 'Center Island Chairs Shadow';\r\n this.visible = false;\r\n }\r\n\r\n load(dbFeature) {\r\n dbFeature.metaData[\"RoomLayout\"] = (dbFeature.metaData[\"RoomLayout\"] && dbFeature.metaData[\"RoomLayout\"].filter(roomLayout => roomLayout.includes(\"I\"))) || [];\r\n return super.load_(dbFeature, new ChairsShadow());\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const chairs = this.getParent().chairs;\r\n if (!chairs || (chairs.disabled || !chairs.featureGroupEnabled)) {\r\n super.hideLayers();\r\n return\r\n }\r\n\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault(layout);\r\n return super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n const chairsType = this.getParent().getChairType();\r\n return [{\r\n propName: \"Chair\",\r\n propValue: chairsType\r\n }, {\r\n propName: 'RoomLayout',\r\n propValue: this.getParent().layout.getCurrentLayoutAbbreviation()\r\n }];\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.CenterIsland.ChairsShadow;\r\n }\r\n }\r\n}\r\n","import React, {Component} from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {connect} from \"react-redux\";\r\nimport FeatureWizardBodyItem from \"./featureWizardBodyItem\";\r\nimport FeatureWizardSelection from \"./featureWizardSelection\";\r\nimport {s3FilterImagePath} from \"../../../../misc/utils\";\r\n\r\nclass FeatureWizardBody extends Component {\r\n\r\n static propTypes = {\r\n currentStep: PropTypes.object.isRequired,\r\n activeSubPart: PropTypes.object.isRequired,\r\n filterGroups: PropTypes.array.isRequired,\r\n features: PropTypes.array,\r\n onItemClick: PropTypes.func.isRequired,\r\n onItemClickDisabled: PropTypes.func.isRequired,\r\n availableSteps: PropTypes.array,\r\n featureWizardStep: PropTypes.number,\r\n isPhoneNumberValidated: PropTypes.bool,\r\n isMobile: PropTypes.bool,\r\n handleUserLoginClick: PropTypes.func,\r\n setFeatureWizardStep: PropTypes.func,\r\n showerWallWizardGroupsSelected: PropTypes.bool,\r\n searchText: PropTypes.string,\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n currentValues: []\r\n }\r\n }\r\n\r\n componentDidMount() {\r\n this.setCurrentValues();\r\n }\r\n\r\n componentWillReceiveProps(nextProps) {\r\n if (nextProps.currentStep && this.props.currentStep && (nextProps.currentStep.id !== this.props.currentStep.id)) {\r\n this.setCurrentValues(nextProps);\r\n }\r\n }\r\n\r\n setCurrentValues(nextProps = this.props) {\r\n const currentGroup = nextProps.filterGroups.find((filterGroup) => {\r\n return filterGroup.id === nextProps.currentStep.id\r\n });\r\n const fabricatorSettings = this.props.fabricatorSettings;\r\n const filteredFeatures = nextProps.features.filter(feature => {\r\n return !feature.dbFeature.displayName.includes(\"laceholder\")\r\n });\r\n const selectedId = nextProps.currentStep.selectedValueId;\r\n const currentValues = nextProps.currentStep.values\r\n .map((wizardValueObject) => {\r\n const currentFilterValue = this.getFilterValueObjectById(currentGroup, wizardValueObject.filterValue);\r\n const itemIsLocked = this.getLockedPropertyValueObjectById(currentFilterValue, filteredFeatures, wizardValueObject.filterValue, fabricatorSettings, nextProps);\r\n wizardValueObject.itemIsLocked = itemIsLocked;\r\n // console.log('wizardValueObject', wizardValueObject);\r\n return wizardValueObject\r\n })\r\n .sort((a,b) => {\r\n const selectedA = selectedId === a.filterValue;\r\n const selectedB = selectedId === b.filterValue;\r\n if (selectedA < selectedB) {\r\n return 1\r\n } else if (selectedB < selectedA) {\r\n return - 1\r\n } else {\r\n if (a.selectionAvailable < b.selectionAvailable) {\r\n return 1\r\n } else if (b.selectionAvailable < a.selectionAvailable) {\r\n return - 1\r\n } else {\r\n return (a.itemIsLocked > b.itemIsLocked) ? 1 : ((b.itemIsLocked > a.itemIsLocked) ? -1 : 0)\r\n }\r\n }\r\n });\r\n this.setState({\r\n currentValues\r\n })\r\n }\r\n\r\n getFilterValueObjectById = (currentGroup, filterValueId) => {\r\n return currentGroup.values.find(currentGroupValue => {\r\n return currentGroupValue.id === filterValueId\r\n });\r\n };\r\n\r\n getLockedPropertyValueObjectById = (currentFilterValue, filteredFeatures, filterValueId, fabricatorSettings, nextProps = this.props) => {\r\n\r\n const {isBackend, jobId, canSaveQuote, visualizerManagement} = document.kvConfig;\r\n\r\n if (!fabricatorSettings.leadCapture\r\n || (fabricatorSettings.leadCapture && visualizerManagement)\r\n || (fabricatorSettings.leadCapture && nextProps.isPhoneNumberValidated)\r\n || (fabricatorSettings.leadCapture && (isBackend && jobId && canSaveQuote))){\r\n return false\r\n }\r\n\r\n return currentFilterValue.lockedInWizard || !filteredFeatures.some(feature => {\r\n // console.log('bject.keys(feature.dbFeature.filterValueIDs)', Object.keys(feature.dbFeature.filterValueIDs));\r\n const filterToFind = feature.dbFeature.filterValueIDs[nextProps.currentStep.id];\r\n return filterToFind && filterToFind.includes(filterValueId) && feature.dbFeature.unlocked;\r\n })\r\n };\r\n\r\n getFeatureBodyItemThumbnail = (currentFilterValue) => {\r\n const additionalImages = currentFilterValue.additionalImages;\r\n if (Array.isArray(additionalImages) && additionalImages.length) {\r\n // console.log('props.currentFilterValue', currentFilterValue);\r\n if (this.props.activeSubPart.partId === \"vanity_cabinet\" && this.props.currentStep.filterName === \"Color\") {\r\n const materialFilter = this.props.availableSteps.find(step => step.filterName === \"Material\");\r\n if (materialFilter && materialFilter.selectedValueId) {\r\n const neededImage = additionalImages.find(image => image.filterValueIds.includes(materialFilter.selectedValueId));\r\n if (neededImage && neededImage.imageUrl) {\r\n return neededImage.imageUrl\r\n }\r\n return additionalImages[0].imageUrl\r\n }\r\n }\r\n return additionalImages[0].imageUrl\r\n }\r\n return s3FilterImagePath(currentFilterValue.icon);\r\n };\r\n\r\n getFeatureWizardBodyItem = (currentFilterValue, currentGroup, wizardValueObject, filteredFeatures, fabricatorSettings, key) => {\r\n\r\n // const thumbNailPath = `${basePath}images/thumbnails/${parentGroup}/${props.isMobile ? \"100\" : \"400\"}/${featureName}.JPG`;\r\n // console.log('thumbNailPath', thumbNailPath);\r\n\r\n /*** image ***/\r\n const styles = {\r\n backgroundImage: \"url(\" + this.getFeatureBodyItemThumbnail(currentFilterValue) + \")\"\r\n };\r\n const bgFilterName = this.props.currentStep.filterName.replace(/ /g,\"\");\r\n const bgFilterNameFilters = [\"Material\", \"Color\", \"TilePattern\", \"AcrylicPattern\", \"AcrylicColor\"];\r\n const backGroundSizeCover = bgFilterNameFilters.includes(bgFilterName);\r\n\r\n // const parentGroup = props.currentStep.filterName.replace(/ /g,\"\");\r\n // let featureName = props.currentFilterValue.displayText.replace(/ /g,\"\");\r\n // if (parentGroup === \"Color\") {\r\n // const woodType = props.availableSteps.find(step => step.filterName === \"Material\");\r\n // featureName = woodType.selectedValueName.replace(/ /g,\"\") + \"_\" + featureName;\r\n // if (featureName === \"Alder_Eggshell\" || featureName === \"Alder_Graphite\" || featureName === \"Alder_White\" // temporary hardcode until we have BE for multi thumbnails ready\r\n // || featureName === \"Oak_Eggshell\" || featureName === \"Oak_Graphite\" || featureName === \"Oak_White\") {\r\n // featureName = \"custom/\" + featureName;\r\n // }\r\n // }\r\n\r\n /*** active ***/\r\n const isActive = currentFilterValue && (this.props.currentStep.selectedValueId === currentFilterValue.id);\r\n\r\n /*** locked ***/\r\n const itemIsLocked = this.getLockedPropertyValueObjectById(currentFilterValue, filteredFeatures, wizardValueObject.filterValue, fabricatorSettings);\r\n\r\n /*** pulsating ***/\r\n let isPulsating = false;\r\n if ((fabricatorSettings.leadCapture && !(document.kvConfig.isBackend && document.kvConfig.jobId && document.kvConfig.canSaveQuote)) && !this.props.isPhoneNumberValidated\r\n && !itemIsLocked) {\r\n if (!this.props.currentStep.selectedValueId) {\r\n isPulsating = true\r\n } else {\r\n const selectedFilterValue = this.getFilterValueObjectById(currentGroup, this.props.currentStep.selectedValueId);\r\n const selectedItemIsLocked = this.getLockedPropertyValueObjectById(selectedFilterValue, filteredFeatures, this.props.currentStep.selectedValueId, fabricatorSettings);\r\n if (selectedItemIsLocked) {\r\n isPulsating = true\r\n }\r\n }\r\n }\r\n\r\n /*** disabled ***/\r\n let disabled = (this.props.featureWizardStep === 0) ? false : !wizardValueObject.selectionAvailable;\r\n\r\n const getQuoteEnabled = fabricatorSettings.enableQuote;\r\n\r\n return (\r\n \r\n )\r\n\r\n };\r\n\r\n renderItemsList = (currentGroup, filteredFeatures, values, fabricatorSettings) => {\r\n const navigationViewType = this.props.navigationViewType === 3 ? 2 : 1;\r\n\r\n const elements = [];\r\n\r\n for (let i = 0; i < Math.ceil(values.length / navigationViewType); i++ ) { // for ex. 28/3 = 10 columns\r\n const innerElements = [];\r\n for (let j = 0; j < navigationViewType;j++ ) {\r\n\r\n const currentIndex = j+(i*navigationViewType);\r\n const wizardValueObject = values[currentIndex];\r\n\r\n if (!wizardValueObject) {\r\n innerElements.push(\r\n
    \r\n );\r\n } else {\r\n const currentFilterValue = this.getFilterValueObjectById(currentGroup, wizardValueObject.filterValue);\r\n innerElements.push(this.getFeatureWizardBodyItem(\r\n currentFilterValue,\r\n currentGroup,\r\n wizardValueObject,\r\n filteredFeatures,\r\n fabricatorSettings,\r\n \"item\"+j+i\r\n )\r\n );\r\n }\r\n }\r\n elements.push(\r\n
  • \r\n {innerElements}\r\n
  • \r\n );\r\n }\r\n // console.log('elements', elements);\r\n return elements\r\n };\r\n\r\n render() {\r\n // console.log('currentStep', this.props.currentStep);\r\n const currentGroup = this.props.filterGroups.find((filterGroup) => {\r\n return filterGroup.id === this.props.currentStep.id\r\n });\r\n const filteredFeatures = this.props.features.filter(feature => {\r\n return !feature.dbFeature.displayName.includes(\"laceholder\");\r\n });\r\n const fabricatorSettings = this.props.fabricatorSettings;\r\n\r\n const interiorShowerWallWizard = this.props.activeSubPart.partId === \"shower_interior_wall\";\r\n if (interiorShowerWallWizard && !this.props.showerWallWizardGroupsSelected) {\r\n return (\r\n \r\n )\r\n }\r\n\r\n const values = this.props.searchText\r\n ? this.state.currentValues.filter((currentValue) => {\r\n const currentFilterValue = this.getFilterValueObjectById(currentGroup, currentValue.filterValue);\r\n return currentFilterValue && currentFilterValue.displayText.toLowerCase().includes(this.props.searchText.toLowerCase())\r\n })\r\n : this.state.currentValues;\r\n\r\n return this.props.isMobile ? (\r\n
    \r\n
      \r\n {values.map((wizardValueObject, filterValueIndex) => {\r\n const currentFilterValue = this.getFilterValueObjectById(currentGroup, wizardValueObject.filterValue);\r\n return this.getFeatureWizardBodyItem(\r\n currentFilterValue,\r\n currentGroup,\r\n wizardValueObject,\r\n filteredFeatures,\r\n fabricatorSettings,\r\n \"item\"+filterValueIndex\r\n )\r\n })}\r\n
    \r\n
    \r\n ) : (\r\n
      \r\n {this.renderItemsList(currentGroup, filteredFeatures, values, fabricatorSettings)}\r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => ({\r\n fabricatorSettings: store.fabricatorState.settings,\r\n userIsLoggedIn: store.userState.userIsLoggedIn,\r\n navigationViewType: store.navigationState.navigationViewType\r\n});\r\n\r\nconst mapDispatchToProps = () => ({});\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(FeatureWizardBody);\r\n","import React from 'react';\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\n// import { basePath } from \"../../core/assets\";\r\nimport Analytics from './../../../../analytics';\r\nimport {UserPopupTypes} from \"../../constants\";\r\n\r\nconst FeatureWizardBodyItem = (props) => {\r\n return props.isMobile ? (\r\n
  • \r\n
    (props.disabled && !props.itemIsLocked)\r\n ? props.onItemClickDisabled(props.currentFilterValue, props.itemIsLocked, props.currentStep.filterName)\r\n : props.onItemClick(props.currentFilterValue, props.itemIsLocked, props.currentStep.filterName)}\r\n style={props.styles}>\r\n
    \r\n {props.itemIsLocked\r\n ? \r\n : {props.currentFilterValue.displayText}}\r\n
    \r\n
    \r\n {props.isActive && (props.itemIsLocked || (!props.userIsLoggedIn && props.getQuoteEnabled)) ? (\r\n
    \r\n \r\n
    \r\n ) : null}\r\n
  • \r\n ) : (\r\n
    (props.disabled && !props.itemIsLocked)\r\n ? props.onItemClickDisabled(props.currentFilterValue, props.itemIsLocked, props.currentStep.filterName)\r\n : props.onItemClick(props.currentFilterValue, props.itemIsLocked, props.currentStep.filterName)}>\r\n {props.isActive && (props.itemIsLocked || (!props.userIsLoggedIn && props.getQuoteEnabled)) ? (\r\n
    \r\n \r\n
    \r\n ) : null}\r\n
    \r\n {props.itemIsLocked ? null : (\r\n {props.currentFilterValue.displayText}\r\n )}\r\n
    \r\n
    \r\n )\r\n};\r\n\r\nFeatureWizardBodyItem.displayName = 'FeatureWizardBodyItem';\r\n\r\nexport default FeatureWizardBodyItem;\r\n","import React, {Component} from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport FeatureWizardSelectionItem from \"./featureWizardSelectionItem\";\r\n\r\nexport default class FeatureWizardSelection extends Component {\r\n\r\n static propTypes = {\r\n toggleWizardFilterSelection: PropTypes.func.isRequired,\r\n getFilterValueObjectById: PropTypes.func.isRequired,\r\n onItemClick: PropTypes.func.isRequired,\r\n exitFeatureWizard: PropTypes.func.isRequired,\r\n setFeatureWizardStep: PropTypes.func.isRequired,\r\n currentStep: PropTypes.object.isRequired,\r\n isMobile: PropTypes.bool,\r\n };\r\n\r\n componentDidMount() {\r\n this.props.setFeatureWizardStep(0);\r\n }\r\n\r\n setWizardValue = (clickedFilterValue) => {\r\n this.props.toggleWizardFilterSelection(true);\r\n this.props.onItemClick(clickedFilterValue, false, this.props.currentStep.filterName);\r\n this.props.setFeatureWizardStep(1);\r\n };\r\n\r\n setAllItems = () => {\r\n setTimeout(() => {\r\n this.props.toggleWizardFilterSelection(true);\r\n }, 300);\r\n this.props.exitFeatureWizard();\r\n };\r\n\r\n render() {\r\n return (\r\n
    \r\n
      \r\n
    • \r\n \r\n
    • \r\n {this.props.currentStep.values.map((wizardValueObject, index) => {\r\n const currentFilterValue = this.props.getFilterValueObjectById(this.props.currentGroup, wizardValueObject.filterValue);\r\n return (\r\n \r\n )\r\n })}\r\n
    \r\n
    \r\n )\r\n }\r\n}\r\n","import React from 'react';\r\n\r\nconst FeatureWizardSelectionItem = (props) => {\r\n return (\r\n
  • props.setWizardValue(props.currentFilterValue)}>\r\n {props.currentFilterValue.displayText}\r\n
  • \r\n );\r\n};\r\n\r\nFeatureWizardSelectionItem.displayName = 'FeatureWizardSelectionItem';\r\n\r\nexport default FeatureWizardSelectionItem;","import React, {useState} from \"react\";\r\nimport { connect } from \"react-redux\";\r\n\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\nimport RoomSceneNavigationItem from \"./roomSceneNavigationItem\";\r\nimport {getAvailableRoomScenes} from \"./navUtils\";\r\n\r\nconst RoomSceneNavigation = () => {\r\n\r\n const layout = getCurrentLayout();\r\n const [activeScene, setActiveScene] = useState(layout.scene);\r\n\r\n const availableRoomScenes = getAvailableRoomScenes();\r\n // console.log(\"availableRoomScenes\", availableRoomScenes);\r\n\r\n return (\r\n
    \r\n
      \r\n {availableRoomScenes.map(roomScene => {\r\n return \r\n })}\r\n
    \r\n
    \r\n )\r\n};\r\n\r\nconst mapStateToProps = () => {\r\n return {};\r\n};\r\n\r\nconst mapDispatchToProps = {};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(RoomSceneNavigation)\r\n","import React, {useEffect, useState} from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport $ from \"jquery\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport {createFakeLayout, getCurrentLayout} from \"../../appLayout\";\r\nimport LoadingSpinner from \"../../ui/loadingSpinner\";\r\nimport ActionTypes from \"../../../misc/actionTypes\";\r\nimport {loaderDisable, loaderEnable} from \"../../ui/loaderView\";\r\nimport {getImagePromiseFromLayout} from \"../../../misc/getCanvasImageFromLayout\";\r\nimport {useIsMounted} from \"../../../misc/helperHooks\";\r\n\r\nconst RoomSceneNavigationItem = (props) => {\r\n\r\n const {roomScene, isActive, setActiveScene} = props;\r\n\r\n const [thumbnailUrl, setThumbnailUrl] = useState();\r\n const layout = getCurrentLayout();\r\n const isMounted = useIsMounted();\r\n\r\n useEffect(() => {\r\n if (!thumbnailUrl) {\r\n const getLayoutThumbnail = async () => {\r\n const fakeLayout = layout.scene === roomScene ? layout : createFakeLayout();\r\n if (!isActive) {\r\n await fakeLayout.selectLayout(layout.type, null, null, roomScene, null, true);\r\n }\r\n // console.log(\"layout.getLayers(showPlaceHolders)\", roomScene, fakeLayout, fakeLayout.getLayers(false));\r\n const imageResponse = await getImagePromiseFromLayout(fakeLayout);\r\n if (isMounted() && imageResponse) {\r\n setThumbnailUrl(imageResponse);\r\n }\r\n\r\n }\r\n getLayoutThumbnail();\r\n }\r\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n const roomSceneClick = async () => {\r\n if (!isActive) {\r\n loaderEnable();\r\n setActiveScene(roomScene);\r\n await layout.selectLayout(layout.type, null, null, roomScene);\r\n $(window).trigger(ActionTypes.UPDATE_ALL_ITEMS); // update canvas\r\n loaderDisable();\r\n }\r\n };\r\n\r\n return (\r\n
  • roomSceneClick(roomScene)}\r\n style={{backgroundImage: `url(${thumbnailUrl})`}}>\r\n {thumbnailUrl ? null : }\r\n
  • \r\n )\r\n};\r\n\r\nRoomSceneNavigationItem.propTypes = {\r\n roomScene: PropTypes.string.isRequired,\r\n}\r\n\r\nconst mapStateToProps = () => {\r\n return {};\r\n};\r\n\r\nconst mapDispatchToProps = {};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(RoomSceneNavigationItem)\r\n","import React, {useEffect, useRef, useState} from \"react\";\r\nimport {connect} from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\nimport {getAvailableLayouts} from \"./navUtils\";\r\nimport LayoutNavigationItem from \"../layoutNavigationItem\";\r\n\r\nconst DesktopNavigationLayoutsContent = (props) => {\r\n\r\n const {handleLayoutItemClick, desktopNavigationOpened} = props;\r\n\r\n const [allowLoading, setAllowLoading] = useState(desktopNavigationOpened);\r\n const timeoutRef = useRef();\r\n\r\n useEffect(() => {\r\n timeoutRef.current = setTimeout(() => {\r\n setAllowLoading(true);\r\n }, allowLoading ? 300 : 400)\r\n return () => {\r\n clearTimeout(timeoutRef.current)\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n if (!allowLoading) {\r\n return null\r\n }\r\n\r\n const layout = getCurrentLayout();\r\n const layoutNames = getAvailableLayouts();\r\n return (\r\n
    \r\n
      \r\n {layoutNames.map(key => {\r\n return \r\n })}\r\n
    \r\n
    \r\n )\r\n}\r\n\r\nDesktopNavigationLayoutsContent.propTypes = {\r\n handleLayoutItemClick: PropTypes.func,\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {desktopNavigationOpened} = store.navigationState;\r\n return {\r\n desktopNavigationOpened\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps)(DesktopNavigationLayoutsContent);\r\n","import React from 'react';\r\nimport {connect} from 'react-redux';\r\nimport {injectIntl} from \"react-intl\";\r\n\r\nimport MobileNavigationCommon from \"../../visComponents/navigation/mobileNavigationCommon\";\r\n\r\nimport {\r\n setVanityType,\r\n setDefaultSelectionGroup,\r\n changeActivePartRelatedItemIndex\r\n} from \"../../../actions/actionFunctions\";\r\n\r\nimport {ContentType} from \"../../visComponents/constants\";\r\nimport {Vanity} from \"../core/parts/vanity\";\r\nimport Z from \"../core/parts/zIndex\";\r\n\r\nimport MobileNavigationButtons from '../../visComponents/navigation/mobile/mobileNavigationButtons';\r\nimport MobileNavigationAllWallsCheckbox from '../../visComponents/navigation/mobile/mobileNavigationAllWallsCheckbox';\r\nimport FeatureWizardSteps from \"../../visComponents/navigation/featureWizard/featureWizardSteps\";\r\n\r\nimport MobileMenuSelect from '../../visComponents/navigation/mobile/mobileMenuSelect';\r\nimport LockedView from \"../../common/lockedView\";\r\n\r\nimport Filters from \"../../visComponents/navigation/newFilters/filters\";\r\nimport BodyPanelRadio from \"../../visComponents/navigation/desktop/bodyPanelRadio\";\r\nimport ContextMenu from \"./contextMenu\";\r\nimport FilterSwitchers from \"../../visComponents/navigation/newFilters/filterSwitchers\";\r\nimport FilterSelection from \"../../visComponents/navigation/newFilters/filterSelection\";\r\nimport {setNavigationLoading, setNavigationViewType} from \"../../../actions/navigationFunctions\";\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\n\r\nclass MobileNavigation extends MobileNavigationCommon {\r\n\r\n bindCanvasClick = (event) => {\r\n const layout = getCurrentLayout();\r\n // const canvas = document.getElementById(this.props.canvasId);\r\n\r\n if (!window.touchMove && !this.state.showNavigation && !this.state.contextMenuOpen) {\r\n this.props.setHoveredLayer(event);\r\n }\r\n\r\n if (document.hoveredLayer && !window.touchMove) {\r\n // $('.canvas-text').html(`CLICK3`);\r\n const layoutType = layout.getCurrentLayoutName();\r\n\r\n const hoveredZone = Z.getMenuByHoveredLayer(layoutType, document.hoveredLayer);\r\n let ponyWallGroup = false;\r\n\r\n if (hoveredZone) {\r\n if ((hoveredZone === \"shower_custom\" || hoveredZone === \"vanity_custom\" || hoveredZone === \"bathtub_custom\"\r\n || hoveredZone === \"shower_combo\" || hoveredZone === \"shower_pony_wall\" || hoveredZone === \"left_wall_custom\"\r\n || hoveredZone === \"wall_b_custom\") && !this.state.showNavigation) {\r\n if (this.state.contextMenuOpen) {\r\n this.setState({\r\n contextMenuOpen: false,\r\n hoveredLayer: {}\r\n });\r\n document.removeEventListener('click', this.handleContextMenuBlur);\r\n } else {\r\n let contextMenuOpen = '';\r\n switch (hoveredZone) {\r\n case \"shower_custom\":\r\n case \"shower_combo\":\r\n case \"shower_pony_wall\": {\r\n const showerGroup = this.state.designNavigationItems.find(navItem => {\r\n return navItem.text === \"Shower\"\r\n });\r\n contextMenuOpen = showerGroup.part.showerTubComboIsActive() ? \"Shower Tub Combo\" : \"Shower\";\r\n if (hoveredZone === \"shower_pony_wall\") {\r\n ponyWallGroup = true;\r\n }\r\n break;\r\n }\r\n case \"vanity_custom\":\r\n contextMenuOpen = \"Vanity\";\r\n break;\r\n case \"bathtub_custom\":\r\n contextMenuOpen = \"Bathtub\";\r\n break;\r\n case \"left_wall_custom\":\r\n contextMenuOpen = \"Shower Body Selection\";\r\n break;\r\n case \"wall_b_custom\":\r\n contextMenuOpen = \"wall_b_custom\";\r\n break;\r\n }\r\n this.setState({\r\n contextMenuOpen,\r\n contextMenuPonyWall: ponyWallGroup,\r\n hoveredLayer: document.hoveredLayer\r\n }, () => {\r\n if (contextMenuOpen) {\r\n setTimeout(() => {\r\n document.addEventListener('click', this.handleContextMenuBlur);\r\n }, 0)\r\n }\r\n });\r\n }\r\n return false;\r\n } else if (this.state.contentType === 0) {\r\n if (!window.canvasIsDragging) {\r\n this.props.setCanvasClass((hoveredZone.child || hoveredZone.parent || hoveredZone).toLowerCase().replace(/ /g, \"-\"));\r\n }\r\n this.openMobileMenu();\r\n }\r\n\r\n hoveredZone.child\r\n ? this.triggerOpenNavigationMenu(hoveredZone.child, hoveredZone.parent, ponyWallGroup)\r\n : this.triggerOpenNavigationMenu(hoveredZone)\r\n\r\n }\r\n\r\n }\r\n\r\n };\r\n\r\n handleNavigationItemClick = (item, ignoreLocked = false, featureIsLocked) => {\r\n const layout = getCurrentLayout();\r\n //console.log('item', item);\r\n if (item.matchesMetaFailed) {\r\n const nonCompatibleWith = item.part.partId === \"vanity_faucet\" ? \"sink\" : \"vanity\";\r\n this.callMetaMathesFailedPopup(item, nonCompatibleWith);\r\n } else if (item.part.partId === \"vanity_sink\" && this.state.parentNavigationItem.part.faucet.placeholderChanged\r\n && this.state.parentNavigationItem.part.faucet.activeFeature) {\r\n const sinkSizeConditionValue = item.part.metaData[\"SinkSize\"][0];\r\n if (this.state.parentNavigationItem.part.faucet.activeFeature.matchesMetaForCondition('SinkSize', sinkSizeConditionValue)) {\r\n this.itemClick(item, ignoreLocked)\r\n } else {\r\n this.callMetaMathesFailedPopup(item, 'faucet');\r\n }\r\n } else if (item.part.partId === \"toilet\") {\r\n const vanity = layout.parts[Vanity.id];\r\n const counterTopSize = vanity.counterTopSize();\r\n if (counterTopSize === \"60in\" || counterTopSize === \"72in\") {\r\n this.callToiletFailPopup('toilet', item, ignoreLocked)\r\n } else {\r\n this.itemClick(item, ignoreLocked)\r\n }\r\n } else if (item.part.partId === \"vanity_cabinet\") {\r\n // let toilet = layout.parts[Toilet.id];\r\n // if (toilet) {\r\n // toilet = toilet.toilet; // toiletBody\r\n // }\r\n // const counterTopSize = item.part.vanitySize + 'in';\r\n // const vanity = layout.parts[Vanity.id];\r\n // const currentCounterTopSize = vanity.counterTopSize();\r\n // if (toilet && toilet.placeholderChanged && (counterTopSize === \"60in\" || counterTopSize === \"72in\")\r\n // && (currentCounterTopSize !== \"60in\" && currentCounterTopSize !== \"72in\")) {\r\n // this.callToiletFailPopup('vanity', item, ignoreLocked)\r\n // } else {\r\n // this.itemClick(item, ignoreLocked)\r\n // }\r\n this.itemClick(item, ignoreLocked);\r\n if (this.props.fabricatorSettings\r\n && (this.props.fabricatorSettings.wizardConsumers || (this.props.fabricatorSettings.wizardClients && document.kvConfig.isBackend))\r\n ) {\r\n if (!featureIsLocked && !item.part.partName.includes(\"laceholder\")) {\r\n this.setWizardFiltersFromActiveItem(item.part)\r\n }\r\n }\r\n } else if (item.part.partId === \"shower_interior_wall\") {\r\n if (!featureIsLocked && !item.part.partName.includes(\"laceholder\")) {\r\n this.setWizardFiltersFromActiveItem(item.part)\r\n }\r\n this.itemClick(item, ignoreLocked)\r\n } else {\r\n this.itemClick(item, ignoreLocked)\r\n }\r\n\r\n this.props.setActiveFeature(item.part);\r\n\r\n const canvasClass = this.state.childNavigationItem\r\n ? this.state.parentNavigationItem.text + '-' + this.state.childNavigationItem.text\r\n : this.state.parentNavigationItem.text;\r\n\r\n if (!window.canvasIsDragging) {\r\n this.props.setCanvasClass(canvasClass.toLowerCase().replace(/ /g, \"-\"));\r\n }\r\n\r\n if (this.state.parentNavigationItem) { // update canvas only if it is child\r\n this.props.refreshCB();\r\n }\r\n };\r\n\r\n handleSubPartClick = subNavigationItem => { // sidebar list item click\r\n const subItemPart = subNavigationItem.part;\r\n subItemPart.getParent().handleSubPartClick(subItemPart);\r\n this.setState({\r\n childNavigationItem: subNavigationItem,\r\n showFilterSelection: subItemPart.allFeaturesReceived, // show filters only if subItemPart has all features\r\n showerWallWizardGroupsSelected: false,\r\n searchText: \"\"\r\n }, () => {\r\n this.scrollContentToTop();\r\n this.rememberWallsSelection();\r\n this.checkIfAllFeaturesReceived(subNavigationItem, \"childNavigationItem\");\r\n });\r\n /*set new materials page subIndex*/\r\n this.setActivePartRelatedItemIndex(subNavigationItem);\r\n // console.log('subItemPart', subItemPart);\r\n if ((subItemPart.getParent() && subItemPart.getParent().partName === \"Walls\")\r\n || subItemPart.partName === \"Accent Wall\" && !window.canvasIsDragging) {\r\n this.props.setCanvasClass(subNavigationItem.text.toLowerCase().replace(/ /g, \"-\"));\r\n }\r\n this.setNewActiveFeature(subNavigationItem);\r\n };\r\n\r\n render() {\r\n const layout = getCurrentLayout();\r\n const activePart = this.state.parentNavigationItem ? this.state.parentNavigationItem.part : null;\r\n const activeSubPart = this.state.childNavigationItem ? this.state.childNavigationItem.part : null;\r\n const parentItems = layout.designNavigationItems(); // parent list without filters\r\n const allFeaturesReceived = (activeSubPart || activePart) && (activeSubPart || activePart).allFeaturesReceived;\r\n\r\n // console.log('activePart', activePart);\r\n // console.log('activeSubPart', activeSubPart);\r\n // console.log('activePart.subTypes()', activePart && activePart.subTypes());\r\n // console.log('this.state.childNavigationItemv1111', this.state.childNavigationItem);\r\n\r\n let useWizard = false;\r\n let wizardGroups = [];\r\n if (this.props.fabricatorSettings\r\n && (this.props.fabricatorSettings.wizardConsumers || (this.props.fabricatorSettings.wizardClients && document.kvConfig.isBackend))\r\n && this.state.contentType === ContentType.Design && activeSubPart && activeSubPart.canUseWizard && activeSubPart.allFeaturesReceived) {\r\n useWizard = true;\r\n wizardGroups = this.state[this.getWizardGroupsByPartId(this.state.childNavigationItem.part.partId)];\r\n }\r\n\r\n const features = this.getFeatures(layout);\r\n\r\n const showLockedView = this.currentActiveItemIsLocked(useWizard);\r\n\r\n // console.log('featuresfeaturesfeatures', features);\r\n\r\n const useFilters = (activePart && activePart.partId === \"floor\" && activePart.allFeaturesReceived)\r\n || (activeSubPart && (this.isWallItem(activeSubPart) || activeSubPart.partId === \"accent_wall\"\r\n || activeSubPart.partId === \"shower_interior_wall_accent\") && activeSubPart.allFeaturesReceived);\r\n\r\n const filterSelectionHasValues = (activeSubPart || activePart) && FilterSelection.getAvailableFilterValues(\r\n this.props.filterGroups, \"Material\", activeSubPart || activePart, this.props.fabricatorData\r\n ).length;\r\n\r\n const itemIsSelected = (!this.props.fabricatorSettings.leadCapture\r\n || (activeSubPart && activeSubPart.activeFeature && activeSubPart.firstClick[this.props.activeQuoteIndex] && activeSubPart.placeholderChanged));\r\n\r\n return (\r\n
    \r\n
    \r\n {/*
    \r\n
    \r\n {this.state.contextMenuOpen\r\n ? \r\n : null}\r\n {showLockedView\r\n ? \r\n : null}\r\n \r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => ({\r\n fabricatorData: store.fabricatorState,\r\n selectedFilters: store.filterState.selectedFilters,\r\n filtersVisible: store.filterState.showFilters,\r\n filterGroups: store.filterState.filterGroups,\r\n bvPresets: store.bathroomVisualizerState.bvPresets,\r\n userPopupOpened: store.userState.userPopupOpened,\r\n layoutParts: store.stepsState.layoutParts,\r\n activeQuoteIndex: store.quotesState.activeQuoteIndex,\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n setNavigationViewType,\r\n setVanityType,\r\n setDefaultSelectionGroup,\r\n changeActivePartRelatedItemIndex,\r\n setNavigationLoading\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(MobileNavigation)\r\n);\r\n","import React, {Fragment} from 'react';\r\nimport {connect} from 'react-redux';\r\nimport PropTypes from 'prop-types';\r\nimport {Grid} from 'react-virtualized';\r\n\r\nimport NavigationItemsList from \"../navigationItemsList\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport UserLoginButton from \"../../../ui/userLoginButton\";\r\nimport {UserPopupTypes} from \"../../constants\";\r\nimport {CABINET_WIZARD_BUTTONS} from \"../../../kvComponent/core/constants\";\r\nimport NavigationFilters from \"../newFilters/navigationFilters\";\r\nimport {getActivePartsCounts} from \"../navUtils\";\r\nimport {\r\n changeActivePartRelatedItemIndex, setCameFromPage, setQtActiveCategory, toggleBathroomVisualizerOpen,\r\n toggleSelectionFeatureInfo, toggleSelectionWindow\r\n} from \"../../../../actions/actionFunctions\";\r\nimport {checkIfNeedToReceiveFeaturesIfFiltersApplied} from \"../../../../misc/filtersFunctions\";\r\n\r\nclass MobileNavigationBodyNewClass extends NavigationItemsList {\r\n\r\n static propTypes = {\r\n features: PropTypes.arrayOf(PropTypes.instanceOf(DesignNavigationItem)),\r\n parentItem: PropTypes.instanceOf(DesignNavigationItem),\r\n childItem: PropTypes.instanceOf(DesignNavigationItem),\r\n toggleUserPopup: PropTypes.func,\r\n onItemClick: PropTypes.func,\r\n userIsLoggedIn: PropTypes.bool,\r\n showMobileMenu: PropTypes.bool,\r\n isPhoneNumberValidated: PropTypes.bool,\r\n activeFeature: PropTypes.object,\r\n searchText: PropTypes.string,\r\n allFeaturesReceived: PropTypes.bool,\r\n existInQtCategory: PropTypes.bool,\r\n layoutName: PropTypes.string\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n showPlaceHolders: document.bvConfig ? document.bvConfig.showPlaceholders : false,\r\n itemClicked: false,\r\n reorderedFeatures: [],\r\n // showLoader: false,\r\n };\r\n this.childItemText = \"\";\r\n this.parentItemText = \"\";\r\n // this._isMounted = false;\r\n }\r\n\r\n componentDidMount() {\r\n this.reorderItems(this.props);\r\n }\r\n\r\n componentWillReceiveProps(nextProps) {\r\n if (\r\n (nextProps.childItem && (nextProps.childItem.text !== this.childItemText))\r\n || (nextProps.showMobileMenu && !this.props.showMobileMenu)\r\n || (!nextProps.childItem && nextProps.parentItem && (nextProps.parentItem.text !== this.parentItemText))\r\n || (this.props.selectedFilters.length !== nextProps.selectedFilters.length)\r\n || (this.props.searchText !== nextProps.searchText)\r\n || (nextProps.allFeaturesReceived && !this.props.allFeaturesReceived)\r\n || (nextProps.bvOpened && !this.props.bvOpened)\r\n || (this.props.features.length !== nextProps.features.length)\r\n || (this.props.features.length && nextProps.features.length && nextProps.features[0] && this.props.features[0] &&\r\n nextProps.features[0].part.getParent().partName !== this.props.features[0].part.getParent().partName)\r\n ) {\r\n // this.setState({\r\n // showLoader: true\r\n // }, () => {\r\n // this.reorderItems(nextProps);\r\n // });\r\n this.reorderItems(nextProps);\r\n }\r\n\r\n if (!nextProps.isPhoneNumberValidated && this.props.isPhoneNumberValidated) { // if user logged out\r\n const fabricatorSettings = nextProps.fabricatorData.settings;\r\n if (fabricatorSettings.leadCapture\r\n && !(document.kvConfig.isBackend && document.kvConfig.jobId && document.kvConfig.canSaveQuote)) {\r\n setTimeout(() => {\r\n this.reorderItems(nextProps);\r\n },0)\r\n }\r\n }\r\n\r\n if (this.needToUpdate && nextProps.features.length !== this.props.features.length) {\r\n this.reorderItems(nextProps);\r\n this.needToUpdate = false;\r\n }\r\n\r\n const childItem = nextProps.childItem && nextProps.childItem.part;\r\n if (childItem && nextProps.selectedFilters.length) {\r\n const checkPassed = checkIfNeedToReceiveFeaturesIfFiltersApplied(nextProps.selectedFilters, childItem);\r\n if (checkPassed) {\r\n this.getFeaturesFromBackendWithFilters(nextProps.childItem.part, checkPassed.arrayOfNeededFiltersToReceive, 1);\r\n }\r\n }\r\n\r\n }\r\n\r\n componentWillUnmount() {\r\n this._isMounted = false;\r\n }\r\n\r\n reorderItems = (props) => {\r\n const selectedFirstItemIndex = this.getActiveItemIndex(props);\r\n const otherSelectedWallsIndexes = this.getSelectedWallIndexes(props.childItem, props.features, selectedFirstItemIndex); // this part is looking for the same stones that are already selected\r\n\r\n const selectedExist = (selectedFirstItemIndex || selectedFirstItemIndex === 0) && selectedFirstItemIndex > -1;\r\n const indexesToReplace = selectedExist ? [selectedFirstItemIndex, ...otherSelectedWallsIndexes] : [...otherSelectedWallsIndexes];\r\n\r\n this.childItemText = props.childItem ? props.childItem.text : \"\";\r\n this.parentItemText = props.parentItem ? props.parentItem.text : \"\";\r\n this.setState({\r\n reorderedFeatures: this.getReorderedItems(indexesToReplace, props, selectedExist)\r\n // }, () => {\r\n // setTimeout(() => {\r\n // if (this._isMounted) {\r\n // this.setState({\r\n // showLoader: false\r\n // })\r\n // }\r\n // }, 50)\r\n });\r\n };\r\n\r\n handleUserLoginClick = (userPopupType = UserPopupTypes.Unlock) => {\r\n UserLoginButton.handleLoginClick({...this.props, userPopupType});\r\n };\r\n\r\n renderLoadingList = (activePart) => {\r\n if (!activePart.counts) {\r\n return
    \r\n }\r\n // console.log('ctivePart.counts', activePart.counts);\r\n const counts = getActivePartsCounts(activePart, this.props.layoutName);\r\n // console.log('counts', counts);\r\n\r\n if (!counts) {\r\n return
    \r\n }\r\n\r\n const elements = [];\r\n for (let i = 0; i < counts; i++ ) {\r\n elements.push(\r\n
  • \r\n
    \r\n
    \r\n
    \r\n
  • \r\n );\r\n }\r\n\r\n return elements\r\n };\r\n\r\n renderVirtualizedGrid = () => {\r\n\r\n const elements = this.getNavItemsList(true);\r\n\r\n const list = [[]]; // making list for React Virtualized\r\n let columnIndex = 0;\r\n elements.forEach((element, index) => {\r\n if (index % this.props.navigationViewType === 0 && (index !== 0)) {\r\n list.push([]);\r\n columnIndex++;\r\n }\r\n list[columnIndex].push(React.cloneElement(element))\r\n });\r\n // console.log('list', list);\r\n\r\n const menuBody = document.querySelector('.menu-body__content');\r\n const menuList = document.querySelector('.menu-list');\r\n return menuList ? (\r\n {\r\n cellRenderer={({columnIndex, key, rowIndex, style}) => {\r\n // if (isScrolling) {\r\n // return (
    \r\n // {this.emptyStone}\r\n // {this.emptyStone}\r\n //
    );\r\n //\r\n // // (
    {this.emptyStone}
    );\r\n // }\r\n // console.log('rowIndex:', rowIndex);\r\n // console.log('columnIndex:', columnIndex);\r\n // console.log('===================');\r\n // console.log('element', element);\r\n return
    \r\n {list[rowIndex][columnIndex]}\r\n
    \r\n }}>\r\n
    \r\n ) : null\r\n };\r\n\r\n render() {\r\n const activePart = this.props.parentItem ? this.props.parentItem.part : null;\r\n const activeSubPart = this.props.childItem ? this.props.childItem.part : null;\r\n const activeNavPart = activeSubPart || activePart;\r\n\r\n const fabricatorSettings = this.props.fabricatorData.settings;\r\n const useWizard = fabricatorSettings &&\r\n (fabricatorSettings.wizardConsumers || (fabricatorSettings.wizardClients && document.kvConfig.isBackend));\r\n\r\n const showNavigationFilters = useWizard && this.props.activeNavigationFilter && activeNavPart\r\n && this.props.activeNavigationFilter !== CABINET_WIZARD_BUTTONS[0].buttonId\r\n && activeNavPart.canUseNavigationFilter && activeNavPart.canUseNavigationFilter();\r\n // const showNavigationFiltersSteps = showNavigationFilters && this.props.activeNavigationFilter !== \"inlay_type\";\r\n\r\n return (\r\n
      \r\n {/*{this.state.showLoader ? (*/}\r\n {/*
      */}\r\n {/*) : this.renderItemsList()}*/}\r\n {this.props.allFeaturesReceived\r\n ? showNavigationFilters\r\n ? \r\n : (\r\n \r\n {this.state.additionalFeaturesLoading || this.props.navigationLoadingActive ? this.getLoadingFeatures() : null}\r\n {this.renderVirtualizedGrid()}\r\n \r\n )\r\n : this.renderLoadingList(activeNavPart)\r\n }\r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => ({\r\n bvOpened: store.bathroomVisualizerState.bvOpened,\r\n selectedFilters: store.filterState.selectedFilters,\r\n filterGroups: store.filterState.filterGroups,\r\n fabricatorData: store.fabricatorState,\r\n activeNavigationFilter: store.navigationState.activeNavigationFilter,\r\n navigationViewType: store.navigationState.navigationViewType,\r\n cartItems: store.cartState.cartItems,\r\n navigationLoadingActive: store.navigationState.navigationLoadingActive,\r\n activeQuoteIndex: store.quotesState.activeQuoteIndex,\r\n});\r\nconst mapDispatchToProps = {\r\n changeActivePartRelatedItemIndex,\r\n toggleSelectionWindow,\r\n toggleSelectionFeatureInfo,\r\n setCameFromPage,\r\n setQtActiveCategory,\r\n toggleBathroomVisualizerOpen\r\n};\r\n\r\nconst MobileNavigationBodyNew = connect(mapStateToProps, mapDispatchToProps)(MobileNavigationBodyNewClass);\r\n\r\n\r\nexport default MobileNavigationBodyNew;\r\n","import React, {Component} from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {connect} from \"react-redux\";\r\nimport {injectIntl} from \"react-intl\";\r\n\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\nimport Analytics from \"../../../analytics\";\r\nimport {getFeatureGroupName} from \"../../../misc/helpers\";\r\n\r\nclass MobileParentNavigationItems extends Component {\r\n\r\n static propTypes = {\r\n onItemClick: PropTypes.func.isRequired\r\n };\r\n\r\n parentItemClick = (parentItemText) => {\r\n Analytics.sendClickEvent('mobile-category-clicked');\r\n Analytics.sendClickEvent('mobile-category-clicked-' + parentItemText);\r\n this.props.onItemClick(parentItemText)\r\n };\r\n\r\n render() {\r\n const layout = getCurrentLayout();\r\n const parentItems = layout.designNavigationItems(); // no params, all default\r\n\r\n const {intl, fabricatorData} = this.props;\r\n\r\n return (\r\n
      \r\n {parentItems.map((parentItem, parentItemIndex) => {\r\n const style = {\r\n backgroundImage: `url(${parentItem.part.partThumbnail})`,//TODO\r\n };\r\n if (parentItem.part.partThumbnailSize) {\r\n style.backgroundSize = Math.round(parentItem.part.partThumbnailSize.split(\"%\")[0]/1.5)+\"%\";\r\n style.backgroundPosition = \"top 30% center\";\r\n }\r\n if (parentItem.part.partThumbnail.includes(\"countertop\")\r\n || parentItem.part.partThumbnail.includes(\"toilet\")) {\r\n style.backgroundSize = \"80%\";\r\n }\r\n return (\r\n
    • this.parentItemClick(parentItem.text)}>\r\n
      \r\n
      \r\n \r\n {getFeatureGroupName(parentItem.part, intl, fabricatorData)}\r\n \r\n
      \r\n
      \r\n
    • \r\n )\r\n })}\r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n fabricatorData: store.fabricatorState\r\n }\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, {})(MobileParentNavigationItems)\r\n);\r\n\r\n\r\n","import React, {Component} from 'react';\r\nimport {connect} from \"react-redux\";\r\nimport $ from \"jquery\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport ActionTypes from \"../../misc/actionTypes\";\r\nimport Analytics from './../../analytics';\r\nimport UserLoginButton from './../ui/userLoginButton';\r\nimport {toggleUserPopup} from \"../../actions/actionFunctions\";\r\nimport {loaderDisable, loaderEnable} from \"../ui/loaderView\";\r\nimport {saveQuote} from \"../../api/server-api\";\r\nimport {QuoteRequestType, UserPopupTypes} from \"../visComponents/constants\";\r\nimport {showQuoteSavedNotification} from \"../ui/successNotification\";\r\n\r\nexport class QuoteButton extends Component {\r\n\r\n handleSaveQuote = () => {\r\n const fabricatorSettings = this.props.fabricatorData.settings;\r\n const getQuoteEnabled = fabricatorSettings.enableQuote;\r\n if (!UserLoginButton.handleLoginClick({\r\n ...this.props,\r\n saveQuoteAfterLogin: true,\r\n userPopupType: UserPopupTypes.GetQuote\r\n })) {\r\n Analytics.sendClickEvent(getQuoteEnabled ? \"get-quote-button-show-login\" : \"quote-button-show-login\");\r\n } else {\r\n Analytics.sendClickEvent(getQuoteEnabled ? \"get-quote-button\" : \"quote-button\");\r\n this.saveQuoteSubmit();\r\n }\r\n };\r\n\r\n saveQuoteSubmit = () => {\r\n loaderEnable(\"loader.savingQuoteText\");\r\n $(document).trigger(ActionTypes.REMOVE_GREEN_ZONE_ON_CANVAS, () => {\r\n saveQuote({submit: true, yesNoConsultationRequest: false, quoteRequestType: QuoteRequestType.RequestQuote})\r\n .then((response) => {\r\n if (response) {\r\n let responseDataBase = response;\r\n if (response.data) {\r\n responseDataBase = response.data;\r\n }\r\n const responseData = typeof responseDataBase === 'object' ? responseDataBase : JSON.parse(responseDataBase);\r\n console.log('saveQuote response:', responseData);\r\n loaderDisable();\r\n }\r\n showQuoteSavedNotification(\"successNotification.titleQuoteRequested\");\r\n // downloadCanvasImageById(this.props.canvasId);\r\n }).catch((error) => {\r\n console.log('saveQuote error:', error);\r\n loaderDisable();\r\n })\r\n });\r\n };\r\n\r\n render() {\r\n return (\r\n \r\n )\r\n }\r\n\r\n}\r\nconst mapStateToProps = (store) => ({\r\n userIsLoggedIn: store.userState.userIsLoggedIn,\r\n isPhoneNumberValidated: store.userState.isPhoneNumberValidated,\r\n fabricatorData: store.fabricatorState\r\n});\r\nexport default connect(mapStateToProps, {\r\n toggleUserPopup,\r\n})(QuoteButton);\r\n","import React, {Component} from 'react';\r\nimport {connect} from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\nimport $ from \"jquery\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport ActionTypes from \"../../misc/actionTypes\";\r\nimport Analytics from './../../analytics';\r\nimport {toggleUserPopup, changeMessageBoxState} from \"../../actions/actionFunctions\";\r\n\r\n// import QuoteButton from \"./quoteButton\";\r\nimport ScheduleButton from \"./scheduleButton\";\r\nimport {ContentType} from \"../visComponents/constants\";\r\nimport {getShowOtherLayouts} from \"../visComponents/navigation/navUtils\";\r\n\r\nexport class DesignButton extends Component {\r\n\r\n static propTypes = {\r\n quoteEnabled: PropTypes.bool.isRequired,\r\n handleResetButtonClick: PropTypes.func.isRequired,\r\n };\r\n\r\n componentWillReceiveProps(nextProps) {\r\n if (nextProps.visualizerTutorialStep === 2 && this.props.visualizerTutorialStep === 1) {\r\n this.toggleDesignList();\r\n }\r\n }\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n designListOpened: false,\r\n };\r\n }\r\n\r\n handleWrapperBlur = (e) => {\r\n if (!e.target.closest('.des-list__item .mobilebutton') && !e.target.closest('.des')) {\r\n this.toggleDesignList();\r\n }\r\n };\r\n\r\n toggleDesignList = () => {\r\n if(!this.state.designListOpened)\r\n Analytics.sendClickEvent('design-list-toggle-opened');\r\n else\r\n Analytics.sendClickEvent('design-list-toggle-closed');\r\n\r\n this.setState({\r\n designListOpened: !this.state.designListOpened\r\n }, () => {\r\n if (this.state.designListOpened) {\r\n document.addEventListener('click', this.handleWrapperBlur);\r\n } else {\r\n document.removeEventListener('click', this.handleWrapperBlur);\r\n }\r\n })\r\n };\r\n\r\n handleDesignButtonClick = (analyticsEvent, contentType) => {\r\n Analytics.sendClickEvent(analyticsEvent);\r\n $(document).trigger(ActionTypes.OPEN_MOBILE_NAVIGATION); // open navigation\r\n $(document).trigger(ActionTypes.CHANGE_MOBILE_MENU_CONTENT_TYPE, [contentType]); // set navigation type\r\n this.toggleDesignList(); // close design buttons //\r\n };\r\n\r\n handleDesignResetClick = () => {\r\n Analytics.sendClickEvent(\"design-buttons-reset-button\");\r\n this.toggleDesignList(); // close design buttons\r\n this.props.handleResetButtonClick();\r\n };\r\n\r\n render() {\r\n\r\n const fabricatorSettings = this.props.fabricatorData.settings;\r\n const showOtherLayouts = getShowOtherLayouts(fabricatorSettings);\r\n\r\n return (\r\n
    \r\n \r\n
      \r\n
    • \r\n \r\n
    • \r\n
    • \r\n \r\n
    • \r\n {showOtherLayouts ? (\r\n
    • \r\n \r\n
    • \r\n ) : null}\r\n
    • \r\n \r\n
    • \r\n \r\n {/*{this.props.quoteEnabled ? (*/}\r\n {/*
    • */}\r\n {/**/}\r\n {/*
    • */}\r\n {/*) : null}*/}\r\n
    \r\n
    \r\n )\r\n }\r\n\r\n}\r\nconst mapStateToProps = (store) => ({\r\n userIsLoggedIn: store.userState.userIsLoggedIn,\r\n isPhoneNumberValidated: store.userState.isPhoneNumberValidated,\r\n fabricatorData: store.fabricatorState,\r\n visualizerTutorialStep: store.tutorialState.visualizerTutorialStep,\r\n visualizersLoadedLength: store.serverState.visualizersLoaded.length,\r\n});\r\nexport default connect(mapStateToProps, {\r\n toggleUserPopup,\r\n changeMessageBoxState\r\n})(DesignButton);\r\n","import React from \"react\";\r\nimport {connect} from \"react-redux\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport goToMaterialPage from \"./goToMaterialPage\";\r\nimport {showMaterialsTutorial} from \"../../actions/tutorialFunctions\";\r\nimport {toggleBathroomVisualizerOpen} from \"../../actions/actionFunctions\";\r\n\r\nclass MinimizeButton extends React.Component {\r\n\r\n componentWillReceiveProps(nextProps) {\r\n if (nextProps.visualizerTutorialStep === 1 && !this.props.visualizerTutorialStep) {\r\n this.backToQuote();\r\n }\r\n }\r\n\r\n backToQuote = () => {\r\n goToMaterialPage('visualizer');\r\n this.props.toggleBathroomVisualizerOpen(false);\r\n if (!this.props.materialsTutorialFinished) {\r\n this.props.showMaterialsTutorial(true);\r\n }\r\n };\r\n\r\n render() {\r\n return (\r\n \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n visualizerTutorialStep: store.tutorialState.visualizerTutorialStep,\r\n materialsTutorialFinished: store.tutorialState.materialsTutorialFinished,\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, {\r\n toggleBathroomVisualizerOpen,\r\n showMaterialsTutorial\r\n})(MinimizeButton);\r\n","export function downloadCSV(data) {\r\n\r\n let csvRows = []; //https://gist.github.com/yangshun/01b81762e8d30f0d7f8f\r\n for (let i = 0; i < data.length; ++i) {\r\n // for (var j = 0; j < data[i].length; ++j) {\r\n // data[i][j] = '\\\"' + data[i][j] + '\\\"'; // Handle elements that contain commas\r\n // }\r\n csvRows.push(data[i].join(','));\r\n }\r\n\r\n const csvContent = csvRows.join('\\r\\n');\r\n\r\n// The download function takes a CSV string, the filename and mimeType as parameters\r\n// Scroll/look down at the bottom of this snippet to see how download is called\r\n const download = function(content) {\r\n const a = document.createElement('a');\r\n const fileName = 'download.csv';\r\n const blobConfig = {\r\n encoding: \"UTF-8\",\r\n type: \"text/plain;charset=UTF-8\" // 'application/octet-stream'; // 'text/csv;encoding:utf-8'\r\n };\r\n if (navigator.msSaveBlob) { // IE10\r\n navigator.msSaveBlob(new Blob([content], blobConfig), fileName);\r\n } else if (URL && 'download' in a) { //html5 A[download]\r\n a.href = URL.createObjectURL(new Blob([content], blobConfig));\r\n a.setAttribute('download', fileName);\r\n document.body.appendChild(a);\r\n a.click();\r\n document.body.removeChild(a);\r\n } else {\r\n location.href = 'data:application/octet-stream,' + encodeURIComponent(content); // only this mime type is supported\r\n }\r\n };\r\n\r\n download(csvContent);\r\n}\r\n","import React from \"react\";\r\n\r\nconst DemoPoint = (props) => (\r\n
    \r\n \r\n \r\n \r\n
    \r\n);\r\n\r\nDemoPoint.displayName = \"DemoPoint\";\r\nexport default DemoPoint","import React from \"react\";\r\nimport {connect} from \"react-redux\";\r\n\r\nimport COLOR_THEMES from \"../../../colorThemes\";\r\n\r\n\r\nconst ExclamationMarkIcon = (props) => {\r\n\r\n const {activeTheme} = props;\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n )\r\n}\r\n\r\nconst mapStateToProps = store => {\r\n const {activeTheme} = store.serverState;\r\n return {\r\n activeTheme\r\n }\r\n};\r\n\r\nexport default connect(mapStateToProps)(ExclamationMarkIcon)\r\n","import uniq from \"lodash/uniq\";\r\n\r\nimport Config from \"../config\";\r\nimport store from \"../store\";\r\nimport {setCustomAddedDiscounts, setDiscountSections, setFinancePercentage} from \"../actions/priceWorksheetActions\";\r\nimport {getBvFeatures, getDiscounts} from \"./server-api\";\r\nimport {getArrayOfIdsFromBvState} from \"../misc/helpers\";\r\nimport {setActiveQuoteIndex, setQuotes} from \"../actions/roomsFunctions\";\r\nimport {objectWithoutProperties} from \"../misc/helpers\";\r\nimport {createFakeLayout, getCurrentLayout, getVisualizerTypeFromBvScene} from \"../bvcomponents/appLayout\";\r\nimport {\r\n changeUserInfo,\r\n setFirstLoadedPreset, setStonePricing,\r\n setUserPhoneNumberValidated,\r\n toggleUserPopup\r\n} from \"../actions/actionFunctions\";\r\nimport {getImagePromiseFromLayout} from \"../misc/getCanvasImageFromLayout\";\r\nimport Misc from \"../misc/misc\";\r\nimport {setAmazonImageUrl} from \"../actions/serverFunctions\";\r\nimport {restorePaymentInfo} from \"../actions/paymentFunctions\";\r\nimport Analytics from \"../analytics\";\r\nimport {restoreAllWizardSelectedValues, setWizardList} from \"../actions/wizardFunctions\";\r\nimport {getQuoteInfo} from \"../misc/quotesFunctions\";\r\nimport JsonApi from \"./jsonApi\";\r\nimport {getParsedWizardList} from \"../bvcomponents/look/lookNavigation/lookMain/lookWizard/lookWizardFunctions2\";\r\nimport {parseMarkUp} from \"../misc/priceFunctions\";\r\nimport {setMarkUpLogic} from \"../actions/shoppingCartFunctions\";\r\nimport {DISCOUNT_MAIN_TYPES} from \"../bvcomponents/priceWorksheet/discounstInterface\";\r\n\r\n/**\r\n * Sets noteText for loaded features\r\n * @param notesFeatures {Array.}\r\n * @param layout\r\n */\r\nconst setNotesToFeatures = (notesFeatures = [], layout) => {\r\n const parents = layout.getFeatures(true); // we need other groups too\r\n notesFeatures.forEach((notesFeature) => {\r\n parents.forEach(parent => {\r\n const subParts = parent.subParts();\r\n subParts.forEach(subPart => {\r\n Object.keys(subPart.part.featuresList).forEach(layoutName => {\r\n const featureFound = subPart.part.featuresList[layoutName].find(feature => {\r\n return feature.dbFeature.id === notesFeature.id\r\n })\r\n if (featureFound) {\r\n featureFound.notesList[notesFeature.currentQuote] = notesFeature.noteText;\r\n // console.log(\"featureFound\", featureFound);\r\n }\r\n })\r\n });\r\n })\r\n })\r\n};\r\n\r\n\r\n/**\r\n * checks if we need to do multiple features requests\r\n * @param records {Array<{}>}\r\n * @param fabricatorState {object}\r\n * @param serverState {object}\r\n * @returns boolean\r\n */\r\nconst hasMultipleVisualizers = (records, fabricatorState, serverState) => {\r\n console.log(\"serverState.initialVisualizerType\", serverState.initialVisualizerType);\r\n return fabricatorState.settings.allowVisualizerSwitching\r\n && records.some(room => {\r\n return room.data && room.data.visualizerType && (room.data.visualizerType !== serverState.initialVisualizerType)\r\n })\r\n}\r\n\r\n/**\r\n * when the new customer is created - the system creates a job for him with only one userState property\r\n * @param jobResponse {object}\r\n * @param bvState {object}\r\n * @returns {boolean}\r\n */\r\nexport const isNewlyCreatedJob = (jobResponse, bvState) => {\r\n\r\n if (jobResponse && !bvState) {\r\n if (Array.isArray(jobResponse.records) && jobResponse.records.length) {\r\n const records = jobResponse.records.filter(record => record && record.data);\r\n if (records.length === 1) {\r\n bvState = records[0].data;\r\n }\r\n } else { // whoa, nothing there, so it's probably a brand new job, let's load default preset\r\n return true\r\n }\r\n }\r\n\r\n return bvState && (Object.keys(bvState).length === 1) && bvState.userState\r\n}\r\n\r\n/**\r\n * loads features and notes and also stone pricings\r\n * @param records {Array<{}>}\r\n * @param activeQuoteIndex {number}\r\n * @returns {Promise} loaded features\r\n */\r\nconst loadFeaturesAndNotesForMultipleLayouts = async (records, activeQuoteIndex) => {\r\n let featuresToReturn = [];\r\n\r\n const differentVisualizers = {};\r\n records.forEach((record, recordIndex) => {\r\n if (!differentVisualizers[record.data.visualizerType]) {\r\n differentVisualizers[record.data.visualizerType] = {\r\n arrayOfFeaturesIds: [],\r\n notesFeatures: [],\r\n }\r\n }\r\n const currentObject = differentVisualizers[record.data.visualizerType];\r\n record.features.forEach((feature) => {\r\n if (feature.fabricatorFeature_id) {\r\n if (!currentObject.arrayOfFeaturesIds.includes(feature.fabricatorFeature_id)) {\r\n currentObject.arrayOfFeaturesIds.push(feature.fabricatorFeature_id);\r\n }\r\n if (feature.noteText) {\r\n currentObject.notesFeatures.push({\r\n id: feature.fabricatorFeature_id,\r\n noteText: feature.noteText,\r\n currentQuote: recordIndex\r\n })\r\n }\r\n }\r\n });\r\n currentObject.arrayOfFeaturesIds = uniq([\r\n ...currentObject.arrayOfFeaturesIds, // here we add all cartItems features\r\n ...getArrayOfIdsFromBvState(record.data) // and then we add all active features from the quotes\r\n ]);\r\n });\r\n for (const visualizerType of Object.keys(differentVisualizers)) {\r\n const currentObject = differentVisualizers[visualizerType];\r\n const forLayout = getCurrentLayout(visualizerType);\r\n const featuresFromJob = await getBvFeatures(currentObject.arrayOfFeaturesIds, null, false, visualizerType);\r\n if (featuresFromJob && featuresFromJob.data) {\r\n // console.log(\"featuresFromJob\", featuresFromJob.data);\r\n const nextBvState = records[activeQuoteIndex] ? records[activeQuoteIndex].data : null;\r\n forLayout.loadNewFeatures(featuresFromJob.data, null, true, nextBvState);\r\n if (visualizerType === document.kvConfig.visualizerType) {\r\n featuresToReturn = featuresFromJob.data;\r\n }\r\n }\r\n setNotesToFeatures(currentObject.notesFeatures, forLayout) // here we set notes\r\n\r\n // we also need stone pricing!! to be able to show correct price\r\n if (visualizerType !== document.kvConfig.visualizerType) { // skip current, it was already downloaded\r\n const mainResponse = await JsonApi.getBathroomVisualizerData(30, visualizerType);\r\n console.log(\"mainResponse for stonePricing\", mainResponse);\r\n if (mainResponse && mainResponse.data && mainResponse.data.stonePricing) {\r\n store.dispatch(setStonePricing(mainResponse.data.stonePricing)); // we need to set stone pricing for cart features\r\n }\r\n if (mainResponse && mainResponse.data && (mainResponse.data.wizardData || mainResponse.data.wizardDataV2)) {\r\n const wizardList = getParsedWizardList(mainResponse.data, false, visualizerType);\r\n store.dispatch(setWizardList(wizardList));\r\n }\r\n }\r\n }\r\n\r\n return featuresToReturn\r\n}\r\n\r\nconst getBvStateProperty = (responseData, activeQuoteIndex, property = \"\") => {\r\n if (!responseData.records || !Array.isArray(responseData.records) || !responseData.records.length) {\r\n return null\r\n }\r\n return responseData.records[0].data[property] ||\r\n responseData.records[activeQuoteIndex] && responseData.records[activeQuoteIndex].data\r\n ? responseData.records[activeQuoteIndex].data[property]\r\n : null;\r\n}\r\n\r\nexport const parseJobIdResponse = async (responseData, isDesignOnly = false) => {\r\n const {fabricatorState, serverState} = store.getState();\r\n const layout = getCurrentLayout();\r\n if (Config.isDevMode()) {\r\n console.log(`getJobId ${document.kvConfig.jobId}:`, responseData);\r\n }\r\n let activeQuoteIndex = 0;\r\n if (Array.isArray(responseData.records) && responseData.records.length) {\r\n responseData.records = responseData.records.filter(record => record && record.data);\r\n const firstRecord = responseData.records[0];\r\n if (firstRecord) {\r\n activeQuoteIndex = firstRecord.data.activeQuoteIndex || 0;\r\n let loadedFeaturesFromJob = [];\r\n if (hasMultipleVisualizers(responseData.records, fabricatorState, serverState)) {\r\n loadedFeaturesFromJob = await loadFeaturesAndNotesForMultipleLayouts(responseData.records, activeQuoteIndex);\r\n } else {\r\n let notesFeatures = [];\r\n let arrayOfFeaturesIds = [];\r\n responseData.records.forEach((rec, recIndex) => {\r\n if (Array.isArray(rec.features) && rec.features.length) {\r\n rec.features.forEach((feature) => {\r\n if (feature.fabricatorFeature_id) {\r\n arrayOfFeaturesIds.push(feature.fabricatorFeature_id)\r\n if (feature.noteText) {\r\n notesFeatures.push({\r\n id: feature.fabricatorFeature_id,\r\n noteText: feature.noteText,\r\n currentQuote: recIndex\r\n })\r\n }\r\n }\r\n })\r\n }\r\n });\r\n responseData.records.forEach((rec) => {\r\n arrayOfFeaturesIds = uniq([\r\n ...arrayOfFeaturesIds, // here we add all cartItems features\r\n ...getArrayOfIdsFromBvState(rec.data) // and then we add all active features from the quotes\r\n ])\r\n })\r\n const featuresFromJob = await getBvFeatures(arrayOfFeaturesIds);\r\n if (featuresFromJob && featuresFromJob.data) {\r\n loadedFeaturesFromJob = featuresFromJob.data;\r\n // console.log(\"featuresFromJob\", featuresFromJob.data);\r\n const nextBvState = responseData.records[activeQuoteIndex] ? responseData.records[activeQuoteIndex].data : null;\r\n layout.loadNewFeatures(featuresFromJob.data, null, true, nextBvState);\r\n }\r\n setNotesToFeatures(notesFeatures, layout) // here we set notes\r\n }\r\n\r\n // restore wizard before the cart! to make sure cart is restored with proper display logic items that need wizard selections\r\n const allWizardValues = getBvStateProperty(responseData, activeQuoteIndex, \"allWizardsValues\");\r\n if (allWizardValues) {\r\n await store.dispatch(restoreAllWizardSelectedValues([...allWizardValues]));\r\n delete firstRecord.data.allWizardsValues; // we don't need it anymore, prevent overwriting\r\n if (responseData.records[activeQuoteIndex] && responseData.records[activeQuoteIndex].data && responseData.records[activeQuoteIndex].data.allWizardsValues) {\r\n delete responseData.records[activeQuoteIndex].data.allWizardsValues\r\n }\r\n }\r\n\r\n if (responseData.records[activeQuoteIndex] && responseData.records[activeQuoteIndex].data) { // just in case\r\n const restoreCartFeatures = isDesignOnly ? false : loadedFeaturesFromJob\r\n const nextBvState = responseData.records[activeQuoteIndex].data;\r\n if (isNewlyCreatedJob(null, nextBvState)) {\r\n if (restoreCartFeatures) {\r\n layout.setCartStateAndUserStateFromBvState(nextBvState);\r\n }\r\n } else {\r\n layout.setActiveFeaturesFromObject(\r\n responseData.records[activeQuoteIndex].data,\r\n restoreCartFeatures,\r\n false,\r\n true,\r\n true,\r\n false\r\n ); // here we set bvState! and restore cart!!\r\n }\r\n }\r\n if (firstRecord.imageUrl) {\r\n store.dispatch(setAmazonImageUrl(firstRecord.imageUrl));\r\n }\r\n if (firstRecord.data.id) {\r\n store.dispatch(setFirstLoadedPreset(firstRecord.data.id));\r\n }\r\n }\r\n\r\n let newQuotes = [];\r\n for (const [recordIndex, record] of responseData.records.entries()) {\r\n //1) detect visualizer layout\r\n const visType = getVisualizerTypeFromBvScene(record.data, record);\r\n\r\n record.room = visType; // this might change coming incorrect visualizer!\r\n\r\n let image = \"\";\r\n if (responseData.records.length === 1 || (recordIndex === activeQuoteIndex)) {\r\n image = await getImagePromiseFromLayout(layout, null, 0.7, true);\r\n } else {\r\n let fakeLayout = createFakeLayout(getCurrentLayout(visType));\r\n let bvState = record.data;\r\n if (responseData.records.length === 1 && Object.keys(bvState).length <= 2) { // new created quote\r\n bvState = layout.getActiveFeaturesAsObject(false, false, true);\r\n }\r\n //2) set visualizer layout features\r\n await fakeLayout.setItemsFromBvState(bvState, false, null, true);\r\n //3) create quote image\r\n image = await getImagePromiseFromLayout(fakeLayout, null, 0.7, true);\r\n }\r\n\r\n //4) set quote other info\r\n let quoteObject = await getQuoteInfo(recordIndex, null, false, \"\", image);\r\n\r\n quoteObject.quoteId = record.id;\r\n quoteObject.data = objectWithoutProperties(record.data, [\"installations\", \"cartState\", \"userState\", \"allWizardsValues\"]);\r\n quoteObject.layoutType = record.data.layout_type;\r\n quoteObject.room = record.room;\r\n quoteObject.sqFtCalcData = record.sqFtCalcData;\r\n quoteObject.bvImage = image;\r\n newQuotes.push(quoteObject);\r\n }\r\n\r\n if (newQuotes.length) {\r\n store.dispatch(setQuotes([...newQuotes]));\r\n if (newQuotes[activeQuoteIndex]) {\r\n store.dispatch(setActiveQuoteIndex(activeQuoteIndex));\r\n }\r\n }\r\n }\r\n if (Array.isArray(responseData.discountSections) && responseData.discountSections.length && !isDesignOnly) {\r\n await getDiscounts();\r\n let allDiscountSections = store.getState().priceWorksheetState.discountSections;\r\n // console.log(\"allDiscountSections\", allDiscountSections);\r\n // console.log(\"responseData.discountSections\", responseData.discountSections);\r\n const priceWorkSheetLogic = getBvStateProperty(responseData, activeQuoteIndex, \"priceWorkSheetLogic\");\r\n if (priceWorkSheetLogic) {\r\n if (Array.isArray(priceWorkSheetLogic.customAddedDiscounts) && priceWorkSheetLogic.customAddedDiscounts.length) {\r\n store.dispatch(setCustomAddedDiscounts(priceWorkSheetLogic.customAddedDiscounts));\r\n }\r\n if (priceWorkSheetLogic.financePercentage) {\r\n store.dispatch(setFinancePercentage(priceWorkSheetLogic.financePercentage));\r\n }\r\n if (priceWorkSheetLogic.selectedDiscounts) {\r\n allDiscountSections = allDiscountSections.map((discountSection) => {\r\n discountSection.discounts = discountSection.discounts.map(discount => {\r\n const sameDiscountSaved = priceWorkSheetLogic.selectedDiscounts.find(dis => {\r\n return (discount.uuId === dis.uuId) || (discount.id === dis.id && (discountSection.id === dis.categoryId))\r\n });\r\n if (sameDiscountSaved) {\r\n discount.selected = true;\r\n if (discount.isRidged) {\r\n discount.name = sameDiscountSaved.name;\r\n discount.amount = sameDiscountSaved.amount;\r\n } else if (sameDiscountSaved.discountType === DISCOUNT_MAIN_TYPES.deposit) {\r\n discount.amount = sameDiscountSaved.amount;\r\n discount.type = sameDiscountSaved.type; // if it was percentage - we convert it to price\r\n } else if (sameDiscountSaved.discountType === DISCOUNT_MAIN_TYPES.finance) {\r\n discount.financeOptions = sameDiscountSaved.financeOptions\r\n }\r\n }\r\n return discount\r\n })\r\n return discountSection\r\n })\r\n }\r\n } else {\r\n responseData.discountSections.forEach((selectedDiscountSection) => {\r\n let discountSectionFound = false;\r\n allDiscountSections = allDiscountSections.map((discountSection) => {\r\n if (selectedDiscountSection.id === discountSection.id || selectedDiscountSection.name === discountSection.name) {\r\n selectedDiscountSection.discounts.forEach(selectedDiscount => {\r\n let discountFound = false;\r\n discountSection.discounts.map(discount => {\r\n if (selectedDiscount.id === discount.id\r\n || [\"name\", \"amount\"].every(property => selectedDiscount[property] === discount[property])\r\n || [\"isRidged\", \"mode\", \"order\", \"type\"].every(property => selectedDiscount[property] === discount[property])) {\r\n discount.selected = true;\r\n discountFound = true;\r\n if (discount.isRidged) {\r\n discount.name = selectedDiscount.name;\r\n discount.amount = selectedDiscount.amount;\r\n }\r\n }\r\n return discount\r\n });\r\n if (!discountFound) {\r\n console.log(\"No discount found! Pls call administrator\"); // haha funny. this happens when discounts are changed, and old quotes opened\r\n selectedDiscount.id = Misc.getRandomInt(0, 9999999999);\r\n selectedDiscount.oldDeleted = true;\r\n discountSection.discounts.push(selectedDiscount)\r\n }\r\n })\r\n discountSectionFound = true;\r\n }\r\n return discountSection\r\n });\r\n if (!discountSectionFound) {\r\n selectedDiscountSection.discounts.forEach(disc => {\r\n disc.oldDeleted = true;\r\n })\r\n allDiscountSections.push(selectedDiscountSection)\r\n }\r\n })\r\n }\r\n store.dispatch(setDiscountSections(allDiscountSections));\r\n }\r\n if (responseData.user && responseData.user.values && !isDesignOnly) { // update user state\r\n const savedCountry = responseData.records\r\n && responseData.records[activeQuoteIndex]\r\n && responseData.records[activeQuoteIndex].data\r\n && responseData.records[activeQuoteIndex].data.userState\r\n && responseData.records[activeQuoteIndex].data.userState.userInfo\r\n && responseData.records[activeQuoteIndex].data.userState.userInfo.shipping\r\n && responseData.records[activeQuoteIndex].data.userState.userInfo.shipping.country\r\n ? responseData.records[activeQuoteIndex].data.userState.userInfo.shipping.country\r\n : responseData.user.shippingAddress ? responseData.user.shippingAddress.country : \"\";\r\n const newUserInfo = Misc.parseUserResponse(responseData.user, savedCountry);\r\n if (Config.isDevMode()) {\r\n console.log(\"parseResponse newUserInfo\", newUserInfo);\r\n }\r\n store.dispatch(changeUserInfo(newUserInfo));\r\n store.dispatch(setUserPhoneNumberValidated(true));\r\n if (responseData.user.encodedUserId) {\r\n Analytics.setUserId(responseData.user.encodedUserId);\r\n store.dispatch(toggleUserPopup({\r\n encodedUserId: responseData.user.encodedUserId,\r\n }));\r\n }\r\n }\r\n if (responseData.user && (responseData.user.billingAddress || responseData.user.shippingAddress)) { // update user state\r\n store.dispatch(restorePaymentInfo(Misc.parseShippingAndBillingResponse(responseData.user)));\r\n }\r\n if (responseData.jobMarkUp) {// restore mark up\r\n const globalMarkUp = parseMarkUp(responseData.jobMarkUp);\r\n if (globalMarkUp) {\r\n store.dispatch(setMarkUpLogic(globalMarkUp)) // override cartState, because it was changed in the job board\r\n }\r\n }\r\n}\r\n","import uniqBy from \"lodash/uniqBy\";\r\n\r\nimport {Part} from \"../part\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport {floorThumbnail} from \"../assets\";\r\n\r\nimport {IntermediatePart} from \"../intermediatePart\";\r\n\r\nexport default class Floor extends Part {\r\n static id = 'Floor';\r\n\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n this.partId = 'kitchen_floor';\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Floor';\r\n this.homePageTitle = 'Flooring';\r\n this.translateId = \"visualizer.kitchen.kitchen_floor\";\r\n this.partThumbnail = floorThumbnail;\r\n }\r\n\r\n load(dbFeature) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Floor\":\r\n relatedItemName = \"floorBody\";\r\n RelatedItemClass = FloorBody;\r\n break;\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n if (relatedItemName !== \"shadows\") {\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n navigationItem() {\r\n return new DesignNavigationItem('Floor', this)\r\n }\r\n}\r\n\r\nclass FloorBody extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.isStoneFeature = true;\r\n this.partId = 'kitchen_floor';\r\n this.partName = 'Floor';\r\n this.translateId = \"visualizer.kitchen.kitchen_floor\";\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new FloorBody());\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const navSubItems = this.getFeaturesBySearchText(this.getFilteredFeaturesByFilters(filters), searchText)\r\n .map(_ => new DesignNavigationItem(_.featureName, _)); // 1) filter them by filters 2) filter them by search\r\n return uniqBy(navSubItems, (navItem) => navItem.part.dbFeature.sharedFeatureName)\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Floor;\r\n }\r\n }\r\n}\r\n","import {Part} from \"../part\";\r\nimport {wallsThumbnail} from \"../assets\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\n\r\nimport Baseboard from \"../subparts/globals/baseboard\";\r\n// import CeilingHighlights from \"../subparts/globals/ceilingHighlights\";\r\nimport CeilingLights from \"../subparts/globals/ceilingLights\";\r\nimport GlobalShadow from \"../subparts/globals/globalShadow\";\r\nimport Decor1 from \"../subparts/globals/decor1\";\r\nimport Decor2 from \"../subparts/globals/decor2\";\r\nimport Decor3 from \"../subparts/globals/decor3\";\r\n\r\nexport default class Globals extends Part {\r\n static id = 'Globals';\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Globals';\r\n this.partThumbnail = wallsThumbnail;\r\n\r\n // related items\r\n this.baseboard = null;\r\n this.ceilingHighlights = null;\r\n this.ceilingLights = null;\r\n this.globalShadow = null;\r\n this.decor1 = null;\r\n this.decor2 = null;\r\n this.decor3 = null;\r\n }\r\n\r\n load(dbFeature) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Baseboard\":\r\n relatedItemName = \"baseboard\";\r\n RelatedItemClass = Baseboard;\r\n break;\r\n // case \"Ceiling Highlight\":\r\n // relatedItemName = \"ceilingHighlights\";\r\n // RelatedItemClass = CeilingHighlights;\r\n // break;\r\n case \"Ceiling Lights\":\r\n relatedItemName = \"ceilingLights\";\r\n RelatedItemClass = CeilingLights;\r\n break;\r\n case \"Global Shadow\":\r\n relatedItemName = \"globalShadow\";\r\n RelatedItemClass = GlobalShadow;\r\n break;\r\n case \"Decor\":\r\n if (dbFeature.displayName.includes(\"Part2\")) {\r\n relatedItemName = \"decor2\";\r\n RelatedItemClass = Decor2;\r\n } else if (dbFeature.displayName.includes(\"Island\")) {\r\n relatedItemName = \"decor3\";\r\n RelatedItemClass = Decor3;\r\n } else {\r\n relatedItemName = \"decor1\";\r\n RelatedItemClass = Decor1;\r\n }\r\n break;\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n navigationItem() {\r\n return new DesignNavigationItem('Globals', this);\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n handleSubPartClick() {\r\n\r\n }\r\n\r\n}","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class Baseboard extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'baseboard';\r\n this.partName = 'Baseboard';\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new Baseboard());\r\n }\r\n\r\n setLayers(layout) {\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault(layout);\r\n return super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n return [{\r\n propName: 'RoomLayout',\r\n propValue: this.getParent().layout.getCurrentLayoutAbbreviation()\r\n }];\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Globals.Baseboard;\r\n }\r\n }\r\n}","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class CeilingLights extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'ceiling_lights';\r\n this.partName = 'Ceiling Lights';\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new CeilingLights());\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Globals.CeilingLights;\r\n }\r\n }\r\n}","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class GlobalShadow extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'global_shadow';\r\n this.partName = 'Global Shadow';\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new GlobalShadow());\r\n }\r\n\r\n setLayers(layout) {\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault(layout);\r\n return super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n return [{\r\n propName: 'RoomLayout',\r\n propValue: this.getParent().layout.getCurrentLayoutAbbreviation()\r\n }];\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Globals.GlobalShadow;\r\n }\r\n }\r\n}","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport Cabinet from \"../../parts/cabinet\";\r\n\r\nexport default class Decor1 extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'decor_1';\r\n this.partName = 'Decor1';\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new Decor1());\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const cabinetParent = this.getParent().layout.parts[Cabinet.id];\r\n const bottomCabinet = cabinetParent && cabinetParent.bottomCabinet;\r\n if (bottomCabinet && (bottomCabinet.disabled || !bottomCabinet.featureGroupEnabled)) {\r\n super.hideLayers();\r\n return\r\n }\r\n\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault(layout);\r\n return super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n return [{\r\n propName: 'RoomLayout',\r\n propValue: this.getParent().layout.getCurrentLayoutAbbreviation()\r\n }];\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Globals.Decor1;\r\n }\r\n }\r\n}","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport CountertopGroup from \"../../parts/countertopGroup\";\r\nimport Cabinet from \"../../parts/cabinet\";\r\n\r\nexport default class Decor2 extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'decor_2';\r\n this.partName = 'Decor2';\r\n }\r\n\r\n load(dbFeature) {\r\n if (!dbFeature.metaData[\"Sink\"]) {\r\n dbFeature.metaData[\"Sink\"] = [\"All\"]\r\n }\r\n return super.load_(dbFeature, new Decor2());\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const cabinetParent = this.getParent().layout.parts[Cabinet.id];\r\n const bottomCabinet = cabinetParent && cabinetParent.bottomCabinet;\r\n if (bottomCabinet && (bottomCabinet.disabled || !bottomCabinet.featureGroupEnabled)) {\r\n super.hideLayers();\r\n return\r\n }\r\n\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault(layout);\r\n return super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n const countertopGroup = this.getParent().layout.parts[CountertopGroup.id];\r\n return [{\r\n propName: 'RoomLayout',\r\n propValue: this.getParent().layout.getCurrentLayoutAbbreviation()\r\n },{\r\n propName: 'Sink',\r\n propValue: (countertopGroup && countertopGroup.sink && countertopGroup.sink.disabled) ? 'None' : 'All'\r\n }];\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Globals.Decor2;\r\n }\r\n }\r\n}","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport CenterIsland from \"../../parts/centerIsland\";\r\n\r\nexport default class Decor3 extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'decor_3';\r\n this.partName = 'Decor3';\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new Decor3());\r\n }\r\n\r\n setLayers(layout) {\r\n const centerIslandParent = this.getParent().layout.parts[CenterIsland.id];\r\n const cabinet = centerIslandParent.cabinet;\r\n\r\n if (cabinet && (cabinet.disabled || !cabinet.featureGroupEnabled)) {\r\n super.hideLayers();\r\n return\r\n }\r\n\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault(layout);\r\n return super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n return [{\r\n propName: 'RoomLayout',\r\n propValue: this.getParent().layout.getCurrentLayoutAbbreviation()\r\n }];\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Globals.Decor3;\r\n }\r\n }\r\n}","import snakeCase from \"lodash/snakeCase\";\r\nimport {Part} from \"../part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport NonVisualizerSubPart from \"../subparts/nonVisualizerSubPart\";\r\n\r\nconst alreadyExistingGroups = [\"Edge Profile\", \"Faucet\", \"Sink\", \"Stovetop\", \"Range\"];\r\n\r\nexport default class Other extends Part {\r\n static id = 'Other';\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Other';\r\n this.categoryEnabled = false;\r\n }\r\n\r\n load(dbFeature) {\r\n // console.log(\"load other\", dbFeature.groupName);\r\n if (alreadyExistingGroups.includes(dbFeature.groupName)) { // they should be loaded in their groups!\r\n return false\r\n }\r\n const partId = snakeCase(dbFeature.groupName);\r\n let relatedItem = this.relatedItems.find(relatedItem => relatedItem.partId === partId);\r\n if (!relatedItem) {\r\n relatedItem = new NonVisualizerSubPart(true, partId, dbFeature.groupName);\r\n this.relatedItems.push(relatedItem);\r\n }\r\n relatedItem.getParent = () => this;\r\n relatedItem.load(dbFeature);\r\n return true\r\n }\r\n\r\n navigationItem() {\r\n return new DesignNavigationItem('Other', this);\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n handleSubPartClick() {\r\n\r\n }\r\n\r\n}\r\n","import React from 'react';\r\nimport {connect} from \"react-redux\";\r\nimport classNames from 'classnames';\r\nimport $ from 'jquery';\r\n\r\nimport {\r\n toggleDesktopNavigation,\r\n setActiveNavigationNames,\r\n setModuleContextMenuType,\r\n setActiveNavigationFilter, setActiveNavigationFilterStepIndex, setNavigationViewType, setNavigationLoading\r\n} from \"../../../actions/navigationFunctions\";\r\nimport {setDefaultSelectionGroup, changeActivePartRelatedItemIndex} from \"../../../actions/actionFunctions\";\r\nimport DesktopNavigationCommon from \"../../visComponents/navigation/desktopNavigationCommon\";\r\nimport Z from \"../core/zIndex\";\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\n\r\nimport LockedView from \"../../common/lockedView\";\r\nimport {ContentType} from \"../../visComponents/constants\";\r\nimport ContextMenuSimple from \"./contextMenuSimple\";\r\nimport CabinetContextMenu from \"./cabinetContextMenu\";\r\nimport MobileMenuSelect from \"../../visComponents/navigation/mobile/mobileMenuSelect\";\r\nimport {CABINET_WIZARD_BUTTONS, COUNTERTOP_WIZARD_BUTTONS} from \"../core/constants\";\r\nimport {setVisualizerTutorialStep, showVisualizerTutorial} from \"../../../actions/tutorialFunctions\";\r\n\r\nclass DesktopNavigation extends DesktopNavigationCommon {\r\n\r\n componentWillReceiveProps(nextProps) {\r\n if (nextProps.activeNavigationFilter !== this.props.activeNavigationFilter\r\n && COUNTERTOP_WIZARD_BUTTONS.some(btn => btn.buttonId === nextProps.activeNavigationFilter)) {\r\n if (this.state.parentNavigationItem && this.state.parentNavigationItem.part.partName === \"Countertop\") {\r\n const subParts = this.state.parentNavigationItem.part.subParts();\r\n let subPart = null;\r\n switch (nextProps.activeNavigationFilter) {\r\n case COUNTERTOP_WIZARD_BUTTONS[0].buttonId:\r\n case COUNTERTOP_WIZARD_BUTTONS[1].buttonId:\r\n case COUNTERTOP_WIZARD_BUTTONS[2].buttonId:\r\n subPart = subParts.find(sPart => sPart.part.partId === \"countertop\");\r\n break;\r\n case COUNTERTOP_WIZARD_BUTTONS[3].buttonId:\r\n subPart = subParts.find(sPart => sPart.part.partId === \"edge_profile\");\r\n break;\r\n case COUNTERTOP_WIZARD_BUTTONS[4].buttonId:\r\n if (!this.state.childNavigationItem\r\n || (this.state.childNavigationItem && this.state.childNavigationItem.part.partId !== \"backsplash\")) {\r\n this.triggerOpenNavigationMenu(\"Backsplash\", \"Walls\", nextProps.activeNavigationFilter);\r\n }\r\n break;\r\n }\r\n if (subPart && (!this.state.childNavigationItem\r\n || (this.state.childNavigationItem && this.state.childNavigationItem.part.partId !== subPart.part.partId))) {\r\n this.handleSubPartClick(subPart, nextProps.activeNavigationFilter)\r\n }\r\n } else if (this.state.parentNavigationItem && this.state.parentNavigationItem.part.partName === \"Walls\") {\r\n switch (nextProps.activeNavigationFilter) {\r\n case COUNTERTOP_WIZARD_BUTTONS[0].buttonId:\r\n case COUNTERTOP_WIZARD_BUTTONS[1].buttonId:\r\n case COUNTERTOP_WIZARD_BUTTONS[2].buttonId:\r\n if (!this.state.childNavigationItem\r\n || (this.state.childNavigationItem && this.state.childNavigationItem.part.partId !== \"countertop\")) {\r\n this.triggerOpenNavigationMenu(\"Countertop\", \"Countertop\", nextProps.activeNavigationFilter);\r\n }\r\n break;\r\n case COUNTERTOP_WIZARD_BUTTONS[3].buttonId:\r\n if (!this.state.childNavigationItem\r\n || (this.state.childNavigationItem && this.state.childNavigationItem.part.partId !== \"edge_profile\")) {\r\n this.triggerOpenNavigationMenu(\"Edge Profile\", \"Countertop\", nextProps.activeNavigationFilter);\r\n }\r\n break;\r\n }\r\n } else if (this.state.parentNavigationItem && this.state.parentNavigationItem.part.partName === \"CenterIsland\") {\r\n const subParts = this.state.parentNavigationItem.part.subParts();\r\n let subPart = null;\r\n switch (nextProps.activeNavigationFilter) {\r\n case COUNTERTOP_WIZARD_BUTTONS[0].buttonId:\r\n case COUNTERTOP_WIZARD_BUTTONS[1].buttonId:\r\n case COUNTERTOP_WIZARD_BUTTONS[2].buttonId:\r\n subPart = subParts.find(sPart => sPart.part.partId === \"center_island_countertop\");\r\n break;\r\n case COUNTERTOP_WIZARD_BUTTONS[3].buttonId:\r\n subPart = subParts.find(sPart => sPart.part.partId === \"center_island_edge\");\r\n break;\r\n }\r\n if (subPart && (!this.state.childNavigationItem\r\n || (this.state.childNavigationItem && this.state.childNavigationItem.part.partId !== subPart.part.partId))) {\r\n this.handleSubPartClick(subPart, nextProps.activeNavigationFilter)\r\n }\r\n }\r\n }\r\n this._componentWillReceiveProps(nextProps)\r\n }\r\n\r\n bindCanvasClick = (event) => {\r\n const layout = getCurrentLayout();\r\n // const canvas = document.getElementById(this.props.canvasId);\r\n this.props.setHoveredLayer(event);\r\n\r\n if (document.hoveredLayer) {\r\n\r\n const layoutType = layout.getCurrentLayoutName();\r\n\r\n const hoveredZone = Z.getMenuByHoveredLayer(layoutType, document.hoveredLayer);\r\n\r\n // console.log('hoveredZone', hoveredZone);\r\n\r\n if (hoveredZone) {\r\n if (hoveredZone.contextMenuPartId && !this.state.showNavigation) {\r\n if (this.state.contextMenuOpen) {\r\n this.setState({\r\n contextMenuOpen: false,\r\n hoveredLayer: {}\r\n });\r\n } else {\r\n this.openContextMenu(hoveredZone, event);\r\n }\r\n return false;\r\n } else if (this.state.contentType === 0) {\r\n this.setState({\r\n showNavigation: true,\r\n contentType: ContentType.Design,\r\n contextMenuOpen: false,\r\n hoveredLayer: {}\r\n }, () => {\r\n this.setNewActiveFeature();\r\n this.menuOpened();\r\n setTimeout(() => {\r\n $(document).on('click', this.handleWrapperBlur);\r\n }, 0)\r\n });\r\n }\r\n\r\n hoveredZone.child\r\n ? this.triggerOpenNavigationMenu(hoveredZone.child, hoveredZone.parent)\r\n : this.triggerOpenNavigationMenu(hoveredZone)\r\n\r\n }\r\n\r\n }\r\n\r\n };\r\n\r\n openContextMenu = (contextMenuOpen, event) => {\r\n let contextMenuButtons = [];\r\n if (contextMenuOpen.contextMenuPartId === \"top_cabinet\") {\r\n // const hoveredParent = this.props.designNavigationItems.find(navItem => {\r\n // return navItem.text === \"Cabinet\"\r\n // });\r\n // if (hoveredParent) {\r\n //\r\n // }\r\n contextMenuButtons = [1, 2, 3, 4, 5]\r\n }\r\n // const receiveBackSplashes = () => {\r\n // const layout = getCurrentLayout();\r\n // const wallsParent = layout.parts[\"Walls\"];\r\n // const backsplashSubPart = wallsParent.subParts().find(subPart => subPart.part.partId === \"backsplash\");\r\n // this.checkIfAllFeaturesReceived(backsplashSubPart);\r\n // };\r\n switch (contextMenuOpen.contextMenuPartId) {\r\n case \"countertop_group_custom\":\r\n contextMenuOpen = \"Countertop\";\r\n break;\r\n case \"right_wall_custom\":\r\n contextMenuOpen = \"right_wall_custom\";\r\n break;\r\n case \"left_wall_custom\":\r\n contextMenuOpen = \"left_wall_custom\";\r\n break;\r\n case \"backsplash_custom_left\": {\r\n // receiveBackSplashes();\r\n contextMenuOpen = \"backsplash_custom_left\";\r\n break;\r\n }\r\n case \"backsplash_custom_right\": {\r\n // receiveBackSplashes();\r\n contextMenuOpen = \"backsplash_custom_right\";\r\n break;\r\n }\r\n case \"backsplash_custom\": {\r\n // receiveBackSplashes();\r\n contextMenuOpen = \"backsplash_custom\";\r\n break;\r\n }\r\n case \"center_island_custom\":\r\n contextMenuOpen = \"Center Island\";\r\n break;\r\n default:\r\n break;\r\n }\r\n const isMobile = $(window).width() < 991;\r\n\r\n let left = isMobile ? '50%' : event.clientX - 50;\r\n let top = isMobile ? '50%' : event.clientY - 50;\r\n let right = 'auto';\r\n\r\n const maxAllowedWidth = contextMenuButtons.length > 2 ? 300 : 210;\r\n\r\n let maxAllowedHeight = 110;\r\n if (contextMenuButtons.length > 6) {\r\n maxAllowedHeight = 330;\r\n } else if (contextMenuButtons.length > 3) {\r\n maxAllowedHeight = 220;\r\n }\r\n if (!isMobile && (left > window.innerWidth - maxAllowedWidth)) {\r\n left = 'auto';\r\n right = 0\r\n }\r\n if (!isMobile && (top > window.innerHeight - maxAllowedHeight)) {\r\n let negativeMargin = 50;\r\n if (contextMenuButtons.length > 6) {\r\n negativeMargin = 250;\r\n } else if (contextMenuButtons.length > 3) {\r\n negativeMargin = 150;\r\n }\r\n top = top - negativeMargin;\r\n }\r\n this.setState({\r\n contextMenuOpen,\r\n hoveredLayer: document.hoveredLayer,\r\n contextMenuPosition: {\r\n left,\r\n right,\r\n top,\r\n }\r\n });\r\n };\r\n\r\n handleNavigationItemClick = (item, ignoreLocked = false) => {\r\n this.navigationItemClickCommon(item);\r\n\r\n this.itemClick(item, ignoreLocked);\r\n\r\n const updateSideBarIds = [\"center_island_cabinet\", \"top_cabinet\"];\r\n if (updateSideBarIds.includes(item.part.partId)) {\r\n this.updateSideBar();\r\n }\r\n\r\n if (this.state.parentNavigationItem) { // update canvas only if it is child\r\n this.props.refreshCB();\r\n }\r\n };\r\n\r\n render() {\r\n const layout = getCurrentLayout();\r\n // const fabricatorSettings = this.props.fabricatorSettings;\r\n const activePart = this.state.parentNavigationItem ? this.state.parentNavigationItem.part : null;\r\n const activeSubPart = this.state.childNavigationItem ? this.state.childNavigationItem.part : null;\r\n // const activeNavPart = activeSubPart || activePart;\r\n const parentItems = layout.designNavigationItems(); // parent list without filters\r\n\r\n const useWizard = false, wizardGroups = [];\r\n\r\n let showNavigationFiltersSteps = activeSubPart\r\n && this.props.activeNavigationFilter !== CABINET_WIZARD_BUTTONS[0].buttonId\r\n && this.props.activeNavigationFilter !== \"inlay_type\"\r\n && activeSubPart.canUseNavigationFilter && activeSubPart.canUseNavigationFilter() ;\r\n\r\n if (activeSubPart && activeSubPart.canUseNavigationFilterSteps\r\n && activeSubPart.canUseNavigationFilterSteps()) {\r\n showNavigationFiltersSteps = !this.props.countertopNavigationFilterCompleted;\r\n }\r\n\r\n const showLockedView = this.currentActiveItemIsLocked(useWizard);\r\n\r\n const useFilters = false;\r\n const availableNavButtons = [ContentType.Design, ContentType.Layout, ContentType.DisplayRoom];\r\n\r\n return (\r\n
    \r\n \r\n
    this.navWrapper = node}>\r\n
    \r\n
    \r\n {this.content(useWizard, wizardGroups, useFilters, activePart, activeSubPart)}\r\n
    \r\n
    \r\n {this.navigationMenuButtons(availableNavButtons)}\r\n {showNavigationFiltersSteps ? null : (\r\n
    \r\n \r\n
    \r\n )}\r\n {/*
    */}\r\n {/*
    */}\r\n {/**/}\r\n {/*
    */}\r\n {/*
    */}\r\n
    \r\n {this.state.contextMenuOpen && this.state.contextMenuOpen.module\r\n ? \r\n : null}\r\n {this.state.contextMenuOpen && !this.state.contextMenuOpen.module\r\n ? \r\n : null}\r\n
    \r\n {showLockedView\r\n ? \r\n : null}\r\n
    \r\n )\r\n }\r\n\r\n}\r\n\r\nconst mapStateToProps = (store) => ({\r\n filtersVisible: store.filterState.showFilters,\r\n filterGroups: store.filterState.filterGroups,\r\n bvPresets: store.bathroomVisualizerState.bvPresets,\r\n userIsLoggedIn: store.userState.userIsLoggedIn,\r\n isPhoneNumberValidated: store.userState.isPhoneNumberValidated,\r\n activeNavigationFilter: store.navigationState.activeNavigationFilter,\r\n countertopNavigationFilterCompleted: store.navigationState.countertopNavigationFilterCompleted,\r\n visualizerTutorialStep: store.tutorialState.visualizerTutorialStep,\r\n visualizerTutorialIsOpened: store.tutorialState.visualizerTutorialIsOpened,\r\n activeQuoteIndex: store.quotesState.activeQuoteIndex,\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n setNavigationViewType,\r\n toggleDesktopNavigation,\r\n setActiveNavigationNames,\r\n setModuleContextMenuType,\r\n setActiveNavigationFilter,\r\n setActiveNavigationFilterStepIndex,\r\n setDefaultSelectionGroup,\r\n changeActivePartRelatedItemIndex,\r\n setVisualizerTutorialStep,\r\n showVisualizerTutorial,\r\n setNavigationLoading\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(DesktopNavigation);\r\n","import React from 'react';\r\nimport {connect} from 'react-redux';\r\nimport {injectIntl} from \"react-intl\";\r\n\r\nimport MobileNavigationCommon from \"../../visComponents/navigation/mobileNavigationCommon\";\r\n\r\nimport {ContentType} from \"../../visComponents/constants\";\r\nimport Z from \"../core/zIndex\";\r\n\r\nimport MobileNavigationButtons from '../../visComponents/navigation/mobile/mobileNavigationButtons';\r\nimport MobileNavigationAllWallsCheckbox from '../../visComponents/navigation/mobile/mobileNavigationAllWallsCheckbox';\r\nimport FeatureWizardSteps from \"../../visComponents/navigation/featureWizard/featureWizardSteps\";\r\n\r\nimport {changeActivePartRelatedItemIndex, setDefaultSelectionGroup} from \"../../../actions/actionFunctions\";\r\nimport {\r\n setActiveNavigationFilter,\r\n setModuleContextMenuType,\r\n setModuleContextMenuModule,\r\n setActiveNavigationFilterStepIndex, setNavigationViewType, setNavigationLoading\r\n} from \"../../../actions/navigationFunctions\";\r\n\r\nimport MobileMenuSelect from '../../visComponents/navigation/mobile/mobileMenuSelect';\r\nimport LockedView from \"../../common/lockedView\";\r\n\r\nimport Filters from \"../../visComponents/navigation/newFilters/filters\";\r\nimport BodyPanelRadio from \"../../visComponents/navigation/desktop/bodyPanelRadio\";\r\nimport ContextMenuSimple from \"./contextMenuSimple\";\r\nimport CabinetContextMenu from \"./cabinetContextMenu\";\r\nimport FilterSwitchers from \"../../visComponents/navigation/newFilters/filterSwitchers\";\r\nimport FilterSelection from \"../../visComponents/navigation/newFilters/filterSelection\";\r\n// import {CABINET_WIZARD_BUTTONS} from \"../core/constants\";\r\nimport NavigationFiltersSteps from \"../../visComponents/navigation/newFilters/navigationFiltersSteps\";\r\nimport {CABINET_GROUP, COUNTERTOP_GROUP, COUNTERTOP_WIZARD_BUTTONS} from \"../core/constants\";\r\n\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\nimport CabinetSwitchers from \"./cabinetSwitchers\";\r\nimport CountertopSwitchers from \"./countertopSwitchers\";\r\nimport LookAllWallsRadioButton from \"../../look/lookNavigation/lookMain/lookAllWallsRadioButton\";\r\n\r\nclass MobileNavigation extends MobileNavigationCommon {\r\n\r\n componentWillReceiveProps(nextProps) {\r\n if (nextProps.activeNavigationFilter !== this.props.activeNavigationFilter\r\n && COUNTERTOP_WIZARD_BUTTONS.some(btn => btn.buttonId === nextProps.activeNavigationFilter)) {\r\n if (this.state.parentNavigationItem && this.state.parentNavigationItem.part.partName === \"Countertop\") {\r\n const subParts = this.state.parentNavigationItem.part.subParts();\r\n let subPart = null;\r\n switch (nextProps.activeNavigationFilter) {\r\n case COUNTERTOP_WIZARD_BUTTONS[0].buttonId:\r\n case COUNTERTOP_WIZARD_BUTTONS[1].buttonId:\r\n case COUNTERTOP_WIZARD_BUTTONS[2].buttonId:\r\n subPart = subParts.find(sPart => sPart.part.partId === \"countertop\");\r\n break;\r\n case COUNTERTOP_WIZARD_BUTTONS[3].buttonId:\r\n subPart = subParts.find(sPart => sPart.part.partId === \"edge_profile\");\r\n break;\r\n case COUNTERTOP_WIZARD_BUTTONS[4].buttonId:\r\n if (!this.state.childNavigationItem\r\n || (this.state.childNavigationItem && this.state.childNavigationItem.part.partId !== \"backsplash\")) {\r\n this.triggerOpenNavigationMenu(\"Backsplash\", \"Walls\", nextProps.activeNavigationFilter);\r\n }\r\n break;\r\n }\r\n if (subPart && (!this.state.childNavigationItem\r\n || (this.state.childNavigationItem && this.state.childNavigationItem.part.partId !== subPart.part.partId))) {\r\n this.handleSubPartClick(subPart, nextProps.activeNavigationFilter)\r\n }\r\n } else if (this.state.parentNavigationItem && this.state.parentNavigationItem.part.partName === \"Walls\") {\r\n switch (nextProps.activeNavigationFilter) {\r\n case COUNTERTOP_WIZARD_BUTTONS[0].buttonId:\r\n case COUNTERTOP_WIZARD_BUTTONS[1].buttonId:\r\n case COUNTERTOP_WIZARD_BUTTONS[2].buttonId:\r\n if (!this.state.childNavigationItem\r\n || (this.state.childNavigationItem && this.state.childNavigationItem.part.partId !== \"countertop\")) {\r\n this.triggerOpenNavigationMenu(\"Countertop\", \"Countertop\", nextProps.activeNavigationFilter);\r\n }\r\n break;\r\n case COUNTERTOP_WIZARD_BUTTONS[3].buttonId:\r\n if (!this.state.childNavigationItem\r\n || (this.state.childNavigationItem && this.state.childNavigationItem.part.partId !== \"edge_profile\")) {\r\n this.triggerOpenNavigationMenu(\"Edge Profile\", \"Countertop\", nextProps.activeNavigationFilter);\r\n }\r\n break;\r\n }\r\n } else if (this.state.parentNavigationItem && this.state.parentNavigationItem.part.partName === \"CenterIsland\") {\r\n const subParts = this.state.parentNavigationItem.part.subParts();\r\n let subPart = null;\r\n switch (nextProps.activeNavigationFilter) {\r\n case COUNTERTOP_WIZARD_BUTTONS[0].buttonId:\r\n case COUNTERTOP_WIZARD_BUTTONS[1].buttonId:\r\n case COUNTERTOP_WIZARD_BUTTONS[2].buttonId:\r\n subPart = subParts.find(sPart => sPart.part.partId === \"center_island_countertop\");\r\n break;\r\n case COUNTERTOP_WIZARD_BUTTONS[3].buttonId:\r\n subPart = subParts.find(sPart => sPart.part.partId === \"center_island_edge\");\r\n break;\r\n }\r\n if (subPart && (!this.state.childNavigationItem\r\n || (this.state.childNavigationItem && this.state.childNavigationItem.part.partId !== subPart.part.partId))) {\r\n this.handleSubPartClick(subPart, nextProps.activeNavigationFilter)\r\n }\r\n }\r\n }\r\n this._componentWillReceiveProps(nextProps)\r\n }\r\n\r\n bindCanvasClick = (event) => {\r\n const layout = getCurrentLayout();\r\n // console.log(\"bindCanvasClick event\");\r\n\r\n const canvas = document.getElementById(this.props.canvasId);\r\n\r\n if (!window.touchMove && !this.state.showNavigation && !this.state.contextMenuOpen) {\r\n this.props.setHoveredLayer(event);\r\n }\r\n\r\n if (document.hoveredLayer && !window.touchMove) {\r\n // $('.canvas-text').html(`CLICK3`);\r\n const layoutType = layout.getCurrentLayoutName();\r\n\r\n let hoveredZone = Z.getMenuByHoveredLayer(layoutType, document.hoveredLayer, canvas);\r\n if (hoveredZone) {\r\n if (hoveredZone.contextMenuPartId && !this.state.showNavigation) {\r\n if (this.state.contextMenuOpen) {\r\n this.setState({\r\n contextMenuOpen: false,\r\n hoveredLayer: {}\r\n });\r\n document.removeEventListener('click', this.handleContextMenuBlur);\r\n } else {\r\n let contextMenuOpen = \"\";\r\n\r\n const receiveBackSplashes = () => {\r\n const wallsParent = layout.parts[\"Walls\"];\r\n const backsplashSubPart = wallsParent.subParts().find(subPart => subPart.part.partId === \"backsplash\");\r\n this.checkIfAllFeaturesReceived(backsplashSubPart);\r\n };\r\n\r\n switch (hoveredZone.contextMenuPartId) {\r\n case \"countertop_group_custom\":\r\n contextMenuOpen = \"Countertop\";\r\n break;\r\n case \"right_wall_custom\":\r\n contextMenuOpen = \"right_wall_custom\";\r\n break;\r\n case \"left_wall_custom\":\r\n contextMenuOpen = \"left_wall_custom\";\r\n break;\r\n case \"backsplash_custom_left\": {\r\n receiveBackSplashes();\r\n contextMenuOpen = \"backsplash_custom_left\";\r\n break;\r\n }\r\n case \"backsplash_custom_right\": {\r\n receiveBackSplashes();\r\n contextMenuOpen = \"backsplash_custom_right\";\r\n break;\r\n }\r\n case \"backsplash_custom\": {\r\n receiveBackSplashes();\r\n contextMenuOpen = \"backsplash_custom\";\r\n break;\r\n }\r\n case \"center_island_custom\":\r\n contextMenuOpen = \"Center Island\";\r\n break;\r\n default:\r\n break;\r\n }\r\n this.setState({\r\n contextMenuOpen: contextMenuOpen || hoveredZone,\r\n hoveredLayer: document.hoveredLayer\r\n }, () => {\r\n if (contextMenuOpen) {\r\n setTimeout(() => {\r\n document.addEventListener('click', this.handleContextMenuBlur);\r\n }, 0)\r\n }\r\n });\r\n }\r\n return false;\r\n } else if (this.state.contentType === 0) {\r\n if (!window.canvasIsDragging) {\r\n this.props.setCanvasClass((hoveredZone.child || hoveredZone.parent || hoveredZone).toLowerCase().replace(/ /g, \"-\"));\r\n }\r\n this.openMobileMenu();\r\n }\r\n\r\n hoveredZone.child\r\n ? this.triggerOpenNavigationMenu(hoveredZone.child, hoveredZone.parent, false)\r\n : this.triggerOpenNavigationMenu(hoveredZone)\r\n\r\n }\r\n\r\n }\r\n\r\n };\r\n\r\n handleNavigationItemClick = (item, ignoreLocked = false) => {\r\n\r\n if (window.location.port === '9007' || document.kvConfig.kioskMode) {\r\n console.log('item', item);\r\n }\r\n this.itemClick(item, ignoreLocked);\r\n\r\n this.props.setActiveFeature(item.part);\r\n\r\n const canvasClass = this.state.childNavigationItem\r\n ? this.state.parentNavigationItem.text + '-' + this.state.childNavigationItem.text\r\n : this.state.parentNavigationItem.text;\r\n\r\n if (!window.canvasIsDragging) {\r\n this.props.setCanvasClass(canvasClass.toLowerCase().replace(/ /g, \"-\"));\r\n }\r\n\r\n if (this.state.parentNavigationItem) { // update canvas only if it is child\r\n this.props.refreshCB();\r\n }\r\n if (item.part.partId === \"top_cabinet\" && !item.part.metaData[\"Module\"]) {\r\n this.props.setModuleContextMenuModule(null)\r\n }\r\n };\r\n\r\n handleSubPartClick = (subNavigationItem, activeNavigationFilter = null) => { // sidebar list item click\r\n const subItemPart = subNavigationItem.part;\r\n const childNavigationItemPartId = subItemPart.partId;\r\n subItemPart.getParent().handleSubPartClick(subItemPart);\r\n this.setState({\r\n childNavigationItem: subNavigationItem,\r\n showFilterSelection: subItemPart.allFeaturesReceived, // show filters only if subItemPart has all features\r\n showerWallWizardGroupsSelected: false,\r\n searchText: \"\"\r\n }, () => {\r\n this.scrollContentToTop();\r\n this.rememberWallsSelection();\r\n this.checkIfAllFeaturesReceived(subNavigationItem, \"childNavigationItem\");\r\n });\r\n /*set new materials page subIndex*/\r\n this.setActivePartRelatedItemIndex(subNavigationItem);\r\n // console.log('subItemPart', subItemPart);\r\n if (!window.canvasIsDragging) {\r\n const canvasClass = this.state.parentNavigationItem.text + '-' + subNavigationItem.text\r\n .toLowerCase().replace(/ /g, \"-\");\r\n this.props.setCanvasClass(canvasClass);\r\n }\r\n this.setNewActiveFeature(subNavigationItem);\r\n\r\n this.setNavigationFilterIfTheChildWasChanged(childNavigationItemPartId, activeNavigationFilter);\r\n\r\n };\r\n\r\n backsplashSelectClick = () => {\r\n this.props.refreshCB(); // update canvas\r\n this.reRenderComponent(); // update nav items\r\n };\r\n\r\n render() {\r\n const layout = getCurrentLayout();\r\n const activePart = this.state.parentNavigationItem ? this.state.parentNavigationItem.part : null;\r\n const activeSubPart = this.state.childNavigationItem ? this.state.childNavigationItem.part : null;\r\n const activeNavPart = activeSubPart || activePart;\r\n const parentItems = layout.designNavigationItems(); // parent list without filters\r\n const allFeaturesReceived = activeNavPart && activeNavPart.allFeaturesReceived;\r\n\r\n // console.log('activePart', activePart);\r\n // console.log('activeSubPart', activeSubPart);\r\n // console.log('activePart.subTypes()', activePart && activePart.subTypes());\r\n // console.log('this.state.childNavigationItemv1111', this.state.childNavigationItem);\r\n\r\n let useWizard = false;\r\n let wizardGroups = [];\r\n if (this.props.fabricatorSettings\r\n && (this.props.fabricatorSettings.wizardConsumers || (this.props.fabricatorSettings.wizardClients && document.kvConfig.isBackend))\r\n && this.state.contentType === ContentType.Design && activeSubPart && activeSubPart.canUseWizard && activeSubPart.allFeaturesReceived) {\r\n useWizard = true;\r\n wizardGroups = this.state[this.getWizardGroupsByPartId(this.state.childNavigationItem.part.partId)];\r\n }\r\n\r\n const features = this.getFeatures(layout);\r\n\r\n const showLockedView = this.currentActiveItemIsLocked(useWizard);\r\n\r\n const useFilters = (activePart && activePart.partId === \"kitchen_floor\" && activePart.allFeaturesReceived)\r\n || (activeSubPart && (this.isWallItem(activeSubPart) || activeSubPart.partId === \"accent_wall\"\r\n || activeSubPart.partId === \"shower_interior_wall_accent\") && activeSubPart.allFeaturesReceived);\r\n\r\n const filterSelectionHasValues = activeNavPart && FilterSelection.getAvailableFilterValues(\r\n this.props.filterGroups, \"Material\", activeNavPart, this.props.fabricatorData\r\n ).length;\r\n\r\n const itemIsSelected = (!this.props.fabricatorSettings.leadCapture\r\n || (activeSubPart && activeSubPart.activeFeature && activeSubPart.firstClick[this.props.activeQuoteIndex] && activeSubPart.placeholderChanged));\r\n\r\n const useKVWizard = false;\r\n //TODO change it when BE is ready\r\n\r\n const showNavigationFilters = useKVWizard &&activeNavPart\r\n // && this.props.activeNavigationFilter !== CABINET_WIZARD_BUTTONS[0].buttonId\r\n && activeNavPart.canUseNavigationFilter && activeNavPart.canUseNavigationFilter();\r\n\r\n let showNavigationFiltersSteps = false;\r\n if (useKVWizard && activeNavPart && activeNavPart.canUseNavigationFilterSteps\r\n && activeNavPart.canUseNavigationFilterSteps()) {\r\n showNavigationFiltersSteps = !this.props.countertopNavigationFilterCompleted;\r\n }\r\n\r\n const isCabinet = activeSubPart && CABINET_GROUP.includes(activeSubPart.partId);\r\n const isCountertop = activeSubPart && COUNTERTOP_GROUP.includes(activeSubPart.partId);\r\n\r\n return (\r\n
    \r\n
    \r\n {/*
    \r\n
    \r\n {this.state.contextMenuOpen && this.state.contextMenuOpen.module\r\n ? \r\n : null}\r\n {this.state.contextMenuOpen && !this.state.contextMenuOpen.module\r\n ? \r\n : null}\r\n {showLockedView\r\n ? \r\n : null}\r\n \r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => ({\r\n fabricatorData: store.fabricatorState,\r\n selectedFilters: store.filterState.selectedFilters,\r\n filtersVisible: store.filterState.showFilters,\r\n filterGroups: store.filterState.filterGroups,\r\n bvPresets: store.bathroomVisualizerState.bvPresets,\r\n userPopupOpened: store.userState.userPopupOpened,\r\n activeNavigationFilter: store.navigationState.activeNavigationFilter,\r\n countertopNavigationFilterCompleted: store.navigationState.countertopNavigationFilterCompleted,\r\n newLayoutType: store.sqftState.newLayoutType,\r\n activeQuoteIndex: store.quotesState.activeQuoteIndex,\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n setNavigationViewType,\r\n setModuleContextMenuType,\r\n setDefaultSelectionGroup,\r\n changeActivePartRelatedItemIndex,\r\n setActiveNavigationFilter,\r\n setActiveNavigationFilterStepIndex,\r\n setModuleContextMenuModule,\r\n setNavigationLoading\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(MobileNavigation)\r\n);\r\n","import {Part} from \"../part\";\r\nimport {wallsThumbnail} from \"../../../bvComponent/core/assets\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\n\r\nimport Attachment from \"../subparts/globals/attachment\";\r\nimport Decor from \"../subparts/globals/decor\";\r\nimport {DECORS_MAX} from \"../constants\";\r\n\r\nexport default class Globals extends Part {\r\n static id = \"Globals\";\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = \"Globals\";\r\n this.partThumbnail = wallsThumbnail;\r\n\r\n // related items\r\n this.decor1 = null; // can be up to 10\r\n }\r\n\r\n load(dbFeature) {\r\n let\r\n relatedItemName = \"\",\r\n decorCount = 0,\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Decor\":\r\n case \"Decore\": {\r\n for (let i = 1; i <= DECORS_MAX; i++) {\r\n const currentDecorFeatureGroup = this[\"decor\" + i];\r\n if (!currentDecorFeatureGroup // we skipped all decors, but didn't find the same\r\n || dbFeature.sharedFeatureName === this[\"decor\" + i].decorName // decors are matching by name\r\n || (dbFeature.metaData[\"MountPosition\"] && this[\"decor\" + i].features.some(feature => { // decors are matching by name\r\n return feature.metaData[\"MountPosition\"] && feature.matchesMetaForCondition(\"MountPosition\", dbFeature.metaData[\"MountPosition\"])\r\n }))) {\r\n relatedItemName = \"decor\" + i;\r\n decorCount = i;\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n case \"Attachment\": {\r\n relatedItemName = \"attachment\";\r\n RelatedItemClass = Attachment;\r\n break;\r\n }\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n if (dbFeature.groupName === \"Decor\" || dbFeature.groupName === \"Decore\") {\r\n this[relatedItemName] = new Decor(true, decorCount, dbFeature);\r\n this[relatedItemName].decorName = dbFeature.sharedFeatureName;\r\n } else {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n }\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport isEqual from \"lodash/isEqual\";\r\n\r\nexport default class Attachment extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = \"attachment\";\r\n this.partName = \"Attachment\";\r\n this.hasAdditionalParts = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new Attachment());\r\n }\r\n\r\n checkIfFeaturePartIsMatching() {\r\n this.activeFeatureParts = this.setActiveFeatureParts();\r\n }\r\n\r\n setActiveFeatureParts() {\r\n const layout = this.getParent().layout;\r\n const activeFeatures = layout.getActiveFeatures(true, true);\r\n // console.log(\"activeFeatures\", activeFeatures);\r\n const matchingFeatures = this.features.filter(feature => {\r\n if (!feature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())) {\r\n return false\r\n }\r\n return feature.metaData[\"MatchingFeature\"] && activeFeatures.some(cartItem => {\r\n if (cartItem.partId === this.partId) { // remove attachment active feature\r\n return false\r\n }\r\n return !cartItem.featureGroup.disabled && cartItem.cartFeature.metaData[\"MatchingFeature\"]\r\n && isEqual(feature.metaData[\"MatchingFeature\"], cartItem.cartFeature.metaData[\"MatchingFeature\"])\r\n && isEqual(feature.metaData[\"Side\"], cartItem.cartFeature.metaData[\"Side\"])\r\n })\r\n })\r\n // console.log(\"matchingFeatures\", matchingFeatures);\r\n return matchingFeatures;\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n\r\n const getZIndex = (feature, partId = null) => {\r\n return feature.metaData[\"ZSorting\"] ? feature.metaData[\"ZSorting\"] * 1000 : zIndexes[partId || this.partId];\r\n }\r\n\r\n if (this.hasAdditionalParts && this.activeFeatureParts && this.activeFeatureParts.length) {\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.layer.zIndex = getZIndex(activeFeaturePart, this.additionalPartPartId) - 1;\r\n });\r\n }\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport CenterIsland from \"../../parts/centerIsland\";\r\n\r\nexport default class Decor extends IntermediatePart {\r\n constructor(isChild, decorCount, dbFeature) {\r\n super(isChild);\r\n this.decorCount = decorCount;\r\n this.partId = \"decor_\" + decorCount;\r\n this.partName = \"Decor \" + decorCount;\r\n if (dbFeature && dbFeature.metaData && dbFeature.metaData[\"CIShape\"]) {\r\n this.isCenterIslandDecor = true;\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new Decor(false, this.decorCount));\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n if (this.isCenterIslandDecor) {\r\n const centerIslandParent = this.getParent().layout.parts[CenterIsland.id];\r\n if (centerIslandParent && centerIslandParent.cabinet) {\r\n if (centerIslandParent.cabinet.disabled) {\r\n conditions.push({\r\n propName: \"CIShape\",\r\n propValue: \"noCI\"\r\n })\r\n } else if (centerIslandParent.cabinet.activeFeature && centerIslandParent.cabinet.activeFeature.metaData[\"CIShape\"]) {\r\n conditions.push({\r\n propName: \"CIShape\",\r\n propValue: centerIslandParent.cabinet.activeFeature.metaData[\"CIShape\"][0]\r\n })\r\n }\r\n }\r\n }\r\n // console.log(\"conditions\", conditions);\r\n return conditions\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class Cabinet extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.dbName = 'Center Island Cabinet';\r\n this.partId = 'center_island_cabinet';\r\n this.partName = 'Cabinet';\r\n this.translateId = \"visualizer.kitchen.center_island.center_island_cabinet\";\r\n this.canBeDisabled = true;\r\n this.allWallsCanBeApplied = true;\r\n }\r\n\r\n disabledClick() {\r\n const centerIslandParent = this.getParent();\r\n centerIslandParent.relatedItems.forEach(featureGroup => {\r\n featureGroup.disabled = this.disabled;\r\n })\r\n const ponyWall = centerIslandParent.layout && centerIslandParent.layout.parts && centerIslandParent.layout.parts.Walls\r\n ? centerIslandParent.layout.parts.Walls.ponyWall\r\n : null;\r\n if (ponyWall) {\r\n ponyWall.disabled = this.disabled;\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {PLACEMENTS} from \"../../constants\";\r\n\r\nexport default class Faucet extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'center_island_faucet';\r\n this.partName = 'Faucet';\r\n this.translateId = \"visualizer.kitchen.center_island.center_island_faucet\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n // dbFeature.metaData[\"RoomLayout\"] = (dbFeature.metaData[\"RoomLayout\"] && dbFeature.metaData[\"RoomLayout\"].filter(roomLayout => roomLayout.includes(\"I\"))) || [];\r\n if (dbFeature.s3Bindings && dbFeature.metaData && (!dbFeature.metaData[\"Placement\"]\r\n || !dbFeature.metaData[\"Placement\"].includes(PLACEMENTS.Island))) {\r\n return false\r\n }\r\n return super.load_(dbFeature, new Faucet());\r\n }\r\n\r\n disabledClick() {\r\n const centerIslandParent = this.getParent();\r\n const relatedSink = centerIslandParent.sink;\r\n if (relatedSink) {\r\n relatedSink.disabled = this.disabled;\r\n }\r\n const stovetop = centerIslandParent.stovetop;\r\n if (stovetop && !this.disabled && !stovetop.disabled) {\r\n stovetop.disabled = true;\r\n }\r\n const range = centerIslandParent.range;\r\n if (range && !this.disabled && !range.disabled) {\r\n range.disabled = true;\r\n }\r\n }\r\n\r\n // getArrayOfConditions() {\r\n // const sink = this.getParent().sink;\r\n // if (sink && sink.activeFeature) {\r\n // return [{\r\n // propName: \"FaucetPlacement\",\r\n // propValue: sink.activeFeature.metaData[\"FaucetPlacement\"] || \"Moved\"\r\n // }]\r\n // }\r\n // return [];\r\n // }\r\n\r\n tryToSetTheSameFeature(filteredFeatures = [], partName = \"\") {\r\n if (this.activeFeature && this.activeFeature.partName) {\r\n const splittedName = (partName || this.activeFeature.partName).split(\" M\")[0];\r\n this.activeFeature = filteredFeatures.find(feature => {\r\n if (feature.partName) {\r\n const splittedCurrentName = feature.partName.split(\" M\")[0];\r\n return splittedCurrentName === splittedName\r\n }\r\n return false\r\n });\r\n // console.log('AF', filteredFeatures, this.activeFeature);\r\n if (this.activeFeature) {\r\n return true\r\n }\r\n }\r\n return false\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {PLACEMENTS} from \"../../constants\";\r\n\r\nexport default class Sink extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'center_island_sink';\r\n this.partName = 'Sink';\r\n this.translateId = \"visualizer.kitchen.center_island.center_island_sink\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n // dbFeature.metaData[\"RoomLayout\"] = (dbFeature.metaData[\"RoomLayout\"] && dbFeature.metaData[\"RoomLayout\"].filter(roomLayout => roomLayout.includes(\"I\"))) || [];\r\n if (dbFeature.s3Bindings && dbFeature.metaData && (!dbFeature.metaData[\"Placement\"]\r\n || !dbFeature.metaData[\"Placement\"].includes(PLACEMENTS.Island))) {\r\n return false\r\n }\r\n return super.load_(dbFeature, new Sink());\r\n }\r\n\r\n disabledClick() {\r\n const centerIslandParent = this.getParent();\r\n const relatedFaucet = centerIslandParent.faucet;\r\n if (relatedFaucet) {\r\n relatedFaucet.disabled = this.disabled;\r\n }\r\n const stovetop = centerIslandParent.stovetop;\r\n if (stovetop && !this.disabled && !stovetop.disabled) {\r\n stovetop.disabled = true;\r\n }\r\n const range = centerIslandParent.range;\r\n if (range && !this.disabled && !range.disabled) {\r\n range.disabled = true;\r\n }\r\n }\r\n}\r\n","import EdgeCommon from \"../edgeCommon\";\r\n\r\nexport default class Edge extends EdgeCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'center_island_edge';\r\n this.partName = 'Edge';\r\n this.dbName = 'Edge Profile';\r\n // this.isStoneFeature = true;\r\n this.customClassName = \"edge\";\r\n this.translateId = \"visualizer.kitchen.center_island.center_island_edge\";\r\n this.hasNoVisualizerLayers = true;\r\n }\r\n\r\n}\r\n","import CountertopCommon from \"../countertopCommon\";\r\nimport {LayoutAbbreviations} from \"../../constants\";\r\n\r\nexport default class Countertop extends CountertopCommon {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'center_island_countertop';\r\n this.dbName = 'Center Island Countertop';\r\n this.partName = 'Island Countertop';\r\n this.homePageTitle = 'Center Island Countertop';\r\n this.translateId = \"visualizer.kitchen.center_island.center_island_countertop\";\r\n this.isStoneFeature = true;\r\n this.toggleSwitchedOffByUser = false; // is used for returning toggle back when feature is found\r\n this.hasAdditionalParts = false;\r\n this.allWallsCanBeApplied = true;\r\n if (isChild) {\r\n this.nextFeaturesPageToLoadArray = {};\r\n LayoutAbbreviations.forEach(layoutAbbreviation => {\r\n this.nextFeaturesPageToLoadArray[layoutAbbreviation] = {\r\n page: 0,\r\n allReceived: false,\r\n };\r\n });\r\n }\r\n }\r\n\r\n disabledClick() {\r\n const centerIslandParent = this.getParent();\r\n if (!this.disabled && centerIslandParent.cabinet.disabled) {\r\n centerIslandParent.cabinet.disabled = false;\r\n centerIslandParent.cabinet.disabledClick();\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n this.fixEdgeMeta(dbFeature);\r\n if (dbFeature.metaData[\"RoomLayout\"] && dbFeature.metaData[\"RoomLayout\"].includes(\"6\")) {\r\n if (!dbFeature.metaData[\"MountType\"]) {\r\n dbFeature.metaData[\"MountType\"] = [\"0\"]\r\n }\r\n }\r\n if (dbFeature.metaData[\"Part\"]) {\r\n const partNumber = (dbFeature.metaData[\"Part\"] && +dbFeature.metaData[\"Part\"][0]) === 1 ? 1 : 2;\r\n return super.load_(dbFeature, new Countertop(false, partNumber), true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n return super.load_(dbFeature, new Countertop())\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const cabinet = this.getParent().cabinet;\r\n if (cabinet && (cabinet.disabled || !cabinet.featureGroupEnabled)) {\r\n super.hideLayers();\r\n return\r\n }\r\n\r\n return super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n const centerIslandParent = this.getParent();\r\n if (centerIslandParent.layout.type === 6) {\r\n if (centerIslandParent.sink && centerIslandParent.sink.activeFeature) {\r\n conditions.push({\r\n propName: \"MountType\",\r\n propValue: centerIslandParent.sink.activeFeature.metaData && Array.isArray(centerIslandParent.sink.activeFeature.metaData[\"MountType\"])\r\n && centerIslandParent.sink.activeFeature.metaData[\"MountType\"].includes(\"ST\") ? \"ST\" : \"0\"\r\n })\r\n }\r\n }\r\n // console.log(\"conditions\", conditions);\r\n return conditions;\r\n }\r\n\r\n canUseNavigationFilterSteps() {\r\n const parent = this.getParent();\r\n return parent.edge // display filters only if edges exist\r\n }\r\n\r\n canUseNavigationFilter() {\r\n return true //TODO[Artem] add here features filters check\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class IslandHood extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'center_island_hood';\r\n this.partName = 'Island Hood';\r\n this.translateId = \"visualizer.kitchen.center_island.center_island_hood\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new IslandHood());\r\n }\r\n\r\n disabledClick() {\r\n const centerIslandParent = this.getParent();\r\n if (!this.disabled && centerIslandParent.cabinet) {\r\n centerIslandParent.cabinet.disabled = false;\r\n centerIslandParent.cabinet.disabledClick();\r\n } else {\r\n const stovetop = centerIslandParent.stovetop;\r\n if (stovetop && !this.disabled && stovetop.disabled) {\r\n stovetop.disabled = false;\r\n }\r\n }\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class Stovetop extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'center_island_stovetop';\r\n this.partName = 'Stovetop';\r\n this.dbName = 'Island Stove'; // temporarily\r\n this.translateId = \"visualizer.kitchen.center_island.center_island_stovetop\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new Stovetop());\r\n }\r\n\r\n disabledClick() {\r\n const centerIslandParent = this.getParent();\r\n if (!this.disabled && centerIslandParent.cabinet) {\r\n centerIslandParent.cabinet.disabled = false;\r\n centerIslandParent.cabinet.disabledClick();\r\n } else {\r\n const islandHood = centerIslandParent.islandHood;\r\n if (islandHood) {\r\n islandHood.disabled = this.disabled;\r\n }\r\n }\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class Pendants extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'center_island_pendants';\r\n this.partName = 'Pendants';\r\n this.translateId = \"visualizer.kitchen.center_island.center_island_pendants\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new Pendants());\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class RightIsland extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'center_island_right_island';\r\n this.partName = 'Right Island';\r\n this.translateId = \"visualizer.kitchen.center_island.center_island_right_island\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new RightIsland());\r\n }\r\n}\r\n","import snakeCase from \"lodash/snakeCase\";\r\nimport {Part} from \"../part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport NonVisualizerSubPart from \"../subparts/nonVisualizerSubPart\";\r\n\r\nconst alreadyExistingGroups = [\"Edge Profile\", \"Faucet\", \"Sink\"];\r\n\r\nexport default class Other extends Part {\r\n static id = 'Other';\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Other';\r\n this.categoryEnabled = false;\r\n }\r\n\r\n load(dbFeature) {\r\n // console.log(\"load other\", dbFeature.groupName);\r\n if (alreadyExistingGroups.includes(dbFeature.groupName)) { // they should be loaded in their groups!\r\n return false\r\n }\r\n const partId = snakeCase(dbFeature.groupName);\r\n let relatedItem = this.relatedItems.find(relatedItem => relatedItem.partId === partId);\r\n if (!relatedItem) {\r\n relatedItem = new NonVisualizerSubPart(true, partId, dbFeature.groupName);\r\n this.relatedItems.push(relatedItem);\r\n }\r\n relatedItem.getParent = () => this;\r\n relatedItem.load(dbFeature);\r\n return true\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n handleSubPartClick() {\r\n\r\n }\r\n\r\n}\r\n","import {Part} from \"../part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport BackgroundBG from \"../subparts/backgrounds/BackgroundBG\";\r\n\r\nexport default class Background extends Part {\r\n static id = 'Background';\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Background';\r\n this.categoryEnabled = false;\r\n this.relatedGroupNames = [\"BG\"];\r\n }\r\n\r\n load(dbFeature, loadFeature = true) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"BG\":\r\n relatedItemName = \"backgroundBG\";\r\n RelatedItemClass = BackgroundBG;\r\n break;\r\n default:\r\n break;\r\n }\r\n return this.loadCommon(relatedItemName, RelatedItemClass, dbFeature, loadFeature)\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n handleSubPartClick() {\r\n\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class BackgroundBG extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'background_bg';\r\n this.partName = 'Background BG';\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new BackgroundBG());\r\n }\r\n}\r\n","import {Part} from \"../part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport {floorThumbnail} from \"../../../kvComponent/core/assets\";\r\n\r\nimport {IntermediatePart} from \"../intermediatePart\";\r\nimport CenterIsland from \"./centerIsland\";\r\nimport {METADATA} from \"../constants\";\r\n\r\nexport default class Floor extends Part {\r\n static id = 'Floor';\r\n\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n this.partId = 'parent_floor';\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Floor';\r\n this.translateId = \"visualizer.kitchen.kitchen_floor\";\r\n this.partThumbnail = floorThumbnail;\r\n this.relatedGroupNames = [\"Floor\"];\r\n }\r\n\r\n load(dbFeature, loadFeature = true) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Flor\":\r\n case \"Floor\":\r\n relatedItemName = \"floorBody\";\r\n RelatedItemClass = FloorBody;\r\n break;\r\n }\r\n return this.loadCommon(relatedItemName, RelatedItemClass, dbFeature, loadFeature)\r\n }\r\n\r\n}\r\n\r\nclass FloorBody extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'kitchen_floor';\r\n this.partName = 'Floor';\r\n this.translateId = \"visualizer.kitchen.kitchen_floor\";\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n if (!dbFeature.metaData[\"CIShape\"]) {\r\n // if floor has no metadata CIShape and island has no metadata CIShape - just show without the meta\r\n dbFeature.metaData[\"CIShape\"] = METADATA.FloorWithIsland\r\n }\r\n return super.load_(dbFeature, new FloorBody());\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n const layout = this.getParent().layout;\r\n const centerIslandParent = layout.parts[CenterIsland.id];\r\n if (centerIslandParent && centerIslandParent.cabinet && (layout.type !== 4)) {\r\n if (centerIslandParent.cabinet.disabled) {\r\n conditions.push({\r\n propName: \"CIShape\",\r\n propValue: \"noCI\"\r\n })\r\n } else if (centerIslandParent.cabinet.activeFeature && centerIslandParent.cabinet.activeFeature.metaData[\"CIShape\"]) {\r\n conditions.push({\r\n propName: \"CIShape\",\r\n propValue: centerIslandParent.cabinet.activeFeature.metaData[\"CIShape\"][0]\r\n })\r\n } else {\r\n conditions.push({\r\n propName: \"CIShape\",\r\n propValue: METADATA.FloorWithIsland\r\n })\r\n }\r\n }\r\n // console.log(\"floor conditions\", conditions);\r\n return conditions\r\n }\r\n\r\n}\r\n\r\n\r\n","import {Part} from \"../part\";\r\nimport {wallsThumbnail} from \"../assets\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\n\r\nimport store from \"../../../../store\";\r\nimport Backsplash from \"../subparts/walls/backsplash\";\r\nimport LeftWall from \"../subparts/walls/leftWall\";\r\nimport RightWall from \"../subparts/walls/rightWall\";\r\nimport CenterWall from \"../subparts/walls/centerWall\";\r\nimport FrontWall from \"../subparts/walls/frontWall\";\r\nimport PonyWall from \"../subparts/walls/ponyWall\";\r\nimport SplitWall from \"../subparts/walls/splitWall\";\r\n\r\nexport default class Walls extends Part {\r\n static id = 'Walls';\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Walls';\r\n this.partThumbnail = wallsThumbnail;\r\n this.translateId = \"visualizer.kitchen.walls\";\r\n\r\n // related items\r\n this.leftWall = null;\r\n this.rightWall = null;\r\n this.centerWall = null;\r\n this.frontWall = null;\r\n this.ceiling = null;\r\n this.backsplash = null;\r\n this.splitWall = null;\r\n this.relatedGroupNames = [\"Backsplash\", \"Left Wall\", \"Right Wall\", \"Center Wall\", \"Front Wall\", \"Pony Wall\",\r\n \"Split Wall\"];\r\n }\r\n\r\n load(dbFeature, loadFeature = true) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Backsplash\":\r\n case \"backsplash\":\r\n relatedItemName = \"backsplash\";\r\n RelatedItemClass = Backsplash;\r\n break;\r\n case \"Left Wall\":\r\n relatedItemName = \"leftWall\";\r\n RelatedItemClass = LeftWall;\r\n break;\r\n case \"Right Wall\":\r\n relatedItemName = \"rightWall\";\r\n RelatedItemClass = RightWall;\r\n break;\r\n case \"Center Wall\":\r\n relatedItemName = \"centerWall\";\r\n RelatedItemClass = CenterWall;\r\n break;\r\n case \"Front Wall\":\r\n relatedItemName = \"frontWall\";\r\n RelatedItemClass = FrontWall;\r\n break;\r\n case \"Pony Wall\":\r\n relatedItemName = \"ponyWall\";\r\n RelatedItemClass = PonyWall;\r\n break;\r\n case \"Split Wall\":\r\n relatedItemName = \"splitWall\";\r\n RelatedItemClass = SplitWall;\r\n break;\r\n // case \"Shower Shadow\":\r\n // if (\r\n // dbFeature.displayName.includes(\"Shower Shadow - Divider Wall\")\r\n // || dbFeature.displayName.includes(\"Shower Shadow - EX L\")\r\n // || dbFeature.displayName.includes(\"Shower Shadow - EX R\")\r\n // || dbFeature.displayName.includes(\"Shower Shadow - Popout\")\r\n // || dbFeature.displayName.includes(\"Shower Shadow - Pony Wall\")\r\n // ) {\r\n // relatedItemName = \"shadows\";\r\n // RelatedItemClass = Shadow;\r\n // }\r\n // break;\r\n }\r\n return this.loadCommon(relatedItemName, RelatedItemClass, dbFeature, loadFeature)\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n subParts(withHidden = true) {\r\n return this.relatedItems\r\n .filter(item => this.filterRelatedItem(item, withHidden))\r\n .map(_ => new DesignNavigationItem(_.partName, _));\r\n }\r\n\r\n handleSubPartClick() {\r\n\r\n }\r\n\r\n recoverPrevioslySelected(activeRelatedPart) {\r\n const {activeQuoteIndex} = store.getState().quotesState;\r\n this.relatedItems.forEach(relatedItem => {\r\n if (relatedItem.partId !== activeRelatedPart.partId && relatedItem.activeFeatureBeforeAllWalls) {\r\n if (relatedItem.activeFeatureBeforeAllWalls === \"placeholder\") {\r\n relatedItem.placeholderChanged = false;\r\n relatedItem.firstClick[activeQuoteIndex] = false;\r\n } else if (!relatedItem.selectedByUser) {\r\n relatedItem.activeFeatureBeforeAllWalls.clickFromAllWalls();\r\n }\r\n }\r\n });\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport Cabinet from \"../../parts/cabinet\";\r\nimport {LayoutAbbreviations} from \"../../constants\";\r\nimport {IS_LIXIL_UI} from \"../../../../../config\";\r\n\r\nexport default class Backsplash extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'backsplash';\r\n this.partName = 'Backsplash';\r\n this.translateId = \"visualizer.kitchen.walls.backsplash\";\r\n this.isStoneFeature = true;\r\n this.allWallsCanBeApplied = true;\r\n if (isChild) {\r\n this.nextFeaturesPageToLoadArray = {};\r\n LayoutAbbreviations.forEach(layoutAbbreviation => {\r\n this.nextFeaturesPageToLoadArray[layoutAbbreviation] = {\r\n page: 0,\r\n allReceived: false,\r\n };\r\n });\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new Backsplash());\r\n }\r\n\r\n alreadyAddedIndex(featureList, name) {\r\n return featureList.findIndex(feature => feature.getSplittedFeatureName() === name)\r\n }\r\n\r\n getBacksplashNavItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n let availableFeatures = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(true), filteredAvailableFeatures);\r\n let featuresToDisplay = [];\r\n const activeType = this.getFeatureBacksplashType(this.activeFeature);\r\n let cabinetLayoutMetaData = null;\r\n if (this.activeFeature && this.featureIsFullWall(this.activeFeature)) { // full backsplashes should be filtered by CabinetLayout metaData\r\n const cabinetParent = this.getParent().layout.parts[Cabinet.id];\r\n cabinetLayoutMetaData = cabinetParent && cabinetParent.topCabinet && cabinetParent.topCabinet.activeFeature\r\n && cabinetParent.topCabinet.activeFeature.metaData && cabinetParent.topCabinet.activeFeature.metaData[\"CabinetLayout\"];\r\n }\r\n for (let feature of availableFeatures) {\r\n const currentName = feature.getSplittedFeatureName();\r\n if (feature.notAvailableInVisualizer) {\r\n continue;\r\n }\r\n const alreadyAddedFeatureIndex = this.alreadyAddedIndex(featuresToDisplay, currentName);\r\n const matchByType = !activeType || (this.getFeatureBacksplashType(feature) === activeType);\r\n const matchByCabLayout = !cabinetLayoutMetaData || (feature.metaData && feature.metaData[\"CabinetLayout\"]\r\n && feature.metaData[\"CabinetLayout\"].includes(cabinetLayoutMetaData[0]));\r\n\r\n if (IS_LIXIL_UI) {\r\n if (alreadyAddedFeatureIndex > -1) {\r\n if (matchByType && matchByCabLayout) {\r\n featuresToDisplay.splice(alreadyAddedFeatureIndex, 1, feature);\r\n }\r\n } else {\r\n featuresToDisplay.push(feature);\r\n }\r\n } else if ((alreadyAddedFeatureIndex === -1) && matchByType && matchByCabLayout) {\r\n featuresToDisplay.push(feature);\r\n }\r\n }\r\n return featuresToDisplay\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const featuresToDisplay = this.getBacksplashNavItems(filters, searchText);\r\n return this.returnUniqueNavFeatures(featuresToDisplay);\r\n }\r\n\r\n getFeatureByBacksplashType(neededType, featureName = \"\", sameNameOnly = false) {\r\n const conditions = this.getArrayOfConditions();\r\n let featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(conditions);\r\n const matchingFeatures = featuresToDisplay.filter(feature => this.getFeatureBacksplashType(feature) === neededType);\r\n\r\n let currentPartName = featureName;\r\n if (!currentPartName && this.activeFeature) {\r\n currentPartName = this.activeFeature.getSplittedFeatureName();\r\n }\r\n\r\n const matchByName = matchingFeatures.filter(feature => {\r\n return feature.getSplittedFeatureName() === currentPartName\r\n });\r\n if (matchByName.length > 1) {\r\n const cabinetLayoutMetaData = this.getTopCabinetCabinetLayoutMetadata();\r\n const sameCabinetType = matchByName.find(feature => {\r\n if (this.featureIsFullWall(feature)) {\r\n return feature.matchesMetaForArrayOfConditions([\r\n {\r\n propName: 'CabinetLayout',\r\n propValue: cabinetLayoutMetaData\r\n }\r\n ])\r\n }\r\n });\r\n return sameCabinetType || matchByName[0];\r\n }\r\n if (sameNameOnly) {\r\n return matchByName[0]\r\n }\r\n return matchByName[0] || matchingFeatures[0];\r\n }\r\n\r\n featureIsFullWall = (feature) => {\r\n return this.getFeatureBacksplashType(feature) === \"Full\"\r\n }\r\n\r\n getFeatureBacksplashType = (feature) => {\r\n return feature && Array.isArray(feature.metaData[\"BacksplashType\"]) ? feature.metaData[\"BacksplashType\"][0] : null\r\n }\r\n\r\n getCurrentActiveFeatureType() {\r\n return this.getFeatureBacksplashType(this.activeFeature)\r\n }\r\n\r\n // setFeatureByName = async () => {\r\n // window.requestInProcess = true;\r\n // loaderEnable();\r\n // const splittedName = this.activeFeature.getSplittedFeatureName();\r\n // await Navigation.searchFeaturesByName(this, splittedName);\r\n // const neededFeature = this.findFeatureByPartName(splittedName, true);\r\n // if (neededFeature) {\r\n // this.activeFeature = neededFeature;\r\n // }\r\n // window.requestInProcess = false;\r\n // loaderDisable();\r\n // $(window).trigger(ActionTypes.CHANGE_LAYOUT); // update canvas\r\n // };\r\n\r\n getTopCabinetCabinetLayoutMetadata() {\r\n const cabinetParent = this.getParent().layout.parts[Cabinet.id];\r\n return cabinetParent && cabinetParent.topCabinet && cabinetParent.topCabinet.activeFeature\r\n && cabinetParent.topCabinet.activeFeature.metaData && cabinetParent.topCabinet.activeFeature.metaData[\"CabinetLayout\"];\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class LeftWall extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'left_wall';\r\n this.partName = 'Left Wall';\r\n this.translateId = \"visualizer.kitchen.walls.left_wall\";\r\n this.activeFeatureBeforeAllWalls = null;\r\n this.allWallsApplied = true;\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new LeftWall());\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class RightWall extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'right_wall';\r\n this.partName = 'Right Wall';\r\n this.translateId = \"visualizer.kitchen.walls.right_wall\";\r\n this.activeFeatureBeforeAllWalls = null;\r\n this.allWallsApplied = true;\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new RightWall());\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class CenterWall extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'center_wall';\r\n this.partName = 'Center Wall';\r\n this.translateId = \"visualizer.bathroom.walls.center_wall\";\r\n this.activeFeatureBeforeAllWalls = null;\r\n this.allWallsApplied = true;\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new CenterWall());\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class FrontWall extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'front_wall';\r\n this.partName = 'Front Wall';\r\n this.translateId = \"visualizer.bathroom.walls.front_wall\";\r\n this.activeFeatureBeforeAllWalls = null;\r\n this.allWallsApplied = true;\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new FrontWall());\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class PonyWall extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'pony_wall';\r\n this.visible = true;\r\n this.partName = 'Pony Wall';\r\n this.translateId = \"visualizer.bathroom.walls.pony_wall\";\r\n this.activeFeatureBeforeAllWalls = null;\r\n this.allWallsApplied = true;\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n if (dbFeature.metaData[\"Part\"]) {\r\n const partNumber = +dbFeature.metaData[\"Part\"][0];\r\n return this.load_(dbFeature, new this.constructor(false, partNumber), true, partNumber === 0 ? 'features' : 'featuresParts');\r\n }\r\n return this.load_(dbFeature, new this.constructor());\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class SplitWall extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'split_wall';\r\n this.partName = 'Split Wall';\r\n this.translateId = \"visualizer.bathroom.walls.split_wall\";\r\n this.activeFeatureBeforeAllWalls = null;\r\n this.allWallsApplied = true;\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new SplitWall());\r\n }\r\n}\r\n","import React from 'react';\r\nimport {connect} from \"react-redux\";\r\nimport classNames from 'classnames';\r\nimport $ from 'jquery';\r\n\r\nimport {\r\n toggleDesktopNavigation,\r\n setActiveNavigationNames,\r\n setModuleContextMenuType,\r\n setActiveNavigationFilter, setActiveNavigationFilterStepIndex, setNavigationViewType, setNavigationLoading\r\n} from \"../../../actions/navigationFunctions\";\r\nimport {setDefaultSelectionGroup, changeActivePartRelatedItemIndex} from \"../../../actions/actionFunctions\";\r\nimport DesktopNavigationCommon from \"../../visComponents/navigation/desktopNavigationCommon\";\r\nimport Z from \"../core/zIndex\";\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\n\r\nimport LockedView from \"../../common/lockedView\";\r\nimport {ContentType} from \"../../visComponents/constants\";\r\nimport ContextMenuSimple from \"./contextMenuSimple\";\r\n// import CabinetContextMenu from \"./cabinetContextMenu\";\r\nimport MobileMenuSelect from \"../../visComponents/navigation/mobile/mobileMenuSelect\";\r\nimport {setVisualizerTutorialStep, showVisualizerTutorial} from \"../../../actions/tutorialFunctions\";\r\nimport CenterIsland from \"../core/parts/centerIsland\";\r\n\r\nclass DesktopNavigation extends DesktopNavigationCommon {\r\n\r\n bindCanvasClick = (event) => {\r\n const layout = getCurrentLayout();\r\n // const canvas = document.getElementById(this.props.canvasId);\r\n this.props.setHoveredLayer(event);\r\n\r\n if (document.hoveredLayer) {\r\n\r\n const layoutType = layout.getCurrentLayoutName();\r\n\r\n const hoveredZone = Z.getMenuByHoveredLayer(layoutType, document.hoveredLayer);\r\n\r\n // console.log('hoveredZone', hoveredZone);\r\n\r\n if (hoveredZone) {\r\n if (hoveredZone.contextMenuPartId && !this.state.showNavigation) {\r\n if (this.state.contextMenuOpen) {\r\n this.setState({\r\n contextMenuOpen: false,\r\n hoveredLayer: {}\r\n });\r\n } else {\r\n this.openContextMenu(hoveredZone, event);\r\n }\r\n return false;\r\n } else if (this.state.contentType === 0) {\r\n this.setState({\r\n showNavigation: true,\r\n contentType: ContentType.Design,\r\n contextMenuOpen: false,\r\n hoveredLayer: {}\r\n }, () => {\r\n this.setNewActiveFeature();\r\n this.menuOpened();\r\n setTimeout(() => {\r\n $(document).on('click', this.handleWrapperBlur);\r\n }, 0)\r\n });\r\n }\r\n\r\n hoveredZone.child\r\n ? this.triggerOpenNavigationMenu(hoveredZone.child, hoveredZone.parent)\r\n : this.triggerOpenNavigationMenu(hoveredZone)\r\n\r\n }\r\n\r\n }\r\n\r\n };\r\n\r\n openContextMenu = (contextMenuOpen, event) => {\r\n let contextMenuButtons = [];\r\n if (contextMenuOpen.contextMenuPartId === \"top_cabinet\") {\r\n // const hoveredParent = this.props.designNavigationItems.find(navItem => {\r\n // return navItem.text === \"Cabinet\"\r\n // });\r\n // if (hoveredParent) {\r\n //\r\n // }\r\n contextMenuButtons = [1, 2, 3, 4, 5]\r\n }\r\n // const receiveBackSplashes = () => {\r\n // const layout = getCurrentLayout();\r\n // const wallsParent = layout.parts[\"Walls\"];\r\n // const backsplashSubPart = wallsParent.subParts().find(subPart => subPart.part.partId === \"backsplash\");\r\n // this.checkIfAllFeaturesReceived(backsplashSubPart);\r\n // };\r\n switch (contextMenuOpen.contextMenuPartId) {\r\n case \"countertop_group_custom\":\r\n contextMenuOpen = \"Countertop\";\r\n break;\r\n case \"right_wall_custom\":\r\n contextMenuOpen = \"right_wall_custom\";\r\n break;\r\n case \"left_wall_custom\":\r\n contextMenuOpen = \"left_wall_custom\";\r\n break;\r\n case \"backsplash_custom_left\": {\r\n // receiveBackSplashes();\r\n contextMenuOpen = \"backsplash_custom_left\";\r\n break;\r\n }\r\n case \"backsplash_custom_right\": {\r\n // receiveBackSplashes();\r\n contextMenuOpen = \"backsplash_custom_right\";\r\n break;\r\n }\r\n case \"backsplash_custom\": {\r\n // receiveBackSplashes();\r\n contextMenuOpen = \"backsplash_custom\";\r\n break;\r\n }\r\n case \"center_island_custom\":\r\n contextMenuOpen = CenterIsland.id;\r\n break;\r\n default:\r\n break;\r\n }\r\n const isMobile = $(window).width() < 991;\r\n\r\n let left = isMobile ? '50%' : event.clientX - 50;\r\n let top = isMobile ? '50%' : event.clientY - 50;\r\n let right = 'auto';\r\n\r\n const maxAllowedWidth = contextMenuButtons.length > 2 ? 300 : 210;\r\n\r\n let maxAllowedHeight = 110;\r\n if (contextMenuButtons.length > 6) {\r\n maxAllowedHeight = 330;\r\n } else if (contextMenuButtons.length > 3) {\r\n maxAllowedHeight = 220;\r\n }\r\n if (!isMobile && (left > window.innerWidth - maxAllowedWidth)) {\r\n left = 'auto';\r\n right = 0\r\n }\r\n if (!isMobile && (top > window.innerHeight - maxAllowedHeight)) {\r\n let negativeMargin = 50;\r\n if (contextMenuButtons.length > 6) {\r\n negativeMargin = 250;\r\n } else if (contextMenuButtons.length > 3) {\r\n negativeMargin = 150;\r\n }\r\n top = top - negativeMargin;\r\n }\r\n this.setState({\r\n contextMenuOpen,\r\n hoveredLayer: document.hoveredLayer,\r\n contextMenuPosition: {\r\n left,\r\n right,\r\n top,\r\n }\r\n });\r\n };\r\n\r\n handleNavigationItemClick = (item, ignoreLocked = false) => {\r\n this.navigationItemClickCommon(item);\r\n this.itemClick(item, ignoreLocked);\r\n\r\n const updateSideBarIds = [\"center_island_cabinet\", \"top_cabinet\"];\r\n if (updateSideBarIds.includes(item.part.partId)) {\r\n this.updateSideBar();\r\n }\r\n\r\n if (this.state.parentNavigationItem) { // update canvas only if it is child\r\n this.props.refreshCB();\r\n }\r\n };\r\n\r\n render() {\r\n const layout = getCurrentLayout();\r\n // const fabricatorSettings = this.props.fabricatorSettings;\r\n const activePart = this.state.parentNavigationItem ? this.state.parentNavigationItem.part : null;\r\n const activeSubPart = this.state.childNavigationItem ? this.state.childNavigationItem.part : null;\r\n // const activeNavPart = activeSubPart || activePart;\r\n const parentItems = layout.designNavigationItems(); // parent list without filters\r\n\r\n const useWizard = false, wizardGroups = [];\r\n\r\n let showNavigationFiltersSteps = false;\r\n\r\n if (activeSubPart && activeSubPart.canUseNavigationFilterSteps\r\n && activeSubPart.canUseNavigationFilterSteps()) {\r\n showNavigationFiltersSteps = !this.props.countertopNavigationFilterCompleted;\r\n }\r\n\r\n const showLockedView = this.currentActiveItemIsLocked(useWizard);\r\n\r\n const useFilters = false;\r\n const availableNavButtons = [ContentType.Design, ContentType.Layout, ContentType.RoomScene, ContentType.DisplayRoom];\r\n\r\n return (\r\n
    \r\n \r\n
    this.navWrapper = node}>\r\n
    \r\n
    \r\n {this.content(useWizard, wizardGroups, useFilters, activePart, activeSubPart)}\r\n
    \r\n
    \r\n {this.navigationMenuButtons(availableNavButtons)}\r\n {showNavigationFiltersSteps ? null : (\r\n
    \r\n \r\n
    \r\n )}\r\n {/*
    */}\r\n {/*
    */}\r\n {/**/}\r\n {/*
    */}\r\n {/*
    */}\r\n
    \r\n {this.state.contextMenuOpen && !this.state.contextMenuOpen.module\r\n ? \r\n : null}\r\n
    \r\n {showLockedView\r\n ? \r\n : null}\r\n
    \r\n )\r\n }\r\n\r\n}\r\n\r\nconst mapStateToProps = (store) => ({\r\n filtersVisible: store.filterState.showFilters,\r\n filterGroups: store.filterState.filterGroups,\r\n bvPresets: store.bathroomVisualizerState.bvPresets,\r\n userIsLoggedIn: store.userState.userIsLoggedIn,\r\n isPhoneNumberValidated: store.userState.isPhoneNumberValidated,\r\n activeNavigationFilter: store.navigationState.activeNavigationFilter,\r\n countertopNavigationFilterCompleted: store.navigationState.countertopNavigationFilterCompleted,\r\n visualizerTutorialStep: store.tutorialState.visualizerTutorialStep,\r\n visualizerTutorialIsOpened: store.tutorialState.visualizerTutorialIsOpened,\r\n activeQuoteIndex: store.quotesState.activeQuoteIndex,\r\n fabricatorData: store.fabricatorState,\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n setNavigationViewType,\r\n toggleDesktopNavigation,\r\n setActiveNavigationNames,\r\n setModuleContextMenuType,\r\n setActiveNavigationFilter,\r\n setActiveNavigationFilterStepIndex,\r\n setDefaultSelectionGroup,\r\n changeActivePartRelatedItemIndex,\r\n setVisualizerTutorialStep,\r\n showVisualizerTutorial,\r\n setNavigationLoading\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(DesktopNavigation);\r\n","import React from 'react';\r\nimport {connect} from 'react-redux';\r\nimport {injectIntl} from \"react-intl\";\r\n\r\nimport MobileNavigationCommon from \"../../visComponents/navigation/mobileNavigationCommon\";\r\n\r\nimport {ContentType} from \"../../visComponents/constants\";\r\nimport Z from \"../core/zIndex\";\r\n\r\nimport MobileNavigationButtons from '../../visComponents/navigation/mobile/mobileNavigationButtons';\r\nimport MobileNavigationAllWallsCheckbox from '../../visComponents/navigation/mobile/mobileNavigationAllWallsCheckbox';\r\nimport FeatureWizardSteps from \"../../visComponents/navigation/featureWizard/featureWizardSteps\";\r\n\r\nimport {changeActivePartRelatedItemIndex, setDefaultSelectionGroup} from \"../../../actions/actionFunctions\";\r\nimport {\r\n setActiveNavigationFilter,\r\n setModuleContextMenuType,\r\n setModuleContextMenuModule,\r\n setActiveNavigationFilterStepIndex, setNavigationViewType, setNavigationLoading\r\n} from \"../../../actions/navigationFunctions\";\r\n\r\nimport MobileMenuSelect from '../../visComponents/navigation/mobile/mobileMenuSelect';\r\nimport LockedView from \"../../common/lockedView\";\r\n\r\nimport Filters from \"../../visComponents/navigation/newFilters/filters\";\r\nimport BodyPanelRadio from \"../../visComponents/navigation/desktop/bodyPanelRadio\";\r\nimport FilterSwitchers from \"../../visComponents/navigation/newFilters/filterSwitchers\";\r\nimport FilterSelection from \"../../visComponents/navigation/newFilters/filterSelection\";\r\n// import {CABINET_WIZARD_BUTTONS} from \"../core/constants\";\r\nimport NavigationFiltersSteps from \"../../visComponents/navigation/newFilters/navigationFiltersSteps\";\r\nimport ContextMenuSimple from \"./contextMenuSimple\";\r\n\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\nimport CabinetSwitchers from \"../../kvComponent/navigation/cabinetSwitchers\";\r\nimport CountertopSwitchers from \"../../kvComponent/navigation/countertopSwitchers\";\r\nimport CenterIsland from \"../core/parts/centerIsland\";\r\nimport LookAllWallsRadioButton from \"../../look/lookNavigation/lookMain/lookAllWallsRadioButton\";\r\n\r\nclass MobileNavigation extends MobileNavigationCommon {\r\n\r\n componentWillReceiveProps(nextProps) {\r\n this._componentWillReceiveProps(nextProps)\r\n }\r\n\r\n bindCanvasClick = (event) => {\r\n const layout = getCurrentLayout();\r\n // console.log(\"bindCanvasClick event\");\r\n\r\n const canvas = document.getElementById(this.props.canvasId);\r\n\r\n if (!window.touchMove && !this.state.showNavigation && !this.state.contextMenuOpen) {\r\n this.props.setHoveredLayer(event);\r\n }\r\n\r\n if (document.hoveredLayer && !window.touchMove) {\r\n // $('.canvas-text').html(`CLICK3`);\r\n const layoutType = layout.getCurrentLayoutName();\r\n\r\n let hoveredZone = Z.getMenuByHoveredLayer(layoutType, document.hoveredLayer, canvas);\r\n if (hoveredZone) {\r\n if (hoveredZone.contextMenuPartId && !this.state.showNavigation) {\r\n if (this.state.contextMenuOpen) {\r\n this.setState({\r\n contextMenuOpen: false,\r\n hoveredLayer: {}\r\n });\r\n document.removeEventListener('click', this.handleContextMenuBlur);\r\n } else {\r\n let contextMenuOpen = \"\";\r\n\r\n const receiveBackSplashes = () => {\r\n const wallsParent = layout.parts[\"Walls\"];\r\n const backsplashSubPart = wallsParent.subParts().find(subPart => subPart.part.partId === \"backsplash\");\r\n this.checkIfAllFeaturesReceived(backsplashSubPart);\r\n };\r\n\r\n switch (hoveredZone.contextMenuPartId) {\r\n case \"countertop_group_custom\":\r\n contextMenuOpen = \"Countertop\";\r\n break;\r\n case \"right_wall_custom\":\r\n contextMenuOpen = \"right_wall_custom\";\r\n break;\r\n case \"left_wall_custom\":\r\n contextMenuOpen = \"left_wall_custom\";\r\n break;\r\n case \"backsplash_custom_left\": {\r\n receiveBackSplashes();\r\n contextMenuOpen = \"backsplash_custom_left\";\r\n break;\r\n }\r\n case \"backsplash_custom_right\": {\r\n receiveBackSplashes();\r\n contextMenuOpen = \"backsplash_custom_right\";\r\n break;\r\n }\r\n case \"backsplash_custom\": {\r\n receiveBackSplashes();\r\n contextMenuOpen = \"backsplash_custom\";\r\n break;\r\n }\r\n case \"center_island_custom\":\r\n contextMenuOpen = CenterIsland.id;\r\n break;\r\n default:\r\n break;\r\n }\r\n this.setState({\r\n contextMenuOpen: contextMenuOpen || hoveredZone,\r\n hoveredLayer: document.hoveredLayer\r\n }, () => {\r\n if (contextMenuOpen) {\r\n setTimeout(() => {\r\n document.addEventListener('click', this.handleContextMenuBlur);\r\n }, 0)\r\n }\r\n });\r\n }\r\n return false;\r\n } else if (this.state.contentType === 0) {\r\n if (!window.canvasIsDragging) {\r\n this.props.setCanvasClass((hoveredZone.child || hoveredZone.parent || hoveredZone).toLowerCase().replace(/ /g, \"-\"));\r\n }\r\n this.openMobileMenu();\r\n }\r\n\r\n hoveredZone.child\r\n ? this.triggerOpenNavigationMenu(hoveredZone.child, hoveredZone.parent, false)\r\n : this.triggerOpenNavigationMenu(hoveredZone)\r\n\r\n }\r\n\r\n }\r\n\r\n };\r\n\r\n handleNavigationItemClick = (item, ignoreLocked = false) => {\r\n\r\n if (window.location.port === '9007' || document.kvConfig.kioskMode) {\r\n console.log('item', item);\r\n }\r\n this.itemClick(item, ignoreLocked);\r\n\r\n this.props.setActiveFeature(item.part);\r\n\r\n const canvasClass = this.state.childNavigationItem\r\n ? this.state.parentNavigationItem.text + '-' + this.state.childNavigationItem.text\r\n : this.state.parentNavigationItem.text;\r\n\r\n if (!window.canvasIsDragging) {\r\n this.props.setCanvasClass(canvasClass.toLowerCase().replace(/ /g, \"-\"));\r\n }\r\n\r\n if (this.state.parentNavigationItem) { // update canvas only if it is child\r\n this.props.refreshCB();\r\n }\r\n if (item.part.partId === \"top_cabinet\" && !item.part.metaData[\"Module\"]) {\r\n this.props.setModuleContextMenuModule(null)\r\n }\r\n };\r\n\r\n handleSubPartClick = (subNavigationItem, activeNavigationFilter = null) => { // sidebar list item click\r\n const subItemPart = subNavigationItem.part;\r\n const childNavigationItemPartId = subItemPart.partId;\r\n subItemPart.getParent().handleSubPartClick(subItemPart);\r\n this.setState({\r\n childNavigationItem: subNavigationItem,\r\n showFilterSelection: subItemPart.allFeaturesReceived, // show filters only if subItemPart has all features\r\n showerWallWizardGroupsSelected: false,\r\n searchText: \"\"\r\n }, () => {\r\n this.scrollContentToTop();\r\n this.rememberWallsSelection();\r\n this.checkIfAllFeaturesReceived(subNavigationItem, \"childNavigationItem\");\r\n });\r\n /*set new materials page subIndex*/\r\n this.setActivePartRelatedItemIndex(subNavigationItem);\r\n // console.log('subItemPart', subItemPart);\r\n if (!window.canvasIsDragging) {\r\n const canvasClass = this.state.parentNavigationItem.text + '-' + subNavigationItem.text\r\n .toLowerCase().replace(/ /g, \"-\");\r\n this.props.setCanvasClass(canvasClass);\r\n }\r\n this.setNewActiveFeature(subNavigationItem);\r\n\r\n this.setNavigationFilterIfTheChildWasChanged(childNavigationItemPartId, activeNavigationFilter);\r\n\r\n };\r\n\r\n backsplashSelectClick = () => {\r\n this.props.refreshCB(); // update canvas\r\n this.reRenderComponent(); // update nav items\r\n };\r\n\r\n render() {\r\n const {fabricatorData} = this.props;\r\n const layout = getCurrentLayout();\r\n const activePart = this.state.parentNavigationItem ? this.state.parentNavigationItem.part : null;\r\n const activeSubPart = this.state.childNavigationItem ? this.state.childNavigationItem.part : null;\r\n const activeNavPart = activeSubPart || activePart;\r\n const parentItems = layout.designNavigationItems(); // parent list without filters\r\n const allFeaturesReceived = activeNavPart && activeNavPart.allFeaturesReceived;\r\n\r\n // console.log('activePart', activePart);\r\n // console.log('activeSubPart', activeSubPart);\r\n // console.log('activePart.subTypes()', activePart && activePart.subTypes());\r\n // console.log('this.state.childNavigationItemv1111', this.state.childNavigationItem);\r\n\r\n let useWizard = false;\r\n let wizardGroups = [];\r\n if (this.props.fabricatorSettings\r\n && (this.props.fabricatorSettings.wizardConsumers || (this.props.fabricatorSettings.wizardClients && document.kvConfig.isBackend))\r\n && this.state.contentType === ContentType.Design && activeSubPart && activeSubPart.canUseWizard && activeSubPart.allFeaturesReceived) {\r\n useWizard = true;\r\n wizardGroups = this.state[this.getWizardGroupsByPartId(this.state.childNavigationItem.part.partId)];\r\n }\r\n\r\n const features = this.getFeatures(layout);\r\n\r\n const showLockedView = this.currentActiveItemIsLocked(useWizard);\r\n\r\n const useFilters = (activePart && activePart.partId === \"kitchen_floor\" && activePart.allFeaturesReceived)\r\n || (activeSubPart && (this.isWallItem(activeSubPart) || activeSubPart.partId === \"accent_wall\"\r\n || activeSubPart.partId === \"shower_interior_wall_accent\") && activeSubPart.allFeaturesReceived);\r\n\r\n const filterSelectionHasValues = activeNavPart && FilterSelection.getAvailableFilterValues(\r\n this.props.filterGroups, \"Material\", activeNavPart, fabricatorData\r\n ).length;\r\n\r\n const itemIsSelected = (!this.props.fabricatorSettings.leadCapture\r\n || (activeSubPart && activeSubPart.activeFeature && activeSubPart.firstClick[this.props.activeQuoteIndex] && activeSubPart.placeholderChanged));\r\n\r\n const useKVWizard = false;\r\n //TODO change it when BE is ready\r\n\r\n const showNavigationFilters = useKVWizard &&activeNavPart\r\n // && this.props.activeNavigationFilter !== CABINET_WIZARD_BUTTONS[0].buttonId\r\n && activeNavPart.canUseNavigationFilter && activeNavPart.canUseNavigationFilter();\r\n\r\n let showNavigationFiltersSteps = false;\r\n if (useKVWizard && activeNavPart && activeNavPart.canUseNavigationFilterSteps\r\n && activeNavPart.canUseNavigationFilterSteps()) {\r\n showNavigationFiltersSteps = !this.props.countertopNavigationFilterCompleted;\r\n }\r\n\r\n const cabinetsPartIds = [\"top_cabinet\", \"bottom_cabinet\", \"center_island_cabinet\"];\r\n const isCabinet = activeSubPart && cabinetsPartIds.includes(activeSubPart.partId);\r\n const countertopPartIds = [\"countertop\", \"backsplash\", \"center_island_countertop\"];\r\n const isCountertop = activeSubPart && countertopPartIds.includes(activeSubPart.partId);\r\n\r\n return (\r\n
    \r\n
    \r\n {/*
    \r\n
    \r\n {this.state.contextMenuOpen && !this.state.contextMenuOpen.module\r\n ? \r\n : null}\r\n {showLockedView\r\n ? \r\n : null}\r\n \r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => ({\r\n fabricatorData: store.fabricatorState,\r\n selectedFilters: store.filterState.selectedFilters,\r\n filtersVisible: store.filterState.showFilters,\r\n filterGroups: store.filterState.filterGroups,\r\n bvPresets: store.bathroomVisualizerState.bvPresets,\r\n userPopupOpened: store.userState.userPopupOpened,\r\n activeNavigationFilter: store.navigationState.activeNavigationFilter,\r\n countertopNavigationFilterCompleted: store.navigationState.countertopNavigationFilterCompleted,\r\n newLayoutType: store.sqftState.newLayoutType,\r\n activeQuoteIndex: store.quotesState.activeQuoteIndex,\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n setNavigationViewType,\r\n setModuleContextMenuType,\r\n setDefaultSelectionGroup,\r\n changeActivePartRelatedItemIndex,\r\n setActiveNavigationFilter,\r\n setActiveNavigationFilterStepIndex,\r\n setModuleContextMenuModule,\r\n setNavigationLoading\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(MobileNavigation)\r\n);\r\n","import snakeCase from \"lodash/snakeCase\";\r\nimport {Part} from \"../part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport NonVisualizerSubPart from \"../subparts/nonVisualizerSubPart\";\r\n\r\nexport default class Other extends Part {\r\n static id = 'Other';\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Other';\r\n this.categoryEnabled = false;\r\n }\r\n\r\n load(dbFeature) {\r\n // console.log(\"load other\", dbFeature.groupName);\r\n const partId = snakeCase(dbFeature.groupName);\r\n let relatedItem = this.relatedItems.find(relatedItem => relatedItem.partId === partId);\r\n if (!relatedItem) {\r\n relatedItem = new NonVisualizerSubPart(true, partId, dbFeature.groupName);\r\n this.relatedItems.push(relatedItem);\r\n }\r\n relatedItem.getParent = () => this;\r\n relatedItem.load(dbFeature);\r\n return true\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n handleSubPartClick() {\r\n\r\n }\r\n\r\n}\r\n","import {Part} from \"../part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport BackgroundBG from \"../subparts/backgrounds/BackgroundBG\";\r\n\r\nexport default class Background extends Part {\r\n static id = 'Background';\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Background';\r\n this.categoryEnabled = false;\r\n }\r\n\r\n load(dbFeature) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Background\":\r\n switch (true) {\r\n case dbFeature.displayName.includes(\"BG \"):\r\n relatedItemName = \"backgroundBG\";\r\n RelatedItemClass = BackgroundBG;\r\n break;\r\n }\r\n break;\r\n default:\r\n break;\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n handleSubPartClick() {\r\n\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {ShowerAccessories} from \"../../parts/showerAccessories\";\r\nimport {Shower} from \"../../parts/shower\";\r\nimport {IS_BATHROOM_OLD_BV_SCENE} from \"../../../../../config\";\r\n\r\nexport default class BackgroundBG extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'background_bg';\r\n this.partName = 'Background BG';\r\n this.windowNeededLayouts = [1];\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new BackgroundBG());\r\n }\r\n\r\n getArrayOfConditions() {\r\n const layout = this.getParent().layout;\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n const showerAccessoriesParent = layout.parts[ShowerAccessories.id];\r\n const showerParent = layout.parts[Shower.id];\r\n\r\n const windowBody = showerAccessoriesParent.windowBody;\r\n if (windowBody && this.windowNeededLayouts.includes(layout.type) && document.kvConfig.toolVersion !== 5) {\r\n conditions.push({\r\n propName: \"Window\",\r\n propValue: (windowBody && windowBody.activeFeature && windowBody.disabled) ? \"Off\" : \"On\"\r\n })\r\n }\r\n\r\n if (showerParent && showerParent.showerSize() && !IS_BATHROOM_OLD_BV_SCENE) {\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerParent.showerSize()\r\n })\r\n }\r\n\r\n return conditions\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Background.BackgroundBG;\r\n }\r\n }\r\n}\r\n","import {Shower} from \"../../parts/shower\";\r\nimport {SIDE_POSITIONS} from \"../../constants\";\r\nimport AccessoryCommon from \"./accessoryCommon\";\r\n\r\nexport default class LargeCornerSeat extends AccessoryCommon {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'large_corner_seat';\r\n this.partName = 'Large Corner Seat';\r\n this.translateId = \"visualizer.bathroom.accessories.large_corner_seat\";\r\n this.visible = true;\r\n this.canBeDisabled = true;\r\n if (isChild) {\r\n this.layerPositions = {\r\n [SIDE_POSITIONS[0]]: null,\r\n [SIDE_POSITIONS[1]]: null,\r\n };\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n dbFeature.metaData[\"layerPosition\"] = dbFeature.metaData[\"Side\"] ? dbFeature.metaData[\"Side\"][0] : \"\";\r\n const partNumber = dbFeature.metaData[\"layerPosition\"] === SIDE_POSITIONS[0] ? 1 : 2;\r\n return super.load_(dbFeature, new LargeCornerSeat(false, partNumber),\r\n true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n\r\n disabledClick() {\r\n Object.keys(this.layerPositions).forEach(position => {\r\n if (this.layerPositions[position] && this.layerPositions[position].metaData[\"layerPosition\"]) {\r\n this.checkRelatedFeatureGroupPositions(this.layerPositions[position].metaData[\"layerPosition\"]);\r\n }\r\n })\r\n }\r\n\r\n handleClick() {\r\n const parent = this.getParent();\r\n // const accessoriesParent = parent.getParent(); // it is removing corner shelf! but it shouldn't\r\n // accessoriesParent.caddie_type = this.partId;\r\n parent.checkRelatedFeatureGroupPositions(this.metaData[\"layerPosition\"]);\r\n super.handleClick();\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const showerParent = this.getParent().layout.parts[Shower.id];\r\n if (showerParent && showerParent.showerTubComboIsActive()) { // shower tub combo - remove\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions()))) {\r\n // this.checkIfFeaturePartIsMatching();\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes) {\r\n Object.keys(this.layerPositions).forEach((key, keyIndex) => {\r\n if (this.layerPositions[key]) {\r\n this.layerPositions[key].layer.zIndex = zIndexes.Accessories.LargeCornerSeat + keyIndex*10;\r\n }\r\n })\r\n }\r\n }\r\n\r\n}\r\n\r\n","import TubCommon from \"./tubCommon\";\r\n\r\nexport default class BathTubLiner extends TubCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = \"bathtub_liner\";\r\n this.bottomTubId = \"bathtub_liner\";\r\n this.visible = true;\r\n this.partName = \"Tub Liner\";\r\n this.translateId = \"visualizer.bathroom.shower_tub_combo.bathtub_liner\";\r\n this.dbName = \"Bathtub Liner\";\r\n this.isStoneFeature = false;\r\n this.disableOnHomeSections = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new BathTubLiner());\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Shower.TubCombo.Liner;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n}\r\n","import TubCommon from \"./tubCommon\";\r\n\r\nexport default class ReplacementTub extends TubCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'replacement_tub';\r\n this.bottomTubId = \"replacement_tub\";\r\n this.visible = true;\r\n this.partName = 'Replacement Tub';\r\n this.translateId = \"visualizer.bathroom.shower_tub_combo.replacement_tub\";\r\n this.isStoneFeature = false;\r\n this.disableOnHomeSections = true;\r\n if (isChild) {\r\n this.oneLayerPosition = true;\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n dbFeature.metaData[\"layerPosition\"] = dbFeature.metaData[\"Side\"] ? dbFeature.metaData[\"Side\"][0] : \"\";\r\n return super.load_(dbFeature, new ReplacementTub());\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n return this.navigationSubItemsWithSides(filters, searchText);\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Shower.TubCombo.ReplacementTub;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n}\r\n","import TubCommon from \"./tubCommon\";\r\n\r\nexport default class WalkInTub extends TubCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'walk_in_tub';\r\n this.bottomTubId = \"walk_in_tub\";\r\n this.visible = true;\r\n this.partName = 'Walk In Tub';\r\n this.translateId = \"visualizer.bathroom.shower_tub_combo.walk_in_tub\";\r\n this.isStoneFeature = false;\r\n if (isChild) {\r\n this.oneLayerPosition = true;\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n dbFeature.metaData[\"layerPosition\"] = dbFeature.metaData[\"Side\"] ? dbFeature.metaData[\"Side\"][0] : \"\";\r\n return super.load_(dbFeature, new WalkInTub());\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n return this.navigationSubItemsWithSides(filters, searchText);\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Shower.TubCombo.WalkInTub;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n\r\n}\r\n","import TubCommon from \"./tubCommon\";\r\n\r\nexport default class JettedTub extends TubCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'jetted_tub';\r\n this.bottomTubId = \"jetted_tub\";\r\n this.visible = true;\r\n this.partName = 'Jetted Tub';\r\n this.translateId = \"visualizer.bathroom.shower_tub_combo.jetted_tub\";\r\n this.isStoneFeature = false;\r\n this.disableOnHomeSections = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new JettedTub());\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Shower.TubCombo.JettedTub;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class WallConfiguration extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'wall_configuration';\r\n this.partName = 'Wall Configuration';\r\n this.translateId = \"visualizer.bathroom.shower_tub_combo.wall_configuration\";\r\n this.visible = true;\r\n this.isStoneFeature = false;\r\n this.disableOnHomeSections = true;\r\n this.createdManually = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new WallConfiguration())\r\n }\r\n\r\n // setLayers(layout) {\r\n // this.activeFeature = this.features.find((feature) => {\r\n // return feature.partName === this.getParent().showerBody.activeFeature.partName // set the same glass as Body\r\n // });\r\n // return super.setLayers(layout);\r\n // }\r\n\r\n handleClick() {\r\n super.handleClick();\r\n const showerTubComboParent = this.getParent().getParent();\r\n showerTubComboParent.setShowerTubCombo();\r\n showerTubComboParent.setShowerSize(this.leftShowerWallType, this.showerComboSize);\r\n this.featureClicked();\r\n }\r\n\r\n setZIndex() {}\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\nimport {getFeatureIsLocked} from \"../../../../../misc/helpers\";\r\nimport store from \"../../../../../store\";\r\nimport {toggleNotCompatibleView} from \"../../../../../actions/selectionFunctions\";\r\nimport {PAN_POSITIONS, ShowerComboTubType} from \"../../constants\";\r\nimport DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\n\r\nexport default class ShowerFixture extends IntermediatePart {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'shower_fixture';\r\n this.partName = 'Fixture';\r\n this.translateId = \"visualizer.bathroom.shower.shower_fixture\";\r\n this.homePageTitle = 'Shower Fixtures';\r\n this.dbName = 'Shower Fixture';\r\n this.layerPriority = 4;\r\n this.canBeDisabled = true;\r\n if (isChild) {\r\n this.layerPositions = {\r\n [PAN_POSITIONS[0]]: null,\r\n [PAN_POSITIONS[1]]: null,\r\n [PAN_POSITIONS[2]]: null,\r\n };\r\n // this.defaultLayerLayoutPositions = {\r\n // [LayoutType.Layout1]: \"L\",\r\n // [LayoutType.Layout4]: \"C\",\r\n // };\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n if (dbFeature.id === 79104774 || dbFeature.id === 79104772) { // Modern 4 & townsend disabled\r\n return false\r\n }\r\n dbFeature.metaData[\"layerPosition\"] = dbFeature.metaData[\"Side\"] ? dbFeature.metaData[\"Side\"][0] : \"\";\r\n const partNumber = dbFeature.metaData[\"layerPosition\"] === PAN_POSITIONS[0] ? 1 : 2;\r\n return super.load_(dbFeature, new ShowerFixture(false, partNumber),\r\n true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n let featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n const filteredAvailableFeatures2 = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters, this.featuresParts), searchText);\r\n let featuresToDisplay2 = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures2);\r\n featuresToDisplay2.forEach(feature2 => {\r\n if (featuresToDisplay.every(feature => feature.dbFeature.sharedFeatureName !== feature2.dbFeature.sharedFeatureName)) {\r\n featuresToDisplay.push(feature2)\r\n }\r\n })\r\n return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const showerTubCombo = this.getParent().layout.parts[ShowerTubCombo.id];\r\n\r\n if (this.getParent().showerTubComboIsActive() && showerTubCombo && showerTubCombo.walkInTub\r\n && showerTubCombo.bottomTub === showerTubCombo.walkInTub.bottomTubId) {\r\n super.hideLayers();\r\n return;\r\n }\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n applyFeatureIfNotCompatible() {\r\n const parent = this.getParent();\r\n const shower = parent.getParent();\r\n if (shower.layout && shower.showerTubComboIsActive()\r\n && shower.layout.parts[ShowerTubCombo.id].bottomTub === ShowerComboTubType.walk_in_tub) {\r\n const comboPart = shower.layout.parts[ShowerTubCombo.id];\r\n comboPart.showerTubComboIsActive = false;\r\n comboPart.bottomTub = ShowerComboTubType.bathtub_liner;\r\n }\r\n }\r\n\r\n handleClick(ignoreLocked) {\r\n super.handleClick(ignoreLocked); // set active item & not in visualizer item\r\n if (this.notAvailableInVisualizer || getFeatureIsLocked(this)) {\r\n return\r\n }\r\n\r\n const showerFixtureParent = this.getParent();\r\n const shower = showerFixtureParent.getParent();\r\n if (shower.showerTubComboIsActive() && shower.layout.parts[ShowerTubCombo.id].bottomTub === ShowerComboTubType.walk_in_tub\r\n && !window.location.hash.includes(\"visualizer\")) {\r\n store.dispatch(toggleNotCompatibleView(true));\r\n return;\r\n }\r\n\r\n this.applyFeatureIfNotCompatible();\r\n }\r\n\r\n getArrayOfConditions() {\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n const showerParent = this.getParent();\r\n conditions.push({\r\n propName: \"Shower\",\r\n propValue: showerParent.showerTubComboIsActive() ? \"Tub\" : \"Shower\"\r\n });\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerParent.showerSize()\r\n });\r\n return conditions\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes) {\r\n Object.keys(this.layerPositions).forEach((key, keyIndex) => {\r\n if (this.layerPositions[key]) {\r\n this.layerPositions[key].layer.zIndex = zIndexes.Shower.ShowerFixture + keyIndex*10;\r\n }\r\n })\r\n }\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {ShowerBodyType} from \"../../constants\";\r\nimport {Shower} from \"../../parts/shower\";\r\n\r\nexport default class ShowerGlass extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_glass';\r\n this.partName = 'Glass';\r\n this.translateId = \"visualizer.bathroom.shower.shower_glass\";\r\n this.visible = false;\r\n this.layerPriority = 12;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new ShowerGlass())\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n if (this.getParent().showerTubComboIsActive()) {\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n if (this.getParent().customBodyType === ShowerBodyType.Door) {\r\n this.disabled = true;\r\n }\r\n this.activeFeature = this.features.find((feature) => {\r\n const showerBodyActiveFeature = this.getParent().showerBody.activeFeature;\r\n return showerBodyActiveFeature && feature.partName === showerBodyActiveFeature.partName // set the same glass as Body\r\n });\r\n return super.setLayers(layout);\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.getParent().activeSubType() === Shower.Type.Custom && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Shower.Glass;\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {Vanity} from \"../../parts/vanity\";\r\n\r\nimport {LayoutType} from \"../../constants\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\nimport {\r\n custom30in15X4Shower,\r\n custom30in30X8Shower,\r\n custom30inPonyShower,\r\n custom60in15X4Shower,\r\n custom60in30X8Shower,\r\n custom60inPonyShower\r\n} from \"../../../../bvComponent/core/assets\";\r\n\r\nexport default class ShowerBody extends IntermediatePart {\r\n\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partId = 'shower_body';\r\n this.partName = 'Shower Body';\r\n this.translateId = \"visualizer.bathroom.shower.shower_body\";\r\n this.homePageTitle = 'Shower Doors & Glass';\r\n this.partNumber = partNumber;\r\n this.activeFeatureParts = [];\r\n this.canBeDisabled = false;\r\n this.placeholderChanged = true; // never show placeholder to body\r\n this.firstClick = {\r\n \"0\": true // never show placeholder to body\r\n }\r\n this.layerPriority = 1;\r\n this.createdManually = true;\r\n }\r\n\r\n load(dbFeature) {\r\n const loadedShowerBody = super.load_(dbFeature, new ShowerBody());\r\n if (loadedShowerBody) { // it can be false (just skip it)\r\n const featureName = loadedShowerBody.dbFeature.sharedFeatureName;\r\n loadedShowerBody.featureName = featureName;\r\n loadedShowerBody.showerBodyType = 'Custom';\r\n loadedShowerBody.showerDimensions = this.loadShowerDimensions(featureName);\r\n loadedShowerBody.metaData = this.loadShowerMetaData(featureName, loadedShowerBody.showerDimensions);\r\n loadedShowerBody.showerBodyId = featureName.toLowerCase().replace(/ /gi, \"-\");\r\n loadedShowerBody.notAvailableInVisualizer = false;\r\n if (!loadedShowerBody.dbFeature.thumbnailUrl) {\r\n loadedShowerBody.customThumbnail = this.loadThumbnail(featureName)\r\n }\r\n }\r\n return loadedShowerBody\r\n }\r\n\r\n loadShowerDimensions(featureName = this.activeFeature.featureName) {\r\n switch (true) {\r\n case featureName.includes(\"15X4\"):\r\n return \"15X4\"\r\n case featureName.includes(\"Pony\"):\r\n return \"Pony\"\r\n case featureName.includes(\"30X8\"):\r\n default:\r\n return \"30X8\"\r\n }\r\n }\r\n\r\n loadShowerMetaData(featureName = this.activeFeature.featureName, showerDimensions) {\r\n const featureNameSplitted = featureName.split(\"in\")[0];\r\n return {\r\n \"ShowerSize\": featureNameSplitted.length > 1 ? [featureNameSplitted.substr(featureNameSplitted.length - 2)] : ['60'],\r\n \"CountertopSize\": showerDimensions === \"30X8\" ? [\"72in\"] : [\"20in\", \"24in\", \"30in\", \"36in\", \"48in\", \"60in\"]\r\n }\r\n }\r\n\r\n loadThumbnail(featureName = this.activeFeature.featureName) {\r\n switch (true) {\r\n case featureName.includes(\"15X4\"):\r\n return featureName.includes(\"30in\") ? custom30in15X4Shower : custom60in15X4Shower\r\n case featureName.includes(\"Pony\"):\r\n return featureName.includes(\"30in\") ? custom30inPonyShower : custom60inPonyShower\r\n case featureName.includes(\"30X8\"):\r\n default:\r\n return featureName.includes(\"30in\") ? custom30in30X8Shower : custom60in30X8Shower\r\n }\r\n }\r\n\r\n handleClick() {\r\n const parent = this.getParent();\r\n if (parent.getParent && parent.getParent()) {\r\n super.handleClick();\r\n parent.activeFeatureParts = parent.setActiveFeatureParts();\r\n } else {\r\n parent.showerBody.activeFeature = this;\r\n }\r\n this.getParent().showerBodySelectedByUser = true;\r\n const shower = this.getParent().layout ? this.getParent() : this.getParent().getParent(); // workaround for complete & custom click\r\n if (shower.showerTubComboIsActive) {\r\n const comboPart = shower.layout.parts[ShowerTubCombo.id];\r\n comboPart.showerTubComboIsActive = false;\r\n }\r\n this.featureClicked();\r\n }\r\n\r\n disabledClick() {\r\n const showerParent = this.getParent();\r\n showerParent.relatedItems.forEach((relItem) => {\r\n relItem.disabled = this.disabled;\r\n if (relItem.activeFeatureParts && relItem.activeFeatureParts.length) {\r\n relItem.activeFeatureParts.forEach((activeFeaturePart) => {\r\n if (activeFeaturePart) {\r\n activeFeaturePart.disabled = this.disabled\r\n }\r\n });\r\n }\r\n });\r\n if (showerParent.layout && showerParent.showerTubComboIsActive) {\r\n const comboPart = showerParent.layout.parts[ShowerTubCombo.id];\r\n comboPart.showerTubComboIsActive = false;\r\n }\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n const wallParent = showerParent.layout.parts.Walls;\r\n wallParent.wallExL.disabled = this.disabled;\r\n // wallParent.wallExR.disabled = this.disabled;\r\n\r\n const bathtubParent = showerParent.layout.parts.Bathtub;\r\n\r\n if (showerParent.layout.type === LayoutType.Small && !this.disabled && bathtubParent) { // switch off all bathtub features\r\n if (bathtubParent.bathTubBody) {\r\n bathtubParent.bathTubBody.disabled = true;\r\n }\r\n if (bathtubParent.bathTubBody) {\r\n bathtubParent.bathTubBase.disabled = true;\r\n bathtubParent.bathTubBase.disabledClick();\r\n }\r\n }\r\n }\r\n\r\n availableFeatures(filters) {\r\n const layout = this.getParent().layout;\r\n const filteredAvailableFeatures = filters ? super.getFilteredFeaturesByFilters(filters) : this.features;\r\n const counterTopSize = layout.parts[Vanity.id].counterTopSize();\r\n return filteredAvailableFeatures.filter((feature) => {\r\n if (counterTopSize === '72in' && layout.type === 1) {\r\n return feature.showerDimensions === \"30X8\" || feature.showerDimensions === \"Pony\"\r\n }\r\n return true\r\n })\r\n }\r\n\r\n getArrayOfConditions() {\r\n return []\r\n }\r\n\r\n setActiveFeatureParts() {\r\n const activeFeatureParts = (this.activeFeature && this.activeFeature.partNumber) ? this.featuresParts.filter((feature) => {\r\n return feature.partName === this.activeFeature.partName\r\n }) : [];\r\n activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n return activeFeatureParts\r\n }\r\n\r\n setDefault() {\r\n const availableFeatures = this.availableFeatures();\r\n const layout = this.getParent().layout;\r\n let hardCodedDefault = availableFeatures.find((feature) => {\r\n return feature.partName === \"Custom B 60in 15X4\";\r\n });\r\n const counterTopSize = layout.parts[Vanity.id].counterTopSize();\r\n if (counterTopSize === '72in' && layout.type === 1 && this.activeFeature) {\r\n hardCodedDefault = availableFeatures.find((feature) => {\r\n return this.activeFeature.partName.includes(\"60in\")\r\n ? feature.partName.includes(\"60in\")\r\n : feature.partName.includes(\"30in\")\r\n });\r\n }\r\n this.activeFeature = hardCodedDefault || availableFeatures[0];\r\n this.activeFeatureParts = this.setActiveFeatureParts();\r\n }\r\n\r\n setLayers(layout) {\r\n if (this.getParent().showerTubComboIsActive()) {\r\n super.hideLayers();\r\n return;\r\n }\r\n super.setLayers(layout);\r\n }\r\n\r\n setZIndex() {}\r\n\r\n changeLayout(layoutType) {\r\n if (layoutType === 1 && this.disabled) {\r\n this.disabled = false;\r\n this.disabledClick();\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class CompleteVanity extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'vanity';\r\n this.partName = 'Vanity';\r\n this.translateId = \"visualizer.bathroom.vanity.vanity\";\r\n this.homePageTitle = 'Complete Vanities';\r\n this.visible = true;\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new CompleteVanity());\r\n }\r\n\r\n setDefault(layout) {\r\n const availableCompleteFeatures = this.features.filter(feature => {\r\n return feature.metaData[\"Vanity\"] && feature.metaData[\"Vanity\"].includes(\"Complete\")\r\n });\r\n const hardCodedDefault = this.features.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"Buffalo Complete Sand 987SANBLK17VK24\");\r\n });\r\n // const placeholderDefault =\r\n // (\r\n // this.getParent().vanityCabinet\r\n // && this.getParent().vanityCabinet.features\r\n // && this.getParent().vanityCabinet.features.length\r\n // && this.getParent().vanityCabinet.features.find((feature) => +feature.vanitySize === 24 && feature.dbFeature.displayName.includes(\"laceholder\"))\r\n // ) || this.features.find((feature) => {\r\n // return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"Placeholder S\");\r\n // });\r\n const placeholderDefault = this.features.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"Placeholder S\");\r\n });\r\n // console.log('this.features', this.features);\r\n // console.log('placeholderDefault', placeholderDefault);\r\n this.activeFeature = hardCodedDefault || super.setDefault(layout) || availableCompleteFeatures[0];\r\n this.placeholderFeature = placeholderDefault || super.setDefault(layout) || null;\r\n }\r\n\r\n // setLayers(layout) {\r\n // // const s3Binding = find(this.dbFeature.s3Bindings, {entityID: this.featureDefinitionId(this)});\r\n // if (!this.activeFeature) {\r\n // this.setDefault(layout);\r\n // }\r\n //\r\n // let s3Binding = find(this.activeFeature.dbFeature.s3Bindings, {\r\n // entityID: this.getParent().featureDefinitionId(this),\r\n // layout: layout.getCurrentLayoutAbbreviation()\r\n // });\r\n // if (!s3Binding) {\r\n // s3Binding = find(this.activeFeature.dbFeature.s3Bindings, {entityID: this.featureDefinitionId(this)});\r\n // }\r\n // this.activeFeature.layer.fromS3Binding(s3Binding);\r\n // }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Vanity.Complete.Cabinet;\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndexes.Vanity.Complete.Cabinet;\r\n }\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {Vanity} from \"../../parts/vanity\";\r\n\r\nexport default class VanityHandle extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'vanity_handle';\r\n this.partName = 'Handle';\r\n this.translateId = \"visualizer.bathroom.vanity.vanity_handle\";\r\n this.dbName = \"Vanity Handle\";\r\n this.visible = [Vanity.Types.Custom];\r\n this.canBeDisabled = false;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new VanityHandle())\r\n }\r\n\r\n disabledClick() {\r\n this.getParent().toggleVanityParts(this.disabled);\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n const vanityParent = this.getParent();\r\n conditions.push({\r\n propName: \"VanitySize\",\r\n propValue: vanityParent.getCounterTopSize()\r\n })\r\n return conditions\r\n }\r\n\r\n getAvailableFeatures() {\r\n return this.features && this.features.filter(f => f.matchesMetaForCondition('VanitySize', this.getParent().counterTopSize())) || [];\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const vanityPedestal = this.getParent().vanityCabinet;\r\n if (vanityPedestal && vanityPedestal.activeFeature) {\r\n const handleMeta = vanityPedestal.activeFeature.metaData[\"VanityHandle\"];\r\n const hardCodedWizardConditions = vanityPedestal.activeFeature.partName.includes(\"WizardPlaceholder\") &&\r\n (\r\n vanityPedestal.activeFeature.partName.includes(\"WizardPlaceholder52 in36 S\")\r\n || (handleMeta && handleMeta.includes(\"true\")) // WizardPlaceholder QC Liberty\r\n );\r\n if (handleMeta && handleMeta.includes(\"None\") || hardCodedWizardConditions) {\r\n super.hideLayers();\r\n return;\r\n }\r\n }\r\n\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.getParent().activeSubType_ === Vanity.Types.Custom) {\r\n const zIndex = zIndexes.Vanity.Handle;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {Vanity} from \"../../parts/vanity\";\r\nimport store from \"../../../../../store\";\r\nimport {Layout} from \"../../layout\";\r\n\r\nexport default class VanityCabinet extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'vanity_cabinet';\r\n this.partName = 'Cabinet';\r\n this.translateId = \"visualizer.bathroom.vanity.vanity_cabinet\";\r\n this.dbName = \"Vanity\";\r\n this.homePageTitle = 'Vanity Bases';\r\n this.visible = [Vanity.Types.Custom];\r\n this.canBeDisabled = true;\r\n this.canUseWizard = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new VanityCabinet())\r\n }\r\n\r\n // navigationSubItems() {\r\n // return super.navigationSubItemsWithFilter('VanitySize', this.getParent().counterTopSize());\r\n // }\r\n\r\n disabledClick() {\r\n this.getParent().toggleVanityParts(this.disabled);\r\n }\r\n\r\n setActiveFeatureByFilter(filterName, filterValue) {\r\n\r\n // console.log('filterName', filterName);\r\n // console.log('filterValue', filterValue);\r\n\r\n const filterGroups = store.getState().filterState.filterGroups;\r\n const group = filterGroups.find(group => group.name === filterName);\r\n const groupId = group.id;\r\n const filterValueId = Layout.getfilterValueIdByValue(groupId, filterValue);\r\n const filteredFeatures = this.features.filter(\r\n feature => feature.dbFeature && feature.dbFeature.filterValueIDs[groupId] && feature.dbFeature.filterValueIDs[groupId].includes(filterValueId)\r\n ); // find among all features only those, who have filter with value === props size\r\n if (!super.tryToSetTheSameFeature(filteredFeatures, null, \"ustom\")) {\r\n this.activeFeature = filteredFeatures[0];\r\n const placeholderAvailableFeatures = filteredFeatures.filter(feature => {\r\n return feature.dbFeature.displayName.includes(\"laceholder\") && feature.dbFeature.displayName.includes(\"ustom\")\r\n });\r\n this.placeholderFeature = placeholderAvailableFeatures[0];\r\n }\r\n }\r\n\r\n // getAvailableFeatures() {\r\n // return this.features.filter(f => f.vanitySize+'in' === this.getParent().counterTopSize());\r\n // }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Vanity.Cabinet;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndexes.Vanity.Cabinet;\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {Vanity} from \"../../parts/vanity\";\r\n// import DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\n// import uniqBy from \"lodash/uniqBy\";\r\n\r\nexport default class VanityCountertop extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'vanity_countertop';\r\n this.partName = 'Countertop';\r\n this.translateId = \"visualizer.bathroom.vanity.vanity_countertop\";\r\n this.homePageTitle = 'Countertops';\r\n this.visible = [Vanity.Types.Custom];\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new VanityCountertop())\r\n }\r\n\r\n disabledClick() {\r\n this.getParent().toggleVanityParts(this.disabled);\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n const vanityParent = this.getParent();\r\n conditions.push({\r\n propName: \"VanitySize\",\r\n propValue: vanityParent.getCounterTopSize()\r\n })\r\n return conditions\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.getParent().activeSubType_ === Vanity.Types.Custom) {\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Vanity.CounterTop;\r\n }\r\n if(this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndexes.Vanity.CounterTop;\r\n }\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {Vanity} from \"../../parts/vanity\";\r\n\r\nexport default class VanityBacksplash extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'vanity_backsplash';\r\n this.partName = 'Backsplash';\r\n this.translateId = \"visualizer.bathroom.vanity.vanity_backsplash\";\r\n this.dbName = 'Backsplash';\r\n this.visible = [Vanity.Types.Custom];\r\n this.canBeDisabled = true;\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new VanityBacksplash())\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n const vanityParent = this.getParent();\r\n conditions.push({\r\n propName: \"VanitySize\",\r\n propValue: vanityParent.getCounterTopSize()\r\n })\r\n return conditions\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes) {\r\n const zIndex = zIndexes.Vanity.VanityBacksplash;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {Vanity} from \"../../parts/vanity\";\r\n\r\nexport default class Mirror extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'vanity_mirror';\r\n this.partName = 'Mirror';\r\n this.translateId = \"visualizer.bathroom.vanity.vanity_mirror\";\r\n this.homePageTitle = 'Mirrors';\r\n this.visible = [Vanity.Types.Complete, Vanity.Types.Custom];\r\n this.canBeDisabled = false;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new Mirror())\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n // if ((this.getParent().activeSubType_ === Vanity.Types.Custom) && this.activeFeature) {\r\n if (zIndexes && this.activeFeature) {\r\n // this.activeFeature.layer.zIndex = Z.layouts.Large.Vanity.Mirror;\r\n this.activeFeature.layer.zIndex = zIndexes.Vanity.Mirror;\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport Config from \"../../../../../config\";\r\nimport { Vanity } from \"../../parts/vanity\";\r\nimport {METADATA} from \"../../constants\";\r\n\r\nexport default class Sink extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'vanity_sink';\r\n this.partName = 'Sink';\r\n this.translateId = \"visualizer.bathroom.vanity.vanity_sink\";\r\n this.homePageTitle = 'Sinks';\r\n this.visible = [Vanity.Types.Custom];\r\n if (Config.isDevMode()) {\r\n this.canBeDisabled = true;\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n if (!dbFeature.metaData[\"SinkSize\"]) {\r\n dbFeature.metaData[\"SinkSize\"] = [METADATA.Inner]\r\n }\r\n return super.load_(dbFeature, new Sink())\r\n }\r\n //\r\n // navigationSubItems(filters, searchText) {\r\n // const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n // return super.navigationSubItemsWithFilterWithInactive('VanitySize', this.getParent().counterTopSize(), filteredAvailableFeatures);\r\n // }\r\n\r\n disabledClick() {\r\n this.getParent().toggleVanityParts(this.disabled);\r\n }\r\n\r\n // getArrayOfConditions() {\r\n // const counterTopSize = this.getParent().counterTopSize();\r\n // return [{\r\n // propName: 'VanitySize',\r\n // propValue: counterTopSize\r\n // }];\r\n // }\r\n\r\n handleChangeParent(nonCompatibleWith) {\r\n if (nonCompatibleWith === \"faucet\") {\r\n // some additional logic if needed\r\n } else {\r\n this.getParent().getParent().vanityCabinet.setActiveFeatureByFilter(\"Size\", this.metaData[\"VanitySize\"] ? this.metaData[\"VanitySize\"][0] : null); // \"60in\", etc.\r\n }\r\n }\r\n\r\n setActiveFeatureByFilter(filterName, filterValue) {\r\n const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions());\r\n const filteredFeatures = featuresToDisplay.filter((feature) => {\r\n return feature.metaData[filterName] && feature.metaData[filterName].includes(filterValue);\r\n });\r\n if (!super.tryToSetTheSameFeature(filteredFeatures)) {\r\n this.activeFeature = filteredFeatures.find(feature => !feature.dbFeature.displayName.includes(\"laceholder\")) || filteredFeatures[0];\r\n const placeholderAvailableFeatures = filteredFeatures.filter(feature => {\r\n return feature.dbFeature.displayName.includes(\"laceholder\")\r\n });\r\n this.placeholderFeature = placeholderAvailableFeatures[0];\r\n }\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.getParent().activeSubType_ === Vanity.Types.Custom) {\r\n if(this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Vanity.Sink;\r\n }\r\n if(this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndexes.Vanity.Sink;\r\n }\r\n }\r\n }\r\n}\r\n","import filter from 'lodash/filter';\r\n\r\nimport {IntermediatePart} from \"../../intermediatePart\";\r\nimport Config from \"../../../../../config\";\r\nimport { Vanity } from \"../../parts/vanity\";\r\nimport {METADATA} from \"../../constants\";\r\n\r\nexport default class VanityFaucet extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'vanity_faucet';\r\n this.partName = 'Faucet';\r\n this.homePageTitle = 'Faucets';\r\n this.translateId = \"visualizer.bathroom.vanity.vanity_faucet\";\r\n this.visible = [Vanity.Types.Custom];\r\n this.useMatchesFailedNavigation = true;\r\n if (Config.isDevMode()) {\r\n this.canBeDisabled = true;\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n if (!dbFeature.metaData[\"SinkSize\"]) {\r\n dbFeature.metaData[\"SinkSize\"] = [METADATA.Inner]\r\n } else if(dbFeature.metaData[\"SinkSize\"].includes(METADATA.Outer) && !dbFeature.metaData[\"SinkSize\"].includes(METADATA.Inner)) (\r\n dbFeature.metaData[\"SinkSize\"].push(METADATA.Inner)\r\n )\r\n return this.load_(dbFeature, new VanityFaucet());\r\n }\r\n\r\n disabledClick() {\r\n this.getParent().toggleVanityParts(this.disabled);\r\n }\r\n\r\n getCurrentSinkSize() {\r\n const sinkParent = this.getParent().sink;\r\n if (sinkParent && sinkParent.activeFeature) {\r\n const sinkMeta = sinkParent.activeFeature.metaData[\"SinkSize\"];\r\n if (sinkMeta) {\r\n return Array.isArray(sinkMeta) ? sinkMeta[0] : sinkMeta\r\n } else if (sinkParent.activeFeature.partName.includes(\"Placeholder\")) {\r\n return \"Outer\"\r\n }\r\n }\r\n return null\r\n }\r\n\r\n getArrayOfConditions(withSinkSize = true) {\r\n // const counterTopSize = this.getParent().counterTopSize();\r\n // const conditions = [{\r\n // propName: 'VanitySize',\r\n // propValue: counterTopSize\r\n // }];\r\n const conditions = super.getArrayOfConditions();\r\n if (withSinkSize && this.getCurrentSinkSize()) {\r\n conditions.push({\r\n propName: 'SinkSize',\r\n propValue: this.getCurrentSinkSize()\r\n })\r\n }\r\n const vanityParent = this.getParent();\r\n const countertopSize = vanityParent.getCounterTopSize();\r\n if (countertopSize) {\r\n conditions.push({\r\n propName: \"VanitySize\",\r\n propValue: countertopSize && countertopSize[0] && (countertopSize[0] === \"32\") ? \"48\" : countertopSize\r\n })\r\n }\r\n const sinkType = vanityParent.sink && vanityParent.sink.activeFeature && vanityParent.sink.activeFeature.metaData[\"SinkType\"]\r\n if (sinkType) {\r\n conditions.push({\r\n propName: \"SinkType\",\r\n propValue: vanityParent.sink.activeFeature.metaData[\"SinkType\"]\r\n })\r\n }\r\n // console.log(\"conditions\", conditions);\r\n return conditions;\r\n }\r\n\r\n setLayers(layout) {\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions(true)))) {\r\n return super.setLayers(layout);\r\n }\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n getAvailableFeatures() {\r\n return filter(this.features, f => f.matchesMetaForCondition('VanitySize', this.getParent().counterTopSize()));\r\n }\r\n\r\n handleChangeParent(nonCompatibleWith) {\r\n if (nonCompatibleWith === \"sink\") {\r\n this.getParent().getParent().sink.setActiveFeatureByFilter(\"SinkSize\", \"Inner\")\r\n } else {\r\n this.getParent().getParent().vanityCabinet.setActiveFeatureByFilter(\"Size\", this.metaData[\"VanitySize\"] ? this.metaData[\"VanitySize\"][0] : null); // \"60in\", etc.\r\n }\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.getParent().activeSubType_ === Vanity.Types.Custom) {\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Vanity.Faucet;\r\n }\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {getFeatureIsLocked} from \"../../../../../misc/helpers\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\nimport {ShowerComboTubType} from \"../../constants\";\r\n\r\nexport default class ShowerWall extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_interior_wall';\r\n this.partName = 'Shower Walls';\r\n this.translateId = \"visualizer.bathroom.shower.shower_interior_wall\";\r\n this.homePageTitle = 'Interior Shower Walls';\r\n this.dbName = \"Shower Wall\";\r\n this.isStoneFeature = true;\r\n this.canUseWizard = true;\r\n this.layerPriority = 2;\r\n }\r\n\r\n load(dbFeature) {\r\n if (!dbFeature.metaData[\"Shower\"]) {\r\n dbFeature.metaData[\"Shower\"] = [\"Shower\"];\r\n }\r\n return super.load_(dbFeature, new ShowerWall());\r\n }\r\n\r\n handleClick(ignoreLocked) {\r\n const parent = this.getParent();\r\n super.handleClick(ignoreLocked);\r\n const shower = parent.getParent();\r\n if (shower.showerInteriorWallAccent && shower.showerInteriorWallAccent.canBeDisabled\r\n && !shower.showerInteriorWallAccent.placeholderChanged && !getFeatureIsLocked(this)) {\r\n shower.showerInteriorWallAccent.disabled = true;\r\n shower.showerInteriorWallAccent.disabledClick();\r\n }\r\n this.featureClicked();\r\n }\r\n\r\n availableFeatures(wallFeatures) {\r\n return wallFeatures.filter(wallFeature => wallFeature.partNumber === 1)\r\n }\r\n\r\n getArrayOfConditions() {\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n const showerParent = this.getParent();\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerParent.showerSize()\r\n });\r\n const showerCondition = showerParent.showerTubComboIsActive() && showerParent.layout.parts[ShowerTubCombo.id]\r\n && (showerParent.layout.parts[ShowerTubCombo.id].bottomTub === ShowerComboTubType.walk_in_tub)\r\n ? \"Tub\"\r\n : \"Shower\";\r\n conditions.push({\r\n propName: \"Shower\",\r\n propValue: showerCondition\r\n });\r\n return conditions\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Background.ShowerWall;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {getFeatureIsLocked} from \"../../../../../misc/helpers\";\r\n\r\nexport default class ShowerWallAccent extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = \"shower_wall_accent\";\r\n this.partName = \"Shower Walls Accent\";\r\n this.translateId = \"visualizer.bathroom.shower.shower_interior_wall_accent\";\r\n this.dbName = \"Shower Wall Accent\";\r\n this.homePageTitle = 'Interior Shower Walls';\r\n this.isStoneFeature = true;\r\n this.canUseWizard = true;\r\n this.layerPriority = 2;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new ShowerWallAccent());\r\n }\r\n\r\n handleClick(ignoreLocked) {\r\n const parent = this.getParent();\r\n super.handleClick(ignoreLocked);\r\n const shower = parent.getParent();\r\n if (shower.showerWallAccent && shower.showerWallAccent.canBeDisabled\r\n && !shower.showerWallAccent.placeholderChanged && !getFeatureIsLocked(this)) {\r\n shower.showerWallAccent.disabled = true;\r\n shower.showerWallAccent.disabledClick();\r\n }\r\n this.featureClicked();\r\n }\r\n\r\n getArrayOfConditions() {\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n const showerParent = this.getParent();\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerParent.showerSize()\r\n });\r\n return conditions\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.ShowerWallAccent;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {getFeatureIsLocked} from \"../../../../../misc/helpers\";\r\nimport {LayoutType, ShowerComboTubType} from \"../../constants\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\nimport {IS_BATHROOM_OLD_BV_SCENE} from \"../../../../../config\";\r\nimport {ShowerAccessories} from \"../../parts/showerAccessories\";\r\n\r\nexport default class ShowerDoor extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_door';\r\n this.partName = 'Shower Door';\r\n this.translateId = \"visualizer.bathroom.shower.shower_door\";\r\n this.visible = true;\r\n this.isStoneFeature = false;\r\n this.canBeDisabled = true;\r\n this.layerPriority = 5;\r\n\r\n /* only shower door properties */\r\n if (isChild) {\r\n this.previouslySelectedFeatures = {};\r\n this.oneLayerPosition = true;\r\n Object.keys(LayoutType).forEach(layoutName => {\r\n this.previouslySelectedFeatures[layoutName] = {};\r\n })\r\n }\r\n this.currentShowerBodyId = \"\"; // for example \"custom-a-60in-30x8\"\r\n }\r\n\r\n load(dbFeature) {\r\n dbFeature.metaData[\"layerPosition\"] = dbFeature.metaData[\"Side\"] ? dbFeature.metaData[\"Side\"][0] : \"\";\r\n return super.load_(dbFeature, new ShowerDoor());\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n return this.navigationSubItemsWithSides(filters, searchText);\r\n }\r\n\r\n disabledClick() {\r\n const showerParent = this.getParent();\r\n const showerDoorHandle = showerParent.showerDoorHandle;\r\n if (showerDoorHandle) {\r\n showerDoorHandle.disabled = this.disabled;\r\n }\r\n const accParent = showerParent.layout.parts[ShowerAccessories.id]\r\n if (!this.disabled && accParent && accParent.showerRod && !accParent.showerRod.disabled) {\r\n accParent.showerRod.disabled = true\r\n }\r\n }\r\n\r\n handleClick() {\r\n super.handleClick();\r\n if (!this.notAvailableInVisualizer && !getFeatureIsLocked(this)) {\r\n // this.getParent().getParent().setShowerTubCombo();\r\n // let doorWithLiner = false;\r\n // if(this.metaData && this.metaData.length) {\r\n // const activeDoorMetadata = this.metaData.find(metaDataObject => metaDataObject.isFor);\r\n // const showerPanValues = activeDoorMetadata.conditions.find(condition => condition.name === \"BathtubLiner\");\r\n // if (showerPanValues) {\r\n // doorWithLiner = true;\r\n // }\r\n // }\r\n // this.getParent().getParent().setLinerActive(doorWithLiner);\r\n const shower = this.getParent().getParent();\r\n const showerPanCondition = this.metaData[\"ShowerPan\"];\r\n if (!shower.showerTubComboIsActive()) {\r\n shower.showerFloorIsActive = showerPanCondition && showerPanCondition.includes(\"Threshold\");\r\n }\r\n const accParent = shower.layout.parts[ShowerAccessories.id]\r\n if (accParent && accParent.showerRod && !accParent.showerRod.disabled) {\r\n accParent.showerRod.disabled = true\r\n }\r\n if(!this.matchesMetaForArrayOfConditions(this.getParent().getArrayOfConditions())) {\r\n const showerSizeValues = this.metaData[\"ShowerSize\"];\r\n const showerBodyParent = this.getParent().getParent().showerBody;\r\n if (showerSizeValues) {\r\n const showerBodyThatFits = showerBodyParent.features.filter(showerBodyFeature => {\r\n const showerSizeValues2 = showerBodyFeature.metaData[\"ShowerSize\"];\r\n return showerSizeValues.some(condValue => {\r\n return showerSizeValues2.some(condValue2 => condValue === condValue2);\r\n });\r\n });\r\n if (showerBodyThatFits.length && showerBodyThatFits.every(shBody => shBody.partName !== showerBodyParent.activeFeature.partName)) {\r\n let showerBodyToSet = showerBodyThatFits.find(shBody => {\r\n return shBody.showerDimensions === showerBodyParent.activeFeature.showerDimensions\r\n }) || showerBodyThatFits[0];\r\n showerBodyParent.showerBodySelectedByUser = true;\r\n showerBodyParent.activeFeature = showerBodyToSet;\r\n }\r\n }\r\n }\r\n this.featureClicked();\r\n }\r\n }\r\n\r\n setLayers(layout) {\r\n const showerParent = this.getParent();\r\n const comboParent = showerParent.layout.parts[ShowerTubCombo.id];\r\n if (showerParent.showerTubComboIsActive() && comboParent.bottomTub === ShowerComboTubType.walk_in_tub) {\r\n super.hideLayers();\r\n return;\r\n }\r\n return super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n const showerParent = this.getParent();\r\n const comboParent = showerParent.layout.parts[ShowerTubCombo.id];\r\n const showerTubComboIsActive = showerParent.showerTubComboIsActive();\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n conditions.push({\r\n propName: IS_BATHROOM_OLD_BV_SCENE ? \"Type\" : \"Shower\",\r\n propValue: showerTubComboIsActive\r\n ? comboParent.bottomTub === ShowerComboTubType.walk_in_tub ? \"WalkInTub\" : \"Tub\" // WalkInTub removes items from nav\r\n : \"Pan\"\r\n })\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerParent.showerSize()\r\n })\r\n return conditions\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Shower.ShowerDoor;\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\n\r\nexport default class ShowerPanCombo extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_pan_combo';\r\n this.partName = 'Shower Pan';\r\n this.translateId = \"visualizer.bathroom.shower.shower_pan_combo\";\r\n this.dbName = \"Shower Pans\"; // americanstandard2020 // lowesdemo // bucket5\r\n this.visible = true;\r\n this.isStoneFeature = false;\r\n this.layerPriority = 8;\r\n if (isChild) {\r\n this.oneLayerPosition = true;\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n dbFeature.metaData[\"layerPosition\"] = dbFeature.metaData[\"Side\"] ? dbFeature.metaData[\"Side\"][0] : \"\";\r\n return super.load_(dbFeature, new ShowerPanCombo())\r\n }\r\n\r\n applyFeatureIfNotCompatible() {\r\n const parent = this.getParent();\r\n const shower = parent.getParent();\r\n shower.showerFloorIsActive = false;\r\n if (shower.layout && shower.showerTubComboIsActive()) {\r\n const comboPart = shower.layout.parts[ShowerTubCombo.id];\r\n comboPart.showerTubComboIsActive = false;\r\n }\r\n }\r\n\r\n handleClick(ignoreLocked) {\r\n super.handleClick(ignoreLocked); // set active item & not in visualizer item\r\n this.applyFeatureIfNotCompatible();\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n return this.navigationSubItemsWithSides(filters, searchText);\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const showerParent = this.getParent();\r\n\r\n if (showerParent.showerTubComboIsActive() || showerParent.showerFloorIsActive) {\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n if (this.activeFeature && !this.activeFeature.notAvailableInVisualizer\r\n && this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Shower.ShowerPanCombo;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n\r\n getMatchingPositionFeature = (position = \"\", forFeature = this.activeFeature) => {\r\n if (forFeature) { //just in case\r\n let arrayOfConditions = this.getArrayOfConditions();\r\n if (forFeature.metaData[\"SkuName\"]) {\r\n arrayOfConditions.push({\r\n propName: \"SkuName\",\r\n propValue: forFeature.metaData[\"SkuName\"]\r\n })\r\n }\r\n return this.features.find((feature) => {\r\n return feature.matchesMetaForArrayOfConditions(arrayOfConditions) && feature.metaData[\"layerPosition\"] === position\r\n });\r\n }\r\n return null\r\n };\r\n\r\n getArrayOfConditions() {\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n const showerParent = this.getParent();\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerParent.showerSize()\r\n });\r\n return conditions\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class ShowerDoorHandle extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_door_handle';\r\n this.partName = 'Handle';\r\n this.translateId = \"visualizer.bathroom.shower.shower_door_handle\";\r\n this.dbName = 'Shower Door Handle';\r\n this.visible = true;\r\n this.isStoneFeature = false;\r\n this.layerPriority = 9;\r\n if (isChild) {\r\n this.previouslySelectedFeatures = {\r\n Layout1: {},\r\n };\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n const handle = this.load_(dbFeature, new ShowerDoorHandle());\r\n if (handle) {\r\n ShowerDoorHandle.setAdditionalMetaData(handle);\r\n }\r\n }\r\n\r\n static setAdditionalMetaData(handle) {\r\n const compatible = handle.metaData[\"CompatibleTub\"];\r\n const showerSize = handle.metaData[\"ShowerSize\"];\r\n if (!compatible) {\r\n handle.metaData[\"CompatibleTub\"] = [\"None\"];\r\n }\r\n if (!showerSize) {\r\n handle.metaData[\"ShowerSize\"] = [\"60in\"];\r\n }\r\n }\r\n\r\n disabledClick() {\r\n const showerDoor = this.getParent().showerDoor;\r\n if (showerDoor) {\r\n showerDoor.disabled = this.disabled;\r\n }\r\n }\r\n\r\n handleClick() {\r\n super.handleClick();\r\n // this.getParent().getParent().setShowerTubCombo();\r\n //\r\n // let doorWithLiner = false;\r\n // if(this.metaData && this.metaData.length) {\r\n // const activeDoorMetadata = this.metaData.find(metaDataObject => metaDataObject.isFor);\r\n // const showerPanValues = activeDoorMetadata.conditions.find(condition => condition.name === \"BathtubLiner\");\r\n // if (showerPanValues) {\r\n // doorWithLiner = true;\r\n // }\r\n // }\r\n //\r\n // this.getParent().getParent().setLinerActive(doorWithLiner);\r\n // this.featureClicked();\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const showerParent = this.getParent();\r\n\r\n if (!showerParent.showerDoor || !showerParent.showerDoor.activeFeature ||\r\n (showerParent.showerDoor.activeFeature.metaData && showerParent.showerDoor.activeFeature.metaData[\"ShowerHandle\"]\r\n && showerParent.showerDoor.activeFeature.metaData[\"ShowerHandle\"][0] === \"None\")) {\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n // getArrayOfConditions() {\r\n // const layout = this.getParent().layout;\r\n // const showerComboParent = layout.parts[ShowerTubCombo.id];\r\n // const showerParent = this.getParent();\r\n // const layoutAbr = layout.getCurrentLayoutAbbreviation();\r\n //\r\n // let showerSize = showerComboParent.showerTubComboIsActive\r\n // ? showerComboParent.showerSize()\r\n // : showerParent.showerSize();\r\n //\r\n // let compatibleValue = \"None\";\r\n // if (showerComboParent.showerTubComboIsActive) {\r\n // if (showerComboParent.bottomTub === ShowerComboTubType.bathtub_liner) {\r\n // compatibleValue = \"BathtubLiner\"\r\n // } else if (showerComboParent.bottomTub === ShowerComboTubType.replacement_tub) {\r\n // compatibleValue = \"ReplacementTub\"\r\n // } else if (showerComboParent.bottomTub === ShowerComboTubType.walk_in_tub) {\r\n // compatibleValue = \"WalkInTub\"\r\n // } else if (showerComboParent.bottomTub === ShowerComboTubType.jetted_tub) {\r\n // compatibleValue = \"JettedTub\"\r\n // }\r\n // }\r\n //\r\n // const conditions = [{\r\n // propName: 'ShowerSize',\r\n // propValue: showerSize\r\n // },{\r\n // propName: 'CompatibleTub',\r\n // propValue: compatibleValue\r\n // }];\r\n //\r\n // if (layoutAbr === LayoutAbbreviation.Large) {\r\n // let showerDimensions = showerComboParent.showerTubComboIsActive\r\n // ? showerComboParent.showerDimensions()\r\n // : showerParent.showerDimensions();\r\n //\r\n // showerDimensions = getMetadataByDimensions(showerDimensions);\r\n //\r\n // const vanity = layout.parts[Vanity.id];\r\n // let counterTopSize = vanity.counterTopSize();\r\n // if (counterTopSize === '72in' && layout.type === 1 && (showerDimensions !== \"Full\" || showerDimensions !== \"Pony\")) {\r\n // showerDimensions = \"Full\"\r\n // }\r\n //\r\n // conditions.push({\r\n // propName: \"EX L\",\r\n // propValue: showerDimensions\r\n // })\r\n // }\r\n //\r\n // if (showerParent.showerDoor && showerParent.showerDoor.activeFeature) { // add shower pan condition only if it is shower\r\n // const doorCondition = showerParent.showerDoor.activeFeature.metaData[\"ShowerDoor\"];\r\n // const handleCondition = showerParent.showerDoor.activeFeature.metaData[\"ShowerHandle\"];\r\n // // console.log('doorCondition', doorCondition);\r\n // if (doorCondition) {\r\n // conditions.push({\r\n // propName: 'ShowerDoor',\r\n // propValue: doorCondition\r\n // })\r\n // }\r\n // if (handleCondition) {\r\n // conditions.push({\r\n // propName: 'ShowerHandle',\r\n // propValue: handleCondition\r\n // })\r\n // }\r\n // }\r\n //\r\n // if (!showerParent.showerTubComboIsActive()) {\r\n // if (showerParent.showerFloorIsActive) {\r\n // conditions.push({\r\n // propName: \"ShowerPan\",\r\n // propValue: \"Threshold\"\r\n // })\r\n // } else if (showerParent.showerPanCombo && showerParent.showerPanCombo.activeFeature) {\r\n // conditions.push({\r\n // propName: \"ShowerPan\",\r\n // propValue: showerParent.showerPanCombo.activeFeature.metaData[\"ShowerPan\"]\r\n // })\r\n // }\r\n // }\r\n // // console.log('conditions', conditions);\r\n // return conditions\r\n // }\r\n\r\n setDefault() {\r\n const shower = this.getParent();\r\n const currentActiveFeature = this.activeFeature;\r\n const filteredFeatures = this.features.filter(f => f.matchesMetaForArrayOfConditions(this.getArrayOfConditions()));\r\n if (!super.tryToSetTheSameFeature(filteredFeatures)) {\r\n this.setDefaultAccordingToPreviousSelect(shower, filteredFeatures, \"Brantford\");\r\n }\r\n this.rememberPreviousSelection(shower, currentActiveFeature);\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Shower.ShowerDoorHandle;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {LayoutAbbreviation} from \"../../constants\";\r\n\r\nexport default class PonyWallCap extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'pony_wall_cap';\r\n this.isPonyWallPart = true;\r\n this.visible = true;\r\n this.partName = 'Pony Wall Cap';\r\n this.translateId = \"visualizer.bathroom.shower.pony_wall_cap\";\r\n this.isStoneFeature = true;\r\n this.disableOnHomeSections = true;\r\n this.layerPriority = 11;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new PonyWallCap());\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Shower.PonyWallCap;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const showerParent = this.getParent().getActiveShowerGroup();\r\n if (showerParent.showerDimensions() !== \"Pony\") {\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n const conditions = this.getArrayOfConditions();\r\n\r\n const layoutAbr = layout.getCurrentLayoutAbbreviation();\r\n const matchesByBindings = this.activeFeature && this.activeFeature.dbFeature && this.activeFeature.s3Bindings && this.activeFeature.dbFeature.s3Bindings.some(binding => {\r\n return binding.layout === LayoutAbbreviation.All || binding.layout === layoutAbr\r\n });\r\n if (matchesByBindings && (this.activeFeature.matchesMetaForArrayOfConditions(conditions)\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n // getArrayOfConditions() {\r\n // const parent = this.getParent();\r\n // const layout = parent.layout;\r\n // const layoutAbr = layout.getCurrentLayoutAbbreviation();\r\n // if (layoutAbr === LayoutAbbreviation.Small){\r\n // const activeShower = parent.showerTubComboIsActive()\r\n // ? layout.parts[ShowerTubCombo.id]\r\n // : layout.parts[Shower.id];\r\n // const showerSize = activeShower.showerSize(); // 60in, 30in, ..\r\n // // const showerDimensions = activeShower.showerDimensions(); // 15x4, Pony, ...\r\n // return [{\r\n // propName: 'Shower',\r\n // propValue: 'Custom'\r\n // }, {\r\n // propName: 'Size',\r\n // propValue: showerSize\r\n // }];\r\n // }\r\n //\r\n // return []\r\n // }\r\n\r\n setDefault() {\r\n const filteredFeatures = this.features.filter(f => f.matchesMetaForArrayOfConditions(this.getArrayOfConditions()));\r\n if (!super.tryToSetTheSameFeature(filteredFeatures, '', '', true)) {\r\n const hardCodedDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName\r\n && feature.dbFeature.displayName.includesCI(\"Pony Wall Cap - Model[For=Shower=(Custom)=Size=(30in_60in)]\");\r\n });\r\n const placeholderDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includesCI(\" - Placeholder\");\r\n });\r\n this.activeFeature = hardCodedDefault || filteredFeatures[0];\r\n this.placeholderFeature = placeholderDefault || null;\r\n }\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {LayoutAbbreviation} from \"../../constants\";\r\n\r\nexport default class PonyWallGlass extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'pony_wall_glass';\r\n this.isPonyWallPart = true;\r\n this.visible = true;\r\n this.partName = 'Pony Wall Glass';\r\n this.translateId = \"visualizer.bathroom.shower.pony_wall_glass\";\r\n this.isStoneFeature = false;\r\n this.disableOnHomeSections = true;\r\n this.layerPriority = 10;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new PonyWallGlass());\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Shower.PonyWallGlass;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const showerParent = this.getParent().getActiveShowerGroup();\r\n if (showerParent.showerDimensions() !== \"Pony\") {\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n const layoutAbr = layout.getCurrentLayoutAbbreviation();\r\n const matchesByBindings = this.activeFeature && this.activeFeature.dbFeature.s3Bindings.some(binding => {\r\n return binding.layout === LayoutAbbreviation.All || binding.layout === layoutAbr\r\n });\r\n\r\n if (matchesByBindings && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n // getArrayOfConditions() {\r\n // const showerParent = this.getParent();\r\n // const layout = showerParent.layout;\r\n // const layoutAbr = layout.getCurrentLayoutAbbreviation();\r\n //\r\n // if (layoutAbr === LayoutAbbreviation.Small) {\r\n // const showerComboParent = this.getParent().layout.parts[ShowerTubCombo.id];\r\n // let showerSize = showerComboParent.showerTubComboIsActive\r\n // ? showerComboParent.showerSize()\r\n // : showerParent.showerSize();\r\n // return [{\r\n // propName: 'Size',\r\n // propValue: showerSize\r\n // }]\r\n // }\r\n //\r\n // return []\r\n // }\r\n\r\n setDefault() {\r\n const filteredFeatures = this.features.filter(f => f.matchesMetaForArrayOfConditions(this.getArrayOfConditions()));\r\n if (!super.tryToSetTheSameFeature(filteredFeatures)) {\r\n const hardCodedDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"Standard Pony Wall\");\r\n });\r\n const placeholderDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"laceholder\");\r\n });\r\n this.activeFeature = hardCodedDefault || filteredFeatures[0];\r\n this.placeholderFeature = placeholderDefault || null;\r\n }\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {ShowerBodyType} from \"../../constants\";\r\nimport {Shower} from \"../../parts/shower\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\nimport {getFeatureIsLocked} from \"../../../../../misc/helpers\";\r\nimport store from \"../../../../../store\";\r\nimport {toggleNotCompatibleView} from \"../../../../../actions/selectionFunctions\";\r\n\r\nexport default class ShowerFloor extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_floor';\r\n this.translateId = \"visualizer.bathroom.shower.shower_floor\";\r\n this.partName = 'Floor';\r\n this.homePageTitle = 'Shower Flooring';\r\n this.dbName = 'ShowerFloor';\r\n this.isStoneFeature = true;\r\n this.selectedByUser = false;\r\n this.layerPriority = 6;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new ShowerFloor())\r\n }\r\n\r\n applyFeatureIfNotCompatible() {\r\n const parent = this.getParent();\r\n const shower = parent.getParent();\r\n shower.showerFloorIsActive = true;\r\n if (shower.layout && shower.showerTubComboIsActive()) {\r\n const comboPart = shower.layout.parts[ShowerTubCombo.id];\r\n comboPart.showerTubComboIsActive = false;\r\n }\r\n }\r\n\r\n handleClick(ignoreLocked) {\r\n super.handleClick(ignoreLocked);\r\n if (this.notAvailableInVisualizer || getFeatureIsLocked(this)) {\r\n return\r\n }\r\n const parent = this.getParent();\r\n const shower = parent.getParent();\r\n if ((!shower.showerFloorIsActive || shower.showerTubComboIsActive()) && !window.location.hash.includes(\"visualizer\")) {\r\n store.dispatch(toggleNotCompatibleView(true));\r\n return;\r\n }\r\n\r\n this.applyFeatureIfNotCompatible();\r\n\r\n this.getParent().selectedByUser = true;\r\n const threshold = shower.threshold;\r\n if (threshold && !threshold.selectedByUser) {\r\n const thresholdAvailableFeatures = threshold.navigationSubItems();\r\n const currentFloorName = this.getSplittedFeatureName();\r\n const sameThreshold = thresholdAvailableFeatures.find(tr => tr.part.getSplittedFeatureName() === currentFloorName);\r\n if (sameThreshold) {\r\n super.handleClick.call(sameThreshold.part);\r\n threshold.selectedByUser = false;\r\n }\r\n }\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n if (this.getParent().showerTubComboIsActive()) {\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n if (this.getParent().customBodyType === ShowerBodyType.Door) {\r\n const showerDoorParent = this.getParent().showerDoor;\r\n if (showerDoorParent && showerDoorParent.activeFeature) {\r\n const currentShowerPanCondition = showerDoorParent.activeFeature.metaData[\"ShowerPan\"];\r\n if (!currentShowerPanCondition || (currentShowerPanCondition && !currentShowerPanCondition.includes(\"Threshold\"))) {\r\n super.hideLayers();\r\n return;\r\n }\r\n }\r\n }\r\n\r\n const conditions = this.getArrayOfConditions();\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(conditions)\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n const showerParent = this.getParent();\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerParent.showerSize()\r\n });\r\n return conditions\r\n }\r\n\r\n setDefault() {\r\n const filteredFeatures = this.features.filter(f => f.matchesMetaForArrayOfConditions(this.getArrayOfConditions()));\r\n if (!super.tryToSetTheSameFeature(filteredFeatures)) {\r\n const hardCodedDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"Sahara Autumn Porcelain Tile\");\r\n });\r\n const placeholderDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"laceholder\");\r\n });\r\n this.activeFeature = hardCodedDefault || filteredFeatures[0];\r\n this.placeholderFeature = placeholderDefault || null;\r\n }\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (this.getParent().activeSubType() === Shower.Type.Custom) {\r\n const zIndex = zIndexes.Shower.Floor;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {ShowerBodyType} from \"../../constants\";\r\nimport {Shower} from \"../../parts/shower\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\nimport {getFeatureIsLocked} from \"../../../../../misc/helpers\";\r\nimport store from \"../../../../../store\";\r\nimport {toggleNotCompatibleView} from \"../../../../../actions/selectionFunctions\";\r\n\r\nexport default class Threshold extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'threshold';\r\n this.partName = 'Threshold';\r\n this.translateId = \"visualizer.bathroom.shower.threshold\";\r\n this.homePageTitle = 'Threshold';\r\n this.dbName = 'ShowerPan';\r\n this.isStoneFeature = true;\r\n this.selectedByUser = false;\r\n this.layerPriority = 7;\r\n }\r\n\r\n applyFeatureIfNotCompatible() {\r\n const parent = this.getParent();\r\n const shower = parent.getParent();\r\n shower.showerFloorIsActive = true;\r\n if (shower.layout && shower.showerTubComboIsActive()) {\r\n const comboPart = shower.layout.parts[ShowerTubCombo.id];\r\n comboPart.showerTubComboIsActive = false;\r\n }\r\n }\r\n\r\n handleClick(ignoreLocked) {\r\n super.handleClick(ignoreLocked);\r\n if (this.notAvailableInVisualizer || getFeatureIsLocked(this)) {\r\n return\r\n }\r\n const parent = this.getParent();\r\n const shower = parent.getParent();\r\n if ((!shower.showerFloorIsActive || shower.showerTubComboIsActive()) && !window.location.hash.includes(\"visualizer\")) {\r\n store.dispatch(toggleNotCompatibleView(true));\r\n return;\r\n }\r\n\r\n this.applyFeatureIfNotCompatible();\r\n\r\n this.getParent().selectedByUser = true;\r\n const showerFloor = shower.showerFloor;\r\n if (showerFloor && !showerFloor.selectedByUser) {\r\n const showerFloorAvailableFeatures = showerFloor.navigationSubItems();\r\n const currentThresholdName = this.getSplittedFeatureName();\r\n const sameShowerFloor = showerFloorAvailableFeatures.find(navItemFloor => {\r\n return navItemFloor.part.getSplittedFeatureName() === currentThresholdName\r\n });\r\n if (sameShowerFloor) {\r\n super.handleClick.call(sameShowerFloor.part);\r\n showerFloor.selectedByUser = false;\r\n }\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new Threshold())\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n if (this.getParent().showerTubComboIsActive() || !this.getParent().showerFloorIsActive) {\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n if (this.getParent().customBodyType === ShowerBodyType.Door) {\r\n const showerDoorParent = this.getParent().showerDoor;\r\n if (showerDoorParent && showerDoorParent.activeFeature) {\r\n const currentShowerPanCondition = showerDoorParent.activeFeature.metaData[\"ShowerPan\"];\r\n if (!currentShowerPanCondition || (currentShowerPanCondition && !currentShowerPanCondition.includes(\"Threshold\"))) {\r\n super.hideLayers();\r\n return;\r\n }\r\n }\r\n }\r\n const conditions = this.getArrayOfConditions();\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(conditions)\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n // getArrayOfConditions() {\r\n // const layout = this.getParent().layout;\r\n // const showerSize = this.getParent().showerSize();\r\n // let showerDimensions = getMetadataByDimensions(this.getParent().showerDimensions());\r\n //\r\n // const vanity = layout.parts[Vanity.id];\r\n // let counterTopSize = vanity.counterTopSize();\r\n // if (counterTopSize === '72in' && layout.type === 1 && (showerDimensions !== \"Full\" || showerDimensions !== \"Pony\")) {\r\n // showerDimensions = \"Full\"\r\n // }\r\n //\r\n // return [{\r\n // propName: 'ShowerSize',\r\n // propValue: showerSize\r\n // }, {\r\n // propName: 'EX L',\r\n // propValue: showerDimensions\r\n // }];\r\n // }\r\n\r\n getArrayOfConditions() {\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n const showerParent = this.getParent();\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerParent.showerSize()\r\n });\r\n return conditions\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (this.getParent().activeSubType() === Shower.Type.Custom) {\r\n const zIndex = zIndexes.Shower.Threshold;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class ShowerDrain extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_drain';\r\n this.partName = 'Shower Drain';\r\n this.translateId = \"visualizer.bathroom.shower.shower_drain\";\r\n this.homePageTitle = 'Shower Drain';\r\n this.visible = false;\r\n this.layerPriority = 14;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new ShowerDrain())\r\n }\r\n\r\n setLayers(layout) {\r\n const showerParent = this.getParent();\r\n if (!showerParent.showerFloorIsActive || showerParent.showerTubComboIsActive()) {\r\n super.hideLayers();\r\n return;\r\n }\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n const showerParent = this.getParent();\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerParent.showerSize()\r\n })\r\n return conditions\r\n }\r\n\r\n setDefault() {\r\n const filteredFeatures = this.features.filter(f => f.matchesMetaForArrayOfConditions(this.getArrayOfConditions()));\r\n this.activeFeature = filteredFeatures[0];\r\n this.placeholderFeature = filteredFeatures[0];\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Shower.ShowerDrain;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\nimport {IS_BATHROOM_OLD_BV_SCENE} from \"../../../../../config\";\r\n\r\nexport default class ShowerHead extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_head';\r\n this.partName = 'Shower Head';\r\n this.translateId = \"visualizer.bathroom.shower.shower_head\";\r\n this.layerPriority = 4;\r\n this.canBeDisabled = true;\r\n if (isChild) {\r\n this.previouslySelectedFeatures = {\r\n Layout1: {},\r\n Layout4: {},\r\n };\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new ShowerHead());\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const showerTubCombo = this.getParent().layout.parts[ShowerTubCombo.id];\r\n\r\n if (this.getParent().showerTubComboIsActive() && showerTubCombo && showerTubCombo.walkInTub\r\n && showerTubCombo.bottomTub === showerTubCombo.walkInTub.bottomTubId) {\r\n super.hideLayers();\r\n return;\r\n }\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n // getArrayOfConditions() {\r\n // const showerParent = this.getParent();\r\n // const activeShowerPartId = showerParent.showerTubComboIsActive() ? ShowerTubCombo.id : Shower.id;\r\n // const showerSize = showerParent.layout.parts[activeShowerPartId].showerSize();\r\n // return [{\r\n // propName: \"Shower\",\r\n // propValue: showerParent.showerTubComboIsActive()\r\n // ? [\"Tub\"]\r\n // : showerParent.isComplete() ? \"Complete\" : \"Custom\"\r\n // }, {\r\n // propName: 'ShowerSize',\r\n // propValue: showerSize\r\n // }]\r\n // }\r\n\r\n getArrayOfConditions() {\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n const showerParent = this.getParent();\r\n if (!IS_BATHROOM_OLD_BV_SCENE) {\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerParent.showerSize()\r\n });\r\n }\r\n return conditions\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Shower.ShowerHead;\r\n }\r\n }\r\n}\r\n","import {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\nimport {Shower} from \"../../parts/shower\";\r\nimport {METADATA, PAN_POSITIONS} from \"../../constants\";\r\nimport AccessoryCommon from \"./accessoryCommon\";\r\n\r\nexport default class SoapDish extends AccessoryCommon {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'soap_dish';\r\n this.partName = 'Soap Dish';\r\n this.translateId = \"visualizer.bathroom.accessories.soap_dish\";\r\n this.visible = true;\r\n this.canBeDisabled = true;\r\n if (isChild) {\r\n this.layerPositions = {\r\n [PAN_POSITIONS[0]]: null,\r\n [PAN_POSITIONS[1]]: null,\r\n [PAN_POSITIONS[2]]: null,\r\n };\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n dbFeature.metaData[\"layerPosition\"] = dbFeature.metaData[\"Side\"] ? dbFeature.metaData[\"Side\"][0] : METADATA.LeftSide;\r\n if (Array.isArray(dbFeature.metaData[\"ShowerSize\"])\r\n && (dbFeature.metaData[\"ShowerSize\"].includes('30')\r\n || dbFeature.metaData[\"ShowerSize\"].includes('30in')\r\n || dbFeature.metaData[\"ShowerSize\"].includes('36')\r\n || dbFeature.metaData[\"ShowerSize\"].includes('36in'))) {\r\n // we don't have L uploaded for small Shower sizes, only C, but we show L features in the navigation\r\n dbFeature.metaData[\"Side\"] = [METADATA.LeftSide];\r\n dbFeature.metaData[\"layerPosition\"] = METADATA.LeftSide;\r\n }\r\n const partNumber = dbFeature.metaData[\"layerPosition\"] === PAN_POSITIONS[0] ? 1 : 2;\r\n return super.load_(dbFeature, new SoapDish(false, partNumber),\r\n true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n\r\n disabledClick() {\r\n if (!this.disabled && this.activeFeature) {\r\n this.activeFeature.handleClick() // check soapDish\r\n }\r\n }\r\n\r\n availableFeatures(features) {\r\n return features.filter(feature => feature.partNumber === 1)\r\n }\r\n\r\n handleClick() { // \"this\" is feature!! not the feature group\r\n super.handleClick();\r\n const parent = this.getParent();\r\n const accessoriesParent = parent.getParent();\r\n const showerParent = accessoriesParent.layout.parts[Shower.id];\r\n const showerSize = showerParent.showerSize();\r\n if ((showerSize === \"30\" || showerSize === \"36\") && parent.activeFeature) {\r\n parent.layerPositions[parent.activeFeature.metaData[\"layerPosition\"]] = parent.activeFeature;\r\n }\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const showerParent = this.getParent().layout.parts[Shower.id];\r\n const showerComboParent = layout.parts[ShowerTubCombo.id];\r\n\r\n if (showerParent && showerComboParent && showerParent.showerTubComboIsActive() && showerComboParent.bottomTub === \"walk_in_tub\") {\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n const conditions = this.getArrayOfConditions();\r\n if ((this.activeFeature && this.activeFeature.matchesMetaForArrayOfConditions(conditions)\r\n || (this.activeFeature && this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes) {\r\n Object.keys(this.layerPositions).forEach((key, keyIndex) => {\r\n if (this.layerPositions[key]) {\r\n this.layerPositions[key].layer.zIndex = zIndexes.Accessories.SoapDish + keyIndex*10;\r\n }\r\n })\r\n }\r\n }\r\n}\r\n","import {SIDE_POSITIONS} from \"../../constants\";\r\nimport AccessoryCommon from \"./accessoryCommon\";\r\n\r\nexport default class CornerCaddie extends AccessoryCommon {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'corner_caddie';\r\n this.partName = 'Corner Caddie';\r\n this.translateId = \"visualizer.bathroom.accessories.corner_caddie\";\r\n this.visible = true;\r\n this.canBeDisabled = true;\r\n if (isChild) {\r\n this.layerPositions = {\r\n [SIDE_POSITIONS[0]]: null,\r\n [SIDE_POSITIONS[1]]: null,\r\n };\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n dbFeature.metaData[\"layerPosition\"] = dbFeature.metaData[\"Side\"] ? dbFeature.metaData[\"Side\"][0] : \"\";\r\n const partNumber = dbFeature.metaData[\"layerPosition\"] === SIDE_POSITIONS[0] ? 1 : 2;\r\n return super.load_(dbFeature, new CornerCaddie(false, partNumber),\r\n true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n\r\n availableFeatures(features) {\r\n return features.filter(feature => feature.partNumber === 1)\r\n }\r\n\r\n handleClick() {\r\n const accessoriesParent = this.getParent().getParent();\r\n accessoriesParent.caddie_type = this.partId;\r\n super.handleClick();\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const accessoriesParent = this.getParent();\r\n if (accessoriesParent.caddie_type !== this.partId) {\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions()))) {\r\n // this.checkIfFeaturePartIsMatching();\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes) {\r\n Object.keys(this.layerPositions).forEach((key, keyIndex) => {\r\n if (this.layerPositions[key]) {\r\n this.layerPositions[key].layer.zIndex = zIndexes.Accessories.CornerCaddie + keyIndex*10;\r\n }\r\n })\r\n }\r\n }\r\n}\r\n","import {SIDE_POSITIONS} from \"../../constants\";\r\nimport AccessoryCommon from \"./accessoryCommon\";\r\n\r\nexport default class LargeCornerCaddie extends AccessoryCommon {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'large_corner_caddie';\r\n this.partName = 'Large Corner Caddie';\r\n this.translateId = \"visualizer.bathroom.accessories.large_corner_caddie\";\r\n this.visible = true;\r\n this.canBeDisabled = true;\r\n if (isChild) {\r\n this.layerPositions = {\r\n [SIDE_POSITIONS[0]]: null,\r\n [SIDE_POSITIONS[1]]: null,\r\n };\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n dbFeature.metaData[\"layerPosition\"] = dbFeature.metaData[\"Side\"] ? dbFeature.metaData[\"Side\"][0] : \"\";\r\n const partNumber = dbFeature.metaData[\"layerPosition\"] === SIDE_POSITIONS[0] ? 1 : 2;\r\n return super.load_(dbFeature, new LargeCornerCaddie(false, partNumber),\r\n true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n\r\n handleClick() {\r\n const accessoriesParent = this.getParent().getParent();\r\n accessoriesParent.caddie_type = this.partId;\r\n super.handleClick();\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const accessoriesParent = this.getParent();\r\n if (accessoriesParent.caddie_type !== this.partId) {\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions()))) {\r\n // this.checkIfFeaturePartIsMatching();\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes) {\r\n Object.keys(this.layerPositions).forEach((key, keyIndex) => {\r\n if (this.layerPositions[key]) {\r\n this.layerPositions[key].layer.zIndex = zIndexes.Accessories.LargeCornerCaddie + keyIndex*10;\r\n }\r\n })\r\n }\r\n }\r\n\r\n}\r\n","import {METADATA, PAN_POSITIONS, SIDE_POSITIONS} from \"../../constants\";\r\nimport AccessoryCommon from \"./accessoryCommon\";\r\n// import {Shower} from \"../../parts/shower\";\r\n\r\nexport default class GrabBar extends AccessoryCommon {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'grab_bar';\r\n this.partName = 'Grab Bar';\r\n this.translateId = \"visualizer.bathroom.accessories.grab_bar\";\r\n this.visible = true;\r\n this.canBeDisabled = true;\r\n if (isChild) {\r\n this.layerPositions = {\r\n [PAN_POSITIONS[0]]: null,\r\n [PAN_POSITIONS[1]]: null,\r\n [PAN_POSITIONS[2]]: null,\r\n };\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n if (!dbFeature.metaData[\"Shower\"]) {\r\n dbFeature.metaData[\"Shower\"] = [\"Shower\"];\r\n }\r\n if (dbFeature.sharedFeatureName === \"24in - Studio - CH - WIT\") {\r\n dbFeature.metaData[\"Shower\"] = [METADATA.ALL];\r\n }\r\n dbFeature.metaData[\"layerPosition\"] = dbFeature.metaData[\"Side\"] ? dbFeature.metaData[\"Side\"][0] : METADATA.LeftSide;\r\n const partNumber = dbFeature.metaData[\"layerPosition\"] === PAN_POSITIONS[0] ? 1 : 2;\r\n return super.load_(dbFeature, new GrabBar(false, partNumber),\r\n true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n\r\n disabledClick() {\r\n if (!this.disabled && this.activeFeature) {\r\n this.activeFeature.handleClick() // check soapDish\r\n }\r\n }\r\n\r\n availableFeatures(features) {\r\n return features.filter(feature => feature.partNumber === 1)\r\n }\r\n\r\n handleClick(ignoreLocked) { // \"this\" is feature!! not the feature group\r\n super.handleClick(ignoreLocked);\r\n // const parent = this.getParent();\r\n // const accessoriesParent = parent.getParent();\r\n // const showerParent = accessoriesParent.layout.parts[Shower.id];\r\n // const showerSize = showerParent.showerSize();\r\n // if (showerSize !== \"60\" && parent.activeFeature) {\r\n // parent.layerPositions[parent.activeFeature.metaData[\"layerPosition\"]] = parent.activeFeature;\r\n // }\r\n // parent.checkRelatedFeatureGroupPositions(this.metaData[\"layerPosition\"]);\r\n }\r\n\r\n checkCurrentPositions(position) {\r\n const feature = this.layerPositions[position];\r\n if (!feature) {\r\n return\r\n }\r\n const nameSplitted = feature.dbFeature.sharedFeatureName.split(\" \");\r\n const size = nameSplitted[nameSplitted.length - 1] ? nameSplitted[nameSplitted.length - 1].replace(\"in\", \"\") : \"\";\r\n const newPosition = position === SIDE_POSITIONS[0] ? SIDE_POSITIONS[1] : SIDE_POSITIONS[0];\r\n if (!size || !this.layerPositions[newPosition]) {\r\n return\r\n }\r\n if (this.layerPositions[newPosition]) {\r\n const nameSplitted2 = this.layerPositions[newPosition].dbFeature.sharedFeatureName.split(\" \");\r\n const size2 = nameSplitted2[nameSplitted2.length - 1] ? nameSplitted2[nameSplitted2.length - 1].replace(\"in\", \"\") : \"\";\r\n if (!size || (+size2 === 12 && +size === 12)) { // last chance to keep other side layer\r\n return;\r\n }\r\n }\r\n this.layerPositions[newPosition] = null;\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes) {\r\n Object.keys(this.layerPositions).forEach((key, keyIndex) => {\r\n if (this.layerPositions[key]) {\r\n this.layerPositions[key].layer.zIndex = zIndexes.Accessories.GrabBar + keyIndex*10;\r\n }\r\n })\r\n }\r\n }\r\n\r\n // showLayerPositionsModal() {\r\n // const showerParent = this.getParent().layout.parts[Shower.id];\r\n // return showerParent.showerSize() === \"60\"\r\n // }\r\n\r\n}\r\n","import {CORNER_SHELVES_POSITIONS} from \"../../constants\";\r\nimport AccessoryCommon from \"./accessoryCommon\";\r\n\r\nexport default class CornerShelf extends AccessoryCommon {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = \"corner_shelf\";\r\n this.partName = \"Corner Shelf\";\r\n this.translateId = \"visualizer.bathroom.accessories.corner_shelf\";\r\n this.dbName = \"Small Corner Shelf\";\r\n this.visible = true;\r\n this.canBeDisabled = true;\r\n if (isChild) {\r\n this.layerPositions = {};\r\n CORNER_SHELVES_POSITIONS.forEach(pos => {\r\n this.layerPositions[pos] = null\r\n })\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n dbFeature.metaData[\"layerPosition\"] = (dbFeature.metaData[\"Side\"] && dbFeature.metaData[\"Part\"])\r\n ? dbFeature.metaData[\"Side\"][0] + dbFeature.metaData[\"Part\"][0]\r\n : \"\"\r\n const partNumber = dbFeature.metaData[\"layerPosition\"] === CORNER_SHELVES_POSITIONS[0] ? 1 : 2;\r\n return super.load_(dbFeature, new CornerShelf(false, partNumber),\r\n true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n\r\n handleClick() {\r\n const accessoriesParent = this.getParent().getParent();\r\n accessoriesParent.caddie_type = this.partId;\r\n super.handleClick();\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const accessoriesParent = this.getParent();\r\n if (accessoriesParent.caddie_type !== this.partId) {\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions()))) {\r\n // this.checkIfFeaturePartIsMatching();\r\n super.setLayers(layout);\r\n } else {\r\n this.setDefault();\r\n super.setLayers(layout);\r\n }\r\n\r\n // if (this.layerPositions) {\r\n // const windowParent = this.getParent().layout.parts.Window;\r\n // if (windowParent && windowParent.windowKits && !windowParent.windowKits.disabled) {\r\n // Object.keys(this.layerPositions).forEach(key => {\r\n // if (!key.includes(\"3\") && this.layerPositions[key]) {\r\n // this.layerPositions[key].layer.src = '';\r\n // }\r\n // })\r\n // }\r\n // }\r\n\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes) {\r\n Object.keys(this.layerPositions).forEach((key, keyIndex) => {\r\n if (this.layerPositions[key]) {\r\n this.layerPositions[key].layer.zIndex = zIndexes.Accessories.CornerShelf1 + keyIndex*10;\r\n }\r\n })\r\n }\r\n }\r\n\r\n showLayerPositionsModal() {\r\n return true\r\n }\r\n\r\n}\r\n","import AccessoryCommon from \"./accessoryCommon\";\r\n// import DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\n\r\nexport default class ShowerPod extends AccessoryCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_pod';\r\n this.partName = 'Shower Pod';\r\n this.translateId = \"visualizer.bathroom.accessories.shower_pod\";\r\n this.dbName = document.kvConfig.userId === 157639 ? 'Storage Pods' : 'Storage Pod'; // window.location.href.includes(\"american_standard_website\")\r\n this.visible = true;\r\n this.canBeDisabled = true;\r\n }\r\n\r\n handleClick() { // \"this\" is feature!! not the feature group\r\n const parent = this.getParent();\r\n const accessoriesParent = parent.getParent();\r\n if (accessoriesParent && accessoriesParent.largeShelf && !accessoriesParent.largeShelf.disabled) {\r\n accessoriesParent.largeShelf.disabled = true;\r\n }\r\n super.handleClick();\r\n }\r\n\r\n load(dbFeature) {\r\n if (document.kvConfig.userId !== 157639 && dbFeature.groupName !== 'Storage Pod') {\r\n return false\r\n }\r\n return super.load_(dbFeature, new ShowerPod());\r\n }\r\n\r\n // navigationSubItems(filters, searchText) {\r\n // const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n // const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n // const parent = this.getParent();\r\n // featuresToDisplay.forEach(feature => {\r\n // if (parent.layout.parts.Window && parent.layout.parts.Window.windowKits && !parent.layout.parts.Window.windowKits.disabled) {\r\n // feature.matchesMetaFailed = true;\r\n // } else if (feature.matchesMetaFailed) {\r\n // feature.matchesMetaFailed = false;\r\n // }\r\n // });\r\n // return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n // }\r\n\r\n handleChangeParent(nonCompatibleWith) {\r\n if (nonCompatibleWith === \"Window Kit\") {\r\n const showerPodParent = this.getParent();\r\n const accessoriesParent = showerPodParent.getParent();\r\n accessoriesParent.layout.parts.Window.windowKits.disabled = true;\r\n showerPodParent.disabled = false;\r\n this.handleClick();\r\n }\r\n }\r\n\r\n disabledClick() {\r\n const accessoriesParent = this.getParent();\r\n const windowParent = accessoriesParent.layout.parts.Window;\r\n if (windowParent && windowParent.windowKits && !windowParent.windowKits.disabled) {\r\n windowParent.windowKits.disabled = true;\r\n }\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Accessories.ShowerPod;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n\r\n}\r\n","import AccessoryCommon from \"./accessoryCommon\";\r\nimport {SIDE_POSITIONS} from \"../../constants\";\r\nimport {Shower} from \"../../parts/shower\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\n\r\nexport default class Seats extends AccessoryCommon {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'shower_seats';\r\n this.partName = 'Seats';\r\n this.dbName = 'Flip-Up Seat';\r\n this.translateId = \"visualizer.bathroom.accessories.shower_seats\";\r\n this.visible = true;\r\n this.canBeDisabled = true;\r\n if (isChild) {\r\n this.layerPositions = {\r\n [SIDE_POSITIONS[0]]: null,\r\n [SIDE_POSITIONS[1]]: null,\r\n };\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n if (dbFeature.groupName !== \"Flip-Up Seat\") {\r\n return false\r\n }\r\n dbFeature.metaData[\"layerPosition\"] = dbFeature.metaData[\"Side\"] ? dbFeature.metaData[\"Side\"][0] : \"\";\r\n const partNumber = dbFeature.metaData[\"layerPosition\"] === SIDE_POSITIONS[0] ? 1 : 2;\r\n return super.load_(dbFeature, new Seats(false, partNumber),\r\n true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n\r\n disabledClick() {\r\n Object.keys(this.layerPositions).forEach(position => {\r\n if (this.layerPositions[position] && this.layerPositions[position].metaData[\"layerPosition\"]) {\r\n this.checkRelatedFeatureGroupPositions(this.layerPositions[position].metaData[\"layerPosition\"]);\r\n }\r\n })\r\n }\r\n\r\n handleClick() { // \"this\" is feature!! not the feature group\r\n super.handleClick();\r\n const parent = this.getParent();\r\n const showerComboParent = parent.getParent().layout.parts[ShowerTubCombo.id]\r\n if (showerComboParent.showerTubComboIsActive) {\r\n showerComboParent.showerTubComboIsActive = false;\r\n }\r\n parent.checkRelatedFeatureGroupPositions(this.metaData[\"layerPosition\"]);\r\n }\r\n\r\n setLayers(layout) {\r\n const showerParent = this.getParent().layout.parts[Shower.id];\r\n if (showerParent && showerParent.showerTubComboIsActive()) { // shower tub combo - remove\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n return super.setLayers(layout);\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes) {\r\n Object.keys(this.layerPositions).forEach((key, keyIndex) => {\r\n if (this.layerPositions[key]) {\r\n this.layerPositions[key].layer.zIndex = zIndexes.Accessories.Seats + keyIndex*10;\r\n }\r\n })\r\n }\r\n }\r\n\r\n}\r\n","import AccessoryCommon from \"./accessoryCommon\";\r\nimport {Shower} from \"../../parts/shower\";\r\n// import DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\n\r\nexport default class ShowerRod extends AccessoryCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_rod';\r\n this.partName = 'Shower Rod';\r\n this.translateId = \"visualizer.bathroom.accessories.shower_rod\";\r\n this.visible = true;\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new ShowerRod());\r\n }\r\n\r\n handleClick(ignoreLocked = false) {\r\n const parent = this.getParent()\r\n const showerParent = parent.getParent().layout.parts[Shower.id];\r\n if (showerParent && showerParent.showerDoor && !showerParent.showerDoor.disabled) { // shower tub combo - remove\r\n showerParent.showerDoor.disabled = true\r\n }\r\n super.handleClick(ignoreLocked);\r\n }\r\n\r\n // navigationSubItems(filters, searchText) {\r\n // const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n // const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n // const parent = this.getParent();\r\n // featuresToDisplay.forEach(feature => {\r\n // if (parent.layout.parts.Window && parent.layout.parts.Window.windowKits && !parent.layout.parts.Window.windowKits.disabled) {\r\n // feature.matchesMetaFailed = true;\r\n // } else if (feature.matchesMetaFailed) {\r\n // feature.matchesMetaFailed = false;\r\n // }\r\n // });\r\n // return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n // }\r\n\r\n // handleChangeParent(nonCompatibleWith) {\r\n // if (nonCompatibleWith === \"Window Kit\") {\r\n // const showerRodParent = this.getParent();\r\n // const accessoriesParent = showerRodParent.getParent();\r\n // accessoriesParent.layout.parts.Window.windowKits.disabled = true;\r\n // showerRodParent.disabled = false;\r\n // this.handleClick();\r\n // }\r\n // }\r\n\r\n disabledClick() {\r\n const showerParent = this.getParent().layout.parts[Shower.id];\r\n if (!this.disabled && showerParent && showerParent.showerDoor && !showerParent.showerDoor.disabled) { // shower tub combo - remove\r\n showerParent.showerDoor.disabled = true\r\n }\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Accessories.ShowerRod;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {Shower} from \"../../parts/shower\";\r\n\r\nexport default class WindowBody extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'window_body';\r\n this.partName = 'Window';\r\n this.translateId = \"visualizer.bathroom.window\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new WindowBody());\r\n }\r\n\r\n getArrayOfConditions() {\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n const layout = this.getParent().layout;\r\n const showerParent = layout.parts[Shower.id];\r\n const showerSize = showerParent.showerSize();\r\n if (showerParent && showerSize) {\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerSize\r\n });\r\n }\r\n return conditions\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Accessories.WindowBody;\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {Shower} from \"../../parts/shower\";\r\n// import DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\nimport {ShowerAccessories} from \"../../parts/showerAccessories\";\r\nimport {CORNER_SHELVES_POSITIONS} from \"../../constants\";\r\n\r\nexport default class WindowKits extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = \"window_kits\";\r\n this.dbName = \"Window Kit\";\r\n this.partName = \"Window Kits\";\r\n this.translateId = \"visualizer.bathroom.window.kits\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new WindowKits());\r\n }\r\n\r\n // navigationSubItems(filters, searchText) {\r\n // const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n // const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n // const windowParent = this.getParent();\r\n // const accessoriesParent = windowParent.layout.parts[ShowerAccessories.id];\r\n // featuresToDisplay.forEach(feature => {\r\n // if (accessoriesParent && accessoriesParent.showerPod && !accessoriesParent.showerPod.disabled) {\r\n // feature.matchesMetaFailed = \"shower_pod\";\r\n // } else if (accessoriesParent.cornerShelf && !accessoriesParent.cornerShelf.disabled\r\n // && CORNER_SHELVES_POSITIONS.some(pos => accessoriesParent.cornerShelf.layerPositions[pos] && !pos.includes(\"3\"))) {\r\n // feature.matchesMetaFailed = \"corner_shelf\";\r\n // } else if (feature.matchesMetaFailed) {\r\n // feature.matchesMetaFailed = false;\r\n // }\r\n // });\r\n // return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n // }\r\n\r\n // handleChangeParent(nonCompatibleWith) {\r\n // if (nonCompatibleWith === \"Shower Pod\") {\r\n //\r\n // }\r\n // }\r\n handleChangeParent() {\r\n // this.removeInterferingParts();\r\n this.getParent().disabled = false;\r\n this.handleClick();\r\n }\r\n\r\n removeInterferingParts = () => {\r\n const kitsParent = this.getParent();\r\n const windowParent = kitsParent.getParent();\r\n const accessoriesParent = windowParent.layout.parts[ShowerAccessories.id];\r\n if (accessoriesParent) {\r\n if (accessoriesParent.showerPod) {\r\n accessoriesParent.showerPod.disabled = true;\r\n }\r\n if (accessoriesParent.cornerShelf) {\r\n CORNER_SHELVES_POSITIONS.forEach(pos => {\r\n if (accessoriesParent.cornerShelf.layerPositions[pos] && !pos.includes(\"3\")) {\r\n accessoriesParent.cornerShelf.layerPositions[pos] = null;\r\n }\r\n })\r\n }\r\n }\r\n }\r\n\r\n // disabledClick() {\r\n // if (!this.disabled) {\r\n // this.removeInterferingParts();\r\n // }\r\n // }\r\n\r\n getArrayOfConditions() {\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n const windowParent = this.getParent();\r\n const layout = windowParent.layout;\r\n const showerParent = layout.parts[Shower.id];\r\n const showerSize = showerParent.showerSize();\r\n if (showerParent && showerSize) {\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerSize\r\n });\r\n }\r\n // if (windowBody && this.windowNeededLayouts.includes(layout.type) && document.kvConfig.toolVersion !== 5) {\r\n // conditions.push({\r\n // propName: \"Window\",\r\n // propValue: (windowBody && windowBody.activeFeature && windowBody.disabled) ? \"Off\" : \"On\"\r\n // })\r\n // }\r\n return conditions\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Accessories.WindowKits;\r\n }\r\n }\r\n}\r\n","import AccessoryCommon from \"./accessoryCommon\";\r\n\r\nexport default class LargeShelf extends AccessoryCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'large_shelf';\r\n this.partName = 'Large Shelf';\r\n this.translateId = \"visualizer.bathroom.accessories.large_shelf\";\r\n this.visible = true;\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new LargeShelf());\r\n }\r\n\r\n handleClick() { // \"this\" is feature!! not the feature group\r\n const parent = this.getParent();\r\n const accessoriesParent = parent.getParent();\r\n if (accessoriesParent && accessoriesParent.showerPod && !accessoriesParent.showerPod.disabled) {\r\n accessoriesParent.showerPod.disabled = true;\r\n }\r\n super.handleClick();\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Accessories.LargeShelf;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class TowelBar extends IntermediatePart {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'towel_bar';\r\n this.partName = 'Towel Bar';\r\n this.translateId = \"visualizer.bathroom.accessories.towel_bar\";\r\n this.canBeDisabled = true;\r\n // if (isChild) {\r\n // createParentPositions(this);\r\n // }\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Accessories.TowelBar;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n}\r\n","import AccessoryCommon from \"./accessoryCommon\";\r\n\r\nexport default class ShampooShelf extends AccessoryCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shampoo_shelf';\r\n this.partName = 'Shampoo Shelf';\r\n this.translateId = \"visualizer.bathroom.accessories.shampoo_shelf\";\r\n this.visible = true;\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new ShampooShelf());\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Accessories.ShampooShelf;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n\r\n}\r\n","import {Part} from \"../part\";\r\nimport {toiletThumbnail} from '../../../bvComponent/core/assets';\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport {IntermediatePart} from \"../intermediatePart\";\r\nimport {Shower} from \"./shower\";\r\nimport {IS_BATHROOM_OLD_BV_SCENE} from \"../../../../config\";\r\n\r\nexport class Toilet extends Part {\r\n static id = 'Toilet';\r\n\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Toilet';\r\n this.translateId = \"visualizer.bathroom.toilet\";\r\n this.homePageTitle = 'Toilets';\r\n this.partThumbnail = toiletThumbnail;\r\n this.toilet = null;\r\n this.paperHolder = null;\r\n this.relatedItems = [];\r\n\r\n }\r\n\r\n load(dbFeature) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Toilet\": {\r\n relatedItemName = \"toilet\";\r\n RelatedItemClass = ToiletBody;\r\n break;\r\n }\r\n case \"Paper Holder\": {\r\n relatedItemName = \"paperHolder\";\r\n RelatedItemClass = PaperHolder;\r\n break;\r\n }\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n if (relatedItemName !== \"shadows\") {\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n subParts() {\r\n return this.relatedItems.map(_ => new DesignNavigationItem(_.partName, _));\r\n }\r\n\r\n setDefaultPartAfterSubTypeClick() {\r\n return this.subParts()[0]\r\n }\r\n\r\n setDefault(layout) {\r\n this.relatedItems.forEach(_ => _.setDefault(layout));\r\n }\r\n}\r\n\r\nclass ToiletBody extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'toilet';\r\n this.partName = 'Toilet';\r\n this.translateId = \"visualizer.bathroom.toilet\";\r\n this.homePageTitle = 'Toilets';\r\n this.canBeDisabled = true;\r\n }\r\n\r\n getArrayOfConditions() {\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n const layout = this.getParent().layout;\r\n const showerParent = layout.parts[Shower.id];\r\n const showerSize = showerParent.showerSize();\r\n if (showerParent && showerSize && !IS_BATHROOM_OLD_BV_SCENE) {\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerSize\r\n });\r\n }\r\n return conditions\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Toilet;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndexes.Toilet;\r\n }\r\n }\r\n}\r\n\r\n\r\nclass PaperHolder extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'paper_holder';\r\n this.partName = 'Paper Holder';\r\n this.translateId = \"visualizer.bathroom.accessories.paper_holder\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.PaperHolder;\r\n }\r\n }\r\n}\r\n\r\n\r\n","import {Part} from \"../part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport {floorThumbnail} from \"../../../kvComponent/core/assets\";\r\n\r\nimport {IntermediatePart} from \"../intermediatePart\";\r\nimport {Shower} from \"./shower\";\r\n\r\nexport default class Floor extends Part {\r\n static id = 'Floor';\r\n\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n this.partId = 'bathroom_floor';\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Floor';\r\n this.translateId = \"visualizer.bathroom.floor\";\r\n this.partThumbnail = floorThumbnail;\r\n }\r\n\r\n load(dbFeature) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Floor\":\r\n relatedItemName = \"floorBody\";\r\n RelatedItemClass = FloorBody;\r\n break;\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n if (relatedItemName !== \"shadows\") {\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n}\r\n\r\nclass FloorBody extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'bathroom_floor';\r\n this.partName = 'Floor';\r\n this.translateId = \"visualizer.bathroom.floor\";\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new FloorBody());\r\n }\r\n\r\n getArrayOfConditions() {\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n const layout = this.getParent().layout;\r\n const showerParent = layout.parts[Shower.id];\r\n const showerSize = showerParent.showerSize();\r\n if (showerParent && showerSize && layout.type !== 4) {\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerSize\r\n });\r\n }\r\n return conditions\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes) {\r\n const zIndex = zIndexes.Background.Floor;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n }\r\n}\r\n\r\n\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {LayoutType} from \"../../constants\";\r\nimport {Shower} from \"../../parts/shower\";\r\n\r\nexport default class LeftWall extends IntermediatePart {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'left_wall';\r\n this.partName = 'Left Wall';\r\n this.translateId = \"visualizer.bathroom.walls.left_wall\";\r\n this.activeFeatureBeforeAllWalls = null;\r\n this.allWallsApplied = true;\r\n this.isStoneFeature = true;\r\n this.partsLayouts = [LayoutType.Layout4];\r\n }\r\n\r\n load(dbFeature) {\r\n const partsRoomLayouts = this.partsLayouts.map(pl => \"Layout\"+pl);\r\n const isPartFeature = !dbFeature.metaData[\"RoomLayout\"] || partsRoomLayouts.some(layoutType => {\r\n return dbFeature.metaData[\"RoomLayout\"].includes(layoutType)\r\n });\r\n if (isPartFeature) {\r\n const part1 = dbFeature.metaData[\"LayerType\"] && dbFeature.metaData[\"MirrorSize\"];\r\n const partNumber = part1 ? 1 : 2;\r\n return super.load_(dbFeature, new LeftWall(false, partNumber),\r\n true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n return super.load_(dbFeature, new LeftWall(false, 1, true, \"features\"));\r\n }\r\n\r\n availableFeatures(features) {\r\n return features.filter(feature => feature.partNumber === 1)\r\n }\r\n\r\n setLayers(layout) {\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions()))) {\r\n this.checkIfFeaturePartIsMatching();\r\n super.setLayers(layout);\r\n } else {\r\n this.setDefault();\r\n super.setLayers(layout);\r\n }\r\n }\r\n\r\n setActiveFeatureParts(fromFeature = this.activeFeature, activeFeatureConditions = []) {\r\n return this.getActiveFeaturePartsAccordingToActiveFeature(fromFeature, activeFeatureConditions);\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions(); // roomLayout\r\n const shower = this.getParent().layout.parts[Shower.id];\r\n if (shower && shower.showerSize()) {\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: shower.showerSize()\r\n })\r\n }\r\n return conditions\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const layout = this.getParent().layout;\r\n const isPartsLayout = this.partsLayouts.includes(layout.type);\r\n if (zIndexes) {\r\n const zIndex = isPartsLayout ? zIndexes.Walls.LeftWall : zIndexes.Background.LeftWall;\r\n const zIndex2 = zIndexes.Background.LeftWall;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (this.activeFeatureParts && this.activeFeatureParts.length) {\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n if (activeFeaturePart && activeFeaturePart.layer) {\r\n activeFeaturePart.layer.zIndex = zIndex2;\r\n }\r\n })\r\n }\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {Vanity} from \"../../parts/vanity\";\r\nimport {LayoutType} from \"../../constants\";\r\nimport {Shower} from \"../../parts/shower\";\r\nimport {IS_BATHROOM_OLD_BV_SCENE} from \"../../../../../config\";\r\n\r\nexport default class RightWall extends IntermediatePart {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'right_wall';\r\n this.partName = 'Right Wall';\r\n this.translateId = \"visualizer.bathroom.walls.right_wall\";\r\n this.activeFeatureBeforeAllWalls = null;\r\n this.allWallsApplied = true;\r\n this.isStoneFeature = true;\r\n this.partsLayouts = [LayoutType.Layout1];\r\n }\r\n\r\n load(dbFeature) {\r\n const partsRoomLayouts = this.partsLayouts.map(pl => \"Layout\"+pl);\r\n const isPartFeature = !dbFeature.metaData[\"RoomLayout\"] || partsRoomLayouts.some(layoutType => {\r\n return dbFeature.metaData[\"RoomLayout\"].includes(layoutType)\r\n });\r\n if (isPartFeature) {\r\n const part1 = dbFeature.metaData[\"LayerType\"] && dbFeature.metaData[\"MirrorSize\"];\r\n const partNumber = part1 ? 1 : 2;\r\n return super.load_(dbFeature, new RightWall(false, partNumber),\r\n true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n return super.load_(dbFeature, new RightWall(false, 1, true, \"features\"));\r\n }\r\n\r\n availableFeatures(cabinetFeatures) {\r\n return cabinetFeatures.filter(cabinetFeature => cabinetFeature.partNumber === 1)\r\n }\r\n\r\n setLayers(layout) {\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions()))) {\r\n this.checkIfFeaturePartIsMatching();\r\n super.setLayers(layout);\r\n } else {\r\n this.setDefault();\r\n super.setLayers(layout);\r\n }\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n const wallsParent = this.getParent();\r\n const layout = wallsParent.layout;\r\n const mirror = layout.parts[Vanity.id] && layout.parts[Vanity.id].mirror;\r\n if (this.partsLayouts.includes(layout.type) && mirror && mirror.activeFeature && mirror.activeFeature.dbFeature.metaData[\"MirrorSize\"]) {\r\n conditions.push({\r\n propName: \"MirrorSize\",\r\n propValue: IS_BATHROOM_OLD_BV_SCENE\r\n ? mirror.activeFeature.dbFeature.metaData[\"MirrorSize\"][0]\r\n : mirror.activeFeature.dbFeature.metaData[\"MirrorSize\"][0] === \"32\" ? \"48\" : mirror.activeFeature.dbFeature.metaData[\"MirrorSize\"][0]\r\n })\r\n }\r\n const shower = this.getParent().layout.parts[Shower.id];\r\n if (shower && shower.showerSize()) {\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: shower.showerSize()\r\n })\r\n }\r\n return conditions;\r\n }\r\n\r\n setActiveFeatureParts(fromFeature = this.activeFeature, activeFeatureConditions = []) {\r\n return this.getActiveFeaturePartsAccordingToActiveFeature(fromFeature, activeFeatureConditions);\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const layout = this.getParent().layout;\r\n const isPartsLayout = this.partsLayouts.includes(layout.type);\r\n if (zIndexes) {\r\n const zIndex = isPartsLayout ? zIndexes.Walls.RightWall : zIndexes.Background.RightWall;\r\n const zIndex2 = zIndexes.Background.RightWall;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n if (this.activeFeatureParts && this.activeFeatureParts.length) {\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n if (activeFeaturePart && activeFeaturePart.layer) {\r\n activeFeaturePart.layer.zIndex = zIndex2;\r\n }\r\n })\r\n }\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {Shower} from \"../../parts/shower\";\r\n\r\nexport default class CenterWall extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'center_wall';\r\n this.partName = 'Center Wall';\r\n this.translateId = \"visualizer.bathroom.walls.center_wall\";\r\n this.activeFeatureBeforeAllWalls = null;\r\n this.allWallsApplied = true;\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new CenterWall());\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions(); // roomLayout\r\n const shower = this.getParent().layout.parts[Shower.id];\r\n if (shower && shower.showerSize()) {\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: shower.showerSize()\r\n })\r\n }\r\n return conditions\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes) {\r\n const zIndex = zIndexes.Background.CenterWall;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n }\r\n}\r\n","import {Shower} from \"../../parts/shower\";\r\nimport {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class CeilingPanels extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'ceiling_panels';\r\n this.partName = 'Ceiling Panels';\r\n this.translateId = \"visualizer.bathroom.ceiling_panels\";\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n if (dbFeature.metaData && dbFeature.metaData[\"Coords\"]) {\r\n dbFeature.metaData[\"Coords\"] = null;\r\n }\r\n return super.load_(dbFeature, new CeilingPanels());\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions(); // roomLayout\r\n const shower = this.getParent().layout.parts[Shower.id];\r\n if (shower && shower.showerSize()) {\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: shower.showerSize()\r\n })\r\n }\r\n return conditions\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes) {\r\n const zIndex = zIndexes.Walls.CeilingPanels;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n }\r\n\r\n}\r\n","import {Part} from \"../part\";\r\nimport {wallsThumbnail} from \"../../../bvComponent/core/assets\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\n\r\n// import ToiletPaper from \"../subparts/globals/toiletPaper\";\r\n// import Towel from \"../subparts/globals/towel\";\r\nimport LightFixture from \"../subparts/globals/lightFixture\";\r\nimport DecorWindow from \"../subparts/globals/decorWindow\";\r\nimport DecorSeat from \"../subparts/globals/decorSeat\";\r\n// import ToiletPaperHolder from \"../subparts/globals/toiletPaperHolder\";\r\nimport LampFixture from \"../subparts/globals/lampFixture\";\r\nimport Attachment from \"../subparts/globals/attachment\";\r\n\r\nexport default class Globals extends Part {\r\n static id = \"Globals\";\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = \"Globals\";\r\n this.partThumbnail = wallsThumbnail;\r\n\r\n // related items\r\n // this.toiletPaper = null;\r\n this.towel = null;\r\n this.lightFixture = null;\r\n }\r\n\r\n load(dbFeature) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Attachment\": {\r\n relatedItemName = \"attachment\";\r\n RelatedItemClass = Attachment;\r\n break;\r\n }\r\n case \"Decore\": {\r\n // if (dbFeature.displayName.includes(\"Towel\")) {\r\n // relatedItemName = \"towel\";\r\n // RelatedItemClass = Towel;\r\n // } else if (dbFeature.displayName.includes(\"Toilet Paper\")) {\r\n // relatedItemName = \"toiletPaper\";\r\n // RelatedItemClass = ToiletPaper;\r\n // } else if (dbFeature.displayName.includes(\"Toilet Paper Holder\")) {\r\n // relatedItemName = \"toiletPaperHolder\";\r\n // RelatedItemClass = ToiletPaperHolder;\r\n // } else\r\n if (dbFeature.displayName.includes(\"Light Fixture\")) {\r\n relatedItemName = \"lightFixture\";\r\n RelatedItemClass = LightFixture;\r\n } else if (dbFeature.displayName.includes(\"Lamp fixture\")) {\r\n relatedItemName = \"lampFixture\";\r\n RelatedItemClass = LampFixture;\r\n } else if (dbFeature.displayName.includes(\"Seat\")) {\r\n relatedItemName = \"lightFixture\";\r\n RelatedItemClass = DecorSeat;\r\n } else if (dbFeature.displayName.includes(\"Window\")) {\r\n relatedItemName = \"decorWindow\";\r\n RelatedItemClass = DecorWindow;\r\n }\r\n break;\r\n }\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n handleSubPartClick() {}\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class LightFixture extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = \"light_fixture\";\r\n this.partName = \"Light Fixture\";\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new LightFixture());\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Globals.LightFixture;\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {LayoutType} from \"../../constants\";\r\n\r\nexport default class DecorWindow extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = \"decor_window\";\r\n this.partName = \"Decor Window\";\r\n if (isChild) {\r\n this.showOnLayouts = [LayoutType.Layout4];\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new DecorWindow());\r\n }\r\n\r\n setLayers(layout) {\r\n if (!this.showOnLayouts.includes(layout.type)) {\r\n super.hideLayers();\r\n return;\r\n }\r\n super.setLayers(layout);\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Globals.DecorWindow;\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class DecorSeat extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = \"decor_seat\";\r\n this.partName = \"Decor Seat\";\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new DecorSeat());\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Globals.DecorSeat;\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class LampFixture extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = \"lamp_fixture\";\r\n this.partName = \"Lamp Fixture\";\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new LampFixture());\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Globals.LampFixture;\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport isEqual from \"lodash/isEqual\";\r\nimport {METADATA} from \"../../constants\";\r\n\r\nexport default class Attachment extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = \"attachment\";\r\n this.partName = \"Attachment\";\r\n this.hasAdditionalParts = true;\r\n }\r\n\r\n load(dbFeature) {\r\n if (!dbFeature.metaData[\"Side\"] && dbFeature.sharedFeatureName.includes(\"ountertop\")) {\r\n dbFeature.metaData[\"Side\"] = [METADATA.LeftSide];\r\n }\r\n return super.load(dbFeature);\r\n }\r\n\r\n checkIfFeaturePartIsMatching() {\r\n this.activeFeatureParts = this.setActiveFeatureParts();\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Globals.Towel;\r\n }\r\n let increase = 0;\r\n if (this.hasAdditionalParts && this.activeFeatureParts && this.activeFeatureParts.length) {\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.layer.zIndex = zIndexes.Globals.Towel + increase;\r\n increase = increase + 0.000001;\r\n });\r\n // console.log(\"this.activeFeatureParts\", this.activeFeatureParts);\r\n }\r\n }\r\n\r\n setActiveFeatureParts() {\r\n const layout = this.getParent().layout;\r\n const activeFeatures = layout.getActiveFeatures(true, true);\r\n let matchingFeatures = [];\r\n const currentConditions = this.getArrayOfConditions();\r\n const selectFrom = this.features.filter(attFeature => attFeature.matchesMetaForArrayOfConditions(currentConditions));\r\n // console.log(\"selectFrom\", selectFrom);\r\n activeFeatures.forEach(cartItem => {\r\n if (!cartItem.cartFeature || cartItem.featureGroup.disabled || !cartItem.cartFeature.metaData[\"MatchingFeature\"]\r\n || (cartItem.partId === this.partId)) {\r\n return\r\n }\r\n selectFrom.forEach(attFeature => {\r\n if (isEqual(attFeature.metaData[\"MatchingFeature\"], cartItem.cartFeature.metaData[\"MatchingFeature\"])\r\n && isEqual(attFeature.metaData[\"Side\"], cartItem.cartFeature.metaData[\"Side\"])\r\n && !matchingFeatures.some(alreadyAddedFeature => {\r\n return isEqual(attFeature.metaData[\"MatchingFeature\"], alreadyAddedFeature.metaData[\"MatchingFeature\"])\r\n && isEqual(attFeature.metaData[\"Side\"], alreadyAddedFeature.metaData[\"Side\"])\r\n })) {\r\n matchingFeatures.push(attFeature)\r\n }\r\n })\r\n })\r\n return matchingFeatures;\r\n }\r\n\r\n}\r\n","import {Part} from \"../part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\n// import {BathTubType, LayoutType} from \"../constants\";\r\nimport {bathTubThumbnail} from \"../../../bvComponent/core/assets\";\r\n\r\nimport BathTubBody from \"../subparts/bathTub/bathTubBody\";\r\nimport BathTubFixture from \"../subparts/bathTub/bathTubFixture\";\r\n\r\nexport class Bathtub extends Part {\r\n static id = 'Bathtub';\r\n\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Bathtub';\r\n this.translateId = \"visualizer.bathroom.bathtub\";\r\n this.partThumbnail = bathTubThumbnail;\r\n this.bathTubBody = null;\r\n this.bathTubFixture = null;\r\n this.relatedItems = [];\r\n }\r\n\r\n load(dbFeature) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Bathtub\":\r\n relatedItemName = \"bathTubBody\";\r\n RelatedItemClass = BathTubBody;\r\n break;\r\n case \"Bathtub Fixture\":\r\n relatedItemName = \"bathTubFixture\";\r\n RelatedItemClass = BathTubFixture;\r\n break;\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n changeLayout() {\r\n // changeLayout(layoutType) {\r\n // if (layoutType === LayoutType.Layout1 && this.bathTubBody) {\r\n // // this.activeSubType_ = BathTubType.Custom60in;\r\n // // this.bathTubType_ = BathTubType.Custom60in;\r\n // if (!this.layout.parts.Shower.showerBody.disabled) { // disable bathtub if shower is active\r\n // if (this.bathTubBody) {\r\n // this.bathTubBody.disabled = true;\r\n // }\r\n // }\r\n // } else {\r\n // if (this.bathTubBody) {\r\n // this.bathTubBody.disabled = false;\r\n // }\r\n // }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class BathTubBody extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = \"bathtub_body\";\r\n this.partName = 'Bathtub';\r\n this.translateId = \"visualizer.bathroom.bathtub.bathtub\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new BathTubBody());\r\n }\r\n\r\n disabledClick() {\r\n const bathTubFixture = this.getParent().bathTubFixture;\r\n if (bathTubFixture) {\r\n bathTubFixture.disabled = this.disabled;\r\n }\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Bathtub.BathTubBody;\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class BathTubFixture extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = \"bathtub_fixture\";\r\n this.partName = \"Fixture\";\r\n this.translateId = \"visualizer.bathroom.bathtub.bathtub_fixture\";\r\n this.dbName = \"Bathtub Fixture\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new BathTubFixture());\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Bathtub.BathTubFixture;\r\n }\r\n }\r\n}\r\n","import React from 'react';\r\nimport {connect} from \"react-redux\";\r\nimport classNames from 'classnames';\r\nimport $ from 'jquery';\r\n\r\nimport {\r\n toggleDesktopNavigation,\r\n setActiveNavigationNames,\r\n setModuleContextMenuType,\r\n setActiveNavigationFilter,\r\n setActiveNavigationFilterStepIndex,\r\n setNavigationViewType,\r\n setNavigationLoading,\r\n toggleNavItemPositionModal\r\n} from \"../../../actions/navigationFunctions\";\r\nimport {setDefaultSelectionGroup, changeActivePartRelatedItemIndex} from \"../../../actions/actionFunctions\";\r\nimport DesktopNavigationCommon from \"../../visComponents/navigation/desktopNavigationCommon\";\r\nimport Z from \"../core/zIndex\";\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\n\r\nimport LockedView from \"../../common/lockedView\";\r\nimport {ContentType} from \"../../visComponents/constants\";\r\nimport ContextMenu from \"./contextMenu\";\r\n// import CabinetContextMenu from \"./cabinetContextMenu\";\r\nimport MobileMenuSelect from \"../../visComponents/navigation/mobile/mobileMenuSelect\";\r\nimport {setVisualizerTutorialStep, showVisualizerTutorial} from \"../../../actions/tutorialFunctions\";\r\nimport {Vanity} from \"../core/parts/vanity\";\r\nimport NavItemPositionModal from \"../../visComponents/navigation/navItemPositionModal\";\r\n\r\nclass DesktopNavigation extends DesktopNavigationCommon {\r\n\r\n bindCanvasClick = (event) => {\r\n const layout = getCurrentLayout();\r\n // const canvas = document.getElementById(this.props.canvasId);\r\n this.props.setHoveredLayer(event);\r\n\r\n if (document.hoveredLayer) {\r\n\r\n const layoutType = layout.getCurrentLayoutName();\r\n\r\n const hoveredZone = Z.getMenuByHoveredLayer(layoutType, document.hoveredLayer);\r\n\r\n // console.log('hoveredZone', hoveredZone);\r\n\r\n if (hoveredZone) {\r\n if ((hoveredZone === \"shower_custom\"\r\n || hoveredZone === \"vanity_custom\"\r\n || hoveredZone === \"bathtub_custom\"\r\n || hoveredZone === \"shower_combo\"\r\n || hoveredZone === \"shower_pony_wall\"\r\n || hoveredZone === \"wall_b_custom\"\r\n || hoveredZone === \"left_wall_custom\")\r\n && !this.state.showNavigation\r\n ) {\r\n if (this.state.contextMenuOpen) {\r\n this.setState({\r\n contextMenuOpen: false,\r\n hoveredLayer: {}\r\n });\r\n } else {\r\n let contextMenuOpen = '';\r\n let ponyWallGroup = false;\r\n switch (hoveredZone) {\r\n case \"shower_custom\":\r\n case \"shower_combo\":\r\n case \"shower_pony_wall\": {\r\n const showerGroup = this.state.designNavigationItems.find(navItem => {\r\n return navItem.text === \"Shower\"\r\n });\r\n contextMenuOpen = showerGroup.part.showerTubComboIsActive() ? \"Shower Tub Combo\" : \"Shower\";\r\n if (hoveredZone === \"shower_pony_wall\") {\r\n ponyWallGroup = true;\r\n }\r\n break;\r\n }\r\n case \"vanity_custom\":\r\n contextMenuOpen = \"Vanity\";\r\n break;\r\n case \"bathtub_custom\":\r\n contextMenuOpen = \"Bathtub\";\r\n break;\r\n case \"left_wall_custom\":\r\n contextMenuOpen = \"Shower Body Selection\";\r\n break;\r\n case \"wall_b_custom\":\r\n contextMenuOpen = \"wall_b_custom\";\r\n break;\r\n }\r\n this.openContextMenu(contextMenuOpen, ponyWallGroup, event);\r\n }\r\n return false;\r\n } else if (this.state.contentType === 0) {\r\n this.setState({\r\n showNavigation: true,\r\n contentType: ContentType.Design,\r\n contextMenuOpen: false,\r\n hoveredLayer: {}\r\n }, () => {\r\n this.setNewActiveFeature();\r\n this.menuOpened();\r\n setTimeout(() => {\r\n $(document).on('click', this.handleWrapperBlur);\r\n }, 0)\r\n });\r\n }\r\n\r\n hoveredZone.child\r\n ? this.triggerOpenNavigationMenu(hoveredZone.child, hoveredZone.parent)\r\n : this.triggerOpenNavigationMenu(hoveredZone)\r\n\r\n }\r\n\r\n }\r\n\r\n };\r\n\r\n openContextMenu = (contextMenuOpen, ponyWallGroup, event) => {\r\n const hoveredParent = this.state.designNavigationItems.find(navItem => {\r\n return navItem.text === contextMenuOpen\r\n });\r\n let contextMenuButtons = [];\r\n if (contextMenuOpen === \"Shower Body Selection\") {\r\n contextMenuButtons = this.getShowerBodySelectionButtons()\r\n } else if (contextMenuOpen === \"wall_b_custom\") {\r\n contextMenuButtons = [1, 2, 3]\r\n } else {\r\n contextMenuButtons = hoveredParent.part.subParts();\r\n }\r\n if (contextMenuOpen === \"Shower\" || contextMenuOpen === \"Shower Tub Combo\") {\r\n contextMenuButtons = contextMenuButtons.filter(menuButton => {\r\n return ponyWallGroup ? menuButton.part.isPonyWallPart && menuButton.part.partId !== \"pony_wall\" : !menuButton.part.isPonyWallPart\r\n });\r\n }\r\n if (contextMenuOpen === \"Vanity\") {\r\n contextMenuButtons = contextMenuButtons.filter(menuButton => {\r\n return menuButton.part.partId !== \"vanity_mirror\" && menuButton.part.partId !== \"vanity_backsplash\";\r\n });\r\n }\r\n\r\n const isMobile = $(window).width() < 991;\r\n\r\n let left = isMobile ? '50%' : event.clientX - 50;\r\n let top = isMobile ? '50%' : event.clientY - 50;\r\n let right = 'auto';\r\n\r\n const maxAllowedWidth = contextMenuButtons.length > 2 ? 300 : 210;\r\n\r\n let maxAllowedHeight = 110;\r\n if (contextMenuButtons.length > 6) {\r\n maxAllowedHeight = 330;\r\n } else if (contextMenuButtons.length > 3) {\r\n maxAllowedHeight = 220;\r\n }\r\n if (!isMobile && (left > window.innerWidth - maxAllowedWidth)) {\r\n left = 'auto';\r\n right = 0\r\n }\r\n if (!isMobile && (top > window.innerHeight - maxAllowedHeight)) {\r\n let negativeMargin = 50;\r\n if (contextMenuButtons.length > 6) {\r\n negativeMargin = 250;\r\n } else if (contextMenuButtons.length > 3) {\r\n negativeMargin = 150;\r\n }\r\n top = top - negativeMargin;\r\n }\r\n this.setState({\r\n contextMenuPonyWall: ponyWallGroup,\r\n contextMenuOpen,\r\n hoveredLayer: document.hoveredLayer,\r\n contextMenuPosition: {\r\n left,\r\n right,\r\n top,\r\n }\r\n });\r\n };\r\n\r\n handleNavigationItemClick = (item, ignoreLocked = false, featureIsLocked, event) => {\r\n\r\n if (this.state.childNavigationItem\r\n && this.state.childNavigationItem.part.activeFeature\r\n && Array.isArray(this.state.childNavigationItem.part.activeFeature.metaData[\"SkuName\"])\r\n && this.state.childNavigationItem.part.activeFeature.metaData[\"SkuName\"][0]\r\n && Array.isArray(item.part.metaData[\"SkuName\"])\r\n && (this.state.childNavigationItem.part.activeFeature.metaData[\"SkuName\"][0] === item.part.metaData[\"SkuName\"][0])) {\r\n this.showPositionsPopup(item, event); // move modal to new position\r\n return false // don't change L to R // redundant click\r\n }\r\n\r\n const layout = getCurrentLayout();\r\n this.navigationItemClickCommon(item); // set active feature\r\n\r\n const showPositionPopup = this.showPositionsPopup(item, event);\r\n if (showPositionPopup) {\r\n return // don't click on feature!! we are clicking inside the modal window\r\n }\r\n\r\n const updateSideBarIds = [\"shower_body\", \"wall_configuration\", \"vanity_cabinet\"];\r\n if (updateSideBarIds.includes(item.part.partId)) {\r\n this.updateSideBar();\r\n }\r\n if (this.state.parentNavigationItem && this.state.parentNavigationItem.text === \"Shower Tub Combo\"\r\n && item.part.bottomTubId && (this.state.parentNavigationItem.part.bottomTub !== item.part.bottomTubId)) {\r\n this.updateSideBar();\r\n }\r\n\r\n // console.log('this.state.parentNavigationItem', this.state.parentNavigationItem);\r\n // console.log('this.state.parentNavigationItem.part.subParts()', this.state.parentNavigationItem && this.state.parentNavigationItem.part && this.state.parentNavigationItem.part.subParts());\r\n\r\n if (item.matchesMetaFailed) {\r\n let nonCompatibleWith = \"\";\r\n switch (item.part.partId) {\r\n case \"vanity_faucet\":\r\n nonCompatibleWith = \"sink\";\r\n break;\r\n case \"sink\":\r\n nonCompatibleWith = \"vanity\";\r\n break;\r\n case \"shower_pod\":\r\n nonCompatibleWith = \"Window Kit\";\r\n break;\r\n case \"window_kits\":\r\n nonCompatibleWith = item.matchesMetaFailed === \"shower_pod\" ? \"Shower Pod\" : \"Corner Shelf\";\r\n break;\r\n default:\r\n break;\r\n }\r\n this.callMetaMathesFailedPopup(item, nonCompatibleWith);\r\n } else if (item.part.partId === \"vanity_sink\" && this.state.parentNavigationItem.part.faucet\r\n && this.state.parentNavigationItem.part.faucet.placeholderChanged\r\n && this.state.parentNavigationItem.part.faucet.activeFeature) {\r\n\r\n const sinkSizeConditionValue = item.part.metaData[\"SinkSize\"][0];\r\n\r\n if (this.state.parentNavigationItem.part.faucet.activeFeature.matchesMetaForCondition('SinkSize', sinkSizeConditionValue)) {\r\n this.itemClick(item, ignoreLocked)\r\n } else {\r\n this.callMetaMathesFailedPopup(item, 'faucet');\r\n }\r\n } else if (item.part.partId === \"toilet\") {\r\n const vanity = layout.parts[Vanity.id];\r\n const counterTopSize = vanity.counterTopSize();\r\n if (counterTopSize === \"60in\" || counterTopSize === \"72in\") {\r\n this.callToiletFailPopup('toilet', item, ignoreLocked)\r\n } else {\r\n this.itemClick(item, ignoreLocked)\r\n }\r\n } else if (item.part.partId === \"vanity_cabinet\") {\r\n // let toilet = layout.parts[Toilet.id];\r\n // if (toilet) {\r\n // toilet = toilet.toilet; // toiletBody\r\n // }\r\n // const counterTopSize = item.part.vanitySize + 'in';\r\n // const vanity = layout.parts[Vanity.id];\r\n // const currentCounterTopSize = vanity.counterTopSize();\r\n // if (toilet && toilet.placeholderChanged && (counterTopSize === \"60in\" || counterTopSize === \"72in\")\r\n // && (currentCounterTopSize !== \"60in\" && currentCounterTopSize !== \"72in\")) {\r\n // this.callToiletFailPopup('vanity', item, ignoreLocked)\r\n // } else {\r\n // this.itemClick(item, ignoreLocked);\r\n // }\r\n this.itemClick(item, ignoreLocked);\r\n if (this.props.fabricatorSettings\r\n && (this.props.fabricatorSettings.wizardConsumers || (this.props.fabricatorSettings.wizardClients && document.kvConfig.isBackend))\r\n ) {\r\n if (!featureIsLocked && !item.part.partName.includes(\"laceholder\")) {\r\n this.setWizardFiltersFromActiveItem(item.part)\r\n }\r\n }\r\n } else if (item.part.partId === \"shower_interior_wall\") {\r\n if (!featureIsLocked && !item.part.partName.includes(\"laceholder\")) {\r\n this.setWizardFiltersFromActiveItem(item.part)\r\n }\r\n this.itemClick(item, ignoreLocked)\r\n } else {\r\n this.itemClick(item, ignoreLocked)\r\n }\r\n\r\n if (this.state.parentNavigationItem) { // update canvas only if it is child\r\n this.props.refreshCB();\r\n }\r\n };\r\n\r\n render() {\r\n const layout = getCurrentLayout();\r\n // const fabricatorSettings = this.props.fabricatorSettings;\r\n const activePart = this.state.parentNavigationItem ? this.state.parentNavigationItem.part : null;\r\n const activeSubPart = this.state.childNavigationItem ? this.state.childNavigationItem.part : null;\r\n // const activeNavPart = activeSubPart || activePart;\r\n const parentItems = layout.designNavigationItems(); // parent list without filters\r\n\r\n const useWizard = false, wizardGroups = [];\r\n\r\n let showNavigationFiltersSteps = false;\r\n\r\n if (activeSubPart && activeSubPart.canUseNavigationFilterSteps\r\n && activeSubPart.canUseNavigationFilterSteps()) {\r\n showNavigationFiltersSteps = !this.props.countertopNavigationFilterCompleted;\r\n }\r\n\r\n const showLockedView = this.currentActiveItemIsLocked(useWizard);\r\n\r\n const useFilters = false;\r\n const availableNavButtons = [ContentType.Design, ContentType.Layout, ContentType.DisplayRoom];\r\n if (window.location.href.includes(\"new_bathroom_2021.quotesflooring\") || document.kvConfig.userId === 140045) {\r\n availableNavButtons.push(ContentType.RoomScene)\r\n }\r\n\r\n return (\r\n
    \r\n \r\n
    this.navWrapper = node}>\r\n
    \r\n
    \r\n {this.content(useWizard, wizardGroups, useFilters, activePart, activeSubPart)}\r\n
    \r\n
    \r\n {this.navigationMenuButtons(availableNavButtons)}\r\n {showNavigationFiltersSteps ? null : (\r\n
    \r\n \r\n
    \r\n )}\r\n {/*
    */}\r\n {/*
    */}\r\n {/**/}\r\n {/*
    */}\r\n {/*
    */}\r\n
    \r\n {this.state.contextMenuOpen && !this.state.contextMenuOpen.module\r\n ? \r\n : null}\r\n
    \r\n {this.props.bvOpened ? : null}\r\n {showLockedView\r\n ? \r\n : null}\r\n
    \r\n )\r\n }\r\n\r\n}\r\n\r\nconst mapStateToProps = (store) => ({\r\n filtersVisible: store.filterState.showFilters,\r\n filterGroups: store.filterState.filterGroups,\r\n bvPresets: store.bathroomVisualizerState.bvPresets,\r\n bvOpened: store.bathroomVisualizerState.bvOpened,\r\n userIsLoggedIn: store.userState.userIsLoggedIn,\r\n isPhoneNumberValidated: store.userState.isPhoneNumberValidated,\r\n activeNavigationFilter: store.navigationState.activeNavigationFilter,\r\n countertopNavigationFilterCompleted: store.navigationState.countertopNavigationFilterCompleted,\r\n visualizerTutorialStep: store.tutorialState.visualizerTutorialStep,\r\n visualizerTutorialIsOpened: store.tutorialState.visualizerTutorialIsOpened,\r\n activeQuoteIndex: store.quotesState.activeQuoteIndex,\r\n navItemPositionModal: store.navigationState.navItemPositionModal,\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n setNavigationViewType,\r\n toggleDesktopNavigation,\r\n setActiveNavigationNames,\r\n setModuleContextMenuType,\r\n setActiveNavigationFilter,\r\n setActiveNavigationFilterStepIndex,\r\n setDefaultSelectionGroup,\r\n changeActivePartRelatedItemIndex,\r\n setVisualizerTutorialStep,\r\n showVisualizerTutorial,\r\n setNavigationLoading,\r\n toggleNavItemPositionModal\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(DesktopNavigation);\r\n","import React, {useEffect, useState} from \"react\";\r\nimport $ from \"jquery\";\r\nimport {connect} from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\n\r\nimport {CORNER_SHELVES_POSITIONS, PAN_POSITIONS, SIDE_POSITIONS} from \"../../bvSceneComponent/core/constants\";\r\nimport ActionTypes from \"../../../misc/actionTypes\";\r\nimport {getFeatureIsLocked} from \"../../../misc/helpers\";\r\nimport {changeMessageBoxState, updateCanvasCount} from \"../../../actions/actionFunctions\";\r\nimport {featureInterface} from \"../../../interfaces/featureInterface\";\r\n\r\nconst getPositionName = (position) => {\r\n switch (position) {\r\n case CORNER_SHELVES_POSITIONS[0]:\r\n case CORNER_SHELVES_POSITIONS[3]:\r\n return \"modalCheckboxPosition.top\"\r\n case CORNER_SHELVES_POSITIONS[1]:\r\n case CORNER_SHELVES_POSITIONS[4]:\r\n return \"modalCheckboxPosition.center\"\r\n case CORNER_SHELVES_POSITIONS[2]:\r\n case CORNER_SHELVES_POSITIONS[5]:\r\n return \"modalCheckboxPosition.bottom\"\r\n case SIDE_POSITIONS[0]:\r\n case PAN_POSITIONS[0]:\r\n return \"modalCheckboxPosition.left\"\r\n case SIDE_POSITIONS[1]:\r\n case PAN_POSITIONS[2]:\r\n return \"modalCheckboxPosition.right\"\r\n case PAN_POSITIONS[1]:\r\n return \"modalCheckboxPosition.center\"\r\n }\r\n return \"\"\r\n};\r\n\r\nconst NavItemPositionModalButton = (props) => {\r\n\r\n const {position, parent, checkboxesUpdated, updateCheckboxes, changeMessageBoxState, intl, updateCanvasCount,\r\n activeFeature} = props;\r\n const [checked, setChecked] = useState(false);\r\n const positionName = getPositionName(position);\r\n\r\n const updateChecked = () => {\r\n const matchingPositionFeature = parent.getMatchingPositionFeature(position, activeFeature);\r\n const isChecked = parent.oneLayerPosition\r\n ? !parent.disabled && (parent.activeFeature && (parent.activeFeature.dbFeature.metaData[\"layerPosition\"] === position))\r\n && matchingPositionFeature && (matchingPositionFeature.getSplittedFeatureName() === parent.activeFeature.getSplittedFeatureName())\r\n : !parent.disabled && parent.layerPositions && !!parent.layerPositions[position] && matchingPositionFeature\r\n && (matchingPositionFeature.getSplittedFeatureName() === parent.layerPositions[position].getSplittedFeatureName())\r\n\r\n setChecked(isChecked)\r\n };\r\n\r\n useEffect(() => {\r\n updateChecked();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [checkboxesUpdated, position, activeFeature]);\r\n\r\n const buttonClick = (event, fromConflictingPopup = false) => {\r\n if (parent.conflictingPositions && !fromConflictingPopup) { // shower_seats & valve_trim\r\n const conflictingPositions = parent.checkConflictingPosition(position, activeFeature);\r\n if (conflictingPositions.length) {\r\n callConflictingPopup(conflictingPositions);\r\n return\r\n }\r\n }\r\n if (parent.disabled) {\r\n parent.disabled = false;\r\n parent.disabledClick(); // disable also related parts\r\n if (!parent.oneLayerPosition) {\r\n Object.keys(parent.layerPositions).forEach(key => {\r\n if (key !== position) {\r\n parent.layerPositions[key] = null; // it can be only on one side on enable (if old feature exist and we clicked on another one)\r\n }\r\n })\r\n }\r\n }\r\n const matchingPositionFeature = parent.getMatchingPositionFeature(position, activeFeature);\r\n if (parent.oneLayerPosition) {\r\n matchingPositionFeature.handleClick(true); // to apply not compatible and so on // ignore locked as we it should be visible if clicked feature is unlocked\r\n } else {\r\n if (parent.isShowerCommonGroup && matchingPositionFeature && !checked) {\r\n if (parent.partId === \"shower_arm\") {\r\n parent.checkForSameMountPosition(matchingPositionFeature); // this removes different mount position features\r\n }\r\n matchingPositionFeature.handleClick(true); // set active feature and shower head type\r\n } else if (parent.partId === \"shower_fixture\" && matchingPositionFeature && !checked && parent.getParent().setShowerHeadType) {\r\n // parent.getParent().setShowerHeadType(ShowerHeadTypes.shower_fixture);\r\n matchingPositionFeature.handleClick(true); // set active feature and shower head type\r\n } else if (parent.partId === \"replacement_tub_fixture\") {\r\n matchingPositionFeature.handleClick(true); // set tub combo // ignore locked as we it should be visible if clicked feature is unlocked\r\n }\r\n parent.layerPositions[position] = checked ? null : matchingPositionFeature;\r\n if (parent.isShowerCommonGroup) { // tool version 6 for now only\r\n if (parent.partId === \"shower_head\") {\r\n parent.togglePosition(position, \"shower_arm\");\r\n } else if (parent.partId === \"shower_arm\") {\r\n parent.togglePosition(position, \"shower_head\");\r\n } else if (parent.partId === \"hand_shower_only\") {\r\n parent.togglePosition(position, \"hand_shower_holder\");\r\n parent.togglePosition(position, \"shower_hose\");\r\n parent.togglePosition(position, \"wall_union\");\r\n } else if (parent.partId === \"shower_hose\") {\r\n parent.togglePosition(position, \"hand_shower_holder\");\r\n parent.togglePosition(position, \"hand_shower_only\");\r\n parent.togglePosition(position, \"wall_union\");\r\n } else if (parent.partId === \"hand_shower_holder\") {\r\n parent.togglePosition(position, \"hand_shower_only\");\r\n parent.togglePosition(position, \"shower_hose\");\r\n parent.togglePosition(position, \"wall_union\");\r\n } else if (parent.partId === \"wall_union\") {\r\n parent.togglePosition(position, \"hand_shower_only\");\r\n parent.togglePosition(position, \"shower_hose\");\r\n parent.togglePosition(position, \"hand_shower_holder\");\r\n }\r\n }\r\n // && (!matchingPositionFeature || (parent.layerPositions[position].dbFeature.id === matchingPositionFeature.dbFeature.id))) { //already selected\r\n }\r\n // const checkRelatedFeatureGroups = [\"grab_bar\", \"soap_dish\", \"shower_seats\", \"large_corner_seat\"];\r\n const checkRelatedFeatureGroups = [\"shower_seats\", \"large_corner_seat\"];\r\n if (checkRelatedFeatureGroups.includes(parent.partId)) {\r\n parent.checkRelatedFeatureGroupPositions(position);\r\n // if (parent.partId === \"grab_bar\") {\r\n // parent.checkCurrentPositions(position);\r\n // }\r\n }\r\n if (parent.partId === \"grab_bar\" && parent.checkCenterGrabWall) {\r\n parent.checkCenterGrabWall(position);\r\n }\r\n updateCheckboxes();\r\n $(window).trigger(ActionTypes.UPDATE_ALL_ITEMS); // update footer items\r\n updateCanvasCount();\r\n };\r\n\r\n let checkboxDisabled = false;\r\n // if (parent.partId === \"corner_shelf\") { // disable top & center\r\n // const windowParent = parent.getParent().layout.parts.Window;\r\n // if (windowParent && windowParent.windowKits && !windowParent.windowKits.disabled && !position.includes(\"3\")) {\r\n // checkboxDisabled = true;\r\n // }\r\n // }\r\n if (parent.partId === \"shower_head\") { // disable top & center\r\n const showerArm = parent.getParent().showerArm;\r\n if (showerArm && !showerArm.disabled && showerArm.layerPositions && !showerArm.getMatchingPositionFeature(position)) {\r\n // we can't use !showerArm.layerPositions[position] because if we disable in modal ope position - it becomes disabled\r\n checkboxDisabled = true;\r\n }\r\n }\r\n\r\n const callConflictingPopup = (conflictingPositions) => {\r\n const message = {\r\n id: \"messageBox.metaDataMatchesFailed\",\r\n featureGroup: activeFeature.partId === \"shower_seats\" ? \"Seat\" : activeFeature.getParent().partName,\r\n featureName: activeFeature.getFeatureName(),\r\n nonCompatibleWith: conflictingPositions[0].getParent().partName,\r\n };\r\n changeMessageBoxState({\r\n visible: true,\r\n message,\r\n buttons: [{\r\n text: \"messageBox.buttonNo\",\r\n color: \"blue\",\r\n click: () => {\r\n changeMessageBoxState({visible:false});\r\n }\r\n }, {\r\n text: \"messageBox.buttonYes\",\r\n color: 'green',\r\n click: () => {\r\n parent.applyConflictingPosition(position, activeFeature);\r\n buttonClick({}, true);\r\n changeMessageBoxState({visible:false});\r\n }\r\n }]\r\n })\r\n }\r\n\r\n const disabledCheckboxClick = () => {\r\n if (parent.partId === \"corner_shelf\") { // disable top & center\r\n const matchingPositionFeature = parent.getMatchingPositionFeature(position, activeFeature);\r\n\r\n const featureIsLocked = getFeatureIsLocked(matchingPositionFeature);\r\n if (!featureIsLocked) {\r\n const message = {\r\n id: \"messageBox.metaDataMatchesFailed\",\r\n featureGroup: matchingPositionFeature.getParent().partName,\r\n featureName: intl.formatMessage({id: positionName}) + \" \" + matchingPositionFeature.getFeatureName(),\r\n nonCompatibleWith: \"Window Kit\"\r\n };\r\n changeMessageBoxState({\r\n visible: true,\r\n message,\r\n buttons: [{\r\n text: \"messageBox.buttonYes\",\r\n color: 'green',\r\n click: () => {\r\n const windowParent = parent.getParent().layout.parts.Window;\r\n windowParent.windowKits.disabled = true;\r\n buttonClick();\r\n changeMessageBoxState({visible:false});\r\n }\r\n },{\r\n text: \"messageBox.buttonNo\",\r\n color: \"blue\",\r\n click: () => {\r\n changeMessageBoxState({visible:false});\r\n }\r\n }]\r\n });\r\n }\r\n }\r\n }\r\n\r\n return (\r\n \r\n )\r\n};\r\n\r\nNavItemPositionModalButton.propTypes = {\r\n position: PropTypes.string.isRequired,\r\n parent: PropTypes.object.isRequired,\r\n checkboxesUpdated: PropTypes.bool.isRequired,\r\n updateCheckboxes: PropTypes.func.isRequired,\r\n activeFeature: PropTypes.shape(featureInterface),\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n navItemPositionModal: store.navigationState.navItemPositionModal\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n changeMessageBoxState,\r\n updateCanvasCount,\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(NavItemPositionModalButton)\r\n)\r\n","import React from \"react\";\r\nimport $ from \"jquery\";\r\nimport {connect} from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\n\r\nimport ActionTypes from \"../../../misc/actionTypes\";\r\nimport {updateCanvasCount} from \"../../../actions/actionFunctions\";\r\nimport {featureInterface} from \"../../../interfaces/featureInterface\";\r\nimport {SLAT_WALL_POSITIONS} from \"../../commonVisualizer/core/constants\";\r\n\r\nconst NavItemPositionModalSlatWall = (props) => {\r\n\r\n const {parent, updateCheckboxes, updateCanvasCount, styles, triangleStyles, isWizard, activeFeature} = props;\r\n\r\n let checkboxDisabled = false;\r\n\r\n const isCurrentFeatureActive = parent.activeFeature && activeFeature\r\n && (activeFeature.getSplittedFeatureName() === parent.activeFeature.getSplittedFeatureName());\r\n\r\n const buttonClick = (position) => {\r\n if (checkboxDisabled) {\r\n return\r\n }\r\n if (parent.disabled) {\r\n parent.disabled = false;\r\n parent.disabledClick(); // disable also related parts\r\n }\r\n if (!isCurrentFeatureActive && activeFeature) {\r\n activeFeature.handleClick(); // to apply not compatible and so on\r\n }\r\n parent.slatWallType = position;\r\n parent.activeFeatureParts = parent.setActiveFeatureParts();\r\n updateCheckboxes();\r\n $(window).trigger(ActionTypes.UPDATE_ALL_ITEMS); // update footer items\r\n updateCanvasCount();\r\n };\r\n\r\n const getSlatWallButton = (position) => {\r\n const checkboxDisabled = false;\r\n const checked = isCurrentFeatureActive && (parent.slatWallType === position);\r\n return (\r\n \r\n )\r\n }\r\n\r\n return (\r\n
    \r\n \r\n
    \r\n
    \r\n

    Side

    \r\n
    \r\n {SLAT_WALL_POSITIONS.slice(0, 2).map((position) => getSlatWallButton(position))}\r\n
    \r\n
    \r\n
    \r\n
    \r\n {SLAT_WALL_POSITIONS.slice(2, 4).map((position) => getSlatWallButton(position))}\r\n
    \r\n
    \r\n
    \r\n
    \r\n )\r\n};\r\n\r\nNavItemPositionModalSlatWall.propTypes = {\r\n styles: PropTypes.object,\r\n triangleStyles: PropTypes.object,\r\n parent: PropTypes.object.isRequired,\r\n isWizard: PropTypes.bool,\r\n checkboxesUpdated: PropTypes.bool.isRequired,\r\n updateCheckboxes: PropTypes.func.isRequired,\r\n activeFeature: PropTypes.shape(featureInterface),\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n navItemPositionModal: store.navigationState.navItemPositionModal\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n updateCanvasCount,\r\n};\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(NavItemPositionModalSlatWall)\r\n)\r\n","import React from 'react';\r\nimport {connect} from 'react-redux';\r\nimport {injectIntl} from \"react-intl\";\r\n\r\nimport MobileNavigationCommon from \"../../visComponents/navigation/mobileNavigationCommon\";\r\n\r\nimport {ContentType} from \"../../visComponents/constants\";\r\nimport Z from \"../core/zIndex\";\r\n\r\nimport MobileNavigationButtons from '../../visComponents/navigation/mobile/mobileNavigationButtons';\r\nimport MobileNavigationAllWallsCheckbox from '../../visComponents/navigation/mobile/mobileNavigationAllWallsCheckbox';\r\nimport FeatureWizardSteps from \"../../visComponents/navigation/featureWizard/featureWizardSteps\";\r\n\r\nimport {changeActivePartRelatedItemIndex, setDefaultSelectionGroup} from \"../../../actions/actionFunctions\";\r\nimport {\r\n setActiveNavigationFilter,\r\n setModuleContextMenuType,\r\n setModuleContextMenuModule,\r\n setActiveNavigationFilterStepIndex, setNavigationViewType, setNavigationLoading, toggleNavItemPositionModal\r\n} from \"../../../actions/navigationFunctions\";\r\n\r\nimport MobileMenuSelect from '../../visComponents/navigation/mobile/mobileMenuSelect';\r\nimport LockedView from \"../../common/lockedView\";\r\n\r\nimport Filters from \"../../visComponents/navigation/newFilters/filters\";\r\nimport BodyPanelRadio from \"../../visComponents/navigation/desktop/bodyPanelRadio\";\r\nimport FilterSwitchers from \"../../visComponents/navigation/newFilters/filterSwitchers\";\r\nimport FilterSelection from \"../../visComponents/navigation/newFilters/filterSelection\";\r\n// import {CABINET_WIZARD_BUTTONS} from \"../core/constants\";\r\nimport NavigationFiltersSteps from \"../../visComponents/navigation/newFilters/navigationFiltersSteps\";\r\nimport ContextMenu from \"./contextMenu\";\r\n\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\nimport {COUNTERTOP_GROUP_BATHROOM} from \"../core/constants\";\r\nimport CountertopSwitchers from \"../../kvComponent/navigation/countertopSwitchers\";\r\nimport {Vanity} from \"../core/parts/vanity\";\r\nimport NavItemPositionModal from \"../../visComponents/navigation/navItemPositionModal\";\r\nimport LookAllWallsRadioButton from \"../../look/lookNavigation/lookMain/lookAllWallsRadioButton\";\r\n\r\nclass MobileNavigation extends MobileNavigationCommon {\r\n\r\n componentWillReceiveProps(nextProps) {\r\n this._componentWillReceiveProps(nextProps)\r\n }\r\n\r\n bindCanvasClick = (event) => {\r\n const layout = getCurrentLayout();\r\n // const canvas = document.getElementById(this.props.canvasId);\r\n\r\n if (!window.touchMove && !this.state.showNavigation && !this.state.contextMenuOpen) {\r\n this.props.setHoveredLayer(event);\r\n }\r\n\r\n if (document.hoveredLayer && !window.touchMove) {\r\n // $('.canvas-text').html(`CLICK3`);\r\n const layoutType = layout.getCurrentLayoutName();\r\n\r\n const hoveredZone = Z.getMenuByHoveredLayer(layoutType, document.hoveredLayer);\r\n let ponyWallGroup = false;\r\n\r\n if (hoveredZone) {\r\n if ((hoveredZone === \"shower_custom\" || hoveredZone === \"vanity_custom\" || hoveredZone === \"bathtub_custom\"\r\n || hoveredZone === \"shower_combo\" || hoveredZone === \"shower_pony_wall\" || hoveredZone === \"left_wall_custom\"\r\n || hoveredZone === \"wall_b_custom\") && !this.state.showNavigation) {\r\n if (this.state.contextMenuOpen) {\r\n this.setState({\r\n contextMenuOpen: false,\r\n hoveredLayer: {}\r\n });\r\n document.removeEventListener('click', this.handleContextMenuBlur);\r\n } else {\r\n let contextMenuOpen = '';\r\n switch (hoveredZone) {\r\n case \"shower_custom\":\r\n case \"shower_combo\":\r\n case \"shower_pony_wall\": {\r\n const showerGroup = this.state.designNavigationItems.find(navItem => {\r\n return navItem.text === \"Shower\"\r\n });\r\n contextMenuOpen = showerGroup.part.showerTubComboIsActive() ? \"Shower Tub Combo\" : \"Shower\";\r\n if (hoveredZone === \"shower_pony_wall\") {\r\n ponyWallGroup = true;\r\n }\r\n break;\r\n }\r\n case \"vanity_custom\":\r\n contextMenuOpen = \"Vanity\";\r\n break;\r\n case \"bathtub_custom\":\r\n contextMenuOpen = \"Bathtub\";\r\n break;\r\n case \"left_wall_custom\":\r\n contextMenuOpen = \"Shower Body Selection\";\r\n break;\r\n case \"wall_b_custom\":\r\n contextMenuOpen = \"wall_b_custom\";\r\n break;\r\n }\r\n this.setState({\r\n contextMenuOpen,\r\n contextMenuPonyWall: ponyWallGroup,\r\n hoveredLayer: document.hoveredLayer\r\n }, () => {\r\n if (contextMenuOpen) {\r\n setTimeout(() => {\r\n document.addEventListener('click', this.handleContextMenuBlur);\r\n }, 0)\r\n }\r\n });\r\n }\r\n return false;\r\n } else if (this.state.contentType === 0) {\r\n if (!window.canvasIsDragging) {\r\n this.props.setCanvasClass((hoveredZone.child || hoveredZone.parent || hoveredZone).toLowerCase().replace(/ /g, \"-\"));\r\n }\r\n this.openMobileMenu();\r\n }\r\n\r\n hoveredZone.child\r\n ? this.triggerOpenNavigationMenu(hoveredZone.child, hoveredZone.parent, ponyWallGroup)\r\n : this.triggerOpenNavigationMenu(hoveredZone)\r\n\r\n }\r\n\r\n }\r\n\r\n };\r\n\r\n handleNavigationItemClick = (item, ignoreLocked = false, featureIsLocked, event) => {\r\n const layout = getCurrentLayout();\r\n //console.log('item', item);\r\n\r\n if (this.state.childNavigationItem\r\n && this.state.childNavigationItem.part.activeFeature\r\n && Array.isArray(this.state.childNavigationItem.part.activeFeature.metaData[\"SkuName\"])\r\n && this.state.childNavigationItem.part.activeFeature.metaData[\"SkuName\"][0]\r\n && Array.isArray(item.part.metaData[\"SkuName\"])\r\n && (this.state.childNavigationItem.part.activeFeature.metaData[\"SkuName\"][0] === item.part.metaData[\"SkuName\"][0])) {\r\n this.showPositionsPopup(item, event); // move modal to new position\r\n return false // don't change L to R // redundant click\r\n }\r\n\r\n const showPositionPopup = this.showPositionsPopup(item, event);\r\n if (showPositionPopup) {\r\n this.props.setActiveFeature(item.part); // set feature for modal\r\n return // don't click on feature!! we are clicking inside the modal window\r\n }\r\n\r\n if (item.matchesMetaFailed) {\r\n let nonCompatibleWith = \"\";\r\n switch (item.part.partId) {\r\n case \"vanity_faucet\":\r\n nonCompatibleWith = \"sink\";\r\n break;\r\n case \"sink\":\r\n nonCompatibleWith = \"vanity\";\r\n break;\r\n case \"shower_pod\":\r\n nonCompatibleWith = \"Window Kit\";\r\n break;\r\n case \"window_kits\":\r\n nonCompatibleWith = item.matchesMetaFailed === \"shower_pod\" ? \"Shower Pod\" : \"Corner Shelf\";\r\n break;\r\n default:\r\n break;\r\n }\r\n this.callMetaMathesFailedPopup(item, nonCompatibleWith);\r\n } else if (item.part.partId === \"vanity_sink\" && this.state.parentNavigationItem.part.faucet.placeholderChanged\r\n && this.state.parentNavigationItem.part.faucet.activeFeature) {\r\n const sinkSizeConditionValue = item.part.metaData[\"SinkSize\"][0];\r\n if (this.state.parentNavigationItem.part.faucet.activeFeature.matchesMetaForCondition('SinkSize', sinkSizeConditionValue)) {\r\n this.itemClick(item, ignoreLocked)\r\n } else {\r\n this.callMetaMathesFailedPopup(item, 'faucet');\r\n }\r\n } else if (item.part.partId === \"toilet\") {\r\n const vanity = layout.parts[Vanity.id];\r\n const counterTopSize = vanity.counterTopSize();\r\n if (counterTopSize === \"60in\" || counterTopSize === \"72in\") {\r\n this.callToiletFailPopup('toilet', item, ignoreLocked)\r\n } else {\r\n this.itemClick(item, ignoreLocked)\r\n }\r\n } else if (item.part.partId === \"vanity_cabinet\") {\r\n // let toilet = layout.parts[Toilet.id];\r\n // if (toilet) {\r\n // toilet = toilet.toilet; // toiletBody\r\n // }\r\n // const counterTopSize = item.part.vanitySize + 'in';\r\n // const vanity = layout.parts[Vanity.id];\r\n // const currentCounterTopSize = vanity.counterTopSize();\r\n // if (toilet && toilet.placeholderChanged && (counterTopSize === \"60in\" || counterTopSize === \"72in\")\r\n // && (currentCounterTopSize !== \"60in\" && currentCounterTopSize !== \"72in\")) {\r\n // this.callToiletFailPopup('vanity', item, ignoreLocked)\r\n // } else {\r\n // this.itemClick(item, ignoreLocked)\r\n // }\r\n this.itemClick(item, ignoreLocked);\r\n if (this.props.fabricatorSettings\r\n && (this.props.fabricatorSettings.wizardConsumers || (this.props.fabricatorSettings.wizardClients && document.kvConfig.isBackend))\r\n ) {\r\n if (!featureIsLocked && !item.part.partName.includes(\"laceholder\")) {\r\n this.setWizardFiltersFromActiveItem(item.part)\r\n }\r\n }\r\n } else if (item.part.partId === \"shower_interior_wall\") {\r\n if (!featureIsLocked && !item.part.partName.includes(\"laceholder\")) {\r\n this.setWizardFiltersFromActiveItem(item.part)\r\n }\r\n this.itemClick(item, ignoreLocked)\r\n } else {\r\n this.itemClick(item, ignoreLocked)\r\n }\r\n\r\n this.props.setActiveFeature(item.part);\r\n\r\n const canvasClass = this.state.childNavigationItem\r\n ? this.state.parentNavigationItem.text + '-' + this.state.childNavigationItem.text\r\n : this.state.parentNavigationItem.text;\r\n\r\n if (!window.canvasIsDragging) {\r\n this.props.setCanvasClass(canvasClass.toLowerCase().replace(/ /g, \"-\"));\r\n }\r\n\r\n if (this.state.parentNavigationItem) { // update canvas only if it is child\r\n this.props.refreshCB();\r\n }\r\n };\r\n\r\n handleSubPartClick = subNavigationItem => { // sidebar list item click\r\n const subItemPart = subNavigationItem.part;\r\n subItemPart.getParent().handleSubPartClick(subItemPart);\r\n this.setState({\r\n childNavigationItem: subNavigationItem,\r\n showFilterSelection: subItemPart.allFeaturesReceived, // show filters only if subItemPart has all features\r\n showerWallWizardGroupsSelected: false,\r\n searchText: \"\"\r\n }, () => {\r\n this.scrollContentToTop();\r\n this.rememberWallsSelection();\r\n this.checkIfAllFeaturesReceived(subNavigationItem, \"childNavigationItem\");\r\n });\r\n /*set new materials page subIndex*/\r\n this.setActivePartRelatedItemIndex(subNavigationItem);\r\n // console.log('subItemPart', subItemPart);\r\n if ((subItemPart.getParent() && subItemPart.getParent().partName === \"Walls\")\r\n || subItemPart.partName === \"Accent Wall\" && !window.canvasIsDragging) {\r\n this.props.setCanvasClass(subNavigationItem.text.toLowerCase().replace(/ /g, \"-\"));\r\n }\r\n this.setNewActiveFeature(subNavigationItem);\r\n };\r\n\r\n render() {\r\n const layout = getCurrentLayout();\r\n const activePart = this.state.parentNavigationItem ? this.state.parentNavigationItem.part : null;\r\n const activeSubPart = this.state.childNavigationItem ? this.state.childNavigationItem.part : null;\r\n const activeNavPart = activeSubPart || activePart;\r\n const parentItems = layout.designNavigationItems(); // parent list without filters\r\n const allFeaturesReceived = activeNavPart && activeNavPart.allFeaturesReceived;\r\n\r\n // console.log('activePart', activePart);\r\n // console.log('activeSubPart', activeSubPart);\r\n // console.log('activePart.subTypes()', activePart && activePart.subTypes());\r\n // console.log('this.state.childNavigationItemv1111', this.state.childNavigationItem);\r\n\r\n let useWizard = false;\r\n let wizardGroups = [];\r\n if (this.props.fabricatorSettings\r\n && (this.props.fabricatorSettings.wizardConsumers || (this.props.fabricatorSettings.wizardClients && document.kvConfig.isBackend))\r\n && this.state.contentType === ContentType.Design && activeSubPart && activeSubPart.canUseWizard && activeSubPart.allFeaturesReceived) {\r\n useWizard = true;\r\n wizardGroups = this.state[this.getWizardGroupsByPartId(this.state.childNavigationItem.part.partId)];\r\n }\r\n\r\n const features = this.getFeatures(layout);\r\n\r\n const showLockedView = this.currentActiveItemIsLocked(useWizard);\r\n\r\n const useFilters = (activePart && activePart.partId === \"kitchen_floor\" && activePart.allFeaturesReceived)\r\n || (activeSubPart && (this.isWallItem(activeSubPart) || activeSubPart.partId === \"accent_wall\"\r\n || activeSubPart.partId === \"shower_wall_accent\") && activeSubPart.allFeaturesReceived);\r\n\r\n const filterSelectionHasValues = activeNavPart && FilterSelection.getAvailableFilterValues(\r\n this.props.filterGroups, \"Material\", activeNavPart, this.props.fabricatorData\r\n ).length;\r\n\r\n const itemIsSelected = (!this.props.fabricatorSettings.leadCapture\r\n || (activeSubPart && activeSubPart.activeFeature && activeSubPart.firstClick[this.props.activeQuoteIndex] && activeSubPart.placeholderChanged));\r\n\r\n const useKVWizard = false;\r\n //TODO change it when BE is ready\r\n\r\n const showNavigationFilters = useKVWizard &&activeNavPart\r\n // && this.props.activeNavigationFilter !== CABINET_WIZARD_BUTTONS[0].buttonId\r\n && activeNavPart.canUseNavigationFilter && activeNavPart.canUseNavigationFilter();\r\n\r\n let showNavigationFiltersSteps = false;\r\n if (useKVWizard && activeNavPart && activeNavPart.canUseNavigationFilterSteps\r\n && activeNavPart.canUseNavigationFilterSteps()) {\r\n showNavigationFiltersSteps = !this.props.countertopNavigationFilterCompleted;\r\n }\r\n\r\n const isCountertop = activeSubPart && COUNTERTOP_GROUP_BATHROOM.includes(activeSubPart.partId);\r\n // console.log(\"isCountertop\", isCountertop);\r\n\r\n return (\r\n
    \r\n
    \r\n {/*
    \r\n
    \r\n {this.state.contextMenuOpen && !this.state.contextMenuOpen.module\r\n ? \r\n : null}\r\n {showLockedView\r\n ? \r\n : null}\r\n \r\n {this.props.bvOpened ? : null}\r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => ({\r\n fabricatorData: store.fabricatorState,\r\n selectedFilters: store.filterState.selectedFilters,\r\n filtersVisible: store.filterState.showFilters,\r\n filterGroups: store.filterState.filterGroups,\r\n bvPresets: store.bathroomVisualizerState.bvPresets,\r\n bvOpened: store.bathroomVisualizerState.bvOpened,\r\n userPopupOpened: store.userState.userPopupOpened,\r\n activeNavigationFilter: store.navigationState.activeNavigationFilter,\r\n countertopNavigationFilterCompleted: store.navigationState.countertopNavigationFilterCompleted,\r\n newLayoutType: store.sqftState.newLayoutType,\r\n countertopsApplyTo: store.navigationState.countertopsApplyTo,\r\n activeQuoteIndex: store.quotesState.activeQuoteIndex,\r\n navItemPositionModal: store.navigationState.navItemPositionModal,\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n setNavigationViewType,\r\n setModuleContextMenuType,\r\n setDefaultSelectionGroup,\r\n changeActivePartRelatedItemIndex,\r\n setActiveNavigationFilter,\r\n setActiveNavigationFilterStepIndex,\r\n setModuleContextMenuModule,\r\n setNavigationLoading,\r\n toggleNavItemPositionModal\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(MobileNavigation)\r\n);\r\n","import React from 'react';\r\nimport {connect} from 'react-redux';\r\nimport {injectIntl} from \"react-intl\";\r\nimport $ from \"jquery\";\r\n\r\nimport MobileNavigationCommon from \"../../visComponents/navigation/mobileNavigationCommon\";\r\n\r\nimport {ContentType} from \"../../visComponents/constants\";\r\n\r\nimport MobileNavigationButtons from '../../visComponents/navigation/mobile/mobileNavigationButtons';\r\nimport MobileNavigationAllWallsCheckbox from '../../visComponents/navigation/mobile/mobileNavigationAllWallsCheckbox';\r\nimport FeatureWizardSteps from \"../../visComponents/navigation/featureWizard/featureWizardSteps\";\r\n\r\nimport {changeActivePartRelatedItemIndex, setDefaultSelectionGroup} from \"../../../actions/actionFunctions\";\r\nimport {\r\n setActiveNavigationFilter,\r\n setModuleContextMenuType,\r\n setModuleContextMenuModule,\r\n setActiveNavigationFilterStepIndex, setNavigationViewType, setNavigationLoading, toggleNavItemPositionModal\r\n} from \"../../../actions/navigationFunctions\";\r\n\r\nimport MobileMenuSelect from '../../visComponents/navigation/mobile/mobileMenuSelect';\r\nimport LockedView from \"../../common/lockedView\";\r\n\r\nimport Filters from \"../../visComponents/navigation/newFilters/filters\";\r\nimport BodyPanelRadio from \"../../visComponents/navigation/desktop/bodyPanelRadio\";\r\nimport FilterSwitchers from \"../../visComponents/navigation/newFilters/filterSwitchers\";\r\nimport FilterSelection from \"../../visComponents/navigation/newFilters/filterSelection\";\r\n// import {CABINET_WIZARD_BUTTONS} from \"../core/constants\";\r\nimport NavigationFiltersSteps from \"../../visComponents/navigation/newFilters/navigationFiltersSteps\";\r\nimport ContextMenuQKB from \"./contextMenuQKB\";\r\n\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\nimport {COUNTERTOP_GROUP_BATHROOM} from \"../core/constants\";\r\nimport CountertopSwitchers from \"../../kvComponent/navigation/countertopSwitchers\";\r\nimport {Vanity} from \"../core/parts/vanity\";\r\nimport LookAllWallsRadioButton from \"../lookNavigation/lookMain/lookAllWallsRadioButton\";\r\nimport NavItemPositionModal from \"../../visComponents/navigation/navItemPositionModal\";\r\nimport {setLookContextMenu} from \"../../../actions/lookFunctions\";\r\nimport {checkForContextMenuCommon} from \"../lookNavigation/lookFunctions\";\r\n\r\nclass MobileNavigation extends MobileNavigationCommon {\r\n\r\n componentWillReceiveProps(nextProps) {\r\n this._componentWillReceiveProps(nextProps)\r\n }\r\n\r\n checkForContextMenu = (hoveredLayer, event) => {\r\n if (this.props.contextMenu.opened) {\r\n this.props.setLookContextMenu({\r\n opened: false\r\n })\r\n return true\r\n }\r\n if (!hoveredLayer || this.state.showNavigation) {\r\n return false\r\n }\r\n\r\n const {showButtons} = checkForContextMenuCommon(hoveredLayer.partId, hoveredLayer.layerPosition);\r\n if ((showButtons.length > 1) && !(hoveredLayer.partId && hoveredLayer.partId === \"vanity_legs\")) {\r\n this.props.setLookContextMenu({\r\n opened: true,\r\n partId: hoveredLayer.partId,\r\n layerPosition: hoveredLayer.layerPosition, // if needed\r\n position: {\r\n x: event.clientX,\r\n y: event.clientY,\r\n }\r\n });\r\n return true\r\n } else if (showButtons.length === 1 && showButtons[0].includes(\"_wizard\")) {\r\n // const wizardId = showButtons[0].split(\"-\")[1];\r\n // setWizardActiveItem(wizardList.find(wizardItem => wizardItem.id === wizardId));\r\n //\r\n // history.push(`${getLookIdUrl(false) + ROUTES.wizard}/${wizardId}`);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n handleContextMenuClick = (featureToClick, partId) => {\r\n const layout = getCurrentLayout();\r\n let clickedParent = \"\", clickedButton = \"\";\r\n const featureGroup = layout.getFeatureGroupByPartId(partId);\r\n if (featureGroup) {\r\n clickedButton = featureGroup.partName;\r\n clickedParent = featureGroup.getParent().partName;\r\n }\r\n //\r\n // console.log('clickedButton', clickedButton);\r\n // console.log('clickedParent', clickedParent);\r\n if (!clickedButton) {\r\n return\r\n }\r\n // console.log('menuItem', menuItem);\r\n // if (clickedParent === \"Walls\" && (clickedButton === \"Left Shower Wall\" || clickedButton === \"Pony Wall\")) {\r\n // this.ponyWallAndLeftWallClick(menuItem);\r\n // }\r\n\r\n this.setState({\r\n showNavigation: true,\r\n contentType: ContentType.Design,\r\n contextMenuOpen: false,\r\n hoveredLayer: {}\r\n }, () => {\r\n this.menuOpened();\r\n this.triggerOpenNavigationMenu(clickedButton, clickedParent);\r\n $(document).on('click', this.handleWrapperBlur);\r\n this.setNewActiveFeature();\r\n if (featureToClick && !isBacksplash) {\r\n featureToClick.handleClick();\r\n }\r\n });\r\n };\r\n\r\n bindCanvasClick = (event) => {\r\n // const canvas = document.getElementById(this.props.canvasId);\r\n\r\n if (!window.touchMove && !this.state.showNavigation && !this.props.contextMenu.opened) {\r\n this.props.setHoveredLayer(event);\r\n }\r\n\r\n if (document.hoveredLayer && !window.touchMove) {\r\n // $('.canvas-text').html(`CLICK3`);\r\n\r\n if (this.checkForContextMenu(document.hoveredLayer, event)) {\r\n return false\r\n }\r\n\r\n const hoveredPartId = document.hoveredLayer.partId;\r\n\r\n if (hoveredPartId) {\r\n if (this.state.contentType === 0) {\r\n this.openMobileMenu();\r\n }\r\n const layout = getCurrentLayout();\r\n const featureGroup = layout.getFeatureGroupByPartId(hoveredPartId);\r\n if (featureGroup) {\r\n this.triggerOpenNavigationMenu(featureGroup.partName, featureGroup.getParent().partName)\r\n if (!window.canvasIsDragging) {\r\n this.props.setCanvasClass(featureGroup.partName.toLowerCase().replace(/ /g, \"-\"));\r\n }\r\n }\r\n }\r\n }\r\n };\r\n\r\n handleNavigationItemClick = (item, ignoreLocked = false, featureIsLocked, event) => {\r\n const layout = getCurrentLayout();\r\n //console.log('item', item);\r\n\r\n if (this.state.childNavigationItem\r\n && this.state.childNavigationItem.part.activeFeature\r\n && Array.isArray(this.state.childNavigationItem.part.activeFeature.metaData[\"SkuName\"])\r\n && this.state.childNavigationItem.part.activeFeature.metaData[\"SkuName\"][0]\r\n && Array.isArray(item.part.metaData[\"SkuName\"])\r\n && (this.state.childNavigationItem.part.activeFeature.metaData[\"SkuName\"][0] === item.part.metaData[\"SkuName\"][0])) {\r\n this.showPositionsPopup(item, event); // move modal to new position\r\n return false // don't change L to R // redundant click\r\n }\r\n\r\n const showPositionPopup = this.showPositionsPopup(item, event);\r\n if (showPositionPopup) {\r\n this.props.setActiveFeature(item.part); // set feature for modal\r\n return // don't click on feature!! we are clicking inside the modal window\r\n }\r\n\r\n if (item.matchesMetaFailed) {\r\n let nonCompatibleWith = \"\";\r\n switch (item.part.partId) {\r\n case \"vanity_faucet\":\r\n nonCompatibleWith = \"sink\";\r\n break;\r\n case \"sink\":\r\n nonCompatibleWith = \"vanity\";\r\n break;\r\n case \"shower_pod\":\r\n nonCompatibleWith = \"Window Kit\";\r\n break;\r\n case \"window_kits\":\r\n nonCompatibleWith = item.matchesMetaFailed === \"shower_pod\" ? \"Shower Pod\" : \"Corner Shelf\";\r\n break;\r\n default:\r\n break;\r\n }\r\n this.callMetaMathesFailedPopup(item, nonCompatibleWith);\r\n } else if (item.part.partId === \"vanity_sink\" && this.state.parentNavigationItem.part.faucet.placeholderChanged\r\n && this.state.parentNavigationItem.part.faucet.activeFeature) {\r\n const sinkSizeConditionValue = item.part.metaData[\"SinkSize\"] ? item.part.metaData[\"SinkSize\"][0] : null;\r\n if (sinkSizeConditionValue && !this.state.parentNavigationItem.part.faucet.activeFeature.matchesMetaForCondition('SinkSize', sinkSizeConditionValue)) {\r\n this.callMetaMathesFailedPopup(item, 'faucet');\r\n } else {\r\n this.itemClick(item, ignoreLocked)\r\n }\r\n } else if (item.part.partId === \"toilet\") {\r\n const vanity = layout.parts[Vanity.id];\r\n const counterTopSize = vanity.counterTopSize(item.part);\r\n if (counterTopSize === \"60in\" || counterTopSize === \"72in\") {\r\n this.callToiletFailPopup('toilet', item, ignoreLocked)\r\n } else {\r\n this.itemClick(item, ignoreLocked)\r\n }\r\n } else if (item.part.partId === \"vanity_cabinet\") {\r\n // let toilet = layout.parts[Toilet.id];\r\n // if (toilet) {\r\n // toilet = toilet.toilet; // toiletBody\r\n // }\r\n // const counterTopSize = item.part.vanitySize + 'in';\r\n // const vanity = layout.parts[Vanity.id];\r\n // const currentCounterTopSize = vanity.counterTopSize(item.part);\r\n // if (toilet && toilet.placeholderChanged && (counterTopSize === \"60in\" || counterTopSize === \"72in\")\r\n // && (currentCounterTopSize !== \"60in\" && currentCounterTopSize !== \"72in\")) {\r\n // this.callToiletFailPopup('vanity', item, ignoreLocked)\r\n // } else {\r\n // this.itemClick(item, ignoreLocked)\r\n // }\r\n this.itemClick(item, ignoreLocked);\r\n if (this.props.fabricatorSettings\r\n && (this.props.fabricatorSettings.wizardConsumers || (this.props.fabricatorSettings.wizardClients && document.kvConfig.isBackend))\r\n ) {\r\n if (!featureIsLocked && !item.part.partName.includes(\"laceholder\")) {\r\n this.setWizardFiltersFromActiveItem(item.part)\r\n }\r\n }\r\n } else if (item.part.partId === \"shower_interior_wall\") {\r\n if (!featureIsLocked && !item.part.partName.includes(\"laceholder\")) {\r\n this.setWizardFiltersFromActiveItem(item.part)\r\n }\r\n this.itemClick(item, ignoreLocked)\r\n } else {\r\n this.itemClick(item, ignoreLocked)\r\n }\r\n\r\n this.props.setActiveFeature(item.part);\r\n\r\n const canvasClass = this.state.childNavigationItem\r\n ? this.state.parentNavigationItem.text + '-' + this.state.childNavigationItem.text\r\n : this.state.parentNavigationItem.text;\r\n\r\n if (!window.canvasIsDragging) {\r\n this.props.setCanvasClass(canvasClass.toLowerCase().replace(/ /g, \"-\"));\r\n }\r\n\r\n if (this.state.parentNavigationItem) { // update canvas only if it is child\r\n this.props.refreshCB();\r\n }\r\n };\r\n\r\n handleSubPartClick = subNavigationItem => { // sidebar list item click\r\n const subItemPart = subNavigationItem.part;\r\n subItemPart.getParent().handleSubPartClick(subItemPart);\r\n this.setState({\r\n childNavigationItem: subNavigationItem,\r\n showFilterSelection: subItemPart.allFeaturesReceived, // show filters only if subItemPart has all features\r\n showerWallWizardGroupsSelected: false,\r\n searchText: \"\"\r\n }, () => {\r\n this.scrollContentToTop();\r\n this.rememberWallsSelection();\r\n this.checkIfAllFeaturesReceived(subNavigationItem, \"childNavigationItem\");\r\n });\r\n /*set new materials page subIndex*/\r\n this.setActivePartRelatedItemIndex(subNavigationItem);\r\n // console.log('subItemPart', subItemPart);\r\n if ((subItemPart.getParent() && subItemPart.getParent().partName === \"Walls\")\r\n || subItemPart.partName === \"Accent Wall\" && !window.canvasIsDragging) {\r\n this.props.setCanvasClass(subNavigationItem.text.toLowerCase().replace(/ /g, \"-\"));\r\n }\r\n this.setNewActiveFeature(subNavigationItem);\r\n };\r\n\r\n render() {\r\n const layout = getCurrentLayout();\r\n const activePart = this.state.parentNavigationItem ? this.state.parentNavigationItem.part : null;\r\n const activeSubPart = this.state.childNavigationItem ? this.state.childNavigationItem.part : null;\r\n const activeNavPart = activeSubPart || activePart;\r\n const parentItems = layout.designNavigationItems(); // parent list without filters\r\n const allFeaturesReceived = activeNavPart && activeNavPart.allFeaturesReceived;\r\n\r\n // console.log('activePart', activePart);\r\n // console.log('activeSubPart', activeSubPart);\r\n // console.log('activePart.subTypes()', activePart && activePart.subTypes());\r\n // console.log('this.state.childNavigationItemv1111', this.state.childNavigationItem);\r\n\r\n let useWizard = false;\r\n let wizardGroups = [];\r\n if (this.props.fabricatorSettings\r\n && (this.props.fabricatorSettings.wizardConsumers || (this.props.fabricatorSettings.wizardClients && document.kvConfig.isBackend))\r\n && this.state.contentType === ContentType.Design && activeSubPart && activeSubPart.canUseWizard && activeSubPart.allFeaturesReceived) {\r\n useWizard = true;\r\n wizardGroups = this.state[this.getWizardGroupsByPartId(this.state.childNavigationItem.part.partId)];\r\n }\r\n\r\n const features = this.getFeatures(layout);\r\n\r\n const showLockedView = this.currentActiveItemIsLocked(useWizard);\r\n\r\n const useFilters = (activePart && activePart.partId === \"kitchen_floor\" && activePart.allFeaturesReceived)\r\n || (activeSubPart && (this.isWallItem(activeSubPart) || activeSubPart.partId === \"accent_wall\"\r\n || activeSubPart.partId === \"shower_wall_accent\") && activeSubPart.allFeaturesReceived);\r\n\r\n const filterSelectionHasValues = activeNavPart && FilterSelection.getAvailableFilterValues(\r\n this.props.filterGroups, \"Material\", activeNavPart, this.props.fabricatorData\r\n ).length;\r\n\r\n const itemIsSelected = (!this.props.fabricatorSettings.leadCapture\r\n || (activeSubPart && activeSubPart.activeFeature && activeSubPart.firstClick[this.props.activeQuoteIndex] && activeSubPart.placeholderChanged));\r\n\r\n const useKVWizard = false;\r\n //TODO change it when BE is ready\r\n\r\n const showNavigationFilters = useKVWizard &&activeNavPart\r\n // && this.props.activeNavigationFilter !== CABINET_WIZARD_BUTTONS[0].buttonId\r\n && activeNavPart.canUseNavigationFilter && activeNavPart.canUseNavigationFilter();\r\n\r\n let showNavigationFiltersSteps = false;\r\n if (useKVWizard && activeNavPart && activeNavPart.canUseNavigationFilterSteps\r\n && activeNavPart.canUseNavigationFilterSteps()) {\r\n showNavigationFiltersSteps = !this.props.countertopNavigationFilterCompleted;\r\n }\r\n\r\n const isCountertop = activeSubPart && COUNTERTOP_GROUP_BATHROOM.includes(activeSubPart.partId);\r\n // console.log(\"isCountertop\", isCountertop);\r\n\r\n return (\r\n
    \r\n
    \r\n {/*
    \r\n
    \r\n \r\n {showLockedView\r\n ? \r\n : null}\r\n \r\n {this.props.bvOpened ? : null}\r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {contextMenu} = store.lookState;\r\n return {\r\n fabricatorData: store.fabricatorState,\r\n selectedFilters: store.filterState.selectedFilters,\r\n filtersVisible: store.filterState.showFilters,\r\n filterGroups: store.filterState.filterGroups,\r\n bvPresets: store.bathroomVisualizerState.bvPresets,\r\n bvOpened: store.bathroomVisualizerState.bvOpened,\r\n userPopupOpened: store.userState.userPopupOpened,\r\n activeNavigationFilter: store.navigationState.activeNavigationFilter,\r\n countertopNavigationFilterCompleted: store.navigationState.countertopNavigationFilterCompleted,\r\n newLayoutType: store.sqftState.newLayoutType,\r\n countertopsApplyTo: store.navigationState.countertopsApplyTo,\r\n activeQuoteIndex: store.quotesState.activeQuoteIndex,\r\n navItemPositionModal: store.navigationState.navItemPositionModal,\r\n contextMenu,\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n setNavigationViewType,\r\n setModuleContextMenuType,\r\n setDefaultSelectionGroup,\r\n changeActivePartRelatedItemIndex,\r\n setActiveNavigationFilter,\r\n setActiveNavigationFilterStepIndex,\r\n setModuleContextMenuModule,\r\n setNavigationLoading,\r\n toggleNavItemPositionModal,\r\n setLookContextMenu,\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(MobileNavigation)\r\n);\r\n","import React, {useRef, useState} from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\nimport PropTypes from \"prop-types\";\r\nimport {withRouter} from \"react-router-dom\";\r\n\r\n// import IconButton from \"@mui/material/IconButton\";\r\n\r\nimport {setLookContextMenu} from \"../../../actions/lookFunctions\";\r\n\r\nimport {\r\n CONTEXT_MENU_VANITY_BUTTONS,\r\n CONTEXT_MENU_VANITY_ONLY,\r\n // CONTEXT_MENU_SHOWER_ALL,\r\n // CONTEXT_MENU_SHOWER_OTHER,\r\n LOOK_ROOM_TYPES,\r\n} from \"../core/constants\";\r\nimport {getCurrentLayout, getCurrentRoomType} from \"../../appLayout\";\r\n// import {getLookIdUrl} from \"./lookFunctions2\";\r\n// import {ROUTES} from \"../../../routes\";\r\nimport {getCommonVisualizerType} from \"../../../config\";\r\nimport {checkIfLookFeaturesReceived} from \"../../../api/look-api\";\r\nimport {loaderDisable, loaderEnable} from \"../../ui/loaderView\";\r\nimport {checkForContextMenuCommon} from \"../lookNavigation/lookFunctions\";\r\nimport goToMaterialPage from \"../../common/goToMaterialPage\";\r\n\r\n\r\nconst needToRequestFeatureGroupsOnClick = [\"vanity_washstand\", \"vanity_console\", \"shower_arm\", \"shower_head\"];\r\n\r\nconst ContextMenuQKBButtons = (props) => {\r\n\r\n const {contextMenu, setLookContextMenu, buttons, setButtons, handleContextMenuClick, activeQuoteIndex,\r\n renderGreenLayerByZindex} = props;\r\n\r\n const {partId, layerPosition} = contextMenu;\r\n const anchorRef = useRef(null);\r\n const [vanitySubMenuOpened, setVanitySubMenuOpened] = useState(false);\r\n const layout = getCurrentLayout();\r\n\r\n const {allButtons} = checkForContextMenuCommon(partId, layerPosition);\r\n const isBathroom = getCommonVisualizerType() === \"bathroom\";\r\n const isVanity = isBathroom && CONTEXT_MENU_VANITY_BUTTONS.includes(partId);\r\n // const isShower = isBathroom && (CONTEXT_MENU_SHOWER_ALL.includes(partId) || CONTEXT_MENU_SHOWER_OTHER.includes(partId));\r\n\r\n const contextButtonClick = async (clickedButton) => {\r\n // console.log(\"currentPartId\", currentPartId);\r\n\r\n const {partId, isWizard, wizardId, hasSubMenu} = clickedButton;\r\n\r\n if (((isVanity && CONTEXT_MENU_VANITY_ONLY.includes(partId)) || hasSubMenu) && !vanitySubMenuOpened) {\r\n setVanitySubMenuOpened(true);\r\n if (isVanity) {\r\n const vanButtons = allButtons.filter(button => CONTEXT_MENU_VANITY_ONLY.includes(button.partId));\r\n if (vanButtons.length && vanButtons.length > 1) {\r\n setButtons(vanButtons);\r\n return false\r\n }\r\n } else if (partId === \"accessories\") {\r\n const {showButtons} = checkForContextMenuCommon(\"grab_bar\", layerPosition);\r\n setButtons(showButtons);\r\n return false\r\n }\r\n } else if (vanitySubMenuOpened) {\r\n // setVanitySubMenuOpened(false);\r\n }\r\n\r\n setLookContextMenu({\r\n opened: false,\r\n layerPosition: \"\",\r\n clickedOnItem: partId,\r\n });\r\n\r\n let openPartId = partId;\r\n let clickedFeature = null;\r\n\r\n if (isVanity && (getCurrentRoomType(layout) === LOOK_ROOM_TYPES.as) && (partId === \"vanity_pedestal_sink\" || partId === \"vanity_sink\")) {\r\n openPartId = \"vanity_sink\";\r\n const sinkParent = layout.getFeatureGroupByPartId(openPartId);\r\n if (sinkParent) {\r\n const navItems = layout.designNavigationItems({part: sinkParent}, null, null, sinkParent.activeFeature);\r\n if (partId === \"vanity_pedestal_sink\") {\r\n const pedestalSink = navItems.find(navItem => {\r\n return navItem.part.metaData[\"MountType\"] && navItem.part.metaData[\"MountType\"].includes(\"ST\")\r\n });\r\n if (pedestalSink) {\r\n clickedFeature = pedestalSink.part;\r\n }\r\n } else {\r\n const isPedestal = sinkParent.activeFeature && sinkParent.activeFeature.metaData[\"MountType\"] && sinkParent.activeFeature.metaData[\"MountType\"].includes(\"ST\");\r\n if (isPedestal) {\r\n const regularSink = navItems.find(navItem => {\r\n return !navItem.part.metaData[\"MountType\"] || !navItem.part.metaData[\"MountType\"].includes(\"ST\")\r\n });\r\n if (regularSink) {\r\n clickedFeature = regularSink.part;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (isWizard) {\r\n goToMaterialPage(\"visualizer\", false, null, \"\",\r\n {wizardItemId: wizardId, quoteIndex: activeQuoteIndex});\r\n return false\r\n }\r\n\r\n const featureGroup = layout.getFeatureGroupByPartId(openPartId);\r\n if (featureGroup && !featureGroup.allFeaturesReceived && needToRequestFeatureGroupsOnClick.includes(openPartId)) {\r\n loaderEnable();\r\n await checkIfLookFeaturesReceived(featureGroup);\r\n loaderDisable();\r\n }\r\n\r\n // console.log(\"zoomedFeature\", clickedFeature);\r\n handleContextMenuClick(clickedFeature, openPartId);\r\n };\r\n\r\n const onMouseOver = (button) => {\r\n if (renderGreenLayerByZindex) {\r\n const featureGroup = layout.getFeatureGroupByPartId(button.partId);\r\n if (featureGroup && featureGroup.activeFeature && featureGroup.activeFeature.layer) {\r\n renderGreenLayerByZindex(featureGroup.activeFeature.layer.zIndex, button.partId);\r\n }\r\n }\r\n }\r\n\r\n let contextMenuStyles = buttons.length === 14 ? {maxWidth:\"210px\"} : null;\r\n\r\n console.log(\"buttons\", buttons);\r\n\r\n return (\r\n
    \r\n
    \r\n {buttons.map(button => {\r\n const isVanityParent = isVanity && CONTEXT_MENU_VANITY_ONLY.includes(button.partId);\r\n return (\r\n \r\n )\r\n })}\r\n
    \r\n
    \r\n )\r\n};\r\n\r\nContextMenuQKBButtons.propTypes = {\r\n handleContextMenuClick: PropTypes.func,\r\n setButtons: PropTypes.func,\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {contextMenu} = store.lookState;\r\n const {isMobile} = store.serverState;\r\n const {wizardList} = store.wizardState;\r\n const fabricatorData = store.fabricatorState;\r\n const {activeQuoteIndex} = store.quotesState;\r\n\r\n return {\r\n contextMenu,\r\n isMobile,\r\n wizardList,\r\n fabricatorData,\r\n activeQuoteIndex,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setLookContextMenu,\r\n};\r\n\r\nexport default injectIntl(\r\n withRouter(\r\n connect(mapStateToProps, mapDispatchToProps)(ContextMenuQKBButtons)\r\n )\r\n)\r\n","import React, {Fragment} from 'react';\r\nimport {connect} from \"react-redux\";\r\nimport classNames from 'classnames';\r\nimport $ from 'jquery';\r\n\r\nimport {\r\n toggleDesktopNavigation,\r\n setActiveNavigationNames,\r\n setModuleContextMenuType,\r\n setActiveNavigationFilter,\r\n setActiveNavigationFilterStepIndex,\r\n setNavigationViewType,\r\n setNavigationLoading,\r\n toggleNavItemPositionModal\r\n} from \"../../../actions/navigationFunctions\";\r\nimport {\r\n setDefaultSelectionGroup,\r\n changeActivePartRelatedItemIndex,\r\n updateCanvasCount\r\n} from \"../../../actions/actionFunctions\";\r\nimport DesktopNavigationCommon from \"../../visComponents/navigation/desktopNavigationCommon\";\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\n\r\nimport LockedView from \"../../common/lockedView\";\r\nimport {ContentType} from \"../../visComponents/constants\";\r\nimport ContextMenuQKB from \"./contextMenuQKB\";\r\nimport MobileMenuSelect from \"../../visComponents/navigation/mobile/mobileMenuSelect\";\r\nimport {setVisualizerTutorialStep, showVisualizerTutorial} from \"../../../actions/tutorialFunctions\";\r\nimport {Vanity} from \"../core/parts/vanity\";\r\nimport NavItemPositionModal from \"../../visComponents/navigation/navItemPositionModal\";\r\nimport {checkForContextMenuCommon} from \"../lookNavigation/lookFunctions\";\r\nimport {setLookContextMenu} from \"../../../actions/lookFunctions\";\r\nimport goToMaterialPage from \"../../common/goToMaterialPage\";\r\n\r\nclass DesktopNavigation extends DesktopNavigationCommon {\r\n\r\n bindCanvasClick = (event) => {\r\n // const canvas = document.getElementById(this.props.canvasId);\r\n this.props.setHoveredLayer(event);\r\n\r\n if (document.hoveredLayer) {\r\n\r\n if (this.checkForContextMenu(document.hoveredLayer, event)) {\r\n return false\r\n }\r\n\r\n const hoveredPartId = document.hoveredLayer.partId;\r\n\r\n if (hoveredPartId) {\r\n if (this.state.contentType === 0) {\r\n this.setState({\r\n showNavigation: true,\r\n contentType: ContentType.Design,\r\n hoveredLayer: {}\r\n }, () => {\r\n this.setNewActiveFeature();\r\n this.menuOpened();\r\n setTimeout(() => {\r\n $(document).on('click', this.handleWrapperBlur);\r\n }, 0)\r\n });\r\n }\r\n\r\n const layout = getCurrentLayout();\r\n const featureGroup = layout.getFeatureGroupByPartId(hoveredPartId);\r\n if (featureGroup) {\r\n this.triggerOpenNavigationMenu(featureGroup.partName, featureGroup.getParent().partName)\r\n }\r\n }\r\n }\r\n\r\n };\r\n\r\n checkForContextMenu = (hoveredLayer, event) => {\r\n if (this.props.contextMenu.opened) {\r\n this.props.setLookContextMenu({\r\n opened: false\r\n })\r\n return true\r\n }\r\n if (!hoveredLayer) {\r\n return false\r\n }\r\n\r\n const {showButtons} = checkForContextMenuCommon(hoveredLayer.partId, hoveredLayer.layerPosition);\r\n if ((showButtons.length > 1) && !(hoveredLayer.partId && hoveredLayer.partId === \"vanity_legs\")) {\r\n this.props.setLookContextMenu({\r\n opened: true,\r\n partId: hoveredLayer.partId,\r\n layerPosition: hoveredLayer.layerPosition, // if needed\r\n position: {\r\n x: event.clientX,\r\n y: event.clientY,\r\n }\r\n });\r\n return true\r\n } else if (showButtons.length === 1 && showButtons[0].isWizard) {\r\n goToMaterialPage(\"visualizer\", false, null, \"\",\r\n {wizardItemId: showButtons.wizardId, quoteIndex: this.props.activeQuoteIndex});\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n handleContextMenuClick = (featureToClick, partId) => {\r\n const layout = getCurrentLayout();\r\n let clickedParent = \"\", clickedButton = \"\";\r\n const featureGroup = layout.getFeatureGroupByPartId(partId);\r\n if (featureGroup) {\r\n clickedButton = featureGroup.partName;\r\n clickedParent = featureGroup.getParent().partName;\r\n }\r\n // console.log('clickedButton', clickedButton);\r\n // console.log('clickedParent', clickedParent);\r\n if (!clickedButton) {\r\n return\r\n }\r\n // console.log('menuItem', menuItem);\r\n // if (clickedParent === \"Walls\" && (clickedButton === \"Left Shower Wall\" || clickedButton === \"Pony Wall\")) {\r\n // this.ponyWallAndLeftWallClick(menuItem);\r\n // }\r\n\r\n this.setState({\r\n showNavigation: true,\r\n contentType: ContentType.Design,\r\n contextMenuOpen: false,\r\n hoveredLayer: {}\r\n }, () => {\r\n this.menuOpened();\r\n this.triggerOpenNavigationMenu(clickedButton, clickedParent);\r\n $(document).on('click', this.handleWrapperBlur);\r\n this.setNewActiveFeature();\r\n if (featureToClick && !isBacksplash) {\r\n featureToClick.handleClick();\r\n }\r\n });\r\n };\r\n\r\n handleNavigationItemClick = (item, ignoreLocked = false, featureIsLocked, event) => {\r\n\r\n if (this.state.childNavigationItem\r\n && this.state.childNavigationItem.part.activeFeature\r\n && Array.isArray(this.state.childNavigationItem.part.activeFeature.metaData[\"SkuName\"])\r\n && this.state.childNavigationItem.part.activeFeature.metaData[\"SkuName\"][0]\r\n && Array.isArray(item.part.metaData[\"SkuName\"])\r\n && (this.state.childNavigationItem.part.activeFeature.metaData[\"SkuName\"][0] === item.part.metaData[\"SkuName\"][0])) {\r\n this.showPositionsPopup(item, event); // move modal to new position\r\n return false // don't change L to R // redundant click\r\n }\r\n\r\n const layout = getCurrentLayout();\r\n this.navigationItemClickCommon(item); // set active feature\r\n\r\n const showPositionPopup = this.showPositionsPopup(item, event);\r\n if (showPositionPopup) {\r\n return // don't click on feature!! we are clicking inside the modal window\r\n }\r\n\r\n const updateSideBarIds = [\"shower_body\", \"wall_configuration\", \"vanity_cabinet\", \"shower_pan_combo\"];\r\n if (updateSideBarIds.includes(item.part.partId)) {\r\n this.updateSideBar();\r\n } else if (this.state.parentNavigationItem && this.state.parentNavigationItem.text === \"Shower Tub Combo\"\r\n && item.part.bottomTubId && (this.state.parentNavigationItem.part.bottomTub !== item.part.bottomTubId)) {\r\n this.updateSideBar();\r\n }\r\n\r\n // console.log('this.state.parentNavigationItem', this.state.parentNavigationItem);\r\n // console.log('this.state.parentNavigationItem.part.subParts()', this.state.parentNavigationItem && this.state.parentNavigationItem.part && this.state.parentNavigationItem.part.subParts());\r\n\r\n if (item.matchesMetaFailed) {\r\n let nonCompatibleWith = \"\";\r\n switch (item.part.partId) {\r\n case \"vanity_faucet\":\r\n nonCompatibleWith = \"sink\";\r\n break;\r\n case \"sink\":\r\n nonCompatibleWith = \"vanity\";\r\n break;\r\n case \"shower_pod\":\r\n nonCompatibleWith = \"Window Kit\";\r\n break;\r\n case \"window_kits\":\r\n nonCompatibleWith = item.matchesMetaFailed === \"shower_pod\" ? \"Shower Pod\" : \"Corner Shelf\";\r\n break;\r\n default:\r\n break;\r\n }\r\n this.callMetaMathesFailedPopup(item, nonCompatibleWith);\r\n // } else if (item.part.partId === \"vanity_sink\" && this.state.parentNavigationItem.part.faucet\r\n // && this.state.parentNavigationItem.part.faucet.placeholderChanged\r\n // && this.state.parentNavigationItem.part.faucet.activeFeature) {\r\n //\r\n // const sinkSizeConditionValue = item.part.metaData[\"SinkSize\"][0];\r\n //\r\n // if (this.state.parentNavigationItem.part.faucet.activeFeature.matchesMetaForCondition('SinkSize', sinkSizeConditionValue)) {\r\n // this.itemClick(item, ignoreLocked)\r\n // } else {\r\n // this.callMetaMathesFailedPopup(item, 'faucet');\r\n // }\r\n } else if (item.part.partId === \"toilet\") {\r\n const vanity = layout.parts[Vanity.id];\r\n const counterTopSize = vanity.counterTopSize(item.part);\r\n if (counterTopSize === \"60in\" || counterTopSize === \"72in\") {\r\n this.callToiletFailPopup('toilet', item, ignoreLocked)\r\n } else {\r\n this.itemClick(item, ignoreLocked)\r\n }\r\n } else if (item.part.partId === \"vanity_cabinet\") {\r\n // let toilet = layout.parts[Toilet.id];\r\n // if (toilet) {\r\n // toilet = toilet.toilet; // toiletBody\r\n // }\r\n // const counterTopSize = item.part.vanitySize + 'in';\r\n // const vanity = layout.parts[Vanity.id];\r\n // const currentCounterTopSize = vanity.counterTopSize(item.part);\r\n // if (toilet && toilet.placeholderChanged && (counterTopSize === \"60in\" || counterTopSize === \"72in\")\r\n // && (currentCounterTopSize !== \"60in\" && currentCounterTopSize !== \"72in\")) {\r\n // this.callToiletFailPopup('vanity', item, ignoreLocked)\r\n // } else {\r\n // this.itemClick(item, ignoreLocked);\r\n // }\r\n this.itemClick(item, ignoreLocked);\r\n if (this.props.fabricatorSettings\r\n && (this.props.fabricatorSettings.wizardConsumers || (this.props.fabricatorSettings.wizardClients && document.kvConfig.isBackend))\r\n ) {\r\n if (!featureIsLocked && !item.part.partName.includes(\"laceholder\")) {\r\n this.setWizardFiltersFromActiveItem(item.part)\r\n }\r\n }\r\n } else if (item.part.partId === \"shower_interior_wall\") {\r\n if (!featureIsLocked && !item.part.partName.includes(\"laceholder\")) {\r\n this.setWizardFiltersFromActiveItem(item.part)\r\n }\r\n this.itemClick(item, ignoreLocked)\r\n } else {\r\n this.itemClick(item, ignoreLocked)\r\n }\r\n\r\n if (this.state.parentNavigationItem) { // update canvas only if it is child\r\n this.props.updateCanvasCount();\r\n }\r\n\r\n };\r\n\r\n render() {\r\n const layout = getCurrentLayout();\r\n // const fabricatorSettings = this.props.fabricatorSettings;\r\n const activePart = this.state.parentNavigationItem ? this.state.parentNavigationItem.part : null;\r\n const activeSubPart = this.state.childNavigationItem ? this.state.childNavigationItem.part : null;\r\n // const activeNavPart = activeSubPart || activePart;\r\n const parentItems = layout.designNavigationItems(); // parent list without filters\r\n\r\n const useWizard = false, wizardGroups = [];\r\n\r\n let showNavigationFiltersSteps = false;\r\n\r\n if (activeSubPart && activeSubPart.canUseNavigationFilterSteps\r\n && activeSubPart.canUseNavigationFilterSteps()) {\r\n showNavigationFiltersSteps = !this.props.countertopNavigationFilterCompleted;\r\n }\r\n\r\n const showLockedView = this.currentActiveItemIsLocked(useWizard);\r\n\r\n const useFilters = false;\r\n const availableNavButtons = [ContentType.Design, ContentType.Layout, ContentType.DisplayRoom, ContentType.RoomScene];\r\n\r\n return (\r\n \r\n
    \r\n \r\n
    this.navWrapper = node}>\r\n
    \r\n
    \r\n {this.content(useWizard, wizardGroups, useFilters, activePart, activeSubPart)}\r\n
    \r\n
    \r\n {this.navigationMenuButtons(availableNavButtons)}\r\n {showNavigationFiltersSteps ? null : (\r\n
    \r\n \r\n
    \r\n )}\r\n {/*
    */}\r\n {/*
    */}\r\n {/**/}\r\n {/*
    */}\r\n {/*
    */}\r\n
    \r\n
    \r\n {this.props.bvOpened ? : null}\r\n {showLockedView\r\n ? \r\n : null}\r\n
    \r\n \r\n \r\n )\r\n }\r\n\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {contextMenu} = store.lookState;\r\n\r\n return {\r\n filtersVisible: store.filterState.showFilters,\r\n filterGroups: store.filterState.filterGroups,\r\n bvPresets: store.bathroomVisualizerState.bvPresets,\r\n bvOpened: store.bathroomVisualizerState.bvOpened,\r\n userIsLoggedIn: store.userState.userIsLoggedIn,\r\n isPhoneNumberValidated: store.userState.isPhoneNumberValidated,\r\n activeNavigationFilter: store.navigationState.activeNavigationFilter,\r\n countertopNavigationFilterCompleted: store.navigationState.countertopNavigationFilterCompleted,\r\n visualizerTutorialStep: store.tutorialState.visualizerTutorialStep,\r\n visualizerTutorialIsOpened: store.tutorialState.visualizerTutorialIsOpened,\r\n activeQuoteIndex: store.quotesState.activeQuoteIndex,\r\n navItemPositionModal: store.navigationState.navItemPositionModal,\r\n contextMenu,\r\n fabricatorData: store.fabricatorState,\r\n }\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setNavigationViewType,\r\n toggleDesktopNavigation,\r\n setActiveNavigationNames,\r\n setModuleContextMenuType,\r\n setActiveNavigationFilter,\r\n setActiveNavigationFilterStepIndex,\r\n setDefaultSelectionGroup,\r\n changeActivePartRelatedItemIndex,\r\n setVisualizerTutorialStep,\r\n showVisualizerTutorial,\r\n setNavigationLoading,\r\n toggleNavItemPositionModal,\r\n updateCanvasCount,\r\n setLookContextMenu,\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(DesktopNavigation);\r\n","import snakeCase from \"lodash/snakeCase\";\r\nimport {Part} from \"../part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport NonVisualizerSubPart from \"../subparts/nonVisualizerSubPart\";\r\n\r\nexport default class Other extends Part {\r\n static id = 'Other';\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Other';\r\n this.categoryEnabled = false;\r\n }\r\n\r\n load(dbFeature) {\r\n // console.log(\"load other\", dbFeature.groupName);\r\n const partId = snakeCase(dbFeature.groupName);\r\n let relatedItem = this.relatedItems.find(relatedItem => relatedItem.partId === partId);\r\n if (!relatedItem) {\r\n relatedItem = new NonVisualizerSubPart(true, partId, dbFeature.groupName);\r\n this.relatedItems.push(relatedItem);\r\n }\r\n relatedItem.getParent = () => this;\r\n relatedItem.load(dbFeature);\r\n return true\r\n }\r\n\r\n navigationItem() {\r\n return new DesignNavigationItem('Other', this);\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n handleSubPartClick() {\r\n\r\n }\r\n\r\n}\r\n","import {Part} from \"../part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport BackgroundBG from \"../subparts/backgrounds/BackgroundBG\";\r\n\r\nexport default class Background extends Part {\r\n static id = 'Background';\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Background';\r\n this.categoryEnabled = false;\r\n }\r\n\r\n load(dbFeature) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"BG\":\r\n relatedItemName = \"backgroundBG\";\r\n RelatedItemClass = BackgroundBG;\r\n break;\r\n default:\r\n break;\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n navigationItem() {\r\n return new DesignNavigationItem(\"Background\", this);\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n handleSubPartClick() {\r\n\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class BackgroundBG extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'background_bg';\r\n this.partName = 'Background BG';\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new BackgroundBG());\r\n }\r\n}\r\n","import {Part} from \"../part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport {floorThumbnail} from \"../../../kvComponent/core/assets\";\r\n\r\nimport {IntermediatePart} from \"../intermediatePart\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\n\r\nexport default class Floor extends Part {\r\n static id = 'Floor';\r\n\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n this.partId = 'parent_floor';\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Floor';\r\n this.translateId = \"visualizer.kitchen.kitchen_floor\";\r\n this.partThumbnail = floorThumbnail;\r\n }\r\n\r\n load(dbFeature) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Flor\":\r\n case \"Floor\":\r\n relatedItemName = \"floorBody\";\r\n RelatedItemClass = FloorBody;\r\n break;\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n if (relatedItemName !== \"shadows\") {\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n navigationItem() {\r\n return new DesignNavigationItem('Floor', this);\r\n }\r\n\r\n}\r\n\r\nclass FloorBody extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'kitchen_floor';\r\n this.partName = 'Floor';\r\n this.translateId = \"visualizer.kitchen.kitchen_floor\";\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new FloorBody());\r\n }\r\n}\r\n\r\n\r\n","import {Part} from \"../part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\n\r\nimport store from \"../../../../store\";\r\nimport LeftWall from \"../subparts/walls/leftWall\";\r\nimport RightWall from \"../subparts/walls/rightWall\";\r\nimport CenterWall from \"../subparts/walls/centerWall\";\r\nimport FrontWall from \"../subparts/walls/frontWall\";\r\nimport Ceiling from \"../subparts/walls/ceiling\";\r\n\r\nexport default class Walls extends Part {\r\n static id = 'Walls';\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Walls';\r\n this.partThumbnail = \"\";\r\n this.translateId = \"visualizer.kitchen.walls\";\r\n\r\n // related items\r\n this.leftWall = null;\r\n this.rightWall = null;\r\n this.centerWall = null;\r\n this.frontWall = null;\r\n this.ceiling = null;\r\n this.backsplash = null;\r\n }\r\n\r\n load(dbFeature) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Left Wall\":\r\n relatedItemName = \"leftWall\";\r\n RelatedItemClass = LeftWall;\r\n break;\r\n case \"Right Wall\":\r\n relatedItemName = \"rightWall\";\r\n RelatedItemClass = RightWall;\r\n break;\r\n case \"Center Wall\":\r\n relatedItemName = \"centerWall\";\r\n RelatedItemClass = CenterWall;\r\n break;\r\n case \"Front Wall\":\r\n relatedItemName = \"frontWall\";\r\n RelatedItemClass = FrontWall;\r\n break;\r\n case \"Ceiling\":\r\n relatedItemName = \"ceiling\";\r\n RelatedItemClass = Ceiling;\r\n break;\r\n // case \"Shower Shadow\":\r\n // if (\r\n // dbFeature.displayName.includes(\"Shower Shadow - Divider Wall\")\r\n // || dbFeature.displayName.includes(\"Shower Shadow - EX L\")\r\n // || dbFeature.displayName.includes(\"Shower Shadow - EX R\")\r\n // || dbFeature.displayName.includes(\"Shower Shadow - Popout\")\r\n // || dbFeature.displayName.includes(\"Shower Shadow - Pony Wall\")\r\n // ) {\r\n // relatedItemName = \"shadows\";\r\n // RelatedItemClass = Shadow;\r\n // }\r\n // break;\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n if (relatedItemName !== \"shadows\") {\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n navigationItem() {\r\n return new DesignNavigationItem('Walls', this);\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n subParts(withHidden = true) {\r\n return this.relatedItems\r\n .filter(item => this.filterRelatedItem(item, withHidden))\r\n .map(_ => new DesignNavigationItem(_.partName, _));\r\n }\r\n\r\n handleSubPartClick() {\r\n\r\n }\r\n\r\n recoverPrevioslySelected(activeRelatedPart) {\r\n const {activeQuoteIndex} = store.getState().quotesState;\r\n this.relatedItems.forEach(relatedItem => {\r\n if (relatedItem.partId !== activeRelatedPart.partId && relatedItem.activeFeatureBeforeAllWalls) {\r\n if (relatedItem.activeFeatureBeforeAllWalls === \"placeholder\") {\r\n relatedItem.placeholderChanged = false;\r\n relatedItem.firstClick[activeQuoteIndex] = false;\r\n } else if (!relatedItem.selectedByUser) {\r\n relatedItem.activeFeatureBeforeAllWalls.clickFromAllWalls();\r\n }\r\n }\r\n });\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class LeftWall extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'left_wall';\r\n this.partName = 'Left Wall';\r\n this.translateId = \"visualizer.kitchen.walls.left_wall\";\r\n this.activeFeatureBeforeAllWalls = null;\r\n this.allWallsApplied = true;\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new LeftWall());\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class RightWall extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'right_wall';\r\n this.partName = 'Right Wall';\r\n this.translateId = \"visualizer.kitchen.walls.right_wall\";\r\n this.activeFeatureBeforeAllWalls = null;\r\n this.allWallsApplied = true;\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new RightWall());\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class CenterWall extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'center_wall';\r\n this.partName = 'Center Wall';\r\n this.translateId = \"visualizer.bathroom.walls.center_wall\";\r\n this.activeFeatureBeforeAllWalls = null;\r\n this.allWallsApplied = true;\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new CenterWall());\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class FrontWall extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'front_wall';\r\n this.partName = 'Front Wall';\r\n this.translateId = \"visualizer.bathroom.walls.front_wall\";\r\n this.activeFeatureBeforeAllWalls = null;\r\n this.allWallsApplied = true;\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new FrontWall());\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class Ceiling extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'walls_ceiling';\r\n this.partName = 'Ceiling';\r\n this.translateId = \"visualizer.kitchen.walls.walls_ceiling\";\r\n this.isStoneFeature = true;\r\n }\r\n}\r\n","import {Part} from \"../part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport Fireplace from \"../subparts/fireplace/fireplace\";\r\nimport Furniture from \"../subparts/globals/furniture\";\r\n\r\nexport default class FireplaceParent extends Part {\r\n static id = 'Fireplace';\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Fireplace';\r\n this.translateId = \"visualizer.fireplace.fireplace\";\r\n this.categoryEnabled = false;\r\n }\r\n\r\n load(dbFeature) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Fireplace\":\r\n case \"Fierplace\":\r\n relatedItemName = \"fireplace\";\r\n RelatedItemClass = Fireplace;\r\n break;\r\n case \"Furniture\": {\r\n relatedItemName = \"furniture\";\r\n RelatedItemClass = Furniture;\r\n break;\r\n }\r\n default:\r\n break;\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n navigationItem() {\r\n return new DesignNavigationItem(\"Fireplace\", this);\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n handleSubPartClick() {\r\n\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class Fireplace extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'fireplace';\r\n this.partName = 'Fireplace';\r\n this.translateId = \"visualizer.fireplace.fireplace\";\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new Fireplace());\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class Furniture extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = \"furniture\";\r\n this.translateId = \"furniture\";\r\n this.translateId = \"visualizer.fireplace.furniture\";\r\n\r\n this.partName = \"Furniture\";\r\n this.hasAdditionalParts = true;\r\n this.canBeDisabled = true;\r\n }\r\n\r\n}\r\n","import {Part} from \"../part\";\r\nimport {wallsThumbnail} from \"../../../bvComponent/core/assets\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\n\r\nimport Attachment from \"../subparts/globals/attachment\";\r\nimport Decor from \"../subparts/globals/decor\";\r\nimport {DECORS_MAX} from \"../constants\";\r\n\r\nconst compareMountPosition = (checkFeature, dbFeatureLoading) => {\r\n return checkFeature.metaData[\"MountPosition\"] && checkFeature.matchesMetaForCondition(\"MountPosition\", dbFeatureLoading.metaData[\"MountPosition\"])\r\n}\r\n\r\nconst checkForExistingDecor = (currentDecorFeatureGroup, dbFeature) => {\r\n if (!currentDecorFeatureGroup) { // we skipped all decors, but didn't find the same\r\n return true\r\n }\r\n if (dbFeature.sharedFeatureName === currentDecorFeatureGroup.decorName) { // decors are matching by name\r\n return true\r\n }\r\n if (dbFeature.metaData[\"MountPosition\"]) {\r\n if (Array.isArray(dbFeature.metaData[\"RoomLayout\"])) {\r\n return dbFeature.metaData[\"RoomLayout\"].some(layoutName => {\r\n return currentDecorFeatureGroup.featuresList && Array.isArray(currentDecorFeatureGroup.featuresList[layoutName])\r\n && currentDecorFeatureGroup.featuresList[layoutName].some(feature => compareMountPosition(feature, dbFeature))\r\n })\r\n } else {\r\n return currentDecorFeatureGroup.some(feature => compareMountPosition(feature, dbFeature))\r\n }\r\n }\r\n return false\r\n}\r\n\r\nexport default class Globals extends Part {\r\n static id = \"Globals\";\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = \"Globals\";\r\n this.partThumbnail = wallsThumbnail;\r\n\r\n // related items\r\n this.decor1 = null; // can be up to 10\r\n }\r\n\r\n load(dbFeature) {\r\n let\r\n relatedItemName = \"\",\r\n decorCount = 0,\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Decor\":\r\n case \"Decore\": {\r\n for (let i = 1; i <= DECORS_MAX; i++) {\r\n const currentDecorFeatureGroup = this[\"decor\" + i];\r\n if (checkForExistingDecor(currentDecorFeatureGroup, dbFeature)) {\r\n relatedItemName = \"decor\" + i;\r\n decorCount = i;\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n case \"Attachment\": {\r\n relatedItemName = \"attachment\";\r\n RelatedItemClass = Attachment;\r\n break;\r\n }\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n if (dbFeature.groupName === \"Decor\" || dbFeature.groupName === \"Decore\") {\r\n this[relatedItemName] = new Decor(true, decorCount);\r\n this[relatedItemName].decorName = dbFeature.sharedFeatureName;\r\n } else {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n }\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n handleSubPartClick() {}\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport isEqual from \"lodash/isEqual\";\r\n\r\nexport default class Attachment extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = \"attachment\";\r\n this.partName = \"Attachment\";\r\n this.hasAdditionalParts = true;\r\n }\r\n\r\n checkIfFeaturePartIsMatching() {\r\n this.activeFeatureParts = this.setActiveFeatureParts();\r\n }\r\n\r\n setActiveFeatureParts() {\r\n const layout = this.getParent().layout;\r\n const activeFeatures = layout.getActiveFeatures(true, true);\r\n let matchingFeatures = [];\r\n const currentConditions = this.getArrayOfConditions();\r\n const selectFrom = this.features.filter(attFeature => attFeature.matchesMetaForArrayOfConditions(currentConditions));\r\n activeFeatures.forEach(cartItem => {\r\n if (!cartItem.cartFeature || cartItem.featureGroup.disabled || !cartItem.cartFeature.metaData[\"MatchingFeature\"]\r\n || (cartItem.partId === this.partId)) {\r\n return\r\n }\r\n selectFrom.forEach(attFeature => {\r\n if (isEqual(attFeature.metaData[\"MatchingFeature\"], cartItem.cartFeature.metaData[\"MatchingFeature\"])\r\n && isEqual(attFeature.metaData[\"Side\"], cartItem.cartFeature.metaData[\"Side\"])\r\n && !matchingFeatures.some(alreadyAddedFeature => {\r\n return isEqual(attFeature.metaData[\"MatchingFeature\"], alreadyAddedFeature.metaData[\"MatchingFeature\"])\r\n && isEqual(attFeature.metaData[\"Side\"], alreadyAddedFeature.metaData[\"Side\"])\r\n })) {\r\n matchingFeatures.push(attFeature)\r\n }\r\n })\r\n })\r\n return matchingFeatures;\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nexport default class Decor extends IntermediatePart {\r\n constructor(isChild, decorCount) {\r\n super(isChild);\r\n this.decorCount = decorCount;\r\n this.partId = \"decor_\" + decorCount;\r\n this.partName = \"Decor \" + decorCount;\r\n }\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new Decor(false, this.decorCount));\r\n }\r\n\r\n}\r\n","import React from 'react';\r\nimport {connect} from \"react-redux\";\r\nimport classNames from 'classnames';\r\nimport $ from 'jquery';\r\n\r\nimport {\r\n toggleDesktopNavigation,\r\n setActiveNavigationNames,\r\n setModuleContextMenuType,\r\n setActiveNavigationFilter, setActiveNavigationFilterStepIndex, setNavigationViewType, setNavigationLoading\r\n} from \"../../../actions/navigationFunctions\";\r\nimport {setDefaultSelectionGroup, changeActivePartRelatedItemIndex} from \"../../../actions/actionFunctions\";\r\nimport DesktopNavigationCommon from \"../../visComponents/navigation/desktopNavigationCommon\";\r\nimport Z from \"../core/zIndex\";\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\n\r\nimport LockedView from \"../../common/lockedView\";\r\nimport {ContentType} from \"../../visComponents/constants\";\r\nimport ContextMenuSimple from \"./contextMenuSimple\";\r\n// import CabinetContextMenu from \"./cabinetContextMenu\";\r\nimport MobileMenuSelect from \"../../visComponents/navigation/mobile/mobileMenuSelect\";\r\nimport {setVisualizerTutorialStep, showVisualizerTutorial} from \"../../../actions/tutorialFunctions\";\r\n\r\nclass DesktopNavigation extends DesktopNavigationCommon {\r\n\r\n bindCanvasClick = (event) => {\r\n\r\n // const canvas = document.getElementById(this.props.canvasId);\r\n this.props.setHoveredLayer(event);\r\n\r\n if (document.hoveredLayer) {\r\n\r\n const hoveredZone = Z.getMenuByHoveredLayer(document.hoveredLayer);\r\n\r\n // console.log('hoveredZone', hoveredZone);\r\n\r\n if (hoveredZone) {\r\n if (hoveredZone.contextMenuPartId && !this.state.showNavigation) {\r\n if (this.state.contextMenuOpen) {\r\n this.setState({\r\n contextMenuOpen: false,\r\n hoveredLayer: {}\r\n });\r\n } else {\r\n this.openContextMenu(hoveredZone, event);\r\n }\r\n return false;\r\n } else if (this.state.contentType === 0) {\r\n this.setState({\r\n showNavigation: true,\r\n contentType: ContentType.Design,\r\n contextMenuOpen: false,\r\n hoveredLayer: {}\r\n }, () => {\r\n this.setNewActiveFeature();\r\n this.menuOpened();\r\n setTimeout(() => {\r\n $(document).on('click', this.handleWrapperBlur);\r\n }, 0)\r\n });\r\n }\r\n\r\n hoveredZone.child\r\n ? this.triggerOpenNavigationMenu(hoveredZone.child, hoveredZone.parent)\r\n : this.triggerOpenNavigationMenu(hoveredZone)\r\n\r\n }\r\n\r\n }\r\n\r\n };\r\n\r\n openContextMenu = (contextMenuOpen, event) => {\r\n let contextMenuButtons = [];\r\n if (contextMenuOpen.contextMenuPartId === \"top_cabinet\") {\r\n // const hoveredParent = this.props.designNavigationItems.find(navItem => {\r\n // return navItem.text === \"Cabinet\"\r\n // });\r\n // if (hoveredParent) {\r\n //\r\n // }\r\n contextMenuButtons = [1, 2, 3, 4, 5]\r\n }\r\n // const receiveBackSplashes = () => {\r\n // const layout = getCurrentLayout();\r\n // const wallsParent = layout.parts[\"Walls\"];\r\n // const backsplashSubPart = wallsParent.subParts().find(subPart => subPart.part.partId === \"backsplash\");\r\n // this.checkIfAllFeaturesReceived(backsplashSubPart);\r\n // };\r\n switch (contextMenuOpen.contextMenuPartId) {\r\n case \"countertop_group_custom\":\r\n contextMenuOpen = \"Countertop\";\r\n break;\r\n case \"right_wall_custom\":\r\n contextMenuOpen = \"right_wall_custom\";\r\n break;\r\n case \"left_wall_custom\":\r\n contextMenuOpen = \"left_wall_custom\";\r\n break;\r\n case \"backsplash_custom_left\": {\r\n // receiveBackSplashes();\r\n contextMenuOpen = \"backsplash_custom_left\";\r\n break;\r\n }\r\n case \"backsplash_custom_right\": {\r\n // receiveBackSplashes();\r\n contextMenuOpen = \"backsplash_custom_right\";\r\n break;\r\n }\r\n case \"backsplash_custom\": {\r\n // receiveBackSplashes();\r\n contextMenuOpen = \"backsplash_custom\";\r\n break;\r\n }\r\n case \"center_island_custom\":\r\n contextMenuOpen = \"Center Island\";\r\n break;\r\n default:\r\n break;\r\n }\r\n const isMobile = $(window).width() < 991;\r\n\r\n let left = isMobile ? '50%' : event.clientX - 50;\r\n let top = isMobile ? '50%' : event.clientY - 50;\r\n let right = 'auto';\r\n\r\n const maxAllowedWidth = contextMenuButtons.length > 2 ? 300 : 210;\r\n\r\n let maxAllowedHeight = 110;\r\n if (contextMenuButtons.length > 6) {\r\n maxAllowedHeight = 330;\r\n } else if (contextMenuButtons.length > 3) {\r\n maxAllowedHeight = 220;\r\n }\r\n if (!isMobile && (left > window.innerWidth - maxAllowedWidth)) {\r\n left = 'auto';\r\n right = 0\r\n }\r\n if (!isMobile && (top > window.innerHeight - maxAllowedHeight)) {\r\n let negativeMargin = 50;\r\n if (contextMenuButtons.length > 6) {\r\n negativeMargin = 250;\r\n } else if (contextMenuButtons.length > 3) {\r\n negativeMargin = 150;\r\n }\r\n top = top - negativeMargin;\r\n }\r\n this.setState({\r\n contextMenuOpen,\r\n hoveredLayer: document.hoveredLayer,\r\n contextMenuPosition: {\r\n left,\r\n right,\r\n top,\r\n }\r\n });\r\n };\r\n\r\n handleNavigationItemClick = (item, ignoreLocked = false) => {\r\n this.navigationItemClickCommon(item);\r\n this.itemClick(item, ignoreLocked);\r\n\r\n const updateSideBarIds = [\"center_island_cabinet\", \"top_cabinet\"];\r\n if (updateSideBarIds.includes(item.part.partId)) {\r\n this.updateSideBar();\r\n }\r\n\r\n if (this.state.parentNavigationItem) { // update canvas only if it is child\r\n this.props.refreshCB();\r\n }\r\n };\r\n\r\n render() {\r\n const layout = getCurrentLayout();\r\n // const fabricatorSettings = this.props.fabricatorSettings;\r\n const activePart = this.state.parentNavigationItem ? this.state.parentNavigationItem.part : null;\r\n const activeSubPart = this.state.childNavigationItem ? this.state.childNavigationItem.part : null;\r\n // const activeNavPart = activeSubPart || activePart;\r\n const parentItems = layout.designNavigationItems(); // parent list without filters\r\n\r\n const useWizard = false, wizardGroups = [];\r\n\r\n let showNavigationFiltersSteps = false;\r\n\r\n if (activeSubPart && activeSubPart.canUseNavigationFilterSteps\r\n && activeSubPart.canUseNavigationFilterSteps()) {\r\n showNavigationFiltersSteps = !this.props.countertopNavigationFilterCompleted;\r\n }\r\n\r\n const showLockedView = this.currentActiveItemIsLocked(useWizard);\r\n\r\n const useFilters = false;\r\n const availableNavButtons = [ContentType.Design, ContentType.Layout, ContentType.DisplayRoom];\r\n\r\n return (\r\n
    \r\n \r\n
    this.navWrapper = node}>\r\n
    \r\n
    \r\n {this.content(useWizard, wizardGroups, useFilters, activePart, activeSubPart)}\r\n
    \r\n
    \r\n {this.navigationMenuButtons(availableNavButtons)}\r\n {showNavigationFiltersSteps ? null : (\r\n
    \r\n \r\n
    \r\n )}\r\n {/*
    */}\r\n {/*
    */}\r\n {/**/}\r\n {/*
    */}\r\n {/*
    */}\r\n
    \r\n {this.state.contextMenuOpen && !this.state.contextMenuOpen.module\r\n ? \r\n : null}\r\n
    \r\n {showLockedView\r\n ? \r\n : null}\r\n
    \r\n )\r\n }\r\n\r\n}\r\n\r\nconst mapStateToProps = (store) => ({\r\n filtersVisible: store.filterState.showFilters,\r\n filterGroups: store.filterState.filterGroups,\r\n bvPresets: store.bathroomVisualizerState.bvPresets,\r\n userIsLoggedIn: store.userState.userIsLoggedIn,\r\n isPhoneNumberValidated: store.userState.isPhoneNumberValidated,\r\n activeNavigationFilter: store.navigationState.activeNavigationFilter,\r\n countertopNavigationFilterCompleted: store.navigationState.countertopNavigationFilterCompleted,\r\n visualizerTutorialStep: store.tutorialState.visualizerTutorialStep,\r\n visualizerTutorialIsOpened: store.tutorialState.visualizerTutorialIsOpened,\r\n activeQuoteIndex: store.quotesState.activeQuoteIndex,\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n setNavigationViewType,\r\n toggleDesktopNavigation,\r\n setActiveNavigationNames,\r\n setModuleContextMenuType,\r\n setActiveNavigationFilter,\r\n setActiveNavigationFilterStepIndex,\r\n setDefaultSelectionGroup,\r\n changeActivePartRelatedItemIndex,\r\n setVisualizerTutorialStep,\r\n showVisualizerTutorial,\r\n setNavigationLoading\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(DesktopNavigation);\r\n","import React from 'react';\r\nimport {connect} from 'react-redux';\r\nimport {injectIntl} from \"react-intl\";\r\n\r\nimport MobileNavigationCommon from \"../../visComponents/navigation/mobileNavigationCommon\";\r\n\r\nimport {ContentType} from \"../../visComponents/constants\";\r\nimport Z from \"../core/zIndex\";\r\n\r\nimport MobileNavigationButtons from '../../visComponents/navigation/mobile/mobileNavigationButtons';\r\nimport MobileNavigationAllWallsCheckbox from '../../visComponents/navigation/mobile/mobileNavigationAllWallsCheckbox';\r\nimport FeatureWizardSteps from \"../../visComponents/navigation/featureWizard/featureWizardSteps\";\r\n\r\nimport {changeActivePartRelatedItemIndex, setDefaultSelectionGroup} from \"../../../actions/actionFunctions\";\r\nimport {\r\n setActiveNavigationFilter,\r\n setModuleContextMenuType,\r\n setModuleContextMenuModule,\r\n setActiveNavigationFilterStepIndex, setNavigationViewType, setNavigationLoading\r\n} from \"../../../actions/navigationFunctions\";\r\n\r\nimport MobileMenuSelect from '../../visComponents/navigation/mobile/mobileMenuSelect';\r\nimport LockedView from \"../../common/lockedView\";\r\n\r\nimport Filters from \"../../visComponents/navigation/newFilters/filters\";\r\nimport BodyPanelRadio from \"../../visComponents/navigation/desktop/bodyPanelRadio\";\r\nimport FilterSwitchers from \"../../visComponents/navigation/newFilters/filterSwitchers\";\r\nimport FilterSelection from \"../../visComponents/navigation/newFilters/filterSelection\";\r\n// import {CABINET_WIZARD_BUTTONS} from \"../core/constants\";\r\nimport NavigationFiltersSteps from \"../../visComponents/navigation/newFilters/navigationFiltersSteps\";\r\nimport ContextMenuSimple from \"./contextMenuSimple\";\r\n\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\n\r\nclass MobileNavigation extends MobileNavigationCommon {\r\n\r\n componentWillReceiveProps(nextProps) {\r\n this._componentWillReceiveProps(nextProps)\r\n }\r\n\r\n bindCanvasClick = (event) => {\r\n // console.log(\"bindCanvasClick event\");\r\n\r\n if (!window.touchMove && !this.state.showNavigation && !this.state.contextMenuOpen) {\r\n this.props.setHoveredLayer(event);\r\n }\r\n\r\n if (document.hoveredLayer && !window.touchMove) {\r\n // $('.canvas-text').html(`CLICK3`);\r\n const hoveredZone = Z.getMenuByHoveredLayer(document.hoveredLayer);\r\n if (hoveredZone) {\r\n if (hoveredZone.contextMenuPartId && !this.state.showNavigation) {\r\n if (this.state.contextMenuOpen) {\r\n this.setState({\r\n contextMenuOpen: false,\r\n hoveredLayer: {}\r\n });\r\n document.removeEventListener('click', this.handleContextMenuBlur);\r\n } else {\r\n let contextMenuOpen = \"\";\r\n\r\n const receiveBackSplashes = () => {\r\n const layout = getCurrentLayout();\r\n const wallsParent = layout.parts[\"Walls\"];\r\n const backsplashSubPart = wallsParent.subParts().find(subPart => subPart.part.partId === \"backsplash\");\r\n this.checkIfAllFeaturesReceived(backsplashSubPart);\r\n };\r\n\r\n switch (hoveredZone.contextMenuPartId) {\r\n case \"countertop_group_custom\":\r\n contextMenuOpen = \"Countertop\";\r\n break;\r\n case \"right_wall_custom\":\r\n contextMenuOpen = \"right_wall_custom\";\r\n break;\r\n case \"left_wall_custom\":\r\n contextMenuOpen = \"left_wall_custom\";\r\n break;\r\n case \"backsplash_custom_left\": {\r\n receiveBackSplashes();\r\n contextMenuOpen = \"backsplash_custom_left\";\r\n break;\r\n }\r\n case \"backsplash_custom_right\": {\r\n receiveBackSplashes();\r\n contextMenuOpen = \"backsplash_custom_right\";\r\n break;\r\n }\r\n case \"backsplash_custom\": {\r\n receiveBackSplashes();\r\n contextMenuOpen = \"backsplash_custom\";\r\n break;\r\n }\r\n case \"center_island_custom\":\r\n contextMenuOpen = \"Center Island\";\r\n break;\r\n default:\r\n break;\r\n }\r\n this.setState({\r\n contextMenuOpen: contextMenuOpen || hoveredZone,\r\n hoveredLayer: document.hoveredLayer\r\n }, () => {\r\n if (contextMenuOpen) {\r\n setTimeout(() => {\r\n document.addEventListener('click', this.handleContextMenuBlur);\r\n }, 0)\r\n }\r\n });\r\n }\r\n return false;\r\n } else if (this.state.contentType === 0) {\r\n if (!window.canvasIsDragging) {\r\n this.props.setCanvasClass((hoveredZone.child || hoveredZone.parent || hoveredZone).toLowerCase().replace(/ /g, \"-\"));\r\n }\r\n this.openMobileMenu();\r\n }\r\n\r\n hoveredZone.child\r\n ? this.triggerOpenNavigationMenu(hoveredZone.child, hoveredZone.parent, false)\r\n : this.triggerOpenNavigationMenu(hoveredZone)\r\n\r\n }\r\n\r\n }\r\n\r\n };\r\n\r\n handleNavigationItemClick = (item, ignoreLocked = false) => {\r\n\r\n if (window.location.port === '9007' || document.kvConfig.kioskMode) {\r\n console.log('item', item);\r\n }\r\n this.itemClick(item, ignoreLocked);\r\n\r\n this.props.setActiveFeature(item.part);\r\n\r\n const canvasClass = this.state.childNavigationItem\r\n ? this.state.parentNavigationItem.text + '-' + this.state.childNavigationItem.text\r\n : this.state.parentNavigationItem.text;\r\n\r\n if (!window.canvasIsDragging) {\r\n this.props.setCanvasClass(canvasClass.toLowerCase().replace(/ /g, \"-\"));\r\n }\r\n\r\n if (this.state.parentNavigationItem) { // update canvas only if it is child\r\n this.props.refreshCB();\r\n }\r\n if (item.part.partId === \"top_cabinet\" && !item.part.metaData[\"Module\"]) {\r\n this.props.setModuleContextMenuModule(null)\r\n }\r\n };\r\n\r\n handleSubPartClick = (subNavigationItem, activeNavigationFilter = null) => { // sidebar list item click\r\n const subItemPart = subNavigationItem.part;\r\n const childNavigationItemPartId = subItemPart.partId;\r\n subItemPart.getParent().handleSubPartClick(subItemPart);\r\n this.setState({\r\n childNavigationItem: subNavigationItem,\r\n showFilterSelection: subItemPart.allFeaturesReceived, // show filters only if subItemPart has all features\r\n showerWallWizardGroupsSelected: false,\r\n searchText: \"\"\r\n }, () => {\r\n this.scrollContentToTop();\r\n this.rememberWallsSelection();\r\n this.checkIfAllFeaturesReceived(subNavigationItem, \"childNavigationItem\");\r\n });\r\n /*set new materials page subIndex*/\r\n this.setActivePartRelatedItemIndex(subNavigationItem);\r\n // console.log('subItemPart', subItemPart);\r\n if (!window.canvasIsDragging) {\r\n const canvasClass = this.state.parentNavigationItem.text + '-' + subNavigationItem.text\r\n .toLowerCase().replace(/ /g, \"-\");\r\n this.props.setCanvasClass(canvasClass);\r\n }\r\n this.setNewActiveFeature(subNavigationItem);\r\n\r\n this.setNavigationFilterIfTheChildWasChanged(childNavigationItemPartId, activeNavigationFilter);\r\n\r\n };\r\n\r\n backsplashSelectClick = () => {\r\n this.props.refreshCB(); // update canvas\r\n this.reRenderComponent(); // update nav items\r\n };\r\n\r\n render() {\r\n const layout = getCurrentLayout();\r\n const activePart = this.state.parentNavigationItem ? this.state.parentNavigationItem.part : null;\r\n const activeSubPart = this.state.childNavigationItem ? this.state.childNavigationItem.part : null;\r\n const activeNavPart = activeSubPart || activePart;\r\n const parentItems = layout.designNavigationItems(); // parent list without filters\r\n const allFeaturesReceived = activeNavPart && activeNavPart.allFeaturesReceived;\r\n\r\n // console.log('activePart', activePart);\r\n // console.log('activeSubPart', activeSubPart);\r\n // console.log('activePart.subTypes()', activePart && activePart.subTypes());\r\n // console.log('this.state.childNavigationItemv1111', this.state.childNavigationItem);\r\n\r\n let useWizard = false;\r\n let wizardGroups = [];\r\n if (this.props.fabricatorSettings\r\n && (this.props.fabricatorSettings.wizardConsumers || (this.props.fabricatorSettings.wizardClients && document.kvConfig.isBackend))\r\n && this.state.contentType === ContentType.Design && activeSubPart && activeSubPart.canUseWizard && activeSubPart.allFeaturesReceived) {\r\n useWizard = true;\r\n wizardGroups = this.state[this.getWizardGroupsByPartId(this.state.childNavigationItem.part.partId)];\r\n }\r\n\r\n const features = this.getFeatures(layout);\r\n\r\n const showLockedView = this.currentActiveItemIsLocked(useWizard);\r\n\r\n const useFilters = (activePart && activePart.partId === \"kitchen_floor\" && activePart.allFeaturesReceived)\r\n || (activeSubPart && (this.isWallItem(activeSubPart) || activeSubPart.partId === \"accent_wall\"\r\n || activeSubPart.partId === \"shower_interior_wall_accent\") && activeSubPart.allFeaturesReceived);\r\n\r\n const filterSelectionHasValues = activeNavPart && FilterSelection.getAvailableFilterValues(\r\n this.props.filterGroups, \"Material\", activeNavPart, this.props.fabricatorData\r\n ).length;\r\n\r\n const itemIsSelected = (!this.props.fabricatorSettings.leadCapture\r\n || (activeSubPart && activeSubPart.activeFeature && activeSubPart.firstClick[this.props.activeQuoteIndex] && activeSubPart.placeholderChanged));\r\n\r\n const useKVWizard = false;\r\n //TODO change it when BE is ready\r\n\r\n const showNavigationFilters = useKVWizard &&activeNavPart\r\n // && this.props.activeNavigationFilter !== CABINET_WIZARD_BUTTONS[0].buttonId\r\n && activeNavPart.canUseNavigationFilter && activeNavPart.canUseNavigationFilter();\r\n\r\n let showNavigationFiltersSteps = false;\r\n if (useKVWizard && activeNavPart && activeNavPart.canUseNavigationFilterSteps\r\n && activeNavPart.canUseNavigationFilterSteps()) {\r\n showNavigationFiltersSteps = !this.props.countertopNavigationFilterCompleted;\r\n }\r\n\r\n const cabinetsPartIds = [\"top_cabinet\", \"bottom_cabinet\", \"center_island_cabinet\"];\r\n const isCabinet = activeSubPart && cabinetsPartIds.includes(activeSubPart.partId);\r\n const countertopPartIds = [\"countertop\", \"backsplash\", \"center_island_countertop\"];\r\n const isCountertop = activeSubPart && countertopPartIds.includes(activeSubPart.partId);\r\n\r\n return (\r\n
    \r\n
    \r\n {/*
    \r\n
    \r\n {this.state.contextMenuOpen && !this.state.contextMenuOpen.module\r\n ? \r\n : null}\r\n {showLockedView\r\n ? \r\n : null}\r\n \r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => ({\r\n fabricatorData: store.fabricatorState,\r\n selectedFilters: store.filterState.selectedFilters,\r\n filtersVisible: store.filterState.showFilters,\r\n filterGroups: store.filterState.filterGroups,\r\n bvPresets: store.bathroomVisualizerState.bvPresets,\r\n userPopupOpened: store.userState.userPopupOpened,\r\n activeNavigationFilter: store.navigationState.activeNavigationFilter,\r\n countertopNavigationFilterCompleted: store.navigationState.countertopNavigationFilterCompleted,\r\n newLayoutType: store.sqftState.newLayoutType,\r\n activeQuoteIndex: store.quotesState.activeQuoteIndex,\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n setNavigationViewType,\r\n setModuleContextMenuType,\r\n setDefaultSelectionGroup,\r\n changeActivePartRelatedItemIndex,\r\n setActiveNavigationFilter,\r\n setActiveNavigationFilterStepIndex,\r\n setModuleContextMenuModule,\r\n setNavigationLoading\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(MobileNavigation)\r\n);\r\n","import {LayoutType} from \"./constants\";\r\nimport {UseFullSizeImages} from \"../../../config\";\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\n\r\nlet layouts = {};\r\nObject.keys(LayoutType).forEach(layoutName => {\r\n layouts[layoutName] = {\r\n center_island_sink: 3100,\r\n walls_ceiling: 50900,\r\n kitchen_floor: 50025,\r\n // slat_wall: 50020,\r\n shower_wall_mirror: 50050,\r\n back_wall: 50100,\r\n front_wall: 50200,\r\n left_wall: 50500,\r\n right_wall: 54000,\r\n background_bg: 70000,\r\n };\r\n});\r\n\r\nconst getLayerDimensions = (layer, currentLayout, canvasDimensions) => {\r\n const fullImagesFactor = UseFullSizeImages ? 177.77 : 100;\r\n const sizeFactor = fullImagesFactor / 100;\r\n const {coords} = layer;\r\n\r\n if (!coords) {\r\n return null\r\n }\r\n\r\n const COORDS_MAX = 1;\r\n\r\n const x1Percentage = (coords.min_x * 100) / COORDS_MAX;\r\n const x2Percentage = (coords.max_x * 100) / COORDS_MAX;\r\n const y1Percentage = (coords.min_y * 100) / COORDS_MAX;\r\n const y2Percentage = (coords.max_y * 100) / COORDS_MAX;\r\n let x1 = sizeFactor*((canvasDimensions.width * x1Percentage) / 100);\r\n let x2 = sizeFactor*((canvasDimensions.width * x2Percentage) / 100);\r\n let y1 = sizeFactor*((canvasDimensions.height * y1Percentage) / 100);\r\n let y2 = sizeFactor*((canvasDimensions.height * y2Percentage) / 100);\r\n return {\r\n polygonArray: [[x1, y1], [x2, y1], [x2, y2], [x1, y2]],\r\n width: (x2 - x1),\r\n height:(y2 - y1)\r\n };\r\n};\r\n\r\nconst getMenuByHoveredLayer = (layer) => {\r\n const layout = getCurrentLayout();\r\n const featureGroup = layout.getFeatureGroupByPartId(layer.partId);\r\n if (featureGroup) {\r\n return {\r\n parent: featureGroup.getParent().partName,\r\n child: featureGroup.partName\r\n }\r\n }\r\n return \"\"\r\n};\r\n\r\nexport default {\r\n layouts,\r\n getMenuByHoveredLayer,\r\n getLayerDimensions\r\n}\r\n\r\n\r\n","import snakeCase from \"lodash/snakeCase\";\r\nimport {Part} from \"../part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport NonVisualizerSubPart from \"../subparts/nonVisualizerSubPart\";\r\n\r\nexport default class Other extends Part {\r\n static id = 'Other';\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Other';\r\n this.categoryEnabled = false;\r\n }\r\n\r\n load(dbFeature) {\r\n // console.log(\"load other\", dbFeature.groupName);\r\n const partId = snakeCase(dbFeature.groupName);\r\n let relatedItem = this.relatedItems.find(relatedItem => relatedItem.partId === partId);\r\n if (!relatedItem) {\r\n relatedItem = new NonVisualizerSubPart(true, partId, dbFeature.groupName);\r\n this.relatedItems.push(relatedItem);\r\n }\r\n relatedItem.getParent = () => this;\r\n relatedItem.load(dbFeature);\r\n return true\r\n }\r\n\r\n navigationItem() {\r\n return new DesignNavigationItem('Other', this);\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n handleSubPartClick() {\r\n\r\n }\r\n\r\n}\r\n","import {Part} from \"../part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport BackgroundBG from \"../subparts/backgrounds/BackgroundBG\";\r\n\r\nexport default class Background extends Part {\r\n static id = 'Background';\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Background';\r\n this.categoryEnabled = false;\r\n }\r\n\r\n load(dbFeature) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"BG\":\r\n relatedItemName = \"backgroundBG\";\r\n RelatedItemClass = BackgroundBG;\r\n break;\r\n default:\r\n break;\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n navigationItem() {\r\n return new DesignNavigationItem(\"Background\", this);\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n handleSubPartClick() {\r\n\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class BackgroundBG extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'background_bg';\r\n this.partName = 'Background BG';\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new BackgroundBG());\r\n }\r\n}\r\n","import {Part} from \"../part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport {floorThumbnail} from \"../../../kvComponent/core/assets\";\r\n\r\nimport {IntermediatePart} from \"../intermediatePart\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\n\r\nexport default class Floor extends Part {\r\n static id = 'Floor';\r\n\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n this.partId = 'parent_floor';\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Floor';\r\n this.translateId = \"visualizer.kitchen.kitchen_floor\";\r\n this.partThumbnail = floorThumbnail;\r\n }\r\n\r\n load(dbFeature) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Flor\":\r\n case \"Floor\":\r\n relatedItemName = \"floorBody\";\r\n RelatedItemClass = FloorBody;\r\n break;\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n if (relatedItemName !== \"shadows\") {\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n navigationItem() {\r\n return new DesignNavigationItem('Floor', this);\r\n }\r\n\r\n}\r\n\r\nclass FloorBody extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'kitchen_floor';\r\n this.partName = 'Floor';\r\n this.translateId = \"visualizer.kitchen.kitchen_floor\";\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new FloorBody());\r\n }\r\n}\r\n\r\n\r\n","import {Part} from \"../part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\n\r\nimport LeftWall from \"../subparts/walls/leftWall\";\r\nimport RightWall from \"../subparts/walls/rightWall\";\r\nimport CenterWall from \"../subparts/walls/centerWall\";\r\nimport FrontWall from \"../subparts/walls/frontWall\";\r\n\r\nexport default class Walls extends Part {\r\n static id = 'Walls';\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Walls';\r\n this.partThumbnail = \"\";\r\n this.translateId = \"visualizer.kitchen.walls\";\r\n\r\n // related items\r\n this.leftWall = null;\r\n this.rightWall = null;\r\n this.centerWall = null;\r\n this.frontWall = null;\r\n this.ceiling = null;\r\n this.backsplash = null;\r\n }\r\n\r\n load(dbFeature) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Left Wall\":\r\n relatedItemName = \"leftWall\";\r\n RelatedItemClass = LeftWall;\r\n break;\r\n case \"Right Wall\":\r\n relatedItemName = \"rightWall\";\r\n RelatedItemClass = RightWall;\r\n break;\r\n case \"Center Wall\":\r\n relatedItemName = \"centerWall\";\r\n RelatedItemClass = CenterWall;\r\n break;\r\n case \"Front Wall\":\r\n relatedItemName = \"frontWall\";\r\n RelatedItemClass = FrontWall;\r\n break;\r\n // case \"Shower Shadow\":\r\n // if (\r\n // dbFeature.displayName.includes(\"Shower Shadow - Divider Wall\")\r\n // || dbFeature.displayName.includes(\"Shower Shadow - EX L\")\r\n // || dbFeature.displayName.includes(\"Shower Shadow - EX R\")\r\n // || dbFeature.displayName.includes(\"Shower Shadow - Popout\")\r\n // || dbFeature.displayName.includes(\"Shower Shadow - Pony Wall\")\r\n // ) {\r\n // relatedItemName = \"shadows\";\r\n // RelatedItemClass = Shadow;\r\n // }\r\n // break;\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n if (relatedItemName !== \"shadows\") {\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n navigationItem() {\r\n return new DesignNavigationItem('Walls', this);\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class LeftWall extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'left_wall';\r\n this.partName = 'Left Wall';\r\n this.translateId = \"visualizer.kitchen.walls.left_wall\";\r\n this.activeFeatureBeforeAllWalls = null;\r\n this.allWallsApplied = true;\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new LeftWall());\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class RightWall extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'right_wall';\r\n this.partName = 'Right Wall';\r\n this.translateId = \"visualizer.kitchen.walls.right_wall\";\r\n this.activeFeatureBeforeAllWalls = null;\r\n this.allWallsApplied = true;\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new RightWall());\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class CenterWall extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'center_wall';\r\n this.partName = 'Center Wall';\r\n this.translateId = \"visualizer.bathroom.walls.center_wall\";\r\n this.activeFeatureBeforeAllWalls = null;\r\n this.allWallsApplied = true;\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new CenterWall());\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class FrontWall extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'front_wall';\r\n this.partName = 'Front Wall';\r\n this.translateId = \"visualizer.bathroom.walls.front_wall\";\r\n this.activeFeatureBeforeAllWalls = null;\r\n this.allWallsApplied = true;\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new FrontWall());\r\n }\r\n\r\n}\r\n","import {Part} from \"../part\";\r\nimport {wallsThumbnail} from \"../../../bvComponent/core/assets\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\n\r\nimport Decor from \"../subparts/globals/decor\";\r\nimport {DECORS_MAX} from \"../constants\";\r\nimport Basket from \"../subparts/globals/basket\";\r\n\r\nconst compareMountPosition = (checkFeature, dbFeatureLoading) => {\r\n return checkFeature.metaData[\"MountPosition\"] && checkFeature.matchesMetaForCondition(\"MountPosition\", dbFeatureLoading.metaData[\"MountPosition\"])\r\n}\r\n\r\nconst checkForExistingDecor = (currentDecorFeatureGroup, dbFeature) => {\r\n if (!currentDecorFeatureGroup) { // we skipped all decors, but didn't find the same\r\n return true\r\n }\r\n if (dbFeature.sharedFeatureName === currentDecorFeatureGroup.decorName) { // decors are matching by name\r\n return true\r\n }\r\n if (dbFeature.metaData[\"MountPosition\"]) {\r\n if (Array.isArray(dbFeature.metaData[\"RoomLayout\"])) {\r\n return dbFeature.metaData[\"RoomLayout\"].some(layoutName => {\r\n return currentDecorFeatureGroup.featuresList && Array.isArray(currentDecorFeatureGroup.featuresList[layoutName])\r\n && currentDecorFeatureGroup.featuresList[layoutName].some(feature => compareMountPosition(feature, dbFeature))\r\n })\r\n } else {\r\n return currentDecorFeatureGroup.some(feature => compareMountPosition(feature, dbFeature))\r\n }\r\n }\r\n return false\r\n}\r\n\r\nexport default class Globals extends Part {\r\n static id = \"Globals\";\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = \"Globals\";\r\n this.partThumbnail = wallsThumbnail;\r\n\r\n // related items\r\n this.decor1 = null; // can be up to 10\r\n this.basket = null; // can be up to 10\r\n }\r\n\r\n load(dbFeature) {\r\n let\r\n relatedItemName = \"\",\r\n decorCount = 0,\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Decor\":\r\n case \"Decore\": {\r\n for (let i = 1; i <= DECORS_MAX; i++) {\r\n const currentDecorFeatureGroup = this[\"decor\" + i];\r\n if (checkForExistingDecor(currentDecorFeatureGroup, dbFeature)) {\r\n relatedItemName = \"decor\" + i;\r\n decorCount = i;\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n // case \"Attachment\": {\r\n // relatedItemName = \"attachment\";\r\n // RelatedItemClass = Attachment;\r\n // break;\r\n // }\r\n case \"Basket\": {\r\n relatedItemName = \"basket\";\r\n RelatedItemClass = Basket;\r\n break;\r\n }\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n if (dbFeature.groupName === \"Decor\" || dbFeature.groupName === \"Decore\") {\r\n this[relatedItemName] = new Decor(true, decorCount);\r\n this[relatedItemName].decorName = dbFeature.sharedFeatureName;\r\n } else {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n }\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n handleSubPartClick() {}\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nexport default class Decor extends IntermediatePart {\r\n constructor(isChild, decorCount) {\r\n super(isChild);\r\n this.decorCount = decorCount;\r\n this.partId = \"decor_\" + decorCount;\r\n this.partName = \"Decor \" + decorCount;\r\n }\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new Decor(false, this.decorCount));\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class Basket extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'basket';\r\n this.partName = 'Basket';\r\n this.translateId = \"visualizer.bathroom.basket\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n}\r\n","import {Part} from \"../part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\n\r\nimport CabinetLeg from \"../subparts/cabinet/cabinetLeg\";\r\nimport Countertop from \"../subparts/cabinet/countertop\";\r\nimport Hook from \"../subparts/cabinet/hook\";\r\nimport CabinetGroup from \"../subparts/cabinet/cabinetGroup\";\r\nimport Slatwall from \"../subparts/cabinet/slatwall\";\r\nimport OverheadRack from \"../subparts/cabinet/overheadRack\";\r\nimport BottomCabinet from \"../subparts/cabinet/bottomCabinet\";\r\nimport TopCabinet from \"../subparts/cabinet/topCabinet\";\r\nimport TallCabinet from \"../subparts/cabinet/tallCabinet\";\r\nimport TallHandle from \"../subparts/cabinet/tallHandle\";\r\nimport TallCabinetLeg from \"../subparts/cabinet/tallCabinetLeg\";\r\nimport TopHandle from \"../subparts/cabinet/topHandle\";\r\nimport BottomHandle from \"../subparts/cabinet/bottomHandle\";\r\nimport BottomCabinetLeg from \"../subparts/cabinet/bottomCabinetLeg\";\r\n\r\nexport default class Cabinet extends Part {\r\n static id = 'Cabinet';\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Cabinet';\r\n this.partThumbnail = \"\";\r\n this.translateId = \"visualizer.kitchen.cabinet\";\r\n\r\n // related items\r\n this.worktop = null;\r\n this.cabinetLeg = null;\r\n this.hook = null;\r\n this.slatWall = null;\r\n this.tallCabinet = null;\r\n this.tallHandle = null;\r\n this.tallCabinetLeg = null;\r\n this.relatedGroupNames = [\"Countertop\", \"Bottom Handle\", \"Top Handle\", \"Bottom Cabinet\", \"Top Cabinet\",\r\n \"Bottom Cabinet Leg\", \"Tall Cabinet\", \"Tall Cabinet Leg\", \"Tall Handle\"];\r\n }\r\n\r\n load(dbFeature) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Worktop\":\r\n case \"Countertop\":\r\n relatedItemName = \"countertop\";\r\n RelatedItemClass = Countertop;\r\n break;\r\n case \"Cabinet Leg\":\r\n relatedItemName = \"cabinetLeg\";\r\n RelatedItemClass = CabinetLeg;\r\n break;\r\n case \"Bottom Cabinet Leg\":\r\n relatedItemName = \"bottomCabinetLeg\";\r\n RelatedItemClass = BottomCabinetLeg;\r\n break;\r\n case \"Cabinet\":\r\n relatedItemName = \"cabinetGroup\";\r\n RelatedItemClass = CabinetGroup;\r\n break;\r\n case \"Hook\":\r\n case \"Double Hook\":\r\n case \"Kayak Hook\":\r\n case \"Single Hook\":\r\n case \"Vertical Bike Hook\":\r\n relatedItemName = \"hook\";\r\n RelatedItemClass = Hook;\r\n break;\r\n case \"Slatwall\":\r\n case \"Slat Wall\":\r\n relatedItemName = \"slatWall\";\r\n RelatedItemClass = Slatwall;\r\n break;\r\n case \"Overhead Rack\":\r\n relatedItemName = \"Overhead Rack\";\r\n RelatedItemClass = OverheadRack;\r\n break;\r\n case \"Bottom Cabinet\":\r\n relatedItemName = \"bottomCabinet\";\r\n RelatedItemClass = BottomCabinet;\r\n break;\r\n case \"Top Cabinet\":\r\n relatedItemName = \"topCabinet\";\r\n RelatedItemClass = TopCabinet;\r\n break;\r\n case \"Tall Cabinet\":\r\n relatedItemName = \"tallCabinet\";\r\n RelatedItemClass = TallCabinet;\r\n break;\r\n case \"Tall Handle\":\r\n case \"Tall Cabinet Handle\":\r\n relatedItemName = \"tallHandle\";\r\n RelatedItemClass = TallHandle;\r\n break;\r\n case \"Tall Cabinet Leg\":\r\n relatedItemName = \"tallCabinetLeg\";\r\n RelatedItemClass = TallCabinetLeg;\r\n break;\r\n case \"Top Handle\":\r\n relatedItemName = \"topHandle\";\r\n RelatedItemClass = TopHandle;\r\n break;\r\n case \"Bottom Handle\":\r\n relatedItemName = \"bottomHandle\";\r\n RelatedItemClass = BottomHandle;\r\n break;\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n if (relatedItemName !== \"shadows\") {\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n navigationItem() {\r\n return new DesignNavigationItem('Cabinet', this);\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class CabinetLeg extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'cabinet_leg';\r\n this.partName = 'Cabinet Leg';\r\n this.translateId = \"visualizer.laundryRoom.cabinetLeg\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class Countertop extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'countertop';\r\n this.partName = 'Countertop';\r\n this.translateId = \"visualizer.kitchen.countertop.countertop\";\r\n this.isStoneFeature = true;\r\n this.canBeDisabled = true;\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class Hook extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'hook';\r\n this.partName = 'Hook';\r\n this.translateId = \"visualizer.laundryRoom.hook\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class CabinetGroup extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'cabinet_group';\r\n this.partName = 'Cabinet';\r\n this.translateId = \"visualizer.kitchen.cabinet\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {SLAT_WALL_POSITIONS} from \"../../constants\";\r\n\r\nexport default class SlatWall extends IntermediatePart {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'slat_wall';\r\n this.partName = 'Slatwall';\r\n this.translateId = \"visualizer.kitchen.walls.slat_wall\";\r\n this.activeFeatureBeforeAllWalls = null;\r\n this.allWallsApplied = true;\r\n this.isStoneFeature = true;\r\n this.slatWallType = SLAT_WALL_POSITIONS[0];\r\n this.hasAdditionalParts = true;\r\n }\r\n\r\n load(dbFeature) {\r\n if (!dbFeature.metaData[\"Part\"]) {\r\n dbFeature.metaData[\"Part\"] = [\"2\"];\r\n }\r\n if (!dbFeature.metaData[\"Height\"]) {\r\n dbFeature.metaData[\"Height\"] = [\"2\"];\r\n }\r\n const isMainFeature = (dbFeature.metaData[\"Part\"][0] === \"2\") && (dbFeature.metaData[\"Height\"][0] === \"2\");\r\n return super.load_(dbFeature, new SlatWall(false, SlatWall),\r\n true, isMainFeature ? 'features' : 'featuresParts');\r\n }\r\n\r\n setActiveFeatureParts(fromFeature = this.activeFeature, activeFeatureConditions = []) {\r\n if (!fromFeature) {\r\n return []\r\n }\r\n const currentConditions = activeFeatureConditions || this.getArrayOfConditions();\r\n const name1 = fromFeature.getSplittedFeatureName();\r\n const parts = this.featuresParts.filter(attFeature => {\r\n if (!attFeature.matchesMetaForArrayOfConditions(currentConditions) || (name1 !== attFeature.getSplittedFeatureName())) {\r\n return false\r\n }\r\n switch (this.slatWallType) {\r\n case SLAT_WALL_POSITIONS[0]: // center horizontal\r\n return (attFeature.matchesMetaForCondition(\"Part\", \"1\") && attFeature.matchesMetaForCondition(\"Height\", \"2\"))\r\n || (attFeature.matchesMetaForCondition(\"Part\", \"3\") && attFeature.matchesMetaForCondition(\"Height\", \"2\"))\r\n case SLAT_WALL_POSITIONS[1]:\r\n return false // only one center feature\r\n case SLAT_WALL_POSITIONS[2]: // center vertical\r\n return (attFeature.matchesMetaForCondition(\"Part\", \"2\") && attFeature.matchesMetaForCondition(\"Height\", \"1\"))\r\n || (attFeature.matchesMetaForCondition(\"Part\", \"2\") && attFeature.matchesMetaForCondition(\"Height\", \"3\"))\r\n case SLAT_WALL_POSITIONS[3]:\r\n return true // full wall, all are matching\r\n }\r\n });\r\n console.log(\"parts\", name1, parts);\r\n return parts\r\n }\r\n\r\n showLayerPositionsModal() {\r\n return true\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class OverheadRack extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'overhead_rack';\r\n this.partName = 'Overhead Rack';\r\n this.translateId = \"visualizer.laundryRoom.overheadRack\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class BottomCabinet extends IntermediatePart {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'bottom_cabinet';\r\n this.partName = 'Bottom Cabinet';\r\n this.translateId = \"visualizer.kitchen.cabinet.bottom_cabinet\";\r\n this.hasAdditionalParts = true;\r\n this.layerPriority = 4;\r\n this.allWallsCanBeApplied = true;\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n const partNumber = (dbFeature.metaData[\"Part\"] && +dbFeature.metaData[\"Part\"][0]) === 1 ? 1 : 2;\r\n return super.load_(dbFeature, new BottomCabinet(false, partNumber), true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n\r\n disabledClick() {\r\n const cabinetParent = this.getParent();\r\n if (cabinetParent.cabinetLeg) {\r\n cabinetParent.cabinetLeg.disabled = this.disabled;\r\n }\r\n if (cabinetParent.countertop) {\r\n cabinetParent.countertop.disabled = this.disabled;\r\n }\r\n if (cabinetParent.bottomHandle) {\r\n cabinetParent.bottomHandle.disabled = this.disabled;\r\n }\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n }\r\n\r\n handleClick(ignoreLocked, clickFrom = \"\") {\r\n const parent = this.getParent();\r\n if (parent.getParent && parent.getParent()) {\r\n super.handleClick(ignoreLocked, clickFrom);\r\n parent.activeFeatureParts = parent.setActiveFeatureParts();\r\n } else {\r\n parent.bottomCabinet.activeFeature = this;\r\n }\r\n this.featureClicked();\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class TopCabinet extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'top_cabinet';\r\n this.partName = 'Top Cabinet';\r\n this.translateId = \"visualizer.kitchen.cabinet.top_cabinet\";\r\n this.hasAdditionalParts = true;\r\n this.layerPriority = 1;\r\n this.allWallsCanBeApplied = true;\r\n this.canBeDisabled = true;\r\n }\r\n\r\n disabledClick() {\r\n const cabinetParent = this.getParent();\r\n if (cabinetParent.topHandle) {\r\n cabinetParent.topHandle.disabled = this.disabled;\r\n }\r\n }\r\n\r\n}\r\n\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class TallCabinet extends IntermediatePart {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'tall_cabinet';\r\n this.partName = 'Tall Cabinet';\r\n this.translateId = \"visualizer.kitchen.cabinet.tall_cabinet\";\r\n this.hasAdditionalParts = true;\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n const partNumber = (dbFeature.metaData[\"Part\"] && +dbFeature.metaData[\"Part\"][0]) === 1 ? 1 : 2;\r\n return super.load_(dbFeature, new TallCabinet(false, partNumber), true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n\r\n handleClick(ignoreLocked, clickFrom = \"\") {\r\n const parent = this.getParent();\r\n if (parent.getParent && parent.getParent()) {\r\n super.handleClick(ignoreLocked, clickFrom);\r\n parent.activeFeatureParts = parent.setActiveFeatureParts();\r\n } else {\r\n parent.bottomCabinet.activeFeature = this;\r\n }\r\n this.featureClicked();\r\n }\r\n\r\n disabledClick() {\r\n const cabinetParent = this.getParent();\r\n if (cabinetParent.tallCabinetLeg) {\r\n cabinetParent.tallCabinetLeg.disabled = this.disabled;\r\n }\r\n if (cabinetParent.tallHandle) {\r\n cabinetParent.tallHandle.disabled = this.disabled;\r\n }\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class TallHandle extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'tall_handle';\r\n this.partName = 'Tall Handle';\r\n this.translateId = \"visualizer.kitchen.cabinet.tall_handle\";\r\n this.hasAdditionalParts = true;\r\n this.canBeDisabled = true;\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class TallCabinetLeg extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'tall_cabinet_leg';\r\n this.partName = 'Tall Cabinet Leg';\r\n this.translateId = \"visualizer.kitchen.cabinet.tall_cabinet_leg\";\r\n this.hasAdditionalParts = true;\r\n this.canBeDisabled = true;\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class TopHandle extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'top_handle';\r\n this.partName = 'Top Handle';\r\n this.translateId = \"visualizer.kitchen.cabinet.top_handle\";\r\n this.hasAdditionalParts = true;\r\n this.canBeDisabled = true;\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class BottomHandle extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'bottom_handle';\r\n this.partName = 'Bottom Handle';\r\n this.translateId = \"visualizer.kitchen.cabinet.bottom_handle\";\r\n this.hasAdditionalParts = true;\r\n this.canBeDisabled = true;\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class BottomCabinetLeg extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'bottom_cabinet_leg';\r\n this.partName = 'Bottom Cabinet Leg';\r\n this.translateId = \"visualizer.kitchen.cabinet.bottom_cabinet_leg\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n}\r\n","import {Part} from \"../part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\n\r\nimport Attachment from \"../subparts/globals/attachment\";\r\nimport {DECORS_MAX} from \"../constants\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\n\r\nconst compareMountPosition = (checkFeature, dbFeatureLoading) => {\r\n return checkFeature.metaData[\"MatchingFeature\"] && checkFeature.matchesMetaForCondition(\"MatchingFeature\", dbFeatureLoading.metaData[\"MatchingFeature\"])\r\n}\r\n\r\nconst checkForExistingDecor = (currentDecorFeatureGroup, dbFeature) => {\r\n if (!currentDecorFeatureGroup) { // we skipped all decors, but didn't find the same\r\n return true\r\n }\r\n if (dbFeature.sharedFeatureName === currentDecorFeatureGroup.decorName) { // decors are matching by name\r\n return true\r\n }\r\n if (dbFeature.metaData[\"MountPosition\"]) {\r\n if (Array.isArray(dbFeature.metaData[\"RoomLayout\"])) {\r\n return dbFeature.metaData[\"RoomLayout\"].some(layoutName => {\r\n return currentDecorFeatureGroup.featuresList && Array.isArray(currentDecorFeatureGroup.featuresList[layoutName])\r\n && currentDecorFeatureGroup.featuresList[layoutName].some(feature => compareMountPosition(feature, dbFeature))\r\n })\r\n } else {\r\n return currentDecorFeatureGroup.some(feature => compareMountPosition(feature, dbFeature))\r\n }\r\n }\r\n return false\r\n}\r\n\r\nexport default class Accessories extends Part {\r\n static id = \"Accessories\";\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Accessories';\r\n this.partThumbnail = \"\";\r\n this.translateId = \"visualizer.bathroom.accessories2\";\r\n\r\n // related items\r\n this.attachment1 = null; // can be up to 10\r\n }\r\n\r\n load(dbFeature) {\r\n let\r\n relatedItemName = \"\",\r\n decorCount = 0,\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Attachment\": {\r\n for (let i = 1; i <= DECORS_MAX; i++) {\r\n const currentDecorFeatureGroup = this[\"attachment\" + i];\r\n if (checkForExistingDecor(currentDecorFeatureGroup, dbFeature)) {\r\n relatedItemName = \"attachment\" + i;\r\n decorCount = i;\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n if (dbFeature.groupName === \"Attachment\") {\r\n this[relatedItemName] = new Attachment(true, decorCount);\r\n this[relatedItemName].decorName = dbFeature.sharedFeatureName;\r\n } else {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n }\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n navigationItem() {\r\n return new DesignNavigationItem('Accessories', this);\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class Attachment extends IntermediatePart {\r\n\r\n constructor(isChild, decorCount) {\r\n super(isChild);\r\n this.decorCount = decorCount;\r\n this.partId = \"attachment_\" + decorCount;\r\n this.partName = \"Attachment \" + decorCount;\r\n this.translateId = \"visualizer.bathroom.accessories2\";\r\n this.canBeDisabled = true;\r\n }\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new Attachment(false, this.decorCount));\r\n }\r\n\r\n setLayers(layout) {\r\n const activeFeatures = layout.getActiveFeatures(true, true);\r\n if (this.activeFeature\r\n && this.activeFeature.metaData[\"MatchingFeature\"]\r\n && !activeFeatures.some(cartItem => cartItem.cartFeature.metaData[\"MatchingFeature\"]\r\n && cartItem.cartFeature.metaData[\"MatchingFeature\"][0] === this.activeFeature.metaData[\"MatchingFeature\"][0])) {\r\n return this.hideLayers();\r\n }\r\n return super.setLayers(layout);\r\n }\r\n\r\n}\r\n","import $ from 'jquery';\r\nimport * as types from '../actions/actionTypes';\r\nimport {IS_LIXIL_UI, UseFullSizeImages} from \"../config\";\r\nimport {LAYERS_SIZES} from \"../misc/utils\";\r\n\r\nconst initialState = {\r\n bvOpened: IS_LIXIL_UI,\r\n bvVisited: false,\r\n canvasId: \"\",\r\n bvFeatures: [],\r\n bvPresets: [],\r\n allVisualizersPresets: {},\r\n activePreset: 0,\r\n loadedPresets: [], // array of id's of already loaded presets (in order not to download them twice)\r\n presetWasChangedByUser: null, // preset id that user has clicked\r\n firstLoadedPreset: null, // the one that was loaded first (from url or job id, etc.)\r\n showRestorePopup: true,\r\n canvasDimensions: LAYERS_SIZES.normal,\r\n staticCanvasImage: window.location.href.includes(\"formwood_industries\")\r\n ? \"https://qc-static.s3.us-west-1.amazonaws.com/fabricator-static-files/Formwood+Stagnate+Vis.jpg\"\r\n : \"\",\r\n canvasCount: 0,\r\n canvasScale: 1,\r\n};\r\n\r\nexport default function(state = initialState, action) {\r\n\r\n switch(action.type) {\r\n\r\n case types.TOGGLE_BATHROOM_VISUALIZER_OPEN:\r\n if (action.payload.bvOpened) {\r\n setTimeout(() => { // set timeout is needed because of BV menu wrapper blur click\r\n document.body.classList.add('body--bv');\r\n $(window).trigger('resize');\r\n }, 0);\r\n } else {\r\n setTimeout(() => { // set timeout is needed because of BV menu wrapper blur click\r\n document.body.classList.remove('body--bv');\r\n }, 0)\r\n }\r\n\r\n return Object.assign({}, state, {\r\n bvOpened: action.payload.bvOpened,\r\n bvVisited: true\r\n });\r\n case types.SET_BV_CANVAS_ID:\r\n return {...state, canvasId: action.payload.id};\r\n case types.SET_BV_FEATURES:\r\n case types.TOGGLE_SHOW_RESTORE_POPUP:\r\n case types.SET_BATHROOM_VISUALIZER_VISITED:\r\n case types.SET_STATIC_CANVAS_IMAGE:\r\n case types.SET_PRESET_WAS_CHANGED_BY_USER:\r\n case types.SET_FIRST_LOADED_PRESET:\r\n case types.SET_CANVAS_SCALE:\r\n case types.SET_LOADED_PRESETS:\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n })\r\n case types.SET_BV_PRESETS:\r\n return Object.assign({}, state, {\r\n ...action.payload,\r\n allVisualizersPresets: Object.assign({}, state.allVisualizersPresets, {\r\n [action.payload.visualizerType || document.kvConfig.visualizerType]: action.payload.bvPresets\r\n })\r\n })\r\n case types.UPDATE_FABRICATOR_SETTINGS: // update when visualizer is changed\r\n return Object.assign({}, state, {\r\n bvPresets: state.allVisualizersPresets[document.kvConfig.visualizerType] || []\r\n })\r\n case types.SET_ACTIVE_PRESET: {\r\n const loadedPresets = state.loadedPresets.includes(action.payload.activePreset)\r\n ? state.loadedPresets\r\n : [...state.loadedPresets, action.payload.activePreset];\r\n return Object.assign({}, state, {\r\n loadedPresets,\r\n ...action.payload\r\n })\r\n }\r\n case types.UPDATE_CANVAS_COUNT:\r\n return Object.assign({}, state, {\r\n canvasCount: state.canvasCount + 1\r\n })\r\n case types.SET_CANVAS_DIMENSIONS:\r\n // eslint-disable-next-line no-case-declarations\r\n const canvasDimensions = action.payload.canvasDimensions\r\n ? Object.assign({}, action.payload.canvasDimensions)\r\n : document.kvConfig.layersSize === \"full_hd\"\r\n ? UseFullSizeImages ? LAYERS_SIZES.full_hd_large : LAYERS_SIZES.full_hd\r\n : UseFullSizeImages ? LAYERS_SIZES.large : LAYERS_SIZES.normal\r\n if (canvasDimensions && canvasDimensions.width) {\r\n switch (canvasDimensions.width) {\r\n case LAYERS_SIZES.large.width:\r\n case LAYERS_SIZES.full_hd_large.width: {\r\n document.body.classList.add('bv--full-size');\r\n break;\r\n }\r\n case LAYERS_SIZES.full_hd.width: {\r\n document.body.classList.add('bv--full-hd');\r\n break;\r\n }\r\n default:\r\n break;\r\n }\r\n }\r\n return Object.assign({}, state, {canvasDimensions})\r\n }\r\n\r\n return state;\r\n\r\n}\r\n","import * as types from '../actions/actionTypes';\r\n\r\nconst initialState = {\r\n loaderOpened: false,\r\n loaderTitle: \"loader.defaultTitle\",\r\n loaderText: \"loader.defaultText\",\r\n loaderFullScreen: false,\r\n multiLoader: {\r\n visible: true,\r\n activeStep: 0,\r\n renderSteps: [\r\n {icon: \"doorStyle\", text: \"doorStyle\"},\r\n {icon: \"color\", text: \"color\"},\r\n {icon: \"layout\", text: \"layout\"},\r\n {icon: \"design1\", text: \"design1\"},\r\n {icon: \"4kOutput\", text: \"4kOutput\"},\r\n {icon: \"lighting\", text: \"lighting\"},\r\n {icon: \"design1\", text: \"design2\"},\r\n ]\r\n }\r\n};\r\n\r\nexport default function(state = initialState, action) {\r\n switch(action.type) {\r\n case types.TOGGLE_LOADER:\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n });\r\n case types.SET_MULTI_LOADER:\r\n return Object.assign({}, state, {\r\n multiLoader: {...state.multiLoader, ...action.payload}\r\n });\r\n\r\n }\r\n\r\n return state;\r\n}\r\n","import merge from 'lodash/merge';\r\nimport * as types from '../actions/actionTypes';\r\nimport Analytics from './../analytics';\r\nimport {UserPopupTypes, ConfirmPopupTypes, UserPopupContent} from \"../bvcomponents/visComponents/constants\";\r\nimport {parseQuery} from \"../misc/helpers\";\r\nimport {\r\n parseFabricatorSettings\r\n} from \"./fabricatorReducer\";\r\nimport {PREFERRED_COMMUNICATION_METHODS} from \"../bvcomponents/popups/assignQuotePopup/assignQuoteConstants\";\r\nimport Config from \"../config\";\r\nimport {hardCodeIsCaesarStone, hardCodeIsGraniteTransformationUK, hardCodeIsLowes} from \"../misc/fabricatorHardcode\";\r\n\r\nconst dashboardFramed = Config.isVisualizerManagement();\r\nconst parsedUrl = parseQuery();\r\n\r\nexport const countries = {\r\n \"GBP\": {\r\n name: \"United Kingdom\",\r\n iso2: \"gb\",\r\n dialCode: \"44\",\r\n priority: 0,\r\n areaCodes: null,\r\n },\r\n \"USD\": {\r\n areaCodes: null,\r\n dialCode: \"1\",\r\n iso2: \"us\",\r\n name: \"United States\",\r\n priority: 0\r\n },\r\n \"CAD\": {\r\n areaCodes: null,\r\n dialCode: \"1\",\r\n iso2: \"ca\",\r\n name: \"Canada\",\r\n priority: 1\r\n },\r\n \"AUS\": {\r\n areaCodes: null,\r\n dialCode: \"61\",\r\n iso2: \"au\",\r\n name: \"Australia\",\r\n priority: 0\r\n },\r\n \"PAB\": {\r\n areaCodes: null,\r\n dialCode: \"507\",\r\n iso2: \"pa\",\r\n name: \"Panama\",\r\n priority: 0\r\n },\r\n \"SPN\": {\r\n areaCodes: null,\r\n dialCode: \"37\",\r\n iso2: \"es\",\r\n name: \"Spain\",\r\n priority: 0\r\n },\r\n \"PLN\": {\r\n name: \"Poland (Polska)\",\r\n iso2: \"pl\",\r\n dialCode: \"48\",\r\n priority: 0,\r\n areaCodes: null,\r\n },\r\n};\r\n\r\nexport const getDefaultCountry = (fabricatorSettings) => {\r\n if (fabricatorSettings.currency === \"GBP\" || hardCodeIsGraniteTransformationUK()) {\r\n return countries.GBP\r\n } if (fabricatorSettings.currency === \"PLN\") {\r\n return countries.PLN\r\n } else if (hardCodeIsLowes()) {\r\n return countries.CAD\r\n }\r\n // const {intl} = this.props;\r\n // if (intl.locale === \"en-AU\" || this.props.fabricatorData.isCaesarStone) {\r\n // if (fabricatorState.isCaesarStone) {\r\n // return countries.AUS\r\n // }\r\n const currency = fabricatorSettings.currency === \"AUD\" ? \"AUS\" : fabricatorSettings.currency;\r\n return countries[currency] || countries.USD\r\n};\r\n\r\nconst initialState = {\r\n userPopupOpened: false,\r\n userPopupType: UserPopupTypes.Unlock,\r\n saveQuoteAfterLogin: false,\r\n userIsLoggedIn: dashboardFramed,\r\n userSchedulerOpened: false,\r\n checkout: false,\r\n userInfo: {\r\n phone: \"\",\r\n email: \"\",\r\n password: \"\",\r\n firstName: \"\",\r\n phoneNumber: \"\",\r\n postal: \"\",\r\n salesPersonEmail: (window.salesPerson ? window.salesPerson.email : \"\"),\r\n salesPersonFullName: (window.salesPerson ? window.salesPerson.name : \"\"),\r\n isNew: true,\r\n fabricatorId: document.kvConfig.userId || 61986,\r\n employeeId: window.salesPerson\r\n ? window.salesPerson.rawVal / ( Math.floor(Math.PI * 1000))\r\n : (parsedUrl && parsedUrl.p) ? +parsedUrl.p.split(\"/\")[0] : \"\",\r\n lastName: \"\",\r\n phone2: \"\",\r\n address1: \"\",\r\n address2: \"\",\r\n city: \"\",\r\n state: \"\",\r\n preferredCommunicationMethod: \"\", // (I assume it will be constants - email or phone)\r\n howDidYouHearAboutUs: \"\", // (probably constants too, it is a select in the design)\r\n country: countries.USD, // should be set as an object! from Countries list\r\n provence: \"\", // can be received from getCustomerById response\r\n shipping: {}, // address can be received from getCustomerById response\r\n agreedToTerms: false,\r\n subscribeToNewsletter: true,\r\n },\r\n editToken: ((parsedUrl && parsedUrl.edittoken) ? parsedUrl.edittoken : null),\r\n userInfoErrors: {}, // {\"fullName\": [\"too short\"]}, {\"phoneNumber\": [\"this field is required\"]}, etc.\r\n showAdditionalFields: false,\r\n employeesList: [],\r\n employeesListReceived: false,\r\n isPhoneNumberValidated: dashboardFramed,\r\n // clickLeadCapture: false,\r\n confirmPopupOpened: false,\r\n confirmPopupType: ConfirmPopupTypes.ConsultationRequest,\r\n confirmPopupTag: {}, // object - is used for passing data in the confirm popup\r\n showPrivacyPolicy: false,\r\n alreadyRegisteredUserInfo: {\r\n //... other fields from userLogin response\r\n userId: \"\", // custom field // this will be passed in register response\r\n assignQuote: false, // custom field // if it was clicked from assign quote popup\r\n withCheckoutLogic: false, // custom field // if it was clicked from assign quote popup and with checkout logic\r\n confirmedAssign: false // custom field // if it was confirmed from user (he wants to assign quote on already registered user) - is changing in confirm popup\r\n },\r\n userPopupContent: UserPopupContent.register,\r\n leadCaptureClickCount: 0,\r\n userTwoFa: {\r\n twoFALoading: false,\r\n twoFAToken: \"\",\r\n },\r\n optIn: false\r\n};\r\n\r\nexport default function (state = initialState, action) {\r\n switch (action.type) {\r\n case types.TOGGLE_USER_POPUP:\r\n Analytics.sendEvent(\"user-popup\", action.payload.userPopupOpened ? \"Opened\" : \"Closed\");\r\n return {\r\n ...merge(state, action.payload), // deep merge, otherwise userInfo gets overwritten.\r\n userPopupType: action.payload.userPopupType || UserPopupTypes.Unlock,\r\n saveQuoteAfterLogin: action.payload.saveQuoteAfterLogin || false,\r\n checkout: typeof(action.payload.checkout) === 'undefined' ? state.checkout : action.payload.checkout\r\n };\r\n case types.TOGGLE_ADDITIONAL_FIELDS:\r\n case types.TOGGLE_CONFIRM_POPUP:\r\n case types.SET_USER_POPUP_CONTENT:\r\n case types.SET_LEAD_CAPTURE_CLICK_COUNT:\r\n case types.SET_USER_OPT_IN:\r\n return {...state, ...action.payload};\r\n case types.SET_ALREADY_REGISTERED_USER:\r\n return {...state, alreadyRegisteredUserInfo: {...state.alreadyRegisteredUserInfo, ...action.payload.alreadyRegisteredUserInfo}};\r\n case types.CHANGE_USER_INFO: {\r\n let {userInfo} = state;\r\n userInfo = {...userInfo, ...action.payload.userInfo};\r\n return {...state, userInfo};\r\n }\r\n case types.CHANGE_USER_INFO_ERRORS: {\r\n let {userInfoErrors} = state;\r\n userInfoErrors = {...userInfoErrors, ...action.payload.userInfoErrors};\r\n return {...state, userInfoErrors};\r\n }\r\n case types.SET_USER_TWO_FA: {\r\n let {userTwoFa} = state;\r\n userTwoFa = {...userTwoFa, ...action.payload.userTwoFa};\r\n return {...state, userTwoFa};\r\n }\r\n case types.SET_EMPLOYEES_LIST:\r\n // console.log('action.payload', action.payload);\r\n return Object.assign({}, state, action.payload, {employeesListReceived: true});\r\n case types.SET_USER_PHONE_NUMBER_VALIDATED:\r\n return {...state, isPhoneNumberValidated: action.payload.isPhoneNumberValidated};\r\n case types.RESTORE_USER_STATE:\r\n if (action.payload.userInfo) {\r\n if (!action.payload.userInfo.country || !action.payload.userInfo.country.dialCode) {\r\n action.payload.userInfo.country = state.userInfo.country\r\n }\r\n if (action.payload.userInfo.firstName === \"N/A\") {\r\n action.payload.userInfo.firstName = \"\";\r\n }\r\n if (action.payload.userInfo.lastName === \"N/A\") {\r\n action.payload.userInfo.lastName = \"\";\r\n }\r\n }\r\n return {\r\n ...state,\r\n ...action.payload,\r\n userPopupOpened: false,\r\n userPopup2FAOpened: false,\r\n confirmPopupOpened: false,\r\n userIsLoggedIn: true,\r\n };\r\n case types.SHOW_SCHEDULER:\r\n action.payload.show\r\n ? document.body.classList.add(\"body--shedule\")\r\n : document.body.classList.remove(\"body--shedule\");\r\n return {...state, userSchedulerOpened: action.payload.show};\r\n case types.SET_FABRICATOR_DATA: {\r\n const userInfo = {...state.userInfo};\r\n const {settings} = parseFabricatorSettings(action.payload);\r\n userInfo.country = getDefaultCountry(settings);\r\n if (hardCodeIsCaesarStone() && settings.currency === \"USD\") {\r\n userInfo.preferredCommunicationMethod = PREFERRED_COMMUNICATION_METHODS[0]\r\n }\r\n return {...state, userInfo};\r\n }\r\n }\r\n return state;\r\n}\r\n","import * as types from '../actions/actionTypes';\r\n\r\nconst initialState = {\r\n visible: false,\r\n message: '',\r\n error: '',\r\n title: \"\",\r\n inline: false,\r\n newStyles: false,\r\n buttons: [],\r\n click: null,\r\n // type: null, // added for look // not used\r\n};\r\n\r\nexport default function(state = initialState, action) {\r\n\r\n switch(action.type) {\r\n\r\n case types.CHANGE_MESSAGE_BOX:\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n });\r\n\r\n }\r\n\r\n return state;\r\n\r\n}\r\n","import * as types from '../actions/actionTypes';\r\nimport cloneDeep from \"lodash/cloneDeep\";\r\nimport find from \"lodash/find\";\r\n\r\nconst initialState = {\r\n filterGroups: [],\r\n selectedFilters: [],\r\n expandedFilters: [],\r\n showFilters: false,\r\n filterVisible: '',\r\n filterId: \"\",\r\n availableFilterValues: {}, // { filterGroupId: arrayOf(filterValues) }\r\n filtersCount: 0, // to update component when filters received\r\n};\r\n\r\nfunction loadFilterGroups(filterGroups) {\r\n filterGroups.forEach(fg => {\r\n for(let i = fg.values.length - 1; i>= 0; i--) {\r\n let value = fg.values[i];\r\n if(value.parent_id) {\r\n let parent = find(fg.values, v => v.id == value.parent_id);\r\n parent.items = parent.items || [];\r\n parent.items.push(fg.values.splice(i, 1)[0]);\r\n }\r\n }\r\n });\r\n return filterGroups;\r\n}\r\n\r\nexport default function(state = initialState, action) {\r\n let newState = {...state};\r\n switch(action.type) {\r\n case types.LOAD_FILTERS:\r\n newState.filterGroups = loadFilterGroups(cloneDeep(action.payload));\r\n break;\r\n case types.SET_SELECTED_FILTERS:\r\n newState.selectedFilters = [...action.payload];\r\n break;\r\n case types.SET_EXPANDED_FILTERS:\r\n newState.expandedFilters = [...action.payload];\r\n break;\r\n case types.SHOW_FILTERS:\r\n newState.showFilters = action.payload.show;\r\n newState.filterId = action.payload.filterId;\r\n newState.filterVisible = \"Others\";\r\n break;\r\n case types.SHOW_FILTERS_IF_NOT_VISIBLE:\r\n if(!newState.showFilters) {\r\n newState.showFilters = true;\r\n newState.filterId = action.payload;\r\n newState.filterVisible = \"Others\";\r\n }\r\n break;\r\n case types.SET_FILTER_VISIBLE:\r\n newState.filterVisible = action.payload;\r\n break;\r\n case types.SET_AVAILABLE_FILTER_VALUES:\r\n return Object.assign({}, state, {\r\n availableFilterValues: Object.assign({}, state.availableFilterValues, action.payload.availableFilterValues)\r\n });\r\n case types.UPDATE_FILTERS_COUNT:\r\n return Object.assign({}, state, {\r\n filtersCount: state.filtersCount + 1\r\n })\r\n case types.SET_COUNTERTOP_FILTERS_RECEIVED:\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n });\r\n case types.SET_LOOK_OPENED:\r\n if (!action.payload.lookOpened) {\r\n return Object.assign({}, state, { selectedFilters: [] });\r\n }\r\n break;\r\n case types.SET_LOOK_ACTIVE_CATEGORY:\r\n if (!action.payload.lookActiveCategory) {\r\n return Object.assign({}, state, { selectedFilters: [] });\r\n }\r\n break;\r\n case types.SET_SHOP_PAGE_OPENED:\r\n if (!action.payload.shopPageOpened) {\r\n return Object.assign({}, state, { selectedFilters: [] });\r\n }\r\n break;\r\n case types.SET_WIZARD_ACTIVE_STEP:\r\n if (state.selectedFilters.length) {\r\n return Object.assign({}, state, { selectedFilters: [] }); // always remove it on step change\r\n }\r\n break;\r\n }\r\n return newState;\r\n}\r\n","import $ from \"jquery\";\r\nimport * as types from '../actions/actionTypes';\r\nimport {\r\n MODULE_CONTEXT_MENU_TYPES,\r\n MODULE_CONTEXT_MENU_DIRECTIONS,\r\n CABINET_WIZARD_BUTTONS,\r\n COUNTERTOP_WIZARD_BUTTONS,\r\n CABINET_GROUP, COUNTERTOP_GROUP, EDGE_GROUP\r\n}\r\n from \"../bvcomponents/kvComponent/core/constants\";\r\nimport {\r\n COUNTERTOP_GROUP_BATHROOM,\r\n HANDLES_GROUP_BATHROOM,\r\n SHOWER_FLOOR_GROUP_BATHROOM\r\n} from \"../bvcomponents/bvSceneComponent/core/constants\";\r\n\r\nconst isNewBathroomOrKitchen = document.kvConfig.toolVersion >= 5;\r\n\r\nconst initialState = {\r\n mobileNav: [],\r\n desktopNavigationOpened: false,\r\n navigationViewType: 3,\r\n activeNavigationParentName: \"\",\r\n activeNavigationChildName: \"\",\r\n navigationLoadingActive: false, // to show when features are already downloaded\r\n moduleContextMenuType: MODULE_CONTEXT_MENU_TYPES.Filters,\r\n moduleContextMenuDirection: MODULE_CONTEXT_MENU_DIRECTIONS.Vertical,\r\n moduleContextMenuModule: null,\r\n moduleContextMenuModulePart: null,\r\n // cabinet module filters\r\n activeNavigationFilter: CABINET_WIZARD_BUTTONS[0].buttonId,\r\n activeNavigationFilterStepIndex: 0,\r\n cabinetNavigationFilterCompleted: false,\r\n countertopNavigationFilterCompleted: false,\r\n counterTopWizard: { // not needed for now, but probably we would need this logic in future\r\n [COUNTERTOP_WIZARD_BUTTONS[0].buttonId]: \"All\",\r\n [COUNTERTOP_WIZARD_BUTTONS[1].buttonId]: \"All\",\r\n },\r\n edgesApplyTo: EDGE_GROUP,\r\n cabinetsApplyTo: CABINET_GROUP,\r\n cabinetsApplyToBathroom: isNewBathroomOrKitchen ? [] : [\"vanity_cabinet\", \"vanity_mirror\"], // porselanosa enable matching countertops\r\n countertopsApplyToArray: COUNTERTOP_GROUP, // is used on lixil UI\r\n countertopsApplyToArrayBathroom: COUNTERTOP_GROUP_BATHROOM, // is used on lixil UI\r\n handlesApplyToBathroom: HANDLES_GROUP_BATHROOM,\r\n showerFloorApplyToBathroom: SHOWER_FLOOR_GROUP_BATHROOM,\r\n countertopsApplyTo: {\r\n \"countertop\": [\"center_island_countertop\", \"backsplash\"],\r\n \"center_island_countertop\": [\"countertop\", \"backsplash\"],\r\n \"backsplash\": [\"center_island_countertop\", \"countertop\"]\r\n },\r\n countertopsApplyToBathroom: {\r\n \"vanity_countertop\": [\"vanity_backsplash\"],\r\n \"vanity_backsplash\": [\"vanity_countertop\"]\r\n },\r\n useFeaturesLightRequest: {\r\n countertops: true,\r\n cabinets: true,\r\n },\r\n updateDisableFeatureGroupRadio: false,\r\n navItemPositionModal: {\r\n popupOpened: false,\r\n popupPosition: {},\r\n activePartId: \"\"\r\n }\r\n};\r\n\r\nexport default function(state = initialState, action) {\r\n let newState = {...state};\r\n switch(action.type) {\r\n case types.LOAD_MOBILE_NAV:\r\n newState.mobileNav = [...action.payload];\r\n break;\r\n case types.SET_ACTIVE_NAVIGATION_NAMES:\r\n if (action.payload.activeNavigationParentName === \"walls\"\r\n || action.payload.activeNavigationParentName === \"cabinet\") {\r\n switch (action.payload.activeNavigationChildName) {\r\n case \"ceiling\":\r\n case \"right_wall\":\r\n case \"popout_wall\":\r\n case \"left_wall\":\r\n case \"crown_molding\":\r\n case \"top_cabinet\":\r\n $('html, body').animate({scrollTop: 0}, 500);\r\n break;\r\n }\r\n }\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n });\r\n case types.TOGGLE_DESKTOP_NAVIGATION:\r\n case types.SET_NAVIGATION_VIEW_TYPE:\r\n case types.SET_MODULE_CONTEXT_MENU_TYPE:\r\n case types.SET_MODULE_CONTEXT_MENU_DIRECTION:\r\n case types.SET_MODULE_CONTEXT_MENU_MODULE:\r\n case types.SET_MODULE_CONTEXT_MENU_MODULE_PART:\r\n case types.SET_ACTIVE_NAVIGATION_FILTER:\r\n case types.SET_ACTIVE_NAVIGATION_FILTER_STEP_INDEX:\r\n case types.SET_CABINET_NAVIGATION_FILTER_COMPLETED:\r\n case types.SET_COUNTERTOP_NAVIGATION_FILTER_COMPLETED:\r\n case types.SET_NAVIGATION_LOADING:\r\n case types.UPDATE_DISABLE_FEATURE_GROUP_RADIO:\r\n case types.SET_APPLY_TO_COMMON:\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n });\r\n case types.SET_COUNTERTOP_WIZARD:\r\n return Object.assign({}, state, {\r\n counterTopWizard: Object.assign({}, state.counterTopWizard, action.payload.countertopWizard)\r\n });\r\n case types.SET_CABINETS_APPLY_TO:\r\n return Object.assign({}, state, {\r\n cabinetsApplyTo: [...action.payload.cabinetsApplyTo]\r\n });\r\n case types.SET_EDGES_APPLY_TO:\r\n return Object.assign({}, state, {\r\n edgesApplyTo: [...action.payload.edgesApplyTo]\r\n });\r\n case types.SET_CABINETS_APPLY_TO_BATHROOM:\r\n return Object.assign({}, state, {\r\n cabinetsApplyToBathroom: [...action.payload.cabinetsApplyToBathroom]\r\n });\r\n case types.SET_COUNTERTOPS_APPLY_TO:\r\n if (action.payload.newArrayLogic) {\r\n return Object.assign({}, state, {\r\n countertopsApplyToArray: [...action.payload.countertopsApplyTo]\r\n });\r\n }\r\n return Object.assign({}, state, {\r\n countertopsApplyTo: Object.assign({}, state.countertopsApplyTo, action.payload.countertopsApplyTo)\r\n });\r\n case types.SET_COUNTERTOPS_APPLY_TO_BATHROOM:\r\n if (action.payload.newArrayLogic) {\r\n return Object.assign({}, state, {\r\n countertopsApplyToArrayBathroom: [...action.payload.countertopsApplyToBathroom]\r\n });\r\n }\r\n return Object.assign({}, state, {\r\n countertopsApplyToBathroom: Object.assign({}, state.countertopsApplyToBathroom, action.payload.countertopsApplyToBathroom)\r\n });\r\n case types.TOGGLE_NAV_ITEM_POSITION_MODAL:\r\n return Object.assign({}, state, {\r\n navItemPositionModal: Object.assign({}, state.navItemPositionModal, action.payload.navItemPositionModal)\r\n });\r\n case types.SET_USE_FEATURES_LIGHT_REQUEST:\r\n return Object.assign({}, state, {\r\n countertopsApplyToArray: !action.payload.useFeaturesLightRequest.countertops ? [] : state.countertopsApplyToArray,\r\n cabinetsApplyTo: !action.payload.useFeaturesLightRequest.cabinets ? [] : state.cabinetsApplyTo,\r\n useFeaturesLightRequest: Object.assign({}, state.useFeaturesLightRequest, action.payload.useFeaturesLightRequest)\r\n });\r\n }\r\n return newState;\r\n}\r\n","import * as types from '../actions/actionTypes';\r\nimport {SQFT_MEASURE_UNIT, SQFT_VIEW_MODE} from \"../bvcomponents/sqft/constants\";\r\n\r\nconst initialState = {\r\n isSquareFootageEnabled: false,\r\n SQFTGroup: null, // used to display different sqft types ( like cabinets, area, etc..)\r\n SQFTViewMode: SQFT_VIEW_MODE.twoDMode, // used to display 2d - 3d view\r\n sqftLoaded: false,\r\n sqftUpdateType: null,\r\n squareFeet: 0,\r\n changeLayoutPopupOpened: false,\r\n layoutToApply: \"\",\r\n sqftFromFeature: null, // feature from SQFT was opened\r\n applyLayoutOnSqft: false, // this is needed to remember to change layout on popup ok click\r\n setNewLayoutOnSqft: false, // this is needed for change layout popup - after ok click - it send a postMessage to SQFT\r\n sqftFeaturesPopup: {\r\n enabled: true,\r\n opened: false,\r\n visited: false,\r\n sqftPassedData: null, // object passed from calculator\r\n previouslyAddedSqftFeatures: [] // remember previous selections to parse properly data\r\n },\r\n measureUnit: SQFT_MEASURE_UNIT.imperial,\r\n updateCalculations: false, // update sqft calculations\r\n // todo move this to new reducer\r\n abortRequestController: null,\r\n selectedCountertop: null,\r\n cabinetsGlb: null,\r\n cabinetsARBlobUrl: null,\r\n apiErrorMessage: null,\r\n};\r\n\r\nexport default function(state = initialState, action) {\r\n\r\n switch(action.type) {\r\n\r\n case types.ENABLE_SQUARE_FOOTAGE:\r\n case types.SET_SQUARE_FOOTAGE_GROUP:\r\n case types.SET_SQFT_VIEW_MODE:\r\n case types.LOAD_SQFT:\r\n case types.UPDATE_SQFT:\r\n case types.UPDATE_SQFT_CALCULATIONS:\r\n case types.SET_SQFT_SQUARE_FEET:\r\n case types.SET_NEW_LAYOUT_ON_SQFT:\r\n case types.SET_SQFT_MEASURE_UNIT:\r\n case types.SQT_SQFT_FROM_FEATURE:\r\n case types.SET_CABINETS_GLB:\r\n case types.SET_CABINETS_AR_BLOB_URL:\r\n case types.SET_API_ERROR_MESSAGE:\r\n case types.SET_SELECTED_COUNTERTOP:\r\n case types.SET_ABORT_CONTROLLER:\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n });\r\n case types.TOGGLE_CHANGE_LAYOUT_POPUP:\r\n return Object.assign({}, state, {\r\n changeLayoutPopupOpened: action.payload.changeLayoutPopupOpened,\r\n layoutToApply: action.payload.layoutToApply || state.layoutToApply,\r\n applyLayoutOnSqft: action.payload.applyLayoutOnSqft,\r\n });\r\n case types.CHANGE_SQFT_FEATURES_POPUP:\r\n state = {...state, sqftFeaturesPopup: Object.assign({}, state.sqftFeaturesPopup, action.payload.sqftFeaturesPopup)};\r\n break;\r\n }\r\n\r\n return state;\r\n\r\n}\r\n","import {SHOW_DOCUSIGN} from \"../actions/actionTypes\";\r\n\r\nconst initialState = {\r\n show: false,\r\n callback: null\r\n}\r\n\r\nexport default function (state = initialState, {type, payload} = {}) {\r\n if (type === SHOW_DOCUSIGN) {\r\n return {...state, show: payload.show, callback: payload.callback}\r\n }\r\n return state;\r\n}\r\n\r\n","import * as types from '../actions/actionTypes';\r\n\r\nconst initialState = {\r\n qtCategoriesLoaded: [], // includes visualizers\r\n qtCategoriesRequested: [], // includes visualizers\r\n qtActiveCategory: \"\", //string!! look for all the category here: layout.qtCategories.find(qtCategory => qtCategory.name === this.props.qtActiveCategory);\r\n};\r\n\r\nexport default function (state = initialState, action) {\r\n\r\n switch (action.type) {\r\n\r\n case types.SET_QT_CATEGORIES_LOADED:\r\n return Object.assign({}, state, {\r\n qtCategoriesLoaded: [...state.qtCategoriesLoaded, action.payload.qtCategoriesLoaded]\r\n });\r\n case types.SET_QT_CATEGORIES_REQUESTED:\r\n return Object.assign({}, state, {\r\n qtCategoriesRequested: [...state.qtCategoriesRequested, action.payload.qtCategoriesRequested]\r\n });\r\n case types.SET_QT_ACTIVE_CATEGORY:\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n });\r\n }\r\n\r\n return state;\r\n\r\n}\r\n","import * as types from '../actions/actionTypes';\r\nimport Config from \"../config\";\r\nimport {parseFabricatorSettings} from \"./fabricatorReducer\";\r\n\r\nconst removeTutorial = Config.isVisualizerManagement();\r\n\r\nconst initialState = {\r\n materialsTutorialIsOpened: false,\r\n materialsTutorialStep: 0,\r\n materialsTutorialFinished: removeTutorial,\r\n visualizerTutorialIsOpened: false,\r\n visualizerTutorialStep: 1,\r\n visualizerTutorialFinished: removeTutorial,\r\n materialsAgentTutorialIsOpened: false,\r\n materialsAgentTutorialFinished: false,\r\n};\r\n\r\nexport default function(state = initialState, action) {\r\n\r\n switch(action.type) {\r\n\r\n case types.SHOW_MATERIALS_TUTORIAL:\r\n case types.SET_MATERIALS_TUTORIAL_STEP:\r\n case types.SET_MATERIALS_TUTORIAL_FINISHED:\r\n case types.SHOW_MATERIALS_AGENT_TUTORIAL:\r\n case types.SET_MATERIALS_AGENT_TUTORIAL_FINISHED:\r\n case types.SHOW_VISUALIZER_TUTORIAL:\r\n case types.SET_VISUALIZER_TUTORIAL_STEP:\r\n case types.SET_VISUALIZER_TUTORIAL_FINISHED:\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n });\r\n case types.SET_FABRICATOR_DATA: {\r\n if (action.payload && action.payload.settings) {\r\n const {settings} = parseFabricatorSettings(action.payload);\r\n if (!settings.showVisualizerTutorial) {\r\n return Object.assign({}, state, {\r\n materialsTutorialFinished: true,\r\n visualizerTutorialFinished: true\r\n });\r\n }\r\n }\r\n return Object.assign({}, state);\r\n }\r\n\r\n }\r\n\r\n return state;\r\n\r\n}\r\n","import uuid from \"uuid\";\r\n\r\nimport {\r\n ADD_TO_CART,\r\n REMOVE_FROM_CART,\r\n CONTRACT_SIGNING_JOB_DOCUMENT,\r\n CONTRACT_SIGNING_POST_SIGNATURE,\r\n CONTRACT_SIGNING_SET_CONTRACTS_VALUES,\r\n CONTRACT_SIGNING_SET_STEP,\r\n CONTRACT_SIGNING_SHOW_SIGNATURE_PAD,\r\n SET_AFTER_CONTRACT_SIGN_CALLBACK,\r\n SET_CONTRACT_BLOB,\r\n SHOW_CONTRACT_SIGNING,\r\n CHANGE_CART_FEATURE,\r\n CHANGE_CART_QUANTITY,\r\n CONTRACT_SIGNING_RESTORE_VALUES,\r\n SET_WIZARD_SELECTED_VALUES,\r\n CHANGE_ALL_CART_ITEMS,\r\n SET_CART_ITEMS_ADDED_TO_PARENT_CART,\r\n TOGGLE_PRICE_WORKSHEET_OPENED,\r\n CONTRACT_SIGNING_SET_CONTRACTS_LIST,\r\n} from \"../actions/actionTypes\";\r\n\r\nconst initialState = {\r\n firstName: '',\r\n lastName: '',\r\n step: 1,\r\n isVisible: false,\r\n callback: null,\r\n signedDocumentUrl: null,\r\n jobDocumentUrl: null,\r\n isSignaturePadVisible: false,\r\n signaturePadTag: null,\r\n invoiceNumberOfPages: null,\r\n savedInvoiceNumberOfPages: null, // is used to update filled in fields when invoice is changed and we need to update the fields\r\n pagesCustomFieldsValue: {}, // old support\r\n afterContractSignCallback: null,\r\n contractBlob: null,\r\n contractLoading: false,\r\n needToUpdateContract: false, // it is a detection for if job was updated!! then we need a new contract\r\n contractId: uuid.v4(), // it is a cached id, so contract is refreshed every time it needs to be changed\r\n contractsList: [], // [contractInterface]\r\n contractsReceived: false,\r\n contractsValues: {}, // here we store all customer signs and contract data, it will be restored {contract.id: {}}\r\n}\r\n\r\nexport default function(state = initialState, action){\r\n switch (action.type) {\r\n case SHOW_CONTRACT_SIGNING:\r\n return _show(state, action.payload);\r\n case CONTRACT_SIGNING_SET_STEP:\r\n return {...state, step: action.payload.step};\r\n case CONTRACT_SIGNING_POST_SIGNATURE:\r\n case SET_AFTER_CONTRACT_SIGN_CALLBACK:\r\n case SET_CONTRACT_BLOB:\r\n case CONTRACT_SIGNING_RESTORE_VALUES:\r\n case CONTRACT_SIGNING_SET_CONTRACTS_VALUES:\r\n return {...state, ...action.payload};\r\n case CONTRACT_SIGNING_SET_CONTRACTS_LIST:\r\n if (!state.contractsReceived && Object.keys(state.pagesCustomFieldsValue).length && document.kvConfig.jobId\r\n && !Object.keys(state.contractsValues).length && action.payload.contractsList\r\n && action.payload.contractsList.length) { // old support\r\n // here we have an old response logic with one contract restored, we need to restore contract fields to the\r\n // first contract found once the contracts are received (they are received later than the job restored)\r\n if (state.savedInvoiceNumberOfPages) {\r\n Object.keys(state.pagesCustomFieldsValue).forEach(oldPage => {\r\n // we were saving page id after the contract? now lets reve contract, so the page goes without the contract\r\n state.pagesCustomFieldsValue[oldPage - state.savedInvoiceNumberOfPages] = state.pagesCustomFieldsValue[oldPage];\r\n delete state.pagesCustomFieldsValue[oldPage]; // erase so new page is not filled with old page values\r\n });\r\n }\r\n return {...state, ...action.payload, contractsReceived: true, contractsValues: {\r\n [action.payload.contractsList[0].id]: state.pagesCustomFieldsValue,\r\n }, pagesCustomFieldsValue: {}} // we don't need them anymore\r\n }\r\n return {...state, ...action.payload, contractsReceived: true};\r\n case CONTRACT_SIGNING_SHOW_SIGNATURE_PAD:\r\n return {...state, isSignaturePadVisible: action.payload.show, signaturePadTag: action.payload.tag};\r\n case ADD_TO_CART:\r\n case REMOVE_FROM_CART:\r\n case CHANGE_CART_FEATURE:\r\n case CHANGE_CART_QUANTITY:\r\n case TOGGLE_PRICE_WORKSHEET_OPENED: // only if they opened, we cant set here set discount sections, because when restoring this is fired\r\n case SET_WIZARD_SELECTED_VALUES:\r\n case CHANGE_ALL_CART_ITEMS:\r\n case SET_CART_ITEMS_ADDED_TO_PARENT_CART:\r\n if (action.type === ADD_TO_CART && action.payload.cartItems.every(cItem => {\r\n return cItem.cartFeature && cItem.cartFeature.dbFeature.autoAddToCart\r\n })) {\r\n return state\r\n }\r\n if (!state.needToUpdateContract) {\r\n return {...state, needToUpdateContract: true, contractId: uuid.v4()};\r\n }\r\n return state\r\n case CONTRACT_SIGNING_JOB_DOCUMENT:\r\n if (Number.isInteger(action.payload.invoiceNumberOfPages)\r\n && Number.isInteger(state.savedInvoiceNumberOfPages)\r\n && (action.payload.invoiceNumberOfPages !== state.savedInvoiceNumberOfPages)\r\n && (Object.keys(state.pagesCustomFieldsValue).length)) {\r\n // on document load we are checking old receipt pages and new receipt pages, and then we update each selected value page\r\n console.log(\"receipt was changed, updating values... old pages and new pages:\", state.savedInvoiceNumberOfPages, action.payload.invoiceNumberOfPages);\r\n let newValues = {};\r\n Object.keys(state.pagesCustomFieldsValue).forEach(oldPage => {\r\n // for example, if filled in page was 5 and there were 3 pages in receipt, and now receipt has 1 page - 5-3+1 = 3 page new\r\n const originalContractPage = oldPage - state.savedInvoiceNumberOfPages;\r\n const newPage = originalContractPage + action.payload.invoiceNumberOfPages;\r\n newValues[newPage] = state.pagesCustomFieldsValue[oldPage];\r\n });\r\n return {...state,\r\n ...action.payload,\r\n needToUpdateContract: false,\r\n pagesCustomFieldsValue: newValues,\r\n savedInvoiceNumberOfPages: action.payload.invoiceNumberOfPages, // update with new number, for the next time we open\r\n };\r\n }\r\n return {\r\n ...state,\r\n ...action.payload,\r\n needToUpdateContract: false,\r\n savedInvoiceNumberOfPages: action.payload.invoiceNumberOfPages // update with current invoice pages count\r\n };\r\n }\r\n return state;\r\n}\r\n\r\n\r\nfunction _show(state, {show, callback}) {\r\n if (!show) {\r\n return {...state, isVisible: false, step: 1, firstName: '', lastName: ''};\r\n }\r\n\r\n return {...state, isVisible: true, callback};\r\n}\r\n\r\n","import * as types from '../actions/actionTypes';\r\nimport {hardCodeIsAmericanStandard} from \"../misc/fabricatorHardcode\";\r\n\r\nconst initialState = {\r\n priceWorksheetOpened: hardCodeIsAmericanStandard(),\r\n discountsReceived: false,\r\n discountSections: [],\r\n customAddedDiscounts: [], // same as discountInterface[], but also {categoryId, uuid}\r\n financePercentage: \"\", // %\r\n allFinanceOptionsPopupVisible: false,\r\n financeCellsVisible: false, // boolean\r\n};\r\n\r\nexport default function(state = initialState, action) {\r\n\r\n switch(action.type) {\r\n\r\n case types.TOGGLE_PRICE_WORKSHEET_OPENED:\r\n case types.SET_CUSTOM_ADDED_DISCOUNTS:\r\n case types.SET_FINANCE_PERCENTAGE:\r\n case types.SET_ALL_FINANCE_OPTIONS_POPUP_VISIBLE:\r\n case types.SET_DISCOUNT_FINANCE_CELLS_VISIBLE:\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n });\r\n case types.SET_DISCOUNT_SECTIONS:\r\n return Object.assign({}, state, {\r\n ...action.payload,\r\n discountsReceived: true\r\n });\r\n }\r\n\r\n return state;\r\n}\r\n","import $ from \"jquery\";\r\n\r\nimport * as types from '../actions/actionTypes';\r\nimport {LOOK_OVERLAYS} from \"../bvcomponents/look/core/constants\";\r\n\r\nconst initialState = {\r\n showUnlockCalculations: false,\r\n unlockCalculationsStep: 0,\r\n showCartItems: [],\r\n showTotalItems: [], // \"tax\", \"total\"\r\n showUnlockCalculationsTutorial: false,\r\n unlockCalculationsTutorialIsFinished: false,\r\n unlockCalculationsTutorialStep: 0,\r\n};\r\n\r\nexport default function(state = initialState, action) {\r\n\r\n switch(action.type) {\r\n\r\n case types.SET_SHOW_UNLOCK_CALCULATIONS:\r\n case types.SET_UNLOCK_CALCULATIONS_STEP:\r\n case types.SHOW_UNLOCK_CALCULATIONS_CART_ITEM:\r\n case types.SHOW_UNLOCK_CALCULATIONS_TOTAL_ITEM:\r\n case types.SHOW_UNLOCK_CALCULATIONS_TUTORIAL:\r\n case types.SET_UNLOCK_CALCULATIONS_TUTORIAL_STEP:\r\n case types.SET_UNLOCK_CALCULATIONS_TUTORIAL_FINISHED:\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n });\r\n case types.SET_LOOK_OVERLAY_OPENED:\r\n if ((action.payload.lookOverlayOpened === LOOK_OVERLAYS.leadCapture) && state.showUnlockCalculations && (state.unlockCalculationsStep !== 4)) {\r\n const overlayElement = document.querySelector(\".look-overlay--style\");\r\n if (overlayElement) {\r\n $(overlayElement).fadeIn(300);\r\n }\r\n return Object.assign({}, state, {\r\n unlockCalculationsStep: 4\r\n });\r\n }\r\n }\r\n\r\n return state;\r\n\r\n}\r\n","import * as types from '../actions/actionTypes';\r\n\r\nconst initialState = {\r\n quotes: [\r\n {}\r\n ],\r\n activeQuoteIndex: 0,\r\n};\r\n\r\nexport default function(state = initialState, action) {\r\n let updatedQuotes;\r\n switch(action.type) {\r\n case types.ADD_NEW_QUOTE:\r\n case types.SET_QUOTES:\r\n case types.SET_ACTIVE_QUOTE_INDEX:\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n });\r\n case types.UPDATE_QUOTE:\r\n updatedQuotes = [...state.quotes];\r\n updatedQuotes[updatedQuotes.findIndex(item => item === action.payload.quote)] = action.payload.updatedQuote\r\n return Object.assign({}, state, {quotes: updatedQuotes});\r\n }\r\n\r\n return state;\r\n\r\n}\r\n","import * as types from '../actions/actionTypes';\r\n\r\nconst initialState = {\r\n showAdvancedQuoting: false,\r\n activeQuoteIndex: 0,\r\n advancedQuotingSearchItem: null, // is needed for materials page (item that was clicked to change)\r\n};\r\n\r\nexport default function(state = initialState, action) {\r\n\r\n switch(action.type) {\r\n\r\n case types.TOGGLE_SHOW_ADVANCED_QUOTING:\r\n case types.SET_ADVANCED_QUOTING_SEARCH_ITEM:\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n });\r\n }\r\n\r\n return state;\r\n\r\n}\r\n","import * as types from '../actions/actionTypes';\r\n\r\nconst initialState = {\r\n showAssignQuotePopup: false,\r\n assignQuotePopupSearchText: \"\",\r\n assignQuotePopupEmployee: null,\r\n assignQuotePopupCustomer: null,\r\n assignQuotePopupSuccessText: \"\",\r\n assignQuoteCloneMode: false,\r\n assignQuoteOfflineCustomers: [],\r\n assignQuoteOfflineEmployees: [],\r\n assignQuotePopupSaveButtons: \"all\", // save or checkout or updateTax\r\n};\r\n\r\nexport default function(state = initialState, action) {\r\n\r\n switch(action.type) {\r\n\r\n case types.TOGGLE_SHOW_ASSIGN_QUOTE_POPUP:\r\n case types.SET_ASSIGN_QUOTE_POPUP_SEARCH_TEXT:\r\n case types.SET_ASSIGN_QUOTE_POPUP_EMPLOYEE:\r\n case types.SET_ASSIGN_QUOTE_POPUP_CUSTOMER:\r\n case types.SET_ASSIGN_QUOTE_POPUP_SUCCESS_TEXT:\r\n case types.SET_ASSIGN_QUOTE_CLONE_MODE:\r\n case types.SET_ASSIGN_QUOTE_OFFLINE_DATA:\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n });\r\n }\r\n\r\n return state;\r\n\r\n}\r\n","import * as types from '../actions/actionTypes';\r\n\r\nconst initialState = {\r\n receiptUrl: \"\",\r\n receiptSignature: \"\", // pngBase64\r\n};\r\n\r\nexport default function (state = initialState, action) {\r\n\r\n switch (action.type) {\r\n\r\n case types.SET_RECEIPT_URL:\r\n case types.SET_RECEIPT_SIGNATURE:\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n });\r\n }\r\n\r\n return state;\r\n\r\n}\r\n","import * as types from '../actions/actionTypes';\r\n\r\nconst initialState = {\r\n attachedToLine: [],\r\n waterfallSectionsData: [],\r\n underlaymentSections: [],\r\n\r\n selectedFeature: null,\r\n selectedPartIds: [],\r\n resourceTypes: []\r\n};\r\n\r\nexport default function(state = {...initialState}, action) {\r\n let filteredResource;\r\n let resourceTypes;\r\n let newState;\r\n switch(action.type) {\r\n case types.SET_SELECTED_FEATURE:\r\n case types.SET_SELECTED_PART_IDS:\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n });\r\n case types.SET_RESOURCES:\r\n state = {...state, [action.payload.resourceType]: action.payload.resources};\r\n break;\r\n case types.ADD_RESOURCE:\r\n newState = {\r\n [action.payload.resourceType]: [...state[action.payload.resourceType], action.payload.resource],\r\n }\r\n if (!state.resourceTypes.includes(action.payload.resourceType)) {\r\n newState.resourceTypes = [...state.resourceTypes, action.payload.resourceType]\r\n }\r\n return Object.assign({}, state, newState);\r\n case types.CHANGE_RESOURCE:\r\n filteredResource = state[action.payload.resourceType].map((item) => {\r\n if (item.id !== action.payload.resource.id) { return item }\r\n\r\n return {\r\n ...item,\r\n ...action.payload.resource\r\n }\r\n })\r\n\r\n return Object.assign({}, state, {[action.payload.resourceType]: filteredResource });\r\n\r\n case types.DELETE_RESOURCE:\r\n filteredResource = state[action.payload.resourceType].filter((row) => row.id !== action.payload.id);\r\n\r\n return Object.assign({}, state, {[action.payload.resourceType]: filteredResource });\r\n case types.DELETE_RESOURCE_ATTACHED_TO:\r\n filteredResource = state[action.payload.resourceType].filter((row) => row.attachedToId !== action.payload.attachedTo.id);\r\n\r\n return Object.assign({}, state, {[action.payload.resourceType]: filteredResource });\r\n case types.DELETE_ALL_RESOURCES:\r\n resourceTypes = {}\r\n for (const resourceType of state.resourceTypes) {\r\n resourceTypes[resourceType] = [];\r\n }\r\n return Object.assign({}, state, resourceTypes);\r\n }\r\n\r\n return state;\r\n}\r\n","import * as types from '../actions/actionTypes';\r\n\r\nconst initialState = {\r\n miteredSections: [],\r\n};\r\n\r\nexport default function(state = initialState, action) {\r\n let filteredMiteredSections;\r\n switch(action.type) {\r\n case types.SHOW_SLAB_TOOL:\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n });\r\n case types.SET_MITERED_SECTIONS:\r\n state = {...state, miteredSections: action.payload.miteredSections};\r\n break;\r\n case types.ADD_MITERED_SECTION:\r\n return Object.assign({}, state, {\r\n miteredSections: [...state.miteredSections, action.payload]\r\n });\r\n case types.CHANGE_MITERED_SECTION:\r\n filteredMiteredSections = state.miteredSections.map((item) => {\r\n if (item.id !== action.payload.id) { return item }\r\n\r\n return {\r\n ...item,\r\n ...action.payload\r\n }\r\n })\r\n\r\n return Object.assign({}, state, { miteredSections: filteredMiteredSections });\r\n\r\n case types.DELETE_MITERED_SECTION:\r\n if (state.miteredSections.length === 0) {\r\n return state\r\n }\r\n\r\n filteredMiteredSections = state.miteredSections.filter((row) => row.id !== action.payload.id);\r\n\r\n return Object.assign({}, state, { miteredSections: filteredMiteredSections });\r\n case types.DELETE_ALL_MITERED_SECTIONS:\r\n return Object.assign({}, state, { miteredSections: []});\r\n }\r\n\r\n return state;\r\n}\r\n","import $ from \"jquery\";\r\n\r\nimport * as types from '../actions/actionTypes';\r\nimport {LOOK_FEATURE_CONTENT, LOOK_WALLS_ONLY} from \"../bvcomponents/look/core/constants\";\r\nimport {IS_PRODUCT_JOURNEY} from \"../config\";\r\nimport {hardCodeIsEncore} from \"../misc/fabricatorHardcode\";\r\n\r\nconst defaultCompatabilityObject = {\r\n visible: false,\r\n compatabilityLogic: [],\r\n clickedFeature: null,\r\n applyFunction: null\r\n};\r\n\r\nconst defaultLockedTutorialObject = {\r\n visible: false,\r\n step: 0,\r\n anchorDbFeatureId: null,\r\n finished: false,\r\n withGrid: false,\r\n firstLockedIndex: null,\r\n firstUnlockedIndex: null,\r\n};\r\n\r\nconst defaultAllWallsTutorialObject = {\r\n visible: false,\r\n lookFeature: null,\r\n finished: false,\r\n withGrid: false,\r\n left: 0,\r\n top: 0,\r\n height: 0,\r\n // featureIndex: null,\r\n};\r\n\r\nconst initialState = {\r\n lookOpened: false,\r\n lookExpanded: false,\r\n lookParentKeys: [],\r\n lookViewType: 1,\r\n lookViewTypeWasChanged: false,\r\n // wishlistPopupOpened: false,\r\n sidebarModalOpened: false,\r\n lookActiveFeature: null,\r\n lookActiveFeatureStockCount: 0, // to update not in stock\r\n lookActiveCategory: \"\", //partId\r\n moreInfoOpened: \"\", // main or select\r\n moreInfoContent: LOOK_FEATURE_CONTENT.info, // main or select,\r\n lookPageOpened: \"\",\r\n lookOverlayOpened: \"\", // overlay type from constant\r\n lookOverlayAction: \"\", // overlay sub type (added for sharing text)\r\n lookViewChangeOptions: {\r\n newLayoutType: 1,\r\n newScene: 1,\r\n itemsToRemove: [],\r\n }, // overlay type from constant\r\n lookStylePopup: {\r\n notMatchingFeatures: [],\r\n colors: []\r\n }, // overlay type from constant\r\n // lookRemovePopup: {\r\n // fromFeature: null,\r\n // }, // overlay type from constant\r\n introStep: 0,\r\n introHidden: true,\r\n contextMenu: {\r\n opened: false,\r\n partId: \"\",\r\n layerPosition: \"\",\r\n position: {x: 0, y: 0},\r\n clickedOnItem: \"\",\r\n },\r\n lookWallsApplyTo: hardCodeIsEncore() ? [...LOOK_WALLS_ONLY] : [],\r\n lookAllWallsOpened: false,\r\n lookReturnAction: \"\",\r\n lookDemoPointsClicked: false,\r\n lookActiveFeaturePositionInList: null, // is used for navigation only to prevent jumping (null || number)\r\n navigationCount: 0,\r\n featureGroupCount: 0, // is used when feature group receives its features, to update other components\r\n lookCompatabilityAlert: Object.assign({}, defaultCompatabilityObject),\r\n lookRestoreState: null,\r\n lookLockedTutorial: Object.assign({}, defaultLockedTutorialObject),\r\n lookAllWallsTutorial: Object.assign({}, defaultAllWallsTutorialObject),\r\n};\r\n\r\nconst removeMenuFromState = (state, payload) => {\r\n if (state.lookExpanded) {\r\n payload.lookExpanded = false;\r\n }\r\n // if (state.lookActiveFeature) {\r\n // payload.lookActiveFeature = null;\r\n // }\r\n if (state.moreInfoOpened) {\r\n payload.moreInfoOpened = \"\";\r\n }\r\n if (state.lookAllWallsOpened) {\r\n payload.lookAllWallsOpened = false;\r\n }\r\n if (state.contextMenu.clickedOnItem) {\r\n state.contextMenu.clickedOnItem = \"\";\r\n }\r\n // if (state.lookActiveCategory) {\r\n // payload.lookActiveCategory = \"\";\r\n // }\r\n if (document.body.style.overflow === \"hidden\") {\r\n document.body.style.overflow = \"\";\r\n }\r\n return payload\r\n}\r\n\r\nexport default function(state = initialState, action) {\r\n let newState = {...state};\r\n switch(action.type) {\r\n case types.SET_LOOK_OPENED:\r\n if (!action.payload.lookOpened) {\r\n action.payload = removeMenuFromState(state, action.payload);\r\n } else if (action.payload.isMobile) {\r\n document.body.style.overflow = \"hidden\";\r\n }\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n });\r\n case types.SET_LOOK_ACTIVE_FEATURE:\r\n if (!action.payload.lookActiveFeature) {\r\n if (state.moreInfoOpened) {\r\n action.payload.moreInfoOpened = \"\";\r\n }\r\n if (state.lookRestoreState && !action.payload.isMobile) {\r\n action.payload.lookRestoreState = null;\r\n }\r\n }\r\n if (!IS_PRODUCT_JOURNEY) {\r\n action.payload.lookActiveCategory = action.payload.lookActiveFeature ? action.payload.lookActiveFeature.partId : \"\"\r\n }\r\n if (state.lookOpened && state.lookExpanded) {\r\n action.payload.lookExpanded = false;\r\n }\r\n if (state.lookOpened && state.lookExpanded) {\r\n action.payload.lookExpanded = false;\r\n }\r\n action.payload.lookCompatabilityAlert = Object.assign({}, defaultCompatabilityObject);\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n });\r\n case types.SET_LOOK_ACTIVE_CATEGORY:\r\n if (state.moreInfoOpened) {\r\n action.payload.moreInfoOpened = \"\";\r\n }\r\n if (!action.payload.lookActiveCategory && state.lookRestoreState) {\r\n action.payload.lookRestoreState = null;\r\n }\r\n if (state.contextMenu.clickedOnItem\r\n && (!action.payload.lookActiveCategory || (action.payload.lookActiveCategory !== \"vanity_sink\"))) {\r\n state.contextMenu.clickedOnItem = \"\";\r\n }\r\n if (action.payload.lookActiveCategory && (action.payload.lookActiveCategory.includes(\"floor\"))) {\r\n $(\"html, body\").animate({scrollTop: document.body.scrollHeight}, 500);\r\n }\r\n action.payload.lookCompatabilityAlert = Object.assign({}, defaultCompatabilityObject);\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n });\r\n case types.SET_LOOK_EXPANDED:\r\n case types.SET_LOOK_PARENT_KEYS:\r\n case types.SET_WISHLIST_POPUP_OPENED:\r\n case types.SET_SIDEBAR_MODAL_OPENED:\r\n case types.SET_LOOK_MORE_INFO_OPENED:\r\n case types.SET_LOOK_PAGE_OPENED:\r\n case types.SET_LOOK_OVERLAY_OPENED:\r\n case types.SET_LOOK_INTRO_STEP:\r\n case types.SET_LOOK_INTRO_HIDDEN:\r\n case types.SET_LOOK_WALLS_APPLY_TO:\r\n case types.SET_LOOK_ALL_WALLS_OPENED:\r\n case types.SET_LOOK_RETURN_ACTION:\r\n case types.SET_LOOK_DEMO_POINTS_CLICKED:\r\n case types.SET_LOOK_RESTORE_STATE:\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n });\r\n case types.SET_LOOK_VIEW_TYPE:\r\n return Object.assign({}, state, {\r\n ...action.payload, lookViewTypeWasChanged: true\r\n });\r\n case types.SET_LOOK_VIEW_CHANGE_OPTIONS:\r\n return Object.assign({}, state, {\r\n lookViewChangeOptions: Object.assign({}, state.lookViewChangeOptions, action.payload.lookViewChangeOptions)\r\n });\r\n case types.SET_LOOK_STYLE_POPUP:\r\n return Object.assign({}, state, {\r\n lookStylePopup: Object.assign({}, state.lookStylePopup, action.payload.lookStylePopup)\r\n });\r\n case types.SET_LOOK_REMOVE_POPUP:\r\n return Object.assign({}, state, {\r\n lookRemovePopup: Object.assign({}, state.lookRemovePopup, action.payload.lookRemovePopup)\r\n });\r\n case types.SET_LOOK_CONTEXT_MENU:\r\n return Object.assign({}, state, {\r\n contextMenu: Object.assign({}, state.contextMenu, action.payload.contextMenu)\r\n });\r\n case types.SET_LOOK_COMPATABILITY_ALERT:\r\n return Object.assign({}, state, {\r\n lookCompatabilityAlert: Object.assign({}, state.lookCompatabilityAlert, action.payload.lookCompatabilityAlert)\r\n });\r\n case types.SET_LOOK_LOCK_TUTORIAL:\r\n return Object.assign({}, state, {\r\n lookLockedTutorial: Object.assign({}, state.lookLockedTutorial, action.payload.lookLockedTutorial)\r\n });\r\n case types.SET_LOOK_ALL_WALLS_TUTORIAL:\r\n return Object.assign({}, state, {\r\n lookAllWallsTutorial: Object.assign({}, state.lookAllWallsTutorial, action.payload.lookAllWallsTutorial)\r\n });\r\n case types.UPDATE_LOOK_NAVIGATION_COUNT:\r\n return Object.assign({}, state, {\r\n navigationCount: state.navigationCount + 1\r\n });\r\n case types.UPDATE_LOOK_ACTIVE_FEATURE_STOCK_COUNT:\r\n return Object.assign({}, state, {\r\n lookActiveFeatureStockCount: state.lookActiveFeatureStockCount + 1\r\n });\r\n case types.SET_WIZARD_ACTIVE_ITEM:\r\n if (!state.lookOpened && action.payload.wizardActiveItem) {\r\n return Object.assign({}, state, {\r\n lookOpened: true,\r\n });\r\n }\r\n break;\r\n case types.SET_WIZARD_ACTIVE_STEP:\r\n return Object.assign({}, state, {\r\n moreInfoOpened: false,\r\n lookActiveFeaturePositionInList: null,\r\n });\r\n default:\r\n break;\r\n }\r\n return newState;\r\n}\r\n","import * as types from '../actions/actionTypes';\r\nimport {getFeatureGroupFeaturesQuantity} from \"../bvcomponents/look/lookNavigation/lookNavigationFunctions\";\r\n\r\nconst initialState = {\r\n filtersOpened: false,\r\n similarFeature: null,\r\n similarProductsOpened: false,\r\n requiredButNotIncludedFeature: null,\r\n groheFiltersSearchText: \"\",\r\n lastOpenedFeature: null,\r\n lastOpenedCategory: null,\r\n subCategoryOpened: \"\",\r\n showAddedToTheCartSuccess: false,\r\n groheActiveFeatureQuantity: 1,\r\n groheShareButtonsOpened: false,\r\n groheSameColorActiveFeature: null,\r\n groheSameColorSectionOpened: false,\r\n groheSameColorCheckboxApplied: false,\r\n exisingTempId: \"\",\r\n};\r\n\r\nexport default function(state = initialState, action){\r\n switch (action.type) {\r\n case types.SET_GROHE_FILTERS_OPENED:\r\n case types.SET_GROHE_SIMILAR_FEATURE:\r\n case types.SET_GROHE_SIMILAR_PRODUCTS_OPENED:\r\n case types.SET_GROHE_REQUIRED_BUT_NOT_INCLUDED_FEATURE:\r\n case types.SET_GROHE_FILTERS_SEARCH_TEXT:\r\n case types.SET_GROHE_LAST_OPENED_CATEGORY:\r\n case types.SET_GROHE_SUB_CATEGORY_OPENED:\r\n case types.SET_GROHE_SHOW_ADDED_TO_THE_CART_SUCCESS:\r\n case types.SET_GROHE_ACTIVE_FEATURE_QUANTITY:\r\n case types.SET_GROHE_SHARE_BUTTONS_OPENED:\r\n case types.SET_GROHE_SAME_COLOR_SECTION_OPENED:\r\n case types.SET_GROHE_SAME_COLOR_CHECKBOX_APPLIED:\r\n case types.SET_GROHE_SAME_COLOR_ACTIVE_FEATURE:\r\n case types.SET_GROHE_EXISTING_TEMP_ID:\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n });\r\n case types.SET_LOOK_ACTIVE_FEATURE: {\r\n return Object.assign({}, state, {\r\n lastOpenedFeature: action.payload.lookActiveFeature || state.lastOpenedFeature,\r\n subCategoryOpened: action.payload.lookActiveFeature ? \"\" : state.subCategoryOpened,\r\n groheActiveFeatureQuantity: getFeatureGroupFeaturesQuantity(action.payload.lookActiveFeature),\r\n });\r\n }\r\n case types.SET_LOOK_ACTIVE_CATEGORY: {\r\n return Object.assign({}, state, {\r\n lastOpenedCategory: action.payload.lookActiveCategory || state.lastOpenedCategory,\r\n filtersOpened: !action.payload.lookActiveCategory && state.filtersOpened ? false : state.filtersOpened,\r\n groheFiltersSearchText: !action.payload.lookActiveCategory && state.groheFiltersSearchText ? \"\" : state.groheFiltersSearchText, // always remove it on open/close\r\n });\r\n }\r\n case types.SET_LOOK_OPENED: {\r\n return Object.assign({}, state, {\r\n lastOpenedFeature: (!action.payload.lookOpened && state.lastOpenedFeature) ? null : state.lastOpenedFeature,\r\n lastOpenedCategory: (!action.payload.lookOpened && state.lastOpenedCategory) ? null : state.lastOpenedCategory,\r\n subCategoryOpened: \"\", // always remove it on open/close\r\n similarProductsOpened: false, // always remove it on open/close\r\n requiredButNotIncludedFeature: null, // always remove it on open/close\r\n groheActiveFeatureQuantity: !action.payload.lookOpened ? 1 : state.groheActiveFeatureQuantity,\r\n groheFiltersSearchText: \"\", // always remove it on open/close\r\n });\r\n }\r\n case types.SET_LOOK_PAGE_OPENED: {\r\n return Object.assign({}, state, {\r\n groheSameColorActiveFeature: (action.payload.lookPageOpened && state.groheSameColorActiveFeature) ? null : state.groheSameColorActiveFeature,\r\n });\r\n }\r\n case types.SET_WIZARD_ACTIVE_ITEM: {\r\n return Object.assign({}, state, {\r\n subCategoryOpened: \"\",\r\n groheFiltersSearchText: \"\", // always remove it on open/close\r\n });\r\n }\r\n case types.SET_WIZARD_ACTIVE_STEP: {\r\n if (state.groheFiltersSearchText) {\r\n return Object.assign({}, state, {\r\n groheFiltersSearchText: \"\", // always remove it on step change\r\n });\r\n }\r\n }\r\n }\r\n return state;\r\n}\r\n","import * as types from '../actions/actionTypes';\r\n\r\nconst initialState = {\r\n iframeIntegrationRequest: {},\r\n iframeIntegrationResponse: {},\r\n};\r\n\r\nexport default function(state = initialState, action) {\r\n let newState = {...state};\r\n switch(action.type) {\r\n case types.SET_IFRAME_INTEGRATION_REQUEST:\r\n return Object.assign({}, state, {\r\n iframeIntegrationRequest: {...action.payload.iframeIntegrationRequest}\r\n });\r\n case types.SET_IFRAME_INTEGRATION_RESPONSE:\r\n return Object.assign({}, state, {\r\n iframeIntegrationResponse: {...action.payload.iframeIntegrationResponse}\r\n });\r\n }\r\n return newState;\r\n}\r\n","import * as types from '../actions/actionTypes';\r\n\r\nconst initialState = {\r\n wizardOpened: false,\r\n wizardName: \"\",\r\n wizardStep: -1,\r\n};\r\n\r\nexport default function(state = initialState, action){\r\n switch (action.type) {\r\n case types.SET_GROHE_WIZARD_NAME:\r\n case types.SET_GROHE_WIZARD_OPENED:\r\n case types.SET_GROHE_WIZARD_STEP:\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n });\r\n }\r\n return state;\r\n}\r\n","import * as types from '../actions/actionTypes';\r\n\r\nconst initialState = {\r\n cardInfo: {\r\n cardNumber: \"\", // ccNum\r\n cardName: \"\", // name\r\n expMonth: \"\",\r\n expYear: \"\",\r\n cvv: \"\",\r\n country: \"USA\",\r\n // zipCode: \"\",\r\n // country: defaultCountryValue,\r\n },\r\n cardErrors: {}, // {\"cardName\": [\"too short\"]}, {\"phoneNumber\": [\"this field is required\"]}, etc.\r\n shippingErrors: {}, // {\"postal\": [\"too short\"]}, {\"phoneNumber\": [\"this field is required\"]}, etc.\r\n selectedShippingAddressIndex: 0, // not used anymore, we can't select shipping addresses\r\n selectedBillingAddressIndex: 0, // not used anymore, we can't select shipping addresses\r\n shippingAddress: {\r\n fullName: \"\", // name\r\n address1: \"\",\r\n address2: \"\",\r\n city: \"\",\r\n state: \"\",\r\n stateShort: \"\", // used in google maps submit\r\n postal: \"\" // zip\r\n },\r\n billingAddress: {\r\n fullName: \"\", // name\r\n address1: \"\",\r\n address2: \"\",\r\n city: \"\",\r\n state: \"\",\r\n stateShort: \"\", // used in google maps submit\r\n postal: \"\" // zip\r\n },\r\n billingSameAsShipping: false,\r\n};\r\n\r\nexport default function(state = initialState, action){\r\n switch (action.type) {\r\n case types.SET_PAYMENT_INFO:\r\n return Object.assign({}, state, {\r\n [action.payload.name]: action.payload.value\r\n });\r\n case types.SET_SHIPPING_INFO:\r\n return Object.assign({}, state, {\r\n shippingAddress: {\r\n ...state.shippingAddress, ...{[action.payload.name]: action.payload.value}\r\n }\r\n });\r\n case types.SET_BILLING_INFO:\r\n return Object.assign({}, state, {\r\n billingAddress: {\r\n ...state.billingAddress, ...{[action.payload.name]: action.payload.value}\r\n }\r\n });\r\n case types.SET_CARD_INFO:\r\n return Object.assign({}, state, {\r\n cardInfo: {\r\n ...state.cardInfo, ...{[action.payload.name]: action.payload.value}\r\n }\r\n })\r\n case types.SET_CARD_ERRORS:\r\n return Object.assign({}, state, {\r\n cardErrors: {...state.cardErrors, ...action.payload.cardErrors}\r\n })\r\n case types.SET_SHIPPING_ERRORS:\r\n return Object.assign({}, state, {\r\n shippingErrors: {...state.shippingErrors, ...action.payload.shippingErrors}\r\n })\r\n case types.RESTORE_PAYMENT_INFO:\r\n return Object.assign({}, state, Object.assign({}, action.payload))\r\n }\r\n return state;\r\n}\r\n","import * as types from '../actions/actionTypes';\r\n\r\nconst initialState = {\r\n layoutHistory: [],\r\n};\r\n\r\nexport default function(state = initialState, action) {\r\n\r\n switch(action.type) {\r\n\r\n case types.ADD_LAYOUT_HISTORY: {\r\n const lastState = state.layoutHistory[state.layoutHistory.length - 1];\r\n if (lastState) {\r\n if (JSON.stringify(lastState) !== JSON.stringify(action.payload.layoutState)) {\r\n state.layoutHistory.push(action.payload.layoutState)\r\n }\r\n } else {\r\n state.layoutHistory.push(action.payload.layoutState)\r\n }\r\n return Object.assign({}, state, {\r\n layoutHistory: state.layoutHistory\r\n })\r\n }\r\n case types.SET_LAYOUT_HISTORY:\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n })\r\n }\r\n\r\n return state;\r\n\r\n}\r\n","import * as types from '../actions/actionTypes';\r\nimport {ROUTES} from \"../routes\";\r\nimport {getCurrentLayout} from \"../bvcomponents/appLayout\";\r\n\r\nconst initialState = {\r\n shopPageLoaded: false,\r\n shopPageOpened: false,\r\n shopLastPageVisited: ROUTES.shop,\r\n shopPageLeaved: false,\r\n // shopActiveCategory: \"\",\r\n // shopActiveFeature: \"\",\r\n};\r\n\r\nconst getLastVisitedShopPage = (partId, withFeature = null, currentPage = \"\") => {\r\n const layout = getCurrentLayout();\r\n if (!layout.partIdExistInQtCategory(partId, true)) {\r\n return ROUTES.shop\r\n }\r\n if (withFeature) {\r\n return `${ROUTES.shop}/${partId}/${withFeature.dbFeature.sku || withFeature.dbFeature.sharedFeatureName}`\r\n }\r\n if (currentPage && currentPage.includes(partId + \"/\")) { // + \"/\" - we are checking if there is anything more (feature opened)\r\n return currentPage\r\n }\r\n return `${ROUTES.shop}/${partId}`\r\n}\r\n\r\nexport default function (state = initialState, action) {\r\n\r\n switch (action.type) {\r\n\r\n case types.SET_SHOP_PAGE_LOADED:\r\n case types.SET_SHOP_PAGE_OPENED:\r\n case types.SET_SHOP_LAST_PAGE_VISITED:\r\n case types.SET_SHOP_PAGE_LEAVED:\r\n // case types.SET_SHOP_ACTIVE_CATEGORY:\r\n // case types.SET_SHOP_ACTIVE_FEATURE:\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n });\r\n case types.SET_LOOK_ACTIVE_CATEGORY: {\r\n if (!state.shopPageOpened && action.payload.lookActiveCategory) {\r\n const shopLastPageVisited = getLastVisitedShopPage(action.payload.lookActiveCategory, null, state.shopLastPageVisited);\r\n if (shopLastPageVisited !== state.shopLastPageVisited) {\r\n return Object.assign({}, state, {\r\n shopLastPageVisited\r\n });\r\n }\r\n }\r\n return state;\r\n }\r\n case types.SET_LOOK_ACTIVE_FEATURE: {\r\n if (!state.shopPageOpened && action.payload.lookActiveFeature) {\r\n const shopLastPageVisited = getLastVisitedShopPage(action.payload.lookActiveFeature.partId, action.payload.lookActiveFeature, state.shopLastPageVisited);\r\n if (shopLastPageVisited !== state.shopLastPageVisited) {\r\n return Object.assign({}, state, {\r\n shopLastPageVisited\r\n });\r\n }\r\n }\r\n break;\r\n }\r\n // case types.SET_SHOP_ACTIVE_FEATURE:\r\n }\r\n\r\n return state;\r\n\r\n}\r\n","import * as types from '../actions/actionTypes';\r\n\r\nconst initialState = {\r\n isSwitching : false,\r\n activeStep: 0,\r\n};\r\n\r\nexport default function(state = initialState, action) {\r\n\r\n switch(action.type) {\r\n\r\n case types.SET_SQFT_TUTORIAL_STEP:\r\n if (state.isSwitching) {\r\n return Object.assign({}, state) // don't do anything until animation will finish\r\n }\r\n\r\n return Object.assign({}, state, {\r\n activeStep: action.payload.activeStep <= 0 ? 0 : action.payload.activeStep\r\n });\r\n\r\n case types.SET_SQFT_TUTORIAL_SWITCHING:\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n });\r\n\r\n }\r\n\r\n return state;\r\n\r\n}\r\n","import React from \"react\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\nimport {connect} from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nconst UserFieldErrors = (props) => {\r\n\r\n const {property, userInfoErrors} = props;\r\n\r\n const errorsExist = Array.isArray(userInfoErrors[property]) && userInfoErrors[property].length;\r\n if (!errorsExist) {\r\n return null\r\n }\r\n\r\n return (\r\n
    \r\n {userInfoErrors[property].map((error) => {\r\n return (\r\n \r\n \r\n \r\n )\r\n })}\r\n
    \r\n )\r\n};\r\n\r\nUserFieldErrors.propTypes = {\r\n property: PropTypes.string.isRequired,\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const {userInfo, userInfoErrors} = store.userState;\r\n return {\r\n userInfo,\r\n userInfoErrors,\r\n // fabricatorData: store.fabricatorState,\r\n };\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps)(UserFieldErrors)\r\n)\r\n","import React, {useEffect, useState} from \"react\";\r\nimport {connect} from \"react-redux\";\r\nimport Axios from \"axios\";\r\nimport $ from \"jquery\";\r\n\r\nimport LoadingSpinner from \"../../ui/loadingSpinner\";\r\nimport {baseNewImagesPath} from \"../../assets\";\r\nimport {IS_LIXIL_UI} from \"../../../config\";\r\n\r\nconst getPrivacyPolicyUrl = (fabricatorData) => {\r\n if (fabricatorData.isRebath) {\r\n return \"rebathTerms.html\"\r\n } else if (fabricatorData.isLowes) {\r\n return \"lowesTerms.html\"\r\n } else if (fabricatorData.isNhance) {\r\n return \"nhanceTerms.html\"\r\n }\r\n return \"qcTerms.html\"\r\n}\r\n\r\nconst PrivacyPolicyTerms = (props) => {\r\n\r\n const {fabricatorData} = props;\r\n const [terms, setTerms] = useState(null);\r\n\r\n const privacyPolicyUrl = getPrivacyPolicyUrl(fabricatorData);\r\n\r\n useEffect(() => {\r\n const getTerms = async () => {\r\n const termsResponse = await Axios.get(baseNewImagesPath + \"privacyPolicy/\" + privacyPolicyUrl);\r\n if (termsResponse && termsResponse.data) {\r\n setTerms(termsResponse.data)\r\n }\r\n }\r\n getTerms();\r\n\r\n window.anchorScroll = (anchor) => {\r\n const $scrollableDiv = $(IS_LIXIL_UI ? \".grohe-lead__content\" : \".user-popup-terms\");\r\n const scrollToDiv = document.querySelector(`[data-anchor=${anchor}]`);\r\n // const scrollTop = $scrollToDiv ? $scrollToDiv.position().top - 50 : 0;\r\n const scrollTop = scrollToDiv ? scrollToDiv.offsetTop - 60 : 0;\r\n if (scrollTop) {\r\n $scrollableDiv.animate({scrollTop}, 1000);\r\n }\r\n }\r\n\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n return terms ?
    : \r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const fabricatorData = store.fabricatorState;\r\n return {\r\n fabricatorData\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps)(PrivacyPolicyTerms)\r\n","import {closeSQFTTool} from \"../helpers/sqftHelperUi\";\r\nimport {getFeatureUrl} from \"../../look/lookNavigation/lookFunctions2\";\r\nimport {clearAllMenusEvents} from \"../components/canvas/core/workspace/workspaceEvents\";\r\nimport Analytics from \"../../../analytics\";\r\nimport isObject from \"lodash/isObject\";\r\nimport {SQFT_FEATURES} from \"../constants\";\r\nimport {IS_LIXIL_UI} from \"../../../config\";\r\nimport {isFirefox} from \"../../../misc/helpers\";\r\nimport {setShowAddedToTheCartSuccess} from \"../../../actions/groheFunctions\";\r\nimport {setSqftFromFeature} from \"../../../actions/sqftFunctions\";\r\nimport {setCameFromPage} from \"../../../actions/actionFunctions\";\r\nimport {useChangeWizardStepRoute} from \"../../qkbPages/materialsWizard/useChangeWizardStepRoute\";\r\nimport {useHistory} from \"react-router-dom\";\r\nimport store from \"../../../store\";\r\n\r\nexport const useCloseSQFTCalc = () => {\r\n const {changeWizardStepRoute} = useChangeWizardStepRoute();\r\n const history = useHistory();\r\n const state = store.getState();\r\n const {cameFromPage} = state.cartState\r\n\r\n const closeLixilUi = (cameFromPage, shouldChangeWizardToNextStep) => {\r\n closeSQFTTool(cameFromPage, shouldChangeWizardToNextStep, changeWizardStepRoute);\r\n const {wizardIsActive} = store.getState().wizardState;\r\n\r\n if (!wizardIsActive) {\r\n window.setTimeout(() => {\r\n store.dispatch(setShowAddedToTheCartSuccess(true));\r\n }, 300)\r\n history.push(getFeatureUrl(cameFromPage));\r\n history.push(`/cart`);\r\n }\r\n }\r\n\r\n const closeSQFTCalc = (shouldChangeWizardToNextStep = true) => {\r\n // if (payload && payload.measureUnit) {\r\n // props.setSqftMeasureUnit(payload.measureUnit);\r\n // }\r\n //this.sendPostMessageToSqft(SQFT_POST_MESSAGE_ACTIONS.stopRender);\r\n\r\n clearAllMenusEvents();\r\n Analytics.sendClickEvent('sqft-close');\r\n store.dispatch(setSqftFromFeature(null));\r\n\r\n const leaveSqft = () => {\r\n if (isObject(cameFromPage) && cameFromPage.partId && cameFromPage.partId !== SQFT_FEATURES.slabs) {\r\n if (IS_LIXIL_UI) {\r\n closeLixilUi(cameFromPage, shouldChangeWizardToNextStep)\r\n } else {\r\n closeSQFTTool(\"materials\", shouldChangeWizardToNextStep, changeWizardStepRoute);\r\n }\r\n //props.toggleSelectionFeatureInfo(cameFromPage);\r\n } else {\r\n const redirectToPage = cameFromPage && cameFromPage !== \"sqft\" ? cameFromPage : \"materials\"\r\n closeSQFTTool(redirectToPage, shouldChangeWizardToNextStep, changeWizardStepRoute);\r\n }\r\n store.dispatch(setCameFromPage(\"sqft\"));\r\n };\r\n\r\n if (isFirefox()) {\r\n setTimeout(() => {\r\n leaveSqft();\r\n }, 0)\r\n } else {\r\n leaveSqft();\r\n }\r\n }\r\n\r\n return {closeSQFTCalc}\r\n};\r\n","import * as PropTypes from \"prop-types\";\r\n\r\nexport const customerInterface = {\r\n id: PropTypes.number,\r\n fullName: PropTypes.string,\r\n email: PropTypes.string,\r\n};\r\n\r\nexport const employeeInterface = {\r\n id: PropTypes.number,\r\n fullName: PropTypes.string,\r\n};\r\n","import React from \"react\";\r\n\r\nexport const initialContext = {\r\n inputsValidated: true,\r\n customerError: \"\",\r\n selectedContracts: [], // [\"id\"]\r\n}\r\n\r\nexport default React.createContext(initialContext);\r\n","import React from \"react\";\r\nimport {connect} from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\nimport UiIcon from \"../ui/icons/uiIcon\";\r\n\r\nexport const subPartIsDone = (relatedIem, activeQuoteIndex, cartItems = []) => {\r\n const {placeholderChanged, activeFeature, activeNotInVisualizerFeature, firstClick} = relatedIem;\r\n const selectedFeature = activeFeature || activeNotInVisualizerFeature;\r\n return cartItems.some(cartItem => {\r\n return (cartItem.partId === relatedIem.partId) && (cartItem.currentQuote === activeQuoteIndex) && !cartItem.cartFeature.dbFeature.autoAddToCart\r\n }) || (placeholderChanged && firstClick[activeQuoteIndex] && selectedFeature && !selectedFeature.partName.includes(\"laceholder\"))\r\n}\r\n\r\nconst SubPartDoneCheckMark = (props) => {\r\n\r\n const {placeholderChanged, activeFeature, activeNotInVisualizerFeature, firstClick, activeQuoteIndex, partId, cartItems} = props;\r\n\r\n const selected = subPartIsDone(\r\n {placeholderChanged, activeFeature, activeNotInVisualizerFeature, firstClick, partId},\r\n activeQuoteIndex,\r\n cartItems\r\n );\r\n\r\n if (!selected) {\r\n return null\r\n }\r\n\r\n return (\r\n
    \r\n \r\n
    \r\n )\r\n};\r\n\r\nSubPartDoneCheckMark.propTypes = {\r\n relatedItem: PropTypes.object.isRequired,\r\n}\r\n\r\nconst mapStateToProps = (store, ownProps) => {\r\n return {\r\n activeQuoteIndex: store.quotesState.activeQuoteIndex,\r\n activeFeature: ownProps.relatedItem.activeFeature,\r\n activeNotInVisualizerFeature: ownProps.relatedItem.activeNotInVisualizerFeature,\r\n firstClick: ownProps.relatedItem.firstClick,\r\n placeholderChanged: ownProps.relatedItem.placeholderChanged,\r\n partId: ownProps.relatedItem.partId,\r\n cartItems: store.cartState.cartItems,\r\n fabricatorData: store.fabricatorState\r\n };\r\n};\r\nconst mapDispatchToProps = {};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(SubPartDoneCheckMark)\r\n","import React, { Fragment } from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport { FormattedMessage, injectIntl } from \"react-intl\";\r\n\r\nimport Button from \"@mui/material/Button\";\r\nimport SvgIcon from \"@mui/material/SvgIcon\";\r\nimport { Look3DIcon, LookAugmentRealityIcon } from \"../../common/icons\";\r\nimport { LOOK_FEATURE_CONTENT } from \"../../look/core/constants\";\r\nimport COLOR_THEMES from \"../../../colorThemes\";\r\nimport config from \"../../sqft/components/canvas/store/sqftConfig\";\r\nimport {\r\n changeSqftFeaturesPopup,\r\n setAPIErrorMessage,\r\n setSqftCabinetsGlb,\r\n setSQFTViewMode\r\n} from \"../../../actions/sqftFunctions\";\r\nimport { setAbortController, setSQFTAr3dPopup } from \"../../../actions/sqftMenuFunctions\";\r\nimport { SQFT_VIEW_MODE } from \"../../sqft/constants\";\r\nimport { setCabinetGLBFromCabinetsSet } from \"../../sqft/helpers/sqft3dArHelper\";\r\nimport {setMultiLoader} from \"../../../actions/actionFunctions\";\r\n\r\nexport const SqftFeaturesPopup3dButtons = (props) => {\r\n const { changeSqftFeaturesPopup, isMobile, setSQFTViewMode, setMultiLoader, SQFTViewMode } = props;\r\n\r\n const threeDButtonClick = async () => {\r\n changeSqftFeaturesPopup({\r\n opened: false,\r\n sqftPassedData: null\r\n });\r\n if (SQFTViewMode === SQFT_VIEW_MODE.threeDMode) {\r\n setMultiLoader({activeStep: 0, visible: true, finished: false});\r\n }\r\n setSQFTViewMode(SQFT_VIEW_MODE.threeDMode);\r\n await setCabinetGLBFromCabinetsSet().then(r => void r);\r\n // setSQFTAr3dPopup({isOpened: true, contentType: SQFT_AR3D_POPUP_CONTENT_TYPE.threeD})\r\n // await setCabinetGLBFromCabinetsSet().then(r => void r);\r\n }\r\n\r\n const arButtonClick = async () => {\r\n changeSqftFeaturesPopup({\r\n opened: false,\r\n sqftPassedData: null\r\n });\r\n if (SQFTViewMode === SQFT_VIEW_MODE.augmentedReality) {\r\n setMultiLoader({activeStep: 0, visible: true, finished: false});\r\n }\r\n setSQFTViewMode(SQFT_VIEW_MODE.augmentedReality);\r\n await setCabinetGLBFromCabinetsSet().then(r => void r);\r\n // setSQFTAr3dPopup({isOpened: true, contentType: SQFT_AR3D_POPUP_CONTENT_TYPE.ar})\r\n // await setCabinetGLBFromCabinetsSet().then(r => void r);\r\n }\r\n\r\n const threeDButtonID = isMobile ? 'sqft.popup.button.3dButtonMobile' : 'sqft.popup.button.3dButton';\r\n const augButtonID = isMobile ? 'sqft.popup.button.augButtonMobile' : 'sqft.popup.button.augButton';\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n )\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const {isMobile} = store.serverState;\r\n return {\r\n isMobile,\r\n abortRequestController: store.sqftState.abortRequestController,\r\n cabinetsGlb: store.sqftState.cabinetsGlb,\r\n SQFTViewMode: store.sqftState.SQFTViewMode,\r\n };\r\n};\r\nconst mapDispatchToProps = {\r\n setSqftCabinetsGlb,\r\n setSQFTAr3dPopup,\r\n changeSqftFeaturesPopup,\r\n setAPIErrorMessage,\r\n setAbortController,\r\n setSQFTViewMode,\r\n setMultiLoader,\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(SqftFeaturesPopup3dButtons)\r\n)\r\n","import React, {useEffect, useRef} from 'react';\r\nimport {connect} from \"react-redux\";\r\nimport {animateButtons, hideButtons} from \"../../../../SqftUiFunctions\";\r\nimport {SIDEBAR_LAYOUTS_BUTTONS} from \"../../../../../constants\";\r\nimport Square from \"../../../../canvas/core/shapes/layouts/square\";\r\nimport WideAngle from \"../../../../canvas/core/shapes/layouts/wideAngle\";\r\nimport Horseshoe from \"../../../../canvas/core/shapes/layouts/horseshoe\";\r\nimport Rectangle from \"../../../../canvas/core/shapes/layouts/rectangle\";\r\nimport RectangleIsland from \"../../../../canvas/core/shapes/layouts/rectangleIsland\";\r\nimport WideAngleReverted from \"../../../../canvas/core/shapes/layouts/wideAngleReverted\";\r\nimport workspace from \"../../../../canvas/core/workspace\";\r\nimport eventManager from \"../../../../canvas/store/sqftEventManager\";\r\nimport config from \"../../../../canvas/store/sqftConfig\";\r\nimport {toggleChangeLayoutPopup, updateSQFTCalculations} from \"../../../../../../../actions/sqftFunctions\";\r\nimport store from \"../../../../../../../store\";\r\nimport {setSQFTRoomLayouts} from \"../../../../../../../actions/sqftMenuFunctions\";\r\nimport {getCountertopPartNames} from \"../../../../../helpers/shapeHelper\";\r\n\r\nexport const setNewLayout = (layoutName) => {\r\n workspace.removeAllShapes();\r\n eventManager.stealCursor(true);\r\n window.setNextLayout = layoutName;\r\n const [countertopPartName, centerIslandPartName] = getCountertopPartNames();\r\n\r\n switch (layoutName) {\r\n case \"S\":\r\n case \"SP\":\r\n workspace.addShape(new Rectangle(), 'square', null, countertopPartName, layoutName);\r\n break;\r\n case \"SI\":\r\n case \"SPI\":\r\n workspace.addShape(new RectangleIsland(config.shapeSize), 'square', null, countertopPartName, layoutName);\r\n break;\r\n case \"SN\":\r\n case \"SNI\":\r\n case \"SPN\":\r\n case \"SPNI\":\r\n workspace.addShape(new WideAngleReverted(config.shapeSize), 'wideangle', null, countertopPartName, layoutName);\r\n break;\r\n case \"L\":\r\n case \"LI\":\r\n workspace.addShape(new WideAngle(config.shapeSize), 'wideangle', null, countertopPartName, layoutName);\r\n break;\r\n case \"LN\":\r\n case \"LNI\":\r\n workspace.addShape(new Horseshoe(config.shapeSize), 'horseshoe', null, countertopPartName, layoutName);\r\n break;\r\n default:\r\n break;\r\n }\r\n if (layoutName.includes(\"I\")) {\r\n workspace.addShape(new Square(config.shapeSize, true), 'square', null, centerIslandPartName, layoutName);\r\n }\r\n\r\n // todo sqft-react remove?\r\n // nodes.layoutButtons.forEach(function (layoutButton) {\r\n // layoutButton.classList.remove(\"shapes-icon--active\");\r\n // });\r\n // document.querySelector(\"[data-layout='\"+layoutName+\"']\").classList.add(\"shapes-icon--active\");\r\n\r\n if (window.innerHeight < 480 && window.innerWidth < 991) {\r\n // todo sqft-react\r\n //Menu.hideSidebarSide();\r\n //Menu.hideSideBarContent();\r\n }\r\n const state = store.getState();\r\n const updateCalculations = state.sqftState.updateCalculations;\r\n\r\n store.dispatch(updateSQFTCalculations(updateCalculations + 1));\r\n};\r\n\r\nexport const setRoomLayouts = (itemName) => {\r\n const state = store.getState();\r\n const roomLayouts = state.sqftMenuState.roomLayouts;\r\n const activeRoomIndex = state.sqftMenuState.activeRoomIndex;\r\n const updatedRoomLayouts = [...roomLayouts];\r\n const roomLayoutIndex = updatedRoomLayouts.findIndex(roomLayout => roomLayout.roomIndex === activeRoomIndex);\r\n if (roomLayoutIndex >= 0) {\r\n updatedRoomLayouts[roomLayoutIndex].layoutName = itemName;\r\n setSQFTRoomLayouts(updatedRoomLayouts);\r\n } else {\r\n setSQFTRoomLayouts([...roomLayouts, {roomIndex: activeRoomIndex, layoutName: itemName}]);\r\n }\r\n}\r\n\r\nconst SqftNavLayouts = (props) => {\r\n // other popups, modals and so on\r\n const {menuOpened, activeButton, roomLayouts, activeRoomIndex, setSQFTRoomLayouts} = props;\r\n const expanded = activeButton && menuOpened === \"layouts\";\r\n const buttonRefs = useRef({});\r\n\r\n useEffect(() => {\r\n const buttons = Object.values(buttonRefs.current);\r\n if(expanded) {\r\n animateButtons(buttons);\r\n } else {\r\n hideButtons(buttons);\r\n }\r\n\r\n }, [expanded]);\r\n\r\n const handleButtonClick = async (event, itemName) => {\r\n console.log(\"itemName\", itemName);\r\n event.preventDefault();\r\n event.stopPropagation();\r\n const shapesLength = workspace.getShapes().length;\r\n const isRoomHasLayout = roomLayouts.some(roomLayout => roomLayout.roomIndex === activeRoomIndex);\r\n\r\n if (isRoomHasLayout || shapesLength) {\r\n callChangeLayoutDataPopup(itemName, true);\r\n setRoomLayouts(itemName);\r\n } else {\r\n setNewLayout(itemName);\r\n setSQFTRoomLayouts([...roomLayouts, {roomIndex: activeRoomIndex, layoutName: itemName}]);\r\n }\r\n };\r\n\r\n //todo\r\n const callChangeLayoutDataPopup = (layoutName, applyLayoutOnSqft = false) => {\r\n props.toggleChangeLayoutPopup(true, layoutName, applyLayoutOnSqft);\r\n // window.parent.postMessage({\r\n // action: SQFT_POST_MESSAGE_ACTIONS.callChangeLayoutDataPopup,\r\n // payload: {\r\n // layoutName,\r\n // applyLayoutOnSqft\r\n // }\r\n // }, \"*\");\r\n };\r\n\r\n return (\r\n
    \r\n
    \r\n {\r\n SIDEBAR_LAYOUTS_BUTTONS.map((item, index) => (\r\n
    \r\n
    \r\n\r\n )\r\n\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n menuOpened: store.sqftMenuState.menuOpened,\r\n activeButton: store.sqftMenuState.activeButton,\r\n activeRoomType: store.sqftMenuState.activeRoomType,\r\n roomLayouts: store.sqftMenuState.roomLayouts,\r\n qtActiveCategory: store.qtState.qtActiveCategory,\r\n quotes: store.quotesState.quotes,\r\n activeRoomIndex: store.sqftMenuState.activeRoomIndex,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n toggleChangeLayoutPopup,\r\n setSQFTRoomLayouts,\r\n};\r\n\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(SqftNavLayouts);\r\n","import { useState, useEffect, useMemo } from 'react';\r\nimport { checkIfLookFeaturesReceived } from \"../../../api/look-api\";\r\nimport { getCurrentLayout } from \"../../appLayout\";\r\n\r\nconst useFetchFeatures = (partIds, searchText = \"\", shouldGetModelsOnlyWithThirdPartyAR3DUrls = false) => {\r\n const [featuresData, setFeaturesData] = useState({});\r\n const [isLoading, setIsLoading] = useState(true);\r\n\r\n const layout = useMemo(() => getCurrentLayout(), []);\r\n\r\n useEffect(() => {\r\n const fetchAllRows = async () => {\r\n setIsLoading(true);\r\n const newFeaturesData = {};\r\n\r\n for (const partId of partIds) {\r\n const featureGroup = layout.getFeatureGroupByPartId(partId);\r\n let navItems = [];\r\n\r\n if (featureGroup) {\r\n // If features are not received and no request is in progress, wait for the promise\r\n if (!featureGroup.allFeaturesReceived && !featureGroup.requestInProgress) {\r\n await checkIfLookFeaturesReceived(featureGroup);\r\n }\r\n\r\n navItems = layout.designNavigationItems(\r\n { part: featureGroup },\r\n [],\r\n searchText,\r\n null,\r\n \"all\",\r\n [],\r\n { firstFeature: null, firstConditions: null },\r\n )\r\n\r\n if (shouldGetModelsOnlyWithThirdPartyAR3DUrls) {\r\n navItems = navItems.filter(feature => {\r\n return feature.part\r\n && feature.part.dbFeature\r\n && Array.isArray(feature.part.dbFeature.thirdPartyAR3DUrls)\r\n && feature.part.dbFeature.thirdPartyAR3DUrls.length > 0\r\n })\r\n }\r\n }\r\n\r\n newFeaturesData[partId] = {\r\n rows: navItems,\r\n featureGroup: featureGroup,\r\n };\r\n }\r\n\r\n setFeaturesData(newFeaturesData);\r\n setIsLoading(false);\r\n };\r\n\r\n fetchAllRows();\r\n }, [partIds, searchText, layout, shouldGetModelsOnlyWithThirdPartyAR3DUrls]);\r\n\r\n return { featuresData, isLoading };\r\n};\r\n\r\nexport default useFetchFeatures;\r\n","import React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport {injectIntl} from \"react-intl\";\r\n\r\nimport IconButton from \"@mui/material/IconButton\";\r\nimport ListIcon from \"@mui/icons-material/List\";\r\nimport ViewStreamIcon from '@mui/icons-material/ViewStream';\r\nimport ViewModuleIcon from '@mui/icons-material/ViewModule';\r\n\r\nimport {setLookViewType} from \"../../../../actions/lookFunctions\";\r\nimport Analytics, {LOOK_JOURNEY_ANALYTIC_EVENTS} from \"../../../../analytics\";\r\n\r\nconst LookViewTypeSwitcher = (props) => {\r\n\r\n const {intl, lookExpanded, lookViewType, setLookViewType, isMobile} = props;\r\n\r\n const listButtonClick = () => {\r\n const newViewType = lookViewType === 4 ? 1 : lookViewType + 1;\r\n Analytics.sendClickEvent(LOOK_JOURNEY_ANALYTIC_EVENTS.lookMenuHeaderViewType + newViewType);\r\n setLookViewType(newViewType);\r\n };\r\n\r\n const getViewIcon = () => {\r\n switch (lookViewType) {\r\n case 1:\r\n default:\r\n return \r\n case 2:\r\n return \r\n case 3:\r\n return \r\n case 4:\r\n return \r\n }\r\n }\r\n\r\n return (\r\n \r\n {getViewIcon(lookViewType)}\r\n \r\n )\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const {lookExpanded, lookViewType} = store.lookState;\r\n const {isMobile} = store.serverState;\r\n return {\r\n lookExpanded,\r\n lookViewType,\r\n isMobile,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setLookViewType\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(LookViewTypeSwitcher)\r\n)\r\n","import React, {useEffect, useMemo, useRef, useState} from 'react';\r\nimport {connect} from \"react-redux\";\r\nimport { Grid } from 'react-virtualized';\r\nimport 'react-virtualized/styles.css';\r\nimport {injectIntl} from 'react-intl';\r\nimport PropTypes from \"prop-types\";\r\nimport uniqBy from \"lodash/uniqBy\";\r\n\r\nimport {getCurrentLayout} from \"../../../../../../../appLayout\";\r\nimport {featureInterface} from \"../../../../../../../../interfaces/featureInterface\";\r\nimport SqftFeaturesChecker from \"./SqftFeaturesChecker\";\r\nimport SqftOptionsLoading from \"./SqftOptionsLoading\";\r\nimport SqftOptionsRelatedItemRow from \"./SqftOptionsRelatedItemRow\";\r\nimport {\r\n getFilteredRelatedFeatures,\r\n getRelatedFeaturesFromLayout,\r\n} from \"../../../../../../../../misc/helpers\";\r\nimport {getSortedFeatures} from \"../../../../../../helpers/featureHelper\";\r\nimport {loaderDisable, loaderEnable} from \"../../../../../../../ui/loaderView\";\r\n\r\nconst SqftOptionsRelatedItemList = (props) => {\r\n const { windowHeight, isMobile, activeFeature, itemClickCallback, partId, shouldSortByWidth, searchInputValue,\r\n reCacheMenuCounter, lookViewType, selectedFilters, groheFiltersSearchText } = props;\r\n const [activeItemIndex, setActiveItemIndex] = React.useState(0);\r\n const containerRef = useRef(null);\r\n const [containerHeight, setContainerHeight] = useState(0);\r\n const [loading, setLoading] = useState(true);\r\n const [parentFeature, setParentFeature] = useState(null);\r\n const [width, setWidth] = useState(296);\r\n\r\n useEffect(() => {\r\n setWidth(isMobile ? 238 : 296);\r\n }, [isMobile]);\r\n\r\n useEffect(() => {\r\n const handleResize = () => {\r\n if (containerRef.current) {\r\n setContainerHeight(containerRef.current.clientHeight);\r\n }\r\n };\r\n\r\n const setupResizeObserver = () => {\r\n const resizeObserver = new ResizeObserver(handleResize);\r\n const currentContainer = containerRef.current;\r\n\r\n if (currentContainer) {\r\n setContainerHeight(currentContainer.clientHeight);\r\n resizeObserver.observe(currentContainer);\r\n }\r\n\r\n return () => {\r\n if (currentContainer) {\r\n resizeObserver.unobserve(currentContainer);\r\n }\r\n };\r\n };\r\n\r\n // Set up observer after a short delay to ensure the ref is available\r\n const timeoutId = setTimeout(() => {\r\n setupResizeObserver();\r\n }, 0);\r\n\r\n return () => {\r\n clearTimeout(timeoutId);\r\n setupResizeObserver();\r\n };\r\n }, [containerRef]);\r\n\r\n useEffect(() => {\r\n if (containerRef.current) {\r\n setContainerHeight(containerRef.current.clientHeight);\r\n }\r\n }, [windowHeight]);\r\n\r\n const layout = useMemo(() => getCurrentLayout(), []);\r\n const featureGroup = useMemo(() => layout.getFeatureGroupByPartId(partId), [layout, partId]);\r\n\r\n useEffect(() => {\r\n if (featureGroup) {\r\n setLoading(!featureGroup.allFeaturesReceived);\r\n if (!featureGroup.allFeaturesReceived) {\r\n loaderEnable();\r\n }\r\n } else {\r\n setLoading(false);\r\n }\r\n }, [featureGroup]);\r\n\r\n useEffect(() => {\r\n if (!featureGroup) {\r\n setParentFeature(null);\r\n return;\r\n }\r\n\r\n let parentFeature;\r\n\r\n if (featureGroup.activeFeature) {\r\n parentFeature = featureGroup.activeFeature;\r\n } else if (!featureGroup.allFeaturesReceived) {\r\n setParentFeature(null);\r\n return;\r\n }\r\n\r\n if (!featureGroup.activeFeature) {\r\n //featureGroup.setDefault(layout, true);\r\n parentFeature = featureGroup.activeFeature ? featureGroup.activeFeature : featureGroup.activeNotInVisualizerFeature;\r\n }\r\n\r\n setParentFeature(parentFeature);\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [featureGroup, layout, activeFeature, partId, loading, reCacheMenuCounter]);\r\n\r\n if (!featureGroup) {\r\n return \r\n }\r\n\r\n if (loading) {\r\n return (\r\n {\r\n if (featureGroup.allFeaturesReceived) {\r\n setLoading(false);\r\n loaderDisable();\r\n }\r\n }} />\r\n )\r\n }\r\n\r\n if (!parentFeature) {\r\n console.log(\"selected feature matched by name not found\", partId);\r\n console.log(\"parentFeature\", parentFeature);\r\n return null;\r\n }\r\n\r\n const relatedFeatures = parentFeature.getFeatureRelatedFeatures();\r\n\r\n if (!Array.isArray(relatedFeatures) || !relatedFeatures.length) {\r\n console.log(\"relatedFeatures are missing\", relatedFeatures);\r\n console.log(\"parentFeature\", parentFeature);\r\n return null;\r\n }\r\n\r\n // Helper function to replace abbreviations in search text\r\n const expandSearchText = (text) => {\r\n return text\r\n .replace(/\\bh(\\d)/gi, 'Height $1')\r\n .replace(/\\bw(\\d)/gi, 'Width $1')\r\n .replace(/\\bd(\\d)/gi, 'Depth $1')\r\n .replace(/\\bh\\b/gi, 'Height')\r\n .replace(/\\bw\\b/gi, 'Width')\r\n .replace(/\\bd\\b/gi, 'Depth');\r\n };\r\n const expandedGroheFiltersSearchText = expandSearchText(groheFiltersSearchText);\r\n\r\n //Now let's search for the related features\r\n const {noFeaturesFound, relatedFeaturesFound} = getRelatedFeaturesFromLayout(\r\n relatedFeatures,\r\n parentFeature,\r\n expandedGroheFiltersSearchText,\r\n selectedFilters\r\n );\r\n if (noFeaturesFound.length) {\r\n console.log(\"ERROR: noFeaturesFound\", noFeaturesFound);\r\n }\r\n\r\n let relatedItemsList = getFilteredRelatedFeatures(relatedFeaturesFound);\r\n relatedItemsList = uniqBy(relatedItemsList, (feature) => feature.dbFeature.id);\r\n let emptyUrlsLog = [];\r\n\r\n relatedItemsList = relatedItemsList.filter(feature => {\r\n if (!feature.dbFeature.thirdPartyAR3DUrls) {\r\n //todo we can remove this searchInputValue and search by filters\r\n if (searchInputValue && feature.getFeatureName().toLowerCase().includes(searchInputValue.toLowerCase())\r\n || !searchInputValue\r\n ) {\r\n emptyUrlsLog.push(feature.dbFeature.sharedFeatureName);\r\n }\r\n } else {\r\n return feature;\r\n }\r\n });\r\n\r\n // const relatedGroups = createRelatedGroups(relatedItemsList, [], activeQuoteIndex, intl, fabricatorData)\r\n // void relatedGroups\r\n // console.log(\"relatedGroups\", relatedGroups);\r\n //\r\n // const groupName = parentFeature.dbFeature.groupName;\r\n // void groupName;\r\n\r\n if (emptyUrlsLog.length > 0) {\r\n console.log(`Features with empty thirdPartyAR3DUrls: ${emptyUrlsLog.join(', ')}`);\r\n }\r\n\r\n if (shouldSortByWidth) {\r\n relatedItemsList = getSortedFeatures(relatedItemsList);\r\n }\r\n\r\n // Define column and row settings based on lookViewType\r\n let columnCount;\r\n let rowHeight;\r\n\r\n switch (lookViewType) {\r\n case 1:\r\n columnCount = 1;\r\n rowHeight = 104;\r\n break;\r\n case 2:\r\n columnCount = 2;\r\n rowHeight = 170;\r\n break;\r\n case 3:\r\n columnCount = 1;\r\n rowHeight = 320; // Increased row height\r\n break;\r\n case 4:\r\n columnCount = 3;\r\n rowHeight = 128;\r\n break;\r\n default:\r\n columnCount = 1;\r\n rowHeight = 135;\r\n }\r\n\r\n const columnWidth = Math.floor(width / columnCount) - 8 / columnCount; // Ensure width is an integer to avoid overflow\r\n const rowCount = Math.ceil(relatedItemsList.length / columnCount);\r\n\r\n return (\r\n
    \r\n {\r\n {\r\n const index = rowIndex * columnCount + columnIndex;\r\n if (index >= relatedItemsList.length) return null;\r\n return (\r\n \r\n )\r\n }}\r\n />\r\n }\r\n
    \r\n )\r\n};\r\n\r\nSqftOptionsRelatedItemList.propTypes = {\r\n activeFeature: PropTypes.shape(featureInterface),\r\n partId: PropTypes.string,\r\n shouldSortByWidth: PropTypes.bool,\r\n itemClickCallback: PropTypes.func,\r\n //searchInputValue: PropTypes.string\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const { menuOpened, reCacheMenuCounter } = store.sqftMenuState;\r\n const { visualizersLoaded } = store.serverState;\r\n const { windowHeight, isMobile } = store.serverState;\r\n const { activeQuoteIndex } = store.quotesState;\r\n const { sqftFromFeature } = store.sqftState;\r\n const { lookViewType } = store.lookState;\r\n const {groheFiltersSearchText} = store.groheState;\r\n const {selectedFilters} = store.filterState;\r\n\r\n return {\r\n menuOpened,\r\n windowHeight,\r\n isMobile,\r\n activeQuoteIndex,\r\n visualizersLoadedLength: visualizersLoaded.length,\r\n fabricatorData: store.fabricatorState,\r\n sqftFromFeature,\r\n reCacheMenuCounter,\r\n groheFiltersSearchText,\r\n selectedFilters,\r\n lookViewType,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n};\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(SqftOptionsRelatedItemList)\r\n)\r\n","import React from \"react\";\r\nimport {connect} from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nconst LookVirtualizedListLoadingItem = (props) => {\r\n\r\n const {style, currentType, lookExpanded} = props;\r\n\r\n return (\r\n
  • \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n {currentType === 1 ? (\r\n
    \r\n
    \r\n
    \r\n ) : null}\r\n
    \r\n
  • \r\n )\r\n};\r\n\r\nLookVirtualizedListLoadingItem.propTypes = {\r\n style: PropTypes.object,\r\n viewType: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\r\n}\r\n\r\nconst mapStateToProps = (store, ownProps) => {\r\n const {lookExpanded, lookViewType} = store.lookState;\r\n const {isMobile} = store.serverState;\r\n const {viewType} = ownProps;\r\n\r\n return {\r\n lookExpanded,\r\n currentType: viewType || lookViewType,\r\n isMobile,\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps)(LookVirtualizedListLoadingItem)\r\n","import React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport SvgIcon from \"@mui/material/SvgIcon\";\r\n\r\nimport {featureInterface} from \"../../../../../interfaces/featureInterface\";\r\nimport {GroheLockIconSmall} from \"../../../../common/icons\";\r\nimport {pricingIsLocked} from \"../../lookNavigationFunctions\";\r\nimport {getCurrentLayout} from \"../../../../appLayout\";\r\nimport {setLookOverlayOpened} from \"../../../../../actions/lookFunctions\";\r\nimport {LOOK_OVERLAYS} from \"../../../core/constants\";\r\n\r\nconst LookFeaturePriceLocked = (props) => {\r\n\r\n const {lookFeature, lockedText, setLookOverlayOpened} = props;\r\n\r\n let {showPrice} = pricingIsLocked();\r\n if (showPrice && lookFeature) {\r\n const layout = getCurrentLayout();\r\n showPrice = layout.partIdExistInQtCategory(lookFeature.partId);\r\n }\r\n\r\n const handlePriceLockClick = () => {\r\n console.log(\"lookFeature\", lookFeature);\r\n setLookOverlayOpened(LOOK_OVERLAYS.leadCapture);\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )\r\n\r\n};\r\n\r\nLookFeaturePriceLocked.propTypes = {\r\n lookFeature: PropTypes.shape(featureInterface),\r\n lockedText: PropTypes.string,\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n fabricatorData: store.fabricatorState,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setLookOverlayOpened\r\n}\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(LookFeaturePriceLocked)\r\n)\r\n","import React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport IconButton from \"@mui/material/IconButton\";\r\nimport CloseIcon from \"@mui/icons-material/Close\";\r\n\r\nimport {setSelectedFilters, showFilters} from \"../../../../actions/actionFunctions\";\r\nimport GroheFiltersSearchInputAsync from \"../../grohe/groheNavigation/groheFilters/groheFiltersSearchInputAsync\";\r\nimport LookFiltersList from \"./lookFiltersList\";\r\nimport LookFiltersReset from \"./lookFiltersReset\";\r\nimport Analytics, {LOOK_JOURNEY_ANALYTIC_EVENTS} from \"../../../../analytics\";\r\nimport {setSQFTActiveLevel3Button} from \"../../../../actions/sqftMenuFunctions\";\r\n\r\n\r\nconst LookFilters = (props) => {\r\n const { wrapperStyles, filtersOpened, intl, showFilters, lookActiveCategory, isMobile, lookActiveFeature,\r\n selectedFilters, groheFiltersSearchText } = props;\r\n const { isRelatedItemsFilters, shouldCloseLevel3Sidebar, setSQFTActiveLevel3Button } = props;\r\n\r\n const closeFilterClick = () => {\r\n Analytics.sendClickEvent(LOOK_JOURNEY_ANALYTIC_EVENTS.lookFeaturesFiltersClose);\r\n showFilters(!filtersOpened);\r\n if (shouldCloseLevel3Sidebar) {\r\n setSQFTActiveLevel3Button(null);\r\n }\r\n };\r\n\r\n if (!lookActiveCategory) {\r\n return null\r\n }\r\n\r\n //console.log(\"availableFilters\", availableFilters);\r\n\r\n return (\r\n
    \r\n
    \r\n
    \r\n

    \r\n \r\n \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n \r\n \r\n {selectedFilters.length || groheFiltersSearchText ? : null}\r\n
    \r\n
    \r\n )\r\n};\r\n\r\nLookFilters.propTypes = {\r\n wrapperStyles: PropTypes.object,\r\n isRelatedItemsFilters: PropTypes.bool,\r\n shouldCloseLevel3Sidebar: PropTypes.bool\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {lookActiveCategory, lookActiveFeature} = store.lookState;\r\n const {showFilters, selectedFilters} = store.filterState;\r\n const {isMobile} = store.serverState;\r\n const {groheFiltersSearchText} = store.groheState;\r\n\r\n return {\r\n filtersOpened: showFilters,\r\n selectedFilters,\r\n lookActiveCategory,\r\n lookActiveFeature,\r\n isMobile,\r\n groheFiltersSearchText,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n showFilters,\r\n setSelectedFilters,\r\n setSQFTActiveLevel3Button,\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(LookFilters)\r\n);\r\n","import React from \"react\";\r\nimport {FormattedMessage} from \"react-intl\";\r\nimport {connect} from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\nimport {useLocation} from \"react-router-dom\";\r\n\r\nimport {IS_PRODUCT_JOURNEY} from \"../../config\";\r\nimport Analytics, {LOOK_JOURNEY_ANALYTIC_EVENTS} from \"../../analytics\";\r\nimport {ROUTES} from \"../../routes\";\r\nimport {isIframe} from \"../../misc/helpers\";\r\nimport {UserPopupContent} from \"../visComponents/constants\";\r\nimport {setUserPopupContent} from \"../../actions/userFunctions\";\r\nimport {setLookOverlayOpened} from \"../../actions/lookFunctions\";\r\nimport {LOOK_OVERLAYS} from \"./core/constants\";\r\n\r\n\r\nconst LookPolicyLinks = (props) => {\r\n\r\n const {position, isSimple, lookPageOpened, isMobile, fabricatorData, setUserPopupContent, setLookOverlayOpened} = props;\r\n const location = useLocation();\r\n\r\n const openLink = (linkKey) => {\r\n const baseUrl = fabricatorData.isAmericanStandard\r\n ? \"https://www.americanstandard-us.com\"\r\n : window.location && window.location.ancestorOrigins && window.location.ancestorOrigins[\"0\"]\r\n ? window.location.ancestorOrigins[\"0\"]\r\n : \"https://grohe.us\";\r\n\r\n Analytics.sendClickEvent(lookPageOpened === ROUTES.list\r\n ? LOOK_JOURNEY_ANALYTIC_EVENTS.lookListPolicyLinks + linkKey\r\n : LOOK_JOURNEY_ANALYTIC_EVENTS.lookCanvasPolicyLinks + linkKey\r\n );\r\n\r\n switch (linkKey) {\r\n case \"terms\": {\r\n const openUrl = fabricatorData.isAmericanStandard\r\n ? baseUrl + \"/terms-of-use#Terms%20of%20Use\"\r\n : baseUrl + \"/legal-info\";\r\n return window.open(openUrl, \"_blank\");\r\n }\r\n case \"privacy\": {\r\n const openUrl = fabricatorData.isAmericanStandard\r\n ? baseUrl + \"/privacy-policy#Privacy\"\r\n : baseUrl + \"/privacy-policy\";\r\n return window.open(openUrl, \"_blank\");\r\n }\r\n // case \"socialPolicy\":\r\n // return window.open(baseUrl + \"/social-policy\", \"_blank\");\r\n // case \"legalInfo\":\r\n // return window.open(baseUrl + (fabricatorData.isAmericanStandard ? \"/lead-generation-policy\" : \"/legal-info\"), \"_blank\");\r\n case \"privacyQC\": {\r\n setUserPopupContent(UserPopupContent.terms);\r\n setLookOverlayOpened(LOOK_OVERLAYS.leadCapture, \"termsOnly\");\r\n break;\r\n }\r\n default:\r\n return\r\n }\r\n }\r\n\r\n const isLixil = isIframe() && fabricatorData.isLixil;\r\n\r\n return (\r\n
    \r\n
      \r\n {isLixil ? [\"terms\", \"privacy\"].map(linkKey => {\r\n return (\r\n
    • \r\n openLink(linkKey)}>\r\n \r\n \r\n
    • \r\n )\r\n }) : (\r\n
    • \r\n openLink(\"privacyQC\")}>\r\n \r\n \r\n
    • \r\n )}\r\n
    \r\n
    \r\n )\r\n};\r\n\r\nLookPolicyLinks.propTypes = {\r\n position: PropTypes.string,\r\n isSimple: PropTypes.bool\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {lookPageOpened} = store.lookState;\r\n const {isMobile} = store.serverState;\r\n const fabricatorData = store.fabricatorState;\r\n return {\r\n lookPageOpened,\r\n isMobile,\r\n fabricatorData\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setUserPopupContent,\r\n setLookOverlayOpened\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(LookPolicyLinks)\r\n","import {connect} from \"react-redux\";\r\n\r\nimport {postMessageToParent} from \"../lookMessaging\";\r\nimport {GROHE_ON_OPEN_ACTION, GROHE_POST_MESSAGES_ACTIONS} from \"../iframeIntegration\";\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\nimport {getTempIdForPostMessage, LIXIL_USER_QUERY_PARAMS} from \"../../../api/look-api\";\r\nimport {getLookId} from \"../lookNavigation/lookFunctions2\";\r\nimport {loaderEnable} from \"../../ui/loaderView\";\r\n\r\nconst WithLoginPostMessage = (props) => {\r\n\r\n const {children, lookReturnAction, activePreset, bvPresets, exisingTempId} = props;\r\n\r\n const loginPostMessage = async (sessionEnded = false) => {\r\n loaderEnable();\r\n const layout = getCurrentLayout();\r\n await layout.updateLocalStorage();\r\n\r\n let tempId = await getTempIdForPostMessage(lookReturnAction || GROHE_ON_OPEN_ACTION.saveQuote, exisingTempId);\r\n let lookUrl = window.location.href;\r\n\r\n if (sessionEnded) {\r\n const searchParams = new URLSearchParams(\r\n (window.location.search).replace(/amp;/g, \"\")\r\n || (window.location.hash).replace(/(.*)\\?/g, \"\")\r\n || \"\"\r\n );\r\n LIXIL_USER_QUERY_PARAMS.forEach(param => searchParams.delete(param));\r\n\r\n let stringifiedParams = searchParams.toString();\r\n let baseHref = window.location.origin + window.location.pathname;\r\n if (baseHref[baseHref.length - 1] === \"/\") {\r\n baseHref.slice(0, -1);\r\n }\r\n if (stringifiedParams && stringifiedParams.length && stringifiedParams[0] !== \"?\") {\r\n stringifiedParams = \"?\" + stringifiedParams;\r\n }\r\n lookUrl = baseHref + stringifiedParams + window.location.hash;\r\n\r\n }\r\n\r\n if (!lookUrl.includes(\"look-\")) {\r\n const withHashUrl = new URL(lookUrl);\r\n const lookId = getLookId(activePreset, bvPresets);\r\n withHashUrl.hash = `#/look-${lookId}`;\r\n lookUrl = withHashUrl.href;\r\n }\r\n\r\n console.log(\"returnUrl: \", lookUrl);\r\n\r\n postMessageToParent({\r\n \"EventType\": GROHE_POST_MESSAGES_ACTIONS.signIn,\r\n \"returnUrl\": lookUrl,\r\n \"tempID\": tempId\r\n });\r\n }\r\n\r\n return children(loginPostMessage)\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const {lookReturnAction} = store.lookState;\r\n const {exisingTempId} = store.groheState;\r\n const {activePreset, bvPresets} = store.bathroomVisualizerState;\r\n\r\n return {\r\n lookReturnAction,\r\n activePreset,\r\n bvPresets,\r\n exisingTempId,\r\n }\r\n};\r\n\r\nconst mapDispatchToProps = {};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(WithLoginPostMessage)\r\n","import React, {useEffect} from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\nimport {injectIntl} from \"react-intl\";\r\nimport { withRouter } from \"react-router-dom\";\r\n\r\nimport {setLookOpened,\r\n setSidebarModalOpened,\r\n setLookActiveFeature,\r\n setLookActiveCategory} from \"../../../../actions/lookFunctions\";\r\nimport LookSideBarLayoutButton from \"./lookSideBarLayoutButton\";\r\nimport LookSideBarSaveButton from \"./lookSideBarSaveButton\";\r\n// import LookSideBarHomeButton from \"./lookSideBarHomeButton\";\r\nimport LookSideBarEditButton from \"./lookSideBarEditButton\";\r\nimport LookSideBarMoreButton from \"./lookSideBarMoreButton\";\r\nimport LookSideBarFiltersButton from \"./lookSideBarFiltersButton\";\r\nimport {LOOK_INTRO_STEPS, LOOK_OVERLAYS} from \"../../core/constants\";\r\nimport {zoomCanvasOut} from \"../lookFunctions\";\r\nimport {setCanvasScale} from \"../../../../actions/actionFunctions\";\r\nimport LookSideBarPingPilotButton from \"./lookSideBarPingPilotButton\";\r\nimport LookSideBarRevertButton from \"./lookSideBarRevertButton\";\r\nimport WithUpdateLookCartItem from \"../../hocs/withUpdateLookCartItem\";\r\nimport {useShowRoomLayoutsButton} from \"../../../../misc/helperHooks\";\r\n\r\nconst LookSidebar = (props) => {\r\n\r\n const {popupCloseClick, imageCanvas, lookOverlayOpened, lookPageOpened, isMobile, introStep, lookOpened, setLookOpened,\r\n setCanvasScale, setLookActiveFeature, setLookActiveCategory, activePreset, visualizersLoadedLength} = props;\r\n\r\n const highLightForDemo = [LOOK_INTRO_STEPS.wallsAndFloor, LOOK_INTRO_STEPS.layoutsAndRooms, LOOK_INTRO_STEPS.saveAndMore];\r\n\r\n const stylePopups = [LOOK_OVERLAYS.stylePairing, LOOK_OVERLAYS.styleColor, LOOK_OVERLAYS.styleRemove, LOOK_OVERLAYS.styleRemoveBack];\r\n const stylePopupOnMobile = isMobile && stylePopups.some(popupType => popupType === lookOverlayOpened);\r\n\r\n useEffect(() => {\r\n // if (lookPageOpened || lookOverlayOpened) {\r\n if (lookPageOpened) {\r\n zoomCanvasOut(imageCanvas, setCanvasScale)\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [lookPageOpened, lookOverlayOpened])\r\n\r\n const sidebarButtonClicked = () => { // closes opened menu and zooms out canvas\r\n if (lookOpened) {\r\n setLookOpened(null);\r\n setLookActiveCategory(\"\");\r\n setLookActiveFeature(null);\r\n }\r\n // revertFeatureBeforeChange(updateCanvasCount);\r\n zoomCanvasOut(imageCanvas, setCanvasScale);\r\n }\r\n\r\n const showRoomLayoutsButton = useShowRoomLayoutsButton(activePreset, isMobile, visualizersLoadedLength);\r\n\r\n return (\r\n \r\n )\r\n};\r\n\r\nLookSidebar.propTypes = {\r\n popupCloseClick: PropTypes.func,\r\n imageCanvas: PropTypes.object,\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const {lookOpened, lookOverlayOpened, lookPageOpened, introStep} = store.lookState;\r\n const {activeTheme, isMobile, visualizersLoaded} = store.serverState;\r\n const {activePreset} = store.bathroomVisualizerState;\r\n\r\n return {\r\n lookOpened,\r\n activeTheme,\r\n lookOverlayOpened,\r\n isMobile,\r\n introStep,\r\n lookPageOpened,\r\n activePreset,\r\n visualizersLoadedLength: visualizersLoaded.length,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setLookOpened,\r\n setSidebarModalOpened,\r\n setCanvasScale,\r\n setLookActiveFeature,\r\n setLookActiveCategory,\r\n};\r\n\r\nexport default withRouter(\r\n injectIntl(connect(mapStateToProps, mapDispatchToProps)(LookSidebar))\r\n)\r\n","import {useEffect} from \"react\";\r\n\r\nexport const onInputBlur = (event, property, setInputValue, errorsObject, changeErrorsObject, getValidationErrors) => {\r\n const value = (event && event.target && event.target.value ? event.target.value : \"\").trim();\r\n setInputValue(property, value); // set trimmed version\r\n if (changeErrorsObject && getValidationErrors) {\r\n const errors = getValidationErrors(property, value);\r\n if (errors.length) {\r\n changeErrorsObject({\r\n [property]: errors\r\n })\r\n } else if (!errors.length && errorsObject && errorsObject[property]) {\r\n changeErrorsObject({\r\n [property]: errors\r\n })\r\n }\r\n }\r\n}\r\n\r\nexport const onInputChange = (event, property, setInputValue, errorsObject, changeErrorsObject, getValidationErrors) => {\r\n const value = event.target.value;\r\n setInputValue(property, value);\r\n if (errorsObject && errorsObject[property] && getValidationErrors) {\r\n const errors = getValidationErrors(property, value);\r\n if (!errors.length && changeErrorsObject) {\r\n changeErrorsObject({\r\n [property]: errors\r\n })\r\n }\r\n }\r\n};\r\n\r\nexport const useInputsValidation = (inputsValidated, onBlur, inputValue) => {\r\n useEffect(() => {\r\n if (!inputsValidated) {\r\n onBlur({\r\n target: {\r\n value: inputValue\r\n }\r\n });\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [inputsValidated]);\r\n};\r\n","import React, {Fragment, useState} from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\nimport {withRouter} from \"react-router-dom\";\r\nimport trim from \"lodash/trim\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport PhoneIcon from '@mui/icons-material/Phone';\r\nimport TextField from \"@mui/material/TextField\";\r\nimport CheckIcon from '@mui/icons-material/Check';\r\n\r\nimport {setUserPopupContent, setUserTwoFa} from \"../../../actions/userFunctions\";\r\nimport {LOOK_OVERLAYS} from \"../core/constants\";\r\nimport {IS_PRODUCT_JOURNEY} from \"../../../config\";\r\nimport Analytics, {LOOK_JOURNEY_ANALYTIC_EVENTS, PRODUCT_JOURNEY_ANALYTIC_EVENTS} from \"../../../analytics\";\r\nimport {UserPopupContent} from \"../../visComponents/constants\";\r\nimport {ROUTES} from \"../../../routes\";\r\nimport {\r\n generateTwoFaAuthenticationToken,\r\n sendAuthenticationRequest,\r\n validateTwoFaAuthentication\r\n} from \"../../../api/user-api\";\r\nimport MaterialSpinner from \"../../ui/materialSpinner\";\r\nimport {changeUserInfo, setUserPhoneNumberValidated} from \"../../../actions/actionFunctions\";\r\n\r\nexport const sendAuthRequest = async (twoFALoading, analyticsLabel, userInfo, userIsLoggedIn, type, setUserTwoFa) => {\r\n if (twoFALoading) {\r\n return false\r\n }\r\n setUserTwoFa({\r\n twoFALoading: true\r\n });\r\n Analytics.sendClickEvent(analyticsLabel);\r\n const twoFAToken = await generateTwoFaAuthenticationToken();\r\n if (twoFAToken && userIsLoggedIn) {\r\n setUserTwoFa({ // set token to redux store, so the input can check it\r\n twoFAToken\r\n });\r\n await sendAuthenticationRequest(twoFAToken, `+${userInfo.country.dialCode} ${userInfo.phoneNumber}`, type);\r\n }\r\n setUserTwoFa({\r\n twoFALoading: false\r\n });\r\n}\r\n\r\nconst TwoFaCodeInput = (props) => {\r\n\r\n const {history, intl, setUserPhoneNumberValidated, userInfo, isPhoneNumberValidated, lookOverlayOpened,\r\n setUserPopupContent, userTwoFa, setUserTwoFa, closePopup, location} = props;\r\n const {twoFAToken, twoFALoading} = userTwoFa;\r\n\r\n const [authCode, setAuthCode] = useState(\"\");\r\n const [inValidCode, setInValidCode] = useState(\"\");\r\n const [isBlurred, setIsBlurred] = useState(false);\r\n\r\n const updatePhoneButtonClick = () => {\r\n if (twoFALoading) {\r\n return false\r\n }\r\n if (lookOverlayOpened === LOOK_OVERLAYS.leadCapture) {\r\n const analyticsLabel = IS_PRODUCT_JOURNEY\r\n ? PRODUCT_JOURNEY_ANALYTIC_EVENTS.leadCapturePopupTwoFAUpdatePhone\r\n : LOOK_JOURNEY_ANALYTIC_EVENTS.lookLeadCapturePopupTwoFAUpdatePhone;\r\n Analytics.sendClickEvent(analyticsLabel);\r\n setUserPopupContent(UserPopupContent.twoFA);\r\n return false\r\n }\r\n Analytics.sendClickEvent(PRODUCT_JOURNEY_ANALYTIC_EVENTS.cartTwoFAUpdatePhone);\r\n history.push(ROUTES.cartTwoFA);\r\n };\r\n\r\n const checkCode = async (newAuthCode) => {\r\n setUserTwoFa({\r\n twoFALoading: true\r\n });\r\n const validated = await validateTwoFaAuthentication(twoFAToken, newAuthCode, userInfo.phoneNumber);\r\n console.log(\"validated\", validated);\r\n setUserTwoFa({\r\n twoFALoading: false\r\n });\r\n Analytics.sendEvent(\"PhoneVerification\", validated ? \"Success\" : \"Failure\");\r\n if (validated) {\r\n setUserPhoneNumberValidated(true);\r\n const currentLocation = location.pathname;\r\n history.push(currentLocation + \"/phone-verified-thankyou\");\r\n setTimeout(() => {\r\n if (lookOverlayOpened === LOOK_OVERLAYS.leadCapture && closePopup) {\r\n history.push(currentLocation);\r\n closePopup();\r\n } else {\r\n history.push(ROUTES.cartTerms);\r\n }\r\n }, 2000);\r\n } else {\r\n setInValidCode(intl.formatMessage({id: \"look.inputs.errors.incorrectCode\"}));\r\n }\r\n }\r\n\r\n const onUserInputChange = (e) => {\r\n const newAuthCode = trim(e.target.value).replace(/[^0-9]/g, \"\");\r\n setAuthCode(newAuthCode);\r\n\r\n if (newAuthCode.length === 6) {\r\n if (inValidCode) {\r\n setInValidCode();\r\n }\r\n checkCode(newAuthCode);\r\n } else if (newAuthCode.length > 6) {\r\n setInValidCode(intl.formatMessage({id: \"look.inputs.errors.maxCode\"}));\r\n } else if (isBlurred && newAuthCode.length < 6) {\r\n setInValidCode(intl.formatMessage({id: \"look.inputs.errors.minCode\"}));\r\n } else if (inValidCode) {\r\n setInValidCode(\"\");\r\n }\r\n }\r\n\r\n return (\r\n
    \r\n
    \r\n
    \r\n setIsBlurred(true)}\r\n error={!!inValidCode}\r\n helperText={inValidCode}\r\n variant=\"outlined\" />\r\n
    \r\n
    \r\n
    \r\n {isPhoneNumberValidated ? (\r\n \r\n \r\n \r\n ) : twoFALoading ? : (\r\n \r\n \r\n \r\n )}\r\n
    \r\n
    \r\n )\r\n};\r\n\r\nTwoFaCodeInput.propTypes = {\r\n closePopup: PropTypes.func\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {userInfo, isPhoneNumberValidated, userIsLoggedIn, userTwoFa} = store.userState;\r\n const {lookOverlayOpened} = store.lookState;\r\n\r\n return {\r\n lookOverlayOpened,\r\n userInfo,\r\n isPhoneNumberValidated,\r\n userIsLoggedIn,\r\n userTwoFa,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n changeUserInfo,\r\n setUserPhoneNumberValidated,\r\n setUserTwoFa,\r\n setUserPopupContent,\r\n};\r\n\r\nexport default injectIntl(\r\n withRouter(\r\n connect(mapStateToProps, mapDispatchToProps)(TwoFaCodeInput)\r\n )\r\n)\r\n","import React, {useMemo, useRef} from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\nimport { withRouter } from \"react-router-dom\";\r\nimport $ from \"jquery\";\r\n\r\nimport CheckIcon from '@mui/icons-material/Check';\r\n\r\nimport FeatureName from \"../../../../visComponents/featureName\";\r\nimport {featureInterface} from \"../../../../../interfaces/featureInterface\";\r\nimport FeatureThumbnail from \"../../../../visComponents/featureThumbnail\";\r\nimport Config, {IS_LIXIL_SERVERS, IS_PRODUCT_JOURNEY} from \"../../../../../config\";\r\nimport {getCommonCoords, getFeatureCoords, getLayerCenter, navFeatureCLick, zoomCanvasOut} from \"../../lookFunctions\";\r\nimport {addToCart, setCanvasScale, updateCanvasCount} from \"../../../../../actions/actionFunctions\";\r\nimport {getCurrentLayout} from \"../../../../appLayout\";\r\nimport {LOOK_WALLS_ONLY} from \"../../../core/constants\";\r\n\r\nimport {enableRelatedFeature, getPropertyToMatchActiveFeature} from \"../../lookFunctions2\";\r\nimport Analytics, {LOOK_JOURNEY_ANALYTIC_EVENTS} from \"../../../../../analytics\";\r\nimport LookFeaturePrice from \"../lookListFeature/lookFeaturePrice\";\r\nimport {setWizardSelectedValues} from \"../../../../../actions/wizardFunctions\";\r\nimport {wizardGroupInterface} from \"../../../../../interfaces/wizardItemInterface\";\r\nimport LookWizardSectionListFeatureQuantity from \"./lookWizardSectionListFeatureQuantity\";\r\nimport {\r\n setLookActiveFeature,\r\n setLookAllWallsTutorial,\r\n setLookCompatabilityAlert\r\n} from \"../../../../../actions/lookFunctions\";\r\nimport LookAllWallsRadioButton from \"../lookAllWallsRadioButton\";\r\nimport {\r\n checkForCompatabilityAlert,\r\n clickOnSimilarFeatures,\r\n getApplyToLogic,\r\n getShowMatchRadio,\r\n} from \"../../lookNavigationFunctions\";\r\nimport LookListActiveFeatureMobileButton from \"../lookListFeature/lookListActiveFeatureMobileButton\";\r\nimport {getAnalyticsEcommerceItem} from \"../../../../../analyticsEcommerceParams\";\r\nimport {getCorrectedCenter, shouldZoomPartId, shouldZoomToTheBottom} from \"../../../hocs/withZoomToFeature\";\r\nimport {getFeatureIsLocked} from \"../../../../../misc/helpers\";\r\n\r\nconst LookWizardSectionListFeature = (props) => {\r\n\r\n const {wizardGroup, lookFeature, lookViewType, featureGroup, updateCanvasCount, style, setLookActiveFeature, navItems,\r\n isMobile, addToCart, qtActiveCategory, setCanvasScale, wizardSelectedValues, wizardActiveStep, setWizardSelectedValues,\r\n imageCanvas, maxClickCountReached, updateLookCartItem, setLookCompatabilityAlert, isLixil, groheActiveFeatureQuantity,\r\n lookAllWallsTutorial, setLookAllWallsTutorial, isPhoneNumberValidated, lookLockedTutorial, isEncore, canvasScale,\r\n isAllWallsTutorialItem} = props;\r\n\r\n const featureElement = useRef();\r\n\r\n const featureIsLocked = useMemo(() => {\r\n if (wizardGroup.skipLockDontApply) {\r\n return false\r\n }\r\n return getFeatureIsLocked(lookFeature)\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [lookFeature, wizardGroup, isPhoneNumberValidated]);\r\n\r\n const applyWizardItemClick = async (zoomFeature) => {\r\n setWizardSelectedValues({\r\n [wizardActiveStep]: {\r\n wizardGroup,\r\n selectedFeature: lookFeature,\r\n partId: lookFeature.partId,\r\n singleFeature: navItems.length === 1,\r\n quantity: groheActiveFeatureQuantity\r\n }\r\n });\r\n\r\n if (wizardGroup && wizardGroup.skipLockDontApply) {\r\n return false\r\n }\r\n\r\n const layout = getCurrentLayout();\r\n if (zoomFeature) {\r\n\r\n const parent = featureGroup || zoomFeature.getParent();\r\n Analytics.sendEcommerceEvent(\"select_item\", {\r\n item_list_id: zoomFeature.partId,\r\n item_list_name: parent.dbName || parent.partName || \"\",\r\n items: [getAnalyticsEcommerceItem(zoomFeature, 1)],\r\n });\r\n\r\n const featureLabel = Analytics.getSkuForAnalytics(zoomFeature);\r\n const analyticsLabel = LOOK_JOURNEY_ANALYTIC_EVENTS.lookWizardListFeature + featureLabel;\r\n Analytics.sendClickEvent(analyticsLabel);\r\n\r\n const positionInList = navItems ? navItems.findIndex(navItem => navItem.part.dbFeature.id === lookFeature.dbFeature.id) : null;\r\n setLookActiveFeature(zoomFeature, positionInList); // to set feature screen options // allow for look journey too\r\n\r\n if (showMatchRadio) { // before nav feature click\r\n const applyToLogic = getApplyToLogic(lookFeature);\r\n if (applyToLogic && Array.isArray(applyToLogic.currentApplyToArray) && applyToLogic.currentApplyToArray.length) {\r\n await clickOnSimilarFeatures(zoomFeature, applyToLogic, true);\r\n }\r\n }\r\n navFeatureCLick(zoomFeature);\r\n enableRelatedFeature(zoomFeature, addToCart, qtActiveCategory);\r\n\r\n // const parent = zoomFeature.getParent();\r\n // if (parent.disabled) {\r\n // parent.disabled = false;\r\n // parent.disabledClick();\r\n // }\r\n if (wizardGroup.multipleAddToCart) {\r\n return\r\n }\r\n updateCanvasCount();\r\n if (imageCanvas && imageCanvas.current && imageCanvas.current.pinchZoom && !LOOK_WALLS_ONLY.includes(zoomFeature.partId)\r\n && shouldZoomPartId(zoomFeature.partId, isMobile)) {\r\n if (zoomFeature.matchesMetaForArrayOfConditions(parent.getArrayOfConditions())) {\r\n const commonCoords = getFeatureCoords(zoomFeature, true) || getCommonCoords(parent, zoomFeature, imageCanvas.current.canvas);\r\n const {center} = getCorrectedCenter(\r\n getLayerCenter(commonCoords, imageCanvas.current.canvas, isMobile),\r\n null, zoomFeature, imageCanvas, isMobile\r\n );\r\n if (center) {\r\n imageCanvas.current.pinchZoom.zoomToCenter(center, 0, false, layout.partIdExistInQtCategory(zoomFeature.partId));\r\n setCanvasScale(imageCanvas.current.pinchZoom.options.tapZoomFactor)\r\n }\r\n }\r\n } else if (canvasScale !== 1) {\r\n zoomCanvasOut(imageCanvas, setCanvasScale);\r\n if (shouldZoomToTheBottom(zoomFeature.partId)) {\r\n $(\"html, body\").animate({scrollTop: document.body.scrollHeight}, 500);\r\n }\r\n }\r\n if (!lookAllWallsTutorial.finished && showMatchRadio && !featureIsLocked && !lookFeature.notAvailableInVisualizer\r\n && featureElement && featureElement.current && !isEncore) {\r\n const applyToLogic = getApplyToLogic(lookFeature);\r\n if (applyToLogic) {\r\n setLookAllWallsTutorial({\r\n visible: true,\r\n // withGrid: navItems.length === 1,\r\n // positionInList,\r\n lookFeature,\r\n top: featureElement.current.getBoundingClientRect().top,\r\n left: featureElement.current.getBoundingClientRect().left,\r\n height: style.height,\r\n width: style.width,\r\n // firstLockedIndex,\r\n // firstUnlockedIndex,\r\n })\r\n }\r\n }\r\n }\r\n updateLookCartItem(zoomFeature);\r\n }\r\n\r\n // const [canRender, setCanRender] = useState(false);\r\n const listFeatureClick = (event) => {\r\n if (event.target.closest(\".look-icon--delete\") || event.target.closest(\".gm-ios-checkbox\") || lookLockedTutorial.visible || isAllWallsTutorialItem) {\r\n return\r\n }\r\n if (Config.isDevMode() && lookFeature) {\r\n console.log(\"lookFeature\", lookFeature, lookFeature.metaData);\r\n }\r\n let zoomFeature = lookFeature;\r\n if (maxClickCountReached()) { // fabricator settings click lead capture\r\n return false;\r\n }\r\n\r\n const compatabilityLogic = isLixil ? [] : checkForCompatabilityAlert(zoomFeature);\r\n if (compatabilityLogic.length) {\r\n Analytics.sendClickEvent(LOOK_JOURNEY_ANALYTIC_EVENTS.lookShowCompatabilityAlert);\r\n setLookCompatabilityAlert({\r\n visible: true,\r\n compatabilityLogic,\r\n clickedFeature: zoomFeature,\r\n applyFunction: applyWizardItemClick.bind(this, zoomFeature) // always apply features from this popup\r\n });\r\n return false\r\n }\r\n\r\n applyWizardItemClick(zoomFeature);\r\n }\r\n\r\n // const realFeatureGroup = (featureGroup || lookFeature.getParent())\r\n // const activeFeature = realFeatureGroup.activeNotInVisualizerFeature || realFeatureGroup.activeFeature;\r\n let isActive = false;\r\n if (wizardSelectedValues[wizardActiveStep] && wizardSelectedValues[wizardActiveStep].selectedFeature) {\r\n const propToMatch = getPropertyToMatchActiveFeature(wizardSelectedValues[wizardActiveStep].selectedFeature);\r\n isActive = lookFeature.dbFeature[propToMatch] === wizardSelectedValues[wizardActiveStep].selectedFeature.dbFeature[propToMatch]\r\n }\r\n const nameLength = IS_PRODUCT_JOURNEY ? 40 : 500;\r\n\r\n const showMatchRadio = getShowMatchRadio(lookFeature);\r\n const showAllWalls = isActive && showMatchRadio;\r\n\r\n return (\r\n
  • \r\n
    \r\n {isActive ? (IS_PRODUCT_JOURNEY && isMobile) ? (\r\n \r\n ) : (\r\n
    \r\n \r\n
    \r\n ) : null}\r\n \r\n {showAllWalls ? : null}\r\n
    \r\n
    \r\n \r\n \r\n \r\n {(wizardGroup.multipleAddToCart && !IS_PRODUCT_JOURNEY) || !IS_LIXIL_SERVERS ? null : (\r\n

    \r\n \r\n

    \r\n )}\r\n {wizardGroup.hidePriceNoCart ? null : (\r\n
    \r\n \r\n
    \r\n )}\r\n {wizardGroup.multipleAddToCart && !lookFeature.dbFeature.hideQuantity && !IS_PRODUCT_JOURNEY ? (\r\n
    \r\n \r\n
    \r\n ) : null}\r\n
    \r\n
  • \r\n )\r\n};\r\n\r\nLookWizardSectionListFeature.propTypes = {\r\n lookFeature: PropTypes.shape(featureInterface),\r\n featureGroup: PropTypes.object,\r\n viewType: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\r\n wizardGroup: PropTypes.shape(wizardGroupInterface),\r\n style: PropTypes.object,\r\n imageCanvas: PropTypes.object.isRequired,\r\n maxClickCountReached: PropTypes.func,\r\n updateLookCartItem: PropTypes.func,\r\n navItems: PropTypes.array,\r\n isAllWallsTutorialItem: PropTypes.bool,\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {lookViewType, lookAllWallsTutorial, lookLockedTutorial} = store.lookState;\r\n const {isMobile} = store.serverState;\r\n const {activePreset, bvPresets, canvasScale} = store.bathroomVisualizerState;\r\n const {qtActiveCategory} = store.qtState;\r\n const {wizardSelectedValues, wizardActiveStep} = store.wizardState;\r\n const {cabinetsApplyTo} = store.navigationState;\r\n const {isLixil, isEncore} = store.fabricatorState;\r\n const {groheActiveFeatureQuantity} = store.groheState;\r\n const {isPhoneNumberValidated} = store.userState;\r\n\r\n return {\r\n lookViewType,\r\n isMobile,\r\n activePreset,\r\n bvPresets,\r\n qtActiveCategory,\r\n canvasScale,\r\n wizardSelectedValues,\r\n wizardActiveStep,\r\n cabinetsApplyTo,\r\n isLixil,\r\n groheActiveFeatureQuantity,\r\n lookAllWallsTutorial,\r\n isPhoneNumberValidated,\r\n lookLockedTutorial,\r\n isEncore,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n updateCanvasCount,\r\n addToCart,\r\n setCanvasScale,\r\n setWizardSelectedValues,\r\n setLookActiveFeature,\r\n setLookCompatabilityAlert,\r\n setLookAllWallsTutorial,\r\n};\r\n\r\nexport default withRouter(\r\n connect(mapStateToProps, mapDispatchToProps)(LookWizardSectionListFeature)\r\n)\r\n","import React from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\nimport {FormattedMessage} from \"react-intl\";\r\nimport {withRouter} from \"react-router-dom\";\r\nimport {\r\n toggleSelectionWindow, toggleSelectionFeatureInfo, setCameFromPage,\r\n} from \"../../actions/actionFunctions\";\r\n\r\nimport Analytics from \"../../analytics\";\r\nimport {ROUTES} from \"../../routes\";\r\n\r\n\r\nconst ShoppingCartButton = (props) => {\r\n\r\n const {className, cartItems, setCameFromPage, selectionFeatureInfo, toggleSelectionFeatureInfo, toggleSelectionWindow,\r\n selectionOpened, selectionGroup, history, location} = props;\r\n\r\n const shCartButtonClick = () => {\r\n Analytics.sendClickEvent('go-to-shopping-cart');\r\n\r\n if (selectionOpened) {\r\n toggleSelectionWindow(false, selectionGroup);\r\n setCameFromPage(\"materials\");\r\n if (selectionFeatureInfo) {\r\n toggleSelectionFeatureInfo(null);\r\n }\r\n } else if (location && (location.pathname === ROUTES.home || location.pathname === ROUTES.quoteDesign)) {\r\n setCameFromPage(ROUTES.quoteDesign);\r\n }\r\n\r\n if (!window.location.href.includes('shoppingcart')) {\r\n history.push(ROUTES.shoppingcart);\r\n }\r\n\r\n };\r\n\r\n return (\r\n \r\n )\r\n\r\n}\r\n\r\nShoppingCartButton.propTypes = {\r\n text: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\r\n className: PropTypes.string\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const {cartItems} = store.cartState;\r\n const {selectionFeatureInfo, selectionOpened, selectionGroup} = store.selectionState;\r\n\r\n return {\r\n cartItems,\r\n selectionFeatureInfo,\r\n selectionOpened,\r\n selectionGroup,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setCameFromPage,\r\n toggleSelectionFeatureInfo,\r\n toggleSelectionWindow,\r\n}\r\n\r\nexport default withRouter(\r\n connect(mapStateToProps, mapDispatchToProps)(ShoppingCartButton)\r\n);\r\n","import React, {useEffect, useState} from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\nimport {setLanguage} from \"../../actions/serverFunctions\";\r\nimport Config, {AVAILABLE_LANGUAGES, POST_MESSAGES} from \"../../config\";\r\nimport {isIframe} from \"../../misc/helpers\";\r\n\r\nconst LanguageSwitcher = (props) => {\r\n\r\n const {language, setLanguage, intl, fabricatorSettings} = props;\r\n const [dropdownVisible, setDropdownVisible] = useState(false);\r\n\r\n useEffect(() => {\r\n return () => {\r\n window.removeEventListener('click', handleWrapperBlur)\r\n }\r\n }, []);\r\n\r\n if (!fabricatorSettings.showLanguageSelect || (!Config.isDevMode() && !document.kvConfig.isBackend)) {\r\n return null\r\n }\r\n\r\n const activeLanguage = language;\r\n\r\n const handleWrapperBlur = (e) => {\r\n const disallowClasses = [\".language\", \".language-list\"];\r\n if (!disallowClasses.some(cls => e.target.closest(cls))) {\r\n setDropdownVisible(false)\r\n }\r\n };\r\n\r\n const handleButtonClick = () => {\r\n const newVisible = !dropdownVisible;\r\n setDropdownVisible(newVisible);\r\n setTimeout(() => {\r\n newVisible\r\n ? window.addEventListener('click', handleWrapperBlur)\r\n : window.removeEventListener('click', handleWrapperBlur)\r\n }, 0)\r\n };\r\n\r\n const handleLocaleClick = (locale) => {\r\n setLanguage(locale);\r\n if (isIframe() && window.parent) {\r\n window.parent.postMessage({\r\n action: POST_MESSAGES.setIframeLanguage,\r\n payload: { language: locale }\r\n }, \"*\");\r\n }\r\n handleButtonClick();\r\n };\r\n\r\n const getLanguageName = (locale) => {\r\n switch (locale) {\r\n case \"en-US\":\r\n return intl.formatMessage({id: \"languageDropdown.english\"})\r\n case \"en-AU\":\r\n return intl.formatMessage({id: \"languageDropdown.australian\"})\r\n case \"fr-FR\":\r\n return intl.formatMessage({id: \"languageDropdown.french\"})\r\n case \"pl-PL\":\r\n return intl.formatMessage({id: \"languageDropdown.polish\"})\r\n case \"es-ES\":\r\n return intl.formatMessage({id: \"languageDropdown.spanish\"})\r\n default:\r\n return locale\r\n }\r\n };\r\n\r\n const styles = {\r\n height: dropdownVisible ? AVAILABLE_LANGUAGES.length * 50 : 0\r\n }\r\n\r\n return (\r\n
    \r\n \r\n
    \r\n
    \r\n {AVAILABLE_LANGUAGES.map((locale, languageIndex) => (\r\n
  • handleLocaleClick(locale)}>\r\n {getLanguageName(locale)}\r\n
  • \r\n ))}\r\n
    \r\n
    \r\n
    \r\n )\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n language: store.serverState.language,\r\n fabricatorSettings: store.fabricatorState.settings\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setLanguage,\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(LanguageSwitcher)\r\n);\r\n","//********* TUTORIALS *********//\r\nimport * as types from \"./actionTypes\";\r\n\r\nexport const toggleShowAdvancedQuoting = (showAdvancedQuoting) => ({\r\n type: types.TOGGLE_SHOW_ADVANCED_QUOTING,\r\n payload: {showAdvancedQuoting}\r\n});\r\n\r\nexport const setAdvancedQuotingSearchItem = (advancedQuotingSearchItem) => ({\r\n type: types.SET_ADVANCED_QUOTING_SEARCH_ITEM,\r\n payload: {advancedQuotingSearchItem}\r\n});\r\n","import React, { Component } from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport { toggleInstOpened } from \"../../actions/actionFunctions\";\r\n\r\nimport InstList from \"./instList\";\r\nimport Analytics from './../../analytics';\r\n\r\nclass InstView extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n unmount: false\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n\r\n }\r\n\r\n componentWillReceiveProps(nextProps) {\r\n Analytics.sendClickEvent('installations-close');\r\n if (!nextProps.instOpened && this.props.instOpened) {\r\n this.setState({\r\n unmount: true\r\n }, () => {\r\n setTimeout(() => {\r\n this.setState({\r\n unmount: false\r\n })\r\n }, 500)\r\n })\r\n }\r\n\r\n }\r\n\r\n closeInstallationView = () => {\r\n this.props.toggleInstOpened(false);\r\n };\r\n\r\n render() {\r\n\r\n return (\r\n
    \r\n
    \r\n

    \r\n

    \r\n
    \r\n
    \r\n );\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n instOpened: store.instState.instOpened,\r\n instState: store.instState.instState\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, {\r\n toggleInstOpened\r\n})(InstView);\r\n","import React from \"react\";\r\nimport PropTypes from 'prop-types';\r\nimport {connect} from \"react-redux\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport {unlockPricing} from \"../../../actions/actionFunctions\";\r\nimport Analytics from \"../../../analytics\";\r\n\r\nclass FeatureInfoPriceLocked extends React.Component {\r\n\r\n static propTypes = {\r\n textOnly: PropTypes.bool\r\n }\r\n\r\n handlePriceLockClick = () => {\r\n Analytics.sendClickEvent('feature-info-price-unlock');\r\n this.props.unlockPricing();\r\n };\r\n\r\n render() {\r\n return this.props.textOnly ? (\r\n \r\n \r\n \r\n ) : (\r\n \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = () => {\r\n return {\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, {\r\n unlockPricing\r\n})(FeatureInfoPriceLocked);\r\n","import React, {Fragment} from \"react\";\r\nimport {connect} from \"react-redux\";\r\nimport {injectIntl} from \"react-intl\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport FeatureDescription from \"../../visComponents/featureDescription\";\r\n\r\nconst FeatureInfoDescription = (props) => {\r\n\r\n const {fabricatorData, intl, selectionFeatureInfo, feature, brief} = props;\r\n const activeFeature = feature || selectionFeatureInfo;\r\n\r\n let pros = [];\r\n let subDescription = activeFeature.dbFeature.subDescription;\r\n if ((fabricatorData.isLowes || fabricatorData.isCaesarStone) && intl.messages) {\r\n if (intl.locale === \"fr-FR\" && intl.messages[\"transDoc.subDescription_FR.\" + activeFeature.dbFeature.sharedFeatureName]) {\r\n subDescription = intl.formatMessage({id: \"transDoc.subDescription_FR.\" + activeFeature.dbFeature.sharedFeatureName})\r\n } else if (intl.locale === \"pl-PL\" && intl.messages[\"transDoc.customSubDescription_PL.\" + activeFeature.dbFeature.sharedFeatureName]) {\r\n subDescription = intl.formatMessage({id: \"transDoc.customSubDescription_PL.\" + activeFeature.dbFeature.sharedFeatureName})\r\n }\r\n }\r\n if (!brief && subDescription && subDescription.length > 0) {\r\n pros = subDescription.split('\\n').filter(n => n);\r\n }\r\n\r\n return (\r\n \r\n \r\n {pros.length ? (\r\n
      \r\n {pros.map((pros, index) => {\r\n return
    • {pros}
    • \r\n })}\r\n
    \r\n ) : null}\r\n
    \r\n );\r\n};\r\n\r\nFeatureInfoDescription.propTypes = {\r\n feature: PropTypes.object,\r\n brief: PropTypes.bool,\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n fabricatorData: store.fabricatorState,\r\n selectionFeatureInfo: store.selectionState.selectionFeatureInfo,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(FeatureInfoDescription)\r\n)\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {connect} from \"react-redux\";\r\n\r\nimport WithClickCount from \"../../look/hocs/withClickCount\";\r\nimport {wizardGroupInterface} from \"../../../interfaces/wizardItemInterface\";\r\nimport {setWizardSelectedValues} from \"../../../actions/wizardFunctions\";\r\nimport {getFeatureGroupFromWizardGroup} from \"../../look/lookNavigation/lookMain/lookWizard/lookWizardFunctions\";\r\nimport MaterialsWizardSqftButton from \"../../qkbPages/materialsWizard/materialsWizardSqftButton\";\r\nimport {getWizardFeatureAsync} from \"../../look/lookNavigation/lookMain/lookWizard/wizardFunctionsCommon\";\r\n\r\nconst SelectionGridWizardGroupItem = (props) => {\r\n\r\n const {wizardGroup, wizardActiveStep, setWizardSelectedValues, wizardSelectedValues, styles, isRowItem,\r\n handleFeatureClick} = props;\r\n\r\n const featureGroup = getFeatureGroupFromWizardGroup(wizardGroup);\r\n\r\n // const {customImageUrl, uploadedImageUrl} = wizardGroup;\r\n\r\n const isActive = wizardSelectedValues[wizardActiveStep] && wizardSelectedValues[wizardActiveStep].wizardGroup\r\n && wizardSelectedValues[wizardActiveStep].wizardGroup.id === wizardGroup.id;\r\n\r\n const wizardItemClick = async (maxClickCountReached) => {\r\n // Analytics.sendClickEvent(LOOK_JOURNEY_ANALYTIC_EVENTS.lookWizardParent + Analytics.getStringForAnalytics(wizardGroup.groupName));\r\n\r\n if (maxClickCountReached()) { // fabricator settings click lead capture\r\n return false;\r\n }\r\n\r\n // const layout = getCurrentLayout();\r\n // const featureGroup = getFeatureGroupFromWizardGroup(wizardGroup);\r\n // if (featureGroup && featureGroup.activeFeature) {\r\n // if (featureGroup.partId === \"vanity_sink\" && wizardGroup.productCartTitle\r\n // && wizardGroup.productCartTitle.includes(\"edestal\") && featureGroup.getParent().vanity_type) {\r\n // const navItems = layout.designNavigationItems({part: featureGroup});\r\n // const nextPedestal = navItems.find(navItem => Array.isArray(navItem.part.metaData[\"MountType\"]) && navItem.part.metaData[\"MountType\"].includes(\"ST\"));\r\n // if (nextPedestal) {\r\n // navFeatureCLick(nextPedestal.part);\r\n // } else {\r\n // navFeatureCLick(featureGroup.activeFeature);\r\n // }\r\n // }\r\n // navFeatureCLick(featureGroup.activeFeature);\r\n // }\r\n\r\n setWizardSelectedValues({\r\n [wizardActiveStep]: {\r\n wizardGroup,\r\n partId: featureGroup ? featureGroup.partId : \"\"\r\n }\r\n });\r\n console.log(\"wizardGroupwizardGroup\", wizardGroup);\r\n if (wizardGroup.clickOnLogic && wizardGroup.clickOnLogic.enabled && wizardGroup.clickOnLogic.feature\r\n && wizardGroup.clickOnLogic.groupName && handleFeatureClick) {\r\n const featureFound = await getWizardFeatureAsync(wizardGroup.clickOnLogic.feature, wizardGroup.clickOnLogic.groupName);\r\n console.log(\"clickOnLogic featureFound\", featureFound);\r\n if (featureFound) {\r\n handleFeatureClick({part: featureFound}, null, wizardGroup.clickOnLogic);\r\n }\r\n }\r\n }\r\n\r\n return (\r\n \r\n {(maxClickCountReached) => isRowItem ? (\r\n
    wizardItemClick(maxClickCountReached)}>\r\n
    \r\n {wizardGroup.customImageUrl ? (\r\n
    \r\n \"\"/\r\n
    \r\n ) : null}\r\n
    \r\n
    \r\n

    {wizardGroup.productCartTitle || wizardGroup.title || wizardGroup.groupName}

    \r\n
    {wizardGroup.productCartDescription}
    \r\n {window.location.href.includes(\"porcelanosa\") && wizardGroup.id === \"29\" ? ( // && wizardGroup.title === \"Xtone Underlayment\" // removed, they can rename\r\n
    \r\n \r\n
    \r\n ) : null}\r\n
    \r\n
    \r\n ) : (\r\n
    wizardItemClick(maxClickCountReached)}>\r\n
    \r\n {wizardGroup.customImageUrl\r\n ? \"\"/\r\n : null}\r\n
    \r\n
    \r\n {/*{showPrice ? (*/}\r\n {/* */}\r\n {/* {getPriceWithIncluded(price, currentFeature.part, fabricatorData, intl.messages)}\r\n {/**/}\r\n {/*) : null}*/}\r\n \r\n {wizardGroup.productCartTitle || wizardGroup.title || wizardGroup.groupName}\r\n \r\n
    \r\n
    \r\n )}\r\n
    \r\n )\r\n}\r\n\r\nSelectionGridWizardGroupItem.propTypes = {\r\n wizardGroup: PropTypes.shape(wizardGroupInterface),\r\n isRowItem: PropTypes.bool,\r\n handleFeatureClick: PropTypes.func,\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {wizardActiveItem, wizardActiveStep, wizardSelectedValues} = store.wizardState;\r\n return {\r\n wizardActiveItem,\r\n wizardActiveStep,\r\n wizardSelectedValues,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setWizardSelectedValues\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(SelectionGridWizardGroupItem);\r\n","import React from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport {s3FeatureImagePath, THUMBNAIL_SIZES} from \"../../misc/utils\";\r\nimport {baseNewImagesPath} from \"../assets\";\r\n\r\nconst NotInVisualizerView = (props) => {\r\n\r\n const getThumbnail = () => {\r\n\r\n if (!props.activeFeature) {\r\n return null\r\n }\r\n\r\n let src = \"\";\r\n let styles = {};\r\n if (props.activeFeature.dbFeature.thumbnailUrl) {\r\n src = s3FeatureImagePath(\r\n props.activeFeature.dbFeature.thumbnailUrl,\r\n props.isMobile ? THUMBNAIL_SIZES.small : THUMBNAIL_SIZES.medium\r\n );\r\n } else if (props.currentFeature && props.activeFeature.customThumbnail) {\r\n src = props.activeFeature.customThumbnail;\r\n } else {\r\n src = `${baseNewImagesPath}images/image-not-found.png`;\r\n }\r\n // if (props.isMobile) {\r\n // const height = (props.listItemHeight - 32) / 2;\r\n // styles.height = height;\r\n // styles.width = height;\r\n // }\r\n // console.log(\"listItemHeight\", );\r\n return (\r\n
    \r\n \"not-in-visualizer-thumbnail\"\r\n
    \r\n )\r\n }\r\n\r\n if (props.allVisualizerNotAvailable) {\r\n return (\r\n
    \r\n {getThumbnail()}\r\n \r\n \r\n \r\n

    \r\n \r\n

    \r\n
    \r\n )\r\n }\r\n\r\n const notAvailableAtAll = !props.activeFeature.dbFeature.s3Bindings || !props.activeFeature.dbFeature.s3Bindings.length;\r\n\r\n return !notAvailableAtAll ? (\r\n
    \r\n \r\n \r\n \r\n \r\n
    \r\n ) : (\r\n
    \r\n {getThumbnail()}\r\n \r\n \r\n \r\n

    \r\n \r\n

    \r\n
    \r\n )\r\n};\r\n\r\nNotInVisualizerView.displayName = \"NotInVisualizerView\";\r\nNotInVisualizerView.propTypes = {\r\n goToBV: PropTypes.func,\r\n activeFeature: PropTypes.object,\r\n allVisualizerNotAvailable: PropTypes.bool,\r\n};\r\nexport default NotInVisualizerView\r\n","import {renderConfirmPopup} from \"../../../api/api-popups\";\r\nimport {ConfirmPopupTypes} from \"../../visComponents/constants\";\r\nimport store from \"../../../store\";\r\nimport {removeFromCart} from \"../../../actions/actionFunctions\";\r\n\r\n/**\r\n * Common func to call question popup\r\n * @param cartItem {cartItemInterface}\r\n * @param navItem {navItem}\r\n * @param quoteIndex {Number}\r\n * @param fromDelete {boolean}\r\n * @return {boolean}\r\n */\r\nexport const checkForDeletePopup = (cartItem, navItem, quoteIndex, fromDelete = false) => {\r\n const {fabricatorState, cartState} = store.getState();\r\n if (fabricatorState.settings.useCategorySwitching) {\r\n if (cartItem.partId === \"room\" && cartItem.cartFeature && (fromDelete || (navItem.part.dbFeature.id !== cartItem.cartFeature.dbFeature.id))\r\n && cartState.cartItems.some(cItem => cItem.partId !== \"room\" && cItem.currentQuote === quoteIndex)) {\r\n renderConfirmPopup(ConfirmPopupTypes.DeleteCartItemsPopup, {\r\n cartItem, // old\r\n navItem, // new\r\n fromDelete\r\n });\r\n return true\r\n }\r\n }\r\n return false\r\n}\r\n/**\r\n * Common func to remove features\r\n * @param quoteIndex {Number}\r\n * @return {boolean}\r\n */\r\nexport const removeCartItemsWithQuoteIndex = (quoteIndex) => {\r\n const {cartState} = store.getState();\r\n const cartItemsToRemove = cartState.cartItems.filter(cItem => cItem.currentQuote === quoteIndex);\r\n if (cartItemsToRemove.length) {\r\n cartItemsToRemove.forEach(cItem => {\r\n store.dispatch(removeFromCart(cItem));\r\n })\r\n }\r\n}\r\n\r\n/**\r\n * Cheks if we selected something from the previous wizard step\r\n * @param quoteIndex {number}\r\n * @param wizardItemId {number}\r\n * @param wizardStep {number}\r\n * @param applyFunction {function} // will be called on yes click\r\n * @return {boolean}\r\n */\r\nexport const checkForWizardPreviousChanges = (quoteIndex, wizardItemId, wizardStep, applyFunction) => {\r\n const {cartState} = store.getState();\r\n const cartItemsToRemove = cartState.cartItems.filter(cItem => {\r\n return cItem.currentQuote === quoteIndex && cItem.fromWizardId === wizardItemId && cItem.fromWizardStep > wizardStep\r\n });\r\n if (cartItemsToRemove.length) {\r\n console.log(\"cartItemsToRemove\", cartItemsToRemove);\r\n const finalFunction = () => {\r\n cartItemsToRemove.forEach(cItem => {\r\n store.dispatch(removeFromCart(cItem));\r\n })\r\n applyFunction()\r\n }\r\n renderConfirmPopup(ConfirmPopupTypes.ChangeWizardToPreviousStepSelection, {\r\n applyFunction: finalFunction.bind(this)\r\n });\r\n return true\r\n }\r\n return false\r\n}\r\n\r\n","import React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\n\r\nimport IconButton from \"@mui/material/IconButton\";\r\nimport ErrorIcon from \"@mui/icons-material/Error\";\r\n\r\n\r\nconst GroheFeatureNotInVisualizer = (props) => {\r\n const {intl, fabricatorData} = props;\r\n\r\n return (\r\n
    \r\n {fabricatorData.isAmericanStandard ? null : (\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n \r\n
    \r\n )\r\n};\r\nconst mapStateToProps = (store) => {\r\n const fabricatorData = store.fabricatorState;\r\n return {\r\n fabricatorData\r\n }\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps)(GroheFeatureNotInVisualizer)\r\n)\r\n","import React from \"react\";\r\nimport { connect } from \"react-redux\";\r\n\r\nimport GroheMobile3dButton from \"./groheMobile3dButton\";\r\nimport FeatureName from \"../../../../visComponents/featureName\";\r\nimport FeatureThumbnail from \"../../../../visComponents/featureThumbnail\";\r\nimport {IS_PRODUCT_JOURNEY} from \"../../../../../config\";\r\nimport {getFeatureIsLocked} from \"../../../../../misc/helpers\";\r\nimport LookLockedButton from \"../../../lookNavigation/lookMain/lookLockedButton\";\r\nimport LookFeatureNotInStock from \"../../../lookNavigation/lookMain/lookFeature/lookFeatureNotInStock\";\r\nimport LookFeatureSku from \"../../../lookNavigation/lookMain/lookFeature/lookFeatureSku\";\r\n\r\nconst GroheMobileFeatureTop = (props) => {\r\n\r\n const {lookActiveFeature} = props;\r\n\r\n if (!lookActiveFeature) {\r\n return null\r\n }\r\n\r\n const featureIsLocked = getFeatureIsLocked(lookActiveFeature);\r\n\r\n return (\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n

    \r\n
    \r\n

    \r\n \r\n

    \r\n {!IS_PRODUCT_JOURNEY ? : null}\r\n
    \r\n
    \r\n {featureIsLocked ? : }\r\n
    \r\n
    \r\n )\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const {lookActiveFeature} = store.lookState;\r\n const {isPhoneNumberValidated} = store.userState; // to update component when user is logged in\r\n\r\n return {\r\n lookActiveFeature,\r\n isPhoneNumberValidated,\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps)(GroheMobileFeatureTop)\r\n","import React from \"react\";\r\nimport {connect} from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport {featureInterface} from \"../../../../../interfaces/featureInterface\";\r\nimport {isInStock} from \"../../lookFunctions2\";\r\n\r\nconst LookFeatureNotInStock = (props) => {\r\n\r\n const {lookFeature} = props;\r\n\r\n if (isInStock(lookFeature)) {\r\n return null\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n )\r\n};\r\n\r\nLookFeatureNotInStock.propTypes = {\r\n lookFeature: PropTypes.shape(featureInterface),\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {lookActiveFeatureStockCount} = store.lookState;\r\n return {\r\n lookActiveFeatureStockCount,\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps)(LookFeatureNotInStock)\r\n","import React, {useMemo} from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\nimport {injectIntl} from \"react-intl\";\r\nimport {withRouter} from \"react-router-dom\";\r\nimport orderBy from \"lodash/orderBy\";\r\n\r\nimport MenuList from '@mui/material/MenuList';\r\n\r\nimport {getLookList} from \"../../../lookNavigation/lookFunctions\";\r\nimport {getFeatureGroupName} from \"../../../../../misc/helpers\";\r\nimport {setLookActiveCategory, setLookPageOpened} from \"../../../../../actions/lookFunctions\";\r\n// import GroheCategoriesMenuItemWizard from \"./groheCategoriesMenuItemWizard\";\r\nimport {setGroheWizardName} from \"../../../../../actions/groheQuotingToolFunctions\";\r\nimport GroheCategory from \"./groheCategory\";\r\nimport {IS_PRODUCT_JOURNEY} from \"../../../../../config\";\r\nimport LookMainWizardList from \"../../../lookNavigation/lookMain/lookMainWizardList\";\r\nimport {ROUTES} from \"../../../../../routes\";\r\nimport MaterialSpinner from \"../../../../ui/materialSpinner\";\r\n\r\nconst GroheCategoriesMenu = (props) => {\r\n\r\n const {intl, fabricatorData, isAccessory, showWizardItems, location, visualizersLoadedLength,\r\n qtCategoriesLoadedLength} = props;\r\n\r\n const isShopPage = location.pathname.includes(ROUTES.shop);\r\n\r\n let featureGroups = useMemo(() => {\r\n return getLookList(false, true, false, isShopPage, true)\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [visualizersLoadedLength, qtCategoriesLoadedLength, isShopPage]);\r\n const featureGroupNameSort = (lmFeature) => getFeatureGroupName(lmFeature.featureGroup, intl, fabricatorData)\r\n featureGroups = orderBy(featureGroups,[featureGroupNameSort], ['asc'])\r\n\r\n // console.log(\"featureGroups\", featureGroups);\r\n if (!featureGroups) {\r\n return null\r\n }\r\n\r\n const ACCESSORIES = [\"paper_holder\", \"robe_hook\", \"towel_bar\", \"towel_ring\"];\r\n const acc_groups = featureGroups.filter(parentObject => ACCESSORIES.includes(parentObject.partId));\r\n if (acc_groups.length && IS_PRODUCT_JOURNEY) {\r\n featureGroups = isAccessory ? acc_groups : featureGroups.filter(parentObject => !ACCESSORIES.includes(parentObject.partId));\r\n if (!isAccessory) {\r\n featureGroups.push({partId: \"submenu_accessories\"});\r\n }\r\n }\r\n\r\n return (\r\n
    \r\n {!qtCategoriesLoadedLength ? : (\r\n \r\n {featureGroups.map(lmFeature => {\r\n return \r\n })}\r\n {showWizardItems ? : null}\r\n {/**/}\r\n \r\n )}\r\n
    \r\n )\r\n};\r\n\r\nGroheCategoriesMenu.propTypes = {\r\n isAccessory: PropTypes.bool,\r\n showWizardItems: PropTypes.bool,\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {visualizersLoaded} = store.serverState;\r\n const {qtCategoriesLoaded} = store.qtState;\r\n\r\n return {\r\n fabricatorData: store.fabricatorState,\r\n visualizersLoadedLength: visualizersLoaded.length,\r\n qtCategoriesLoadedLength: qtCategoriesLoaded.length,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setLookActiveCategory,\r\n setLookPageOpened,\r\n setGroheWizardName,\r\n};\r\n\r\nexport default withRouter(\r\n injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(GroheCategoriesMenu)\r\n )\r\n)\r\n","import React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport {Grid} from \"react-virtualized\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport LookListFeature from \"../../../lookNavigation/lookMain/lookListFeature/lookListFeature\";\r\nimport {GROHE_CONFIG} from \"../../groheConfig\";\r\nimport LookWizardSectionListFeature from \"../../../lookNavigation/lookMain/lookWizard/lookWizardSectionListFeature\";\r\nimport {wizardGroupInterface} from \"../../../../../interfaces/wizardItemInterface\";\r\nimport LookVirtualizedListLoadingItem\r\n from \"../../../lookNavigation/lookMain/lookCategory/lookVirtualizedListLoadingItem\";\r\n\r\nconst GroheVirtualizedList = (props) => {\r\n\r\n const {lookViewType, windowHeight, renderList, isMobile, onScrollHandler, isWizard, wizardGroup, wizardActiveItem,\r\n imageCanvas, maxClickCountReached, updateLookCartItem, loadingCount} = props;\r\n\r\n const width = isMobile ? GROHE_CONFIG.sidebarWidth.mobile : GROHE_CONFIG.sidebarWidth.desktop;\r\n let height = isMobile ? windowHeight - (wizardActiveItem ? 98 : 48) : windowHeight - 120;\r\n if (loadingCount) {\r\n height = isMobile ? height + 58 : height + 37;\r\n }\r\n\r\n const columnWidth = lookViewType === 2 ? width / 3 : width;\r\n const columnCount = lookViewType === 2 ? 3 : 1;\r\n const rowCount = Math.ceil((loadingCount || renderList.length) / columnCount);\r\n\r\n const listSettings = {\r\n width,\r\n columnCount,\r\n columnWidth,\r\n rowCount,\r\n height,\r\n rowHeight: lookViewType === 1\r\n ? 120\r\n : 124,\r\n overscanRowCount: 3,\r\n showScrollingPlaceholder: false,\r\n useDynamicRowHeight: false,\r\n }\r\n\r\n const cellRenderer = ({columnIndex, key, rowIndex, style}) => {\r\n if (loadingCount) {\r\n return \r\n }\r\n const navItem = renderList[(listSettings.columnCount * rowIndex) + columnIndex];\r\n if (!navItem) {\r\n return null\r\n }\r\n if (isWizard) {\r\n return \r\n }\r\n return \r\n }\r\n\r\n const noRowsRenderer = () =>
    No Features found
    ;\r\n\r\n return (\r\n \r\n )\r\n};\r\n\r\nGroheVirtualizedList.propTypes = {\r\n imageCanvas: PropTypes.object,\r\n maxClickCountReached: PropTypes.func,\r\n updateLookCartItem: PropTypes.func,\r\n renderList: PropTypes.array,\r\n contentHeight: PropTypes.number,\r\n isMobile: PropTypes.bool,\r\n onScrollHandler: PropTypes.func,\r\n isWizard: PropTypes.bool,\r\n wizardGroup: PropTypes.shape(wizardGroupInterface),\r\n loadingCount: PropTypes.number,\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {lookViewType} = store.lookState;\r\n const {windowHeight, isMobile} = store.serverState;\r\n const {wizardActiveItem} = store.wizardState;\r\n return {\r\n lookViewType,\r\n windowHeight,\r\n isMobile,\r\n wizardActiveItem,\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps)(GroheVirtualizedList)\r\n","import React from \"react\";\r\n\r\nimport WithOverlay from \"../../popups/withOverlayHoc\";\r\nimport MaterialSpinner from \"../../ui/materialSpinner\";\r\nimport {COLORS} from \"../../../colorThemes\";\r\n\r\n\r\nconst NavigationLoader = (props) => {\r\n const {className = \"\"} = props;\r\n\r\n return (\r\n \r\n {() => (\r\n \r\n )}\r\n \r\n )\r\n};\r\n\r\nexport default NavigationLoader\r\n","import React, {Fragment} from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\n\r\nimport IconButton from \"@mui/material/IconButton\";\r\nimport CloseIcon from \"@mui/icons-material/Close\";\r\n\r\nimport {LOOK_FEATURE_CONTENT} from \"../../../core/constants\";\r\nimport {IS_PRODUCT_JOURNEY} from \"../../../../../config\";\r\nimport LookFeatureInfoContent from \"./lookFeatureInfoContent\";\r\nimport LookFeatureInfo3d from \"./lookFeatureInfo3d\";\r\nimport {setLookMoreInfoOpened} from \"../../../../../actions/lookFunctions\";\r\nimport LookFeatureInfoButtons from \"./lookFeatureInfoButtons\";\r\nimport LookFeatureInfoAug from \"./lookFeatureInfoAug\";\r\nimport Analytics, {LOOK_JOURNEY_ANALYTIC_EVENTS, PRODUCT_JOURNEY_ANALYTIC_EVENTS} from \"../../../../../analytics\";\r\n\r\nconst LookFeatureInfo = (props) => {\r\n\r\n const {intl, lookActiveFeature, moreInfoOpened, moreInfoContent, setLookMoreInfoOpened, isMobile} = props;\r\n\r\n const backButtonClick = () => {\r\n Analytics.sendClickEvent(IS_PRODUCT_JOURNEY\r\n ? PRODUCT_JOURNEY_ANALYTIC_EVENTS.productFeatureInfoContentHeaderClose\r\n : LOOK_JOURNEY_ANALYTIC_EVENTS.lookFeatureInfoContentHeaderClose\r\n );\r\n setLookMoreInfoOpened(\"\", LOOK_FEATURE_CONTENT.threeD);\r\n }\r\n\r\n const mainContent = () => {\r\n // if (!moreInfoOpened && !isMobile) { // always render on mobile\r\n if (!lookActiveFeature) { // always render on mobile\r\n return null\r\n }\r\n switch (moreInfoContent) {\r\n case LOOK_FEATURE_CONTENT.info:\r\n default:\r\n return \r\n case LOOK_FEATURE_CONTENT.threeD:\r\n case LOOK_FEATURE_CONTENT.aug:\r\n if (!moreInfoOpened) {\r\n return null\r\n }\r\n return (\r\n
    \r\n {isMobile && !IS_PRODUCT_JOURNEY ? null : (\r\n \r\n \r\n \r\n )}\r\n {moreInfoContent === LOOK_FEATURE_CONTENT.threeD ? : }\r\n {isMobile ? null : (\r\n \r\n

    \r\n \r\n

    \r\n {moreInfoContent === LOOK_FEATURE_CONTENT.threeD ? (\r\n

    \r\n \r\n

    \r\n ) : null}\r\n \r\n
    \r\n )}\r\n {isMobile && (moreInfoContent === LOOK_FEATURE_CONTENT.threeD) ? (\r\n

    \r\n \r\n

    \r\n ) : null}\r\n
    \r\n )\r\n }\r\n }\r\n\r\n const classNames = !IS_PRODUCT_JOURNEY && isMobile\r\n ? \"lm-content lm-content--filters\" + (!moreInfoOpened ? \" lm-content--slide-up\" : \"\")\r\n : \"lm-content__info\" + (moreInfoOpened ? \" lm-content__info--active lm-content__info--\" + moreInfoContent : \"\")\r\n\r\n return (\r\n
    \r\n {mainContent()}\r\n
    \r\n )\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const {lookActiveFeature, moreInfoOpened, moreInfoContent} = store.lookState;\r\n const {isMobile} = store.serverState;\r\n return {\r\n lookActiveFeature,\r\n moreInfoOpened,\r\n moreInfoContent,\r\n isMobile,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setLookMoreInfoOpened\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(LookFeatureInfo)\r\n)\r\n","import React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport {\r\n getCartItemObject,\r\n getPriceWithCurrency,\r\n getQuotePriceWithTaxes,\r\n getTotalPrice,\r\n toFixedPrice\r\n} from \"../../../../../misc/helpers\";\r\nimport {IS_PRODUCT_JOURNEY} from \"../../../../../config\";\r\n\r\nconst LookWizardContentFinalPrice = (props) => {\r\n\r\n const {wizardSelectedValues, fabricatorSettings, qtActiveCategory} = props;\r\n\r\n if (!fabricatorSettings.showPricing) {\r\n return null\r\n }\r\n\r\n const cartItemsToCount = (Object.keys(wizardSelectedValues)).reduce((total, step) => {\r\n const selectedValue = wizardSelectedValues[step];\r\n if (!selectedValue || !selectedValue.selectedFeature) {\r\n return total\r\n }\r\n const parentPositions = selectedValue.selectedFeature.getParent().layerPositions\r\n const quantity = parentPositions\r\n ? Object.keys(parentPositions).filter(pos => parentPositions[pos]).length\r\n : 1;\r\n return [...total, getCartItemObject(selectedValue.selectedFeature, quantity, qtActiveCategory)]\r\n }, []);\r\n console.log(\"cartItemsToCount\", cartItemsToCount);\r\n\r\n const totalPrice = getTotalPrice(null, false, cartItemsToCount, true);\r\n const grandTotal = getQuotePriceWithTaxes(totalPrice);\r\n\r\n return (\r\n
    \r\n {IS_PRODUCT_JOURNEY ? (\r\n \r\n :\r\n \r\n ) : null}\r\n {getPriceWithCurrency(fabricatorSettings, toFixedPrice(grandTotal), null, true)}\r\n
    \r\n )\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const {wizardSelectedValues} = store.wizardState;\r\n const {settings} = store.fabricatorState;\r\n const {qtActiveCategory} = store.qtState;\r\n\r\n return {\r\n wizardSelectedValues,\r\n fabricatorSettings: settings,\r\n qtActiveCategory,\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps)(LookWizardContentFinalPrice)\r\n","export const loadScript = (url, callback, id = \"\") => {\r\n let script = document.createElement(\"script\");\r\n script.type = \"text/javascript\";\r\n\r\n if (script.readyState) {\r\n script.onreadystatechange = function() {\r\n if (script.readyState === \"loaded\" || script.readyState === \"complete\") {\r\n script.onreadystatechange = null;\r\n if (callback) {\r\n callback()\r\n }\r\n }\r\n };\r\n } else if (callback) {\r\n script.onload = callback;\r\n }\r\n\r\n script.src = url;\r\n script.id = id;\r\n document.getElementsByTagName(\"head\")[0].appendChild(script);\r\n};\r\n","import React, {Fragment} from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\nimport {withRouter} from \"react-router-dom\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport {getPriceWithCurrency, getQuotePriceWithTaxes, getTotalPrice} from \"../../../../misc/helpers\";\r\nimport GroheCartDeliveryColumn from \"./groheCartDeliveryColumn\";\r\n\r\nconst GroheCartColumns = (props) => {\r\n\r\n const {activeQuoteIndex, discountSections, fabricatorSettings, isPhoneNumberValidated, language, intl, isShort,\r\n showUnlockCalculations, showTotalItems} = props;\r\n\r\n const {isBackend, jobId, canSaveQuote} = document.kvConfig;\r\n const totalPrice = getTotalPrice();\r\n let grandTotal = getQuotePriceWithTaxes(totalPrice, discountSections);\r\n const pricingIsLocked = (fabricatorSettings.leadCaptureOnQuote || fabricatorSettings.leadCaptureShoppingCart)\r\n && !(isBackend && jobId && canSaveQuote) && !isPhoneNumberValidated;\r\n\r\n let allTaxes = totalPrice.priceTaxes.length\r\n ? totalPrice.priceTaxes\r\n : [{materialTax: totalPrice.materialTaxes}];\r\n let instTaxes = totalPrice.installationTaxes;\r\n // console.log(\"allTaxes\", allTaxes);\r\n // console.log(\"totalPrice\", totalPrice);\r\n // console.log(\"grandTotal\", grandTotal);\r\n\r\n // const showTaxes = (pricingIsLocked || allTaxes.some(tax => tax.materialTax > 0)) && (!showUnlockCalculations || showTotalItems.includes(\"tax\"));\r\n const showTaxes = !isShort;\r\n const showInstTaxes = instTaxes && (!showUnlockCalculations || showTotalItems.includes(\"tax\"));\r\n const showTotal = !isShort && (!showUnlockCalculations || showTotalItems.includes(\"total\"));\r\n\r\n let subTotalPrice = 0;\r\n // if (quotes.length > 1 && !showAllQuotesCartItemsList) {\r\n const quoteTotalPrice = getTotalPrice(activeQuoteIndex);\r\n // subTotalPrice = getQuotePriceWithTaxes(quoteTotalPrice, discountSections);\r\n subTotalPrice = quoteTotalPrice.materialPrice;\r\n allTaxes = quoteTotalPrice.priceTaxes.length\r\n ? quoteTotalPrice.priceTaxes\r\n : [{materialTax: quoteTotalPrice.materialTaxes}];\r\n instTaxes = quoteTotalPrice.installationTaxes;\r\n // }\r\n subTotalPrice = subTotalPrice.toFixed(2); // always round to 23.65, even if it is 23.00\r\n grandTotal = grandTotal.toFixed(2); // always round to 23.65, even if it is 23.00\r\n\r\n const getTaxColumn = (pricingIsLocked, taxObject, taxObjectIndex) => {\r\n // const showIncluded = !pricingIsLocked && (+taxObject.materialTax > 0);\r\n const taxTotal = taxObject.materialTax.toFixed(2); // always round to 23.65, even if it is 23.00\r\n // if (taxTotal <= 0) {\r\n // return null\r\n // }\r\n const taxName = taxObject.nameIntl && taxObject.nameIntl[language]\r\n ? taxObject.nameIntl[language]\r\n : taxObject.state || intl.formatMessage({id: \"grohe.cart.footer.tax\"})\r\n return (\r\n
    \r\n {taxName}\r\n
    \r\n {pricingIsLocked ? : getPriceWithCurrency(fabricatorSettings, taxTotal)}\r\n
    \r\n
    \r\n )\r\n }\r\n\r\n const LockedPrice = () => (\r\n {}}>\r\n \r\n \r\n )\r\n\r\n return (\r\n \r\n
    \r\n \r\n \r\n \r\n
    \r\n {pricingIsLocked ? : getPriceWithCurrency(fabricatorSettings, subTotalPrice)}\r\n
    \r\n
    \r\n {showTaxes ? allTaxes.map((taxObject, taxObjectIndex) => {\r\n return getTaxColumn(pricingIsLocked, taxObject, taxObjectIndex)\r\n }) : null}\r\n {showInstTaxes ? (\r\n
    \r\n \r\n {intl.formatMessage({id: \"grohe.cart.footer.instTax\"}) +\r\n (!pricingIsLocked && (+instTaxes > 0)\r\n ? intl.formatMessage({id: \"grohe.cart.footer.taxIncluded\"})\r\n : \"\")}\r\n \r\n
    \r\n {pricingIsLocked ? : getPriceWithCurrency(fabricatorSettings, instTaxes.toFixed(2))}\r\n
    \r\n
    \r\n ) : null}\r\n {/*{(quotes.length > 1) && !showAllQuotesCartItemsList && showTotal ? (*/}\r\n {/*
    */}\r\n {/* */}\r\n {/* */}\r\n {/* */}\r\n {/*
    */}\r\n {/* {pricingIsLocked ? : getPriceWithCurrency(fabricatorSettings, subTotalPrice)}*/}\r\n {/*
    */}\r\n {/*
    */}\r\n {/*) : null}*/}\r\n {isShort ? null : }\r\n {showTotal ? (\r\n
    \r\n \r\n \r\n \r\n
    \r\n {pricingIsLocked ? : getPriceWithCurrency(fabricatorSettings, grandTotal, null, true)}\r\n
    \r\n
    \r\n ) : null}\r\n
    \r\n )\r\n};\r\n\r\nGroheCartColumns.propTypes = {\r\n isShort: PropTypes.bool,\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {settings} = store.fabricatorState;\r\n const {discountSections} = store.priceWorksheetState;\r\n const {cartItems, showAllQuotesCartItemsList, sureTax} = store.cartState;\r\n const {isPhoneNumberValidated} = store.userState;\r\n const {language} = store.serverState;\r\n const {quotes, activeQuoteIndex} = store.quotesState;\r\n const {showUnlockCalculations, showTotalItems} = store.unlockCalculationsState;\r\n\r\n return {\r\n fabricatorSettings: settings,\r\n discountSections,\r\n cartItems,\r\n showAllQuotesCartItemsList,\r\n isPhoneNumberValidated,\r\n language,\r\n quotes,\r\n activeQuoteIndex,\r\n showUnlockCalculations,\r\n showTotalItems,\r\n sureTax, // to update when response received\r\n // deliveryList, // to update when delivery changed\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {};\r\n\r\nexport default injectIntl(\r\n withRouter(connect(mapStateToProps, mapDispatchToProps)(GroheCartColumns))\r\n)\r\n","import {useCallback, useEffect} from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport {withRouter} from \"react-router-dom\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport {\r\n setWizardActiveItem,\r\n setWizardActiveStep,\r\n setWizardSelectedValues\r\n} from \"../../../../../actions/wizardFunctions\";\r\nimport {getActiveWizardItem} from \"./lookWizardFunctions\";\r\nimport {setLookCompatabilityAlert} from \"../../../../../actions/lookFunctions\";\r\n\r\nconst LookWizard = (props) => {\r\n\r\n const {wizardList, location, setWizardActiveItem, wizardActiveItem, setWizardActiveStep, setWizardSelectedValues,\r\n children, lookCompatabilityAlert, setLookCompatabilityAlert, wizardActiveStep} = props;\r\n\r\n const closeCompatability = useCallback(() => {\r\n setLookCompatabilityAlert({\r\n visible: false,\r\n compatabilityLogic: [],\r\n clickedFeature: null,\r\n applyFunction: null\r\n })\r\n }, [setLookCompatabilityAlert])\r\n\r\n useEffect(() => {\r\n console.log(\"wizardActiveItem\", wizardActiveItem);\r\n if (!wizardActiveItem) {\r\n const wizardItem = getActiveWizardItem(wizardList, location);\r\n console.log(\"wizardItem\", wizardItem);\r\n if (wizardItem) {\r\n setWizardActiveItem(wizardItem)\r\n }\r\n }\r\n return () => {\r\n setWizardActiveItem(null);\r\n setWizardActiveStep(-1);\r\n setWizardSelectedValues({}, true);\r\n if (lookCompatabilityAlert && lookCompatabilityAlert.visible) {\r\n closeCompatability()\r\n }\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [wizardList])\r\n\r\n useEffect(() => {\r\n if (lookCompatabilityAlert && lookCompatabilityAlert.visible) {\r\n closeCompatability()\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [wizardActiveStep, wizardActiveItem]);\r\n\r\n if (!wizardActiveItem) {\r\n return null\r\n }\r\n\r\n return children\r\n};\r\n\r\nLookWizard.propTypes = {\r\n children: PropTypes.oneOfType([PropTypes.func, PropTypes.node]).isRequired,\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {wizardList, wizardActiveItem, wizardActiveStep} = store.wizardState;\r\n const {lookCompatabilityAlert} = store.lookState;\r\n\r\n return {\r\n wizardList,\r\n wizardActiveItem,\r\n wizardActiveStep,\r\n lookCompatabilityAlert,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setWizardActiveItem,\r\n setWizardActiveStep,\r\n setWizardSelectedValues,\r\n setLookCompatabilityAlert,\r\n};\r\n\r\nexport default withRouter(\r\n connect(mapStateToProps, mapDispatchToProps)(LookWizard)\r\n)\r\n","import React from \"react\";\r\nimport {connect} from \"react-redux\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport {getCurrentGroups} from \"./lookWizardFunctions\";\r\n\r\n\r\nconst LookWizardContentTitle = (props) => {\r\n\r\n const {wizardActiveItem, wizardActiveStep, wizardSelectedValues} = props;\r\n\r\n const currentGroups = getCurrentGroups(wizardActiveItem, wizardActiveStep, wizardSelectedValues);\r\n\r\n if (wizardActiveStep === -1) {\r\n // return \r\n return wizardActiveItem.name\r\n }\r\n if (wizardActiveStep > -1 && currentGroups.length === 1) {\r\n return currentGroups[0].title\r\n }\r\n if (wizardActiveStep > -1 && !currentGroups.length) {\r\n return \r\n }\r\n if (wizardActiveStep === 0 && currentGroups.length > 1 && wizardActiveItem.startTitle) {\r\n return wizardActiveItem.startTitle\r\n }\r\n return null\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const {wizardActiveItem, wizardActiveStep, wizardSelectedValues} = store.wizardState;\r\n return {\r\n wizardActiveItem,\r\n wizardActiveStep,\r\n wizardSelectedValues,\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps)(LookWizardContentTitle)\r\n","import React from \"react\";\r\nimport {connect} from \"react-redux\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport {getCurrentGroups} from \"./lookWizardFunctions\";\r\n\r\n\r\nconst LookWizardContentDescription = (props) => {\r\n\r\n const {wizardActiveItem, wizardActiveStep, wizardSelectedValues} = props;\r\n\r\n const currentGroups = getCurrentGroups(wizardActiveItem, wizardActiveStep, wizardSelectedValues);\r\n\r\n if (wizardActiveStep === -1) {\r\n return wizardActiveItem.description\r\n }\r\n if (wizardActiveStep > -1 && currentGroups.length === 1) {\r\n return currentGroups[0].description\r\n }\r\n if (wizardActiveStep > -1 && !currentGroups.length) {\r\n return \r\n }\r\n if (wizardActiveStep === 0 && currentGroups.length > 1 && wizardActiveItem.startDescription) {\r\n return wizardActiveItem.startDescription\r\n }\r\n return null\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const {wizardActiveItem, wizardActiveStep, wizardSelectedValues} = store.wizardState;\r\n return {\r\n wizardActiveItem,\r\n wizardActiveStep,\r\n wizardSelectedValues,\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps)(LookWizardContentDescription)\r\n","import React, {Fragment} from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport {injectIntl} from \"react-intl\";\r\nimport {withRouter} from \"react-router-dom\";\r\nimport LookWizardSection from \"./lookWizard/lookWizardSection\";\r\nimport {getActiveWizardItem, getAvailableSteps, getCurrentGroups} from \"./lookWizard/lookWizardFunctions\";\r\nimport {ROUTES} from \"../../../../routes\";\r\nimport {IS_PRODUCT_JOURNEY} from \"../../../../config\";\r\n\r\nimport GroheFeaturesHeader from \"../../grohe/groheNavigation/groheFeatures/groheFeaturesHeader\";\r\n\r\nconst LookMainWizardSections = (props) => {\r\n\r\n const {wizardList, location, wizardActiveStep, wizardSelectedValues, isMobile, contentHeight, wizardActiveItem,\r\n shopPageOpened, lookCompatabilityAlert, filtersOpened} = props;\r\n\r\n const showWizard = (shopPageOpened && wizardActiveItem) || (location && location.pathname && location.pathname.includes(ROUTES.wizard));\r\n // console.log(\"showWizard\", showWizard);\r\n if (!showWizard) {\r\n return null\r\n }\r\n\r\n const wizardItem = wizardActiveItem || getActiveWizardItem(wizardList, location);\r\n if (!wizardItem) {\r\n return null\r\n }\r\n\r\n const wizardSteps = getAvailableSteps(wizardItem, wizardSelectedValues);\r\n // console.log(\"wizardSteps\", wizardSteps);\r\n\r\n const currentGroups = getCurrentGroups(wizardItem, wizardActiveStep, wizardSelectedValues);\r\n const isCompletedStep = wizardActiveStep > -1 && !currentGroups.length;\r\n\r\n const wizardSections = (\r\n \r\n {wizardSteps.map((wizardStep, wizardStepIndex) => {\r\n const currentGroups = getCurrentGroups(wizardItem, wizardStepIndex, wizardSelectedValues);\r\n\r\n if (IS_PRODUCT_JOURNEY) {\r\n let classNames = \"grohe-features grohe-section--wizard\"\r\n + ((wizardActiveStep === wizardStepIndex) && !isCompletedStep ? \" grohe-features--opened\" : \"\")\r\n + (shopPageOpened ? \" grohe-section--shop\" : \"\");\r\n if (isMobile) {\r\n if (wizardActiveStep !== wizardStepIndex) {\r\n classNames += wizardActiveStep > wizardStepIndex && !isCompletedStep\r\n ? \" lm-section--slide-left\"\r\n : \" lm-section--slide-right\"\r\n }\r\n }\r\n return (\r\n
    \r\n \r\n
    1) ? \"\" : \" lm-content--no-scroll lm-content--product\")}>\r\n {currentGroups.length ? : null}\r\n
    \r\n
    \r\n )\r\n }\r\n\r\n if (isMobile) {\r\n let classNames = \"lm-content lm-content--features lm-content--wizard\";\r\n if (wizardActiveStep !== wizardStepIndex) {\r\n classNames += wizardActiveStep > wizardStepIndex && !isCompletedStep\r\n ? \" lm-section--slide-left lm-section--hidden\"\r\n : \" lm-section--slide-right lm-section--hidden\"\r\n }\r\n return (\r\n
    \r\n {currentGroups.length ? : null}\r\n
    \r\n )\r\n }\r\n let classNames = \"lm-section lm-section--feature lw-section lm-section--slide-right\";\r\n if (wizardActiveStep !== wizardStepIndex) {\r\n classNames += wizardActiveStep > wizardStepIndex && !isCompletedStep\r\n ? \" lm-section--slide-right-more lm-section--hidden\"\r\n : \" lm-section--slide-none lm-section--hidden\"\r\n }\r\n return (\r\n
    \r\n
    1 ? \"\" : \" lm-content--no-scroll\")\r\n + (filtersOpened || lookCompatabilityAlert.visible ? \" lm-content--slide-down\" : \"\")}>\r\n {currentGroups.length ? : null}\r\n
    \r\n
    \r\n )\r\n })}\r\n
    \r\n )\r\n\r\n if (IS_PRODUCT_JOURNEY && isMobile) {\r\n return (\r\n
    \r\n {wizardSections}\r\n
    \r\n )\r\n }\r\n\r\n return wizardSections\r\n\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {wizardList, wizardActiveStep, wizardSelectedValues, wizardActiveItem} = store.wizardState;\r\n const {isMobile} = store.serverState;\r\n const {shopPageOpened} = store.shopState;\r\n const {lookCompatabilityAlert} = store.lookState;\r\n const {filtersOpened} = store.groheState;\r\n\r\n return {\r\n wizardList,\r\n wizardActiveStep,\r\n wizardSelectedValues,\r\n isMobile,\r\n wizardActiveItem,\r\n shopPageOpened,\r\n lookCompatabilityAlert,\r\n filtersOpened,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n\r\n};\r\n\r\nexport default withRouter(\r\n injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(LookMainWizardSections)\r\n )\r\n)\r\n","import React, {useEffect, useRef} from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport IconButton from \"@mui/material/IconButton\";\r\nimport ErrorIcon from \"@mui/icons-material/Error\";\r\n\r\nimport {setLookCompatabilityAlert} from \"../../../../../actions/lookFunctions\";\r\nimport LookCompatabilitySectionButtons from \"./lookCompatabilitySectionButtons\";\r\nimport LookCompatabilitySectionContent from \"./lookCompatabilitySectionContent\";\r\nimport {IS_PRODUCT_JOURNEY} from \"../../../../../config\";\r\nimport $ from \"jquery\";\r\n\r\nconst LookCompatabilitySection = (props) => {\r\n const {lookCompatabilityAlert, wrapperStyles, intl, isMobile} = props;\r\n\r\n const compatabilityContentElem = useRef();\r\n\r\n //console.log(\"availableFilters\", availableFilters);\r\n\r\n useEffect(() => {\r\n if (lookCompatabilityAlert.visible) {\r\n setTimeout(() => {\r\n if (compatabilityContentElem && compatabilityContentElem.current) {\r\n const buttons = $(compatabilityContentElem.current).find(\".look-popup__buttons\");\r\n if (buttons && buttons[0] && buttons[0].offsetTop) {\r\n $(compatabilityContentElem.current).animate({scrollTop: buttons[0].offsetTop}, 1300);\r\n }\r\n }\r\n }, 700);\r\n }\r\n }, [lookCompatabilityAlert])\r\n\r\n return (\r\n
    \r\n
    \r\n
    \r\n \r\n \r\n \r\n

    \r\n \r\n

    \r\n
    \r\n

    \r\n \r\n

    \r\n \r\n \r\n
    \r\n
    \r\n )\r\n};\r\n\r\nLookCompatabilitySection.propTypes = {\r\n wrapperStyles: PropTypes.object\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {lookCompatabilityAlert, lookActiveFeature} = store.lookState;\r\n const {isMobile} = store.serverState;\r\n return {\r\n lookActiveFeature,\r\n lookCompatabilityAlert,\r\n isMobile,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setLookCompatabilityAlert\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(LookCompatabilitySection)\r\n);\r\n","import React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport { withRouter } from \"react-router-dom\";\r\nimport {injectIntl} from \"react-intl\";\r\n\r\nimport IconButton from \"@mui/material/IconButton\";\r\nimport CloseIcon from \"@mui/icons-material/Close\";\r\n\r\nimport {setLookOpened} from \"../../../../actions/lookFunctions\";\r\nimport {ROUTES} from \"../../../../routes\";\r\nimport Analytics, {LOOK_JOURNEY_ANALYTIC_EVENTS} from \"../../../../analytics\";\r\nimport {zoomCanvasOut} from \"../lookFunctions\";\r\nimport {setCanvasScale} from \"../../../../actions/actionFunctions\";\r\nimport LookCanvasContext from \"../../lookCanvasContext\";\r\n\r\nconst LookMainHeaderCloseButton = (props) => {\r\n\r\n const {intl, history, setLookOpened, setCanvasScale} = props;\r\n\r\n const closeButtonClick = (imageCanvas) => {\r\n Analytics.sendClickEvent(LOOK_JOURNEY_ANALYTIC_EVENTS.lookMenuHeaderClose);\r\n setLookOpened(false);\r\n zoomCanvasOut(imageCanvas, setCanvasScale);\r\n history.push(ROUTES.home);\r\n };\r\n\r\n return (\r\n \r\n {(imageCanvas) => (\r\n closeButtonClick(imageCanvas)}>\r\n \r\n \r\n )}\r\n \r\n )\r\n};\r\n\r\nconst mapStateToProps = () => {\r\n return {\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setLookOpened,\r\n setCanvasScale,\r\n};\r\n\r\nexport default withRouter(\r\n injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(LookMainHeaderCloseButton)\r\n )\r\n)\r\n","const ua = navigator.userAgent || navigator.vendor || window.opera;\r\nexport const isInstagram = ua.indexOf('Instagram') > -1\r\nexport const isFacebook = (ua.indexOf(\"FBAN\") > -1) || (ua.indexOf(\"FBAV\") > -1);\r\n\r\n// if (document.documentElement.classList) {\r\n// if (isInstagram) {\r\n// window.document.body.classList.add('bv--instagram');\r\n// }\r\n// }\r\n","import React, {useEffect, useRef, useState} from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport ClickAwayListener from '@mui/material/ClickAwayListener';\r\nimport Grow from '@mui/material/Grow';\r\nimport Popper from '@mui/material/Popper';\r\n\r\nimport {setLookContextMenu} from \"../../../actions/lookFunctions\";\r\n\r\nimport ContextMenuQKBButtons from \"./contextMenuQKBButtons\";\r\n\r\n// export const checkForContextMenuCommon = (partId, layerPosition) => {\r\nexport const checkForContextMenuCommon = () => {\r\n const returnObject = {\r\n allButtons: [], // {partId: \"\", translateId: \"\", isWizard: true, wizardId: sting|number, hasSubMenu: false}\r\n showButtons: [] // {partId: \"\", translateId: \"\", isWizard: true, wizardId: sting|number, hasSubMenu: false}\r\n }\r\n return returnObject\r\n}\r\n\r\nconst getContextMenuPosition = (contextMenu, position, isMobile) => {\r\n const {partId, layerPosition} = contextMenu;\r\n const {showButtons} = checkForContextMenuCommon(partId, layerPosition);\r\n\r\n let left = isMobile ? '50%' : position.x - 50;\r\n let top = isMobile ? '50%' : position.y - 50;\r\n let right = 'auto';\r\n\r\n const maxAllowedWidth = showButtons.length > 2 ? 300 : 210;\r\n\r\n let maxAllowedHeight = 110;\r\n if (showButtons.length > 6) {\r\n maxAllowedHeight = 330;\r\n } else if (showButtons.length >= 3) {\r\n maxAllowedHeight = 220;\r\n }\r\n if (!isMobile && (left > window.innerWidth - maxAllowedWidth)) {\r\n left = 'auto';\r\n right = 0\r\n }\r\n if (!isMobile && (top > window.innerHeight - maxAllowedHeight)) {\r\n let negativeMargin = 50;\r\n if (showButtons.length > 6) {\r\n negativeMargin = 250;\r\n } else if (showButtons.length >= 3) {\r\n negativeMargin = 150;\r\n }\r\n top = top - negativeMargin;\r\n }\r\n\r\n return {left, top, right}\r\n}\r\n\r\nconst ContextMenuQKB = (props) => {\r\n\r\n const {contextMenu, setLookContextMenu, isMobile, handleContextMenuClick, renderGreenLayerByZindex} = props;\r\n const {opened, position} = contextMenu;\r\n const [styles, setStyles] = useState({left: 0, top: 0, right: 0});\r\n const [buttons, setButtons] = useState([]);\r\n const anchorRef = useRef(null);\r\n\r\n const handleClose = (event) => {\r\n if (document.hoveredLayer && event.target.closest(\".canvas-el\") && ALL_CONTEXT_MENU.includes(document.hoveredLayer.partId)) {\r\n return\r\n }\r\n setLookContextMenu({\r\n opened: false,\r\n layerPosition: \"\",\r\n });\r\n };\r\n\r\n useEffect(() => {\r\n if (!contextMenu.opened) {\r\n return null\r\n }\r\n setStyles(getContextMenuPosition(contextMenu, position, isMobile));\r\n const {showButtons} = checkForContextMenuCommon(contextMenu.partId, contextMenu.layerPosition);\r\n setButtons(showButtons);\r\n }, [contextMenu, position, isMobile]);\r\n\r\n // console.log(\"styles\", styles);\r\n\r\n let contextStyles = styles;\r\n if (buttons.length <= 4) {\r\n contextStyles = Object.assign({}, styles, {maxWidth: \"210px\"});\r\n }\r\n\r\n return (\r\n
    \r\n \r\n {({ TransitionProps }) => (\r\n \r\n
    \r\n \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n \r\n )}\r\n
    \r\n
    \r\n )\r\n};\r\n\r\nContextMenuQKB.propTypes = {\r\n handleContextMenuClick: PropTypes.func,\r\n renderGreenLayerByZindex: PropTypes.func,\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {contextMenu} = store.lookState;\r\n const {isMobile} = store.serverState;\r\n return {\r\n contextMenu,\r\n isMobile,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setLookContextMenu\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(ContextMenuQKB)\r\n","import Analytics from \"../../../analytics\";\r\nimport Config from \"../../../config\";\r\nimport {loaderDisable, loaderEnable} from \"../../ui/loaderView\";\r\nimport {saveQuote} from \"../../../api/server-api\";\r\nimport {renderErrorPopup} from \"../../../api/api-popups\";\r\nimport {showQuoteSavedNotification} from \"../../ui/successNotification\";\r\n\r\nexport const handleBackToDashboard = () => {\r\n if (window.salesForceLoaded || typeof(sr) != 'undefined') {\r\n Analytics.sendClickEvent('see-job-in-salesforce');\r\n let payload = {QCJobId: document.kvConfig.jobId};\r\n console.log('attempting to view job in SalesForce', payload);\r\n let eventPayload = {name: 'quoteCountertops.viewJobInSF', payload }\r\n try {\r\n window.Sfdc.canvas.client.publish(sr.client, eventPayload);\r\n } catch(e) {\r\n console.log('unable to send via salesforce viewpage');\r\n }\r\n if (typeof(sfdcMessage) !== 'undefined') {\r\n sfdcMessage.postMessage(eventPayload);\r\n }\r\n } else {\r\n Analytics.sendClickEvent('back-to-dashboard');\r\n Config.parent && Config.parent.exitEditQuote && Config.parent.exitEditQuote();\r\n loaderDisable(); // in case it is not an iframe\r\n showQuoteSavedNotification();\r\n }\r\n};\r\n\r\nexport const handleSaveAndBackToDashboard = () => {\r\n\r\n if (!document.kvConfig.jobId) {\r\n renderErrorPopup(\"The Quote can not be saved, no JobId is assigned yet\");\r\n return false\r\n }\r\n\r\n loaderEnable(\"loader.savingQuoteText\");\r\n saveQuote({submit: true})\r\n .then(handleBackToDashboard)\r\n .catch(handleBackToDashboard)\r\n};\r\n","export const VIEW = {\r\n login: 0,\r\n register: 1,\r\n reset: 2,\r\n terms: 3\r\n};","import React from 'react';\r\nimport JsonApi from \"../../api/jsonApi\";\r\nimport PropTypes from 'prop-types';\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\nimport trim from \"lodash/trim\";\r\nimport {connect} from \"react-redux\";\r\n\r\nimport 'react-intl-tel-input/dist/main.css';\r\nimport {browserIsSafari} from \"../../misc/helpers\";\r\nimport OnScreenKeyboard from './OnScreenKeyboard/keyboard';\r\nimport Analytics from './../../analytics';\r\nimport misc from '../../misc/misc';\r\nimport {loaderDisable, loaderEnable} from \"../ui/loaderView\";\r\nimport store from '../../store';\r\nimport LookUserPhoneInput from \"../look/user/lookUserPhoneInput\";\r\nimport {changeUserInfo} from \"../../actions/actionFunctions\";\r\n//import autoPrefixer from 'gulp-autoprefixer';\r\n\r\nconst steps = {\r\n VerifyPhoneNumber: 0,\r\n TermsAndConditions: 1,\r\n UpdatePhone: 2,\r\n Updated: 3,\r\n Verified: 4\r\n};\r\n\r\n//const phoneUtil = PhoneNumberUtil.getInstance();\r\n\r\nexport const getPreferredCountries = () => {\r\n const {fabricatorState} = store.getState();\r\n if (fabricatorState.isCaesarStone && (fabricatorState.settings.currency === \"AUD\" || fabricatorState.settings.currency === \"AUS\")) {\r\n return [\"au\", \"us\", \"gb\", \"ca\"]\r\n }\r\n if (fabricatorState.isLixil) {\r\n return [\"us\", \"gb\", \"ca\"]\r\n }\r\n switch(fabricatorState.settings.currency) {\r\n case \"CAD\":\r\n return fabricatorState.isLowes ? [\"ca\"] : [\"ca\", \"us\", \"gb\", \"pa\", \"es\"];\r\n default:\r\n return [\"us\", \"gb\", \"ca\", \"pa\", \"es\"];\r\n }\r\n}\r\n\r\nclass TwoFactorAuthClass extends React.Component {\r\n static propTypes = {\r\n phoneNumber: PropTypes.string.isRequired,\r\n // (cancel = true, updatePhone = null)\r\n onClose: PropTypes.func.isRequired\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n step: steps.VerifyPhoneNumber,\r\n authCode: '',\r\n validating: false,\r\n valid: true,\r\n phoneUpdateError: false,\r\n oldPhoneNumber: \"\",\r\n oldCountry: {},\r\n };\r\n\r\n this.handleResendSMS();\r\n }\r\n\r\n setStep = (step) => {\r\n this.setState({step});\r\n };\r\n\r\n componentDidMount() {\r\n this.setOldValues();\r\n }\r\n\r\n setOldValues() {\r\n const {phoneNumber, country} = this.props;\r\n this.setState({oldPhoneNumber: phoneNumber, oldCountry: country})\r\n }\r\n\r\n render() {\r\n return (\r\n
    \r\n {this.getDialog()}\r\n
    \r\n );\r\n }\r\n\r\n getDialogContent = () => {\r\n let content = {\r\n title: \"Invalid Step\",\r\n content: null,\r\n footer: null\r\n };\r\n switch (this.state.step) {\r\n case steps.VerifyPhoneNumber:\r\n content = this.getVerifyPhoneNumberContent();\r\n break;\r\n case steps.TermsAndConditions:\r\n content = this.getTermsAndConditionsContent();\r\n break;\r\n case steps.UpdatePhone:\r\n content = this.getUpdatePhoneContent();\r\n break;\r\n }\r\n return content;\r\n };\r\n\r\n sendAuthenticationRequest = (token, to, type, message) => {\r\n if (message) {\r\n loaderEnable(null, message);\r\n setTimeout(() => {\r\n loaderDisable()\r\n }, 3000);\r\n }\r\n return JsonApi.sendAuthenticationRequest(token, to, type);\r\n };\r\n\r\n handleResendSMS = () => {\r\n Analytics.sendClickEvent(\"resend-sms\");\r\n JsonApi.generateAuthenticationToken()\r\n .then((t) => {\r\n var token = t.data ? t.data : t;\r\n this.setState({token});\r\n this.sendAuthenticationRequest(token, `+${this.props.country.dialCode + this.props.phoneNumber}`, 1, \"loader.authenticationSmsSendTitle\");\r\n }).catch(() => this.props.onClose(false, this.props.phoneNumber));\r\n };\r\n\r\n handleResendVoice = () => {\r\n Analytics.sendClickEvent(\"resend-voice\");\r\n JsonApi.generateAuthenticationToken()\r\n .then((t) => {\r\n var token = t.data ? t.data : t;\r\n this.setState({token});\r\n this.sendAuthenticationRequest(token, `+${this.props.country.dialCode + this.props.phoneNumber}`, 2, 'loader.authenticationCallBackTitle');\r\n }).catch(() => this.props.onClose(false, this.props.phoneNumber));\r\n };\r\n\r\n handleCheckVerificationCode = (e) => {\r\n const authCode = trim(e.target.value).replace(/[^0-9]/g, \"\");\r\n this.setState({authCode});\r\n if (authCode.length === 6) {\r\n this.setState({validating: true}, () => {\r\n JsonApi.validateAuthenticationRequest(this.state.token, authCode, this.props.phoneNumber)\r\n .then((success) => {\r\n if (success.data) {\r\n this.handlePostPhoneNumberUpdated();\r\n Analytics.sendEvent(\"PhoneVerification\", \"Success\");\r\n this.setStep(steps.Verified);\r\n window.setTimeout(() => this.props.onClose(false, this.props.phoneNumber), 3750);\r\n } else\r\n Analytics.sendEvent(\"PhoneVerification\", \"Failure\");\r\n this.setState({valid: false, validating: false}); //, validating: false\r\n });\r\n });\r\n }\r\n };\r\n\r\n handlePostPhoneNumberUpdated = () => {\r\n Analytics.sendClickEvent(\"phone-number-update\");\r\n };\r\n\r\n handleUpdatePhoneNumber = () => {\r\n const {country} = this.props;\r\n var iso2 = country.iso2 || \"US\";\r\n if (misc.isPhoneNumber(this.props.phoneNumber, iso2.toUpperCase())) {\r\n this.handlePostPhoneNumberUpdated();\r\n this.setStep(steps.VerifyPhoneNumber);\r\n this.setState({authCode: \"\"}); // erase previous\r\n this.setOldValues();\r\n this.handleResendSMS();\r\n } else {\r\n this.setState({phoneUpdateError: true});\r\n }\r\n };\r\n\r\n revertUserValues = () => {\r\n this.props.changeUserInfo({\r\n phoneNumber: this.state.oldPhoneNumber,\r\n country: this.state.oldCountry,\r\n }); // set previous values on back click\r\n }\r\n\r\n handleBackClick = () => {\r\n this.revertUserValues(); // set previous values on back click\r\n this.setStep(steps.VerifyPhoneNumber);\r\n }\r\n\r\n getVerifyPhoneNumberContent = () => {\r\n const {intl} = this.props;\r\n const {fabricatorState} = store.getState();\r\n return {\r\n title: intl.formatMessage({id: \"twoFA.title\"}),\r\n content: (\r\n
    \r\n \r\n this.handleCheckVerificationCode({target: {value: v}})} type=\"numeric\"/>\r\n {!this.state.valid\r\n ?
    \r\n : null}\r\n {this.state.validating\r\n ? \"Validating...\"\r\n\r\n : null}\r\n
    \r\n \r\n {`+${this.props.country.dialCode} ${this.props.phoneNumber}`}\r\n {/*Please enter it or choose to receive a call with your verification code to unlock.*/}\r\n
    \r\n
    this.setStep(steps.UpdatePhone)}>\r\n \r\n
    \r\n
    \r\n
    this.handleResendSMS()}>
    \r\n
    this.handleResendVoice()}>
    \r\n
    \r\n {fabricatorState.isLowes ? null : (\r\n
    \r\n \r\n
    \r\n )}\r\n
    \r\n ),\r\n footer: (\r\n
    \r\n
    this.setStep(steps.TermsAndConditions)}>
    \r\n
    \r\n )\r\n }\r\n };\r\n\r\n getTermsAndConditionsContent = () => {\r\n const {intl} = this.props;\r\n return {\r\n title: intl.formatMessage({id: \"twoFA.termsAndConditions\"}),\r\n content: (\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n ),\r\n footer: (\r\n
    \r\n
    \r\n
    this.setStep(steps.VerifyPhoneNumber)}>\r\n \r\n
    \r\n
    \r\n
    \r\n )\r\n };\r\n };\r\n\r\n getUpdatePhoneContent = () => {\r\n const {intl} = this.props;\r\n return {\r\n title: intl.formatMessage({id: \"twoFA.updatePhoneNumber\"}),\r\n content: (\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n {this.state.phoneUpdateError ? (\r\n
    \r\n \r\n
    \r\n ) : null}\r\n
    \r\n ),\r\n footer: (\r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n )\r\n };\r\n };\r\n\r\n closeButtonClick = () => {\r\n this.revertUserValues();\r\n this.props.onClose(true);\r\n }\r\n\r\n getDialog = () => {\r\n if (this.state.step < steps.Updated) {\r\n let content = this.getDialogContent();\r\n const popupStyles = browserIsSafari() && this.props.windowWidth < 991 ? {height: this.props.windowHeight - 35} : {};\r\n return (\r\n
    \r\n
    \r\n
    {content.title}
    \r\n
    \r\n X\r\n
    \r\n
    \r\n {content.content}\r\n {content.footer}\r\n
    \r\n );\r\n } else {\r\n return (\r\n
    \r\n
    \r\n
    \r\n \r\n \r\n \r\n
    \r\n
    \r\n
    \r\n );\r\n }\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {phoneNumber, country} = store.userState.userInfo;\r\n return {\r\n phoneNumber,\r\n country,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n changeUserInfo,\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(TwoFactorAuthClass)\r\n)\r\n","import React, {Component, Fragment} from 'react';\r\nimport {connect} from \"react-redux\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\n\r\nimport {\r\n toggleConfirmPopup,\r\n setJobId\r\n} from \"../../actions/actionFunctions\";\r\nimport {\r\n showContractSigning,\r\n setAfterContractSignCallback\r\n} from \"../../actions/contractsActions\";\r\nimport {updateSQFT} from \"../../actions/sqftFunctions\";\r\nimport {ConfirmPopupTypes, QuoteRequestType, SqftUpdateTypes, UserAction} from \"../visComponents/constants\";\r\nimport {setUserLoginResponse, userLogin, userRegister} from \"../../api/user-api\";\r\nimport Analytics from './../../analytics';\r\nimport WithCloseSQFtCalc from \"../sqft/hocs/withCloseSQFtCalc\";\r\nimport workspace from \"../sqft/components/canvas/core/workspace\";\r\nimport WithOverlay from \"./withOverlayHoc\";\r\nimport {setAssignQuotePopupCustomer} from \"../../actions/assignPopupFunctions\";\r\nimport {setAlreadyRegisteredUserInfo} from \"../../actions/userFunctions\";\r\nimport {loaderEnable} from \"../ui/loaderView\";\r\nimport {renderConfirmPopup} from \"../../api/api-popups\";\r\nimport {ROUTES} from \"../../routes\";\r\n\r\nclass ConfirmPopup extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {};\r\n }\r\n\r\n componentWillReceiveProps(nextProps) {\r\n if (nextProps.applyPopupOpened && !this.props.applyPopupOpened) {\r\n document.body.classList.add('body--apply-popup');\r\n }\r\n }\r\n\r\n handleApply = (confirm, hideOverlay, closeSQFtCalc) => {\r\n // Analytics.sendClickEvent('confirm-popup-apply-' + (confirm ? 'yes': 'no'));\r\n hideOverlay(this.closePopup);\r\n document.body.classList.remove('body--apply-popup');\r\n const {confirmPopupType, confirmPopupTag} = this.props;\r\n switch (confirmPopupType) {\r\n case ConfirmPopupTypes.ConsultationRequest: {\r\n const data = {\r\n yesNoConsultationRequest: confirm,\r\n userPopupType: confirmPopupTag.userPopupType,\r\n fromConfirmationDialog: true,\r\n quoteRequestType: QuoteRequestType.RequestConsultation\r\n };\r\n confirm\r\n ? Analytics.sendClickEvent('design-consultation-yes')\r\n : Analytics.sendClickEvent('design-consultation-no');\r\n switch (confirmPopupTag.userAction) {\r\n case UserAction.Login:\r\n userLogin(data);\r\n break;\r\n case UserAction.Register:\r\n userRegister(data)\r\n break;\r\n }\r\n break;\r\n }\r\n case ConfirmPopupTypes.SqftResetChanges: {\r\n if (confirm) {\r\n this.props.updateSQFT(SqftUpdateTypes.Reset);\r\n closeSQFtCalc(false);\r\n workspace.removeAllShapes();\r\n workspace.textBoxManager.removeAllTextBoxes();\r\n workspace.removeAllSlabImages();\r\n setTimeout(() => {\r\n this.props.updateSQFT(null);\r\n }, 0)\r\n }\r\n break;\r\n }\r\n case ConfirmPopupTypes.SqftUpdateQuestion: {\r\n if (confirm) {\r\n this.props.updateSQFT(SqftUpdateTypes.UpdateData);\r\n setTimeout(() => {\r\n this.props.updateSQFT(null);\r\n }, 0)\r\n }\r\n break;\r\n }\r\n case ConfirmPopupTypes.AssignQuoteOnExistingUser: {\r\n if (confirm) {\r\n const {alreadyRegisteredUserInfo} = this.props;\r\n Analytics.sendClickEvent('confirm-assign-quote-on-existing-user');\r\n if (window.location.hash.includes(ROUTES.contract)) {\r\n // this.props.showContractSigning(false, () => {}); // why close contract?\r\n if (this.props.afterContractSignCallback) {\r\n this.props.setAfterContractSignCallback(null);\r\n }\r\n }\r\n if (alreadyRegisteredUserInfo.assignQuote) {\r\n this.props.setAssignQuotePopupCustomer({ // clear current selected customer\r\n id: alreadyRegisteredUserInfo.userId,\r\n email: alreadyRegisteredUserInfo.email,\r\n fullName: alreadyRegisteredUserInfo.values.firstName + (alreadyRegisteredUserInfo.values.lastName ? \" \" + alreadyRegisteredUserInfo.values.lastName : \"\"),\r\n });\r\n this.props.setAlreadyRegisteredUserInfo({confirmedAssign: true}); // trigger assign quote button\r\n } else {\r\n loaderEnable();\r\n setUserLoginResponse(alreadyRegisteredUserInfo, true);\r\n }\r\n }\r\n if (confirmPopupTag.applyFunction) {\r\n confirmPopupTag.applyFunction();\r\n }\r\n break;\r\n }\r\n case ConfirmPopupTypes.DeleteCartItemsPopup: {\r\n if (confirm) {\r\n renderConfirmPopup(0, {allowDelete: true}, false); // clear tag\r\n }\r\n break;\r\n }\r\n // case ConfirmPopupTypes.ChangeWizardToPreviousStepSelection:\r\n // case ConfirmPopupTypes.ReplaceRoomWhenItExistsInCartButWeAddNew: {\r\n // break;\r\n // }\r\n default: {\r\n if (confirm) {\r\n if (confirmPopupTag.applyFunction) {\r\n confirmPopupTag.applyFunction();\r\n }\r\n } else if (confirmPopupTag.declineFunction) {\r\n confirmPopupTag.declineFunction()\r\n }\r\n renderConfirmPopup(0, {}, false); // clear tag\r\n break;\r\n }\r\n }\r\n };\r\n\r\n getConfirmMessage = () => {\r\n const {intl, confirmPopupType, confirmPopupTag} = this.props;\r\n switch (confirmPopupType) {\r\n case ConfirmPopupTypes.ConsultationRequest:\r\n return intl.formatMessage({id: \"confirmPopup.consultationRequest\"});\r\n case ConfirmPopupTypes.SqftResetChanges:\r\n return intl.formatMessage({id: \"confirmPopup.sqftResetChanges\"});\r\n case ConfirmPopupTypes.SqftUpdateQuestion:\r\n return intl.formatMessage({id: \"confirmPopup.sqftUpdateQuestion\"});\r\n case ConfirmPopupTypes.DeleteCartItemsPopup:\r\n return intl.formatMessage({id: confirmPopupTag.fromDelete ? \"confirmPopup.deleteCartItems2\" : \"confirmPopup.deleteCartItems\"});\r\n case ConfirmPopupTypes.ChangeWizardToPreviousStepSelection:\r\n return intl.formatMessage({id: \"confirmPopup.deleteCartItemsWizard\"});\r\n case ConfirmPopupTypes.ReplaceRoomWhenItExistsInCartButWeAddNew:\r\n return intl.formatMessage({id: \"confirmPopup.replaceRoomWhenItExistsInCartButWeAddNew\"});\r\n case ConfirmPopupTypes.AssignQuoteOnExistingUser: {\r\n const {alreadyRegisteredUserInfo} = this.props;\r\n return (\r\n \r\n

    \r\n

    \r\n {alreadyRegisteredUserInfo.values ? (\r\n
    \r\n

    {alreadyRegisteredUserInfo.values.firstName + (alreadyRegisteredUserInfo.values.lastName ? \" \" + alreadyRegisteredUserInfo.values.lastName : \"\")}

    \r\n

    {alreadyRegisteredUserInfo.email}

    \r\n
    \r\n ) : null}\r\n
    \r\n );\r\n }\r\n default:\r\n return \"Text is not set up\"\r\n }\r\n };\r\n\r\n closePopup = () => {\r\n this.props.toggleConfirmPopup(false);\r\n };\r\n\r\n render() {\r\n const {confirmPopupOpened, confirmPopupType} = this.props;\r\n if (!confirmPopupOpened) {\r\n return null\r\n }\r\n return (\r\n \r\n {(hideOverlay) => (\r\n
    \r\n {/*
    */}\r\n {/*

    Would you like to add any visualized items to your cart?

    */}\r\n {/*
    */}\r\n
    \r\n {this.getConfirmMessage()}\r\n
    \r\n
    \r\n \r\n \r\n {(closeSQFtCalc) => (\r\n \r\n )}\r\n \r\n
    \r\n
    \r\n )}\r\n
    \r\n\r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {confirmPopupOpened, confirmPopupType, confirmPopupTag, alreadyRegisteredUserInfo} = store.userState;\r\n const {afterContractSignCallback} = store.contractSigningState;\r\n return {\r\n confirmPopupOpened,\r\n confirmPopupType,\r\n confirmPopupTag,\r\n alreadyRegisteredUserInfo,\r\n // contractSignIsOpened: isVisible,\r\n afterContractSignCallback,\r\n };\r\n};\r\nconst mapDispatchToProps = {\r\n toggleConfirmPopup,\r\n setJobId,\r\n updateSQFT,\r\n setAssignQuotePopupCustomer,\r\n setAlreadyRegisteredUserInfo,\r\n showContractSigning,\r\n setAfterContractSignCallback,\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(ConfirmPopup)\r\n)\r\n","import {connect} from \"react-redux\";\r\n\r\nimport {setCameFromPage, toggleConfirmPopup, toggleSelectionFeatureInfo} from \"../../../actions/actionFunctions\";\r\nimport {setSqftFromFeature} from \"../../../actions/sqftFunctions\";\r\nimport {withRouter} from \"react-router-dom\";\r\nimport {setShowAddedToTheCartSuccess} from \"../../../actions/groheFunctions\";\r\nimport {useCloseSQFTCalc} from \"./useCloseSQFTCalc\";\r\n\r\nconst WithCloseSQFtCalc = (props) => {\r\n const {children} = props;\r\n const {closeSQFTCalc} = useCloseSQFTCalc();\r\n\r\n return children(closeSQFTCalc);\r\n};\r\n\r\nconst mapStateToProps = (store) => ({\r\n cameFromPage: store.cartState.cameFromPage,\r\n activePreset: store.bathroomVisualizerState.activePreset,\r\n bvPresets: store.bathroomVisualizerState.bvPresets,\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n toggleSelectionFeatureInfo,\r\n setCameFromPage,\r\n toggleConfirmPopup,\r\n setSqftFromFeature,\r\n setShowAddedToTheCartSuccess,\r\n};\r\n\r\nexport default withRouter(\r\n connect(mapStateToProps, mapDispatchToProps)(WithCloseSQFtCalc)\r\n);\r\n","import React, {Component} from 'react';\r\nimport {connect} from \"react-redux\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport {isFacebook, isInstagram} from \"../../misc/browsers\";\r\nimport {baseNewImagesPath} from \"../assets\";\r\nimport MobileRotateButtonIcon from \"./mobileRotateButtonIcon\";\r\nimport {AmericanStandardIcon, groheIcon} from \"../common/icons\";\r\n\r\n// const faceBookOldView = (isRebath) => (\r\n//
    \r\n//
    \r\n// Click HERE to open this tool in another browser\r\n//
    \r\n//
    \r\n// Facebook doesn’t support this visualizer in the Facebook app.\r\n//
    \r\n//
    \r\n// \"\"/\r\n//
    \r\n//
    \r\n//

    OR

    \r\n//

    Copy the following link into your browser:

    \r\n//

    {window.location.href.split(window.location.search)[0]}

    \r\n//
    \r\n//
    \r\n// );\r\n\r\nclass MobileRotateButton extends Component {\r\n\r\n getIcon = () => {\r\n if (this.props.fabricatorData.isAmericanStandard) {\r\n return AmericanStandardIcon\r\n }\r\n return groheIcon\r\n }\r\n\r\n getLogo = () => {\r\n switch (true) {\r\n case this.props.fabricatorData.isRebath:\r\n return `${baseNewImagesPath}images/Logos/rebath-logo.svg`\r\n case this.props.fabricatorData.isRona:\r\n return `https://qc-cdn.s3.amazonaws.com/Logos/rona.png`\r\n case this.props.fabricatorData.isRenoDepot:\r\n return `https://qc-cdn.s3.amazonaws.com/Logos/reno-depot.png`\r\n case this.props.fabricatorData.isLowes:\r\n return `${baseNewImagesPath}images/Logos/Lowes-Color-Logo.svg`\r\n case this.props.fabricatorData.isCaesarStone:\r\n return `${baseNewImagesPath}images/Logos/csconnect2.png`\r\n default:\r\n // return `${baseNewImagesPath}images/Logos/quote-logo-stacked.svg`\r\n return `${baseNewImagesPath}images/Logos/Quote-Kitchen-and-Bath.svg`\r\n }\r\n };\r\n\r\n render() {\r\n\r\n const {isRebath, isLowes, isRona, isRenoDepot, isAmericanStandard, isLixil} = this.props.fabricatorData;\r\n\r\n return isFacebook || isInstagram\r\n ? null : (\r\n
    \r\n
    \r\n {isLixil ? this.getIcon() : \"\"}\r\n
    \r\n \r\n

    \r\n \r\n

    \r\n
    \r\n );\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => ({\r\n fabricatorData: store.fabricatorState\r\n});\r\nexport default connect(mapStateToProps)(MobileRotateButton);\r\n","import React from \"react\";\r\nimport {injectIntl} from \"react-intl\";\r\nimport {connect} from \"react-redux\";\r\n\r\nimport {setAssignQuotePopupSearchText} from \"../../../actions/assignPopupFunctions\";\r\n\r\nconst AssignQuotePopupSearch = (props) => {\r\n\r\n const {setAssignQuotePopupSearchText, assignQuotePopupSearchText, intl} = props;\r\n\r\n const handleSearchInputChange = (event) => {\r\n setAssignQuotePopupSearchText(event.target.value)\r\n };\r\n\r\n const searchText = assignQuotePopupSearchText;\r\n\r\n return (\r\n
    \r\n 12 ? \" search-input--with-close\" : \"\")}\r\n value={searchText}\r\n onChange={handleSearchInputChange}\r\n placeholder={intl.formatMessage({id: \"mobileMenu.searchPlaceholder\"})}\r\n />\r\n \r\n {searchText ?
    \r\n )\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n assignQuotePopupSearchText: store.assignQuoteState.assignQuotePopupSearchText\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setAssignQuotePopupSearchText\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(AssignQuotePopupSearch)\r\n)\r\n","import React, {useEffect, useState} from \"react\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\nimport PropTypes from \"prop-types\";\r\nimport {List} from \"react-virtualized\";\r\n\r\nimport {customerInterface, employeeInterface} from \"./assignQuoteInterfaces\";\r\nimport {usePrevious} from \"../../../misc/helperHooks\";\r\nimport UiIcon from \"../../ui/icons/uiIcon\";\r\n// import LoadingSpinner from \"../../ui/loadingSpinner\";\r\n\r\nconst AssignQuoteVirtualizedList = (props) => {\r\n\r\n const {renderList, selectEntity, activeEntity, noEntitiesFound, title, contentDimensions, errorMessage,\r\n hideEmployeesColumn} = props;\r\n const [scrollToIndex, setScrollToIndex] = useState(0);\r\n const prevEntity = usePrevious(activeEntity);\r\n\r\n useEffect(() => {\r\n if (activeEntity && !prevEntity) {\r\n let scrollToIn = renderList.findIndex(item => item.id === activeEntity.id)\r\n if (scrollToIn > -1) {\r\n setScrollToIndex(scrollToIn + 3);\r\n }\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [activeEntity]);\r\n\r\n const listWidth = contentDimensions && contentDimensions.width\r\n ? hideEmployeesColumn\r\n ? contentDimensions.width - 10\r\n : (contentDimensions.width / 2) - 10\r\n : 320; // 10 is padding\r\n const listHeight = contentDimensions && contentDimensions.height ? contentDimensions.height - 15 : 245; // 15 is title\r\n\r\n const listSettings = {\r\n width: listWidth,\r\n height: listHeight,\r\n rowHeight: 40,\r\n overscanRowCount: 6,\r\n rowCount: renderList.length,\r\n showScrollingPlaceholder: false,\r\n useDynamicRowHeight: false,\r\n }\r\n\r\n const rowRenderer = ({index, key, style}) => {\r\n const customer = renderList[index];\r\n return (\r\n
  • \r\n
    selectEntity(customer)}>\r\n
    \r\n \r\n
    \r\n
    \r\n selectEntity(customer)}>\r\n {customer.fullName} {customer.email ? ({customer.email}) : null}\r\n \r\n
  • \r\n );\r\n }\r\n\r\n const noRowsRenderer = () =>
    ;\r\n\r\n return (\r\n
    \r\n
    \r\n \r\n {errorMessage ? : null}\r\n
    \r\n \r\n
    \r\n )\r\n};\r\n\r\nAssignQuoteVirtualizedList.propTypes = {\r\n renderList: PropTypes.array.isRequired,\r\n selectEntity: PropTypes.func.isRequired,\r\n activeEntity: PropTypes.oneOfType([\r\n PropTypes.shape(customerInterface),\r\n PropTypes.shape(employeeInterface)\r\n ]),\r\n title: PropTypes.string.isRequired,\r\n errorMessage: PropTypes.string,\r\n noEntitiesFound: PropTypes.string.isRequired,\r\n contentDimensions: PropTypes.shape({\r\n width: PropTypes.number,\r\n height: PropTypes.number,\r\n }),\r\n}\r\n\r\nexport default injectIntl(AssignQuoteVirtualizedList)\r\n","import React, {useEffect, useRef} from \"react\";\r\nimport {connect} from \"react-redux\";\r\nimport SqftFeaturesPopup from \"./sqftFeaturesPopup\";\r\nimport eventManager from \"../../sqft/components/canvas/store/sqftEventManager\";\r\nimport {changeSqftFeaturesPopup} from \"../../../actions/sqftFunctions\";\r\n\r\nconst SqftFeaturesPopupWrapper = (props) => {\r\n const { sqftFeaturesPopup, changeSqftFeaturesPopup } = props;\r\n const isOpened = sqftFeaturesPopup.opened;\r\n const wrapperRef = useRef(null);\r\n\r\n useEffect(() => {\r\n const closePopup = () => {\r\n changeSqftFeaturesPopup({ opened: false, sqftPassedData: null });\r\n };\r\n\r\n const handleClickOutside = (event) => {\r\n if (wrapperRef.current && !wrapperRef.current.contains(event.target)) {\r\n closePopup();\r\n }\r\n };\r\n\r\n if (isOpened) {\r\n document.addEventListener(\"mousedown\", handleClickOutside);\r\n eventManager.addEvent(\r\n eventManager.events.MOUSE_DOWN,\r\n closePopup,\r\n { name: \"popupWrapper\" },\r\n eventManager.priorities.OVERALL\r\n );\r\n }\r\n\r\n return () => {\r\n document.removeEventListener(\"mousedown\", handleClickOutside);\r\n };\r\n }, [wrapperRef, isOpened, changeSqftFeaturesPopup]);\r\n\r\n return (\r\n
    \r\n \r\n
    \r\n );\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const {sqftFeaturesPopup, sqftFromFeature} = store.sqftState;\r\n return {\r\n sqftFeaturesPopup,\r\n sqftFromFeature,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n changeSqftFeaturesPopup\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(SqftFeaturesPopupWrapper);\r\n","import React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport FilterListIcon from '@mui/icons-material/FilterList';\r\nimport InfoIcon from \"@mui/icons-material/Info\";\r\nimport IconButton from \"@mui/material/IconButton\";\r\n\r\nimport {getFilterValueThumbnailAndStyles} from \"../../look/lookNavigation/lookMain/lookWizard/lookWizardFunctions\";\r\nimport {getFeatureGroupIconStyles, getFeatureGroupIconURL} from \"../../bvComponent/core/assets\";\r\nimport {wizardGroupInterface, wizardSelectedValueInterface} from \"../../../interfaces/wizardItemInterface\";\r\nimport {featureGroupInterface} from \"../../../interfaces/featureInterface\";\r\n\r\n\r\nconst MaterialsWizardFooterStepThumbnail = (props) => {\r\n\r\n const {wizardGroup, wizardSelectedValue, allFilterGroups, isMobile, activeTheme, featureGroup} = props;\r\n\r\n let selectedFilter = wizardSelectedValue ? wizardSelectedValue.selectedFilter : null;\r\n\r\n // const notSelected = !wizardSelectedValue || !(Object.keys(wizardSelectedValue).length)\r\n // || (!selectedFeature && !selectedFilter);\r\n //\r\n // if (notSelected) {\r\n // const featureGroup = wizardGroup ? getFeatureGroupFromWizardGroup(wizardGroup) : null;\r\n // return
    \r\n //
    \r\n // }\r\n\r\n if (wizardGroup && selectedFilter && wizardGroup.nodeType === \"filter\") {\r\n if (isMobile) {\r\n return (\r\n
    \r\n \r\n \r\n \r\n
    \r\n )\r\n }\r\n const filterGroup = allFilterGroups.find(group => group.id === selectedFilter.filterGroup_id);\r\n const {styles} = getFilterValueThumbnailAndStyles(selectedFilter, filterGroup || {});\r\n return
    \r\n } else if (wizardGroup) {\r\n return (\r\n
    \r\n )\r\n }\r\n\r\n // just in case\r\n return (\r\n
    \r\n {isMobile\r\n ? \r\n :
    }\r\n
    \r\n )\r\n\r\n};\r\n\r\nMaterialsWizardFooterStepThumbnail.propTypes = {\r\n wizardGroup: PropTypes.shape(wizardGroupInterface),\r\n featureGroup: PropTypes.shape(featureGroupInterface),\r\n wizardSelectedValue: PropTypes.shape(wizardSelectedValueInterface),\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {filterGroups} = store.filterState;\r\n const {activeTheme} = store.serverState;\r\n\r\n return {\r\n allFilterGroups: filterGroups,\r\n activeTheme,\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps)(MaterialsWizardFooterStepThumbnail)\r\n","import React from 'react';\r\nimport {injectIntl} from \"react-intl\";\r\nimport {connect} from \"react-redux\";\r\n\r\nimport { polyfill } from 'es6-promise';\r\npolyfill();\r\nimport \"./polyfills/object.dataset\";\r\nimport \"./polyfills/string.includes\";\r\nimport \"./polyfills/string.startsWith\";\r\nimport \"./polyfills/jquery.preBind\";\r\nimport \"./polyfills/arrayMethods\";\r\nimport \"./polyfills/objectMethods\";\r\nimport \"./polyfills/numberMethods\";\r\nimport \"./lib/wrapText\";\r\nimport \"./lib/fraction\";\r\n//import {getNonce} from \"../../misc/utils\";\r\n\r\nimport SqftFooter from \"./components/sqftFooter\";\r\nimport SqftIcons from \"./components/SqftIcons\";\r\nimport ChangeLayoutPopup from \"../popups/changeLayoutPopup\";\r\nimport SqftManualCalculateWindow from \"./components/manualCalculate/SqftManualCalculateWindow\";\r\nimport SqftNavSettingsWindow from \"./components/popup/SqftNavSettingsWindow\";\r\nimport SqftTutorial from \"./components/popup/SqftTutorial\";\r\n// import SqftCabinetsTutorial from \"./components/popup/SqftCabinetsTutorial\";\r\nimport SqftSystemMessage from \"./components/popup/SqftSystemMessage\";\r\nimport AR3DPopup from \"./components/popup/AR3DPopup\";\r\nimport ValidationPopupWindow from \"./components/popup/ValidationPopupWindow\";\r\nimport SqftSystemDeleteMessage from \"./components/popup/SqftSystemDeleteMessage\";\r\nimport SqftLoadSlabWindow from \"./components/slab/SqftLoadSlabWindow\";\r\nimport SqftPopupWindow from \"./components/popup/SqftPopupWindow\";\r\nimport SqftLabelsContextMenuCategorySwitching\r\n from \"./components/canvas/core/controls/labels/sqftLabelsContextMenuCategorySwitching\";\r\nimport SqftLabelsContextMenu from \"./components/canvas/core/controls/labels/sqftLabelsContextMenu\";\r\nimport {\r\n setIsRoomSwitcherVisible,\r\n setSQFTActiveRoomId,\r\n setSQFTActiveRoomIndex,\r\n setSQFTActiveRoomType\r\n} from \"../../actions/sqftMenuFunctions\";\r\nimport SqftContextMenuV2 from \"./components/popup/SqftContextMenuV2\";\r\nimport ChangeValuePopupWindow from \"./components/popup/ChangeValuePopupWindow\";\r\nimport NavigationSidebar from \"./components/navigation/NavigationSidebar\";\r\nimport useUpdateSqftConfig from \"./hocs/onLoad/useUpdateSqftConfig\";\r\nimport useAddDeviceClass from \"./hocs/onLoad/useAddDeviceClass\";\r\n//import useImportSQFTData from \"./hocs/onLoad/useImportSQFTData\";\r\nimport useToggleRoomsSwitcher from \"./hocs/onLoad/useToggleRoomsSwitcher\";\r\nimport useOpenSQFTMenu from \"./hocs/onLoad/useOpenSQFTMenu\";\r\nimport useCheckWizardActiveItem from \"./hocs/onLoad/useCheckWizardActiveItem\";\r\nimport useResetState from \"./hocs/onLoad/useResetState\";\r\nimport SqftHeader from \"./components/header/SqftHeader\";\r\nimport useUpdateCabinetFeatures from \"./hocs/onLoad/useUpdateCabinetFeatures\";\r\nimport SquareFootageToolViewWorkspace from \"./squareFootageToolViewWorkspace\";\r\n//import NavigationSidebarRight from \"./components/navigation/NavigationSidebarRight\";\r\n//import useSetDefaultCabinetViewMode from \"./hocs/onLoad/useSetDefaultCabinetViewMode\";\r\n\r\nconst SquareFootageToolView = (props) => {\r\n const {visualizersLoaded} = props;\r\n const {cartItems, sqftPopup, fabricatorSettings,\r\n setSQFTActiveRoomIndex, setSQFTActiveRoomType, setSQFTActiveRoomId, activeQuoteIndex,\r\n setIsRoomSwitcherVisible, contextMenuV2, quotes, changeValuePopups, validationPopups, isSquareFootageEnabled} = props;\r\n\r\n useResetState();\r\n useUpdateSqftConfig();\r\n useAddDeviceClass();\r\n useToggleRoomsSwitcher( visualizersLoaded, fabricatorSettings, setIsRoomSwitcherVisible, quotes, setSQFTActiveRoomId,\r\n setSQFTActiveRoomIndex, setSQFTActiveRoomType, cartItems, activeQuoteIndex, isSquareFootageEnabled\r\n );\r\n //useSQFTRouting();\r\n //useSetDefaultCabinetViewMode(); //we assume is already in 2d\r\n useUpdateCabinetFeatures();\r\n\r\n useOpenSQFTMenu();\r\n useCheckWizardActiveItem();\r\n\r\n return (\r\n
    \r\n
    \r\n
    \r\n \r\n \r\n {/**/}\r\n \r\n
    \r\n
    \r\n \r\n
    \r\n {\r\n visualizersLoaded.length ? : null\r\n }\r\n {\r\n visualizersLoaded.length ? : null\r\n }\r\n {\r\n visualizersLoaded.length ? : null\r\n }\r\n \r\n \r\n \r\n \r\n \r\n \r\n {\r\n fabricatorSettings.useCategorySwitching ? : \r\n }\r\n {\r\n changeValuePopups.map((changeValuePopup, index) => {\r\n return (\r\n \r\n )\r\n })\r\n }\r\n {\r\n validationPopups.map((validationPopup, index) => {\r\n return (\r\n \r\n )\r\n })\r\n }\r\n \r\n {/**/}\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n )\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const {sqftFeaturesPopup} = store.sqftState;\r\n\r\n return {\r\n quotes: store.quotesState.quotes,\r\n fabricatorData: store.fabricatorState,\r\n sqftVisited: sqftFeaturesPopup.visited,\r\n sqftPopup: store.sqftMenuState.sqftPopup,\r\n activeButton: store.sqftMenuState.activeButton,\r\n contextMenuV2: store.sqftMenuState.contextMenuV2,\r\n isMobile: store.serverState.isMobile,\r\n cartItems: store.cartState.cartItems,\r\n windowWidth: store.serverState.windowWidth,\r\n visualizersLoaded: store.serverState.visualizersLoaded,\r\n isShowSlabTool: store.sqftSlabState.isShowSlabTool,\r\n fabricatorSettings: store.fabricatorState.settings,\r\n activeQuoteIndex: store.quotesState.activeQuoteIndex,\r\n changeValuePopups: store.sqftMenuState.changeValuePopups,\r\n validationPopups: store.sqftMenuState.validationPopups,\r\n isSquareFootageEnabled: store.sqftState.isSquareFootageEnabled,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setSQFTActiveRoomId,\r\n setSQFTActiveRoomIndex,\r\n setSQFTActiveRoomType,\r\n setIsRoomSwitcherVisible,\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(SquareFootageToolView)\r\n);\r\n","import React from 'react';\r\nimport {connect} from \"react-redux\";\r\nimport {FormattedMessage} from \"react-intl\";\r\nimport {setQuotes} from \"../../../actions/roomsFunctions\";\r\nimport {changeSqftFeaturesPopup, setSqftMeasureUnit, setSquareFeet} from \"../../../actions/sqftFunctions\";\r\nimport {setMaterialsPageSubSteps} from \"../../../actions/selectionFunctions\";\r\nimport {\r\n changeCartItemQuantity,\r\n changeSelectionInfoQuantity,\r\n setCameFromPage,\r\n toggleSelectionFeatureInfo\r\n} from \"../../../actions/actionFunctions\";\r\nimport WithAddToQuote from \"../hocs/withAddToQuote\";\r\n\r\nconst SqftFooterAddToQuoteButton = (props) => {\r\n\r\n return (\r\n \r\n {(handleAddToQuoteClick) => (\r\n \r\n )}\r\n \r\n )\r\n};\r\n\r\nconst mapStateToProps = (store) => ({\r\n measureUnit: store.sqftState.measureUnit,\r\n showManualCalculation: store.sqftManualCalculationState.showManualCalculation,\r\n quotes: store.quotesState.quotes,\r\n cartItems: store.cartState.cartItems,\r\n selectionFeatureInfo: store.selectionState.selectionFeatureInfo,\r\n activeQuoteIndex: store.quotesState.activeQuoteIndex,\r\n sqftVisited: store.sqftState.sqftFeaturesPopup.visited,\r\n isSlabToolVisited: store.sqftSlabState.isSlabToolVisited,\r\n useSqftCartPopup: store.sqftState.sqftFeaturesPopup.enabled,\r\n cameFromPage: store.cartState.cameFromPage\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n setQuotes,\r\n setSquareFeet,\r\n setMaterialsPageSubSteps,\r\n changeSqftFeaturesPopup,\r\n toggleSelectionFeatureInfo,\r\n setCameFromPage,\r\n changeCartItemQuantity,\r\n changeSelectionInfoQuantity,\r\n setSqftMeasureUnit,\r\n};\r\n\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(SqftFooterAddToQuoteButton);\r\n","import React from 'react';\r\nimport {connect} from \"react-redux\";\r\nimport {FormattedMessage} from \"react-intl\";\r\nimport {setCameFromPage, toggleConfirmPopup, toggleSelectionFeatureInfo} from \"../../../actions/actionFunctions\";\r\nimport WithSqftFooterCancel from \"../hocs/withSqftFooterCancel\";\r\n\r\nconst SqftFooterCancelButton = (props) => {\r\n\r\n return (\r\n \r\n {(handleCloseSQFtCalc) => (\r\n \r\n )}\r\n \r\n )\r\n};\r\n\r\nconst mapStateToProps = (store) => ({\r\n cameFromPage: store.cartState.cameFromPage,\r\n showManualCalculation: store.sqftManualCalculationState.showManualCalculation,\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n toggleConfirmPopup,\r\n toggleSelectionFeatureInfo,\r\n setCameFromPage\r\n};\r\n\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(SqftFooterCancelButton);\r\n","import {connect} from \"react-redux\";\r\nimport {manualCalculationsCheckForChangesApplied} from \"../helpers/sqftCalculations\";\r\nimport {ConfirmPopupTypes} from \"../../visComponents/constants\";\r\nimport {setCameFromPage, toggleConfirmPopup, toggleSelectionFeatureInfo} from \"../../../actions/actionFunctions\";\r\nimport {setSqftFromFeature} from \"../../../actions/sqftFunctions\";\r\nimport {withRouter} from \"react-router-dom\";\r\n\r\nimport workspaceHistory from \"../components/canvas/core/workspaceHistory\";\r\nimport {useCloseSQFTCalc} from \"./useCloseSQFTCalc\";\r\nimport {enableRegularMode} from \"../components/canvas/store/canvasHelper\";\r\nimport {clearAllMenusEvents} from \"../components/canvas/core/workspace/workspaceEvents\";\r\nimport {showSlabTool} from \"../../../actions/sqftSlabFunctions\";\r\n\r\nconst WithSqftFooterCancel = (props) => {\r\n const {showManualCalculation, toggleConfirmPopup, showSlabTool} = props;\r\n const {children} = props;\r\n const {closeSQFTCalc} = useCloseSQFTCalc();\r\n\r\n const handleCancelClick = () => {\r\n if (showManualCalculation) {\r\n manualCalculationsCheckForChangesApplied() ? callResetDataPopup() : closeSQFTCalc(false);\r\n } else {\r\n showSlabTool(false);\r\n enableRegularMode();\r\n clearAllMenusEvents();\r\n workspaceHistory.checkForChangesApplied() ? callResetDataPopup() : closeSQFTCalc(false);\r\n }\r\n };\r\n\r\n const callResetDataPopup = () => {\r\n toggleConfirmPopup(true, ConfirmPopupTypes.SqftResetChanges);\r\n };\r\n\r\n return children(handleCancelClick);\r\n};\r\n\r\nconst mapStateToProps = (store) => ({\r\n cameFromPage: store.cartState.cameFromPage,\r\n showManualCalculation: store.sqftManualCalculationState.showManualCalculation,\r\n activePreset: store.bathroomVisualizerState.activePreset,\r\n bvPresets: store.bathroomVisualizerState.bvPresets,\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n toggleConfirmPopup,\r\n toggleSelectionFeatureInfo,\r\n setCameFromPage,\r\n setSqftFromFeature,\r\n showSlabTool,\r\n};\r\n\r\nexport default withRouter(\r\n connect(mapStateToProps, mapDispatchToProps)(WithSqftFooterCancel)\r\n);\r\n","import React from 'react'\r\nimport {connect} from \"react-redux\";\r\nimport {setSQFTActiveButton} from \"../../../../actions/sqftMenuFunctions\";\r\nimport {setSqftMeasureUnit} from \"../../../../actions/sqftFunctions\";\r\nimport PropTypes from \"prop-types\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nconst SqftPopupWindow = (props) => {\r\n const {title, content, isOpened} = props;\r\n const {confirmCallback, confirmText, cancelCallback, cancelText} = props;\r\n\r\n return (\r\n
    \r\n
    \r\n
    \r\n
    \r\n {title}\r\n
    \r\n \r\n
    \r\n
    \r\n {content}\r\n
    \r\n
    \r\n {\r\n cancelText ?\r\n \r\n : null\r\n }\r\n {\r\n confirmText ?\r\n \r\n : null\r\n }\r\n
    \r\n
    \r\n
    \r\n )\r\n};\r\n\r\nSqftPopupWindow.propTypes = {\r\n title: PropTypes.oneOfType([\r\n PropTypes.string,\r\n PropTypes.object,\r\n PropTypes.instanceOf(FormattedMessage)\r\n ]),\r\n content: PropTypes.oneOfType([\r\n PropTypes.string,\r\n PropTypes.object,\r\n PropTypes.instanceOf(FormattedMessage)\r\n ]),\r\n isOpened: PropTypes.bool,\r\n confirmCallback: PropTypes.func,\r\n confirmText: PropTypes.oneOfType([\r\n PropTypes.string,\r\n PropTypes.object,\r\n PropTypes.instanceOf(FormattedMessage)\r\n ]),\r\n cancelCallback: PropTypes.func,\r\n cancelText: PropTypes.oneOfType([\r\n PropTypes.string,\r\n PropTypes.object,\r\n PropTypes.instanceOf(FormattedMessage)\r\n ]),\r\n};\r\n\r\nconst mapStateToProps = (store) => ({\r\n activeButton: store.sqftMenuState.activeButton,\r\n measureUnit: store.sqftState.measureUnit,\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n setSQFTActiveButton,\r\n setSqftMeasureUnit\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(SqftPopupWindow);\r\n","import point from \"../point\";\r\nimport line from \"../line\";\r\n\r\nconst Square = (size, isIsland = false) => {\r\n let points = isIsland ? [\r\n new point(0, 15, \"lefttop\"),\r\n new point(65, 15, \"righttop\"),\r\n new point(65, 80, \"rightbottom\"),\r\n new point(0, 80, \"leftbottom\")\r\n ] : [\r\n new point(0, 0, \"lefttop\"),\r\n new point(65, 0, \"righttop\"),\r\n new point(65, 65, \"rightbottom\"),\r\n new point(0, 65, \"leftbottom\")\r\n ];\r\n\r\n return [\r\n new line(points[0], points[1]),\r\n new line(points[1], points[2]),\r\n new line(points[2], points[3]),\r\n new line(points[3], points[0])\r\n ];\r\n};\r\n\r\nexport default Square\r\n","import point from \"../point\";\r\nimport line from \"../line\";\r\nimport config from \"../../../store/sqftConfig\";\r\n\r\nconst wideAngle = function() {\r\n let points;\r\n if(config.measureUnit === \"Metric\" ) {\r\n points = [\r\n new point(-13.62, -10, \"lefttop\"),\r\n new point(134, -10, \"righttop\"),\r\n new point(134, 13.62, \"rightbottom\"),\r\n new point(10, 13.62, \"rightbottom\", true),\r\n new point(10, 114, \"rightbottom\"),\r\n new point(-13.62, 114, \"leftbottom\")\r\n ];\r\n } else {\r\n points = [\r\n new point(-16, -10, \"lefttop\"),\r\n new point(134, -10, \"righttop\"),\r\n new point(134, 16, \"rightbottom\"),\r\n new point(10, 16, \"rightbottom\", true),\r\n new point(10, 114, \"rightbottom\"),\r\n new point(-16, 114, \"leftbottom\")\r\n ];\r\n }\r\n\r\n let lines = [\r\n new line(points[0], points[1]),\r\n new line(points[1], points[2]),\r\n new line(points[2], points[3]),\r\n new line(points[3], points[4]),\r\n new line(points[4], points[5]),\r\n new line(points[5], points[0])\r\n ];\r\n\r\n return lines;\r\n};\r\n\r\nexport default wideAngle\r\n","import point from \"../point\";\r\nimport line from \"../line\";\r\nimport config from \"../../../store/sqftConfig\";\r\n\r\nconst horseshoe = function() {\r\n let points;\r\n if(config.measureUnit === \"Metric\" ) {\r\n points = [\r\n new point(0, -20, \"lefttop\"),\r\n new point(181, -20, \"righttop\"),\r\n new point(181, 80, \"rightbottom\"),\r\n new point(157.38, 80, \"leftbottom\"),\r\n new point(157.38, 3.62, \"leftbottom\", true),\r\n new point(23.62, 3.62, \"rightbottom\", true),\r\n new point(23.62, 80, \"rightbottom\"),\r\n new point(0, 80, \"leftbottom\")\r\n ];\r\n } else {\r\n points = [\r\n new point(0, -20, \"lefttop\"),\r\n new point(181, -20, \"righttop\"),\r\n new point(181, 80, \"rightbottom\"),\r\n new point(155, 80, \"leftbottom\"),\r\n new point(155, 6, \"leftbottom\", true),\r\n new point(26, 6, \"rightbottom\", true),\r\n new point(26, 80, \"rightbottom\"),\r\n new point(0, 80, \"leftbottom\")\r\n ];\r\n }\r\n\r\n let lines = [\r\n new line(points[0], points[1]),\r\n new line(points[1], points[2]),\r\n new line(points[2], points[3]),\r\n new line(points[3], points[4]),\r\n new line(points[4], points[5]),\r\n new line(points[5], points[6]),\r\n new line(points[6], points[7]),\r\n new line(points[7], points[0])\r\n ];\r\n\r\n return lines;\r\n};\r\n\r\nexport default horseshoe\r\n","import React, {useEffect} from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport {FormattedMessage} from \"react-intl\";\r\nimport {setSwitcherPosition, toggleShowManualCalculation} from \"../../../../../actions/sqftManualCalculationFunctions\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nconst ManualCalculateSwitcher = (props) => {\r\n const {overlay, setSwitcherPosition, switcherPosition, showManualCalculation, toggleShowManualCalculation, isMobile,\r\n sideBarButtons} = props;\r\n\r\n const handleButtonClick = () => {\r\n // changeStateToQuote();\r\n toggleShowManualCalculation(!showManualCalculation);\r\n };\r\n\r\n useEffect(() => {\r\n if (!overlay) {\r\n const elem = document.getElementById(\"manual-switcher\");\r\n const rect = elem.getBoundingClientRect();\r\n setSwitcherPosition({rect})\r\n }\r\n }, [overlay, sideBarButtons, setSwitcherPosition]);\r\n\r\n const blockStyle = {\r\n left: overlay ? switcherPosition.rect.left : ''\r\n }\r\n isMobile\r\n ? blockStyle.bottom = overlay ? '13px' : ''\r\n : blockStyle.top = overlay ? switcherPosition.rect.top : ''\r\n\r\n return (\r\n
    \r\n \r\n \r\n \r\n \r\n
    \r\n )\r\n};\r\n\r\nManualCalculateSwitcher.propTypes = {\r\n overlay: PropTypes.bool,\r\n sideBarButtons: PropTypes.array,\r\n};\r\n\r\nconst mapStateToProps = (store) => ({\r\n showManualCalculation: store.sqftManualCalculationState.showManualCalculation,\r\n switcherPosition: store.sqftManualCalculationState.switcherPosition,\r\n isMobile: store.serverState.isMobile,\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n toggleShowManualCalculation,\r\n setSwitcherPosition,\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(ManualCalculateSwitcher);\r\n","// ExportButton.js\r\nimport React from 'react';\r\nimport {GLTFExporter} from \"three/examples/jsm/exporters/GLTFExporter\";\r\nimport SqftStore from \"../../../canvas/store/sqftStore\";\r\n\r\nconst ExportButton = () => {\r\n const exportScene = () => {\r\n const exporter = new GLTFExporter();\r\n const viewGL = SqftStore.viewGL;\r\n\r\n if (viewGL && viewGL.scene) {\r\n exporter.parse(viewGL.scene, (gltf) => {\r\n const blob = new Blob([JSON.stringify(gltf)], {type: 'text/plain'});\r\n const link = document.createElement('a');\r\n link.style.display = 'none';\r\n document.body.appendChild(link);\r\n link.href = URL.createObjectURL(blob);\r\n link.download = 'scene.gltf';\r\n link.click();\r\n });\r\n } else {\r\n console.error('GLBViewer instance or scene not found');\r\n }\r\n };\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default ExportButton;\r\n","import React, {Fragment, useEffect} from 'react';\r\nimport {connect} from \"react-redux\";\r\nimport {setAbortController, setSQFTAr3dPopup} from \"../../../../../actions/sqftMenuFunctions\";\r\nimport ShapesGoogleModelViewer from \"./ShapesGoogleModelViewer\";\r\nimport ShapesThreeJsViewer from \"./ShapesThreeJsViewer\";\r\nimport MultiLoader from \"../../../../ui/multiLoader\";\r\nimport store from \"../../../../../store\";\r\nimport {setMultiLoader} from \"../../../../../actions/actionFunctions\";\r\n//import GroheFeatures from \"../../../look/grohe/groheNavigation/groheFeatures/groheFeatures\";\r\nimport {setLookActiveCategory, setLookOpened} from \"../../../../../actions/lookFunctions\";\r\nimport {setAPIErrorMessage, setSqftCabinetsGlb} from \"../../../../../actions/sqftFunctions\";\r\n//import {setCabinetGLBFromCabinetsSet} from \"../../../helpers/sqft3dArHelper\";\r\n//import sqftShapeManager from \"../canvas/store/sqftShapeManager\";\r\n//import {SHAPE_PART_ID} from \"../../../constants\";\r\n//import {isProd} from \"../../../../misc/fabricatorHardcode\";\r\nimport {IS_QKB_UI} from \"../../../../../config\";\r\nimport PropTypes from \"prop-types\";\r\nimport sqftConfig from \"../../canvas/store/sqftConfig\";\r\n\r\nconst ThreeDWorkspace = (props) => {\r\n const {apiErrorMessage, cabinetsGlb, setLookOpened,\r\n abortRequestController} = props;\r\n //const {lookActiveFeature, setLookActiveCategory, displayDoorsOnly} = props;\r\n\r\n useEffect(()=> {\r\n if (!IS_QKB_UI) {\r\n setLookOpened(false);\r\n }\r\n }, [setLookOpened])\r\n\r\n useEffect(()=> {\r\n return () => {\r\n if (abortRequestController) {\r\n abortRequestController.abort();\r\n }\r\n store.dispatch(setMultiLoader({activeStep: 8, visible: false, finished: true}));\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [])\r\n\r\n // //todo lookActiveFeature is always triggered\r\n // //todo CHANGE FEATURES FROM THREE D\r\n // useEffect(()=> {\r\n // // wi will display door styles for this category\r\n // //todo\r\n // setLookActiveCategory(SHAPE_PART_ID.top_cabinet);\r\n //\r\n // store.dispatch(setMultiLoader({activeStep: 0, visible: false, finished: false}));\r\n // store.dispatch(setMultiLoader({activeStep: 0, visible: true, finished: false}));\r\n //\r\n // //todo update lower and bottom separately\r\n // //sqftShapeManager.changeShapesFeatureIDIfColorWasChanged(lookActiveFeature);\r\n //\r\n // setCabinetGLBFromCabinetsSet(displayDoorsOnly).then(r => void r);\r\n //\r\n // // eslint-disable-next-line react-hooks/exhaustive-deps\r\n // }, [lookActiveFeature])\r\n\r\n return (\r\n
    \r\n {sqftConfig.threeD.useGoogleModelViewer\r\n ? \r\n : (\r\n \r\n {cabinetsGlb && !apiErrorMessage ? : null}\r\n {apiErrorMessage || }\r\n \r\n )}\r\n {/* TODO CHANGE FEATURES FROM THREE D */}\r\n {/*{ !isProd() ? : null}*/}\r\n
    \r\n )\r\n};\r\n\r\nThreeDWorkspace.propTypes = {\r\n displayDoorsOnly: PropTypes.bool\r\n}\r\n\r\nconst mapStateToProps = (store) => ({\r\n cabinetsGlb: store.sqftState.cabinetsGlb,\r\n apiErrorMessage: store.sqftState.apiErrorMessage,\r\n abortRequestController: store.sqftState.abortRequestController,\r\n lookActiveFeature: store.lookState.lookActiveFeature,\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n setSQFTAr3dPopup,\r\n setLookActiveCategory,\r\n setSqftCabinetsGlb,\r\n setAPIErrorMessage,\r\n setAbortController,\r\n setLookOpened,\r\n};\r\n\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(ThreeDWorkspace);\r\n","import React, {useEffect} from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport {setMultiLoader} from \"../../actions/actionFunctions\";\r\nimport MultiLoaderSteps from \"./multiLoaderSteps\";\r\nimport MaterialSpinner from \"./materialSpinner\";\r\n\r\nconst MultiLoader = (props) => {\r\n\r\n const {multiLoader, setMultiLoader, useCabinetLoader} = props;\r\n\r\n useEffect(() => {\r\n setMultiLoader({finished: false, activeStep: 0, visible: true});\r\n return () => {\r\n setMultiLoader({finished: true, activeStep: 0});\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n // useEffect(() => {\r\n // if (multiLoader.activeStep > multiLoader.renderSteps.length) {\r\n // setTimeout(() => {\r\n // setMultiLoader({visible: false});\r\n // }, 500)\r\n // }\r\n // // eslint-disable-next-line react-hooks/exhaustive-deps\r\n // }, [multiLoader.activeStep]);\r\n\r\n if (!multiLoader.visible) {\r\n return null\r\n }\r\n\r\n if (multiLoader.finished) {\r\n return \r\n }\r\n\r\n return (\r\n
    \r\n \r\n
    \r\n )\r\n};\r\n\r\nMultiLoader.propTypes = {\r\n useCabinetLoader: PropTypes.bool,\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {multiLoader} = store.loaderState;\r\n return {\r\n multiLoader,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setMultiLoader,\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(MultiLoader)\r\n","import React, {useEffect, useState} from 'react';\r\nimport {connect} from \"react-redux\";\r\nimport {setSQFTAr3dPopup} from \"../../../../../actions/sqftMenuFunctions\";\r\nimport {generateQRCode} from \"../../../helpers/sqft3dArHelper\";\r\n//import GLBLoader from \"../ar3d/GLBLoader\";\r\n//import ARButton from \"../ar3d/ARButton\";\r\nimport MultiLoader from \"../../../../ui/multiLoader\";\r\nimport store from \"../../../../../store\";\r\nimport {setMultiLoader} from \"../../../../../actions/actionFunctions\";\r\nimport ARButton from \"./ARButton\";\r\nimport {DEVICE_TYPE, getDeviceType} from \"../../../helpers/sqftMobileHelper\";\r\nimport ARButtonGoogleWebXR from \"./ARButtonGoogleWebXR\";\r\n\r\nconst ARWorkspace = (props) => {\r\n const {cabinetsGlb, apiErrorMessage, abortRequestController} = props;\r\n const {isMobile} = props;\r\n const [qrImage, setQrImage] = useState(null)\r\n\r\n // useEffect(()=> {\r\n // if (isMobile && cabinetsGlb) {\r\n // new GLBLoader(cabinetsGlb);\r\n // }\r\n // }, [isMobile, cabinetsGlb])\r\n\r\n useEffect(()=> {\r\n return () => {\r\n if (abortRequestController) {\r\n abortRequestController.abort();\r\n }\r\n store.dispatch(setMultiLoader({activeStep: 8, visible: false, finished: true}));\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [])\r\n\r\n if (!isMobile && cabinetsGlb) {\r\n const getARUrlForGlbFile = () => {\r\n const regex = /composed\\/(.*?)\\.glb/;\r\n const match = cabinetsGlb.match(regex);\r\n\r\n if (match && match.length > 1) {\r\n const extractedString = match[1];\r\n return window.location.origin + '/kitchen/#' + '/sqft-cabinets-ar/' + extractedString;\r\n }\r\n return ''\r\n }\r\n const arUrlForGlbFIle = getARUrlForGlbFile();\r\n generateQRCode(arUrlForGlbFIle).then((imageDataUrl) => {\r\n setQrImage(imageDataUrl);\r\n });\r\n }\r\n\r\n const getArButton = () => {\r\n switch (getDeviceType()) {\r\n case DEVICE_TYPE.Android:\r\n return \r\n case DEVICE_TYPE.iOS:\r\n case DEVICE_TYPE.unknown:\r\n return \r\n }\r\n }\r\n\r\n return (\r\n
    \r\n
    \r\n {cabinetsGlb ? (\r\n isMobile ? (\r\n getArButton()\r\n ) : (\r\n
    \r\n \"QR\r\n
    \r\n )\r\n ) : apiErrorMessage ? (\r\n apiErrorMessage\r\n ) : (\r\n \r\n )}\r\n
    \r\n
    \r\n )\r\n};\r\n\r\n// ARWorkspace.propTypes = {\r\n// displayDoorsOnly: PropTypes.bool\r\n// }\r\n\r\nconst mapStateToProps = (store) => ({\r\n ar3dPopup: store.sqftMenuState.ar3dPopup,\r\n cabinetsGlb: store.sqftState.cabinetsGlb,\r\n apiErrorMessage: store.sqftState.apiErrorMessage,\r\n isMobile: store.serverState.isMobile,\r\n abortRequestController: store.sqftState.abortRequestController,\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n setSQFTAr3dPopup\r\n};\r\n\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(ARWorkspace);\r\n","import React, {useEffect} from 'react';\r\nimport {injectIntl} from \"react-intl\";\r\nimport {connect} from \"react-redux\";\r\nimport {withRouter} from \"react-router-dom\";\r\nimport {LookAugmentRealityIcon} from \"../../../../common/icons\";\r\nimport GLBLoader from \"./GLBLoader\";\r\nimport PropTypes from \"prop-types\";\r\nimport SvgIcon from \"@mui/material/SvgIcon\";\r\nimport Button from \"@mui/material/Button\";\r\n\r\nconst ARButton = (props) => {\r\n const {url, cabinetsARBlobUrl} = props;\r\n\r\n useEffect(() => {\r\n //let url = 'https://s3.amazonaws.com/qc-3dfiles/composed/' + file + '.glb'\r\n //url = 'https://discoverthreejs.com/examples/assets/models/Parrot.glb';\r\n //url = 'https://threejs.org/examples/models/gltf/AnisotropyBarnLamp.glb';\r\n //url = '/images/sqft-icons/3d/Chair.glb';\r\n //url = 'https://qc-3dfiles.s3.amazonaws.com/ar-composer/WBC3630_Brown.glb';\r\n new GLBLoader(url);\r\n\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n const makeImage = () => {\r\n const c = document.createElement('canvas');\r\n const i = new Image();\r\n i.src = c.toDataURL();\r\n\r\n return i;\r\n }\r\n\r\n const makeLink = (blobUrl) => {\r\n console.log(\"blobUrl\", blobUrl);\r\n return Object.assign(document.createElement('a'), {\r\n download: 'asset.usdz',\r\n rel: \"ar\",\r\n href: blobUrl //URL.createObjectURL(blob)\r\n });\r\n }\r\n\r\n const arClick = () => {\r\n const i = makeImage();\r\n const a = makeLink(cabinetsARBlobUrl)\r\n a.appendChild(i);\r\n\r\n a.click();\r\n }\r\n\r\n return (\r\n \r\n )\r\n};\r\n\r\nARButton.propTypes = {\r\n url: PropTypes.string,\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n visualizersLoaded: store.serverState.visualizersLoaded,\r\n cabinetsARBlobUrl: store.sqftState.cabinetsARBlobUrl,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n};\r\n\r\nexport default withRouter(\r\n injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(ARButton)\r\n )\r\n);\r\n","export const getDeviceType = () => {\r\n const userAgent = navigator.userAgent || navigator.vendor || window.opera;\r\n\r\n // Проверка на iOS\r\n if (/iPad|iPhone|iPod/.test(userAgent) && !window.MSStream) {\r\n return DEVICE_TYPE.iOS;\r\n }\r\n\r\n // Проверка на Android\r\n if (/android/i.test(userAgent)) {\r\n return DEVICE_TYPE.Android;\r\n }\r\n\r\n return DEVICE_TYPE.unknown;\r\n};\r\n\r\nexport const DEVICE_TYPE = {\r\n iOS: 'iOS',\r\n Android: 'Android',\r\n unknown: 'unknown'\r\n}\r\n","import React from 'react';\r\n//import * as ReactDOM from 'react-dom';\r\nimport { injectIntl } from \"react-intl\";\r\nimport { connect } from \"react-redux\";\r\nimport { withRouter } from \"react-router-dom\";\r\nimport { LookAugmentRealityIcon } from \"../../../../common/icons\";\r\nimport PropTypes from \"prop-types\";\r\nimport SvgIcon from \"@mui/material/SvgIcon\";\r\nimport Button from \"@mui/material/Button\";\r\nimport WebXRGoogleModelViewer from \"./WebXRGoogleModelViewer\";\r\n\r\nconst ARButtonGoogleWebXR = (props) => {\r\n const { url } = props;\r\n\r\n const activateAR = () => {\r\n const modelViewer = document.querySelector('#arViewer');\r\n if (modelViewer) {\r\n modelViewer.activateAR();\r\n }\r\n };\r\n\r\n return (\r\n
    \r\n \r\n \r\n
    \r\n );\r\n};\r\n\r\nARButtonGoogleWebXR.propTypes = {\r\n url: PropTypes.string,\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n visualizersLoaded: store.serverState.visualizersLoaded,\r\n cabinetsARBlobUrl: store.sqftState.cabinetsARBlobUrl,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {};\r\n\r\nexport default withRouter(\r\n injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(ARButtonGoogleWebXR)\r\n )\r\n);\r\n","import React from 'react';\r\nimport {connect} from \"react-redux\";\r\nimport {setSQFTSystemMessage} from \"../../../../actions/sqftMenuFunctions\";\r\n\r\nconst ValidationPopupWindow = (props) => {\r\n const {id, text, position, isHidden} = props;\r\n\r\n return (\r\n
    \r\n
    \r\n
    \r\n {text}\r\n
    \r\n
    \r\n )\r\n};\r\n\r\nconst mapStateToProps = (store) => ({\r\n validationMessage: store.sqftMenuState.validationMessage\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n setSQFTSystemMessage\r\n};\r\n\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(ValidationPopupWindow);\r\n","import React from \"react\";\r\nimport {connect} from \"react-redux\";\r\nimport {CONTEXT_MENU_TYPE} from \"../../../../../constants\";\r\nimport ContextmenuList from \"./contextmenu/contextmenuList\";\r\nimport ContextmenuButtons from \"./contextmenu/contextmenuButtons\";\r\n\r\nconst SqftContextMenu = (props) => {\r\n const {contextMenuType} = props;\r\n\r\n switch (contextMenuType) {\r\n case CONTEXT_MENU_TYPE.list:\r\n return \r\n case CONTEXT_MENU_TYPE.buttons:\r\n return \r\n }\r\n};\r\n\r\nconst mapStateToProps = () => ({\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(SqftContextMenu);\r\n\r\n","import React from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport {setSqftSlabToolVisited, addRoomWithVisitedSlabTool, showSlabTool} from \"../../../../../actions/sqftSlabFunctions\";\r\nimport {\r\n setSQFTActiveButton,\r\n setSQFTMenuOpened\r\n} from \"../../../../../actions/sqftMenuFunctions\";\r\nimport {enableRegularMode, enableSlabMode} from \"../../canvas/store/canvasHelper\";\r\nimport {clearAllMenusEvents} from \"../../canvas/core/workspace/workspaceEvents\";\r\nimport {getQtCatName} from \"../../../helpers/sqftQuotesHelper\";\r\n\r\nconst SlabToolSwitcher = (props) => {\r\n const {isShowSlabTool, isSlabToolVisited, showSlabTool, setSQFTActiveButton, setSQFTMenuOpened,\r\n setSqftSlabToolVisited, addRoomWithVisitedSlabTool} = props;\r\n\r\n const handleButtonClick = () => {\r\n clearAllMenusEvents();\r\n !isShowSlabTool ? enableSlabMode(true) : enableRegularMode(); // before change isShowSlabTool we need to disable and restore shapes\r\n !isSlabToolVisited && setSqftSlabToolVisited(true);\r\n addRoomWithVisitedSlabTool(getQtCatName());\r\n showSlabTool(!isShowSlabTool);\r\n setSQFTActiveButton(\"\");\r\n setSQFTMenuOpened(\"\");\r\n };\r\n\r\n return (\r\n
    \r\n \r\n \r\n \r\n \r\n
    \r\n )\r\n};\r\n\r\nconst mapStateToProps = (store) => ({\r\n isShowSlabTool: store.sqftSlabState.isShowSlabTool,\r\n isSlabToolVisited: store.sqftSlabState.isSlabToolVisited,\r\n showManualCalculation: store.sqftManualCalculationState.showManualCalculation,\r\n switcherPosition: store.sqftManualCalculationState.switcherPosition,\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n showSlabTool,\r\n setSQFTActiveButton,\r\n setSQFTMenuOpened,\r\n setSqftSlabToolVisited,\r\n addRoomWithVisitedSlabTool,\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(SlabToolSwitcher);\r\n","import eventManager from \"../../store/sqftEventManager\";\r\nimport config from \"../../store/sqftConfig\";\r\nimport workspace from \"../workspace\";\r\nimport store from \"../../../../../../store\";\r\nimport $ from \"jquery\";\r\nimport {iconPlusBlack, iconPlusBlue} from \"../../../../assetsSQFT\";\r\nimport {setSQFTMenuOpened} from \"../../../../../../actions/sqftMenuFunctions\";\r\nimport {updateSQFTCalculations} from \"../../../../../../actions/sqftFunctions\";\r\nimport {attachResource} from \"./resourseCanas\";\r\nimport {SIDEBAR_NAVIGATION_BUTTONS} from \"../../../../constants\";\r\n\r\nconst backsplashCanvas = function() {\r\n let self = this;\r\n this.backSplashFeature = {\r\n size: 0,\r\n name: \"\"\r\n };\r\n this.cursorImage = null;\r\n this.addedImages = null; //like in edges\r\n this.img = null;\r\n this.isWaitingToRestoreCursor = false;\r\n\r\n this.setBackSplashFeature = function (backSplashFeature) {\r\n this.backSplashFeature = backSplashFeature;\r\n };\r\n this.setHighlighting = function (disallowDemo) {\r\n eventManager.stealCursor(true); // remove all other cursors\r\n workspace.setAllowEdges(false); // removing sizing lines\r\n workspace.setAllowBumpoutEdges(false); // removing bumpout lines\r\n config.highlight.points = false;\t// remove radiuses\r\n config.highlight.lines = true; // enable lines highlighting\r\n\r\n if (!disallowDemo) {\r\n config.highlight.demoShow = true;\r\n }\r\n setTimeout(function () {\r\n config.highlight.demoShow = false;\r\n }, 1000);\r\n };\r\n\r\n this.setCursorImage = function () {\r\n let bounds = 18,\r\n imgWidth = bounds,\r\n imgHeight = bounds;\r\n\r\n let domImg = document.createElement('img');\r\n domImg.crossOrigin = \"Anonymous\";\r\n\r\n let $img = $(domImg);\r\n $img.css({\r\n position: 'absolute',\r\n width: '1px',\r\n height: '1px'\r\n });\r\n\r\n $img.attr({\r\n 'data-id': self.backSplashFeature.size,\r\n 'data-name': self.backSplashFeature.name,\r\n });\r\n\r\n function imgOnLoad() {\r\n var bounds = 18;\r\n let ratio;\r\n if(imgWidth > imgHeight) {\r\n ratio = imgHeight / imgWidth;\r\n imgWidth = bounds;\r\n imgHeight = bounds * ratio;\r\n } else {\r\n ratio = imgWidth / imgHeight;\r\n imgHeight = bounds;\r\n imgWidth = bounds * ratio;\r\n }\r\n eventManager.setCursor('edge-select', self, true);\r\n self.cursorImage = { image: domImg, width: imgWidth, height: imgHeight };\r\n self.registerEvents(); // only after image is load!\r\n }\r\n $img.on('load', imgOnLoad);\r\n $img.appendTo($('body'));\r\n\r\n if (self.backSplashFeature.size === \"wall\") {\r\n config.highlight.type = 'wall';\r\n $img.attr('src', iconPlusBlack);\r\n } else {\r\n config.highlight.type = 'backsplash';\r\n $img.attr('src', iconPlusBlue);\r\n }\r\n\r\n this.img = $img;\r\n config.highlight.id = self.backSplashFeature.size;\r\n };\r\n\r\n this.registerEvents = () => {\r\n eventManager.setCursor('radius-select', self, true);\r\n eventManager.addEvent(\r\n eventManager.events.RENDER,\r\n this.renderCursor,\r\n this,\r\n eventManager.priorities.OVERALL\r\n );\r\n eventManager.addEvent(\r\n eventManager.events.MOUSE_UP,\r\n this.onMouseUp,\r\n this,\r\n eventManager.priorities.OVERALL\r\n );\r\n };\r\n this.deregisterEvents = () => {\r\n eventManager.resetCursor(this);\r\n eventManager.removeEvent(this);\r\n config.highlight.lines = false;\r\n //todo sqft-react\r\n //elements.navbacksplash.removeClass('steps-scope-config-button-selected');\r\n }\r\n this.destroy = function(protect, revertBackAfterMouseUp) {\r\n if (revertBackAfterMouseUp) {\r\n eventManager.removeEvent(self, eventManager.events.RENDER); //remove render only, but wait for mouse up to set cursor again\r\n this.isWaitingToRestoreCursor = true;\r\n } else {\r\n this.deregisterEvents();\r\n //$('img[data-id=\"' + this.img.data('id') +'\"]').remove();\r\n //this.addedImages = this.addedImages.filter(image => image.dataset.id === this.img.data('id'));\r\n }\r\n };\r\n this.onMouseUp = function(mousePos) {\r\n void mousePos;\r\n let hoverShape = workspace.getHoverShape();\r\n if (hoverShape && hoverShape.getHoverSegment) {\r\n const reduxState = store.getState();\r\n const activeButton = reduxState.sqftMenuState.activeButton;\r\n if (activeButton !== SIDEBAR_NAVIGATION_BUTTONS.backsplash) {\r\n return\r\n }\r\n\r\n const segCorner = hoverShape.getHoverSegmentOutlineCorner();\r\n const seg = hoverShape.getHoverSegment();\r\n if (seg || segCorner) {\r\n let resourceType = (self.backSplashFeature.size === \"wall\") ? \"wall\" : \"backsplash\";\r\n\r\n //remove incompatible resources\r\n if (seg && seg.isWithMitered()) {\r\n seg.deleteMitered();\r\n } else if (seg && (seg.isWithWaterfallToolEdge() || seg.isWithPeninsulaUnderwrapEdge())) {\r\n seg.deleteAttachedItem();\r\n }\r\n\r\n //add new resource\r\n attachResource(seg, segCorner, resourceType, null, null, this.backSplashFeature.name, this.backSplashFeature.size);\r\n\r\n // let attachedTo = workspace.getImagesAttachedTo(seg);\r\n // if (attachedTo) {\r\n // workspace.removeShape(attachedTo);\r\n // }\r\n //\r\n //\r\n // let historyCallBack;\r\n //\r\n // //add image to line or cornerLine\r\n // if (seg) {\r\n // historyCallBack = seg.addBacksplashToLine.bind(self, this.backSplashFeature.name, type, self.cursorImage.image.dataset.id);\r\n // } else if (segCorner) {\r\n // historyCallBack = segCorner.addBacksplashToCornerLine.bind(self, this.backSplashFeature.name, type, self.cursorImage.image.dataset.id);\r\n // }\r\n //\r\n // workspace.addImage(\r\n // self.cursorImage.image,\r\n // self.cursorImage.width / scale,\r\n // self.cursorImage.height / scale,\r\n // seg || segCorner,\r\n // hoverShape,\r\n // type,\r\n // historyCallBack\r\n // );\r\n //\r\n // historyCallBack();\r\n // config.highlight.lines = true;\r\n } else {\r\n store.dispatch(setSQFTMenuOpened('backsplash'));\r\n // \tderegisterEvents();\r\n // \telements.designDefault.click();\r\n }\r\n\r\n const updateCalculations = reduxState.sqftState.updateCalculations;\r\n store.dispatch(updateSQFTCalculations(updateCalculations + 1));\r\n }\r\n this.checkForRestoreCursor();\r\n };\r\n this.checkForRestoreCursor = function() {\r\n if (self.isWaitingToRestoreCursor) {\r\n self.isWaitingToRestoreCursor = false;\r\n eventManager.removeEvent(self, eventManager.events.MOUSE_UP); //remove mouse up, it will be added in setCursorImage\r\n self.setHighlighting(true);\r\n self.setCursorImage();\r\n }\r\n };\r\n this.renderCursor = function(ctx) {\r\n // if((this.backsplashSize > 0) && ($(window).width() > 768)) {\r\n // var mPos = eventManager.LastKnownMousePos;\r\n // if(mPos) {\r\n // ctx.save();\r\n // ctx.font = \"18px Arial\";\r\n // ctx.fillStyle = \"#000000\";\r\n // ctx.fillText(this.backsplashSize + \"\\\" Backsplash\", mPos.x + (12 * config.scale), mPos.y + 9);\r\n // ctx.restore();\r\n // }\r\n // }\r\n if(self.cursorImage.image && ($(window).width() > 768)) {\r\n var mPos = eventManager.LastKnownMousePos;\r\n if(mPos) {\r\n ctx.drawImage(self.cursorImage.image, mPos.x + 10, mPos.y + 10, self.cursorImage.width, self.cursorImage.height);\r\n }\r\n }\r\n };\r\n};\r\n\r\nexport default new backsplashCanvas();\r\n","import LookVirtualizedListLoadingItem\r\n from \"../../../../../../../look/lookNavigation/lookMain/lookCategory/lookVirtualizedListLoadingItem\";\r\nimport {Grid} from \"react-virtualized\";\r\nimport React from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport {connect} from \"react-redux\";\r\n\r\nexport const SqftOptionsLoading = (props) => {\r\n const {isMobile, windowHeight} = props;\r\n\r\n const rowHeight = 135;\r\n const width = isMobile ? 221 : 280;\r\n const columnWidth = width;\r\n const columnCount = 1;\r\n const height = isMobile ? windowHeight - 25 : windowHeight - 60;\r\n const rowCount = Math.floor(height / rowHeight);\r\n\r\n const listSettings = {\r\n width,\r\n columnCount,\r\n columnWidth,\r\n rowCount,\r\n height,\r\n rowHeight: rowHeight,\r\n overscanRowCount: 3,\r\n showScrollingPlaceholder: false,\r\n useDynamicRowHeight: false,\r\n }\r\n\r\n const cellRenderer = ({columnIndex, key, rowIndex, style}) => {\r\n void columnIndex;\r\n void rowIndex;\r\n\r\n return \r\n }\r\n\r\n const noRowsRenderer = () =>
    No Features found
    ;\r\n\r\n return (\r\n \r\n )\r\n}\r\n\r\nSqftOptionsLoading.propTypes = {\r\n // maxClickCountReached: PropTypes.func,\r\n // renderList: PropTypes.array,\r\n // contentHeight: PropTypes.number,\r\n isMobile: PropTypes.bool,\r\n // onScrollHandler: PropTypes.func,\r\n // loadingCount: PropTypes.number,\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {windowHeight, isMobile} = store.serverState;\r\n return {\r\n windowHeight,\r\n isMobile,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n};\r\n\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(SqftOptionsLoading);\r\n","import React, {useState} from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport {connect} from \"react-redux\";\r\nimport {injectIntl} from \"react-intl\";\r\n\r\nimport TextInput from \"../../ui/textInput\";\r\nimport {updateFeatureInfoCount} from \"../../../actions/actionFunctions\";\r\nimport {EditIcon, GroheInkPenIcon} from \"../../common/icons\";\r\nimport COLOR_THEMES from \"../../../colorThemes\";\r\nimport {IS_QKB_UI} from \"../../../config\";\r\n\r\nconst FeaturePriceInput = (props) => {\r\n\r\n const {feature, updateFeatureInfoCount, fabricatorData, unit, activeTheme, price, className, showPrice} = props;\r\n const fabricatorSettings = fabricatorData.settings;\r\n\r\n const [priceEditing, setPriceEditing] = useState(false);\r\n\r\n const hidePrice = (typeof showPrice !== 'undefined') && !showPrice;\r\n\r\n const togglePriceEditing = () => setPriceEditing(!priceEditing);\r\n\r\n // if (selectionFeatureInfo && selectionFeatureInfo.dbFeature.id && document.kvConfig.isBackend) {\r\n // return \r\n // }\r\n\r\n const handlePriceOnChange = (newAmount) => {\r\n if (fabricatorSettings.useFabricatorCostPrices) {\r\n feature.dbFeature.price = newAmount;\r\n } else {\r\n feature.dbFeature.cost = newAmount;\r\n feature.dbFeature.fabricatorCost = newAmount;\r\n }\r\n feature.dbFeature.priceWasChanged = true;\r\n updateFeatureInfoCount();\r\n }\r\n\r\n return (\r\n
    \r\n {hidePrice ? null :\r\n {fabricatorSettings.currencySign}}\r\n \r\n {priceEditing || hidePrice\r\n ? null\r\n : IS_QKB_UI ? {price} : price}\r\n {unit && !hidePrice ? ({unit}) : null}\r\n \r\n
    \r\n )\r\n};\r\n\r\nFeaturePriceInput.propTypes = {\r\n feature: PropTypes.object,\r\n onBlur: PropTypes.func,\r\n unit: PropTypes.string,\r\n price: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\r\n className: PropTypes.string,\r\n showPrice: PropTypes.bool,\r\n};\r\n\r\nconst mapStateToProps = (store, ownProps) => {\r\n const {activeTheme} = store.serverState;\r\n return {\r\n feature: ownProps.feature || store.selectionState.selectionFeatureInfo,\r\n fabricatorData: store.fabricatorState,\r\n featureInfoCount: store.selectionState.featureInfoCount,\r\n activeTheme,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n updateFeatureInfoCount\r\n}\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(FeaturePriceInput)\r\n);\r\n","import React, {} from 'react';\r\nimport {connect} from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\nimport {miteredSectionInterface} from \"../../../../../../interfaces/sqftInterfaces\";\r\nimport NavMiteredSegment from \"./navMiteredSegment\";\r\n\r\nconst NavMiteredSection = (props) => {\r\n const {sectionName, miteredSection, index} = props;\r\n\r\n let SEGMENTS = miteredSection.getSegments();\r\n\r\n return (\r\n
    \r\n

    \r\n {/*${TranslatesProvider.translate(\"sqft.navigation.mitered.title\")}*/}\r\n {sectionName}\r\n \r\n {('0' + (index + 1)).slice(-2)}\r\n \r\n

    \r\n
    \r\n {\r\n SEGMENTS.map((miteredSegment, index) => {\r\n return \r\n })\r\n }\r\n
    \r\n
    \r\n )\r\n};\r\n\r\nNavMiteredSection.propTypes = {\r\n sectionName: PropTypes.string,\r\n miteredSection: PropTypes.shape(miteredSectionInterface)\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n menuOpened: store.sqftMenuState.menuOpened,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n};\r\n\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(NavMiteredSection);\r\n","import React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\nimport debounce from \"lodash/debounce\";\r\n\r\nimport InputLabel from '@mui/material/InputLabel';\r\nimport TextField from '@mui/material/TextField';\r\n\r\nimport COLOR_THEMES from \"../../../../../colorThemes\";\r\n\r\nimport {setGroheFiltersSearchText} from \"../../../../../actions/groheFunctions\";\r\nimport {searchProductRequest} from \"../../../../../api/search-api\";\r\nimport {getCurrentLayout} from \"../../../../appLayout\";\r\nimport {updateNavigationCount} from \"../../../../../actions/lookFunctions\";\r\nimport {setNavigationLoading} from \"../../../../../actions/navigationFunctions\";\r\n\r\nconst GroheFiltersSearchInput = (props) => {\r\n const {activeTheme, groheFiltersSearchText, setGroheFiltersSearchText, lookActiveCategory, updateNavigationCount,\r\n setNavigationLoading} = props;\r\n\r\n const layout = getCurrentLayout();\r\n const featureGroup = layout.getFeatureGroupByPartId(lookActiveCategory);\r\n\r\n const debounceRequest = async (searchText) => {\r\n if (featureGroup && !featureGroup.getRealFeaturesReceivedProperty()) {\r\n return await searchProductRequest(featureGroup, searchText, (ended) => {\r\n setNavigationLoading(ended);\r\n if (!ended) {\r\n updateNavigationCount();\r\n }\r\n })\r\n }\r\n }\r\n\r\n const debounceFn = debounce(debounceRequest, 800);\r\n\r\n const handleSearchInputChange = async (event) => {\r\n setGroheFiltersSearchText(event.currentTarget.value);\r\n await debounceFn(event.target.value)\r\n }\r\n\r\n return (\r\n
    \r\n \r\n \r\n \r\n \r\n
    \r\n )\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const {groheFiltersSearchText} = store.groheState;\r\n const {activeTheme} = store.serverState;\r\n const {lookActiveCategory} = store.lookState;\r\n\r\n return {\r\n groheFiltersSearchText,\r\n activeTheme,\r\n lookActiveCategory,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setGroheFiltersSearchText,\r\n updateNavigationCount,\r\n setNavigationLoading,\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(GroheFiltersSearchInput)\r\n);\r\n","import React, {useState, useEffect} from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport {injectIntl} from \"react-intl\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport Accordion from '@mui/material/Accordion';\r\nimport AccordionDetails from '@mui/material/AccordionDetails';\r\nimport AccordionSummary from '@mui/material/AccordionSummary';\r\nimport ExpandMoreIcon from \"@mui/icons-material/ExpandMore\";\r\n\r\nimport {setGroheFiltersOpened, setGroheFiltersSearchText} from \"../../../../actions/groheFunctions\";\r\nimport {setSelectedFilters} from \"../../../../actions/actionFunctions\";\r\nimport GroheFiltersValues from \"../../grohe/groheNavigation/groheFilters/groheFiltersValues\";\r\nimport {getCurrentLayout} from \"../../../appLayout\";\r\n// import {AVAILABLE_FILTERS} from \"../../core/constants\";\r\nimport {IS_PRODUCT_JOURNEY} from \"../../../../config\";\r\n\r\nimport Analytics, {LOOK_JOURNEY_ANALYTIC_EVENTS, PRODUCT_JOURNEY_ANALYTIC_EVENTS} from \"../../../../analytics\";\r\n// import {COUNTERTOP_GROUP} from \"../../../kvComponent/core/constants\";\r\nimport {getFeatureGroupFilters} from \"../../../../misc/filtersFunctions\";\r\nimport MaterialSpinner from \"../../../ui/materialSpinner\";\r\nimport {getCurrentGroups, getFeatureGroupFromWizardGroup} from \"../lookMain/lookWizard/lookWizardFunctions\";\r\n\r\n\r\nconst LookFiltersList = (props) => {\r\n const { className, filtersOpened, intl, isMobile, lookActiveFeature, lookActiveCategory, wizardFeatureGroup,\r\n isRelatedItemsFilters } = props;\r\n const [activeFilterId, setActiveFilterId] = useState(null);\r\n\r\n useEffect(() => {\r\n setActiveFilterId(filtersOpened ? \"description\" : isMobile ? activeFilterId : \"\");\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [filtersOpened])\r\n\r\n const handleChange = (filterId, filterName) => (event, isExpanded) => {\r\n const underscoredText = Analytics.getSkuForAnalytics({dbFeature: {sku: filterName}}, false);\r\n if (IS_PRODUCT_JOURNEY) {\r\n Analytics.sendClickEvent(\r\n isExpanded\r\n ? PRODUCT_JOURNEY_ANALYTIC_EVENTS.productFeaturesFiltersAccordionOpen + underscoredText\r\n : PRODUCT_JOURNEY_ANALYTIC_EVENTS.productFeaturesFiltersAccordionClose + underscoredText\r\n );\r\n } else {\r\n Analytics.sendClickEvent(\r\n isExpanded\r\n ? LOOK_JOURNEY_ANALYTIC_EVENTS.lookFeaturesFiltersAccordionOpen + underscoredText\r\n : LOOK_JOURNEY_ANALYTIC_EVENTS.lookFeaturesFiltersAccordionClose + underscoredText\r\n );\r\n }\r\n\r\n setActiveFilterId(isExpanded ? filterId : false);\r\n };\r\n\r\n const layout = getCurrentLayout();\r\n const featureGroup = wizardFeatureGroup\r\n || (lookActiveFeature ? lookActiveFeature.getParent() : layout.getFeatureGroupByPartId(lookActiveCategory));\r\n\r\n const availableFilters = filtersOpened && (featureGroup.allFeaturesReceived || isRelatedItemsFilters)\r\n ? getFeatureGroupFilters(featureGroup)\r\n : [];\r\n\r\n if (!featureGroup) {\r\n return null\r\n }\r\n // .filter(filterGroup => AVAILABLE_FILTERS.includes(filterGroup.name));\r\n\r\n // if (!featureGroup.filtersReceived) {\r\n // return (\r\n //
    \r\n // \r\n //
    \r\n // )\r\n // }\r\n\r\n return (\r\n
    \r\n {availableFilters.map(availableFilter => {\r\n return (\r\n
  • \r\n \r\n }\r\n aria-label={intl.formatMessage({id:\"tooltip.editLook\"})}\r\n aria-controls=\"panel2bh-content\"\r\n id=\"panel2bh-header\"\r\n className=\"lk-info__header\"\r\n >\r\n
    \r\n \r\n {availableFilter.filterGroupName}\r\n {availableFilter.selectedFiltersLength ? ` (${availableFilter.selectedFiltersLength})` : null}\r\n \r\n {featureGroup.filtersReceived || featureGroup.realFeaturesReceived ? null : }\r\n
    \r\n \r\n \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
  • \r\n )\r\n })}\r\n
    \r\n )\r\n};\r\n\r\nLookFiltersList.propTypes = {\r\n className: PropTypes.string,\r\n isRelatedItemsFilters: PropTypes.bool\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {lookActiveFeature, lookActiveCategory} = store.lookState;\r\n const {isMobile} = store.serverState;\r\n const {showFilters, selectedFilters, filtersCount} = store.filterState;\r\n const {filtersOpened} = store.groheState;\r\n const {featureGroupCount} = store.lookState;\r\n\r\n let wizardFeatureGroup = null\r\n const {wizardSelectedValues, wizardActiveItem, wizardActiveStep} = store.wizardState;\r\n if (filtersOpened && wizardActiveItem) {\r\n const currentGroups = getCurrentGroups(wizardActiveItem, wizardActiveStep, wizardSelectedValues);\r\n if (currentGroups.length === 1) {\r\n wizardFeatureGroup = getFeatureGroupFromWizardGroup(currentGroups[0])\r\n }\r\n }\r\n\r\n return {\r\n filtersOpened: showFilters || filtersOpened,\r\n filtersCount,\r\n isMobile,\r\n // allFilterGroups: filterGroups,\r\n lookActiveFeature,\r\n selectedFilters,\r\n lookActiveCategory,\r\n featureGroupCount,\r\n wizardFeatureGroup,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setGroheFiltersOpened,\r\n setGroheFiltersSearchText,\r\n setSelectedFilters,\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(LookFiltersList)\r\n);\r\n","import React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport {injectIntl} from \"react-intl\";\r\n\r\nimport Checkbox from '@mui/material/Checkbox';\r\nimport FormGroup from '@mui/material/FormGroup';\r\nimport FormControlLabel from '@mui/material/FormControlLabel';\r\n\r\nimport PropTypes from \"prop-types\";\r\nimport {filterGroupInterface} from \"../../../../../interfaces/filterInterface\";\r\nimport {toggleFilterArrayValue} from \"../../../../visComponents/navigation/newFilters/filtersBody\";\r\nimport {setSelectedFilters} from \"../../../../../actions/actionFunctions\";\r\nimport Analytics, {LOOK_JOURNEY_ANALYTIC_EVENTS, PRODUCT_JOURNEY_ANALYTIC_EVENTS} from \"../../../../../analytics\";\r\nimport {IS_PRODUCT_JOURNEY} from \"../../../../../config\";\r\nimport {featureGroupInterface} from \"../../../../../interfaces/featureInterface\";\r\nimport {getFixedFilterValueName, weShouldHideFilterValue} from \"../../../filtersHardcode\";\r\n\r\nconst GroheFiltersValues = (props) => {\r\n const {availableFilter, selectedFilters, setSelectedFilters} = props;\r\n\r\n const setActiveFilterValue = (filterId, filterGroupId, filterValueText, selected) => {\r\n const underscoredText = Analytics.getSkuForAnalytics({dbFeature: {sku: filterValueText}}, false);\r\n\r\n if (IS_PRODUCT_JOURNEY) {\r\n Analytics.sendClickEvent(\r\n selected\r\n ? PRODUCT_JOURNEY_ANALYTIC_EVENTS.productFeaturesFiltersValuerUnChecked + underscoredText\r\n : PRODUCT_JOURNEY_ANALYTIC_EVENTS.productFeaturesFiltersValueChecked + underscoredText\r\n )\r\n } else {\r\n Analytics.sendClickEvent(\r\n selected\r\n ? LOOK_JOURNEY_ANALYTIC_EVENTS.lookFeaturesFiltersValuerUnChecked + underscoredText\r\n : LOOK_JOURNEY_ANALYTIC_EVENTS.lookFeaturesFiltersValueChecked + underscoredText\r\n )\r\n }\r\n setSelectedFilters(toggleFilterArrayValue([...selectedFilters], {filterId, filterGroupId}));\r\n };\r\n\r\n return (\r\n
    \r\n \r\n {availableFilter.values.map(filterValue => {\r\n // we did this check already in the getAvailableFiltersForReceivedFilters function\r\n // if (COUNTERTOP_GROUP.includes(featureGroup.partId) && featureGroup && featureGroup.filtersReceived\r\n // && !featureGroup.filtersReceived.includes(filterValue.id)) {\r\n // return null\r\n // }\r\n if (weShouldHideFilterValue(filterValue)) {\r\n return null\r\n }\r\n const selected = selectedFilters.find((filter) => {\r\n return filter.filterGroupId === availableFilter.id && filter.filterId === filterValue.id\r\n })\r\n const checkboxClick = () => {\r\n return setActiveFilterValue(filterValue.id, availableFilter.id, filterValue.displayText, selected)\r\n }\r\n return (\r\n }\r\n />\r\n )}\r\n )}\r\n \r\n
    \r\n )\r\n};\r\n\r\nGroheFiltersValues.propTypes = {\r\n availableFilter: PropTypes.shape(filterGroupInterface),\r\n featureGroup: PropTypes.shape(featureGroupInterface),\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {selectedFilters} = store.filterState;\r\n return {\r\n selectedFilters\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setSelectedFilters\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(GroheFiltersValues)\r\n);\r\n","import React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\n\r\nimport IconButton from \"@mui/material/IconButton\";\r\nimport RestartAltIcon from '@mui/icons-material/RestartAlt';\r\n\r\nimport {setSelectedFilters} from \"../../../../actions/actionFunctions\";\r\nimport {setGroheFiltersSearchText} from \"../../../../actions/groheFunctions\";\r\nimport Analytics, {LOOK_JOURNEY_ANALYTIC_EVENTS} from \"../../../../analytics\";\r\n\r\n\r\nconst LookFiltersReset = (props) => {\r\n const {setSelectedFilters, intl, setGroheFiltersSearchText} = props;\r\n\r\n const resetFilterClick = () => {\r\n Analytics.sendClickEvent(LOOK_JOURNEY_ANALYTIC_EVENTS.lookFeaturesFiltersReset);\r\n setSelectedFilters([]);\r\n setGroheFiltersSearchText(\"\");\r\n };\r\n\r\n //console.log(\"availableFilters\", availableFilters);\r\n\r\n return (\r\n
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    \r\n )\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const {lookActiveFeature} = store.lookState;\r\n const {showFilters} = store.filterState;\r\n return {\r\n filtersOpened: showFilters,\r\n lookActiveFeature,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setSelectedFilters,\r\n setGroheFiltersSearchText,\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(LookFiltersReset)\r\n);\r\n","import { useState, useEffect } from 'react';\r\n\r\nfunction getWindowDimensions() {\r\n const { innerWidth: windowWidth, innerHeight: windowHeight } = window;\r\n return {\r\n windowWidth,\r\n windowHeight\r\n };\r\n}\r\n\r\nexport default function useWindowDimensions() {\r\n const [windowDimensions, setWindowDimensions] = useState(getWindowDimensions());\r\n\r\n useEffect(() => {\r\n function handleResize() {\r\n setWindowDimensions(getWindowDimensions());\r\n }\r\n\r\n window.addEventListener('resize', handleResize);\r\n return () => window.removeEventListener('resize', handleResize);\r\n }, []);\r\n\r\n return windowDimensions;\r\n}\r\n","import {useEffect, useState} from \"react\";\r\nimport {connect} from \"react-redux\";\r\n\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\nimport {getImagePromiseFromLayout} from \"../../../misc/getCanvasImageFromLayout\";\r\n\r\nconst WithCanvasImage = (props) => {\r\n\r\n const {children, visualizersLoadedLength} = props;\r\n\r\n const [canvasSrc, setCanvasSrc] = useState(\"\");\r\n\r\n const setCanvasImage = () => {\r\n const layout = getCurrentLayout();\r\n getImagePromiseFromLayout(layout)\r\n .then((response) => setCanvasSrc(response));\r\n };\r\n\r\n useEffect(() => {\r\n setCanvasImage()\r\n }, [visualizersLoadedLength])\r\n\r\n return children(canvasSrc)\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n visualizersLoadedLength: store.serverState.visualizersLoaded.length,\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps)(WithCanvasImage)\r\n","import React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport LookListContentHeader from \"./lookListContentHeader\";\r\nimport LookListMain from \"./lookListMain\";\r\nimport WithCartAnimationsChecker from \"../hocs/withCartAnimationsChecker\";\r\n\r\nconst LookListContent = (props) => {\r\n\r\n const {onBackClick} = props;\r\n\r\n return (\r\n \r\n {() => (\r\n
    \r\n \r\n \r\n
    \r\n )}\r\n
    \r\n )\r\n};\r\n\r\nLookListContent.propTypes = {\r\n onBackClick: PropTypes.func.isRequired\r\n}\r\n\r\nconst mapStateToProps = () => {\r\n return {\r\n\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(LookListContent)\r\n","import React, {Fragment} from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\nimport {useLocation, withRouter} from \"react-router-dom\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport IconButton from \"@mui/material/IconButton\";\r\n// import PrintIcon from \"@mui/icons-material/Print\";\r\nimport FavoriteBorderIcon from \"@mui/icons-material/FavoriteBorder\";\r\nimport CloseIcon from \"@mui/icons-material/Close\";\r\n// import Button from \"@mui/material/Button\";\r\n\r\nimport {setLookOpened, setLookOverlayOpened, setLookPageOpened} from \"../../../actions/lookFunctions\";\r\nimport {LOOK_OVERLAYS} from \"../core/constants\";\r\nimport {IS_PRODUCT_JOURNEY} from \"../../../config\";\r\nimport WithSavePostMessage from \"../hocs/withSavePostMessage\";\r\n// import {featureIsBundle, getBundledFeatures, isInStock} from \"../lookNavigation/lookFunctions2\";\r\nimport {cartItemInStock} from \"../lookNavigation/lookFunctions2\";\r\nimport Analytics, {LOOK_JOURNEY_ANALYTIC_EVENTS} from \"../../../analytics\";\r\nimport {ROUTES} from \"../../../routes\";\r\nimport {isIframe} from \"../../../misc/helpers\";\r\n\r\nconst LookListContentHeaderRightSide = (props) => {\r\n\r\n const {intl, isMobile, onBackClick, setLookOverlayOpened, cartItems, userIsLoggedIn, setLookPageOpened, setLookOpened,\r\n history, withoutSave, fabricatorData} = props;\r\n\r\n const location = useLocation();\r\n\r\n // const printButtonClick = () => {\r\n // setLookOverlayOpened(LOOK_OVERLAYS.print)\r\n // }\r\n\r\n const closeCartClick = () => {\r\n setLookPageOpened(\"\");\r\n setLookOpened(null);\r\n history.push(ROUTES.home);\r\n }\r\n\r\n const saveButtonClick = (savePostMessage) => {\r\n Analytics.sendClickEvent(LOOK_JOURNEY_ANALYTIC_EVENTS.lookListHeaderSave);\r\n if (userIsLoggedIn) {\r\n savePostMessage();\r\n } else {\r\n const isLixil = isIframe() && fabricatorData.isLixil;\r\n setLookOverlayOpened(isLixil ? LOOK_OVERLAYS.questionLogin : LOOK_OVERLAYS.leadCapture);\r\n }\r\n }\r\n\r\n let itemsToCount = 0;\r\n cartItems.forEach(cartItem => {\r\n if (!cartItem.relatedProductParent && cartItemInStock(cartItem)\r\n // || (featureIsBundle(cartItem.cartFeature, cartItems) && getBundledFeatures(cartItem.cartFeature).some(relFeature => relFeature.dbFeature.lixilAvailableQty > 0))\r\n ) {\r\n itemsToCount = itemsToCount + cartItem.quantity\r\n }\r\n }); // Items in visualizer should equal total quantity of items minus out of stock (Shower bundle will count as 1 not 7)\r\n\r\n return (\r\n
    \r\n {/*
    */}\r\n {/* */}\r\n {/* */}\r\n {/* */}\r\n {/* {isMobile ? null : (*/}\r\n {/* */}\r\n {/* */}\r\n {/* */}\r\n {/* )}*/}\r\n {/*
    */}\r\n {withoutSave || fabricatorData.isGrohe || (!IS_PRODUCT_JOURNEY && isMobile) ? null : (\r\n \r\n {(savePostMessage) => (\r\n
    saveButtonClick(savePostMessage)}>\r\n \r\n \r\n \r\n {isMobile ? null : (\r\n \r\n \r\n \r\n )}\r\n
    \r\n )}\r\n
    \r\n )}\r\n {!isMobile || !location || !location.pathname ? null : (\r\n \r\n {!IS_PRODUCT_JOURNEY && !location.pathname.includes(ROUTES.cart) ? (\r\n
    \r\n \r\n \r\n \r\n
    \r\n ) : null}\r\n {/*{IS_PRODUCT_JOURNEY && (location.pathname === ROUTES.cartLogin) ? (*/}\r\n {/* */}\r\n {/*) : null}*/}\r\n {/*{IS_PRODUCT_JOURNEY && (location.pathname === ROUTES.cartRegister) ? (*/}\r\n {/* */}\r\n {/*) : null}*/}\r\n
    \r\n )}\r\n
    \r\n )\r\n};\r\n\r\nLookListContentHeaderRightSide.propTypes = {\r\n onBackClick: PropTypes.func,\r\n withoutSave: PropTypes.bool,\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {isMobile} = store.serverState;\r\n const {cartItems} = store.cartState;\r\n const {userIsLoggedIn} = store.userState;\r\n const fabricatorData = store.fabricatorState;\r\n\r\n return {\r\n isMobile,\r\n cartItems,\r\n userIsLoggedIn,\r\n fabricatorData,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setLookOverlayOpened,\r\n setLookPageOpened,\r\n setLookOpened,\r\n};\r\n\r\nexport default injectIntl(\r\n withRouter(\r\n connect(mapStateToProps, mapDispatchToProps)(LookListContentHeaderRightSide)\r\n )\r\n)\r\n","import {useEffect, useState} from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport {withRouter} from \"react-router-dom\";\r\nimport {getCartItemsCount} from \"../grohe/groheNavigation/groheFunctions\";\r\nimport {LOOK_OVERLAYS} from \"../core/constants\";\r\nimport {setLookOverlayOpened} from \"../../../actions/lookFunctions\";\r\nimport {setShowUnlockCalculations} from \"../../../actions/unlockCalculationsFunctions\";\r\n\r\nconst WithCartAnimationsChecker = (props) => {\r\n\r\n const {children, fabricatorSettings, isPhoneNumberValidated, setLookOverlayOpened, setShowUnlockCalculations, cartItems,\r\n instList} = props;\r\n const [leadPopupWasOpened, setLeadPopupWasOpened] = useState(false);\r\n\r\n const cartItemsLength = getCartItemsCount(cartItems);\r\n const shouldOpenLeadCapturePopup = fabricatorSettings.leadCaptureShoppingCart && !isPhoneNumberValidated && !!(cartItemsLength || instList.length);\r\n\r\n useEffect(() => {\r\n if (shouldOpenLeadCapturePopup) {\r\n setLookOverlayOpened(LOOK_OVERLAYS.leadCapture);\r\n setShowUnlockCalculations(true);\r\n setLeadPopupWasOpened(true);\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n return children(leadPopupWasOpened, shouldOpenLeadCapturePopup)\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const {isPhoneNumberValidated} = store.userState;\r\n const {settings} = store.fabricatorState;\r\n const {cartItems} = store.cartState;\r\n const {instList} = store.instState;\r\n\r\n return {\r\n isPhoneNumberValidated,\r\n fabricatorSettings: settings,\r\n cartItems,\r\n instList,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setLookOverlayOpened,\r\n setShowUnlockCalculations,\r\n};\r\n\r\nexport default withRouter(\r\n connect(mapStateToProps, mapDispatchToProps)(WithCartAnimationsChecker)\r\n)\r\n","import React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\nimport {withRouter} from \"react-router-dom\";\r\n\r\nimport Button from \"@mui/material/Button\";\r\nimport SvgIcon from \"@mui/material/SvgIcon\";\r\nimport RequestQuoteOutlinedIcon from '@mui/icons-material/RequestQuoteOutlined';\r\n\r\nimport {LookCartIcon} from \"../../common/icons\";\r\nimport {\r\n getPriceWithCurrency,\r\n getQuotePriceWithTaxes,\r\n getTotalPrice,\r\n isIframe,\r\n toFixedPrice\r\n} from \"../../../misc/helpers\";\r\n// import {showQuoteSavedNotification} from \"../../ui/successNotification\";\r\n// import {saveQuote} from \"../../../api/server-api\";\r\nimport WithAddToCartPostMessage from \"../hocs/withAddToCartPostMessage\";\r\nimport {cartItemInStock} from \"../lookNavigation/lookFunctions2\";\r\nimport Analytics, {LOOK_JOURNEY_ANALYTIC_EVENTS} from \"../../../analytics\";\r\nimport WithOpenMiniCartPostMessage from \"../hocs/withOpenMiniCartPostMessage\";\r\nimport {getCartItemsCount} from \"../grohe/groheNavigation/groheFunctions\";\r\nimport {ROUTES} from \"../../../routes\";\r\nimport {pricingIsLocked} from \"../lookNavigation/lookNavigationFunctions\";\r\nimport {setLookOverlayOpened, setLookPageOpened} from \"../../../actions/lookFunctions\";\r\nimport LookFeaturePriceLocked from \"../lookNavigation/lookMain/lookListFeature/lookFeaturePriceLocked\";\r\nimport {LOOK_OVERLAYS} from \"../core/constants\";\r\nimport {getAnalyticsEcommerceValues} from \"../../../analyticsEcommerceParams\";\r\n\r\n\r\nconst LookListFooter = (props) => {\r\n\r\n const {discountSections, fabricatorData, cartItems, isMobile, lookPageOpened, visualizersLoadedLength, history,\r\n setLookPageOpened, isPhoneNumberValidated, showUnlockCalculations, showTotalItems, setLookOverlayOpened,\r\n intl} = props;\r\n const fabricatorSettings = fabricatorData.settings;\r\n\r\n const isLixil = isIframe() && fabricatorData.isLixil;\r\n const withoutCheckout = !fabricatorSettings.checkout;\r\n const totalPrice = getTotalPrice();\r\n let grandTotal = getQuotePriceWithTaxes(totalPrice, discountSections);\r\n\r\n const requestQuoteClick = () => {\r\n Analytics.sendClickEvent(LOOK_JOURNEY_ANALYTIC_EVENTS.lookListRequestQuote);\r\n setLookOverlayOpened(LOOK_OVERLAYS.leadCapture, \"quotation\");\r\n };\r\n\r\n const viewCartClick = (openMiniCartPostMessage) => {\r\n Analytics.sendClickEvent(LOOK_JOURNEY_ANALYTIC_EVENTS.lookListOpenMiniCart);\r\n const {currency, value, items} = getAnalyticsEcommerceValues();\r\n Analytics.sendEcommerceEvent(\"view_cart\", {currency, value, items});\r\n openMiniCartPostMessage();\r\n };\r\n\r\n const disabled = cartItems.every(cartItem => !cartItemInStock(cartItem) || cartItem.isRemoved || !cartItem.quantity);\r\n\r\n let itemsToCount = getCartItemsCount(cartItems, intl);\r\n let {pricingLocked, showPrice} = pricingIsLocked();\r\n if (!pricingLocked && fabricatorSettings.enableQuote && !isPhoneNumberValidated) {\r\n pricingLocked = true;\r\n }\r\n const hideTotal = !showPrice || (showUnlockCalculations && !showTotalItems.includes(\"total\"));\r\n const hideCheckout = (showUnlockCalculations && !showTotalItems.includes(\"checkout\"));\r\n\r\n const getListFooterButtonText = () => {\r\n if (fabricatorSettings.enableQuote && !isPhoneNumberValidated) {\r\n return \"leadCapturePopup.getQuote\"\r\n } else if (withoutCheckout) {\r\n return \"leadCapturePopup.saveDesignButton\"\r\n } else if (pricingLocked) {\r\n return \"look.list.footer.addToCartButtonLocked\"\r\n // } else if (fabricatorSettings.checkout && fabricatorSettings.hasPaymentGateway) {\r\n // return \"buttons.checkout\"\r\n } else {\r\n return \"look.list.footer.addToCartButton\" // lixil text\r\n }\r\n }\r\n\r\n const checkoutClick = (addToCartPostMessage) => {\r\n Analytics.sendClickEvent(LOOK_JOURNEY_ANALYTIC_EVENTS.lookListAddToCart);\r\n if (isLixil || !fabricatorSettings.checkout) {\r\n addToCartPostMessage();\r\n } else if (pricingLocked) {\r\n window.clearTimeout(window.leadCaptureTimeoutId);\r\n setLookOverlayOpened(LOOK_OVERLAYS.leadCapture);\r\n } else {\r\n setLookPageOpened(ROUTES.cart);\r\n history.push(ROUTES.cart);\r\n }\r\n // saveQuote({\r\n // submit: true,\r\n // })\r\n // .then((responseData) => {\r\n // document.kvConfig.jobId = responseData.jobId;\r\n // showQuoteSavedNotification(\"successNotification.titleQuoteCreated\");\r\n // setIsLoading(false);\r\n // })\r\n // .catch(() => {\r\n // setIsLoading(false);\r\n // })\r\n };\r\n\r\n return (\r\n
    \r\n {/*
    */}\r\n {/* */}\r\n {/*
    */}\r\n {isMobile && (lookPageOpened !== ROUTES.list) ? null : (\r\n
    \r\n {isMobile || !isLixil || !fabricatorSettings.checkout ? null : (\r\n \r\n {(openMiniCartPostMessage) => (\r\n \r\n )}\r\n \r\n )}\r\n \r\n {(addToCartPostMessage) => hideCheckout || (fabricatorData.isGrohe && !fabricatorSettings.checkout) ? null : (\r\n \r\n )}\r\n \r\n {fabricatorSettings.callForPricing ? (\r\n \r\n ) : null}\r\n {hideTotal ? null : (\r\n
    \r\n \r\n \r\n \r\n \r\n {pricingLocked ? : getPriceWithCurrency(fabricatorSettings, toFixedPrice(grandTotal), null, true)}\r\n \r\n
    \r\n )}\r\n
    \r\n )}\r\n
    \r\n )\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const fabricatorData = store.fabricatorState;\r\n const {discountSections} = store.priceWorksheetState;\r\n const {cartItems, cItemsAddedToParentCart, sureTax} = store.cartState;\r\n const {isMobile, visualizersLoaded} = store.serverState;\r\n const {lookPageOpened} = store.lookState;\r\n const {isPhoneNumberValidated} = store.userState; // to update component when user is logged in\r\n const {showUnlockCalculations, showTotalItems} = store.unlockCalculationsState;\r\n\r\n return {\r\n fabricatorData,\r\n discountSections,\r\n cartItems,\r\n cItemsAddedToParentCart,\r\n isMobile,\r\n lookPageOpened,\r\n visualizersLoadedLength: visualizersLoaded.length,\r\n isPhoneNumberValidated,\r\n sureTax, // to update when response received\r\n showUnlockCalculations,\r\n showTotalItems\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setLookPageOpened,\r\n setLookOverlayOpened,\r\n};\r\n\r\nexport default injectIntl(\r\n withRouter(\r\n connect(mapStateToProps, mapDispatchToProps)(LookListFooter)\r\n )\r\n)\r\n","import store from './../store';\r\nimport {useEffect, useState} from \"react\";\r\n\r\nimport {getCurrentLayout} from \"../bvcomponents/appLayout\";\r\nimport {setAllFeaturesLoaded} from \"./serverFunctions\";\r\nimport JsonApi from \"../api/jsonApi\";\r\nimport {useIsMounted} from \"../misc/helperHooks\";\r\nimport {getBvFeatures} from \"../api/server-api\";\r\n\r\n\r\nexport const downloadAllFeatures = async () => {\r\n const mainResponse = await JsonApi.getBathroomVisualizerData(100000);\r\n if (!mainResponse || !mainResponse.data || !mainResponse.data.features) {\r\n return false\r\n }\r\n const layout = getCurrentLayout();\r\n layout.loadNewFeatures(mainResponse.data);\r\n layout.getFeatures().forEach((parentGroup) => {\r\n parentGroup.relatedItems.forEach((relatedItem) => {\r\n relatedItem.allFeaturesReceived = true;\r\n })\r\n })\r\n store.dispatch(setAllFeaturesLoaded(document.kvConfig.visualizerType))\r\n return true\r\n};\r\n\r\nexport const useFeaturesRoomLayoutsChecker = () => { // not used for now!\r\n\r\n const [featuresLoaded, setFeaturesLoaded] = useState(false);\r\n const isMounted = useIsMounted();\r\n\r\n const checkFeatures = async () => {\r\n const layout = getCurrentLayout();\r\n const featureGroupsObjects = layout.getActiveFeatures(true, false, true)\r\n .filter(fgObject => !fgObject.partId.includes(\"decor_\") && !fgObject.partId.includes(\"attachment\")); // they are already received\r\n // console.log(\"featureGroupsObjects\", featureGroupsObjects);\r\n let needToRequestNames = [];\r\n featureGroupsObjects.forEach((featureGroupObject) => {\r\n if (featureGroupObject.featureGroup\r\n && !featureGroupObject.realFeaturesReceived\r\n && featureGroupObject.cartFeature\r\n && featureGroupObject.cartFeature.dbFeature\r\n && featureGroupObject.cartFeature.dbFeature.sharedFeatureName\r\n && !needToRequestNames.includes(featureGroupObject.cartFeature.dbFeature.sharedFeatureName)\r\n && (!featureGroupObject.featureGroup.alreadyRequestedFeatureNames\r\n || !featureGroupObject.featureGroup.alreadyRequestedFeatureNames.includes(featureGroupObject.cartFeature.dbFeature.sharedFeatureName))) {\r\n if (!featureGroupObject.featureGroup.alreadyRequestedFeatureNames) {\r\n featureGroupObject.featureGroup.alreadyRequestedFeatureNames = [];\r\n }\r\n needToRequestNames.push(featureGroupObject.cartFeature.dbFeature.sharedFeatureName)\r\n featureGroupObject.featureGroup.alreadyRequestedFeatureNames.push(featureGroupObject.cartFeature.dbFeature.sharedFeatureName)\r\n }\r\n });\r\n console.log(\"needToRequestNames\", needToRequestNames);\r\n if (!needToRequestNames.length) {\r\n setFeaturesLoaded(true)\r\n return\r\n }\r\n const missingSkusResponse = await getBvFeatures(null, needToRequestNames, true);\r\n if (missingSkusResponse && missingSkusResponse.data) {\r\n console.log(\"missingSkusResponse\", missingSkusResponse.data);\r\n layout.loadNewFeatures(missingSkusResponse.data);\r\n }\r\n if (isMounted()) {\r\n setFeaturesLoaded(true)\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n checkFeatures()\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [])\r\n\r\n return featuresLoaded\r\n}\r\n","import React from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport {connect} from \"react-redux\";\r\n\r\nimport CheckIcon from '@mui/icons-material/Check';\r\n\r\nimport {featureInterface} from \"../../../../../interfaces/featureInterface\";\r\nimport {checkIfFeatureDisabled} from \"../../lookFunctions\";\r\n\r\nconst LookListFeatureCheckmark = (props) => {\r\n\r\n const {lookFeature, lookActiveCategory, lookActiveFeature, isEmpty} = props;\r\n\r\n if (!lookActiveCategory || isEmpty || !lookActiveFeature) {\r\n return null\r\n }\r\n\r\n if (lookFeature.getSplittedFeatureName() !== lookActiveFeature.getSplittedFeatureName()) {\r\n return null\r\n }\r\n\r\n const parent = lookFeature.getParent();\r\n const alreadyDisabled = checkIfFeatureDisabled(lookFeature, parent, true);\r\n\r\n if (alreadyDisabled) {\r\n return null\r\n }\r\n\r\n return (\r\n
    \r\n \r\n
    \r\n )\r\n};\r\n\r\nLookListFeatureCheckmark.propTypes = {\r\n lookFeature: PropTypes.shape(featureInterface),\r\n isEmpty: PropTypes.bool,\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {lookActiveFeature, lookActiveCategory} = store.lookState;\r\n const {canvasCount} = store.bathroomVisualizerState;\r\n return {\r\n lookActiveFeature,\r\n lookActiveCategory,\r\n canvasCount\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps)(LookListFeatureCheckmark)\r\n","import React, {Fragment, useEffect} from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport $ from \"jquery\";\r\n\r\nimport {\r\n setUnlockCalculationsStep, showUnlockCalculationsCartItems,\r\n showUnlockCalculationsTotalItems\r\n} from \"../../../../../actions/unlockCalculationsFunctions\";\r\nimport {CART_ITEM_ADDED_BY} from \"../../../../shoppingCart/cartItemInterface\";\r\nimport UnlockCalculationStep from \"./unlockCalculationStep\";\r\nimport {IS_PRODUCT_JOURNEY} from \"../../../../../config\";\r\nimport {sortCartItemsForListPage} from \"../../../lookNavigation/lookFunctions2\";\r\nimport {ROUTES} from \"../../../../../routes\";\r\nimport {showWizardInsteadOfQT} from \"../../../lookNavigation/lookMain/lookWizard/lookWizardFunctions\";\r\nimport {WIZARD_GROUP_TYPES} from \"../../../../../interfaces/wizardItemInterface\";\r\nimport {isSameVisualizerWizard} from \"../../../lookNavigation/lookMain/lookWizard/lookWizardFunctions2\";\r\n\r\nexport const getUnlockCalculationsCartItems = (cartItems, wizardList, wizardIsActive, allWizardsValues, lookPageOpened, quotes) => {\r\n let cartItemsToInclude = [];\r\n if (showWizardInsteadOfQT(wizardList, wizardIsActive)) {\r\n quotes.forEach((quote, quoteIndex) => {\r\n wizardList.forEach(wizardItem => {\r\n const existingAllObject = allWizardsValues.find(wizSelObject => {\r\n return wizSelObject.wizardItemId === wizardItem.id && wizSelObject.quoteIndex === quoteIndex\r\n && isSameVisualizerWizard(wizSelObject)\r\n });\r\n if (existingAllObject && existingAllObject.wizardSelectedValues) {\r\n Object.keys(existingAllObject.wizardSelectedValues).forEach(key => {\r\n if (existingAllObject.wizardSelectedValues[key].wizardGroup\r\n && existingAllObject.wizardSelectedValues[key].wizardGroup.nodeType === WIZARD_GROUP_TYPES.custom) {\r\n cartItemsToInclude.push({\r\n id: quoteIndex + existingAllObject.wizardSelectedValues[key].wizardGroup.id\r\n });\r\n }\r\n let currentCartItems = cartItems.filter(cartItem => {\r\n return cartItem.cartFeature && (cartItem.currentQuote === quoteIndex)\r\n && +key === cartItem.fromWizardStep\r\n && !cartItemsToInclude.includes(cartItem.id)\r\n });\r\n if (currentCartItems.length) {\r\n cartItemsToInclude = [...cartItemsToInclude, ...currentCartItems];\r\n }\r\n })\r\n }\r\n })\r\n cartItems.forEach(cartItem => {\r\n if (!cartItemsToInclude.some(cItem => cItem.id === cartItem.id)) {\r\n cartItemsToInclude = [...cartItemsToInclude, cartItem];\r\n }\r\n })\r\n })\r\n } else {\r\n cartItemsToInclude = cartItems;\r\n }\r\n if (IS_PRODUCT_JOURNEY) {\r\n cartItemsToInclude = cartItemsToInclude.filter(cItem => cItem.addedBy === CART_ITEM_ADDED_BY.user);\r\n } else if (lookPageOpened === ROUTES.list) {\r\n cartItemsToInclude = sortCartItemsForListPage(cartItemsToInclude)\r\n }\r\n\r\n return cartItemsToInclude\r\n}\r\n\r\nconst UnlockCalculationSteps = (props) => {\r\n\r\n const {setUnlockCalculationsStep, cartItems, showUnlockCalculationsCartItems, showUnlockCalculationsTotalItems,\r\n lookPageOpened, wizardList, wizardIsActive, allWizardsValues, quotes} = props;\r\n\r\n const cartItemsToInclude = getUnlockCalculationsCartItems(cartItems, wizardList, wizardIsActive,\r\n allWizardsValues, lookPageOpened, quotes);\r\n\r\n useEffect(() => {\r\n runAnimations()\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n return () => {\r\n showUnlockCalculationsCartItems([]);\r\n showUnlockCalculationsTotalItems([]);\r\n setUnlockCalculationsStep(0);\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n const animateCartItems = async () => {\r\n let showCartItems = [];\r\n for (const [elementIndex, element] of cartItemsToInclude.entries()) {\r\n // const waitTime = this.props.cartItems.length < 7 ? 500*(index + 1) : 300*(index + 1);\r\n if (elementIndex <= 1) {\r\n await new Promise(resolve => setTimeout(resolve, 750));\r\n showCartItems.push(element.id);\r\n showUnlockCalculationsCartItems([...showCartItems]);\r\n } else {\r\n setTimeout(() => {\r\n showCartItems.push(element.id);\r\n showUnlockCalculationsCartItems([...showCartItems]);\r\n }, 750 * (elementIndex - 1))\r\n }\r\n }\r\n };\r\n\r\n const showTotalItems = async () => {\r\n await new Promise(resolve => setTimeout(resolve, 500));\r\n showUnlockCalculationsTotalItems([\"tax\"]);\r\n await new Promise(resolve => setTimeout(resolve, 1000));\r\n showUnlockCalculationsTotalItems([\"tax\", \"total\"]);\r\n await new Promise(resolve => setTimeout(resolve, 1500));\r\n showUnlockCalculationsTotalItems([\"tax\", \"total\", \"checkout\"]);\r\n };\r\n\r\n const runAnimations = async () => {\r\n await new Promise(resolve => setTimeout(resolve, 500));\r\n await animateCartItems();\r\n await new Promise(resolve => setTimeout(resolve, 1500));\r\n setUnlockCalculationsStep(1);\r\n await new Promise(resolve => setTimeout(resolve, 2000));\r\n setUnlockCalculationsStep(2);\r\n await showTotalItems();\r\n await exitAnimations();\r\n };\r\n\r\n const exitAnimations = async () => {\r\n const overlayElement = document.querySelector(\".look-overlay--style\");\r\n if (overlayElement) {\r\n setUnlockCalculationsStep(3);\r\n $(overlayElement).fadeOut(300, () => {\r\n window.clearTimeout(window.leadCaptureTimeoutId);\r\n window.leadCaptureTimeoutId = setTimeout(() => {\r\n setUnlockCalculationsStep(4);\r\n $(overlayElement).fadeIn(300);\r\n }, 4000);\r\n })\r\n } else {\r\n setUnlockCalculationsStep(3);\r\n }\r\n };\r\n\r\n return (\r\n \r\n {[0,1,2].map(stepIndex => )}\r\n \r\n )\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const {unlockCalculationsStep, showTotalItems} = store.unlockCalculationsState;\r\n const {cartItems} = store.cartState;\r\n const {lookPageOpened} = store.lookState;\r\n const {wizardList, wizardIsActive, allWizardsValues} = store.wizardState;\r\n const {quotes} = store.quotesState;\r\n\r\n return {\r\n cartItems,\r\n unlockCalculationsStep,\r\n showTotalItems,\r\n lookPageOpened,\r\n wizardList,\r\n wizardIsActive,\r\n allWizardsValues,\r\n quotes,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setUnlockCalculationsStep,\r\n showUnlockCalculationsCartItems,\r\n showUnlockCalculationsTotalItems,\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(UnlockCalculationSteps)\r\n","import React from 'react';\r\n\r\nconst LoadingDots = () => (\r\n \r\n \r\n \r\n \r\n \r\n);\r\n\r\nLoadingDots.displayName = 'LoadingDots';\r\n\r\nexport default LoadingDots;\r\n","import React from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport {connect} from \"react-redux\";\r\nimport {injectIntl} from \"react-intl\";\r\nimport {withRouter} from \"react-router-dom\";\r\n\r\nimport {featureInterface} from \"../../../../../interfaces/featureInterface\";\r\nimport {checkIfFeatureDisabled} from \"../../lookFunctions\";\r\nimport Analytics, {LOOK_JOURNEY_ANALYTIC_EVENTS} from \"../../../../../analytics\";\r\nimport {getFeatureSectionIsHidden, getFeatureUrl} from \"../../lookFunctions2\";\r\nimport {setLookActiveFeature} from \"../../../../../actions/lookFunctions\";\r\nimport LookMobileInfoButtonAnimatedIcon from \"../../../animations/lookMobileInfoButtonAnimatedIcon\";\r\nimport {setWizardShowFeatureSection} from \"../../../../../actions/wizardFunctions\";\r\n\r\nconst LookListActiveFeatureMobileButton = (props) => {\r\n\r\n const {lookFeature, setLookActiveFeature, history, isActive, lookLockedTutorial, isWizard,\r\n setWizardShowFeatureSection} = props;\r\n\r\n if (!isActive || lookLockedTutorial.visible) {\r\n return null\r\n }\r\n\r\n if (!isWizard) {\r\n const featureSectionIsHidden = getFeatureSectionIsHidden(lookFeature);\r\n if (featureSectionIsHidden) {\r\n return null\r\n }\r\n\r\n const parent = lookFeature.getParent();\r\n const alreadyDisabled = checkIfFeatureDisabled(lookFeature, parent, true);\r\n\r\n if (alreadyDisabled) {\r\n return null\r\n }\r\n }\r\n\r\n const infoButtonClick = (event) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n Analytics.sendClickEvent(LOOK_JOURNEY_ANALYTIC_EVENTS.lookMobileActiveFeatureButton);\r\n\r\n if (isWizard) {\r\n setWizardShowFeatureSection(true);\r\n return\r\n }\r\n\r\n setLookActiveFeature(lookFeature);\r\n history.push(getFeatureUrl(lookFeature, true));\r\n }\r\n\r\n return (\r\n
    \r\n \r\n
    \r\n )\r\n};\r\n\r\nLookListActiveFeatureMobileButton.propTypes = {\r\n lookFeature: PropTypes.shape(featureInterface).isRequired,\r\n isActive: PropTypes.bool,\r\n isWizard: PropTypes.bool,\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {canvasCount} = store.bathroomVisualizerState;\r\n const {lookLockedTutorial} = store.lookState;\r\n\r\n return {\r\n canvasCount,\r\n lookLockedTutorial,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setLookActiveFeature,\r\n setWizardShowFeatureSection,\r\n};\r\n\r\nexport default withRouter(\r\n injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(LookListActiveFeatureMobileButton)\r\n )\r\n)\r\n","import React, { Component } from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport { toggleInstOpened } from \"../../actions/actionFunctions\";\r\n\r\nclass InstallButton extends Component {\r\n\r\n static propTypes = {\r\n questionShown: PropTypes.bool\r\n };\r\n\r\n render() {\r\n let fabSettings = this.props.fabricatorSettings;\r\n return (\r\n \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n questionNoClicked: store.cartState.questionNoClicked,\r\n instOpened: store.instState.instOpened,\r\n fabricatorSettings: store.fabricatorState.settings,\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, {\r\n toggleInstOpened\r\n})(InstallButton);\r\n","import React from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport {FormattedMessage} from \"react-intl\";\r\nimport {toggleShowAllQuotesCartItemsList, toggleShowMobileQuotes} from \"../../actions/shoppingCartFunctions\";\r\n\r\nconst ShoppingCartListSwitcher = (props) => {\r\n\r\n const {quotes, showAllQuotesCartItemsList, toggleShowAllQuotesCartItemsList, toggleShowMobileQuotes} = props;\r\n\r\n if (quotes.length <= 1) {\r\n return null\r\n }\r\n\r\n const handleButtonClick = () => {\r\n toggleShowMobileQuotes(false);\r\n toggleShowAllQuotesCartItemsList(!showAllQuotesCartItemsList);\r\n };\r\n\r\n return (\r\n
    \r\n \r\n \r\n
    \r\n )\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const {showAllQuotesCartItemsList} = store.cartState;\r\n return {\r\n quotes: store.quotesState.quotes,\r\n showAllQuotesCartItemsList,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n toggleShowAllQuotesCartItemsList,\r\n toggleShowMobileQuotes\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(ShoppingCartListSwitcher);\r\n","import React from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport Analytics from \"../../../analytics\";\r\nimport {changeStateToQuote} from \"../../../actions/actionFunctions\";\r\nimport {toggleShowAdvancedQuoting} from \"../../../actions/advancedQuotingFunctions\";\r\nimport {toggleShowAllQuotesCartItemsList, toggleShowMobileQuotes} from \"../../../actions/shoppingCartFunctions\";\r\n\r\nconst AdvancedQuotingSwitcher = (props) => {\r\n\r\n const {showAdvancedQuoting, changeStateToQuote, toggleShowAdvancedQuoting, toggleShowMobileQuotes} = props;\r\n\r\n if (!document.kvConfig.isBackend) {\r\n return null\r\n }\r\n\r\n const handleButtonClick = () => {\r\n Analytics.sendClickEvent(`advanced-quoting-click-${!showAdvancedQuoting ? \"on\" : \"off\"}`);\r\n changeStateToQuote();\r\n toggleShowMobileQuotes(false);\r\n toggleShowAdvancedQuoting(!showAdvancedQuoting);\r\n };\r\n\r\n return (\r\n
    \r\n \r\n \r\n
    \r\n )\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const {showAdvancedQuoting} = store.advancedQuotingState;\r\n return {\r\n showAdvancedQuoting,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n changeStateToQuote,\r\n toggleShowAdvancedQuoting,\r\n toggleShowAllQuotesCartItemsList,\r\n toggleShowMobileQuotes\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(AdvancedQuotingSwitcher);\r\n","import React from \"react\";\r\nimport {connect} from \"react-redux\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n// import {setJobId} from \"../../../actions/actionFunctions\";\r\nimport {setAssignQuoteCloneMode, toggleShowAssignQuotePopup} from \"../../../actions/assignPopupFunctions\";\r\nimport Analytics from \"../../../analytics\";\r\nimport Config from \"../../../config\";\r\n\r\nconst CloneQuoteButton = (props) => {\r\n\r\n // const {setJobId, toggleShowAssignQuotePopup} = props;\r\n const {toggleShowAssignQuotePopup, fabricatorData, setAssignQuoteCloneMode} = props;\r\n\r\n const cloneButtonIsVisible = Config.isDevMode() || (fabricatorData.isCaesarStone && document.kvConfig.showBackToDashboard);\r\n if (!cloneButtonIsVisible) {\r\n return null\r\n }\r\n\r\n const handleCloneQuoteClick = () => {\r\n Analytics.sendClickEvent(\"order-complete-clone-quote\");\r\n // document.kvConfig.jobId = null; // clear current job\r\n // setJobId(0); // clear current job\r\n setAssignQuoteCloneMode(true); // show new assign quote popup\r\n toggleShowAssignQuotePopup(true); // show new assign quote popup\r\n }\r\n\r\n return (\r\n \r\n )\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n fabricatorData: store.fabricatorState,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n // setJobId,\r\n setAssignQuoteCloneMode,\r\n toggleShowAssignQuotePopup\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(CloneQuoteButton)\r\n\r\n","import React, { Component } from 'react';\r\nimport { connect } from \"react-redux\";\r\n\r\nimport {baseNewImagesPath} from \"../assets\";\r\nimport MobileMenu from \"../ui/mobileMenu\";\r\nimport ShoppingCartButton from \"../ui/shoppingCartButton\";\r\nimport UserLoginButton from './../ui/userLoginButton';\r\n\r\nclass ProjectScopeMobileHeader extends Component {\r\n\r\n render() {\r\n const fabricatorSettings = this.props.fabricatorData.settings;\r\n const hardCodedLogo = `${baseNewImagesPath}images/Logos/QuoteCountertops-Logo.svg`;\r\n const logoStyles = this.props.fabricatorData.logoUrl ? {} : {\r\n maxWidth: \"500px\",\r\n width: \"100%\"\r\n };\r\n const initialFlowIsRunning = document.kvConfig.initialFlowEnabled && this.props.initialFlowStep !== 3;\r\n return (\r\n
    \r\n
    \r\n \r\n
    \r\n {this.props.fabricatorData.received ? (\r\n
    \r\n \"Logo\"/\r\n
    \r\n ) : null}\r\n {fabricatorSettings.showPricing && !initialFlowIsRunning ? (\r\n
    \r\n \r\n
    \r\n ): null}\r\n {(fabricatorSettings.leadCaptureOnQuote && !initialFlowIsRunning &&\r\n !(document.kvConfig.isBackend && document.kvConfig.jobId && document.kvConfig.canSaveQuote))\r\n ? \r\n : null}\r\n
    \r\n );\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n fabricatorData: store.fabricatorState,\r\n initialFlowStep: store.initialFlowState.initialFlowStep\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps)(ProjectScopeMobileHeader);\r\n","import React from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport $ from \"jquery\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport { setCameFromPage, toggleSelectionWindow, toggleBathroomVisualizerOpen, changeActivePartRelatedItemIndex,\r\n setQtActiveCategory } from '../../actions/actionFunctions';\r\nimport { homePage, getFeatureGroupIconURL } from \"../bvComponent/core/assets\";\r\n\r\nimport ActionTypes from \"../../misc/actionTypes\";\r\nimport Analytics from './../../analytics';\r\nimport ProjectScopeFunctions from './projectScopeFunctions';\r\n\r\nclass ProjectScopeSections extends ProjectScopeFunctions {\r\n\r\n componentDidMount() {\r\n $(window).on(ActionTypes.UPDATE_ALL_ITEMS, this.updateSections);\r\n }\r\n componentWillUnmount() {\r\n $(window).off(ActionTypes.UPDATE_ALL_ITEMS, this.updateSections);\r\n }\r\n\r\n updateSections = () => {\r\n this.forceUpdate();\r\n };\r\n\r\n goToMaterialsPage = (subPart, parentName) => {\r\n Analytics.sendClickEvent('go-to-materials-' + subPart.partId);\r\n this.goToMaterialsPageCommon(subPart, parentName)\r\n };\r\n\r\n checkForWallsComplexGroup = (qtCategory) => {\r\n return qtCategory.subParts\r\n .map((subPart, subPartIndex) => {\r\n const parent = subPart.part.getParent && subPart.part.getParent(); // floor check\r\n if (parent && parent.partName === \"Walls\" && parent.subParts().every(wallsSubPart => {\r\n return qtCategory.subParts.some(qtCatSubPart => qtCatSubPart.part.partId === wallsSubPart.part.partId)\r\n })) { // here we check - if all walls are included - show just the first one\r\n if (subPartIndex) {\r\n return null\r\n } else {\r\n subPart.part.homePageTitle = \"Walls\";\r\n return subPart\r\n }\r\n }\r\n return subPart\r\n })\r\n .filter(subPart => subPart)\r\n };\r\n\r\n render() {\r\n const sections = this.getSections();\r\n return (\r\n
    \r\n {sections.map((section, index) => {\r\n return section.items && section.items.length ? (\r\n
    \r\n

    \r\n \r\n

    \r\n
      \r\n {section.items.map((subPart, index) => {\r\n // console.log('subPart.partId', subPart.part.partId);\r\n const image = subPart.part.featuredImage || homePage[subPart.part.partId]\r\n || subPart.part.customImageUrl || getFeatureGroupIconURL(subPart.part.partName);\r\n const isCustom = !homePage[subPart.part.partId] && subPart.part.customImageUrl;\r\n const style = {\r\n backgroundImage: image ? `url(${image})` : 'none'\r\n };\r\n if (subPart.part.featuredImage) {\r\n style.backgroundSize = \"contain\";\r\n }\r\n\r\n return (\r\n
    • this.goToMaterialsPage(subPart.part, section.title)}>\r\n
      \r\n {(subPart.part.activeFeature && subPart.part.activeFeature.dbFeature.customGroupName) || subPart.part.homePageTitle || subPart.text}\r\n
      \r\n
    • \r\n )\r\n })}\r\n
    \r\n
    \r\n ) : null\r\n })}\r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n layoutParts: store.stepsState.layoutParts,\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, {\r\n toggleBathroomVisualizerOpen,\r\n toggleSelectionWindow,\r\n setCameFromPage,\r\n changeActivePartRelatedItemIndex,\r\n setQtActiveCategory\r\n})(ProjectScopeSections);\r\n","import React, { Component } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { connect } from \"react-redux\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\nimport {withRouter} from \"react-router-dom\";\r\n\r\nimport {\r\n toggleSelectionFeatureInfo,\r\n toggleUserPopup,\r\n changeSelectionInfoQuantity,\r\n unlockPricing,\r\n changeMaterialsInfoFeatureModules,\r\n addToRecentlyViewed,\r\n setQtActiveCategory,\r\n togglePulseFeatureInfoQuantity,\r\n setCameFromPage\r\n} from \"../../../actions/actionFunctions\";\r\nimport Quantity from \"../../ui/quantity\";\r\nimport InstView from \"../../installation/instView\";\r\nimport Analytics from './../../../analytics';\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\nimport FeatureInfoAssociated from \"./featureInfoAssociated\";\r\nimport FeatureInfoDesc from \"./featureInfoDesc\";\r\nimport FeatureInfoPrice from \"./featureInfoPrice\";\r\nimport FeatureInfoImage from \"./featureInfoImage\";\r\nimport FeatureInfoDescription from \"./featureInfoDescription\";\r\nimport FeatureInfoImagesMobile from \"./featureInfoImagesMobile\";\r\nimport {\r\n canShowSqftButtonForFeature,\r\n canShowSqftCabinetButtonForFeature,\r\n getFeatureIsLocked,\r\n getFeatureUnit\r\n} from \"../../../misc/helpers\";\r\nimport AddProductNoteButton from \"../../ui/addProductNoteButton\";\r\nimport AddProductNoteEditor from \"./addProductNoteEditor\";\r\nimport {MEASURE_UNITS, SQFT_GROUP} from \"../../sqft/constants\";\r\nimport {COUNTERTOP_GROUP} from \"../../kvComponent/core/constants\";\r\nimport {toggleNavItemPositionModal} from \"../../../actions/navigationFunctions\";\r\n// import {setCartItemEditFeature} from \"../../../actions/shoppingCartFunctions\";\r\nimport {enableSquareFootage, setSqftFromFeature, setSquareFootageGroup} from \"../../../actions/sqftFunctions\";\r\nimport {isEnglish} from \"../../../translatesProvider\";\r\nimport {showWizardInsteadOfQT} from \"../../look/lookNavigation/lookMain/lookWizard/lookWizardFunctions\";\r\nimport {getFeatureGroupFeaturesQuantity} from \"../../look/lookNavigation/lookNavigationFunctions\";\r\n\r\nclass FeatureInfo extends Component {\r\n\r\n static propTypes = {\r\n features: PropTypes.array.isRequired,\r\n handleFeatureClick: PropTypes.func.isRequired,\r\n changeActivePartRelatedItem: PropTypes.func.isRequired,\r\n activePart: PropTypes.object,\r\n };\r\n\r\n componentDidMount() {\r\n const layout = getCurrentLayout();\r\n const activeFeature = this.props.selectionFeatureInfo;\r\n if (this.props.fabricatorData.settings.showRecentlyViewedItems) {\r\n this.props.addToRecentlyViewed(activeFeature);\r\n }\r\n // console.log('selectionFeatureInfo', this.props.selectionFeatureInfo);\r\n const navItemParent = activeFeature.getParent();\r\n const parentSimple = (navItemParent.partName === \"Floor\" && navItemParent.partId !== \"shower_floor\")\r\n || navItemParent.partName === \"Toilet\"\r\n || (navItemParent.partName === \"Ceiling\" &&\r\n (document.kvConfig.visualizerType === \"Bathroom\" || document.kvConfig.visualizerType === \"BV\"))\r\n || navItemParent.partName === \"Window\";\r\n // console.log('parentSimple', parentSimple);\r\n // console.log('navItemParent', navItemParent);\r\n if (parentSimple && !layout.qtCategories) {\r\n this.props.changeActivePartRelatedItem(0)\r\n } else {\r\n const {wizardList, wizardIsActive} = this.props;\r\n let subParts = [];\r\n if (layout.qtCategories && this.props.qtActiveCategory && !showWizardInsteadOfQT(wizardList, wizardIsActive)) {\r\n const qtActiveCategory = layout.qtCategories.find(qtCategory => qtCategory.name === this.props.qtActiveCategory);\r\n subParts = qtActiveCategory ? qtActiveCategory.subParts : this.props.activePart.subParts(false)\r\n } else {\r\n subParts = this.props.activePart.subParts(false);\r\n }\r\n\r\n const nextActivePartRelatedItemIndex = subParts.findIndex((subPart) => {\r\n return subPart.part.partId === navItemParent.partId\r\n });\r\n // console.log('nextActivePartRelatedItemIndex', nextActivePartRelatedItemIndex);\r\n this.props.changeActivePartRelatedItem(nextActivePartRelatedItemIndex)\r\n }\r\n // console.log('cartItem', cartItem);\r\n if (this.props.selectionInfoQuantity <= 1) {\r\n this.props.changeSelectionInfoQuantity(this.getDefaultFeatureQuantity());\r\n }\r\n\r\n if ((document.kvConfig.visualizerType === \"Kitchen\" || document.kvConfig.visualizerType === \"KV\")\r\n && activeFeature.partId === \"top_cabinet\" && activeFeature.metaData[\"Module\"]) {\r\n const activeFeatures = this.props.activePart.layout.getActiveFeatures();\r\n const materialsInfoFeatureModules = activeFeatures\r\n .filter(feature => feature.partId.includes(\"top_cabinet_module\"))\r\n .map(feature => {\r\n const existInCart = this.props.cartItems.find(cartItem => cartItem.partId === feature.partId);\r\n return {\r\n ...feature,\r\n quantity: existInCart ? existInCart.quantity : feature.quantity\r\n }\r\n });\r\n // console.log(\"this.props.cartItems\", cartItems);\r\n // console.log(\"this.props.activePart.layout.getActiveFeatures\", activeFeatures);\r\n this.props.changeMaterialsInfoFeatureModules(materialsInfoFeatureModules)\r\n }\r\n\r\n if (this.props.navItemPositionModal && this.props.navItemPositionModal.popupOpened) {\r\n this.props.toggleNavItemPositionModal({\r\n popupOpened: false,\r\n });\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n this.props.toggleSelectionFeatureInfo(null);\r\n this.props.changeMaterialsInfoFeatureModules([]);\r\n this.props.changeSelectionInfoQuantity(1);\r\n // if (this.props.cartItemEditFeature && !window.location.href.includes(\"sqft\")) {\r\n // this.props.setCartItemEditFeature(null);\r\n // }\r\n }\r\n\r\n getDefaultFeatureQuantity = () => {\r\n const activeFeature = this.props.selectionFeatureInfo;\r\n // const cartItem = this.props.cartItems.find(cartItem => {\r\n // return (cartItem.cartFeature.dbFeature.id === activeFeature.dbFeature.id)\r\n // && (cartItem.currentQuote === this.props.activeQuoteIndex)\r\n // });\r\n // if (cartItem) {\r\n // return cartItem.quantity\r\n // }\r\n if (this.props.cartItemEditFeature) {\r\n return this.props.cartItemEditFeature.quantity\r\n } else if (this.props.advancedQuotingSearchItem) {\r\n return this.props.advancedQuotingSearchItem.quantity\r\n }\r\n\r\n const featureGroup = activeFeature.getParent();\r\n\r\n const sqftQuantity = (activeFeature.sqftQuantity && activeFeature.sqftQuantity[this.props.activeQuoteIndex])\r\n || (featureGroup.sqftQuantity && featureGroup.sqftQuantity[this.props.activeQuoteIndex]);\r\n if (sqftQuantity) {\r\n return sqftQuantity\r\n }\r\n\r\n const defaultOrPositionsQuantity = getFeatureGroupFeaturesQuantity(activeFeature, featureGroup);\r\n\r\n if (defaultOrPositionsQuantity && (defaultOrPositionsQuantity !== 1)) {\r\n return defaultOrPositionsQuantity\r\n }\r\n\r\n const zeroQuantityPartIdsArray = [\"vanity_countertop\", \"vanity_backsplash\", \"countertop\", \"backsplash\", \"center_island_countertop\"];\r\n if (zeroQuantityPartIdsArray.includes(activeFeature.partId)) {\r\n return 0\r\n }\r\n\r\n return 1;\r\n };\r\n\r\n handleChangeItemQuantity = (quantity) => {\r\n if (quantity && this.props.pulseFeatureInfoQuantity) {\r\n this.props.togglePulseFeatureInfoQuantity(false);\r\n }\r\n this.props.changeSelectionInfoQuantity(quantity);\r\n };\r\n\r\n handleSQFTButtonClick = () => {\r\n Analytics.sendClickEvent(\"sqft-opened\");\r\n this.props.setCameFromPage(this.props.selectionFeatureInfo);\r\n this.props.setSqftFromFeature(this.props.cartItemEditFeature || {cartFeature: this.props.selectionFeatureInfo});\r\n //enable sqft trough redux\r\n this.props.enableSquareFootage(true);\r\n\r\n //enable sqft trough url\r\n //hashHistory.push(\"sqft\");\r\n };\r\n\r\n handleSQFTCabnetButtonClick = () => {\r\n Analytics.sendClickEvent(\"sqft-opened\");\r\n this.props.setCameFromPage(this.props.selectionFeatureInfo);\r\n this.props.setSqftFromFeature(this.props.cartItemEditFeature || {cartFeature: this.props.selectionFeatureInfo});\r\n //enable sqft trough redux\r\n this.props.enableSquareFootage(true);\r\n this.props.setSquareFootageGroup(SQFT_GROUP.cabinets);\r\n\r\n //enable sqft trough url\r\n //hashHistory.push(\"sqft?cabinets=1\");\r\n };\r\n\r\n getFeatureModules = () => {\r\n const activeFeatures = this.props.activePart.layout.getActiveFeatures();\r\n return this.props.materialsInfoFeatureModules.map((materialsQuantity, materialsQuantityIndex) => {\r\n const activeFeature = activeFeatures.find(feature => feature.partId === materialsQuantity.partId);\r\n return (\r\n
    \r\n
    \r\n
    \r\n

    \r\n {\r\n const materialsInfoFeatureModules = this.props.materialsInfoFeatureModules.map(mQuantity => {\r\n if (mQuantity.partId === materialsQuantity.partId) {\r\n mQuantity.quantity = quantity\r\n }\r\n return mQuantity\r\n });\r\n this.props.changeMaterialsInfoFeatureModules(materialsInfoFeatureModules);\r\n }}\r\n value={materialsQuantity.quantity}/>\r\n

    \r\n
    \r\n )\r\n })\r\n };\r\n\r\n render() {\r\n const activeFeature = this.props.selectionFeatureInfo;\r\n const {productNoteEditorVisible, fabricatorData, intl} = this.props;\r\n const fabricatorSettings = fabricatorData.settings;\r\n\r\n const relatedFeatures = activeFeature.getFeatureRelatedFeatures();\r\n const associatedProduct = Array.isArray(relatedFeatures) && relatedFeatures.length;\r\n\r\n const showPriceLocked = getFeatureIsLocked(activeFeature);\r\n const showPrice = fabricatorSettings.showPricing && !fabricatorData.hideCheckoutBreakdownCost && !showPriceLocked && !fabricatorData.hidePricesFromUser;\r\n\r\n const isMobile = this.props.windowWidth < 991;\r\n\r\n const showFeatureModules = (document.kvConfig.visualizerType === \"Kitchen\" || document.kvConfig.visualizerType === \"KV\")\r\n && activeFeature.partId === \"top_cabinet\" && activeFeature.metaData[\"Module\"];\r\n\r\n const availableMeasureUnits = [...COUNTERTOP_GROUP, \"edge\", \"edge_profile\", \"center_island_edge\"];\r\n const unit = getFeatureUnit(activeFeature, intl, fabricatorData, this.props.selectionInfoQuantity);\r\n const lowerCasedUnit = unit.toLowerCase();\r\n const allowDecimals = (fabricatorSettings.measureUnit === MEASURE_UNITS.Metric) && (\r\n availableMeasureUnits.includes(activeFeature.partId) || [\"lm\", \"sm\", \"mm\"].some(um => um === lowerCasedUnit)\r\n );\r\n const unitText = activeFeature.getParent ? activeFeature.getParent().unitText : null;\r\n\r\n return (\r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n

    \r\n \r\n

    \r\n {!isMobile ? : null}\r\n \r\n
    \r\n
    \r\n {showPrice ? : null}\r\n {activeFeature.dbFeature.hideQuantity ? null :\r\n showFeatureModules\r\n ? this.getFeatureModules()\r\n : (\r\n
    \r\n \r\n {(label) => (\r\n \r\n )}\r\n \r\n
    \r\n )\r\n }\r\n
    \r\n {canShowSqftButtonForFeature(activeFeature, fabricatorSettings) ? (\r\n
    \r\n \r\n
    \r\n ) : null}\r\n {canShowSqftCabinetButtonForFeature(activeFeature, fabricatorSettings) ? (\r\n
    \r\n \r\n
    \r\n ) : null}\r\n {isMobile ?
    : null}\r\n
    \r\n {isMobile ? null : }\r\n
    \r\n
    \r\n {isMobile ? : null}\r\n {isMobile ? : null}\r\n {associatedProduct ? : null}\r\n
    \r\n \r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {selectionInfoQuantity, pulseFeatureInfoQuantity, materialsInfoFeatureModules, selectionGroup,\r\n selectionFeatureInfo, productNoteEditorVisible, featureInfoCount} = store.selectionState;\r\n const {cartItems, cartItemEditFeature} = store.cartState;\r\n const {wizardList, wizardIsActive} = store.wizardState;\r\n return {\r\n selectionFeatureInfo,\r\n selectionGroup,\r\n selectionInfoQuantity,\r\n pulseFeatureInfoQuantity,\r\n materialsInfoFeatureModules,\r\n productNoteEditorVisible,\r\n windowWidth: store.serverState.windowWidth,\r\n cartItems,\r\n userIsLoggedIn: store.userState.userIsLoggedIn,\r\n isPriceUnlocked: store.userState.userIsLoggedIn && store.userState.isPhoneNumberValidated,\r\n fabricatorData: store.fabricatorState,\r\n qtActiveCategory: store.qtState.qtActiveCategory,\r\n activeQuoteIndex: store.quotesState.activeQuoteIndex,\r\n advancedQuotingSearchItem: store.advancedQuotingState.advancedQuotingSearchItem,\r\n navItemPositionModal: store.navigationState.navItemPositionModal,\r\n cartItemEditFeature,\r\n featureInfoCount,\r\n wizardList,\r\n wizardIsActive,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n toggleUserPopup,\r\n changeSelectionInfoQuantity,\r\n toggleSelectionFeatureInfo,\r\n changeMaterialsInfoFeatureModules,\r\n unlockPricing,\r\n setCameFromPage,\r\n addToRecentlyViewed,\r\n setQtActiveCategory,\r\n togglePulseFeatureInfoQuantity,\r\n toggleNavItemPositionModal,\r\n // setCartItemEditFeature,\r\n setSqftFromFeature,\r\n enableSquareFootage,\r\n setSquareFootageGroup,\r\n};\r\n\r\nexport default withRouter(\r\n injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(FeatureInfo)\r\n )\r\n);\r\n","import React from \"react\";\r\nimport {connect} from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport {getFilterGroupValues, s3FilterImagePath} from \"../../../misc/utils\";\r\n\r\nconst FeatureInfoBrand = (props) => {\r\n\r\n const {selectionFeatureInfo, filterGroups, feature} = props;\r\n\r\n const currentFeature = feature || selectionFeatureInfo;\r\n\r\n const brandFilterGroup = filterGroups.find(group => group.name === \"Brand\");\r\n if (!brandFilterGroup) {\r\n return null\r\n }\r\n\r\n const featureBrandValues = getFilterGroupValues(currentFeature, brandFilterGroup);\r\n if (!featureBrandValues) {\r\n return null\r\n }\r\n\r\n const brandFilterValue = brandFilterGroup.values.find(val => val.id === featureBrandValues[0]);\r\n if (!brandFilterValue || !brandFilterValue.icon) {\r\n return null\r\n }\r\n\r\n const styles = {\r\n backgroundImage: `url(${s3FilterImagePath(brandFilterValue.icon)})`\r\n };\r\n\r\n return (\r\n
    \r\n );\r\n};\r\n\r\nFeatureInfoBrand.propTypes = {\r\n feature: PropTypes.object\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n selectionFeatureInfo: store.selectionState.selectionFeatureInfo,\r\n filterGroups: store.filterState.filterGroups,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(FeatureInfoBrand);\r\n","import React, {Fragment} from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { connect } from \"react-redux\";\r\nimport $ from \"jquery\";\r\nimport uniq from \"lodash/uniq\";\r\nimport Config from \"../../config\";\r\n\r\nimport {\r\n toggleSelectionFeatureInfo,\r\n setActiveFeature,\r\n toggleShowDescriptionCover, toggleShowRestorePopup, updateCanvasCount\r\n} from \"../../actions/actionFunctions\";\r\n\r\nimport {getEventPosition, getFeatureIsLocked} from \"../../misc/helpers\";\r\n// import {s3FeatureImagePath, THUMBNAIL_SIZES} from \"../../misc/utils\";\r\n\r\nimport ActionTypes from \"../../misc/actionTypes\";\r\nimport NavigationItemsList from \"../visComponents/navigation/navigationItemsList\";\r\nimport CountertopSwitchers from \"../kvComponent/navigation/countertopSwitchers\";\r\nimport CabinetSwitchers from \"../kvComponent/navigation/cabinetSwitchers\";\r\nimport {CABINET_GROUP, COUNTERTOP_GROUP} from \"../kvComponent/core/constants\";\r\nimport {UserPopupTypes} from \"../visComponents/constants\";\r\nimport {toggleNavItemPositionModal, toggleUpdateDisableFeatureGroupRadio} from \"../../actions/navigationFunctions\";\r\nimport {CABINET_GROUP_BATHROOM, COUNTERTOP_GROUP_BATHROOM} from \"../bvSceneComponent/core/constants\";\r\nimport SelectionMainVirtualizedList from \"./selectionRowList/selectionMainVirtualizedList\";\r\nimport LoadingSpinner from \"../ui/loadingSpinner\";\r\nimport WizardList from \"./wizardList/wizardList\";\r\nimport SelectionMainVirtualizedGrid from \"./selectionGridList/selectionMainVirtualizedGrid\";\r\nimport SelectionMainVirtualizedGridMobile from \"./selectionGridList/selectionMainVirtualizedGridMobile\";\r\nimport {wizardGroupInterface} from \"../../interfaces/wizardItemInterface\";\r\nimport {checkIfNeedToReceiveFeaturesIfFiltersApplied} from \"../../misc/filtersFunctions\";\r\nimport {getCurrentLayout} from \"../appLayout\";\r\nimport {clickOnSimilarFeatures, getApplyToLogic} from \"../look/lookNavigation/lookNavigationFunctions\";\r\nimport {navFeatureCLick} from \"../look/lookNavigation/lookFunctions\";\r\nimport {featureCanChangeShowerSize, searchForSameNameWallsBeforeFeatureApply} from \"../look/bathroomFunctions\";\r\n\r\nclass SelectionMainList extends NavigationItemsList {\r\n\r\n static propTypes = {\r\n features: PropTypes.array.isRequired,\r\n handleUserLoginClick: PropTypes.func.isRequired,\r\n setRef: PropTypes.func.isRequired,\r\n currentParent: PropTypes.object,\r\n listItemHeight: PropTypes.number,\r\n showItemsList: PropTypes.bool.isRequired,\r\n layoutName: PropTypes.string,\r\n isWizard: PropTypes.bool,\r\n currentGroups: PropTypes.arrayOf(PropTypes.shape(wizardGroupInterface))\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n showPlaceHolders: document.bvConfig ? document.bvConfig.showPlaceholders : false,\r\n reorderedFeatures: [],\r\n showLoader: false,\r\n currentParentText: \"\"\r\n };\r\n window.itemClickCountQuote = window.itemClickCountQuote || 0;\r\n window.itemClickCount = window.itemClickCount || 0;\r\n }\r\n\r\n componentDidMount() {\r\n this.updatePositions(this.props);\r\n $(document).on(ActionTypes.USER_IS_LOGGED_IN, () => { // click on current active item after unlock\r\n if (this.props.currentParent && (this.props.currentParent.activeLockedFeature || this.props.currentParent.activeFeature)) {\r\n this.handleFeatureClick({\r\n part: this.props.currentParent.activeLockedFeature || this.props.currentParent.activeFeature\r\n });\r\n }\r\n this.forceUpdate(() => {\r\n if (!this.props.listItemHeight || this.props.listItemHeight < 10) { // $(\".bv-item-list\").height()\r\n $(window).trigger('resize'); // squeeze features bug\r\n }\r\n });\r\n });\r\n // console.log(\"|this.props.currentParent\", this.props.currentParent);\r\n if (this.props.currentParent && this.props.currentParent.activeFeature) {\r\n this.props.setActiveFeature(this.props.currentParent.activeFeature);\r\n this.deleteNotInVisualizerFeature(this.props);\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n $(document).off(ActionTypes.USER_IS_LOGGED_IN);\r\n }\r\n\r\n componentWillReceiveProps(nextProps) {\r\n if ((nextProps.currentParent && this.props.currentParent && (nextProps.currentParent.partName !== this.props.currentParent.partName))\r\n || (nextProps.currentParent && (nextProps.currentParent.partName !== this.state.currentParentText)) || nextProps.features !== this.props.features) {\r\n this.updatePositions(nextProps);\r\n this.deleteNotInVisualizerFeature(nextProps);\r\n }\r\n if (this.needToUpdate && nextProps.features.length !== this.props.features.length) {\r\n this.updatePositions(nextProps);\r\n }\r\n\r\n let wizardSubStepIsActive = false;\r\n if (nextProps.wizardConfig.length) {\r\n const existingWizSetup = nextProps.wizardConfig.find(wizObject => {\r\n return wizObject.featureGroupName === nextProps.currentParent.dbName || wizObject.featureGroupName === nextProps.currentParent.partName\r\n })\r\n if (existingWizSetup && existingWizSetup.filterGroups.length) {\r\n wizardSubStepIsActive = true;\r\n }\r\n }\r\n\r\n if (nextProps.selectedFilters.length && !wizardSubStepIsActive && nextProps.currentParent) {\r\n const checkPassed = checkIfNeedToReceiveFeaturesIfFiltersApplied(nextProps.selectedFilters, nextProps.currentParent);\r\n if (checkPassed) {\r\n this.getFeaturesFromBackendWithFilters(nextProps.currentParent, checkPassed.arrayOfNeededFiltersToReceive, 1);\r\n }\r\n }\r\n }\r\n\r\n deleteNotInVisualizerFeature = (nextProps) => {\r\n if (nextProps.currentParent && nextProps.currentParent.activeNotInVisualizerFeature\r\n && nextProps.currentParent.activeFeature && !nextProps.currentParent.activeFeature.notAvailableInVisualizer) {\r\n nextProps.currentParent.activeNotInVisualizerFeature = null;\r\n }\r\n }\r\n\r\n updatePositions = (nextProps) => {\r\n this.setState({\r\n indexesToReplace: [],\r\n showLoader: true\r\n }, () => {\r\n this.setRelatedStones(nextProps);\r\n });\r\n };\r\n\r\n checkForDisabled = (navItem) => {\r\n if (!navItem || !navItem.part || !navItem.part.getParent) {\r\n return\r\n }\r\n const parent = navItem.part.getParent();\r\n if (parent.disabled) {\r\n const itemParent = navItem.part.getParent();\r\n let exLAndBathtubAndSmallRoom = false;\r\n if (itemParent.partId === \"left_shower_wall\" && itemParent.getParent().layout.type === 0) {\r\n const showerBody = itemParent.getParent().layout.parts.Shower.showerBody;\r\n if (showerBody && showerBody.disabled) {\r\n exLAndBathtubAndSmallRoom = true\r\n }\r\n }\r\n if (itemParent.disabled && !exLAndBathtubAndSmallRoom) {\r\n itemParent.disabled = false;\r\n itemParent.disabledClick(); // disable also related parts\r\n }\r\n }\r\n if (parent.getParent) { // enable shower if child is clicked\r\n const showerParent = parent.getParent();\r\n if (showerParent.partName === \"Shower\" && showerParent.showerBody && showerParent.showerBody.disabled) {\r\n showerParent.showerBody.disabled = false;\r\n showerParent.showerBody.disabledClick(); // enable also related parts\r\n }\r\n }\r\n }\r\n\r\n handleFeatureClick = async (activeFeature, event, wizardClickOnLogic = null) => {\r\n\r\n if (event && event.target.closest(\".feature-buttons\")) {\r\n return false; // do not set activeFeature again ! // prevent redundant feature click\r\n } else if (this.props.activeFeature && this.props.activeFeature.dbFeature.id === activeFeature.part.dbFeature.id\r\n && (this.props.currentParent && this.props.currentParent.firstClick[this.props.activeQuoteIndex])) {\r\n this.showPositionsPopup(activeFeature.part, event);\r\n if (this.props.handleFeatureClick) {\r\n this.props.handleFeatureClick(activeFeature.part)\r\n }\r\n return false; // the same feature clicked // prevent redundant feature click\r\n }\r\n\r\n if (Config.isDevMode()) {\r\n console.log(\"activeFeature\", activeFeature.part);\r\n console.log(\"sharedFeatureName:\", activeFeature.part.dbFeature.sharedFeatureName, \"\\ngetSplittedFeatureName:\", activeFeature.part.getSplittedFeatureName());\r\n }\r\n const fabricatorSettings = this.props.fabricatorData.settings;\r\n if(!this.props.userIsLoggedIn && fabricatorSettings.clickLeadCaptureOnQuote && fabricatorSettings.clickLeadCountOnQuote\r\n && (++window.itemClickCountQuote >= fabricatorSettings.clickLeadCountOnQuote)) {\r\n this.props.handleUserLoginClick(UserPopupTypes.NewDesign);\r\n return;\r\n }\r\n if (this.props.handleFeatureClick && !wizardClickOnLogic) {\r\n this.props.handleFeatureClick(activeFeature.part) // set wizard selected value\r\n }\r\n if (this.props.showRestorePopup) {\r\n this.props.toggleShowRestorePopup(false);\r\n }\r\n // if (this.isWallItem(activeFeature.part) && activeFeature.part.getParent().getParent().allWallsApplied) {\r\n // this.applyAllWalls(activeFeature.part, ignoreLocked);\r\n // }\r\n\r\n if (!wizardClickOnLogic) {\r\n this.props.setActiveFeature(activeFeature.part); // set selected feature\r\n }\r\n\r\n const showPositionPopup = this.showPositionsPopup(activeFeature.part, event);\r\n if (showPositionPopup && !wizardClickOnLogic) {\r\n return // don't click on feature!! we are clicking inside the modal window\r\n }\r\n\r\n const layout = getCurrentLayout();\r\n\r\n if ((layout.isNewLayout || (layout.visualizerType === \"bvScene\")) && featureCanChangeShowerSize(activeFeature.part)) {\r\n await searchForSameNameWallsBeforeFeatureApply(activeFeature.part);\r\n }\r\n\r\n if (layout.isNewLayout) {\r\n\r\n navFeatureCLick(activeFeature.part);\r\n\r\n const applyToLogic = getApplyToLogic(activeFeature.part);\r\n // const parent = zoomFeature.getParent();\r\n // setActiveFeaturesBeforeAllWalls([], parent); // we don't need it here, as we have remembering logic below\r\n if (applyToLogic && Array.isArray(applyToLogic.currentApplyToArray) && applyToLogic.currentApplyToArray.length) {\r\n clickOnSimilarFeatures(activeFeature.part, applyToLogic, true);\r\n }\r\n } else {\r\n\r\n activeFeature.part.handleClick(false, \"\", wizardClickOnLogic ? {skipNotCompatible: true} : null);\r\n\r\n if (CABINET_GROUP.includes(activeFeature.part.partId) || CABINET_GROUP_BATHROOM.includes(activeFeature.part.partId)) {\r\n const featureIsLocked = getFeatureIsLocked(activeFeature.part);\r\n CabinetSwitchers.applyAllCabinets(activeFeature.part, !featureIsLocked);\r\n } else if (COUNTERTOP_GROUP.includes(activeFeature.part.partId) || COUNTERTOP_GROUP_BATHROOM.includes(activeFeature.part.partId)) {\r\n const featureIsLocked = getFeatureIsLocked(activeFeature.part);\r\n CountertopSwitchers.applyAllCountertops(activeFeature.part, !featureIsLocked);\r\n }\r\n }\r\n\r\n this.checkForDisabled(activeFeature);\r\n // this.props.toggleShowDescriptionCover(false);\r\n // console.log('is visible', $('.feature--selected').is(':visible'));\r\n\r\n if (activeFeature.part.partId === \"room\") {\r\n this.props.checkIfNeedToSwitchRoom(activeFeature.part);\r\n }\r\n\r\n this.props.toggleUpdateDisableFeatureGroupRadio(true);\r\n $(window).trigger(ActionTypes.CHANGE_LAYOUT); // update canvas\r\n this.props.updateCanvasCount();\r\n setTimeout(() => {\r\n this.props.toggleUpdateDisableFeatureGroupRadio(false);\r\n }, 0)\r\n\r\n };\r\n\r\n showPositionsPopup = (clickedFeature, event) => {\r\n if (clickedFeature && !clickedFeature.notAvailableInVisualizer\r\n && this.props.currentParent\r\n && this.props.currentParent.showLayerPositionsModal\r\n && this.props.currentParent.showLayerPositionsModal(clickedFeature)) {\r\n const eventPosition = getEventPosition(event);\r\n this.props.toggleNavItemPositionModal({\r\n popupOpened: true,\r\n popupPosition: {\r\n left: eventPosition.x,\r\n top: eventPosition.y\r\n },\r\n activePartId: clickedFeature.partId,\r\n });\r\n $(window).trigger(ActionTypes.UPDATE_ALL_ITEMS); // update buttons\r\n return true\r\n } else if (this.props.navItemPositionModal && this.props.navItemPositionModal.popupOpened) {\r\n this.props.toggleNavItemPositionModal({\r\n popupOpened: false,\r\n });\r\n }\r\n return false\r\n }\r\n\r\n // isWallItem = (itemPart) => {\r\n // const wallsPartIds = [\"wall_a\", \"wall_b\", \"wall_c\", \"right_shower_wall\", \"left_shower_wall\",\"pony_wall\"];\r\n // return wallsPartIds.includes(itemPart.partId);\r\n // };\r\n\r\n setRelatedStones(nextProps) {\r\n\r\n const selectedFirstItemIndex = this.getActiveItemIndex(nextProps);\r\n const features = nextProps.features.filter(feature => feature);\r\n let otherSelectedWallsIndexes = this.getSelectedWallIndexes(\r\n {part: nextProps.currentParent}, features, selectedFirstItemIndex\r\n );\r\n let unlockedIndexes = [];\r\n\r\n // console.log(\"otherSelectedWallsIndexes\", otherSelectedWallsIndexes);\r\n\r\n const fabricatorSettings = this.props.fabricatorData.settings; // set unlocked on the first positions\r\n if (nextProps.features.length && (fabricatorSettings.leadCaptureOnQuote && !(document.kvConfig.isBackend && document.kvConfig.jobId && document.kvConfig.canSaveQuote)) && !nextProps.isPhoneNumberValidated) {\r\n nextProps.features.forEach((feature, index) => {\r\n if (feature && feature.part && !getFeatureIsLocked(feature.part, false)) {\r\n unlockedIndexes.push(index);\r\n }\r\n });\r\n }\r\n\r\n const selectedExist = (selectedFirstItemIndex || selectedFirstItemIndex === 0) && selectedFirstItemIndex > -1;\r\n const indexesToReplace = selectedExist\r\n ? uniq([selectedFirstItemIndex, ...unlockedIndexes, ...otherSelectedWallsIndexes])\r\n : [...unlockedIndexes, ...otherSelectedWallsIndexes];\r\n this.setState({\r\n currentParentText: nextProps.currentParent ? nextProps.currentParent.partName : \"\",\r\n reorderedFeatures: this.getReorderedItems(indexesToReplace, nextProps, selectedExist, true),\r\n showLoader: false\r\n }, () => {\r\n if (this.needToUpdate) {\r\n const $gridBody = $(this.itemsList).find(\".ReactVirtualized__Grid\");\r\n if (this.props.windowWidth <= 991) {\r\n $gridBody.scrollLeft(this.needToUpdate);\r\n } else {\r\n $gridBody.scrollTop(this.needToUpdate);\r\n }\r\n this.needToUpdate = false;\r\n }\r\n });\r\n }\r\n\r\n getActiveItemIndex = (props) => {\r\n if (props.currentParent && props.currentParent.partId === \"room\") {\r\n return 0\r\n }\r\n const fabricatorSettings = props.fabricatorData.settings;\r\n const showPlaceHolders = document.bvConfig ? document.bvConfig.showPlaceholders : false;\r\n let isActiveItemIndex = null;\r\n if ((fabricatorSettings.leadCaptureOnQuote && !(document.kvConfig.isBackend && document.kvConfig.jobId && document.kvConfig.canSaveQuote))\r\n && !props.isPhoneNumberValidated && props.currentParent && props.currentParent.activeLockedFeature) {\r\n\r\n isActiveItemIndex = props.features.findIndex((item) => {\r\n return props.currentParent.activeLockedFeature.dbFeature.id === item.part.id()\r\n });\r\n // console.log('props.currentParent', props.currentParent);\r\n }\r\n else if (props.currentParent && props.currentParent.activeNotInVisualizerFeature) {\r\n isActiveItemIndex = props.features.findIndex((item) => {\r\n return item && item.part && (props.currentParent.activeNotInVisualizerFeature.dbFeature.id === item.part.id())\r\n })\r\n } else if (props.currentParent && props.currentParent.activeFeature) {\r\n isActiveItemIndex = props.features.findIndex((item) => {\r\n return item && item.part && (props.currentParent.activeFeatureId(showPlaceHolders) === item.part.id())\r\n })\r\n }\r\n return isActiveItemIndex\r\n };\r\n\r\n checkIfFeatureSelected = (currentFeature, currentParent = this.props.currentParent) => {\r\n if (!currentFeature) {\r\n return false\r\n }\r\n\r\n const currentFeatureId = currentFeature.dbFeature.id;\r\n\r\n if (this.props.isWizard) {\r\n const {wizardSelectedValues, wizardActiveStep} = this.props;\r\n if (!wizardSelectedValues || !wizardSelectedValues[wizardActiveStep] || !wizardSelectedValues[wizardActiveStep].selectedFeature) {\r\n return false\r\n }\r\n if (currentFeature.dbFeature.sharedFeatureName && wizardSelectedValues[wizardActiveStep].selectedFeature.dbFeature.sharedFeatureName) {\r\n return currentFeature.dbFeature.sharedFeatureName === wizardSelectedValues[wizardActiveStep].selectedFeature.dbFeature.sharedFeatureName\r\n }\r\n return currentFeatureId === wizardSelectedValues[wizardActiveStep].selectedFeature.dbFeature.id\r\n }\r\n\r\n let selected = false;\r\n if (currentFeatureId && currentParent\r\n && ((this.props.activeFeature && !this.props.activeFeature.notAvailableInVisualizer) || currentParent.firstClick[this.props.activeQuoteIndex])) {\r\n selected = currentParent.activeNotInVisualizerFeature\r\n ? currentParent.activeNotInVisualizerFeature.dbFeature.id === currentFeatureId\r\n : this.props.activeFeature && this.props.activeFeature.dbFeature.id === currentFeatureId\r\n }\r\n return selected\r\n };\r\n\r\n handleOnMobileGridScroll = ({clientWidth, scrollLeft, scrollWidth}) => {\r\n if (this.props.showItemsList && !this.state.showLoader) {\r\n const ceilScrollWidth = Math.ceil(scrollWidth);\r\n const floorScrollWidth = Math.floor(scrollWidth);\r\n const ceilScrollLeft = Math.ceil(scrollLeft);\r\n const floorScrollLeft = Math.floor(scrollLeft);\r\n if ((ceilScrollWidth - ceilScrollLeft === clientWidth)\r\n || (ceilScrollWidth - floorScrollLeft === clientWidth)\r\n || (floorScrollWidth - ceilScrollLeft === clientWidth)\r\n || (floorScrollWidth - floorScrollLeft === clientWidth)) {\r\n this.getNewFeaturesOnScroll(scrollLeft, {part: this.props.currentParent})\r\n }\r\n }\r\n };\r\n\r\n // getLoadingElementsForGrid = (isMobile) => {\r\n // const counts = getActivePartsCounts(this.props.currentParent, this.props.layoutName);\r\n // if (!counts) {\r\n // return null\r\n // }\r\n // let elements = [];\r\n // let styles = isMobile ? {} : {\r\n // height: this.props.listItemHeight\r\n // };\r\n // for (let i = 0; i <= counts ;i++ ) { // for ex. 28/3 = 10 columns\r\n // elements.push(\r\n //
    \r\n // \r\n //
    \r\n // );\r\n // }\r\n // return elements\r\n // };\r\n\r\n renderVirtualizedGrid = () => {\r\n const {windowWidth, currentParent, listItemHeight, handleUserLoginClick, isWizard, currentGroups,\r\n showListForce} = this.props;\r\n // console.log(\"renderDesktopVirtualizedGrid currentFeatures\", currentFeatures);\r\n if ((!showListForce && (currentParent && !currentParent.allFeaturesReceived)) || !this.itemsList) {\r\n return \r\n }\r\n const currentFeatures = this.state.reorderedFeatures.filter(currentFeature => currentFeature);\r\n return (windowWidth || window.innerWidth) < 991 ? (\r\n \r\n ) : (\r\n \r\n )\r\n }\r\n\r\n handleOnDesktopGridScroll = ({clientHeight, scrollHeight, scrollTop}) => {\r\n if (this.props.showItemsList && !this.state.showLoader) {\r\n const ceilScrollHeight = Math.ceil(scrollHeight);\r\n const floorScrollHeight = Math.floor(scrollHeight);\r\n const ceilScrollTop = Math.ceil(scrollTop);\r\n const floorScrollTop = Math.floor(scrollTop);\r\n if ((ceilScrollHeight - ceilScrollTop === clientHeight)\r\n || (ceilScrollHeight - floorScrollTop === clientHeight)\r\n || (floorScrollHeight - ceilScrollTop === clientHeight)\r\n || (floorScrollHeight - floorScrollTop === clientHeight)) {\r\n this.getNewFeaturesOnScroll(scrollTop, {part: this.props.currentParent})\r\n }\r\n }\r\n };\r\n\r\n changeSet = (e) => {\r\n this.props.changeSet(e.target.dataset.set);\r\n };\r\n\r\n renderVirtualizedList = () => {\r\n const {currentParent, isWizard, currentGroups, showListForce} = this.props;\r\n if ((!showListForce && (currentParent && !currentParent.allFeaturesReceived)) || !this.itemsList) {\r\n return \r\n }\r\n return \r\n }\r\n\r\n renderList = (isRowView) => {\r\n\r\n const {wizardConfig, currentParent, showListForce} = this.props;\r\n\r\n if (wizardConfig.length) {\r\n const existingWizSetup = wizardConfig.find(wizObject => {\r\n return wizObject.featureGroupName === currentParent.dbName || wizObject.featureGroupName === currentParent.partName\r\n })\r\n if (existingWizSetup && existingWizSetup.filterGroups.length && !existingWizSetup.isFinished && existingWizSetup.enableForQuoting) {\r\n if ((!showListForce && (currentParent && !currentParent.allFeaturesReceived)) || !this.itemsList) {\r\n return \r\n }\r\n return \r\n }\r\n }\r\n\r\n return isRowView\r\n ? this.renderVirtualizedList()\r\n : this.renderVirtualizedGrid()\r\n }\r\n\r\n render() {\r\n const {selectionWindowView} = this.props;\r\n const isRowView = selectionWindowView === 4;\r\n return (\r\n \r\n
    {\r\n this.itemsList = node;\r\n this.props.setRef(node);\r\n }}\r\n className={\"bv-item-list bv-item-list--\" + this.props.selectionWindowView\r\n + (this.props.filtersVisible ? \" bv-item-list--filters-visible\" : \"\")\r\n + (isRowView ? \" bv-item-list--row\" : \" bv-item-list--column\")}>\r\n {this.props.showItemsList && !this.state.showLoader\r\n ? this.renderList(isRowView)\r\n : \r\n }\r\n
    \r\n {this.state.additionalFeaturesLoading ? this.getLoadingFeatures() : null}\r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n\r\n const {wizardConfig, wizardSelectedValues, wizardActiveStep} = store.wizardState;\r\n\r\n return {\r\n selectionWindowView: store.selectionState.selectionWindowView,\r\n navigationViewType: store.selectionState.selectionWindowView, // needed for NavigationItemsList\r\n isPhoneNumberValidated: store.userState.isPhoneNumberValidated,\r\n windowWidth: store.serverState.windowWidth,\r\n activeFeature: store.selectionState.activeFeature,\r\n filtersVisible: store.filterState.showFilters,\r\n fabricatorData: store.fabricatorState,\r\n userPopupOpened: store.userState.userPopupOpened,\r\n filterGroups: store.filterState.filterGroups,\r\n showRestorePopup: store.bathroomVisualizerState.showRestorePopup,\r\n selectedFilters: store.filterState.selectedFilters,\r\n userIsLoggedIn: store.userState.userIsLoggedIn,\r\n activeQuoteIndex: store.quotesState.activeQuoteIndex,\r\n navItemPositionModal: store.navigationState.navItemPositionModal,\r\n wizardConfig,\r\n wizardSelectedValues,\r\n wizardActiveStep,\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, {\r\n toggleSelectionFeatureInfo,\r\n setActiveFeature,\r\n toggleShowDescriptionCover,\r\n toggleShowRestorePopup,\r\n toggleUpdateDisableFeatureGroupRadio,\r\n toggleNavItemPositionModal,\r\n updateCanvasCount,\r\n})(SelectionMainList);\r\n","import React from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport {setCameFromPage, toggleSelectionFeatureInfo} from \"../../../actions/actionFunctions\";\r\nimport FeatureThumbnail from \"../../visComponents/featureThumbnail\";\r\nimport FeatureName from \"../../visComponents/featureName\";\r\nimport FeatureInfoDescription from \"../selectionFeatureInfo/featureInfoDescription\";\r\nimport FeatureInfoPrice from \"../selectionFeatureInfo/featureInfoPrice\";\r\nimport FeatureInfoPriceLocked from \"../selectionFeatureInfo/featureInfoPriceLocked\";\r\nimport {getFeatureIsLocked} from \"../../../misc/helpers\";\r\nimport SelectionMainListRowItemButtons from \"./rowItemButtons\";\r\nimport RowItemRelatedProductsButton from \"./rowItemRelatedProductsButton\";\r\nimport FeatureCartItemsCount from \"../featureCartItemsCount\";\r\nimport {wizardGroupInterface} from \"../../../interfaces/wizardItemInterface\";\r\nimport {shouldReplaceSelectionInfoFeature} from \"../../qkbPages/materialsCommon/materialsCommonFunctions\";\r\n\r\n\r\nconst RowItem = (props) => {\r\n\r\n const {selected, currentFeature, fabricatorData, handleFeatureClick, toggleSelectionFeatureInfo, setCameFromPage,\r\n isRelated, windowWidth, isWizard, wizardGroup} = props;\r\n const fabricatorSettings = fabricatorData.settings;\r\n\r\n const goToFeatureInfo = () => {\r\n if (isRelated) {\r\n return false\r\n }\r\n const selectedFeature = shouldReplaceSelectionInfoFeature(currentFeature);\r\n toggleSelectionFeatureInfo(selectedFeature);\r\n setCameFromPage(\"materials\"); // no more visualizer or shoppingcart switch\r\n };\r\n\r\n const showPriceLocked = getFeatureIsLocked(currentFeature);\r\n const showPrice = fabricatorSettings.showPricing && !fabricatorData.hideCheckoutBreakdownCost\r\n && !showPriceLocked && !fabricatorData.hidePricesFromUser;\r\n\r\n const handleRowItemClick = (event) => {\r\n if (isRelated) {\r\n return false\r\n }\r\n const preventFeatureClickClasses = [\".m-button\", \".m-quantity\", \".m-triangle\"];\r\n if (!isWizard && event && preventFeatureClickClasses.some(className => event.target.closest(className))) {\r\n return false\r\n }\r\n handleFeatureClick({part: currentFeature}, event);\r\n };\r\n\r\n const isMobile = windowWidth < 991;\r\n\r\n const infoButtonVisible = !isWizard || !wizardGroup || !wizardGroup.skipProductInfo;\r\n\r\n return (\r\n
    \r\n
    \r\n \r\n {!isRelated && isMobile ? (\r\n \r\n \r\n \r\n ) : null}\r\n \r\n
    \r\n
    \r\n

    \r\n \r\n
    \r\n
    \r\n {showPrice ? : null}\r\n {showPriceLocked ? : null}\r\n
    \r\n {!isRelated && !isMobile ? (\r\n
    \r\n \r\n
    \r\n ) : null}\r\n \r\n
    \r\n
    \r\n
    \r\n )\r\n};\r\n\r\nRowItem.propTypes = {\r\n selected: PropTypes.bool,\r\n isRelated: PropTypes.bool,\r\n isWizard: PropTypes.bool,\r\n wizardGroup: PropTypes.shape(wizardGroupInterface),\r\n currentFeature: PropTypes.object.isRequired,\r\n handleFeatureClick: PropTypes.func.isRequired,\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const {productNoteEditorVisible} = store.selectionState;\r\n return {\r\n productNoteEditorVisible,\r\n windowWidth: store.serverState.windowWidth,\r\n fabricatorData: store.fabricatorState,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n toggleSelectionFeatureInfo,\r\n setCameFromPage\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(RowItem);\r\n","import React from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nconst FeatureCartItemsCount = (props) => {\r\n\r\n const {currentFeatureId, cartItems, advancedQuotingSearchItem, activeQuoteIndex} = props;\r\n\r\n const getAddedCartItemsCount = () => {\r\n if (advancedQuotingSearchItem && advancedQuotingSearchItem.cartFeature) {\r\n if (advancedQuotingSearchItem.cartFeature.dbFeature.id === currentFeatureId) {\r\n return advancedQuotingSearchItem.quantity\r\n }\r\n return 0\r\n }\r\n let currentFeatureCartItemsCount = 0;\r\n const matchingCartItems = cartItems.filter((cartItem) => {\r\n return (currentFeatureId === cartItem.cartFeature.dbFeature.id) && (cartItem.currentQuote === activeQuoteIndex)\r\n });\r\n if (matchingCartItems.length) {\r\n currentFeatureCartItemsCount = matchingCartItems.reduce((total, cartItem) => {\r\n if (cartItem.partId === 'slabs') { // do not count slabs QCDES-1730\r\n return total + 0\r\n }\r\n return total + cartItem.quantity\r\n }, 0)\r\n }\r\n return +(+(currentFeatureCartItemsCount).toFixed(3)).toFixed(2)\r\n }\r\n\r\n const currentFeatureCartItemsCount = getAddedCartItemsCount();\r\n if (!currentFeatureCartItemsCount) {\r\n return null\r\n }\r\n\r\n return (\r\n {currentFeatureCartItemsCount}\r\n )\r\n};\r\n\r\nFeatureCartItemsCount.propTypes = {\r\n currentFeatureId: PropTypes.number.isRequired,\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const {cartItems} = store.cartState;\r\n const {activeQuoteIndex} = store.quotesState;\r\n const {advancedQuotingSearchItem} = store.advancedQuotingState;\r\n return {\r\n cartItems,\r\n activeQuoteIndex,\r\n advancedQuotingSearchItem,\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps)(FeatureCartItemsCount);\r\n","import React from \"react\";\r\nimport {connect} from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\nimport {s3FilterImagePath} from \"../../../misc/utils\";\r\nimport {setSelectedFilters} from \"../../../actions/actionFunctions\";\r\nimport {replaceFilterArrayValue} from \"../../visComponents/navigation/newFilters/filterSwitchers\";\r\n\r\nconst WizardFilterItem = (props) => {\r\n const {currentFilterValue, filterGroup, selectedFilters, setSelectedFilters, listItemHeight, isMobile} = props;\r\n\r\n const getFilterItemThumbnail = () => {\r\n const additionalImages = currentFilterValue.additionalImages;\r\n if (Array.isArray(additionalImages) && additionalImages.length) {\r\n return additionalImages[0].imageUrl\r\n }\r\n return s3FilterImagePath(currentFilterValue.icon);\r\n }\r\n\r\n const wizardFilterValueClick = () => {\r\n if (Array.isArray(currentFilterValue.items) && currentFilterValue.items.length) {\r\n debugger;//eslint-disable-line\r\n this.setParentFilterValues(currentFilterValue.items.map(fValue => fValue.id))\r\n } else {\r\n setSelectedFilters(replaceFilterArrayValue([...selectedFilters], {\r\n filterId: currentFilterValue.id,\r\n filterGroupId: filterGroup.id\r\n }));\r\n }\r\n };\r\n\r\n let thumbnail = getFilterItemThumbnail();\r\n const isColor = (filterGroup.name || \"\").toLowerCase().includes(\"color\");\r\n\r\n const styles = {\r\n backgroundSize: isColor ? \"cover\" : \"inherit\",\r\n };\r\n if (thumbnail) {\r\n styles.backgroundImage = \"url(\" + thumbnail + \")\";\r\n }\r\n if (!thumbnail && currentFilterValue && isColor) {\r\n styles.backgroundColor = currentFilterValue.value;\r\n }\r\n\r\n const selected = selectedFilters.some(filterObject => {\r\n return filterObject.filterGroupId === filterGroup.id && filterObject.filterId === currentFilterValue.id\r\n });\r\n\r\n return (\r\n
    \r\n
    \r\n
    {currentFilterValue.displayText}
    \r\n
    \r\n )\r\n\r\n}\r\n\r\nWizardFilterItem.propTypes = {\r\n filterGroup: PropTypes.object.isRequired,\r\n currentFilterValue: PropTypes.object.isRequired,\r\n listItemHeight: PropTypes.number,\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {selectionWindowView} = store.selectionState;\r\n const {selectedFilters} = store.filterState;\r\n const {isMobile} = store.serverState;\r\n return {\r\n selectionWindowView,\r\n selectedFilters,\r\n isMobile\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setSelectedFilters\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(WizardFilterItem)\r\n","import React from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport {connect} from \"react-redux\";\r\nimport {shiftFilterTitleInterface} from \"../../../interfaces/shiftFilterTitleInterface\";\r\nimport SelectionGridFiltersTitleDropdown from \"./selectionGridFiltersTitleDropdown\";\r\n\r\nconst SelectionGridFiltersTitle = (props) => {\r\n\r\n const {style, filterTitle, allTitles, filtersGrid, isTopTitle, isHorizontal} = props;\r\n\r\n const prevTitle = allTitles.find(renderFeature => {\r\n return renderFeature.titleIndex === filterTitle.titleIndex - 1\r\n });\r\n const nextTitle = allTitles.find(renderFeature => {\r\n return renderFeature.titleIndex === filterTitle.titleIndex + 1\r\n });\r\n\r\n const scrollToTitle = (title) => {\r\n if (isHorizontal) {\r\n const scrollLeft = title.titleIndex === 0 ? 0 : title.scrollLeft + 1\r\n // console.log(\"title to scroll\", title);\r\n filtersGrid.current.scrollToPosition({scrollLeft});\r\n } else {\r\n const scrollTop = title.titleIndex === 0 ? 0 : title.scrollTop + 5\r\n // console.log(\"title to scroll\", title);\r\n filtersGrid.current.scrollToPosition({scrollTop});\r\n }\r\n\r\n\r\n // const nextTitleElement = document.querySelector(`[data-title=\"${nextTitle.titleIndex}\"]`);\r\n // console.log(\"nextTitleElement\", nextTitleElement);\r\n //\r\n // if (nextTitleElement) {\r\n // const computed = window.getComputedStyle(nextTitleElement);\r\n // const top = computed.getPropertyValue('top')\r\n // console.log(\"realTop.top\", top);\r\n // filtersGrid.current.scrollToPosition({scrollTop: top});\r\n // }\r\n // const {scrollTop} = filtersGrid.current.getOffsetForCell({rowIndex, columnIndex})\r\n // filtersGrid.current.scrollToPosition({scrollTop: scrollTop + 1});\r\n // filtersGrid.current.scrollToCell ({columnIndex, rowIndex});\r\n\r\n // animate({\r\n // fromValue: this.scrollTop,\r\n // toValue: offset,\r\n // onUpdate: (scrollTop, callback) => this.setState({scrollTop}, callback),\r\n // onComplete: () => console.log('Scroll animation complete!'),\r\n // });\r\n }\r\n\r\n const arrowUpDisabled = !prevTitle;\r\n const arrowDownDisabled = !nextTitle;\r\n\r\n return (\r\n
    \r\n {isHorizontal ? (\r\n {filterTitle.filterValue.displayText}\r\n ) : (\r\n \r\n )}\r\n
    \r\n
    \r\n
    \r\n )\r\n}\r\n\r\nSelectionGridFiltersTitle.propTypes = {\r\n style: PropTypes.object,\r\n filterTitle: PropTypes.shape(shiftFilterTitleInterface).isRequired,\r\n allTitles: PropTypes.array.isRequired,\r\n filtersGrid: PropTypes.any,\r\n isTopTitle: PropTypes.bool,\r\n isHorizontal: PropTypes.bool,\r\n}\r\n\r\nconst mapStateToProps = () => {\r\n return {};\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(SelectionGridFiltersTitle)\r\n","import {useEffect, useState} from \"react\";\r\n\r\nimport {COUNTERTOP_GROUP} from \"../../kvComponent/core/constants\";\r\nimport {getFilterGroupValues} from \"../../../misc/utils\";\r\nimport {getBvGroupFilterValues} from \"../../../api/server-api\";\r\nimport {setActivePartFilterValues} from \"../../../misc/filtersFunctions\";\r\n\r\n/**\r\n *\r\n * @param currentParent {object}\r\n * @param currentFeatures {array}\r\n * @param filterGroups {array}\r\n * @param fabricatorData {object}\r\n * @returns {object}\r\n */\r\nexport const getWithFilters = (currentParent, currentFeatures, filterGroups, fabricatorData) => {\r\n\r\n if (!currentParent) {\r\n return {withFilters: false, filtersLoading: false}\r\n }\r\n\r\n let withFilters = false;\r\n const materialFilterGroup = filterGroups.find(filterGroup => filterGroup.name.trim() === \"Countertop Material\");\r\n\r\n const caesProfiles = fabricatorData.isCaesarStone && (\r\n (fabricatorData.fabricatorName && fabricatorData.fabricatorName.includes(\"QC Master Account US\"))\r\n || (fabricatorData.fabricatorName && fabricatorData.fabricatorName.includes(\"QC Master Account CAN\"))\r\n || (fabricatorData.fabricatorName && fabricatorData.fabricatorName === \"Caesarstone new versions NEW\")\r\n || (fabricatorData.wasCreatedFromFabricator && fabricatorData.wasCreatedFromFabricator.includes(\"QC Master Account US\"))\r\n || (fabricatorData.wasCreatedFromFabricator && fabricatorData.wasCreatedFromFabricator.includes(\"QC Master Account CAN\"))\r\n || (fabricatorData.wasCreatedFromFabricator && fabricatorData.wasCreatedFromFabricator === \"Caesarstone new versions NEW\")\r\n );\r\n\r\n if ((fabricatorData.isLowes || caesProfiles)\r\n && COUNTERTOP_GROUP.includes(currentParent.partId) && materialFilterGroup && materialFilterGroup.values) {\r\n if (!currentParent.filtersReceived) {\r\n return {withFilters, filtersLoading: true}\r\n } else if (materialFilterGroup.values.some(filterValue => currentParent.filtersReceived.includes(filterValue.id))) {\r\n const filterValuesAvailable = materialFilterGroup.values.filter(filterValue => {\r\n return currentParent.filtersReceived.includes(filterValue.id)\r\n })\r\n // console.log(\"filterValuesAvailable\", filterValuesAvailable);\r\n withFilters = filterValuesAvailable.some((filterValue) => {\r\n const countertopsFiltered = currentFeatures.filter(feature => {\r\n if (!feature || !feature.part) { // just in case\r\n return false\r\n }\r\n const countertopFilters = getFilterGroupValues(feature.part, materialFilterGroup);\r\n return countertopFilters && countertopFilters.includes(filterValue.id)\r\n });\r\n return countertopsFiltered.length\r\n })\r\n }\r\n }\r\n return {withFilters, filtersLoading: false}\r\n}\r\n\r\nexport const useGetFiltersRequest = (useRequest, requestFilters, featureGroup, allFilterGroups) => {\r\n\r\n const [filtersLoaded, setFiltersLoaded] = useState(!requestFilters);\r\n\r\n const checkFilters = async () => {\r\n const featureGroupFiltersResponse = await getBvGroupFilterValues(featureGroup.dbName || featureGroup.partName, null, false);\r\n setActivePartFilterValues(featureGroupFiltersResponse.data, featureGroup, allFilterGroups);\r\n setFiltersLoaded(true)\r\n }\r\n\r\n useEffect(() => {\r\n if (useRequest && requestFilters) {\r\n checkFilters();\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [requestFilters, featureGroup])\r\n\r\n return filtersLoaded\r\n}\r\n","import React, {PureComponent} from 'react'\r\nimport { connect } from 'react-redux';\r\nimport classnames from 'classnames';\r\n\r\nimport Analytics from './../../analytics';\r\nimport {setGalleryActiveImageIndex, toggleGalleryVisible} from \"../../actions/selectionFunctions\";\r\nimport {featureThumbnailUrl} from \"../../misc/helpers\";\r\nimport {THUMBNAIL_SIZES} from \"../../misc/utils\";\r\n\r\nclass GalleryViewClass extends PureComponent {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n images: [],\r\n galleryOpened: false\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n const {activeFeature, galleryImages} = this.props;\r\n this.setState({\r\n images: [{\r\n id: 1,\r\n url: featureThumbnailUrl(activeFeature),\r\n preview: featureThumbnailUrl(activeFeature, THUMBNAIL_SIZES.medium)\r\n }, // main image thumbnail\r\n ...galleryImages\r\n ]\r\n });\r\n setTimeout(() => {\r\n this.setState({\r\n galleryOpened: true\r\n });\r\n }, 0)\r\n }\r\n\r\n componentWillUnmount() {\r\n this.props.setGalleryActiveImageIndex(0);\r\n }\r\n\r\n handleCloseClick = () => {\r\n Analytics.sendClickEvent('gallery-close');\r\n this.setState({\r\n galleryOpened: false\r\n }, () => {\r\n setTimeout(() => {\r\n this.props.toggleGalleryVisible(false);\r\n }, 300)\r\n })\r\n };\r\n\r\n thumbnailClick = (activeImage, activeImageIndex) => {\r\n Analytics.sendClickEvent('view-gallery-image-' + activeImage.id)\r\n this.props.setGalleryActiveImageIndex(activeImageIndex)\r\n };\r\n\r\n render() {\r\n const activeImage = this.state.images[this.props.galleryActiveImageIndex];\r\n return (\r\n
    \r\n
    e.stopPropagation()}>\r\n
    \r\n
    \r\n
    \r\n {activeImage\r\n ? {activeImage.name}\r\n window.open(activeImage.url, \"_blank\")}\r\n className=\"gallery-view__main-image\" />\r\n : null}\r\n
    \r\n
    \r\n
      \r\n {this.state.images.map((g, gIndex) => {\r\n return (\r\n
    • this.thumbnailClick(g, gIndex)}/>\r\n )\r\n })}\r\n
    \r\n
    \r\n
    \r\n
    \r\n );\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n let { galleryActiveImageIndex, selectionFeatureInfo, galleryShowActiveFeature, activeFeature} = store.selectionState;\r\n const showFeature = galleryShowActiveFeature ? galleryShowActiveFeature : selectionFeatureInfo || activeFeature;\r\n return {\r\n galleryImages: showFeature.dbFeature.galleryImages || [],\r\n galleryActiveImageIndex,\r\n activeFeature: showFeature,\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, {\r\n toggleGalleryVisible,\r\n setGalleryActiveImageIndex\r\n})(GalleryViewClass);\r\n","import React, {useEffect, useState} from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {connect} from \"react-redux\";\r\nimport {injectIntl} from 'react-intl';\r\n\r\nimport {toggleShowDescriptionCover} from \"../../actions/actionFunctions\";\r\nimport {wizardGroupInterface} from \"../../interfaces/wizardItemInterface\";\r\nimport {useIsMounted, usePrevious} from \"../../misc/helperHooks\";\r\nimport {getFeatureGroupDescription} from \"../look/grohe/groheNavigation/groheFunctions\";\r\n\r\nlet timeoutId = 0;\r\n\r\nconst SelectionDescriptionCover = (props) => {\r\n\r\n const {activePart, wizardGroup, intl, showDescriptionCover, toggleShowDescriptionCover, windowWidth,\r\n fabricatorData} = props;\r\n\r\n const isMounted = useIsMounted();\r\n const prevWizardGroup = usePrevious(wizardGroup);\r\n const prevActivePart = usePrevious(activePart);\r\n const [coverText, setCoverText] = useState(\"\");\r\n\r\n const getDescriptionText = () => {\r\n if (wizardGroup && wizardGroup.description) {\r\n return wizardGroup.description\r\n }\r\n if (!activePart) {\r\n return \"\"\r\n }\r\n return getFeatureGroupDescription(activePart.part, intl, fabricatorData)\r\n };\r\n\r\n const showCover = () => {\r\n clearTimeout(timeoutId);\r\n toggleShowDescriptionCover(false);\r\n timeoutId = setTimeout(() => {\r\n const descText = getDescriptionText();\r\n if (isMounted() && descText) {\r\n setCoverText(descText);\r\n toggleShowDescriptionCover(true);\r\n }\r\n }, 2000);\r\n }\r\n\r\n useEffect(() => {\r\n if (!prevWizardGroup && wizardGroup || (prevWizardGroup && wizardGroup && (prevWizardGroup.id !== wizardGroup.id))) {\r\n showCover();\r\n } else if (!prevActivePart && activePart || (prevActivePart && activePart && (prevActivePart.part.partName !== activePart.part.partName))) {\r\n showCover();\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [activePart, wizardGroup]);\r\n\r\n let styles = {};\r\n if (coverText && (coverText.length > 250) && (windowWidth < 991)) {\r\n styles = windowWidth < 640\r\n ? {fontSize: \"10px\"}\r\n : windowWidth < 800 ? {fontSize: \"13px\"} : {}\r\n }\r\n\r\n return (\r\n
    \r\n {coverText}\r\n
    \r\n )\r\n}\r\n\r\nSelectionDescriptionCover.propTypes = {\r\n activePart: PropTypes.object,\r\n wizardGroup: PropTypes.shape(wizardGroupInterface),\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n showDescriptionCover: store.selectionState.showDescriptionCover,\r\n windowWidth: store.serverState.windowWidth,\r\n fabricatorData: store.fabricatorState,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n toggleShowDescriptionCover\r\n}\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(SelectionDescriptionCover)\r\n)\r\n","import React, {useEffect, useRef} from \"react\";\r\nimport { Player } from 'video-react';\r\nimport { connect } from \"react-redux\";\r\nimport $ from 'jquery';\r\n\r\nimport {toggleNotCompatibleView} from \"../../actions/selectionFunctions\";\r\nimport {toggleShowDescriptionCover} from \"../../actions/actionFunctions\";\r\nimport ActionTypes from \"../../misc/actionTypes\";\r\n\r\nconst NotCompatibleView = (props) => {\r\n\r\n const {activePartRelatedItemIndex, windowWidth, activeFeature} = props;\r\n const player = useRef(null);\r\n\r\n useEffect(() => {\r\n const isMobile = windowWidth < 991;\r\n if (!isMobile) {\r\n player.current.play();\r\n }\r\n props.toggleShowDescriptionCover(false);\r\n return () => {\r\n props.toggleNotCompatibleView(false); // on unmount component\r\n }\r\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n useEffect(() => {\r\n // skip initial render\r\n return () => {\r\n props.toggleNotCompatibleView(false); // on unmount component\r\n }\r\n }, [activePartRelatedItemIndex]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n const updateDesignButtonClick = () => {\r\n const navFeature = activeFeature.getParent()\r\n .navigationSubItems()\r\n .find(navItem => navItem.part.dbFeature.id === activeFeature.dbFeature.id) // find the real feature\r\n if (navFeature) { // just in case\r\n navFeature.part.applyFeatureIfNotCompatible(); // first set new rules for this feature\r\n navFeature.part.handleClick(); // change item\r\n $(window).trigger(ActionTypes.UPDATE_ALL_ITEMS); // update footer items\r\n }\r\n props.toggleNotCompatibleView(false); // then remove the view\r\n }\r\n\r\n const videoPath = \"https://intro-videos.s3.amazonaws.com/not-compatible-icon_v1.webm\";\r\n const isMobile = windowWidth < 991;\r\n\r\n return (\r\n
    \r\n {isMobile ? null : (\r\n
    \r\n \r\n
    \r\n )}\r\n Not Compatible\r\n

    Item is not compatible with current design. Would you like to update your design?

    \r\n

    \r\n \r\n

    \r\n
    \r\n )\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const {activeFeature, activePartRelatedItemIndex} = store.selectionState;\r\n return {\r\n activeFeature,\r\n activePartRelatedItemIndex,\r\n windowWidth: store.serverState.windowWidth,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n toggleNotCompatibleView,\r\n toggleShowDescriptionCover\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(NotCompatibleView);\r\n","import React, {Component} from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { connect } from \"react-redux\";\r\nimport $ from 'jquery';\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport {\r\n setSelectionWindowView,\r\n} from \"../../actions/actionFunctions\";\r\nimport SelectionViewSwitchers from './selectionViewSwitchers';\r\n\r\nimport Analytics from './../../analytics';\r\n\r\nimport BacksplashSelect from './backsplashSelect';\r\nimport FiltersButton from './filtersButton';\r\nimport CountertopSwitchers from \"../kvComponent/navigation/countertopSwitchers\";\r\nimport CabinetSwitchers from \"../kvComponent/navigation/cabinetSwitchers\";\r\nimport ActionTypes from \"../../misc/actionTypes\";\r\nimport ShareButton from \"../common/shareButton\";\r\nimport BodyPanelRadio from \"../visComponents/navigation/desktop/bodyPanelRadio\";\r\nimport {CABINET_GROUP, COUNTERTOP_GROUP} from \"../kvComponent/core/constants\";\r\nimport LanguageSwitcher from \"../common/languageSwitcher\";\r\nimport ShoppingCartButton from \"../ui/shoppingCartButton\";\r\nimport {COUNTERTOP_GROUP_BATHROOM} from \"../bvSceneComponent/core/constants\";\r\nimport LookAllWallsRadioButton from \"../look/lookNavigation/lookMain/lookAllWallsRadioButton\";\r\nimport {getCurrentLayout} from \"../appLayout\";\r\nimport {getCommonVisualizerType} from \"../../config\";\r\n\r\n\r\nclass SelectionMainHeader extends Component {\r\n\r\n static propTypes = {\r\n activeSubPart: PropTypes.object,\r\n searchText: PropTypes.string.isRequired,\r\n handleSearchInputChange: PropTypes.func.isRequired,\r\n };\r\n\r\n handleChangeListView = (e) => {\r\n Analytics.sendClickEvent(\"change-list-view-\" + e.target.dataset.view);\r\n this.props.handleChangeListView(+e.target.dataset.view);\r\n };\r\n\r\n backsplashSelectClick = () => {\r\n $(window).trigger('resize');\r\n $(window).trigger(ActionTypes.UPDATE_QUOTING_TOOL);\r\n };\r\n\r\n render() {\r\n const {activeSubPart, fabricatorData, isMobile} = this.props;\r\n const layout = getCurrentLayout();\r\n const fabricatorSettings = fabricatorData.settings;\r\n\r\n let subPartPartId = '';\r\n if (activeSubPart) {\r\n subPartPartId = activeSubPart.part.partId;\r\n }\r\n\r\n const isCabinet = CABINET_GROUP.includes(subPartPartId);\r\n\r\n const isCountertop = COUNTERTOP_GROUP.includes(subPartPartId) || COUNTERTOP_GROUP_BATHROOM.includes(subPartPartId);\r\n\r\n const showBacksplashSelect = subPartPartId === \"backsplash\" && (getCommonVisualizerType() === \"kitchen\");\r\n\r\n const showDisabledRadioButtons = activeSubPart && activeSubPart.part.canBeDisabled;\r\n\r\n return (\r\n
    \r\n {!fabricatorData.isCaesarStone && (showBacksplashSelect || isCabinet || isCountertop || showDisabledRadioButtons) ? (\r\n
    \r\n {showDisabledRadioButtons && activeSubPart ? : null}\r\n {showBacksplashSelect ? : null}\r\n {(isCabinet || isCountertop) && activeSubPart ? (\r\n
    \r\n {isCabinet\r\n ? layout.isNewLayout\r\n ? \r\n : \r\n : null}\r\n {isCountertop\r\n ? layout.isNewLayout\r\n ? \r\n : \r\n : null}\r\n
    \r\n ) : null}\r\n
    \r\n ) : null}\r\n
    \r\n {subPartPartId === \"backsplash\" && isMobile\r\n ? null\r\n : }\r\n
    \r\n \r\n {(placeholder) => (\r\n \r\n )}\r\n \r\n {this.props.searchText ? (\r\n
    \r\n
    \r\n {isMobile && fabricatorSettings.enableSharing ? : null}\r\n {isMobile ? : null}\r\n {fabricatorData.isCaesarStone ? null : }\r\n \r\n
    \r\n
    \r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {selectionWindowView, selectionFeatureInfo, activeFeature} = store.selectionState;\r\n const {isMobile} = store.serverState;\r\n return {\r\n selectionWindowView,\r\n selectionFeatureInfo,\r\n isMobile,\r\n fabricatorData: store.fabricatorState,\r\n activeFeature, // to update active feature\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n handleChangeListView: setSelectionWindowView,\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(SelectionMainHeader);\r\n","import React, {Component} from 'react';\r\nimport $ from 'jquery';\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport {getCurrentLayout} from '../appLayout';\r\nimport SelectionFooterSubPart from \"./selectionFooterSubPart\";\r\nimport ActionTypes from \"../../misc/actionTypes\";\r\nimport BodySwipable from \"../visComponents/navigation/desktop/bodySwipable\";\r\n\r\nexport default class SelectionFooterSubParts extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n relatedItems: [],\r\n shadowLeft: -100,\r\n shadowRight: 0,\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n this.setRelatedItems(this.props);\r\n // this.footerList.addEventListener(\"scroll\", this.handleFooterListScroll);\r\n $(window).on(ActionTypes.UPDATE_ALL_ITEMS, this.updateItems);\r\n setTimeout(() => {\r\n this.scrollToActiveSubPart(this.props.activePartRelatedItemIndex, 0);\r\n }, 0)\r\n }\r\n\r\n componentWillUnmount() {\r\n $(window).off(ActionTypes.UPDATE_ALL_ITEMS, this.updateItems);\r\n // this.footerList.removeEventListener(\"scroll\", this.handleFooterListScroll);\r\n }\r\n\r\n componentWillReceiveProps(nextProps) {\r\n if (this.props.visualizerIsChanging && !nextProps.visualizerIsChanging) {\r\n this.setRelatedItems(nextProps);\r\n }\r\n }\r\n\r\n scrollToActiveSubPart = (activePartRelatedItemIndex, animationTime = 500) => {\r\n if (this.footerList) {\r\n const maxScroll = this.footerList.scrollWidth - this.footerList.clientWidth;\r\n const scrollIndex = this.props.windowWidth < 991 ? 50 : 40;\r\n const neededScroll = scrollIndex*activePartRelatedItemIndex;\r\n const scrollLeft = (maxScroll > 0) && (neededScroll > maxScroll) ? maxScroll : neededScroll;\r\n $(this.footerList).animate({scrollLeft}, animationTime);\r\n }\r\n };\r\n\r\n handleFooterListScroll = (e) => {\r\n // console.log('e', e.target.scrollLeft);\r\n this.setState({\r\n shadowLeft: e.target.scrollLeft > 100 ? 0 : -100 + e.target.scrollLeft,\r\n shadowRight: e.target.scrollLeft > 100 ? -100 : 0 - e.target.scrollLeft\r\n });\r\n };\r\n\r\n updateItems = () => {\r\n this.setRelatedItems(this.props)\r\n };\r\n\r\n setRelatedItems = (nextProps = this.props) => {\r\n // console.log('nextProps.activePart', nextProps.activePart);\r\n // console.log('activePart.subParts(false)', activePart.subParts(false));\r\n const layout = getCurrentLayout();\r\n // console.log(\"setRelatedItems layout\", layout);\r\n if (layout.qtCategories && nextProps.qtActiveCategory) {\r\n const qtActiveCategory = layout.qtCategories.find(qtCategory => qtCategory.name === nextProps.qtActiveCategory)\r\n || layout.qtCategories[0]; // cases when visualizerType is changed\r\n this.setState({\r\n relatedItems: qtActiveCategory.subParts\r\n });\r\n } else {\r\n this.setState({\r\n relatedItems: nextProps.activePart.subParts(false)\r\n });\r\n }\r\n };\r\n\r\n getSubPartsList = (withShoppingCart = false) => {\r\n const {activePartRelatedItemIndex, showAdvancedQuoting, visualizersLoaded, networkConnection} = this.props;\r\n return (\r\n \r\n {/*
    */}\r\n
    this.footerList = el}>\r\n {this.state.relatedItems.map((item, index) => {\r\n if (!visualizersLoaded.includes(document.kvConfig.visualizerType)) {\r\n return null\r\n }\r\n if (showAdvancedQuoting && (index !== activePartRelatedItemIndex) && window.location.href.includes(\"materials\")) {\r\n return null\r\n }\r\n if (item.part && item.part.partId === \"slabs\") {\r\n return null\r\n }\r\n return \r\n })}\r\n {withShoppingCart ? (\r\n \r\n ) : null}\r\n
    \r\n {/*
    */}\r\n \r\n )\r\n }\r\n}\r\n","import React from \"react\";\r\nimport {connect} from \"react-redux\";\r\nimport {withRouter} from \"react-router-dom\";\r\nimport {FormattedMessage} from \"react-intl\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport {\r\n toggleSelectionFeatureInfo, toggleSelectionWindow, toggleBathroomVisualizerOpen\r\n} from \"../../../actions/actionFunctions\";\r\nimport {useChangeWizardStepRoute} from \"../materialsWizard/useChangeWizardStepRoute\";\r\n\r\nconst MaterialsFooterBackButton = (props) => {\r\n\r\n const {cameFromPage, selectionFeatureInfo, showAdvancedQuoting, toggleSelectionWindow, toggleBathroomVisualizerOpen,\r\n selectionGroup, toggleSelectionFeatureInfo, history, wizardActiveStep, checkForSubStepChange, subStepChange,\r\n isWizard} = props;\r\n\r\n const {changeWizardStepRoute} = useChangeWizardStepRoute();\r\n\r\n const handleBackButtonClick = () => {\r\n if (cameFromPage === \"visualizer\") {\r\n toggleSelectionWindow(false, selectionGroup);\r\n toggleBathroomVisualizerOpen(true);\r\n history.push('/visualizer');\r\n return;\r\n } else if (selectionFeatureInfo) {\r\n toggleSelectionFeatureInfo(null);\r\n if (cameFromPage === \"shoppingcart\") {\r\n history.push(\"/shoppingcart\");\r\n }\r\n return;\r\n } else if (showAdvancedQuoting) {\r\n history.push(\"/shoppingcart\");\r\n return;\r\n } else if (checkForSubStepChange && subStepChange && !checkForSubStepChange(\"back\")) {\r\n subStepChange();\r\n return;\r\n }\r\n if (isWizard) {\r\n changeWizardStepRoute(wizardActiveStep - 1);\r\n }\r\n }\r\n\r\n return (\r\n \r\n )\r\n\r\n};\r\n\r\nMaterialsFooterBackButton.propTypes = {\r\n isWizard: PropTypes.bool,\r\n checkForSubStepChange: PropTypes.func,\r\n subStepChange: PropTypes.func,\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {selectionGroup, selectionFeatureInfo} = store.selectionState;\r\n const {cameFromPage} = store.cartState;\r\n const {wizardActiveStep} = store.wizardState;\r\n const {showAdvancedQuoting} = store.advancedQuotingState;\r\n\r\n return {\r\n selectionGroup,\r\n selectionFeatureInfo,\r\n cameFromPage,\r\n wizardActiveStep,\r\n showAdvancedQuoting,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n toggleSelectionWindow,\r\n toggleBathroomVisualizerOpen,\r\n toggleSelectionFeatureInfo,\r\n};\r\n\r\nexport default withRouter(\r\n connect(mapStateToProps, mapDispatchToProps)(MaterialsFooterBackButton)\r\n)\r\n","import React from 'react';\r\nimport $ from \"jquery\";\r\nimport {connect} from \"react-redux\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport {setMaterialsAgentTutorialFinished, showMaterialsAgentTutorial} from \"../../actions/tutorialFunctions\";\r\nimport Tutorial from \"./tutorial\";\r\n\r\n\r\nclass MaterialsAgentTutorial extends Tutorial {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n ringStyles: {\r\n left: 0,\r\n top: 0,\r\n }\r\n };\r\n this.resizeId = 0;\r\n }\r\n\r\n componentDidMount = () => {\r\n if (this.props.materialsAgentTutorialFinished) {\r\n return null\r\n }\r\n const scriptAdded = document.getElementById(\"pingpilot\");\r\n if (!scriptAdded) {\r\n return null\r\n }\r\n const pingButton = document.querySelector(\".pingpilot-button\");\r\n if (!pingButton) {\r\n return null\r\n }\r\n window.materialsAgentTutorialTimeoutId = setTimeout(() => {\r\n this.props.showMaterialsAgentTutorial(true);\r\n this.setButtonsPositions();\r\n $(\".tutorial-overlay--materials\").fadeIn(300);\r\n $(\".tutorial-step__ring, .tutorial-step\").fadeIn(300, () => {\r\n this.setButtonsPositions();\r\n });\r\n window.addEventListener(\"resize\", this.handleResize);\r\n }, 30000);\r\n };\r\n\r\n handleResize = () => {\r\n clearTimeout(this.resizeId);\r\n this.resizeId = setTimeout(this.setButtonsPositions, 500);\r\n };\r\n\r\n setButtonsPositions = () => {\r\n this.changeHighlightRingPosition(\".omnibrowse-code-button\");\r\n };\r\n\r\n componentWillUnmount() {\r\n window.clearTimeout(window.materialsAgentTutorialTimeoutId);\r\n window.removeEventListener(\"resize\", this.handleResize);\r\n }\r\n\r\n handleNextStepClick = () => {\r\n this.exitTutorial(true);\r\n };\r\n\r\n exitTutorial = (forever) => {\r\n $(\".tutorial-overlay--materials\").fadeOut(300, () => {\r\n this.props.showMaterialsAgentTutorial(false);\r\n if (forever) {\r\n this.props.setMaterialsAgentTutorialFinished(true);\r\n try {\r\n window.localStorage.setItem(\"materials_tutorial_finished\", true);\r\n } catch (ex) { console.log(\"localStorage exception\", ex); }\r\n }\r\n });\r\n };\r\n\r\n pingButtonClick = () => {\r\n this.exitTutorial(true);\r\n const pingButton = document.querySelector(\".pingpilot-button\");\r\n if (!pingButton) {\r\n return null\r\n }\r\n pingButton.click();\r\n }\r\n\r\n render() {\r\n\r\n const {materialsAgentTutorialIsOpened, materialsAgentTutorialFinished, isMobile} = this.props;\r\n\r\n if (!materialsAgentTutorialIsOpened || materialsAgentTutorialFinished) {\r\n return null\r\n }\r\n\r\n return (\r\n
    \r\n
    \r\n
    \r\n
    \r\n

    \r\n
    \r\n \r\n

    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n )\r\n }\r\n\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {materialsAgentTutorialIsOpened, materialsAgentTutorialFinished} = store.tutorialState;\r\n const {isMobile} = store.serverState;\r\n\r\n return {\r\n materialsAgentTutorialIsOpened,\r\n materialsAgentTutorialFinished,\r\n isMobile,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n showMaterialsAgentTutorial,\r\n setMaterialsAgentTutorialFinished,\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(MaterialsAgentTutorial);\r\n","import React, {useRef} from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport BodySwipable from \"../../visComponents/navigation/desktop/bodySwipable\";\r\nimport MaterialsWizardFooterStep from \"./materialsWizardFooterStep\";\r\nimport {\r\n getWizardStepIsDisabled\r\n} from \"../../look/lookNavigation/lookMain/lookWizard/lookWizardFunctions\";\r\nimport {wizardItemInterface} from \"../../../interfaces/wizardItemInterface\";\r\nimport {getNextWizardSteps} from \"../../look/lookNavigation/lookMain/lookWizard/lookWizardFunctions2\";\r\n\r\n// const stepWidth = 92;\r\nconst MaterialsWizardFooterSteps = (props) => {\r\n\r\n const {wizardItem, wizardSelectedValues, wizardActiveStep, isShoppingCart, showAdvancedQuoting} = props;\r\n\r\n const scrollElementRef = useRef();\r\n\r\n // const stepWidth = isMobile ? 92 : 92;\r\n\r\n const wizardSteps = getNextWizardSteps(wizardItem, wizardActiveStep, wizardSelectedValues);\r\n // console.log(\"wizardSteps\", wizardSteps);\r\n\r\n // const styles = {\r\n // width: (wizardSteps.length + (isShoppingCart ? 1 : 0)) * stepWidth\r\n // }\r\n\r\n // const currentGroups = getCurrentGroups(wizardItem, wizardActiveStep, wizardSelectedValues);\r\n // const isCompletedStep = wizardActiveStep > -1 && !currentGroups.length;\r\n // const menuWidth = windowWidth * 35 / 100; // 35% of screen\r\n // const useContainerOverFlow = styles.width >menuWidth;\r\n\r\n const content = (\r\n
    \r\n {wizardSteps.map((step) => {\r\n const stepDisabled = getWizardStepIsDisabled(step.stepIndex, wizardSelectedValues, wizardSteps);\r\n if (showAdvancedQuoting && (step.stepIndex !== wizardActiveStep) && window.location.href.includes(\"materials\")) {\r\n return null\r\n }\r\n return \r\n })}\r\n
    \r\n )\r\n\r\n // return useContainerOverFlow ? (\r\n // \r\n // {/*
    */}\r\n // {content}\r\n // \r\n // ) :
    {content}
    \r\n\r\n return (\r\n \r\n {content}\r\n \r\n )\r\n\r\n};\r\n\r\nMaterialsWizardFooterSteps.propTypes = {\r\n isShoppingCart: PropTypes.bool,\r\n wizardItem: PropTypes.shape(wizardItemInterface).isRequired,\r\n wizardValues: PropTypes.object,\r\n wizardStep: PropTypes.number,\r\n}\r\n\r\nconst mapStateToProps = (store, ownProps) => {\r\n const {wizardSelectedValues, wizardActiveStep} = store.wizardState;\r\n const {windowWidth, isMobile} = store.serverState;\r\n const {wizardValues} = ownProps;\r\n const {showAdvancedQuoting} = store.advancedQuotingState;\r\n\r\n return {\r\n wizardSelectedValues: wizardValues || wizardSelectedValues,\r\n wizardActiveStep,\r\n // wizardActiveStep: Number.isInteger(wizardStep) ? wizardStep : wizardActiveStep,\r\n windowWidth,\r\n isMobile,\r\n showAdvancedQuoting,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(MaterialsWizardFooterSteps)\r\n","import React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport $ from \"jquery\";\r\n\r\nimport {togglePulseFeatureInfoQuantity} from \"../../../actions/actionFunctions\";\r\nimport {toggleProductNoteEditorVisible} from \"../../../actions/selectionFunctions\";\r\nimport {getCartItemObject} from \"../../../misc/helpers\";\r\n\r\n\r\nexport default (WrappedComponent) => {\r\n\r\n const WithMaterialsWizardFooterCommon = (props) => {\r\n\r\n const {selectionInfoQuantity, selectionFeatureInfo, togglePulseFeatureInfoQuantity, toggleProductNoteEditorVisible,\r\n relatedGroups, qtActiveCategory, selectionGroup} = props;\r\n\r\n const quantityIsZero = () => {\r\n if (!selectionInfoQuantity && selectionFeatureInfo && !selectionFeatureInfo.dbFeature.hideQuantity) {\r\n togglePulseFeatureInfoQuantity(true);\r\n toggleProductNoteEditorVisible(false); // exit add note mode\r\n const $scrollableInfoArea = $(\".selection-main__info-scrollable\");\r\n if ($scrollableInfoArea) {\r\n $scrollableInfoArea.animate({scrollTop: 0}, 500);\r\n }\r\n return true;\r\n }\r\n return false\r\n }\r\n\r\n const getCartFeatureParentName = (activeFeature) => {\r\n let parentName = selectionGroup;\r\n if (activeFeature.getParent) {\r\n const subPart = activeFeature.getParent();\r\n parentName = subPart.getParent ? subPart.getParent().partName : subPart.partName\r\n }\r\n return parentName\r\n }\r\n\r\n const getCurrentRelatedCartItems = (activeFeature, arrayToAddtoTheCart = []) => {\r\n if (Array.isArray(relatedGroups) && relatedGroups.length) {\r\n relatedGroups.forEach(relatedGroup => {\r\n relatedGroup.relatedFeatures.forEach(relatedFeature => {\r\n if (relatedFeature.cartQuantity) {\r\n const relatedItemCartObject = getCartItemObject(relatedFeature, relatedFeature.cartQuantity, qtActiveCategory);\r\n relatedItemCartObject.relatedProductParent = activeFeature;\r\n arrayToAddtoTheCart.push(relatedItemCartObject)\r\n }\r\n });\r\n });\r\n }\r\n return arrayToAddtoTheCart\r\n }\r\n\r\n return \r\n\r\n };\r\n\r\n const mapStateToProps = (store) => {\r\n const {selectionFeatureInfo, selectionInfoQuantity, relatedGroups, selectionGroup} = store.selectionState;\r\n const {qtActiveCategory} = store.qtState;\r\n\r\n return {\r\n selectionFeatureInfo,\r\n selectionInfoQuantity,\r\n relatedGroups,\r\n qtActiveCategory,\r\n selectionGroup,\r\n };\r\n };\r\n\r\n const mapDispatchToProps = {\r\n togglePulseFeatureInfoQuantity,\r\n toggleProductNoteEditorVisible,\r\n };\r\n\r\n return connect(mapStateToProps, mapDispatchToProps)(WithMaterialsWizardFooterCommon)\r\n}\r\n","import React, {Fragment} from 'react';\r\nimport {connect} from \"react-redux\";\r\nimport {hashHistory} from \"react-router\";\r\nimport size from 'lodash/size';\r\nimport flatMap from 'lodash/flatMap';\r\nimport filter from 'lodash/filter';\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\n\r\nimport {\r\n removeFromCart,\r\n toggleSelectionWindow,\r\n changeStateToQuote,\r\n setQtActiveCategory,\r\n changeActivePartRelatedItemIndex\r\n} from \"../../actions/actionFunctions\";\r\nimport {\r\n getCurrencySign,\r\n getFeatureGroupName, getPriceWithCurrency,\r\n getRoomName,\r\n getTotalPrice,\r\n toFixedPrice\r\n} from \"../../misc/helpers\";\r\nimport Analytics from './../../analytics';\r\nimport CommonFeatureItemsMethods from \"../visComponents/commonFeatureItemsMethods\";\r\nimport ChangeRoomButton from \"./changeRoomButton\";\r\nimport ShoppingCartItemsListItem from \"./shoppingCartItemsListItem\";\r\nimport {getCurrentLayout} from \"../appLayout\";\r\nimport {changeQTRoutePath, changeRoutePath} from \"../../misc/changeRoutePath\";\r\nimport ShoppingCartDiscountsList from \"./shoppingCartDiscountsList\";\r\nimport ShoppingCartItemsListInstallationItem from \"./shoppingCartItemsListInstallationItem\";\r\nimport AdvancedQuotingList from \"./advancedQuoting/advancedQuotingList\";\r\nimport {setActiveQuoteIndex} from \"../../actions/roomsFunctions\";\r\nimport SimilarProducts from \"./similarProducts/similarProducts\";\r\nimport {SQFT_FEATURES} from \"../sqft/constants\";\r\nimport {showWizardInsteadOfQT} from \"../look/lookNavigation/lookMain/lookWizard/lookWizardFunctions\";\r\nimport {WIZARD_GROUP_TYPES} from \"../../interfaces/wizardItemInterface\";\r\nimport ShoppingCartItemsListWizardCustomItem from \"./shoppingCartItemsListWizardCustomItem\";\r\nimport {setNewActiveQuote} from \"../../misc/quotesFunctions\";\r\nimport LoadingSpinner from \"../ui/loadingSpinner\";\r\nimport {getDifferentCurrencyCartItems} from \"../../misc/misc2\";\r\nimport {switchToNewVisualizerType} from \"../../misc/visualizerSwitchingFunctions\";\r\nimport goToMaterialPage from \"../common/goToMaterialPage\";\r\nimport {getWizardGroupName} from \"../look/lookNavigation/lookMain/lookWizard/lookWizardFunctions2\";\r\nimport TextInput from \"../ui/textInput\";\r\n\r\nclass ShoppingCartItemsList extends CommonFeatureItemsMethods {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {}\r\n }\r\n\r\n componentDidMount() {\r\n this.props.changeStateToQuote();\r\n }\r\n\r\n shouldComponentUpdate(nextProps) {\r\n return !nextProps.showAssignQuotePopup;\r\n }\r\n\r\n switchToMaterialsPageGroup = async (listItem, quoteIndex, cartItem = null) => {\r\n const {selectionGroup, featureGroupName, featureGroup} = listItem;\r\n Analytics.sendClickEvent(cartItem ? \"shopping-cart-edit-feature\" : \"shopping-cart-items-go-to-materials\");\r\n const {activeQuoteIndex, setActiveQuoteIndex} = this.props;\r\n if (cartItem && (cartItem.fromVisualizerType !== document.kvConfig.visualizerType)) {\r\n await switchToNewVisualizerType(cartItem.fromVisualizerType);\r\n // this.props.setActionAfterVisualizerTypeIsChanged();\r\n }\r\n if (quoteIndex !== activeQuoteIndex) {\r\n await setNewActiveQuote(quoteIndex);\r\n await setActiveQuoteIndex(quoteIndex);\r\n }\r\n if (featureGroup) {\r\n // const switchToProduct = cartItem.relatedProductParent || cartItem.cartFeature;\r\n let wizardAllObject = null;\r\n let stepIndex = 0;\r\n if (cartItem && cartItem.fromWizardId) {\r\n wizardAllObject = {wizardItemId: cartItem.fromWizardId, quoteIndex};\r\n stepIndex = cartItem.fromWizardStep;\r\n }\r\n goToMaterialPage(\"shoppingcart\", false, {part: featureGroup}, \"\", wizardAllObject, stepIndex);\r\n return\r\n }\r\n const layout = getCurrentLayout();\r\n if (layout.qtCategories) {\r\n let subPartIndex = 0;\r\n const neededQtCat = layout.qtCategories.find(qtCat => {\r\n const sIndex = qtCat.defaultSubParts.findIndex(sPart => {\r\n return (sPart.part.customGroupDisplayName || sPart.text) === featureGroupName\r\n })\r\n if (sIndex > -1) {\r\n subPartIndex = sIndex\r\n return true\r\n }\r\n return false\r\n }) || layout.qtCategories[0];\r\n this.props.setQtActiveCategory(neededQtCat.name);\r\n this.props.changeActivePartRelatedItemIndex(subPartIndex);\r\n changeQTRoutePath(neededQtCat.name, subPartIndex);\r\n } else {\r\n this.props.toggleSelectionWindow(true, selectionGroup);\r\n const parentGroup = layout.parts[selectionGroup];\r\n if (parentGroup) {\r\n const subPartIndex = parentGroup.subParts().findIndex(sPart => {\r\n return (sPart.part.customGroupDisplayName || sPart.text) === featureGroupName\r\n })\r\n changeRoutePath(parentGroup, subPartIndex > -1 ? subPartIndex : 0)\r\n } else {\r\n hashHistory.push('materials');\r\n }\r\n }\r\n };\r\n\r\n setFeatureGroupCustomName = (featureGroup, quoteIndex = 0, value) => {\r\n if (!featureGroup.customNames) {\r\n featureGroup.customNames = {}\r\n }\r\n featureGroup.customNames[quoteIndex] = value;\r\n this.forceUpdate();\r\n }\r\n\r\n createCommonParentsList = () => {\r\n const {quotes, cartItems, activeQuoteIndex, showAllQuotesCartItemsList, intl, fabricatorData, wizardList,\r\n wizardIsActive, allWizardsValues} = this.props;\r\n const isWizard = showWizardInsteadOfQT(wizardList, wizardIsActive);\r\n let quotesList = {}; // {quoteIndex: ArrayOf({parentName: \"\", cartItem})}\r\n quotes.forEach((quote, quoteIndex) => {\r\n\r\n const layout = getCurrentLayout(fabricatorData.settings.allowVisualizerSwitching && quote.room ? quote.room : document.kvConfig.visualizerType);\r\n\r\n const cartList = []; //ArrayOf({parentName: \"\", cartItem})\r\n const quoteCartItems = cartItems.filter((cartItem) => cartItem.cartFeature && (cartItem.currentQuote === quoteIndex));\r\n if (showAllQuotesCartItemsList || quoteIndex === activeQuoteIndex) {\r\n let uniqueCartItemIds = [];\r\n\r\n const addToCartList = (cartItem, wizardGroup, wizardItemId) => {\r\n //todo get slab parentGroup and remove displayFakeFeatureGroupName\r\n const parentGroup = cartItem.cartFeature.getParent\r\n ? cartItem.cartFeature.getParent()\r\n : layout.getFeatureGroupByPartId(cartItem.cartFeature.partId);\r\n let featureGroupName;\r\n let featureGroupDisplayName;\r\n\r\n if (cartItem.displayFakeFeatureGroupName) {\r\n featureGroupName = cartItem.displayFakeFeatureGroupName;\r\n featureGroupDisplayName = intl.formatMessage({id: \"sqftFeaturesPopup.title.\" + cartItem.displayFakeFeatureGroupName});\r\n } else {\r\n featureGroupName = parentGroup ? parentGroup.customGroupDisplayName || parentGroup.partName : cartItem.selectionGroup;\r\n if (wizardGroup) {\r\n featureGroupDisplayName = getWizardGroupName(wizardGroup);\r\n }\r\n if (!featureGroupDisplayName || !wizardGroup) {\r\n featureGroupDisplayName = parentGroup ? getFeatureGroupName(parentGroup, intl, fabricatorData) : cartItem.selectionGroup;\r\n }\r\n }\r\n\r\n const parent = cartList.find(listItem => {\r\n if (isWizard && cartItem.fromWizardGroupId) {\r\n return listItem.wizardGroupId === cartItem.fromWizardGroupId && (listItem.wizardItemId === cartItem.fromWizardId)\r\n }\r\n return listItem.featureGroupName === featureGroupName\r\n });\r\n if (parent) {\r\n parent.cartItems.push(cartItem);\r\n } else {\r\n cartList.push({\r\n featureGroupName,\r\n featureGroupDisplayName,\r\n selectionGroup: cartItem.selectionGroup,\r\n cartItems: [cartItem],\r\n featureGroup: parentGroup,\r\n wizardGroupId: wizardGroup ? wizardGroup.id : null,\r\n wizardItemId,\r\n });\r\n }\r\n };\r\n\r\n if (isWizard) {\r\n wizardList.forEach(wizardItem => {\r\n const existingAllObject = allWizardsValues.find(wizSelObject => {\r\n return wizSelObject.wizardItemId === wizardItem.id && wizSelObject.quoteIndex === quoteIndex\r\n });\r\n if (existingAllObject && existingAllObject.wizardSelectedValues) {\r\n Object.keys(existingAllObject.wizardSelectedValues).forEach(key => {\r\n const wizardGroup = existingAllObject.wizardSelectedValues[key].wizardGroup\r\n if (wizardGroup && wizardGroup.nodeType === WIZARD_GROUP_TYPES.custom && !wizardGroup.hideInCartAndReceipt) {\r\n cartList.push({\r\n type: WIZARD_GROUP_TYPES.custom,\r\n wizardSelectedValue: existingAllObject.wizardSelectedValues[key],\r\n wizardAllObject: existingAllObject,\r\n stepIndex: key,\r\n wizardGroup,\r\n });\r\n return\r\n }\r\n let currentCartItems = cartItems.filter(cartItem => {\r\n if (cartItem.bundleParentId) {\r\n return false\r\n }\r\n return cartItem.cartFeature && (cartItem.currentQuote === quoteIndex)\r\n && (wizardGroup && cartItem.fromWizardGroupId\r\n ? (wizardGroup.id === cartItem.fromWizardGroupId)\r\n : +key === cartItem.fromWizardStep)\r\n && !uniqueCartItemIds.includes(cartItem.id)\r\n });\r\n if (currentCartItems.length) {\r\n uniqueCartItemIds = [...uniqueCartItemIds, ...currentCartItems.map(cItem => cItem.id)];\r\n currentCartItems.forEach((cartItem) => addToCartList(cartItem, wizardGroup, wizardItem.id))\r\n // } else if (wizardGroup && !wizardGroup.hideInCartAndReceipt) {\r\n // cartList.push({\r\n // type: WIZARD_GROUP_TYPES.custom,\r\n // wizardSelectedValue: existingAllObject.wizardSelectedValues[key],\r\n // wizardAllObject: existingAllObject,\r\n // stepIndex: key,\r\n // wizardGroup,\r\n // });\r\n }\r\n })\r\n }\r\n });\r\n quoteCartItems.forEach((cartItem) => {\r\n if (!uniqueCartItemIds.includes(cartItem.id) && !cartItem.bundleParentId) {\r\n uniqueCartItemIds.push(cartItem.id);\r\n addToCartList(cartItem)\r\n }\r\n });\r\n } else if (layout.qtCategories) {\r\n layout.qtCategories.forEach(qtCategory => {\r\n qtCategory.subParts.forEach((subPart) => {\r\n let currentCartItems = cartItems.filter(cartItem => {\r\n if (cartItem.bundleParentId) {\r\n return false\r\n }\r\n return cartItem.cartFeature && (cartItem.currentQuote === quoteIndex)\r\n && (subPart.part.partId === cartItem.partId || (cartItem.relatedProductParent && subPart.part.partId === cartItem.relatedProductParent.partId))\r\n && !uniqueCartItemIds.includes(cartItem.id)\r\n });\r\n if (currentCartItems.length) {\r\n uniqueCartItemIds = [...uniqueCartItemIds, ...currentCartItems.map(cItem => cItem.id)];\r\n currentCartItems.forEach((cartItem) => addToCartList(cartItem))\r\n }\r\n })\r\n });\r\n quoteCartItems.forEach((cartItem) => {\r\n if (!uniqueCartItemIds.includes(cartItem.id) && !cartItem.bundleParentId) {\r\n uniqueCartItemIds.push(cartItem.id);\r\n addToCartList(cartItem)\r\n }\r\n })\r\n } else {\r\n quoteCartItems.forEach((cartItem) => addToCartList(cartItem))\r\n }\r\n cartList.push({\r\n type: \"similar\",\r\n quoteIndex\r\n });\r\n if (showAllQuotesCartItemsList) {\r\n cartList.push({\r\n type: \"subTotal\",\r\n quoteIndex\r\n });\r\n }\r\n }\r\n quotesList[quoteIndex] = cartList\r\n });\r\n // console.log(\"quotesList\", quotesList);\r\n return quotesList\r\n };\r\n\r\n getCartItemsList = (isMobile, fabricatorData, fabricatorSettings) => {\r\n const {cartItems, showAllQuotesCartItemsList, isPhoneNumberValidated, quotes, intl} = this.props;\r\n if (!cartItems.length) {\r\n // if (!cartItems.length || (Object.keys(quotesList).every(quoteIndex => !quotesList[quoteIndex].length))) {\r\n return (\r\n

    \r\n \r\n

    \r\n )\r\n }\r\n const quotesList = this.createCommonParentsList();\r\n const quotesListArray = Object.keys(quotesList);\r\n\r\n const {isBackend, jobId, canSaveQuote} = document.kvConfig;\r\n const pricingIsLocked = (fabricatorSettings.leadCaptureOnQuote || fabricatorSettings.leadCaptureShoppingCart)\r\n && !(isBackend && jobId && canSaveQuote) && !isPhoneNumberValidated;\r\n\r\n return quotesListArray.map(quoteIndex => {\r\n return (\r\n
    1) ? \" scart-room--bordered\" : \"\")} key={quoteIndex}>\r\n {showAllQuotesCartItemsList && (quotesListArray.length > 1) ? (\r\n

    \r\n : {getRoomName(quoteIndex, cartItems, quotes, intl.messages, intl.locale, fabricatorData)}\r\n

    \r\n ) : null}\r\n {quotesList[quoteIndex].map((listItem, index) => {\r\n if (this.props.showUnlockCalculations && listItem.cartItems && !listItem.cartItems.some(cartItem => {\r\n return this.props.showCartItems.includes(cartItem.id)\r\n })) {\r\n return false\r\n }\r\n if (listItem.type === \"subTotal\") {\r\n const quoteTotalPrice = getTotalPrice(listItem.quoteIndex, false);\r\n if (fabricatorData.isAmericanImport || (this.props.showUnlockCalculations && (this.props.unlockCalculationsStep < 2))) {\r\n return null\r\n }\r\n const quoteCartItems = fabricatorSettings.useDifferentCurrencies ? cartItems.filter(cartItem => cartItem.currentQuote === listItem.quoteIndex) : [];\r\n const differentCurrencyObjects = getDifferentCurrencyCartItems(fabricatorSettings, quoteCartItems);\r\n\r\n return (\r\n
    \r\n {differentCurrencyObjects.length ? differentCurrencyObjects.map(currObject => {\r\n const currentTotal = getTotalPrice(listItem.quoteIndex, false, currObject.cartItems);\r\n return (\r\n
    listItem.type === \"subTotal\") ? \" scart-block__subtotal--only\" : \"\"\r\n )}>\r\n : \r\n {pricingIsLocked ? (\r\n \r\n \r\n \r\n ) : getCurrencySign(currObject.currency, fabricatorSettings) + toFixedPrice(currentTotal.materialPrice, true)}\r\n
    \r\n )\r\n }) : null}\r\n
    listItem.type === \"subTotal\") ? \" scart-block__subtotal--only\" : \"\"\r\n )}>\r\n : \r\n {pricingIsLocked ? (\r\n \r\n \r\n \r\n ) : getPriceWithCurrency(fabricatorSettings, toFixedPrice(quoteTotalPrice.materialPrice))}\r\n
    \r\n
    \r\n )\r\n } else if (listItem.type === \"similar\") {\r\n return \r\n } else if (listItem.type === WIZARD_GROUP_TYPES.custom) {\r\n return \r\n }\r\n const isAddMoreDisabled = listItem.featureGroupName === SQFT_FEATURES.slabs;\r\n\r\n const editFeatureGroupClick = (event, editCartItem = null) => {\r\n if (!editCartItem && listItem.cartItems.length && listItem.cartItems[0].fromWizardId) {\r\n editCartItem = listItem.cartItems[0];\r\n }\r\n this.switchToMaterialsPageGroup(listItem, +quoteIndex, editCartItem)\r\n }\r\n // console.log(\"listItem\", listItem);\r\n return (\r\n
    \r\n
    \r\n {document.kvConfig.isBackend && listItem.featureGroup\r\n ? this.setFeatureGroupCustomName(listItem.featureGroup, quoteIndex, value)}\r\n value={listItem.featureGroup.customNames && listItem.featureGroup.customNames[quoteIndex]\r\n ? listItem.featureGroup.customNames[quoteIndex]\r\n : listItem.featureGroupDisplayName}/>\r\n : listItem.featureGroupDisplayName}\r\n
    \r\n {\r\n isAddMoreDisabled\r\n ? null\r\n : \r\n }\r\n
      \r\n {listItem.cartItems.map((cartItem, index2) => {\r\n return \r\n })}\r\n
    \r\n
    \r\n );\r\n })}\r\n
    \r\n )\r\n })\r\n };\r\n\r\n getInstallations = (isMobile, fabricatorData, fabricatorSettings, installations) => {\r\n\r\n const showInstallations = size(installations) && fabricatorSettings.separateLaborInCart\r\n && (!this.props.showUnlockCalculations || (this.props.unlockCalculationsStep >= 2));\r\n\r\n if (showInstallations) {\r\n return (\r\n
    \r\n

    \r\n \r\n

    \r\n
      \r\n {installations.map((instItem, instItemIndex) => {\r\n return \r\n })}\r\n
    \r\n
    \r\n )\r\n }\r\n return null\r\n };\r\n\r\n getTaxes = (isMobile, totalPrice, fabricatorSettings, sureTaxLoading) => {\r\n if (isMobile && this.props.cartItems.length && this.props.isPhoneNumberValidated) {\r\n\r\n if (sureTaxLoading) {\r\n return (\r\n
    \r\n

    \r\n
      \r\n
    • \r\n
      \r\n
      \r\n \r\n
      \r\n
      \r\n
    • \r\n
    \r\n
    \r\n )\r\n }\r\n\r\n let allTaxes = totalPrice.priceTaxes.length\r\n ? totalPrice.priceTaxes\r\n : [{name: \"\", materialTax: totalPrice.materialTaxes}];\r\n\r\n const showTaxes = allTaxes.some(tax => tax.materialTax > 0);\r\n\r\n return (\r\n \r\n {showTaxes || ((allTaxes.length === 1) && fabricatorSettings.sureTax) ? allTaxes.map((taxObject, taxObjectIndex) => {\r\n const taxTotal = taxObject.materialTax.toFixed(2); // always round to 23.65, even if it is 23.00\r\n return (\r\n
    \r\n

    {taxObject.state || }

    \r\n
      \r\n
    • \r\n
      \r\n
      \r\n \r\n {getPriceWithCurrency(fabricatorSettings, taxTotal)}\r\n \r\n
      \r\n
      \r\n
    • \r\n
    \r\n
    \r\n )\r\n }) : null}\r\n {totalPrice.installationTaxes ? (\r\n
    \r\n

    \r\n
      \r\n
    • \r\n
      \r\n
      \r\n \r\n {getPriceWithCurrency(fabricatorSettings, totalPrice.installationTaxes.toFixed(2))}\r\n \r\n
      \r\n
      \r\n
    • \r\n
    \r\n
    \r\n ) : null}\r\n
    \r\n )\r\n }\r\n return null\r\n };\r\n\r\n render() {\r\n\r\n const isMobile = this.props.windowWidth < 991;\r\n const totalPrice = getTotalPrice();\r\n const {fabricatorData, installations, showAdvancedQuoting, sureTaxLoading, cartItems} = this.props;\r\n const fabricatorSettings = fabricatorData.settings;\r\n\r\n // console.log(\"this.props.cartItems\", this.props.cartItems);\r\n\r\n return (\r\n
    \r\n {showAdvancedQuoting ? : this.getCartItemsList(isMobile, fabricatorData, fabricatorSettings)}\r\n {this.getInstallations(isMobile, fabricatorData, fabricatorSettings, installations)}\r\n {this.getTaxes(isMobile, totalPrice, fabricatorSettings, sureTaxLoading)}\r\n {cartItems.length ? : null}\r\n {document.kvConfig.initialFlowEnabled ? : null}\r\n
    \r\n );\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const installations = flatMap(store.instState.instList, i => filter(i.services, {selected: true}));\r\n const {wizardList, wizardIsActive, allWizardsValues} = store.wizardState;\r\n const {sureTaxLoading} = store.cartState;\r\n return {\r\n cartItems: store.cartState.cartItems,\r\n installations,\r\n isPhoneNumberValidated: store.userState.isPhoneNumberValidated,\r\n layoutParts: store.stepsState.layoutParts,\r\n questionNoClicked: store.cartState.questionNoClicked,\r\n windowWidth: store.serverState.windowWidth,\r\n fabricatorData: store.fabricatorState,\r\n showUnlockCalculations: store.unlockCalculationsState.showUnlockCalculations,\r\n unlockCalculationsStep: store.unlockCalculationsState.unlockCalculationsStep,\r\n showCartItems: store.unlockCalculationsState.showCartItems,\r\n activeQuoteIndex: store.quotesState.activeQuoteIndex,\r\n quotes: store.quotesState.quotes,\r\n showAllQuotesCartItemsList: store.cartState.showAllQuotesCartItemsList,\r\n showAdvancedQuoting: store.advancedQuotingState.showAdvancedQuoting,\r\n wizardList,\r\n wizardIsActive,\r\n allWizardsValues,\r\n showAssignQuotePopup: store.assignQuoteState.showAssignQuotePopup,\r\n sureTaxLoading,\r\n }\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n removeFromCart,\r\n toggleSelectionWindow,\r\n changeStateToQuote,\r\n setQtActiveCategory,\r\n changeActivePartRelatedItemIndex,\r\n setActiveQuoteIndex\r\n}\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(ShoppingCartItemsList)\r\n);\r\n","import React from 'react';\r\nimport {connect} from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\nimport $ from \"jquery\";\r\n\r\nimport {\r\n removeFromCart,\r\n changeMessageBoxState,\r\n toggleUserPopup,\r\n setQtActiveCategory,\r\n changeActivePartRelatedItemIndex,\r\n toggleSelectionWindow,\r\n toggleSelectionFeatureInfo,\r\n toggleBathroomVisualizerOpen, setCameFromPage\r\n} from \"../../actions/actionFunctions\";\r\nimport {\r\n detectComplexLaborCartItem, getCartItemUnit,\r\n getFeatureIsLocked,\r\n getFeatureUnit, getTotalPrice,\r\n toFixedFeatureCost,\r\n toFixedPrice\r\n} from \"../../misc/helpers\";\r\nimport CommonFeatureItemsMethods from \"../visComponents/commonFeatureItemsMethods\";\r\nimport PriceInput from \"./priceInput\";\r\nimport {getCurrentLayout} from \"../appLayout\";\r\nimport {checkIfInCatProperty} from \"../../misc/displayLogic\";\r\nimport NoteEditor from \"./noteEditor\";\r\nimport ActionTypes from \"../../misc/actionTypes\";\r\nimport {cartItemInterface} from \"./cartItemInterface\";\r\nimport FeatureName from \"../visComponents/featureName\";\r\nimport {setActiveQuoteIndex} from \"../../actions/roomsFunctions\";\r\nimport Config from \"../../config\";\r\nimport {setCartItemEditFeature} from \"../../actions/shoppingCartFunctions\";\r\nimport {getPriceWithIncluded} from \"../../misc/priceFunctions\";\r\nimport {getWizardGroupFromCurrentSteps} from \"../look/lookNavigation/lookMain/lookWizard/lookWizardFunctions\";\r\n// import {setActionAfterVisualizerTypeIsChanged} from \"../../actions/serverFunctions\";\r\nimport {deleteCartItemFromSQFTCalcData, updateCurrentQuote} from \"../../misc/quotesFunctions\";\r\nimport ShoppingCartItemsBundledProducts from \"./shoppingCartItemsBundledProducts\";\r\nimport {SQFT_FEATURES} from \"../sqft/constants\";\r\n// import {COUNTERTOP_GROUP} from \"../kvComponent/core/constants\";\r\n// import {MEASURE_UNITS} from \"../sqft/constants\";\r\n\r\nclass ShoppingCartItemsListItem extends CommonFeatureItemsMethods {\r\n\r\n static propTypes = {\r\n cartItem: PropTypes.shape(cartItemInterface).isRequired,\r\n editFeatureGroupClick: PropTypes.func.isRequired,\r\n isBundleChild: PropTypes.bool,\r\n }\r\n\r\n state = {\r\n editorVisible: false,\r\n editorCanRender: true\r\n }\r\n\r\n componentDidMount() {\r\n $(window).on(ActionTypes.UPDATE_ALL_ITEMS, this.handleRefresh);\r\n }\r\n\r\n componentWillUnmount() {\r\n $(window).off(ActionTypes.UPDATE_ALL_ITEMS, this.handleRefresh);\r\n window.removeEventListener('click', this.handleWrapperBlur);\r\n }\r\n\r\n shouldComponentUpdate(nextProps) {\r\n return !nextProps.showAssignQuotePopup;\r\n }\r\n\r\n handleRefresh = () => {\r\n this.setState({\r\n editorVisible: false,\r\n editorCanRender: false\r\n }, () => {\r\n this.setState({\r\n editorCanRender: true\r\n })\r\n });\r\n this.forceUpdate();\r\n }\r\n\r\n handleRemoveClick = () => {\r\n const {cartItem, fabricatorData} = this.props;\r\n this.props.changeMessageBoxState({\r\n visible: true,\r\n message: {\r\n id: \"shoppingCart.fetureInCartRemovePopupQuestion\",\r\n featureName: cartItem.cartFeature.getFeatureName()\r\n },\r\n buttons: [{\r\n text: \"shoppingCart.fetureInCartRemovePopupNo\",\r\n color: \"blue\",\r\n click: () => {\r\n this.props.changeMessageBoxState({visible: false});\r\n }\r\n }, {\r\n text: \"shoppingCart.fetureInCartRemovePopupYes\",\r\n color: \"green\",\r\n click: async () => {\r\n this.props.removeFromCart(cartItem);\r\n this.props.changeMessageBoxState({visible: false});\r\n if (fabricatorData.settings.useCategorySwitching) {\r\n await updateCurrentQuote(cartItem.currentQuote, undefined, false);\r\n }\r\n deleteCartItemFromSQFTCalcData(cartItem).then(r => void r);\r\n }\r\n }]\r\n });\r\n };\r\n\r\n handleEditClick = () => {\r\n const {cartItem} = this.props;\r\n this.props.editFeatureGroupClick(null, cartItem);\r\n this.props.setCartItemEditFeature(cartItem);\r\n };\r\n\r\n handleAddNoteClick = () => {\r\n this.setState({\r\n editorVisible: !this.state.editorVisible\r\n }, () => {\r\n setTimeout(() => {\r\n this.state.editorVisible\r\n ? window.addEventListener('click', this.handleWrapperBlur)\r\n : window.removeEventListener('click', this.handleWrapperBlur)\r\n }, 0)\r\n })\r\n };\r\n\r\n handleWrapperBlur = (e) => {\r\n const disallowClasses = [\".product-note\", \".link--note\"];\r\n if (this.state.editorVisible && !disallowClasses.some(cls => e.target.closest(cls))) {\r\n this.setState({\r\n editorVisible: false\r\n })\r\n }\r\n };\r\n\r\n onNoteSave = () => {\r\n this.handleAddNoteClick();\r\n };\r\n\r\n toggleUserPopup = () => {\r\n this.props.toggleUserPopup({\r\n userPopupOpened: true\r\n })\r\n };\r\n\r\n render() {\r\n\r\n const layout = getCurrentLayout();\r\n const editingPriceAvailable = Config.isDevMode();\r\n\r\n const isMobile = this.props.windowWidth < 991;\r\n const {fabricatorData, cartItem, activeQuoteIndex, intl, wizardList, allWizardsValues, cartItems, isBundleChild,\r\n isSlabPricingEnabled} = this.props;\r\n const fabricatorSettings = fabricatorData.settings;\r\n\r\n if (this.props.showUnlockCalculations && !this.props.showCartItems.includes(cartItem.id)) {\r\n return false\r\n }\r\n const subPartName = cartItem.cartFeature.getParent ? cartItem.cartFeature.getParent().partName : \"\";\r\n let showPrice = false;\r\n let priceTotal = null;\r\n const priceIsLocked = getFeatureIsLocked(cartItem.cartFeature);\r\n if (fabricatorSettings.showPricing && !fabricatorData.hideCheckoutBreakdownCost && !fabricatorData.hidePricesFromUser) {\r\n const isComplexMultipliedUsed = detectComplexLaborCartItem(cartItem) && getTotalPrice().multipliedCostUsed;\r\n if (isComplexMultipliedUsed || cartItem.displayFakePrice === 0) {\r\n priceTotal = null\r\n } else {\r\n // not sure if we need displayFakePrice?\r\n // priceTotal = cartItem.displayFakePrice ? cartItem.displayFakePrice :\r\n // toFixedFeatureCost(cartItem.cartFeature, cartItem.quantity, cartItem.fromQtCategory, true, cartItem, cartItem.shouldUseSlabPricing);\r\n const shouldUseSlabPricing = cartItem.partId === SQFT_FEATURES.slabs && isSlabPricingEnabled;\r\n priceTotal = toFixedFeatureCost(\r\n cartItem.cartFeature,\r\n cartItem.quantity,\r\n cartItem.fromQtCategory,\r\n true,\r\n cartItem,\r\n shouldUseSlabPricing,\r\n cartItem.currentQuote\r\n );\r\n }\r\n showPrice = !priceIsLocked;\r\n }\r\n // const isEditable = !layout.qtCategories || cartItem.relatedProductParent ||(\r\n // layout.qtCategories.some(qtCategory => qtCategory.subParts && qtCategory.subParts.some(qtCatSubPart => {\r\n // return qtCatSubPart.part.partId === cartItem.cartFeature.partId\r\n // }))\r\n // );\r\n const featureUnit = getFeatureUnit(cartItem.cartFeature, intl, fabricatorData, cartItem.quantity);\r\n const cartItemUnit = getCartItemUnit(cartItem, intl);\r\n let isEditable = ![\"Slab\", \"Slabs\"].includes(cartItemUnit) && !isBundleChild; // always editable except slab, all logic is inside switchToFeatureInfo method\r\n if (cartItem.fromWizardGroupId && allWizardsValues) {\r\n const neededObject = allWizardsValues.find(wizValueObject => (wizValueObject.quoteIndex === cartItem.currentQuote)\r\n && (wizValueObject.wizardItemId === cartItem.fromWizardId));\r\n const selectedWizValues = neededObject && neededObject.wizardSelectedValues ? neededObject.wizardSelectedValues : null;\r\n const wizardItem = wizardList.find(wizItem => wizItem.id === cartItem.fromWizardId);\r\n const {neededStep} = getWizardGroupFromCurrentSteps(wizardItem, selectedWizValues, cartItem.fromWizardGroupId);\r\n if (!neededStep) {\r\n isEditable = false;\r\n }\r\n }\r\n const unit = cartItemUnit ? cartItemUnit : featureUnit;\r\n const getItemTitle = () => {\r\n let itemTitle;\r\n if (cartItem.cartFeature.inCatProperties) {\r\n itemTitle = checkIfInCatProperty(cartItem.cartFeature, \"inCatName\", cartItem.cartFeature.getFeatureName(), cartItem.fromQtCategory)\r\n }\r\n\r\n return itemTitle ? itemTitle : \r\n }\r\n\r\n const hasBundleProducts = cartItems.some(cItem => cItem.bundleParentId === cartItem.id);\r\n\r\n return (\r\n
  • \r\n
    \r\n
    \r\n

    \r\n {subPartName && !layout.qtCategories ? subPartName + \" - \" : null}\r\n { getItemTitle() }\r\n

    \r\n {cartItem.description ? (\r\n

    \r\n ) : null}\r\n {cartItem.isMinimumCharge && !cartItem.isMinimumChargeItems ? null : (\r\n

    \r\n {showPrice && isMobile ? (\r\n \r\n {getPriceWithIncluded(priceTotal, cartItem.cartFeature, fabricatorData, intl.messages)}\r\n \r\n ) : null}\r\n {priceIsLocked && isMobile ? (\r\n \r\n \r\n \r\n ) : null}\r\n {fabricatorSettings.useCategorySwitching && cartItem.partId === \"room\" ? null : (\r\n \r\n {unit}: {\r\n toFixedPrice(parseFloat(cartItem.displayFakeQuantity) === cartItem.displayFakeQuantity\r\n ? cartItem.displayFakeQuantity\r\n : cartItem.quantity, fabricatorSettings.useDifferentCurrencies)\r\n }\r\n \r\n )}\r\n
    \r\n )}\r\n
    \r\n {isMobile && !cartItem.isMinimumCharge && !cartItem.isAddedFromDisplayLogic ? (\r\n
    \r\n
    \r\n ) : cartItem.isMinimumCharge || cartItem.isAddedFromDisplayLogic ? null : (\r\n
    \r\n \r\n {cartItem.cartFeature.notesList[activeQuoteIndex]\r\n ? \r\n : }\r\n \r\n {isEditable ? (\r\n \r\n \r\n \r\n ) : null}\r\n \r\n \r\n \r\n
    \r\n )\r\n }\r\n {!isMobile ? (\r\n
    \r\n\r\n {showPrice\r\n ? editingPriceAvailable\r\n ? \r\n : (\r\n {getPriceWithIncluded(priceTotal, cartItem.cartFeature, fabricatorData, intl.messages)}\r\n )\r\n : null}\r\n {priceIsLocked ? (\r\n \r\n \r\n \r\n ) : null}\r\n
    \r\n ) : null}\r\n
    \r\n {this.state.editorCanRender && !cartItem.isMinimumCharge && !cartItem.isAddedFromDisplayLogic ? (\r\n \r\n ) : null}\r\n {hasBundleProducts ? : null}\r\n
  • \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {allWizardsValues, wizardList} = store.wizardState;\r\n return {\r\n cartItems: store.cartState.cartItems,\r\n isPhoneNumberValidated: store.userState.isPhoneNumberValidated,\r\n windowWidth: store.serverState.windowWidth,\r\n fabricatorData: store.fabricatorState,\r\n showUnlockCalculations: store.unlockCalculationsState.showUnlockCalculations,\r\n showCartItems: store.unlockCalculationsState.showCartItems,\r\n activeQuoteIndex: store.quotesState.activeQuoteIndex,\r\n wizardList,\r\n allWizardsValues,\r\n showAssignQuotePopup: store.assignQuoteState.showAssignQuotePopup,\r\n isSlabPricingEnabled: store.sqftSlabState.isSlabPricingEnabled,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n removeFromCart,\r\n changeMessageBoxState,\r\n toggleUserPopup,\r\n setQtActiveCategory,\r\n /*** CommonFeatureItemsMethods needs next methods: ***/\r\n changeActivePartRelatedItemIndex,\r\n toggleSelectionWindow,\r\n toggleSelectionFeatureInfo,\r\n toggleBathroomVisualizerOpen,\r\n setCameFromPage,\r\n /*** CommonFeatureItemsMethods needs methods end ***/\r\n setActiveQuoteIndex,\r\n setCartItemEditFeature\r\n}\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(ShoppingCartItemsListItem)\r\n)\r\n","import React, {useEffect, useState} from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\nimport {changeCartFeature} from \"../../actions/actionFunctions\";\r\n\r\nconst NoteEditor = (props) => {\r\n\r\n let {intl, cartItem, closeEditor, editorVisible, cartItemId, dbFeatureId, quoteIndex, changeCartFeature} = props;\r\n const [noteText, setNoteText] = useState(\"\");\r\n\r\n useEffect(() => {\r\n setNoteText(cartItem.noteText || \"\");\r\n }, [cartItemId, dbFeatureId, quoteIndex]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n const onNoteChange = (e) => {\r\n setNoteText(e.target.value);\r\n if (!editorVisible) {\r\n onNoteSaveClick(); // set parent's editor visible\r\n }\r\n };\r\n\r\n const onNoteFocus = () => {\r\n if (noteText && !editorVisible) {\r\n onNoteSaveClick(); // set parent's editor visible\r\n }\r\n };\r\n\r\n const onBlur = () => {\r\n changeCartFeature(Object.assign({}, cartItem, {\r\n noteText\r\n }), true);\r\n };\r\n\r\n const onNoteSaveClick = () => {\r\n changeCartFeature(Object.assign({}, cartItem, {\r\n noteText\r\n }), true);\r\n closeEditor();\r\n };\r\n\r\n return (\r\n
    \r\n {/*

    {noteText}

    */}\r\n