{"version":3,"sources":["services/WebApiClient.ts","components/login/login.tsx","services/NavService.ts","models/GableType.ts","models/IObj.ts","util/arraySlice.ts","util/clamp.ts","services/CabinetService/DragService.ts","util/replaceInArray.ts","services/CabinetService/InteriorService.ts","util/groupBy.ts","util/toDictionary.ts","services/CabinetService/DragServiceGable.ts","models/GableSide.ts","services/CabinetService/CabinetService.ts","services/CabinetService/DragServiceSide.ts","services/CabinetService/DragServiceSnapLeftAndRight.ts","services/CabinetService/DragServiceTopBottom.ts","services/CabinetService/DragServiceTopMount.ts","models/OverlapInfo.ts","util/range.ts","services/CabinetValidator.ts","services/CabinetService/index.ts","services/TranslationService.ts","components/EditorCommon/EditorContext.ts","components/EditorNav/EditorNav.tsx","contexts/DebugContext.ts","models/User.ts","services/LoginService.ts","contexts/TopNavContext.ts","contexts/TranslationContext.ts","components/EditorCommon/LoginContext.ts","components/EditorCommon/CreateUserForm.tsx","components/EditorCommon/LoginForm.tsx","components/EditorCommon/LoginModal.tsx","util/useClient.ts","components/PasswordEditModal/PasswordEditModal.tsx","components/TopNav/TopNav.tsx","components/ProductLine/ProductLineEditor.tsx","components/DimensionsEditor/CabinetWidthSetter.tsx","components/DimensionsEditor/CabinetHeightSetter.tsx","components/DimensionsEditor/CabinetDepthSetter.tsx","components/DimensionsEditor/CabinetPositionSetter.tsx","components/DimensionsEditor/DimensionsEditor.tsx","components/NotFound.tsx","components/DoorTypeEditor/DoorTypeEditor.tsx","util/PosConverter.ts","components/EditorCommon/DrawContext.ts","components/EditorCommon/ImageOutline.ts","components/DoorEditor/DoorImageFront.tsx","components/DoorEditor/DoorImageTop.tsx","components/DoorEditor/GableImage.tsx","components/DoorEditor/DoorImage.tsx","components/EditorCommon/MaterialSelectorModal.tsx","components/EditorCommon/MaterialSelector.tsx","components/DoorEditor/DoorNumSetter.tsx","components/DoorEditor/DoorOverlapSetter.tsx","components/DoorEditor/UseDamperSetter.tsx","components/DoorEditor/AllDoorsEditor.tsx","components/DoorEditor/BarCountSelector.tsx","components/DoorEditor/SingleDoorEditor.tsx","util/distinct.ts","components/DoorEditor/SingleGableEditor.tsx","components/DoorEditor/DoorEditor.tsx","components/EditorCommon/ResetConfirmModal.tsx","components/InteriorEditor/InteriorImageDragContext.ts","components/InteriorEditor/InteriorImageDragHandler.tsx","contexts/RulerContext.ts","components/DoorEditor/HorizontalRuler.tsx","components/DoorEditor/VerticalRuler.tsx","components/InteriorEditor/InteriorImageItem.tsx","components/InteriorEditor/InteriorImageTop.tsx","components/InteriorEditor/ItemWarning.tsx","components/InteriorEditor/InteriorImageFront.tsx","components/DoorEditor/InterGableRulers.tsx","components/DoorEditor/GableWidthRulers.tsx","components/InteriorEditor/InteriorImage.tsx","components/InteriorEditor/GableMover.tsx","components/InteriorEditor/ProductDebugInfo.tsx","components/InteriorEditor/InteriorItemEditor.tsx","components/InteriorEditor/ProductSubGroup.tsx","components/InteriorEditor/ProductGroup.tsx","components/InteriorEditor/ProductList.tsx","components/Table/SortBy.ts","components/InteriorEditor/InteriorMaterialSelector.tsx","components/InteriorEditor/InteriorEditor.tsx","components/EditorCommon/usePromise.ts","components/LoadSpinner.tsx","util/useState2.ts","components/Table/Table.tsx","components/PieceListEditor/PieceListTable.tsx","services/SaveService.ts","components/EditorCommon/SaveModal.tsx","components/EditorCommon/SaveSuccessModal.tsx","components/PieceListEditor/SaveButton.tsx","components/PieceListEditor/PieceListEditor.tsx","services/ChainInfoService.ts","components/admin/AdminNav/AdminNav.tsx","components/admin/MaterialEditor/ImageSetter.tsx","components/admin/MaterialEditor/MaterialEditor.tsx","components/CabinetList/ReceiptModal.tsx","components/DisplayDate.tsx","util/flags.ts","components/CabinetList/ErrorFlagBadges.tsx","components/LoadSpinnerOverlay/LoadSpinnerOverlay.tsx","components/CabinetList/OrderConfirmationModal.tsx","components/CabinetList/PostalAddressEditorField.tsx","components/CabinetList/PostalAddressEditor.tsx","components/CabinetList/OrderModal.tsx","components/CabinetList/OrderButton.tsx","components/CabinetList/UserSolutionTable.tsx","components/CabinetList/CabinetList.tsx","components/CustomerSearch/CustomerSearchTable.tsx","components/CustomerSearch/UserModal.tsx","components/CustomerSearch/CustomerSearch.tsx","components/admin/GenericEditor.tsx","components/admin/UserEditor/SingleUserEditor.tsx","components/admin/UserEditor/UserEditor.tsx","components/admin/ChainEditor/ChainProductLineAdmin.tsx","components/admin/ChainEditor/FileUploader.tsx","components/admin/ChainEditor/CssAdmin.tsx","components/admin/ChainEditor/HostNameTable.tsx","components/admin/ChainEditor/HostNameAdmin.tsx","components/admin/ChainEditor/LogoAdmin.tsx","components/admin/ChainEditor/SettingsAdmin.tsx","components/admin/ChainEditor/SingleChainAdmin.tsx","components/admin/ChainEditor/ChainEditor.tsx","components/ChainCss.tsx","components/admin/ProductLineAdminEditor/ProductLineDetaulsAdmin.tsx","components/admin/ProductLineAdminEditor/ProductLineImageSetter.tsx","components/admin/ProductLineAdminEditor/ProductLineProductAdmin.tsx","components/admin/ProductLineAdminEditor/SingleProductLineAdmin.tsx","components/admin/ProductLineAdminEditor/ProductLineAdminEditor.tsx","components/ExtraProductEditor/ExtraItemsList.tsx","components/ExtraProductEditor/ExtraProduct.tsx","components/ExtraProductEditor/ExtraProductGroupCard.tsx","components/ExtraProductEditor/ExtraProductsList.tsx","components/ExtraProductEditor/ExtraProductEditor.tsx","components/admin/ProductAdminEditor/SingleProductMaterialEditor.tsx","components/admin/ProductAdminEditor/ProductMaterialsEditor.tsx","components/admin/ProductAdminEditor/SingleProductEditor.tsx","components/admin/ProductAdminEditor/SingleProductSubGroupAdmin.tsx","components/admin/ProductAdminEditor/SingleProductGroupAdmin.tsx","components/admin/ProductAdminEditor/ProductAdminEditor.tsx","components/admin/InteriorMaterialEditor/SingleInteriorMaterialEditor.tsx","components/admin/InteriorMaterialEditor/InteriorMaterialEditor.tsx","components/admin/DoorAdmin/SingleDoorAdmin.tsx","components/admin/DoorAdmin/DoorAdmin.tsx","components/admin/Misc/MiscAdmin.tsx","components/admin/TranslationEditor/SingleLanguageEditor.tsx","components/admin/TranslationEditor/TranslationEditor.tsx","App.tsx","AppWrapper.tsx","index.tsx"],"names":["ItemType","Login","props","handleLogin","evt","a","preventDefault","loginService","login","state","username","password","onLoginSuccess","isLoginEnabled","fieldName","setState","oldState","target","value","className","src","alt","id","onSubmit","this","type","autoFocus","placeholder","autoComplete","name","onChange","handleChange","style","marginTop","disabled","React","Component","VersionClient","baseUrl","http","jsonParseReviver","undefined","window","url_","replace","fetch","method","headers","then","_response","processGetVersion","response","status","_headers","forEach","v","k","text","_responseText","resultData200","JSON","parse","VersionResponse","fromJS","throwException","Promise","resolve","TranslationClient","processGetTranslations","GetTranslationsResponse","PieceListClient","request","options_","body","stringify","processConvert","PieceListConvertResponse","LoginClient","processLogin","LoginResponse","processWhoami","processRenew","processCreateCustomer","CreateUserResponse","processChangePassword","ChainInfoClient","processGetChainInfo","ChainInfo","CabinetClient","processGetCabinetList","CabinetListResponse","processSaveCabinet","UserSolution","userSolutionId","Error","encodeURIComponent","processGetCabinet","GetCabinetResponse","processDeleteSolution","q","processFindCustomers","CustomerSearchResponse","processOrderSolution","OrderSolutionResponse","SyncClient","processStartSync","StartSyncResult","processStopSync","processGetStatus","SyncStatus","UserClient","chainId","processGetUsers","GetUsersResponse","processEditUser","processCreateUser","CreateUserResponse2","processDeleteUser","TranslationAdminClient","processGetLanguages","GetLanguagesResponse","processCreateLanguage","CreateLanguageResponse","processCreatekeys","processSetTranslations","ProductClient","processGetProductGroups","GetProductGroupsResponse","processEditProduct","interiorMaterialId","extension","file","content_","FormData","append","data","fileName","processSetDrawingImage","processSetPictureImage","ProductLineClient","processGetProductLines","GetProductLinesResponse","processCreateProductLine","CreateProductLineResponse","processEditProductLine","EditProductLineResponse","image","processSetImage","SetProductLineImageResponse","processGetProductLineProducts","GetProductLineProductsResponse","productLineId","productId","req","processSetProductLineProduct","SetProductLineProductResponse","MaterialClient","processGetMaterials","MaterialListResponse","externalId","processSetTextureImage","SetTextureImageResponse","processSetSampleImage","SetSampleImageResponse","InteriorMaterialClient","processGetInteriorMaterials","InteriorMaterialListResponse","processCreateNew","processDeleteInteriorMaterial","processSetDetails","fileType","DoorClient","processGetDoors","GetDoorsResponse","processEditDoor","processSetDoorImage","ChainClient","processGetChains","GetChainsResponse","processSetChainDetails","processCreateHostName","CreateHostNameResponse","processDeleteHostname","logo","processSetLogo","css","processSetCss","processGetChainProductLines","GetChainProductLinesResponse","processSetChainProductLine","SetChainProductLineResponse","processGetStores","GetStoresResponse","CacheClient","processClearCache","versionNumber","versionName","commitHash","property","hasOwnProperty","_data","result","init","translations","key","pieceList","PieceList","toJSON","currency","totalPriceExVat","vatRate","created","pieceListLines","Date","toString","Array","isArray","item","push","PieceListLine","toISOString","partNo","descriptions","unitPriceExVat","quantity","itemType","itemVariants","size","Vec3d","PieceListLineDescription","ItemVariant","VariantType","variantType","description","CabinetPosition","x","y","z","PieceListConvertRequest","cabinet","Cabinet","position","height","width","depth","roof","sidePanel","bottom","doorProductId","numDoorOverlaps","doorDampening","doors","leftGableMaterialId","rightGableMaterialId","interiorItems","extraItems","orderNumber","Door","InteriorItem","ExtraItem","UserRight","materialId","bandMaterialId","barId","Vec2d","index","isFlipped","parentIndexes","count","userId","token","tokenExpires","userRights","InteriorProductType","LoginRequest","CreateUserRequest","phoneNumber","email","ChangePasswordRequest","oldPassword","newPassword","storeId","logoUrl","cssUrl","productLines","extraProducts","interiorMaterials","supportProducts","ProductLine","ExtraProductGroup","InteriorMaterial","SupportProduct","imageUrl","defaultSize","minSize","maxSize","adapterProducts","interiorProducts","gableProducts","DoorProduct","GableProduct","InteriorProductGroup","damperLeft","damperMiddle","damperRight","frame","doorSizes","bars","bandMaterials","DoorFrame","DamperProduct","DoorSize","DoorBar","Material","price","minWidth","textureUrl","heightTop","heightBotton","widthSides","thickness","min","max","material","sampleImageUrl","textureImageUrl","numBars","barHeight","bandHeight","materials","ProductMaterial","interiorProductSubGroups","InteriorProductSubGroup","productType","products","InteriorProduct","ErrorFlag","isPullout","snapOffset","InteriorProductMaterial","picturePath","drawingPath","ExtraProduct","supportedProducts","numItemsSupported","userSolutions","createdAt","orderedAt","pdfPath","errorFlags","DeliveryType","SaveCabinetRequest","doorImageB64Png","interiorImageB64Png","searchResults","UserSearchResult","emailAddress","lastActive","solutions","OrderSolutionRequest","customerAddress","deliveryType","PostalAddress","address1","address2","postalCode","city","country","caseId","phone","UserRole","wasQueued","started","completed","users","User","userRole","UserEditRequest","CreateUserRequest2","languages","Language","Translation","languageId","defaultValue","CreateKeysRequest","translationKeys","TranslationKey","SetTranslationsRequest","CreateLanguageRequest","productGroups","ProductGroup","productSubGroups","ProductSubGroup","Product","defaultName","isInteriorActive","isExtraActive","InteriorProductMaterial2","globalProductId","isActive","drawingImageUrl","pictureImageUrl","EditProductRequest","InteriorProductMaterialUpdate","ProductLine2","productLineLanguages","ProductLineLanguage","languageName","CreateProductLineRequest","EditProductLineRequest","productLineProducts","ProductLineProduct","SetProductLineProductRequest","MaterialItem","path","InteriorMaterial2","InteriorMaterialTranslation","SetInteriorMaterialDetailsRequest","Door2","doorTranslations","DoorTranslation","EditDoorRequest","chains","Chain","productRailTop","productRailBottom","productShippingFee","hostNames","HostName","host","SetChainDetailsRequest","productRailTopExternalId","productRailBottomExternalId","productShippingFeeExternalId","hostName","CreateHostNameRequest","chainProductLines","ChainProductLine","customName","SetChainProductLineRequest","stores","Store","ApiException","message","isApiException","obj","editorIndex","url","translationKey","translationDefault","hasErrors","_","Dimensions","DoorTypes","Doors","Interior","cabinetService","getErrorFlags","None","ExtraProducts","requiredRights","EditMaterials","EditChains","EditProductLines","EditProducts","EditTranslations","Misc","StartSync","Admin","CabinetList","LoadSolution","UserSearch","LoadChainSolution","NavPage","GableType","NavService","history","current","navigate","prev","prevAvailable","force","next","nextAvailable","EditorPages","canNavigateTo","page","Pages","find","p","Corpus","success","initDimensions","initDoors","topRight","add","b","isIVec3d","subtract","moveObj","vec","isObj3d","o","intersectDim","dim","intersect","every","cheapDist","zDist","Math","abs","boundingBoxO2","objs","boundingBoxN","dims","length","console","assert","oldMax","objMax","newMax","newPos","newSize","ts","func","minT","minVal","i","t","tVal","clamp","mid","DragService","baseState","mouseOffset","floorY","productSubGroup","getBaseState","cursorModelPos","log","psg","dragInfo","forceCopy","copy","move","dragObject","newIndex","map","newItem","concat","itemInfo","newItems","otherItems","product","interior","getProduct","filter","otherGables","Gable","otherModules","Module","sections","getSections","inf","getGableInfo","prevGables","maxPos","left","otherGableLikeStuff","sort","gable","gableInfo","pos","getSectionsForGable","rightOuterGableInfo","right","getSectionsForModules","secA","secB","mod","leftGable","rightGable","moduleMaterialThickness","isModule","stepHeight","stepOffset","yMin","prevGable","pop","replaceInArray","arr","selector","replacer","slice","findIndex","replacement","InteriorService","changeCabinet","productDict","createProductDict","chainInfo","items","changes","mat","itemIndex","oldItem","setItems","doorsByRail","keySelector","group","g","newGroup","groupBy","getDoorInfos","di","railNumber","sightRect","getSightRect","sightLeftX","sightRightX","clearsAllDoors","isExceedingBounds","interiorLimits","minX","maxX","rail","clearsRail","doorGroup","leftDoors","n","openingStartX","totalSize","rightDoors","openingEndX","fitsLeft","fitsRight","d","reduce","sum","doorSize","isMountedOnWall","checkLeft","GableShelf","ShelfOrDrawer","LeftMount","LeftOrRightMount","checkRight","RightMount","limits","dist","maxGableMovement","clampedDist","allItems","gableIndex","oldCabinet","itemTopRight","indexesToRemove","getDescendentIndexes","has","keyFunc","valFunc","val","toDictionary","flatMap","pl","pg","parentIndex","Set","foundAny","potentialChild","childParentIndex","DragServiceGable","gableState","nonDescendents","freeSpaces","productWidth","itemA","itemB","gableSnapPositions","getGableSnapPositions","descendentIndexes","ii","freeStartX","getFreeSpaces","fs","itemsWithGableMoved","gableTr","gableMoveAmount","itemTr","getBestPos","shadows","posX","productMaterial","m","valid","overlapsOthers","some","otherItem","getBestGableX","baseX","round","best","bestFreeSpace","bestPosInSpace","bestPos","pt","cabinetWidth","itemWidth","positions","leftOuterGableMaxX","rightGableMinX","leftX","rightX","getSnapPositions","snapDist","GableSide","ResetTopic","DragServiceSide","possiblePositions","getPossiblePositions","warn","sect","objSize","sides","side","objPos","section","mouseTarget","DragServiceSnapLeftAndRight","isMatching","sectionResult","gab","isSizeMatching","isTypeMatching","ModuleShelf","DragServiceTopBottom","bestPosition","pp","isInside","itemY","idx","isValid","TopAndBottom","DragServiceTopMount","sectTopBottomY","sectMiddleX","TopMount","OverlapInfo","doorPositions","openingWidth","overlapWidth","numOverlaps","doorWidth","getNumOverlaps","totalDoorWidth","numDoors","railPositions","prevPos","range","start","end","hasProductLine","notNullish","hasDimensions","nullish","CabinetService","resetConfirmer","setCabinet","doorOverlapWidth","_cabinet","cabinetChanges","change","client","getCabinet","debug","newDoors","updateDoorDimensions","newCabinet","doorIndex","elem","slices","arraySlice","newElem","updateElement","oldDoor","iDoor","productLine","getProductLine","isChanged","doorProduct","getDoorProduct","numDoorChoices","getNumDoorChoices","getOptimalNumberOfDoors","newDoor","getNewDoor","supportsDoorDamping","numOverlapChoices","getOverlapInfos","oi","getGableMaterials","Left","Right","hasWall","affectsInterior","affectsDoors","gp","canUseDampening","doorInfos","damperProduct","extraProductId","oldExtraItems","newArray","ei","newCount","existingDoors","door","lastDoor","currentCabinet","overlapInfos","dp","possibleOverlapInfos","ds","doorCounts","possibleDoorPositions","getLeftSideInfo","getRightSideInfo","adapterSize","SidePanel","gableSize","wall","WallLeft","WallRight","WallBoth","gableSide","adapterMaterials","bm","doorBarId","bar","newProductLine","resetTopics","resetDimensions","exceedsBounds","resetDoors","FreeStanding","actualWidth","actualHeight","doorInfo","getPulloutViolations","Pullout","getWallMountViolations","WallMount","getExceededBounds","ExceedsBounds","withNumDoors","use","changeDoor","bandMat","getBandFillingMaterial","overlapInfo","currentOverlapInfo","totalOverlapWidth","doorThickness","nextDoorPosX","barProduct","getDoorBarProduct","fillingMaterial","getFillingMaterial","fillingTexture","frameElements","posZ","frameName","barFrameElements","fillingElements","bandFillingMaterial","bandFillingTexture","bandPos","bandSize","barIndex","getDragService","service","acceptable","error","fillTemplate","template","args","replaceAll","TranslationService","showTranslationKeys","c","getValue","toLowerCase","reportMissing","unknownTranslations","reported","numTranslations","NullTranslator","createDefaultCabinet","navService","EditorContext","createContext","translator","EditorNav","ec","useContext","getClassName","np","classes","currentPage","join","prevPage","prevValid","nextPage","nextValid","nextButton","onClick","DebugContext","displayExtendedProductInfo","set","LoginService","onUserChange","loginClient","storage","currentUser","sessionStorage","AuthorizationHttpService","handleLoginResponseChanged","lr","setItem","userTokenKey","removeItem","doCallback","user","loadLoginResponse","setLoginResponse","tokenJson","getItem","createCustomer","parent","Headers","delete","TopNavContext","u","TranslationContext","LoginContext","CreateUserForm","lc","tc","useState","isWorking","setIsWorking","setUsername","setPassword","setName","setPhoneNumber","setEmail","canCreate","onUserCreated","tcUsername","tcPassword","tcName","tcPhone","tcEmail","htmlFor","title","required","colSpan","LoginForm","onLoggedIn","LoginModal","Modal","onHide","onClose","show","animation","centered","scrollable","Header","closeButton","closeLabel","Title","Body","useClient","clientConstructor","loginContext","useMemo","PasswordEditModal","setOldPassword","setNewPassword","isBusy","setIsBusy","topNavContext","changePassword","isEnabled","display","Footer","TopNav","context","showModal","setShowModal","rightSide","RightSideWithLogin","cursor","to","header","debugContext","elements","userElements","getDropdownItems","NavDropdown","Divider","adminElements","debugElements","ur","Item","onSelect","logout","navPages","requiredRight","ProductLineEditor","selectProductLine","setProductLine","navigateNext","border","Card","Img","variant","Text","whiteSpace","CabinetWidthSetter","widthStr","setWidthStr","parseInt","setCabinetWidth","onBlur","CabinetHeightSetter","heightStr","setHeightStr","setCabinetHeight","CabinetDepthSetter","depthStr","setDepthStr","depths","_depthStr","Number","isNaN","setCabinetDepth","CabinetPositionSetter","posElements","setCabinetPosition","aspectRatio","DimensionsEditor","sidePanelOverlay","Popover","PopoverTitle","PopoverContent","OverlayTrigger","trigger","overlay","placement","setSidePanel","tabIndex","classNames","activeClasses","NotFound","useHistory","goBack","DoorTypeEditor","setDoorProduct","navigateNextAvailable","doorTypes","noDoor","FrontPosConverter","cabinetHeight","svgObj","TopPosConverter","DrawContext","preserveAspectRatio","ImageOutline","stroke","fill","minFrameDisplaySize","DoorImageFront","drawContext","convert","doorGroups","fillings","filling","fillingIndex","xlinkHref","frames","frameIndex","dampingStatus","getDampingStatus","dampingProps","getDampingProps","doorMidX","dampingInfo","textAnchor","fontSize","onClickDoor","DoorImageTop","GableImage","matId","doorTopPoss","DoorImage","onClickGable","rest","offset","doorMinZ","topImageOffset","viewBoxDimensions","boundingBox","xmlns","xmlnsXlink","viewBox","transform","MaterialSelectorModal","currentId","Button","MaterialSelector","showMaterialModal","setShowMaterialModal","closeModal","currentMaterial","bgImage","matName","marginBottom","DoorNumSetter","numDoorsStr","setNumDoorsStr","newValStr","newVal","setNumDoors","doorChoices","doorChoiceTranslator","DoorOverlapSetter","str","setStr","setNumOverlaps","optionTranslator","overlaps","options","UseDamperSetter","checked","setUseDamping","AllDoorsEditor","supportsDamping","setGableMaterialId","BarCountSelector","setBar","SingleDoorEditor","getDoorBar","bandMaterial","setBandMaterial","barCountSelector","barCount","keys","distinct","setDoorMaterial","SingleGableEditor","DoorEditor","showEditor","setShowEditor","ResetConfirmModal","topicItems","topics","topic","translation","onAnswer","InteriorDragContext","info","setInfo","InteriorImageDragHandler","assertHasDimensions","dragContext","ref","useRef","dragService","setDragService","setDragInfo","cabinetSize","draggedItem","selectRect","shadow","transformString","getFlipTransformString","onMouseEnter","isDragging","modelPos","getModelPos","svgCanvas","subGroup","getDragInfo","ctrlKey","onMouseMove","isLeftMouseButtonPressed","initialCoords","clientX","clientY","initialMouseModelPos","getModelPos2","onMouseDown","onMouseUp","place","onMouseLeave","children","buttons","clientPos","svgPoint","createSVGPoint","svgCoordinate","matrixTransform","getScreenCTM","inverse","RulerContext","serifHeight","HorizontalRuler","svgY","x2","x1","y1","y2","toDist","suffix","toLocaleString","minimumFractionDigits","maximumFractionDigits","serifWidth","VerticalRuler","InteriorImageItem","bottomPiece","itemMouseDown","strokeWidth","stopPropagation","gableDisplayProps","InteriorImageTop","pulloutViolations","gablesAndModules","gableDepth","wallThicknesses","getWallThicknesses","wallDisplayProps","wallThickness","gam","pv","selectPulloutViolator","color","pointerEvents","ItemWarning","overCoverage","blownUpItem","sizeToAdd","getSortOrder","InteriorImageFront","shouldShowItem","itemImages","helpText","displayHelpTextOnEmpty","font","wallMountViolations","exceededBounds","gi","hasWallLeft","hasWallRight","wallthicknesses","minRulerLength","InterGableRulers","gables","stops","stop","s","GableWidthRulers","InteriorImage","topImageBounds","topImage","imageBounds","GableMover","moveItem","direction","distance","moveGable","helpOverlay","textAlign","transition","ProductDebugInfo","productGroup","InteriorItemEditor","isMaterialModalOpen","setIsMaterialModalOpen","isViolatingPullout","indexOf","canSelectMaterials","selectableMaterials","im","materialSelectorModal","setItemMaterial","role","deleteItem","materialWithPicture","ListGroup","TouchEvent","nativeEvent","loading","collapsed","setCollapsed","subGroups","sg","icon","ProductList","groupCards","ipGroup","flexDirection","InteriorMaterialSelector","activeMaterialIds","activeMaterialIdSet","newMat","setInteriorMaterialId","InteriorEditor","currentDragInfo","setCurrentDragInfo","Provider","updateCurrentItem","usePromise","setVal","useEffect","cancelled","LoadSpinner","isVisible","visibility","useState2","initialState","SortBy","prop","sa","sb","localeCompare","valueOf","minLength","saa","sba","comparer","Table","sortStrategy","tableProps","originalClassName","otherTableProps","rows","sorter","columns","colIndex","reverser","reverse","tableClassName","getHeaderClasses","col","results","cols","setSort","rowElements","dat","rowIndex","fields","content","onRowClick","rowKey","footers","footer","formatQuantity","nStr","maximumSignificantDigits","PieceListTable","totalUnitPrice","pll","formatPrice","priceExVat","formattedPrice","totalQuantity","previousSum","vatPercent","row","String","vat","SaveService","cabinetClient","editorContext","overwrite","getImages","images","doorImage","interiorImage","saveCabinet","serverSolution","loadSavedCabinet","toPng","createElement","svgElement","imageName","editorContextElem","drawContextElem","markup","ReactDOMServer","renderToStaticMarkup","canvas","document","appendChild","ctx","getContext","Canvg","fromString","ignoreMouse","ignoreAnimation","render","dataUrl","toDataURL","stack","SaveModal","canSave","canOverwrite","save","saveService","userSolution","onSaved","btnSaveClasses","btnOverwriteClasses","absStyle","SaveSuccessModal","href","download","SaveButton","modal","activeModal","setActiveModal","newModal","PieceListEditor","useCallback","ChainInfoService","getChainInfo","dtoCi","dtoPg","ps","dtoP","dtoPl","psgs","dtoPsg","AdminNav","ImageSetter","backgroundImage","onDrop","dataTransfer","kind","getAsFile","getFirstFile","onSet","onDragOver","dropEffect","MaterialEditor","matsPromise","setMatsPromise","mats","setMats","matService","getMaterials","bodyRows","f","setSampleImage","setTextureImage","ReceiptModal","DisplayDate","ddProps","date","weekday","year","month","day","hour","minute","toLocaleDateString","hasFlag","valueToTest","flag","ErrorFlagBadges","PulloutWarningBadge","WallMountWarningBadge","ExceedsBoundsWarningBadge","marginRight","LoadSpinnerOverlay","OrderConfirmationModal","number","PostalAddressEditorField","label","propName","htmlType","address","PostalAddressEditor","postalAddress","OrderModal","billingAddress","BillingAddress","setDeliveryType","us","strVal","intVal","StoreAddress","OrderButton","topBarContext","currentState","solution","OrderSolution","orderInfo","orderSolution","onOrderComplete","orderChanged","UserSolutionTable","isDeletable","confirm","deleteSolution","openSolution","orderRevision","setOrderRevision","showReceiptFor","setShowReceiptFor","setUserSolutions","getCabinetList","cl","CustomerSearchTable","usr","onSelectUser","UserModal","CustomerSearch","searchField","searchString","selectedUserId","userList","showReceiptForId","updateUserList","findCustomers","select","selectedUser","maxWidth","GenericEditor","updateCount","setUpdateCount","internalSelectedId","selectedId","getterFunc","itemResponse","selectedItem","itemElements","nameFunc","itemCreator","newId","navPage","newHandler","onNew","buttonName","leftToolbox","editorFunc","SingleUserEditor","updateProp","editUser","StoreUser","store","UserEditor","getUsers","prompt","createUser","ChainProductLineAdmin","setChainProductLines","replaceCpl","newState","requests","setChainProductLine","chain","allSettled","uc","getChainProductLines","cpl","originalName","setIsActive","FileUploader","CssAdmin","chainClient","setCss","alert","HostNameTable","hn","deleteHostname","onHostnameDeleted","deleteHost","hostnames","HostNameAdmin","newHostname","setNewHostname","createHostName","LogoAdmin","split","setLogo","SettingsAdmin","translationClient","setVatRate","setProductRailTop","setProductRailBottom","productShipping","setProductShipping","setLanguageId","setChainDetails","getLanguages","step","vatStr","vr","parseFloat","ex","setVatRateStr","lang","SingleChainAdmin","getStores","ChainEditor","selectedChainId","setSelectedChainId","chainResponse","getChains","selectedChain","chainItems","ChainCss","rel","head","removeChild","ProductLineDetaulsAdmin","productLineLanguage","selectedTranslationIndex","selectedTranslation","editProductLine","l","newName","newTranslations","newDesc","setDesc","ProductLineImageSetter","setImage","ProductLineProductAdmin","setProductLineProducts","plp","setProductLineProduct","getProductLineProducts","allActive","active","newPlps","setAllActive","newProductLineProducts","replacePlp","SingleProductLineAdmin","ProductLineAdminEditor","selectedProductLineId","setSelectedProductLineId","isCreating","setIsCreating","getProductLines","selectedProductLine","productLineItems","createProductLine","ExtraItemsList","epg","ep","getExternalId","getMaterialName","setExtraItemCount","setCount","valueAsNumber","removeExtraItem","productCount","setProductCount","defaultMat","defaultMatId","setMaterialId","addExtraProduct","ExtraProductGroupCard","ExtraProductsList","extraProductGroup","ExtraProductEditor","SingleProductMaterialEditor","matProp","updateMatProp","setDrawingImage","setPictureImage","ProductMaterialsEditor","materialProps","matProps","newProp","mp","newList","SingleProductEditor","setSnapOffset","setIsInteriorActive","setIsExtraActive","globalMat","productMat","editProduct","productMaterials","SingleProductSubGroupAdmin","selectedProductId","SingleProductGroupAdmin","selectedProductSubGroupId","ProductAdminEditor","interiorMaterialClient","getProductGroups","getInteriorMaterials","productSubGroupId","productGroupId","SingleInteriorMaterialEditor","setDetails","InteriorMaterialEditor","createNew","SingleDoorAdmin","dt","editDoor","setDoorImage","File","setStringProp","newTranslation","DoorAdmin","getDoors","MiscAdmin","syncClient","cacheClient","syncState","setSyncState","fetchSyncState","getStatus","timerHandle","setInterval","clearInterval","versionClient","serverVersion","getVersion","startSync","stopSync","clearCache","versions","version","process","buildName","substring","SingleLanguageEditor","language","setTranslations","tableCols","setTranslation","TranslationEditor","unreportedKeys","Object","createkeys","unknownCount","marginLeft","editorUpdateCount","createLanguage","preventDrop","App","setUser","resetConfirmState","setResetConfirmState","debugContextProps","getTranslations","translationService","translate","bind","cis","reject","confirmer","ans","resetConfirmModal","routeSwitch","exact","commonEditorProps","AppWrapper","ReactDOM","StrictMode","getElementById"],"mappings":"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","file":"static/js/main.ca9ddc6c.chunk.js","sourcesContent":["/* tslint:disable */\r\n/* eslint-disable */\r\n//----------------------\r\n// \r\n// Generated using the NSwag toolchain v13.15.5.0 (NJsonSchema v10.6.6.0 (Newtonsoft.Json v12.0.0.0)) (http://NSwag.org)\r\n// \r\n//----------------------\r\n// ReSharper disable InconsistentNaming\r\n\r\nexport class DecoyClient {\r\n private http: { fetch(url: RequestInfo, init?: RequestInit): Promise };\r\n private baseUrl: string;\r\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\r\n\r\n constructor(baseUrl?: string, http?: { fetch(url: RequestInfo, init?: RequestInit): Promise }) {\r\n this.http = http ? http : window;\r\n this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\r\n }\r\n\r\n decoy(): Promise {\r\n let url_ = this.baseUrl + \"/index.html\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ = {\r\n method: \"POST\",\r\n headers: {\r\n }\r\n };\r\n\r\n return this.http.fetch(url_, options_).then((_response: Response) => {\r\n return this.processDecoy(_response);\r\n });\r\n }\r\n\r\n protected processDecoy(response: Response): Promise {\r\n const status = response.status;\r\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n if (status === 200) {\r\n return response.text().then((_responseText) => {\r\n return;\r\n });\r\n } else if (status !== 200 && status !== 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n });\r\n }\r\n return Promise.resolve(null);\r\n }\r\n}\r\n\r\nexport class VersionClient {\r\n private http: { fetch(url: RequestInfo, init?: RequestInit): Promise };\r\n private baseUrl: string;\r\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\r\n\r\n constructor(baseUrl?: string, http?: { fetch(url: RequestInfo, init?: RequestInit): Promise }) {\r\n this.http = http ? http : window;\r\n this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\r\n }\r\n\r\n getVersion(): Promise {\r\n let url_ = this.baseUrl + \"/api/version\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ = {\r\n method: \"GET\",\r\n headers: {\r\n \"Accept\": \"application/json\"\r\n }\r\n };\r\n\r\n return this.http.fetch(url_, options_).then((_response: Response) => {\r\n return this.processGetVersion(_response);\r\n });\r\n }\r\n\r\n protected processGetVersion(response: Response): Promise {\r\n const status = response.status;\r\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n if (status === 200) {\r\n return response.text().then((_responseText) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = VersionResponse.fromJS(resultData200);\r\n return result200;\r\n });\r\n } else if (status !== 200 && status !== 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n });\r\n }\r\n return Promise.resolve(null);\r\n }\r\n}\r\n\r\nexport class TranslationClient {\r\n private http: { fetch(url: RequestInfo, init?: RequestInit): Promise };\r\n private baseUrl: string;\r\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\r\n\r\n constructor(baseUrl?: string, http?: { fetch(url: RequestInfo, init?: RequestInit): Promise }) {\r\n this.http = http ? http : window;\r\n this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\r\n }\r\n\r\n getTranslations(): Promise {\r\n let url_ = this.baseUrl + \"/api/internal/translation\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ = {\r\n method: \"GET\",\r\n headers: {\r\n \"Accept\": \"application/json\"\r\n }\r\n };\r\n\r\n return this.http.fetch(url_, options_).then((_response: Response) => {\r\n return this.processGetTranslations(_response);\r\n });\r\n }\r\n\r\n protected processGetTranslations(response: Response): Promise {\r\n const status = response.status;\r\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n if (status === 200) {\r\n return response.text().then((_responseText) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = GetTranslationsResponse.fromJS(resultData200);\r\n return result200;\r\n });\r\n } else if (status !== 200 && status !== 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n });\r\n }\r\n return Promise.resolve(null);\r\n }\r\n}\r\n\r\nexport class PieceListClient {\r\n private http: { fetch(url: RequestInfo, init?: RequestInit): Promise };\r\n private baseUrl: string;\r\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\r\n\r\n constructor(baseUrl?: string, http?: { fetch(url: RequestInfo, init?: RequestInit): Promise }) {\r\n this.http = http ? http : window;\r\n this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\r\n }\r\n\r\n convert(request: PieceListConvertRequest): Promise {\r\n let url_ = this.baseUrl + \"/api/internal/pieceList/convert\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(request);\r\n\r\n let options_ = {\r\n body: content_,\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n \"Accept\": \"application/json\"\r\n }\r\n };\r\n\r\n return this.http.fetch(url_, options_).then((_response: Response) => {\r\n return this.processConvert(_response);\r\n });\r\n }\r\n\r\n protected processConvert(response: Response): Promise {\r\n const status = response.status;\r\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n if (status === 200) {\r\n return response.text().then((_responseText) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = PieceListConvertResponse.fromJS(resultData200);\r\n return result200;\r\n });\r\n } else if (status !== 200 && status !== 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n });\r\n }\r\n return Promise.resolve(null);\r\n }\r\n}\r\n\r\nexport class LoginClient {\r\n private http: { fetch(url: RequestInfo, init?: RequestInit): Promise };\r\n private baseUrl: string;\r\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\r\n\r\n constructor(baseUrl?: string, http?: { fetch(url: RequestInfo, init?: RequestInit): Promise }) {\r\n this.http = http ? http : window;\r\n this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\r\n }\r\n\r\n login(request: LoginRequest): Promise {\r\n let url_ = this.baseUrl + \"/api/internal/login\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(request);\r\n\r\n let options_ = {\r\n body: content_,\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n \"Accept\": \"application/json\"\r\n }\r\n };\r\n\r\n return this.http.fetch(url_, options_).then((_response: Response) => {\r\n return this.processLogin(_response);\r\n });\r\n }\r\n\r\n protected processLogin(response: Response): Promise {\r\n const status = response.status;\r\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n if (status === 200) {\r\n return response.text().then((_responseText) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = LoginResponse.fromJS(resultData200);\r\n return result200;\r\n });\r\n } else if (status !== 200 && status !== 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n });\r\n }\r\n return Promise.resolve(null);\r\n }\r\n\r\n whoami(): Promise {\r\n let url_ = this.baseUrl + \"/api/internal/login/whoami\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ = {\r\n method: \"GET\",\r\n headers: {\r\n \"Accept\": \"application/json\"\r\n }\r\n };\r\n\r\n return this.http.fetch(url_, options_).then((_response: Response) => {\r\n return this.processWhoami(_response);\r\n });\r\n }\r\n\r\n protected processWhoami(response: Response): Promise {\r\n const status = response.status;\r\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n if (status === 200) {\r\n return response.text().then((_responseText) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = resultData200 !== undefined ? resultData200 : null;\r\n \r\n return result200;\r\n });\r\n } else if (status !== 200 && status !== 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n });\r\n }\r\n return Promise.resolve(null);\r\n }\r\n\r\n renew(): Promise {\r\n let url_ = this.baseUrl + \"/api/internal/login/renew\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ = {\r\n method: \"GET\",\r\n headers: {\r\n \"Accept\": \"application/json\"\r\n }\r\n };\r\n\r\n return this.http.fetch(url_, options_).then((_response: Response) => {\r\n return this.processRenew(_response);\r\n });\r\n }\r\n\r\n protected processRenew(response: Response): Promise {\r\n const status = response.status;\r\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n if (status === 200) {\r\n return response.text().then((_responseText) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = LoginResponse.fromJS(resultData200);\r\n return result200;\r\n });\r\n } else if (status !== 200 && status !== 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n });\r\n }\r\n return Promise.resolve(null);\r\n }\r\n\r\n createCustomer(request: CreateUserRequest): Promise {\r\n let url_ = this.baseUrl + \"/api/internal/login/new\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(request);\r\n\r\n let options_ = {\r\n body: content_,\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n \"Accept\": \"application/json\"\r\n }\r\n };\r\n\r\n return this.http.fetch(url_, options_).then((_response: Response) => {\r\n return this.processCreateCustomer(_response);\r\n });\r\n }\r\n\r\n protected processCreateCustomer(response: Response): Promise {\r\n const status = response.status;\r\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n if (status === 200) {\r\n return response.text().then((_responseText) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = CreateUserResponse.fromJS(resultData200);\r\n return result200;\r\n });\r\n } else if (status !== 200 && status !== 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n });\r\n }\r\n return Promise.resolve(null);\r\n }\r\n\r\n changePassword(request: ChangePasswordRequest): Promise {\r\n let url_ = this.baseUrl + \"/api/internal/login/password\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(request);\r\n\r\n let options_ = {\r\n body: content_,\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n }\r\n };\r\n\r\n return this.http.fetch(url_, options_).then((_response: Response) => {\r\n return this.processChangePassword(_response);\r\n });\r\n }\r\n\r\n protected processChangePassword(response: Response): Promise {\r\n const status = response.status;\r\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n if (status === 200) {\r\n return response.text().then((_responseText) => {\r\n return;\r\n });\r\n } else if (status !== 200 && status !== 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n });\r\n }\r\n return Promise.resolve(null);\r\n }\r\n}\r\n\r\nexport class ChainInfoClient {\r\n private http: { fetch(url: RequestInfo, init?: RequestInit): Promise };\r\n private baseUrl: string;\r\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\r\n\r\n constructor(baseUrl?: string, http?: { fetch(url: RequestInfo, init?: RequestInit): Promise }) {\r\n this.http = http ? http : window;\r\n this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\r\n }\r\n\r\n getChainInfo(): Promise {\r\n let url_ = this.baseUrl + \"/api/internal/chainInfo\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ = {\r\n method: \"GET\",\r\n headers: {\r\n \"Accept\": \"application/json\"\r\n }\r\n };\r\n\r\n return this.http.fetch(url_, options_).then((_response: Response) => {\r\n return this.processGetChainInfo(_response);\r\n });\r\n }\r\n\r\n protected processGetChainInfo(response: Response): Promise {\r\n const status = response.status;\r\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n if (status === 200) {\r\n return response.text().then((_responseText) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = ChainInfo.fromJS(resultData200);\r\n return result200;\r\n });\r\n } else if (status !== 200 && status !== 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n });\r\n }\r\n return Promise.resolve(null);\r\n }\r\n}\r\n\r\nexport class CabinetClient {\r\n private http: { fetch(url: RequestInfo, init?: RequestInit): Promise };\r\n private baseUrl: string;\r\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\r\n\r\n constructor(baseUrl?: string, http?: { fetch(url: RequestInfo, init?: RequestInit): Promise }) {\r\n this.http = http ? http : window;\r\n this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\r\n }\r\n\r\n getCabinetList(): Promise {\r\n let url_ = this.baseUrl + \"/api/internal/cabinet\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ = {\r\n method: \"GET\",\r\n headers: {\r\n \"Accept\": \"application/json\"\r\n }\r\n };\r\n\r\n return this.http.fetch(url_, options_).then((_response: Response) => {\r\n return this.processGetCabinetList(_response);\r\n });\r\n }\r\n\r\n protected processGetCabinetList(response: Response): Promise {\r\n const status = response.status;\r\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n if (status === 200) {\r\n return response.text().then((_responseText) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = CabinetListResponse.fromJS(resultData200);\r\n return result200;\r\n });\r\n } else if (status !== 200 && status !== 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n });\r\n }\r\n return Promise.resolve(null);\r\n }\r\n\r\n saveCabinet(request: SaveCabinetRequest): Promise {\r\n let url_ = this.baseUrl + \"/api/internal/cabinet\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(request);\r\n\r\n let options_ = {\r\n body: content_,\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n \"Accept\": \"application/json\"\r\n }\r\n };\r\n\r\n return this.http.fetch(url_, options_).then((_response: Response) => {\r\n return this.processSaveCabinet(_response);\r\n });\r\n }\r\n\r\n protected processSaveCabinet(response: Response): Promise {\r\n const status = response.status;\r\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n if (status === 200) {\r\n return response.text().then((_responseText) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = UserSolution.fromJS(resultData200);\r\n return result200;\r\n });\r\n } else if (status !== 200 && status !== 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n });\r\n }\r\n return Promise.resolve(null);\r\n }\r\n\r\n getCabinet(userSolutionId: string): Promise {\r\n let url_ = this.baseUrl + \"/api/internal/cabinet/{userSolutionId}\";\r\n if (userSolutionId === undefined || userSolutionId === null)\r\n throw new Error(\"The parameter 'userSolutionId' must be defined.\");\r\n url_ = url_.replace(\"{userSolutionId}\", encodeURIComponent(\"\" + userSolutionId));\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ = {\r\n method: \"GET\",\r\n headers: {\r\n \"Accept\": \"application/json\"\r\n }\r\n };\r\n\r\n return this.http.fetch(url_, options_).then((_response: Response) => {\r\n return this.processGetCabinet(_response);\r\n });\r\n }\r\n\r\n protected processGetCabinet(response: Response): Promise {\r\n const status = response.status;\r\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n if (status === 200) {\r\n return response.text().then((_responseText) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = GetCabinetResponse.fromJS(resultData200);\r\n return result200;\r\n });\r\n } else if (status !== 200 && status !== 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n });\r\n }\r\n return Promise.resolve(null);\r\n }\r\n\r\n deleteSolution(userSolutionId: string): Promise {\r\n let url_ = this.baseUrl + \"/api/internal/cabinet/{userSolutionId}\";\r\n if (userSolutionId === undefined || userSolutionId === null)\r\n throw new Error(\"The parameter 'userSolutionId' must be defined.\");\r\n url_ = url_.replace(\"{userSolutionId}\", encodeURIComponent(\"\" + userSolutionId));\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ = {\r\n method: \"DELETE\",\r\n headers: {\r\n }\r\n };\r\n\r\n return this.http.fetch(url_, options_).then((_response: Response) => {\r\n return this.processDeleteSolution(_response);\r\n });\r\n }\r\n\r\n protected processDeleteSolution(response: Response): Promise {\r\n const status = response.status;\r\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n if (status === 200) {\r\n return response.text().then((_responseText) => {\r\n return;\r\n });\r\n } else if (status !== 200 && status !== 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n });\r\n }\r\n return Promise.resolve(null);\r\n }\r\n\r\n findCustomers(q?: string | null | undefined): Promise {\r\n let url_ = this.baseUrl + \"/api/internal/cabinet/find?\";\r\n if (q !== undefined && q !== null)\r\n url_ += \"Q=\" + encodeURIComponent(\"\" + q) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ = {\r\n method: \"GET\",\r\n headers: {\r\n \"Accept\": \"application/json\"\r\n }\r\n };\r\n\r\n return this.http.fetch(url_, options_).then((_response: Response) => {\r\n return this.processFindCustomers(_response);\r\n });\r\n }\r\n\r\n protected processFindCustomers(response: Response): Promise {\r\n const status = response.status;\r\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n if (status === 200) {\r\n return response.text().then((_responseText) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = CustomerSearchResponse.fromJS(resultData200);\r\n return result200;\r\n });\r\n } else if (status !== 200 && status !== 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n });\r\n }\r\n return Promise.resolve(null);\r\n }\r\n\r\n orderSolution(userSolutionId: string, request: OrderSolutionRequest): Promise {\r\n let url_ = this.baseUrl + \"/api/internal/cabinet/{userSolutionId}/order\";\r\n if (userSolutionId === undefined || userSolutionId === null)\r\n throw new Error(\"The parameter 'userSolutionId' must be defined.\");\r\n url_ = url_.replace(\"{userSolutionId}\", encodeURIComponent(\"\" + userSolutionId));\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(request);\r\n\r\n let options_ = {\r\n body: content_,\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n \"Accept\": \"application/json\"\r\n }\r\n };\r\n\r\n return this.http.fetch(url_, options_).then((_response: Response) => {\r\n return this.processOrderSolution(_response);\r\n });\r\n }\r\n\r\n protected processOrderSolution(response: Response): Promise {\r\n const status = response.status;\r\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n if (status === 200) {\r\n return response.text().then((_responseText) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = OrderSolutionResponse.fromJS(resultData200);\r\n return result200;\r\n });\r\n } else if (status !== 200 && status !== 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n });\r\n }\r\n return Promise.resolve(null);\r\n }\r\n}\r\n\r\nexport class SyncClient {\r\n private http: { fetch(url: RequestInfo, init?: RequestInit): Promise };\r\n private baseUrl: string;\r\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\r\n\r\n constructor(baseUrl?: string, http?: { fetch(url: RequestInfo, init?: RequestInit): Promise }) {\r\n this.http = http ? http : window;\r\n this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\r\n }\r\n\r\n startSync(): Promise {\r\n let url_ = this.baseUrl + \"/api/internal/admin/sync/start\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ = {\r\n method: \"POST\",\r\n headers: {\r\n \"Accept\": \"application/json\"\r\n }\r\n };\r\n\r\n return this.http.fetch(url_, options_).then((_response: Response) => {\r\n return this.processStartSync(_response);\r\n });\r\n }\r\n\r\n protected processStartSync(response: Response): Promise {\r\n const status = response.status;\r\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n if (status === 200) {\r\n return response.text().then((_responseText) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = StartSyncResult.fromJS(resultData200);\r\n return result200;\r\n });\r\n } else if (status !== 200 && status !== 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n });\r\n }\r\n return Promise.resolve(null);\r\n }\r\n\r\n stopSync(): Promise {\r\n let url_ = this.baseUrl + \"/api/internal/admin/sync/stop\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ = {\r\n method: \"POST\",\r\n headers: {\r\n }\r\n };\r\n\r\n return this.http.fetch(url_, options_).then((_response: Response) => {\r\n return this.processStopSync(_response);\r\n });\r\n }\r\n\r\n protected processStopSync(response: Response): Promise {\r\n const status = response.status;\r\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n if (status === 200) {\r\n return response.text().then((_responseText) => {\r\n return;\r\n });\r\n } else if (status !== 200 && status !== 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n });\r\n }\r\n return Promise.resolve(null);\r\n }\r\n\r\n getStatus(): Promise {\r\n let url_ = this.baseUrl + \"/api/internal/admin/sync\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ = {\r\n method: \"GET\",\r\n headers: {\r\n \"Accept\": \"application/json\"\r\n }\r\n };\r\n\r\n return this.http.fetch(url_, options_).then((_response: Response) => {\r\n return this.processGetStatus(_response);\r\n });\r\n }\r\n\r\n protected processGetStatus(response: Response): Promise {\r\n const status = response.status;\r\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n if (status === 200) {\r\n return response.text().then((_responseText) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = SyncStatus.fromJS(resultData200);\r\n return result200;\r\n });\r\n } else if (status !== 200 && status !== 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n });\r\n }\r\n return Promise.resolve(null);\r\n }\r\n}\r\n\r\nexport class UserClient {\r\n private http: { fetch(url: RequestInfo, init?: RequestInit): Promise };\r\n private baseUrl: string;\r\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\r\n\r\n constructor(baseUrl?: string, http?: { fetch(url: RequestInfo, init?: RequestInit): Promise }) {\r\n this.http = http ? http : window;\r\n this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\r\n }\r\n\r\n getUsers(chainId: number): Promise {\r\n let url_ = this.baseUrl + \"/api/internal/admin/users/{chainId}\";\r\n if (chainId === undefined || chainId === null)\r\n throw new Error(\"The parameter 'chainId' must be defined.\");\r\n url_ = url_.replace(\"{chainId}\", encodeURIComponent(\"\" + chainId));\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ = {\r\n method: \"GET\",\r\n headers: {\r\n \"Accept\": \"application/json\"\r\n }\r\n };\r\n\r\n return this.http.fetch(url_, options_).then((_response: Response) => {\r\n return this.processGetUsers(_response);\r\n });\r\n }\r\n\r\n protected processGetUsers(response: Response): Promise {\r\n const status = response.status;\r\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n if (status === 200) {\r\n return response.text().then((_responseText) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = GetUsersResponse.fromJS(resultData200);\r\n return result200;\r\n });\r\n } else if (status !== 200 && status !== 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n });\r\n }\r\n return Promise.resolve(null);\r\n }\r\n\r\n editUser(request: UserEditRequest): Promise {\r\n let url_ = this.baseUrl + \"/api/internal/admin/users\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(request);\r\n\r\n let options_ = {\r\n body: content_,\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n }\r\n };\r\n\r\n return this.http.fetch(url_, options_).then((_response: Response) => {\r\n return this.processEditUser(_response);\r\n });\r\n }\r\n\r\n protected processEditUser(response: Response): Promise {\r\n const status = response.status;\r\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n if (status === 200) {\r\n return response.text().then((_responseText) => {\r\n return;\r\n });\r\n } else if (status !== 200 && status !== 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n });\r\n }\r\n return Promise.resolve(null);\r\n }\r\n\r\n createUser(request: CreateUserRequest2): Promise {\r\n let url_ = this.baseUrl + \"/api/internal/admin/users\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(request);\r\n\r\n let options_ = {\r\n body: content_,\r\n method: \"PUT\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n \"Accept\": \"application/json\"\r\n }\r\n };\r\n\r\n return this.http.fetch(url_, options_).then((_response: Response) => {\r\n return this.processCreateUser(_response);\r\n });\r\n }\r\n\r\n protected processCreateUser(response: Response): Promise {\r\n const status = response.status;\r\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n if (status === 200) {\r\n return response.text().then((_responseText) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = CreateUserResponse2.fromJS(resultData200);\r\n return result200;\r\n });\r\n } else if (status !== 200 && status !== 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n });\r\n }\r\n return Promise.resolve(null);\r\n }\r\n\r\n deleteUser(id: string): Promise {\r\n let url_ = this.baseUrl + \"/api/internal/admin/users/{id}\";\r\n if (id === undefined || id === null)\r\n throw new Error(\"The parameter 'id' must be defined.\");\r\n url_ = url_.replace(\"{id}\", encodeURIComponent(\"\" + id));\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ = {\r\n method: \"DELETE\",\r\n headers: {\r\n }\r\n };\r\n\r\n return this.http.fetch(url_, options_).then((_response: Response) => {\r\n return this.processDeleteUser(_response);\r\n });\r\n }\r\n\r\n protected processDeleteUser(response: Response): Promise {\r\n const status = response.status;\r\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n if (status === 200) {\r\n return response.text().then((_responseText) => {\r\n return;\r\n });\r\n } else if (status !== 200 && status !== 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n });\r\n }\r\n return Promise.resolve(null);\r\n }\r\n}\r\n\r\nexport class TranslationAdminClient {\r\n private http: { fetch(url: RequestInfo, init?: RequestInit): Promise };\r\n private baseUrl: string;\r\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\r\n\r\n constructor(baseUrl?: string, http?: { fetch(url: RequestInfo, init?: RequestInit): Promise }) {\r\n this.http = http ? http : window;\r\n this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\r\n }\r\n\r\n getLanguages(): Promise {\r\n let url_ = this.baseUrl + \"/api/internal/admin/translations\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ = {\r\n method: \"GET\",\r\n headers: {\r\n \"Accept\": \"application/json\"\r\n }\r\n };\r\n\r\n return this.http.fetch(url_, options_).then((_response: Response) => {\r\n return this.processGetLanguages(_response);\r\n });\r\n }\r\n\r\n protected processGetLanguages(response: Response): Promise {\r\n const status = response.status;\r\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n if (status === 200) {\r\n return response.text().then((_responseText) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = GetLanguagesResponse.fromJS(resultData200);\r\n return result200;\r\n });\r\n } else if (status !== 200 && status !== 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n });\r\n }\r\n return Promise.resolve(null);\r\n }\r\n\r\n createLanguage(request: CreateLanguageRequest): Promise {\r\n let url_ = this.baseUrl + \"/api/internal/admin/translations\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(request);\r\n\r\n let options_ = {\r\n body: content_,\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n \"Accept\": \"application/json\"\r\n }\r\n };\r\n\r\n return this.http.fetch(url_, options_).then((_response: Response) => {\r\n return this.processCreateLanguage(_response);\r\n });\r\n }\r\n\r\n protected processCreateLanguage(response: Response): Promise {\r\n const status = response.status;\r\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n if (status === 200) {\r\n return response.text().then((_responseText) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = CreateLanguageResponse.fromJS(resultData200);\r\n return result200;\r\n });\r\n } else if (status !== 200 && status !== 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n });\r\n }\r\n return Promise.resolve(null);\r\n }\r\n\r\n createkeys(request: CreateKeysRequest): Promise {\r\n let url_ = this.baseUrl + \"/api/internal/admin/translations/keys\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(request);\r\n\r\n let options_ = {\r\n body: content_,\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n }\r\n };\r\n\r\n return this.http.fetch(url_, options_).then((_response: Response) => {\r\n return this.processCreatekeys(_response);\r\n });\r\n }\r\n\r\n protected processCreatekeys(response: Response): Promise {\r\n const status = response.status;\r\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n if (status === 200) {\r\n return response.text().then((_responseText) => {\r\n return;\r\n });\r\n } else if (status !== 200 && status !== 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n });\r\n }\r\n return Promise.resolve(null);\r\n }\r\n\r\n setTranslations(request: SetTranslationsRequest): Promise {\r\n let url_ = this.baseUrl + \"/api/internal/admin/translations/values\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(request);\r\n\r\n let options_ = {\r\n body: content_,\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n }\r\n };\r\n\r\n return this.http.fetch(url_, options_).then((_response: Response) => {\r\n return this.processSetTranslations(_response);\r\n });\r\n }\r\n\r\n protected processSetTranslations(response: Response): Promise {\r\n const status = response.status;\r\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n if (status === 200) {\r\n return response.text().then((_responseText) => {\r\n return;\r\n });\r\n } else if (status !== 200 && status !== 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n });\r\n }\r\n return Promise.resolve(null);\r\n }\r\n}\r\n\r\nexport class ProductClient {\r\n private http: { fetch(url: RequestInfo, init?: RequestInit): Promise };\r\n private baseUrl: string;\r\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\r\n\r\n constructor(baseUrl?: string, http?: { fetch(url: RequestInfo, init?: RequestInit): Promise }) {\r\n this.http = http ? http : window;\r\n this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\r\n }\r\n\r\n getProductGroups(): Promise {\r\n let url_ = this.baseUrl + \"/api/internal/admin/products\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ = {\r\n method: \"GET\",\r\n headers: {\r\n \"Accept\": \"application/json\"\r\n }\r\n };\r\n\r\n return this.http.fetch(url_, options_).then((_response: Response) => {\r\n return this.processGetProductGroups(_response);\r\n });\r\n }\r\n\r\n protected processGetProductGroups(response: Response): Promise {\r\n const status = response.status;\r\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n if (status === 200) {\r\n return response.text().then((_responseText) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = GetProductGroupsResponse.fromJS(resultData200);\r\n return result200;\r\n });\r\n } else if (status !== 200 && status !== 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n });\r\n }\r\n return Promise.resolve(null);\r\n }\r\n\r\n editProduct(id: number, request: EditProductRequest): Promise {\r\n let url_ = this.baseUrl + \"/api/internal/admin/products/{id}\";\r\n if (id === undefined || id === null)\r\n throw new Error(\"The parameter 'id' must be defined.\");\r\n url_ = url_.replace(\"{id}\", encodeURIComponent(\"\" + id));\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(request);\r\n\r\n let options_ = {\r\n body: content_,\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n }\r\n };\r\n\r\n return this.http.fetch(url_, options_).then((_response: Response) => {\r\n return this.processEditProduct(_response);\r\n });\r\n }\r\n\r\n protected processEditProduct(response: Response): Promise {\r\n const status = response.status;\r\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n if (status === 200) {\r\n return response.text().then((_responseText) => {\r\n return;\r\n });\r\n } else if (status !== 200 && status !== 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n });\r\n }\r\n return Promise.resolve(null);\r\n }\r\n\r\n setDrawingImage(id: number, interiorMaterialId: number, extension: string | null, file?: FileParameter | null | undefined): Promise {\r\n let url_ = this.baseUrl + \"/api/internal/admin/products/{id}/drawingImage/{interiorMaterialId}/{extension}\";\r\n if (id === undefined || id === null)\r\n throw new Error(\"The parameter 'id' must be defined.\");\r\n url_ = url_.replace(\"{id}\", encodeURIComponent(\"\" + id));\r\n if (interiorMaterialId === undefined || interiorMaterialId === null)\r\n throw new Error(\"The parameter 'interiorMaterialId' must be defined.\");\r\n url_ = url_.replace(\"{interiorMaterialId}\", encodeURIComponent(\"\" + interiorMaterialId));\r\n if (extension === undefined || extension === null)\r\n throw new Error(\"The parameter 'extension' must be defined.\");\r\n url_ = url_.replace(\"{extension}\", encodeURIComponent(\"\" + extension));\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = new FormData();\r\n if (file !== null && file !== undefined)\r\n content_.append(\"file\", file.data, file.fileName ? file.fileName : \"file\");\r\n\r\n let options_ = {\r\n body: content_,\r\n method: \"POST\",\r\n headers: {\r\n }\r\n };\r\n\r\n return this.http.fetch(url_, options_).then((_response: Response) => {\r\n return this.processSetDrawingImage(_response);\r\n });\r\n }\r\n\r\n protected processSetDrawingImage(response: Response): Promise {\r\n const status = response.status;\r\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n if (status === 200) {\r\n return response.text().then((_responseText) => {\r\n return;\r\n });\r\n } else if (status !== 200 && status !== 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n });\r\n }\r\n return Promise.resolve(null);\r\n }\r\n\r\n setPictureImage(id: number, interiorMaterialId: number, extension: string | null, file?: FileParameter | null | undefined): Promise {\r\n let url_ = this.baseUrl + \"/api/internal/admin/products/{id}/pictureImage/{interiorMaterialId}/{extension}\";\r\n if (id === undefined || id === null)\r\n throw new Error(\"The parameter 'id' must be defined.\");\r\n url_ = url_.replace(\"{id}\", encodeURIComponent(\"\" + id));\r\n if (interiorMaterialId === undefined || interiorMaterialId === null)\r\n throw new Error(\"The parameter 'interiorMaterialId' must be defined.\");\r\n url_ = url_.replace(\"{interiorMaterialId}\", encodeURIComponent(\"\" + interiorMaterialId));\r\n if (extension === undefined || extension === null)\r\n throw new Error(\"The parameter 'extension' must be defined.\");\r\n url_ = url_.replace(\"{extension}\", encodeURIComponent(\"\" + extension));\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = new FormData();\r\n if (file !== null && file !== undefined)\r\n content_.append(\"file\", file.data, file.fileName ? file.fileName : \"file\");\r\n\r\n let options_ = {\r\n body: content_,\r\n method: \"POST\",\r\n headers: {\r\n }\r\n };\r\n\r\n return this.http.fetch(url_, options_).then((_response: Response) => {\r\n return this.processSetPictureImage(_response);\r\n });\r\n }\r\n\r\n protected processSetPictureImage(response: Response): Promise {\r\n const status = response.status;\r\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n if (status === 200) {\r\n return response.text().then((_responseText) => {\r\n return;\r\n });\r\n } else if (status !== 200 && status !== 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n });\r\n }\r\n return Promise.resolve(null);\r\n }\r\n}\r\n\r\nexport class ProductLineClient {\r\n private http: { fetch(url: RequestInfo, init?: RequestInit): Promise };\r\n private baseUrl: string;\r\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\r\n\r\n constructor(baseUrl?: string, http?: { fetch(url: RequestInfo, init?: RequestInit): Promise }) {\r\n this.http = http ? http : window;\r\n this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\r\n }\r\n\r\n getProductLines(): Promise {\r\n let url_ = this.baseUrl + \"/api/internal/admin/productLines\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ = {\r\n method: \"GET\",\r\n headers: {\r\n \"Accept\": \"application/json\"\r\n }\r\n };\r\n\r\n return this.http.fetch(url_, options_).then((_response: Response) => {\r\n return this.processGetProductLines(_response);\r\n });\r\n }\r\n\r\n protected processGetProductLines(response: Response): Promise {\r\n const status = response.status;\r\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n if (status === 200) {\r\n return response.text().then((_responseText) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = GetProductLinesResponse.fromJS(resultData200);\r\n return result200;\r\n });\r\n } else if (status !== 200 && status !== 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n });\r\n }\r\n return Promise.resolve(null);\r\n }\r\n\r\n createProductLine(request: CreateProductLineRequest): Promise {\r\n let url_ = this.baseUrl + \"/api/internal/admin/productLines\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(request);\r\n\r\n let options_ = {\r\n body: content_,\r\n method: \"PUT\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n \"Accept\": \"application/json\"\r\n }\r\n };\r\n\r\n return this.http.fetch(url_, options_).then((_response: Response) => {\r\n return this.processCreateProductLine(_response);\r\n });\r\n }\r\n\r\n protected processCreateProductLine(response: Response): Promise {\r\n const status = response.status;\r\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n if (status === 200) {\r\n return response.text().then((_responseText) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = CreateProductLineResponse.fromJS(resultData200);\r\n return result200;\r\n });\r\n } else if (status !== 200 && status !== 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n });\r\n }\r\n return Promise.resolve(null);\r\n }\r\n\r\n editProductLine(id: number, request: EditProductLineRequest): Promise {\r\n let url_ = this.baseUrl + \"/api/internal/admin/productLines/{id}\";\r\n if (id === undefined || id === null)\r\n throw new Error(\"The parameter 'id' must be defined.\");\r\n url_ = url_.replace(\"{id}\", encodeURIComponent(\"\" + id));\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(request);\r\n\r\n let options_ = {\r\n body: content_,\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n \"Accept\": \"application/json\"\r\n }\r\n };\r\n\r\n return this.http.fetch(url_, options_).then((_response: Response) => {\r\n return this.processEditProductLine(_response);\r\n });\r\n }\r\n\r\n protected processEditProductLine(response: Response): Promise {\r\n const status = response.status;\r\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n if (status === 200) {\r\n return response.text().then((_responseText) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = EditProductLineResponse.fromJS(resultData200);\r\n return result200;\r\n });\r\n } else if (status !== 200 && status !== 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n });\r\n }\r\n return Promise.resolve(null);\r\n }\r\n\r\n setImage(id: number, extension: string | null, image?: FileParameter | null | undefined): Promise {\r\n let url_ = this.baseUrl + \"/api/internal/admin/productLines/{id}/image/{extension}\";\r\n if (id === undefined || id === null)\r\n throw new Error(\"The parameter 'id' must be defined.\");\r\n url_ = url_.replace(\"{id}\", encodeURIComponent(\"\" + id));\r\n if (extension === undefined || extension === null)\r\n throw new Error(\"The parameter 'extension' must be defined.\");\r\n url_ = url_.replace(\"{extension}\", encodeURIComponent(\"\" + extension));\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = new FormData();\r\n if (image !== null && image !== undefined)\r\n content_.append(\"image\", image.data, image.fileName ? image.fileName : \"image\");\r\n\r\n let options_ = {\r\n body: content_,\r\n method: \"POST\",\r\n headers: {\r\n \"Accept\": \"application/json\"\r\n }\r\n };\r\n\r\n return this.http.fetch(url_, options_).then((_response: Response) => {\r\n return this.processSetImage(_response);\r\n });\r\n }\r\n\r\n protected processSetImage(response: Response): Promise {\r\n const status = response.status;\r\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n if (status === 200) {\r\n return response.text().then((_responseText) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = SetProductLineImageResponse.fromJS(resultData200);\r\n return result200;\r\n });\r\n } else if (status !== 200 && status !== 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n });\r\n }\r\n return Promise.resolve(null);\r\n }\r\n\r\n getProductLineProducts(id: number): Promise {\r\n let url_ = this.baseUrl + \"/api/internal/admin/productLines/{id}/products\";\r\n if (id === undefined || id === null)\r\n throw new Error(\"The parameter 'id' must be defined.\");\r\n url_ = url_.replace(\"{id}\", encodeURIComponent(\"\" + id));\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ = {\r\n method: \"GET\",\r\n headers: {\r\n \"Accept\": \"application/json\"\r\n }\r\n };\r\n\r\n return this.http.fetch(url_, options_).then((_response: Response) => {\r\n return this.processGetProductLineProducts(_response);\r\n });\r\n }\r\n\r\n protected processGetProductLineProducts(response: Response): Promise {\r\n const status = response.status;\r\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n if (status === 200) {\r\n return response.text().then((_responseText) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = GetProductLineProductsResponse.fromJS(resultData200);\r\n return result200;\r\n });\r\n } else if (status !== 200 && status !== 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n });\r\n }\r\n return Promise.resolve(null);\r\n }\r\n\r\n setProductLineProduct(productLineId: number, productId: number, req: SetProductLineProductRequest): Promise {\r\n let url_ = this.baseUrl + \"/api/internal/admin/productLines/{productLineId}/products/{productId}\";\r\n if (productLineId === undefined || productLineId === null)\r\n throw new Error(\"The parameter 'productLineId' must be defined.\");\r\n url_ = url_.replace(\"{productLineId}\", encodeURIComponent(\"\" + productLineId));\r\n if (productId === undefined || productId === null)\r\n throw new Error(\"The parameter 'productId' must be defined.\");\r\n url_ = url_.replace(\"{productId}\", encodeURIComponent(\"\" + productId));\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(req);\r\n\r\n let options_ = {\r\n body: content_,\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n \"Accept\": \"application/json\"\r\n }\r\n };\r\n\r\n return this.http.fetch(url_, options_).then((_response: Response) => {\r\n return this.processSetProductLineProduct(_response);\r\n });\r\n }\r\n\r\n protected processSetProductLineProduct(response: Response): Promise {\r\n const status = response.status;\r\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n if (status === 200) {\r\n return response.text().then((_responseText) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = SetProductLineProductResponse.fromJS(resultData200);\r\n return result200;\r\n });\r\n } else if (status !== 200 && status !== 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n });\r\n }\r\n return Promise.resolve(null);\r\n }\r\n}\r\n\r\nexport class MaterialClient {\r\n private http: { fetch(url: RequestInfo, init?: RequestInit): Promise };\r\n private baseUrl: string;\r\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\r\n\r\n constructor(baseUrl?: string, http?: { fetch(url: RequestInfo, init?: RequestInit): Promise }) {\r\n this.http = http ? http : window;\r\n this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\r\n }\r\n\r\n getMaterials(): Promise {\r\n let url_ = this.baseUrl + \"/api/internal/admin/materials\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ = {\r\n method: \"GET\",\r\n headers: {\r\n \"Accept\": \"application/json\"\r\n }\r\n };\r\n\r\n return this.http.fetch(url_, options_).then((_response: Response) => {\r\n return this.processGetMaterials(_response);\r\n });\r\n }\r\n\r\n protected processGetMaterials(response: Response): Promise {\r\n const status = response.status;\r\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n if (status === 200) {\r\n return response.text().then((_responseText) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = MaterialListResponse.fromJS(resultData200);\r\n return result200;\r\n });\r\n } else if (status !== 200 && status !== 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n });\r\n }\r\n return Promise.resolve(null);\r\n }\r\n\r\n setTextureImage(externalId: string | null, file?: FileParameter | null | undefined): Promise {\r\n let url_ = this.baseUrl + \"/api/internal/admin/materials/{externalId}/texture\";\r\n if (externalId === undefined || externalId === null)\r\n throw new Error(\"The parameter 'externalId' must be defined.\");\r\n url_ = url_.replace(\"{externalId}\", encodeURIComponent(\"\" + externalId));\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = new FormData();\r\n if (file !== null && file !== undefined)\r\n content_.append(\"file\", file.data, file.fileName ? file.fileName : \"file\");\r\n\r\n let options_ = {\r\n body: content_,\r\n method: \"POST\",\r\n headers: {\r\n \"Accept\": \"application/json\"\r\n }\r\n };\r\n\r\n return this.http.fetch(url_, options_).then((_response: Response) => {\r\n return this.processSetTextureImage(_response);\r\n });\r\n }\r\n\r\n protected processSetTextureImage(response: Response): Promise {\r\n const status = response.status;\r\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n if (status === 200) {\r\n return response.text().then((_responseText) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = SetTextureImageResponse.fromJS(resultData200);\r\n return result200;\r\n });\r\n } else if (status !== 200 && status !== 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n });\r\n }\r\n return Promise.resolve(null);\r\n }\r\n\r\n setSampleImage(externalId: string | null, file?: FileParameter | null | undefined): Promise {\r\n let url_ = this.baseUrl + \"/api/internal/admin/materials/{externalId}/sample\";\r\n if (externalId === undefined || externalId === null)\r\n throw new Error(\"The parameter 'externalId' must be defined.\");\r\n url_ = url_.replace(\"{externalId}\", encodeURIComponent(\"\" + externalId));\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = new FormData();\r\n if (file !== null && file !== undefined)\r\n content_.append(\"file\", file.data, file.fileName ? file.fileName : \"file\");\r\n\r\n let options_ = {\r\n body: content_,\r\n method: \"POST\",\r\n headers: {\r\n \"Accept\": \"application/json\"\r\n }\r\n };\r\n\r\n return this.http.fetch(url_, options_).then((_response: Response) => {\r\n return this.processSetSampleImage(_response);\r\n });\r\n }\r\n\r\n protected processSetSampleImage(response: Response): Promise {\r\n const status = response.status;\r\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n if (status === 200) {\r\n return response.text().then((_responseText) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = SetSampleImageResponse.fromJS(resultData200);\r\n return result200;\r\n });\r\n } else if (status !== 200 && status !== 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n });\r\n }\r\n return Promise.resolve(null);\r\n }\r\n}\r\n\r\nexport class InteriorMaterialClient {\r\n private http: { fetch(url: RequestInfo, init?: RequestInit): Promise };\r\n private baseUrl: string;\r\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\r\n\r\n constructor(baseUrl?: string, http?: { fetch(url: RequestInfo, init?: RequestInit): Promise }) {\r\n this.http = http ? http : window;\r\n this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\r\n }\r\n\r\n getInteriorMaterials(): Promise {\r\n let url_ = this.baseUrl + \"/api/internal/interiorMaterials\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ = {\r\n method: \"GET\",\r\n headers: {\r\n \"Accept\": \"application/json\"\r\n }\r\n };\r\n\r\n return this.http.fetch(url_, options_).then((_response: Response) => {\r\n return this.processGetInteriorMaterials(_response);\r\n });\r\n }\r\n\r\n protected processGetInteriorMaterials(response: Response): Promise {\r\n const status = response.status;\r\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n if (status === 200) {\r\n return response.text().then((_responseText) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = InteriorMaterialListResponse.fromJS(resultData200);\r\n return result200;\r\n });\r\n } else if (status !== 200 && status !== 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n });\r\n }\r\n return Promise.resolve(null);\r\n }\r\n\r\n createNew(): Promise {\r\n let url_ = this.baseUrl + \"/api/internal/interiorMaterials\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ = {\r\n method: \"PUT\",\r\n headers: {\r\n \"Accept\": \"application/json\"\r\n }\r\n };\r\n\r\n return this.http.fetch(url_, options_).then((_response: Response) => {\r\n return this.processCreateNew(_response);\r\n });\r\n }\r\n\r\n protected processCreateNew(response: Response): Promise {\r\n const status = response.status;\r\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n if (status === 200) {\r\n return response.text().then((_responseText) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = resultData200 !== undefined ? resultData200 : null;\r\n \r\n return result200;\r\n });\r\n } else if (status !== 200 && status !== 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n });\r\n }\r\n return Promise.resolve(null);\r\n }\r\n\r\n deleteInteriorMaterial(id: number): Promise {\r\n let url_ = this.baseUrl + \"/api/internal/interiorMaterials/{id}\";\r\n if (id === undefined || id === null)\r\n throw new Error(\"The parameter 'id' must be defined.\");\r\n url_ = url_.replace(\"{id}\", encodeURIComponent(\"\" + id));\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ = {\r\n method: \"DELETE\",\r\n headers: {\r\n }\r\n };\r\n\r\n return this.http.fetch(url_, options_).then((_response: Response) => {\r\n return this.processDeleteInteriorMaterial(_response);\r\n });\r\n }\r\n\r\n protected processDeleteInteriorMaterial(response: Response): Promise {\r\n const status = response.status;\r\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n if (status === 200) {\r\n return response.text().then((_responseText) => {\r\n return;\r\n });\r\n } else if (status !== 200 && status !== 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n });\r\n }\r\n return Promise.resolve(null);\r\n }\r\n\r\n setDetails(id: number, request: SetInteriorMaterialDetailsRequest): Promise {\r\n let url_ = this.baseUrl + \"/api/internal/interiorMaterials/{id}\";\r\n if (id === undefined || id === null)\r\n throw new Error(\"The parameter 'id' must be defined.\");\r\n url_ = url_.replace(\"{id}\", encodeURIComponent(\"\" + id));\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(request);\r\n\r\n let options_ = {\r\n body: content_,\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n }\r\n };\r\n\r\n return this.http.fetch(url_, options_).then((_response: Response) => {\r\n return this.processSetDetails(_response);\r\n });\r\n }\r\n\r\n protected processSetDetails(response: Response): Promise {\r\n const status = response.status;\r\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n if (status === 200) {\r\n return response.text().then((_responseText) => {\r\n return;\r\n });\r\n } else if (status !== 200 && status !== 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n });\r\n }\r\n return Promise.resolve(null);\r\n }\r\n\r\n setSampleImage(id: number, fileType: string | null, file?: FileParameter | null | undefined): Promise {\r\n let url_ = this.baseUrl + \"/api/internal/interiorMaterials/{id}/sample/{fileType}\";\r\n if (id === undefined || id === null)\r\n throw new Error(\"The parameter 'id' must be defined.\");\r\n url_ = url_.replace(\"{id}\", encodeURIComponent(\"\" + id));\r\n if (fileType === undefined || fileType === null)\r\n throw new Error(\"The parameter 'fileType' must be defined.\");\r\n url_ = url_.replace(\"{fileType}\", encodeURIComponent(\"\" + fileType));\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = new FormData();\r\n if (file !== null && file !== undefined)\r\n content_.append(\"file\", file.data, file.fileName ? file.fileName : \"file\");\r\n\r\n let options_ = {\r\n body: content_,\r\n method: \"POST\",\r\n headers: {\r\n }\r\n };\r\n\r\n return this.http.fetch(url_, options_).then((_response: Response) => {\r\n return this.processSetSampleImage(_response);\r\n });\r\n }\r\n\r\n protected processSetSampleImage(response: Response): Promise {\r\n const status = response.status;\r\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n if (status === 200) {\r\n return response.text().then((_responseText) => {\r\n return;\r\n });\r\n } else if (status !== 200 && status !== 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n });\r\n }\r\n return Promise.resolve(null);\r\n }\r\n}\r\n\r\nexport class DoorClient {\r\n private http: { fetch(url: RequestInfo, init?: RequestInit): Promise };\r\n private baseUrl: string;\r\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\r\n\r\n constructor(baseUrl?: string, http?: { fetch(url: RequestInfo, init?: RequestInit): Promise }) {\r\n this.http = http ? http : window;\r\n this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\r\n }\r\n\r\n getDoors(): Promise {\r\n let url_ = this.baseUrl + \"/api/internal/admin/doors\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ = {\r\n method: \"GET\",\r\n headers: {\r\n \"Accept\": \"application/json\"\r\n }\r\n };\r\n\r\n return this.http.fetch(url_, options_).then((_response: Response) => {\r\n return this.processGetDoors(_response);\r\n });\r\n }\r\n\r\n protected processGetDoors(response: Response): Promise {\r\n const status = response.status;\r\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n if (status === 200) {\r\n return response.text().then((_responseText) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = GetDoorsResponse.fromJS(resultData200);\r\n return result200;\r\n });\r\n } else if (status !== 200 && status !== 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n });\r\n }\r\n return Promise.resolve(null);\r\n }\r\n\r\n editDoor(id: number, request: EditDoorRequest): Promise {\r\n let url_ = this.baseUrl + \"/api/internal/admin/doors/{id}\";\r\n if (id === undefined || id === null)\r\n throw new Error(\"The parameter 'id' must be defined.\");\r\n url_ = url_.replace(\"{id}\", encodeURIComponent(\"\" + id));\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(request);\r\n\r\n let options_ = {\r\n body: content_,\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n }\r\n };\r\n\r\n return this.http.fetch(url_, options_).then((_response: Response) => {\r\n return this.processEditDoor(_response);\r\n });\r\n }\r\n\r\n protected processEditDoor(response: Response): Promise {\r\n const status = response.status;\r\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n if (status === 200) {\r\n return response.text().then((_responseText) => {\r\n return;\r\n });\r\n } else if (status !== 200 && status !== 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n });\r\n }\r\n return Promise.resolve(null);\r\n }\r\n\r\n setDoorImage(id: number, extension: string | null, file?: FileParameter | null | undefined): Promise {\r\n let url_ = this.baseUrl + \"/api/internal/admin/doors/{id}/image/{extension}\";\r\n if (id === undefined || id === null)\r\n throw new Error(\"The parameter 'id' must be defined.\");\r\n url_ = url_.replace(\"{id}\", encodeURIComponent(\"\" + id));\r\n if (extension === undefined || extension === null)\r\n throw new Error(\"The parameter 'extension' must be defined.\");\r\n url_ = url_.replace(\"{extension}\", encodeURIComponent(\"\" + extension));\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = new FormData();\r\n if (file !== null && file !== undefined)\r\n content_.append(\"file\", file.data, file.fileName ? file.fileName : \"file\");\r\n\r\n let options_ = {\r\n body: content_,\r\n method: \"POST\",\r\n headers: {\r\n }\r\n };\r\n\r\n return this.http.fetch(url_, options_).then((_response: Response) => {\r\n return this.processSetDoorImage(_response);\r\n });\r\n }\r\n\r\n protected processSetDoorImage(response: Response): Promise {\r\n const status = response.status;\r\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n if (status === 200) {\r\n return response.text().then((_responseText) => {\r\n return;\r\n });\r\n } else if (status !== 200 && status !== 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n });\r\n }\r\n return Promise.resolve(null);\r\n }\r\n}\r\n\r\nexport class ChainClient {\r\n private http: { fetch(url: RequestInfo, init?: RequestInit): Promise };\r\n private baseUrl: string;\r\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\r\n\r\n constructor(baseUrl?: string, http?: { fetch(url: RequestInfo, init?: RequestInit): Promise }) {\r\n this.http = http ? http : window;\r\n this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\r\n }\r\n\r\n getChains(): Promise {\r\n let url_ = this.baseUrl + \"/api/internal/admin/chains\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ = {\r\n method: \"GET\",\r\n headers: {\r\n \"Accept\": \"application/json\"\r\n }\r\n };\r\n\r\n return this.http.fetch(url_, options_).then((_response: Response) => {\r\n return this.processGetChains(_response);\r\n });\r\n }\r\n\r\n protected processGetChains(response: Response): Promise {\r\n const status = response.status;\r\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n if (status === 200) {\r\n return response.text().then((_responseText) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = GetChainsResponse.fromJS(resultData200);\r\n return result200;\r\n });\r\n } else if (status !== 200 && status !== 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n });\r\n }\r\n return Promise.resolve(null);\r\n }\r\n\r\n setChainDetails(chainId: number, request: SetChainDetailsRequest): Promise {\r\n let url_ = this.baseUrl + \"/api/internal/admin/chains/{chainId}\";\r\n if (chainId === undefined || chainId === null)\r\n throw new Error(\"The parameter 'chainId' must be defined.\");\r\n url_ = url_.replace(\"{chainId}\", encodeURIComponent(\"\" + chainId));\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(request);\r\n\r\n let options_ = {\r\n body: content_,\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n }\r\n };\r\n\r\n return this.http.fetch(url_, options_).then((_response: Response) => {\r\n return this.processSetChainDetails(_response);\r\n });\r\n }\r\n\r\n protected processSetChainDetails(response: Response): Promise {\r\n const status = response.status;\r\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n if (status === 200) {\r\n return response.text().then((_responseText) => {\r\n return;\r\n });\r\n } else if (status !== 200 && status !== 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n });\r\n }\r\n return Promise.resolve(null);\r\n }\r\n\r\n createHostName(request: CreateHostNameRequest): Promise {\r\n let url_ = this.baseUrl + \"/api/internal/admin/chains/hostname\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(request);\r\n\r\n let options_ = {\r\n body: content_,\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n \"Accept\": \"application/json\"\r\n }\r\n };\r\n\r\n return this.http.fetch(url_, options_).then((_response: Response) => {\r\n return this.processCreateHostName(_response);\r\n });\r\n }\r\n\r\n protected processCreateHostName(response: Response): Promise {\r\n const status = response.status;\r\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n if (status === 200) {\r\n return response.text().then((_responseText) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = CreateHostNameResponse.fromJS(resultData200);\r\n return result200;\r\n });\r\n } else if (status !== 200 && status !== 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n });\r\n }\r\n return Promise.resolve(null);\r\n }\r\n\r\n deleteHostname(id: number): Promise {\r\n let url_ = this.baseUrl + \"/api/internal/admin/chains/hostname/{id}\";\r\n if (id === undefined || id === null)\r\n throw new Error(\"The parameter 'id' must be defined.\");\r\n url_ = url_.replace(\"{id}\", encodeURIComponent(\"\" + id));\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ = {\r\n method: \"DELETE\",\r\n headers: {\r\n }\r\n };\r\n\r\n return this.http.fetch(url_, options_).then((_response: Response) => {\r\n return this.processDeleteHostname(_response);\r\n });\r\n }\r\n\r\n protected processDeleteHostname(response: Response): Promise {\r\n const status = response.status;\r\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n if (status === 200) {\r\n return response.text().then((_responseText) => {\r\n return;\r\n });\r\n } else if (status !== 200 && status !== 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n });\r\n }\r\n return Promise.resolve(null);\r\n }\r\n\r\n setLogo(chainId: number, extension: string | null, logo?: FileParameter | null | undefined): Promise {\r\n let url_ = this.baseUrl + \"/api/internal/admin/chains/{chainId}/logo/{extension}\";\r\n if (chainId === undefined || chainId === null)\r\n throw new Error(\"The parameter 'chainId' must be defined.\");\r\n url_ = url_.replace(\"{chainId}\", encodeURIComponent(\"\" + chainId));\r\n if (extension === undefined || extension === null)\r\n throw new Error(\"The parameter 'extension' must be defined.\");\r\n url_ = url_.replace(\"{extension}\", encodeURIComponent(\"\" + extension));\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = new FormData();\r\n if (logo !== null && logo !== undefined)\r\n content_.append(\"logo\", logo.data, logo.fileName ? logo.fileName : \"logo\");\r\n\r\n let options_ = {\r\n body: content_,\r\n method: \"POST\",\r\n headers: {\r\n }\r\n };\r\n\r\n return this.http.fetch(url_, options_).then((_response: Response) => {\r\n return this.processSetLogo(_response);\r\n });\r\n }\r\n\r\n protected processSetLogo(response: Response): Promise {\r\n const status = response.status;\r\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n if (status === 200) {\r\n return response.text().then((_responseText) => {\r\n return;\r\n });\r\n } else if (status !== 200 && status !== 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n });\r\n }\r\n return Promise.resolve(null);\r\n }\r\n\r\n setCss(chainId: number, css?: FileParameter | null | undefined): Promise {\r\n let url_ = this.baseUrl + \"/api/internal/admin/chains/{chainId}/css\";\r\n if (chainId === undefined || chainId === null)\r\n throw new Error(\"The parameter 'chainId' must be defined.\");\r\n url_ = url_.replace(\"{chainId}\", encodeURIComponent(\"\" + chainId));\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = new FormData();\r\n if (css !== null && css !== undefined)\r\n content_.append(\"css\", css.data, css.fileName ? css.fileName : \"css\");\r\n\r\n let options_ = {\r\n body: content_,\r\n method: \"POST\",\r\n headers: {\r\n }\r\n };\r\n\r\n return this.http.fetch(url_, options_).then((_response: Response) => {\r\n return this.processSetCss(_response);\r\n });\r\n }\r\n\r\n protected processSetCss(response: Response): Promise {\r\n const status = response.status;\r\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n if (status === 200) {\r\n return response.text().then((_responseText) => {\r\n return;\r\n });\r\n } else if (status !== 200 && status !== 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n });\r\n }\r\n return Promise.resolve(null);\r\n }\r\n\r\n getChainProductLines(chainId: number): Promise {\r\n let url_ = this.baseUrl + \"/api/internal/admin/chains/{chainId}/productLines\";\r\n if (chainId === undefined || chainId === null)\r\n throw new Error(\"The parameter 'chainId' must be defined.\");\r\n url_ = url_.replace(\"{chainId}\", encodeURIComponent(\"\" + chainId));\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ = {\r\n method: \"GET\",\r\n headers: {\r\n \"Accept\": \"application/json\"\r\n }\r\n };\r\n\r\n return this.http.fetch(url_, options_).then((_response: Response) => {\r\n return this.processGetChainProductLines(_response);\r\n });\r\n }\r\n\r\n protected processGetChainProductLines(response: Response): Promise {\r\n const status = response.status;\r\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n if (status === 200) {\r\n return response.text().then((_responseText) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = GetChainProductLinesResponse.fromJS(resultData200);\r\n return result200;\r\n });\r\n } else if (status !== 200 && status !== 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n });\r\n }\r\n return Promise.resolve(null);\r\n }\r\n\r\n setChainProductLine(chainId: number, productLineId: number, req: SetChainProductLineRequest): Promise {\r\n let url_ = this.baseUrl + \"/api/internal/admin/chains/{chainId}/productLines/{productLineId}\";\r\n if (chainId === undefined || chainId === null)\r\n throw new Error(\"The parameter 'chainId' must be defined.\");\r\n url_ = url_.replace(\"{chainId}\", encodeURIComponent(\"\" + chainId));\r\n if (productLineId === undefined || productLineId === null)\r\n throw new Error(\"The parameter 'productLineId' must be defined.\");\r\n url_ = url_.replace(\"{productLineId}\", encodeURIComponent(\"\" + productLineId));\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(req);\r\n\r\n let options_ = {\r\n body: content_,\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n \"Accept\": \"application/json\"\r\n }\r\n };\r\n\r\n return this.http.fetch(url_, options_).then((_response: Response) => {\r\n return this.processSetChainProductLine(_response);\r\n });\r\n }\r\n\r\n protected processSetChainProductLine(response: Response): Promise {\r\n const status = response.status;\r\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n if (status === 200) {\r\n return response.text().then((_responseText) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = SetChainProductLineResponse.fromJS(resultData200);\r\n return result200;\r\n });\r\n } else if (status !== 200 && status !== 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n });\r\n }\r\n return Promise.resolve(null);\r\n }\r\n\r\n getStores(chainId: number): Promise {\r\n let url_ = this.baseUrl + \"/api/internal/admin/chains/{chainId}/stores\";\r\n if (chainId === undefined || chainId === null)\r\n throw new Error(\"The parameter 'chainId' must be defined.\");\r\n url_ = url_.replace(\"{chainId}\", encodeURIComponent(\"\" + chainId));\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ = {\r\n method: \"GET\",\r\n headers: {\r\n \"Accept\": \"application/json\"\r\n }\r\n };\r\n\r\n return this.http.fetch(url_, options_).then((_response: Response) => {\r\n return this.processGetStores(_response);\r\n });\r\n }\r\n\r\n protected processGetStores(response: Response): Promise {\r\n const status = response.status;\r\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n if (status === 200) {\r\n return response.text().then((_responseText) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = GetStoresResponse.fromJS(resultData200);\r\n return result200;\r\n });\r\n } else if (status !== 200 && status !== 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n });\r\n }\r\n return Promise.resolve(null);\r\n }\r\n}\r\n\r\nexport class CacheClient {\r\n private http: { fetch(url: RequestInfo, init?: RequestInit): Promise };\r\n private baseUrl: string;\r\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\r\n\r\n constructor(baseUrl?: string, http?: { fetch(url: RequestInfo, init?: RequestInit): Promise }) {\r\n this.http = http ? http : window;\r\n this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\r\n }\r\n\r\n clearCache(): Promise {\r\n let url_ = this.baseUrl + \"/api/internal/admin/cache/clear\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ = {\r\n method: \"GET\",\r\n headers: {\r\n }\r\n };\r\n\r\n return this.http.fetch(url_, options_).then((_response: Response) => {\r\n return this.processClearCache(_response);\r\n });\r\n }\r\n\r\n protected processClearCache(response: Response): Promise {\r\n const status = response.status;\r\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n if (status === 200) {\r\n return response.text().then((_responseText) => {\r\n return;\r\n });\r\n } else if (status !== 200 && status !== 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n });\r\n }\r\n return Promise.resolve(null);\r\n }\r\n}\r\n\r\nexport class VersionResponse implements IVersionResponse {\r\n versionNumber!: string;\r\n versionName!: string;\r\n commitHash!: string;\r\n\r\n constructor(data?: IVersionResponse) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.versionNumber = _data[\"versionNumber\"] !== undefined ? _data[\"versionNumber\"] : null;\r\n this.versionName = _data[\"versionName\"] !== undefined ? _data[\"versionName\"] : null;\r\n this.commitHash = _data[\"commitHash\"] !== undefined ? _data[\"commitHash\"] : null;\r\n }\r\n }\r\n\r\n static fromJS(data: any): VersionResponse {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new VersionResponse();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"versionNumber\"] = this.versionNumber !== undefined ? this.versionNumber : null;\r\n data[\"versionName\"] = this.versionName !== undefined ? this.versionName : null;\r\n data[\"commitHash\"] = this.commitHash !== undefined ? this.commitHash : null;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IVersionResponse {\r\n versionNumber: string;\r\n versionName: string;\r\n commitHash: string;\r\n}\r\n\r\nexport class GetTranslationsResponse implements IGetTranslationsResponse {\r\n translations!: { [key: string]: string; };\r\n\r\n constructor(data?: IGetTranslationsResponse) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n if (!data) {\r\n this.translations = {};\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n if (_data[\"translations\"]) {\r\n this.translations = {} as any;\r\n for (let key in _data[\"translations\"]) {\r\n if (_data[\"translations\"].hasOwnProperty(key))\r\n (this.translations)![key] = _data[\"translations\"][key] !== undefined ? _data[\"translations\"][key] : null;\r\n }\r\n }\r\n else {\r\n this.translations = null;\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): GetTranslationsResponse {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new GetTranslationsResponse();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n if (this.translations) {\r\n data[\"translations\"] = {};\r\n for (let key in this.translations) {\r\n if (this.translations.hasOwnProperty(key))\r\n (data[\"translations\"])[key] = this.translations[key] !== undefined ? this.translations[key] : null;\r\n }\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IGetTranslationsResponse {\r\n translations: { [key: string]: string; };\r\n}\r\n\r\nexport class PieceListConvertResponse implements IPieceListConvertResponse {\r\n pieceList!: PieceList;\r\n\r\n constructor(data?: IPieceListConvertResponse) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n if (!data) {\r\n this.pieceList = new PieceList();\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.pieceList = _data[\"pieceList\"] ? PieceList.fromJS(_data[\"pieceList\"]) : new PieceList();\r\n }\r\n }\r\n\r\n static fromJS(data: any): PieceListConvertResponse {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new PieceListConvertResponse();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"pieceList\"] = this.pieceList ? this.pieceList.toJSON() : null;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IPieceListConvertResponse {\r\n pieceList: PieceList;\r\n}\r\n\r\nexport class PieceList implements IPieceList {\r\n currency!: string;\r\n totalPriceExVat!: number;\r\n vatRate!: number;\r\n created!: Date;\r\n pieceListLines!: PieceListLine[];\r\n\r\n constructor(data?: IPieceList) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n if (!data) {\r\n this.pieceListLines = [];\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.currency = _data[\"currency\"] !== undefined ? _data[\"currency\"] : null;\r\n this.totalPriceExVat = _data[\"totalPriceExVat\"] !== undefined ? _data[\"totalPriceExVat\"] : null;\r\n this.vatRate = _data[\"vatRate\"] !== undefined ? _data[\"vatRate\"] : null;\r\n this.created = _data[\"created\"] ? new Date(_data[\"created\"].toString()) : null;\r\n if (Array.isArray(_data[\"pieceListLines\"])) {\r\n this.pieceListLines = [] as any;\r\n for (let item of _data[\"pieceListLines\"])\r\n this.pieceListLines!.push(PieceListLine.fromJS(item));\r\n }\r\n else {\r\n this.pieceListLines = null;\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): PieceList {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new PieceList();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"currency\"] = this.currency !== undefined ? this.currency : null;\r\n data[\"totalPriceExVat\"] = this.totalPriceExVat !== undefined ? this.totalPriceExVat : null;\r\n data[\"vatRate\"] = this.vatRate !== undefined ? this.vatRate : null;\r\n data[\"created\"] = this.created ? this.created.toISOString() : null;\r\n if (Array.isArray(this.pieceListLines)) {\r\n data[\"pieceListLines\"] = [];\r\n for (let item of this.pieceListLines)\r\n data[\"pieceListLines\"].push(item.toJSON());\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IPieceList {\r\n currency: string;\r\n totalPriceExVat: number;\r\n vatRate: number;\r\n created: Date;\r\n pieceListLines: PieceListLine[];\r\n}\r\n\r\nexport class PieceListLine implements IPieceListLine {\r\n partNo!: string;\r\n name!: string;\r\n descriptions!: PieceListLineDescription[] | null;\r\n unitPriceExVat!: number;\r\n quantity!: number;\r\n itemType!: ItemType;\r\n itemVariants!: ItemVariant[];\r\n size!: Vec3d;\r\n\r\n constructor(data?: IPieceListLine) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n if (!data) {\r\n this.itemVariants = [];\r\n this.size = new Vec3d();\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.partNo = _data[\"partNo\"] !== undefined ? _data[\"partNo\"] : null;\r\n this.name = _data[\"name\"] !== undefined ? _data[\"name\"] : null;\r\n if (Array.isArray(_data[\"descriptions\"])) {\r\n this.descriptions = [] as any;\r\n for (let item of _data[\"descriptions\"])\r\n this.descriptions!.push(PieceListLineDescription.fromJS(item));\r\n }\r\n else {\r\n this.descriptions = null;\r\n }\r\n this.unitPriceExVat = _data[\"unitPriceExVat\"] !== undefined ? _data[\"unitPriceExVat\"] : null;\r\n this.quantity = _data[\"quantity\"] !== undefined ? _data[\"quantity\"] : null;\r\n this.itemType = _data[\"itemType\"] !== undefined ? _data[\"itemType\"] : null;\r\n if (Array.isArray(_data[\"itemVariants\"])) {\r\n this.itemVariants = [] as any;\r\n for (let item of _data[\"itemVariants\"])\r\n this.itemVariants!.push(ItemVariant.fromJS(item));\r\n }\r\n else {\r\n this.itemVariants = null;\r\n }\r\n this.size = _data[\"size\"] ? Vec3d.fromJS(_data[\"size\"]) : new Vec3d();\r\n }\r\n }\r\n\r\n static fromJS(data: any): PieceListLine {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new PieceListLine();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"partNo\"] = this.partNo !== undefined ? this.partNo : null;\r\n data[\"name\"] = this.name !== undefined ? this.name : null;\r\n if (Array.isArray(this.descriptions)) {\r\n data[\"descriptions\"] = [];\r\n for (let item of this.descriptions)\r\n data[\"descriptions\"].push(item.toJSON());\r\n }\r\n data[\"unitPriceExVat\"] = this.unitPriceExVat !== undefined ? this.unitPriceExVat : null;\r\n data[\"quantity\"] = this.quantity !== undefined ? this.quantity : null;\r\n data[\"itemType\"] = this.itemType !== undefined ? this.itemType : null;\r\n if (Array.isArray(this.itemVariants)) {\r\n data[\"itemVariants\"] = [];\r\n for (let item of this.itemVariants)\r\n data[\"itemVariants\"].push(item.toJSON());\r\n }\r\n data[\"size\"] = this.size ? this.size.toJSON() : null;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IPieceListLine {\r\n partNo: string;\r\n name: string;\r\n descriptions: PieceListLineDescription[] | null;\r\n unitPriceExVat: number;\r\n quantity: number;\r\n itemType: ItemType;\r\n itemVariants: ItemVariant[];\r\n size: Vec3d;\r\n}\r\n\r\nexport class PieceListLineDescription implements IPieceListLineDescription {\r\n name!: string;\r\n\r\n constructor(data?: IPieceListLineDescription) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.name = _data[\"name\"] !== undefined ? _data[\"name\"] : null;\r\n }\r\n }\r\n\r\n static fromJS(data: any): PieceListLineDescription {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new PieceListLineDescription();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"name\"] = this.name !== undefined ? this.name : null;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IPieceListLineDescription {\r\n name: string;\r\n}\r\n\r\nexport enum ItemType {\r\n Exterior = 0,\r\n Door = 1,\r\n Interior = 2,\r\n Discount = 3,\r\n ShippingFee = 4,\r\n ExtraItem = 5,\r\n DoorAccessory = 6,\r\n SupportProduct = 7,\r\n}\r\n\r\nexport class ItemVariant implements IItemVariant {\r\n variantType!: VariantType;\r\n externalId!: string;\r\n description!: string;\r\n\r\n constructor(data?: IItemVariant) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.variantType = _data[\"variantType\"] !== undefined ? _data[\"variantType\"] : null;\r\n this.externalId = _data[\"externalId\"] !== undefined ? _data[\"externalId\"] : null;\r\n this.description = _data[\"description\"] !== undefined ? _data[\"description\"] : null;\r\n }\r\n }\r\n\r\n static fromJS(data: any): ItemVariant {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new ItemVariant();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"variantType\"] = this.variantType !== undefined ? this.variantType : null;\r\n data[\"externalId\"] = this.externalId !== undefined ? this.externalId : null;\r\n data[\"description\"] = this.description !== undefined ? this.description : null;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IItemVariant {\r\n variantType: VariantType;\r\n externalId: string;\r\n description: string;\r\n}\r\n\r\nexport enum VariantType {\r\n None = 0,\r\n DoorType = 1,\r\n Material = 2,\r\n Bar = 3,\r\n SpecialFilling = 4,\r\n}\r\n\r\nexport class Vec3d implements IVec3d {\r\n x!: number;\r\n y!: number;\r\n z!: number;\r\n\r\n constructor(data?: IVec3d) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.x = _data[\"x\"] !== undefined ? _data[\"x\"] : null;\r\n this.y = _data[\"y\"] !== undefined ? _data[\"y\"] : null;\r\n this.z = _data[\"z\"] !== undefined ? _data[\"z\"] : null;\r\n }\r\n }\r\n\r\n static fromJS(data: any): Vec3d {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new Vec3d();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"x\"] = this.x !== undefined ? this.x : null;\r\n data[\"y\"] = this.y !== undefined ? this.y : null;\r\n data[\"z\"] = this.z !== undefined ? this.z : null;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IVec3d {\r\n x: number;\r\n y: number;\r\n z: number;\r\n}\r\n\r\nexport class PieceListConvertRequest implements IPieceListConvertRequest {\r\n cabinet!: Cabinet;\r\n\r\n constructor(data?: IPieceListConvertRequest) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n if (!data) {\r\n this.cabinet = new Cabinet();\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.cabinet = _data[\"cabinet\"] ? Cabinet.fromJS(_data[\"cabinet\"]) : new Cabinet();\r\n }\r\n }\r\n\r\n static fromJS(data: any): PieceListConvertRequest {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new PieceListConvertRequest();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"cabinet\"] = this.cabinet ? this.cabinet.toJSON() : null;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IPieceListConvertRequest {\r\n cabinet: Cabinet;\r\n}\r\n\r\nexport class Cabinet implements ICabinet {\r\n productLineId!: number | null;\r\n position!: CabinetPosition | null;\r\n height!: number | null;\r\n width!: number | null;\r\n depth!: number | null;\r\n roof!: boolean | null;\r\n sidePanel!: boolean | null;\r\n bottom!: boolean | null;\r\n doorProductId!: number | null;\r\n numDoorOverlaps!: number | null;\r\n doorDampening!: boolean | null;\r\n doors!: Door[];\r\n leftGableMaterialId!: number | null;\r\n rightGableMaterialId!: number | null;\r\n interiorItems!: InteriorItem[];\r\n extraItems!: ExtraItem[];\r\n interiorMaterialId!: number | null;\r\n userSolutionId!: string | null;\r\n name!: string;\r\n orderNumber!: string | null;\r\n\r\n constructor(data?: ICabinet) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n if (!data) {\r\n this.doors = [];\r\n this.interiorItems = [];\r\n this.extraItems = [];\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.productLineId = _data[\"productLineId\"] !== undefined ? _data[\"productLineId\"] : null;\r\n this.position = _data[\"position\"] !== undefined ? _data[\"position\"] : null;\r\n this.height = _data[\"height\"] !== undefined ? _data[\"height\"] : null;\r\n this.width = _data[\"width\"] !== undefined ? _data[\"width\"] : null;\r\n this.depth = _data[\"depth\"] !== undefined ? _data[\"depth\"] : null;\r\n this.roof = _data[\"roof\"] !== undefined ? _data[\"roof\"] : null;\r\n this.sidePanel = _data[\"sidePanel\"] !== undefined ? _data[\"sidePanel\"] : null;\r\n this.bottom = _data[\"bottom\"] !== undefined ? _data[\"bottom\"] : null;\r\n this.doorProductId = _data[\"doorProductId\"] !== undefined ? _data[\"doorProductId\"] : null;\r\n this.numDoorOverlaps = _data[\"numDoorOverlaps\"] !== undefined ? _data[\"numDoorOverlaps\"] : null;\r\n this.doorDampening = _data[\"doorDampening\"] !== undefined ? _data[\"doorDampening\"] : null;\r\n if (Array.isArray(_data[\"doors\"])) {\r\n this.doors = [] as any;\r\n for (let item of _data[\"doors\"])\r\n this.doors!.push(Door.fromJS(item));\r\n }\r\n else {\r\n this.doors = null;\r\n }\r\n this.leftGableMaterialId = _data[\"leftGableMaterialId\"] !== undefined ? _data[\"leftGableMaterialId\"] : null;\r\n this.rightGableMaterialId = _data[\"rightGableMaterialId\"] !== undefined ? _data[\"rightGableMaterialId\"] : null;\r\n if (Array.isArray(_data[\"interiorItems\"])) {\r\n this.interiorItems = [] as any;\r\n for (let item of _data[\"interiorItems\"])\r\n this.interiorItems!.push(InteriorItem.fromJS(item));\r\n }\r\n else {\r\n this.interiorItems = null;\r\n }\r\n if (Array.isArray(_data[\"extraItems\"])) {\r\n this.extraItems = [] as any;\r\n for (let item of _data[\"extraItems\"])\r\n this.extraItems!.push(ExtraItem.fromJS(item));\r\n }\r\n else {\r\n this.extraItems = null;\r\n }\r\n this.interiorMaterialId = _data[\"interiorMaterialId\"] !== undefined ? _data[\"interiorMaterialId\"] : null;\r\n this.userSolutionId = _data[\"userSolutionId\"] !== undefined ? _data[\"userSolutionId\"] : null;\r\n this.name = _data[\"name\"] !== undefined ? _data[\"name\"] : null;\r\n this.orderNumber = _data[\"orderNumber\"] !== undefined ? _data[\"orderNumber\"] : null;\r\n }\r\n }\r\n\r\n static fromJS(data: any): Cabinet {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new Cabinet();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"productLineId\"] = this.productLineId !== undefined ? this.productLineId : null;\r\n data[\"position\"] = this.position !== undefined ? this.position : null;\r\n data[\"height\"] = this.height !== undefined ? this.height : null;\r\n data[\"width\"] = this.width !== undefined ? this.width : null;\r\n data[\"depth\"] = this.depth !== undefined ? this.depth : null;\r\n data[\"roof\"] = this.roof !== undefined ? this.roof : null;\r\n data[\"sidePanel\"] = this.sidePanel !== undefined ? this.sidePanel : null;\r\n data[\"bottom\"] = this.bottom !== undefined ? this.bottom : null;\r\n data[\"doorProductId\"] = this.doorProductId !== undefined ? this.doorProductId : null;\r\n data[\"numDoorOverlaps\"] = this.numDoorOverlaps !== undefined ? this.numDoorOverlaps : null;\r\n data[\"doorDampening\"] = this.doorDampening !== undefined ? this.doorDampening : null;\r\n if (Array.isArray(this.doors)) {\r\n data[\"doors\"] = [];\r\n for (let item of this.doors)\r\n data[\"doors\"].push(item.toJSON());\r\n }\r\n data[\"leftGableMaterialId\"] = this.leftGableMaterialId !== undefined ? this.leftGableMaterialId : null;\r\n data[\"rightGableMaterialId\"] = this.rightGableMaterialId !== undefined ? this.rightGableMaterialId : null;\r\n if (Array.isArray(this.interiorItems)) {\r\n data[\"interiorItems\"] = [];\r\n for (let item of this.interiorItems)\r\n data[\"interiorItems\"].push(item.toJSON());\r\n }\r\n if (Array.isArray(this.extraItems)) {\r\n data[\"extraItems\"] = [];\r\n for (let item of this.extraItems)\r\n data[\"extraItems\"].push(item.toJSON());\r\n }\r\n data[\"interiorMaterialId\"] = this.interiorMaterialId !== undefined ? this.interiorMaterialId : null;\r\n data[\"userSolutionId\"] = this.userSolutionId !== undefined ? this.userSolutionId : null;\r\n data[\"name\"] = this.name !== undefined ? this.name : null;\r\n data[\"orderNumber\"] = this.orderNumber !== undefined ? this.orderNumber : null;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ICabinet {\r\n productLineId: number | null;\r\n position: CabinetPosition | null;\r\n height: number | null;\r\n width: number | null;\r\n depth: number | null;\r\n roof: boolean | null;\r\n sidePanel: boolean | null;\r\n bottom: boolean | null;\r\n doorProductId: number | null;\r\n numDoorOverlaps: number | null;\r\n doorDampening: boolean | null;\r\n doors: Door[];\r\n leftGableMaterialId: number | null;\r\n rightGableMaterialId: number | null;\r\n interiorItems: InteriorItem[];\r\n extraItems: ExtraItem[];\r\n interiorMaterialId: number | null;\r\n userSolutionId: string | null;\r\n name: string;\r\n orderNumber: string | null;\r\n}\r\n\r\nexport enum CabinetPosition {\r\n NotUsed = 0,\r\n FreeStanding = 1,\r\n WallLeft = 2,\r\n WallRight = 3,\r\n WallBoth = 4,\r\n}\r\n\r\nexport class Door implements IDoor {\r\n materialId!: number;\r\n bandMaterialId!: number | null;\r\n barId!: number | null;\r\n size!: Vec2d;\r\n\r\n constructor(data?: IDoor) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n if (!data) {\r\n this.size = new Vec2d();\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.materialId = _data[\"materialId\"] !== undefined ? _data[\"materialId\"] : null;\r\n this.bandMaterialId = _data[\"bandMaterialId\"] !== undefined ? _data[\"bandMaterialId\"] : null;\r\n this.barId = _data[\"barId\"] !== undefined ? _data[\"barId\"] : null;\r\n this.size = _data[\"size\"] ? Vec2d.fromJS(_data[\"size\"]) : new Vec2d();\r\n }\r\n }\r\n\r\n static fromJS(data: any): Door {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new Door();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"materialId\"] = this.materialId !== undefined ? this.materialId : null;\r\n data[\"bandMaterialId\"] = this.bandMaterialId !== undefined ? this.bandMaterialId : null;\r\n data[\"barId\"] = this.barId !== undefined ? this.barId : null;\r\n data[\"size\"] = this.size ? this.size.toJSON() : null;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IDoor {\r\n materialId: number;\r\n bandMaterialId: number | null;\r\n barId: number | null;\r\n size: Vec2d;\r\n}\r\n\r\nexport class Vec2d implements IVec2d {\r\n x!: number;\r\n y!: number;\r\n\r\n constructor(data?: IVec2d) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.x = _data[\"x\"] !== undefined ? _data[\"x\"] : null;\r\n this.y = _data[\"y\"] !== undefined ? _data[\"y\"] : null;\r\n }\r\n }\r\n\r\n static fromJS(data: any): Vec2d {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new Vec2d();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"x\"] = this.x !== undefined ? this.x : null;\r\n data[\"y\"] = this.y !== undefined ? this.y : null;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IVec2d {\r\n x: number;\r\n y: number;\r\n}\r\n\r\nexport class InteriorItem implements IInteriorItem {\r\n index!: number;\r\n productId!: number;\r\n position!: Vec2d;\r\n size!: Vec2d;\r\n isFlipped!: boolean;\r\n parentIndexes!: number[];\r\n interiorMaterialId!: number | null;\r\n\r\n constructor(data?: IInteriorItem) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n if (!data) {\r\n this.position = new Vec2d();\r\n this.size = new Vec2d();\r\n this.parentIndexes = [];\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.index = _data[\"index\"] !== undefined ? _data[\"index\"] : null;\r\n this.productId = _data[\"productId\"] !== undefined ? _data[\"productId\"] : null;\r\n this.position = _data[\"position\"] ? Vec2d.fromJS(_data[\"position\"]) : new Vec2d();\r\n this.size = _data[\"size\"] ? Vec2d.fromJS(_data[\"size\"]) : new Vec2d();\r\n this.isFlipped = _data[\"isFlipped\"] !== undefined ? _data[\"isFlipped\"] : null;\r\n if (Array.isArray(_data[\"parentIndexes\"])) {\r\n this.parentIndexes = [] as any;\r\n for (let item of _data[\"parentIndexes\"])\r\n this.parentIndexes!.push(item);\r\n }\r\n else {\r\n this.parentIndexes = null;\r\n }\r\n this.interiorMaterialId = _data[\"interiorMaterialId\"] !== undefined ? _data[\"interiorMaterialId\"] : null;\r\n }\r\n }\r\n\r\n static fromJS(data: any): InteriorItem {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new InteriorItem();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"index\"] = this.index !== undefined ? this.index : null;\r\n data[\"productId\"] = this.productId !== undefined ? this.productId : null;\r\n data[\"position\"] = this.position ? this.position.toJSON() : null;\r\n data[\"size\"] = this.size ? this.size.toJSON() : null;\r\n data[\"isFlipped\"] = this.isFlipped !== undefined ? this.isFlipped : null;\r\n if (Array.isArray(this.parentIndexes)) {\r\n data[\"parentIndexes\"] = [];\r\n for (let item of this.parentIndexes)\r\n data[\"parentIndexes\"].push(item);\r\n }\r\n data[\"interiorMaterialId\"] = this.interiorMaterialId !== undefined ? this.interiorMaterialId : null;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IInteriorItem {\r\n index: number;\r\n productId: number;\r\n position: Vec2d;\r\n size: Vec2d;\r\n isFlipped: boolean;\r\n parentIndexes: number[];\r\n interiorMaterialId: number | null;\r\n}\r\n\r\nexport class ExtraItem implements IExtraItem {\r\n productId!: number;\r\n interiorMaterialId!: number | null;\r\n count!: number;\r\n\r\n constructor(data?: IExtraItem) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.productId = _data[\"productId\"] !== undefined ? _data[\"productId\"] : null;\r\n this.interiorMaterialId = _data[\"interiorMaterialId\"] !== undefined ? _data[\"interiorMaterialId\"] : null;\r\n this.count = _data[\"count\"] !== undefined ? _data[\"count\"] : null;\r\n }\r\n }\r\n\r\n static fromJS(data: any): ExtraItem {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new ExtraItem();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"productId\"] = this.productId !== undefined ? this.productId : null;\r\n data[\"interiorMaterialId\"] = this.interiorMaterialId !== undefined ? this.interiorMaterialId : null;\r\n data[\"count\"] = this.count !== undefined ? this.count : null;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IExtraItem {\r\n productId: number;\r\n interiorMaterialId: number | null;\r\n count: number;\r\n}\r\n\r\nexport class LoginResponse implements ILoginResponse {\r\n userId!: string;\r\n username!: string;\r\n name!: string;\r\n token!: string;\r\n tokenExpires!: Date;\r\n userRights!: UserRight[];\r\n\r\n constructor(data?: ILoginResponse) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n if (!data) {\r\n this.userRights = [];\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.userId = _data[\"userId\"] !== undefined ? _data[\"userId\"] : null;\r\n this.username = _data[\"username\"] !== undefined ? _data[\"username\"] : null;\r\n this.name = _data[\"name\"] !== undefined ? _data[\"name\"] : null;\r\n this.token = _data[\"token\"] !== undefined ? _data[\"token\"] : null;\r\n this.tokenExpires = _data[\"tokenExpires\"] ? new Date(_data[\"tokenExpires\"].toString()) : null;\r\n if (Array.isArray(_data[\"userRights\"])) {\r\n this.userRights = [] as any;\r\n for (let item of _data[\"userRights\"])\r\n this.userRights!.push(item);\r\n }\r\n else {\r\n this.userRights = null;\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): LoginResponse {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new LoginResponse();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"userId\"] = this.userId !== undefined ? this.userId : null;\r\n data[\"username\"] = this.username !== undefined ? this.username : null;\r\n data[\"name\"] = this.name !== undefined ? this.name : null;\r\n data[\"token\"] = this.token !== undefined ? this.token : null;\r\n data[\"tokenExpires\"] = this.tokenExpires ? this.tokenExpires.toISOString() : null;\r\n if (Array.isArray(this.userRights)) {\r\n data[\"userRights\"] = [];\r\n for (let item of this.userRights)\r\n data[\"userRights\"].push(item);\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ILoginResponse {\r\n userId: string;\r\n username: string;\r\n name: string;\r\n token: string;\r\n tokenExpires: Date;\r\n userRights: UserRight[];\r\n}\r\n\r\nexport enum UserRight {\r\n NotUsed = 0,\r\n SaveSolution = 1,\r\n LoadSolution = 2,\r\n LoadChainSolution = 3,\r\n LoadAllSolutions = 4,\r\n CreateCustomer = 5,\r\n EditTranslations = 6,\r\n EditMaterials = 7,\r\n EditProductLines = 8,\r\n EditChains = 9,\r\n ChangeOwnPassword = 10,\r\n EditProducts = 11,\r\n StartSync = 12,\r\n ManageAllUsers = 13,\r\n OrderSolution = 14,\r\n}\r\n\r\nexport class LoginRequest implements ILoginRequest {\r\n username!: string;\r\n password!: string;\r\n\r\n constructor(data?: ILoginRequest) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.username = _data[\"username\"] !== undefined ? _data[\"username\"] : null;\r\n this.password = _data[\"password\"] !== undefined ? _data[\"password\"] : null;\r\n }\r\n }\r\n\r\n static fromJS(data: any): LoginRequest {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new LoginRequest();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"username\"] = this.username !== undefined ? this.username : null;\r\n data[\"password\"] = this.password !== undefined ? this.password : null;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ILoginRequest {\r\n username: string;\r\n password: string;\r\n}\r\n\r\nexport class CreateUserResponse implements ICreateUserResponse {\r\n login!: LoginResponse;\r\n\r\n constructor(data?: ICreateUserResponse) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n if (!data) {\r\n this.login = new LoginResponse();\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.login = _data[\"login\"] ? LoginResponse.fromJS(_data[\"login\"]) : new LoginResponse();\r\n }\r\n }\r\n\r\n static fromJS(data: any): CreateUserResponse {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new CreateUserResponse();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"login\"] = this.login ? this.login.toJSON() : null;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ICreateUserResponse {\r\n login: LoginResponse;\r\n}\r\n\r\nexport class CreateUserRequest implements ICreateUserRequest {\r\n username!: string;\r\n password!: string;\r\n name!: string;\r\n phoneNumber!: string;\r\n email!: string;\r\n\r\n constructor(data?: ICreateUserRequest) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.username = _data[\"username\"] !== undefined ? _data[\"username\"] : null;\r\n this.password = _data[\"password\"] !== undefined ? _data[\"password\"] : null;\r\n this.name = _data[\"name\"] !== undefined ? _data[\"name\"] : null;\r\n this.phoneNumber = _data[\"phoneNumber\"] !== undefined ? _data[\"phoneNumber\"] : null;\r\n this.email = _data[\"email\"] !== undefined ? _data[\"email\"] : null;\r\n }\r\n }\r\n\r\n static fromJS(data: any): CreateUserRequest {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new CreateUserRequest();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"username\"] = this.username !== undefined ? this.username : null;\r\n data[\"password\"] = this.password !== undefined ? this.password : null;\r\n data[\"name\"] = this.name !== undefined ? this.name : null;\r\n data[\"phoneNumber\"] = this.phoneNumber !== undefined ? this.phoneNumber : null;\r\n data[\"email\"] = this.email !== undefined ? this.email : null;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ICreateUserRequest {\r\n username: string;\r\n password: string;\r\n name: string;\r\n phoneNumber: string;\r\n email: string;\r\n}\r\n\r\nexport class ChangePasswordRequest implements IChangePasswordRequest {\r\n oldPassword!: string;\r\n newPassword!: string;\r\n\r\n constructor(data?: IChangePasswordRequest) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.oldPassword = _data[\"oldPassword\"] !== undefined ? _data[\"oldPassword\"] : null;\r\n this.newPassword = _data[\"newPassword\"] !== undefined ? _data[\"newPassword\"] : null;\r\n }\r\n }\r\n\r\n static fromJS(data: any): ChangePasswordRequest {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new ChangePasswordRequest();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"oldPassword\"] = this.oldPassword !== undefined ? this.oldPassword : null;\r\n data[\"newPassword\"] = this.newPassword !== undefined ? this.newPassword : null;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IChangePasswordRequest {\r\n oldPassword: string;\r\n newPassword: string;\r\n}\r\n\r\nexport class ChainInfo implements IChainInfo {\r\n chainId!: number;\r\n storeId!: number;\r\n logoUrl!: string | null;\r\n cssUrl!: string | null;\r\n currency!: string;\r\n vatRate!: number;\r\n productLines!: ProductLine[];\r\n extraProducts!: ExtraProductGroup[];\r\n interiorMaterials!: InteriorMaterial[];\r\n supportProducts!: SupportProduct[];\r\n\r\n constructor(data?: IChainInfo) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n if (!data) {\r\n this.productLines = [];\r\n this.extraProducts = [];\r\n this.interiorMaterials = [];\r\n this.supportProducts = [];\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.chainId = _data[\"chainId\"] !== undefined ? _data[\"chainId\"] : null;\r\n this.storeId = _data[\"storeId\"] !== undefined ? _data[\"storeId\"] : null;\r\n this.logoUrl = _data[\"logoUrl\"] !== undefined ? _data[\"logoUrl\"] : null;\r\n this.cssUrl = _data[\"cssUrl\"] !== undefined ? _data[\"cssUrl\"] : null;\r\n this.currency = _data[\"currency\"] !== undefined ? _data[\"currency\"] : null;\r\n this.vatRate = _data[\"vatRate\"] !== undefined ? _data[\"vatRate\"] : null;\r\n if (Array.isArray(_data[\"productLines\"])) {\r\n this.productLines = [] as any;\r\n for (let item of _data[\"productLines\"])\r\n this.productLines!.push(ProductLine.fromJS(item));\r\n }\r\n else {\r\n this.productLines = null;\r\n }\r\n if (Array.isArray(_data[\"extraProducts\"])) {\r\n this.extraProducts = [] as any;\r\n for (let item of _data[\"extraProducts\"])\r\n this.extraProducts!.push(ExtraProductGroup.fromJS(item));\r\n }\r\n else {\r\n this.extraProducts = null;\r\n }\r\n if (Array.isArray(_data[\"interiorMaterials\"])) {\r\n this.interiorMaterials = [] as any;\r\n for (let item of _data[\"interiorMaterials\"])\r\n this.interiorMaterials!.push(InteriorMaterial.fromJS(item));\r\n }\r\n else {\r\n this.interiorMaterials = null;\r\n }\r\n if (Array.isArray(_data[\"supportProducts\"])) {\r\n this.supportProducts = [] as any;\r\n for (let item of _data[\"supportProducts\"])\r\n this.supportProducts!.push(SupportProduct.fromJS(item));\r\n }\r\n else {\r\n this.supportProducts = null;\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): ChainInfo {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new ChainInfo();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"chainId\"] = this.chainId !== undefined ? this.chainId : null;\r\n data[\"storeId\"] = this.storeId !== undefined ? this.storeId : null;\r\n data[\"logoUrl\"] = this.logoUrl !== undefined ? this.logoUrl : null;\r\n data[\"cssUrl\"] = this.cssUrl !== undefined ? this.cssUrl : null;\r\n data[\"currency\"] = this.currency !== undefined ? this.currency : null;\r\n data[\"vatRate\"] = this.vatRate !== undefined ? this.vatRate : null;\r\n if (Array.isArray(this.productLines)) {\r\n data[\"productLines\"] = [];\r\n for (let item of this.productLines)\r\n data[\"productLines\"].push(item.toJSON());\r\n }\r\n if (Array.isArray(this.extraProducts)) {\r\n data[\"extraProducts\"] = [];\r\n for (let item of this.extraProducts)\r\n data[\"extraProducts\"].push(item.toJSON());\r\n }\r\n if (Array.isArray(this.interiorMaterials)) {\r\n data[\"interiorMaterials\"] = [];\r\n for (let item of this.interiorMaterials)\r\n data[\"interiorMaterials\"].push(item.toJSON());\r\n }\r\n if (Array.isArray(this.supportProducts)) {\r\n data[\"supportProducts\"] = [];\r\n for (let item of this.supportProducts)\r\n data[\"supportProducts\"].push(item.toJSON());\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IChainInfo {\r\n chainId: number;\r\n storeId: number;\r\n logoUrl: string | null;\r\n cssUrl: string | null;\r\n currency: string;\r\n vatRate: number;\r\n productLines: ProductLine[];\r\n extraProducts: ExtraProductGroup[];\r\n interiorMaterials: InteriorMaterial[];\r\n supportProducts: SupportProduct[];\r\n}\r\n\r\nexport class ProductLine implements IProductLine {\r\n id!: number;\r\n name!: string;\r\n description!: string;\r\n imageUrl!: string | null;\r\n defaultSize!: Vec2d;\r\n minSize!: Vec2d;\r\n maxSize!: Vec2d;\r\n doors!: DoorProduct[];\r\n adapterProducts!: GableProduct[];\r\n interiorProducts!: InteriorProductGroup[];\r\n gableProducts!: GableProduct[];\r\n\r\n constructor(data?: IProductLine) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n if (!data) {\r\n this.defaultSize = new Vec2d();\r\n this.minSize = new Vec2d();\r\n this.maxSize = new Vec2d();\r\n this.doors = [];\r\n this.adapterProducts = [];\r\n this.interiorProducts = [];\r\n this.gableProducts = [];\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.id = _data[\"id\"] !== undefined ? _data[\"id\"] : null;\r\n this.name = _data[\"name\"] !== undefined ? _data[\"name\"] : null;\r\n this.description = _data[\"description\"] !== undefined ? _data[\"description\"] : null;\r\n this.imageUrl = _data[\"imageUrl\"] !== undefined ? _data[\"imageUrl\"] : null;\r\n this.defaultSize = _data[\"defaultSize\"] ? Vec2d.fromJS(_data[\"defaultSize\"]) : new Vec2d();\r\n this.minSize = _data[\"minSize\"] ? Vec2d.fromJS(_data[\"minSize\"]) : new Vec2d();\r\n this.maxSize = _data[\"maxSize\"] ? Vec2d.fromJS(_data[\"maxSize\"]) : new Vec2d();\r\n if (Array.isArray(_data[\"doors\"])) {\r\n this.doors = [] as any;\r\n for (let item of _data[\"doors\"])\r\n this.doors!.push(DoorProduct.fromJS(item));\r\n }\r\n else {\r\n this.doors = null;\r\n }\r\n if (Array.isArray(_data[\"adapterProducts\"])) {\r\n this.adapterProducts = [] as any;\r\n for (let item of _data[\"adapterProducts\"])\r\n this.adapterProducts!.push(GableProduct.fromJS(item));\r\n }\r\n else {\r\n this.adapterProducts = null;\r\n }\r\n if (Array.isArray(_data[\"interiorProducts\"])) {\r\n this.interiorProducts = [] as any;\r\n for (let item of _data[\"interiorProducts\"])\r\n this.interiorProducts!.push(InteriorProductGroup.fromJS(item));\r\n }\r\n else {\r\n this.interiorProducts = null;\r\n }\r\n if (Array.isArray(_data[\"gableProducts\"])) {\r\n this.gableProducts = [] as any;\r\n for (let item of _data[\"gableProducts\"])\r\n this.gableProducts!.push(GableProduct.fromJS(item));\r\n }\r\n else {\r\n this.gableProducts = null;\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): ProductLine {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new ProductLine();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"id\"] = this.id !== undefined ? this.id : null;\r\n data[\"name\"] = this.name !== undefined ? this.name : null;\r\n data[\"description\"] = this.description !== undefined ? this.description : null;\r\n data[\"imageUrl\"] = this.imageUrl !== undefined ? this.imageUrl : null;\r\n data[\"defaultSize\"] = this.defaultSize ? this.defaultSize.toJSON() : null;\r\n data[\"minSize\"] = this.minSize ? this.minSize.toJSON() : null;\r\n data[\"maxSize\"] = this.maxSize ? this.maxSize.toJSON() : null;\r\n if (Array.isArray(this.doors)) {\r\n data[\"doors\"] = [];\r\n for (let item of this.doors)\r\n data[\"doors\"].push(item.toJSON());\r\n }\r\n if (Array.isArray(this.adapterProducts)) {\r\n data[\"adapterProducts\"] = [];\r\n for (let item of this.adapterProducts)\r\n data[\"adapterProducts\"].push(item.toJSON());\r\n }\r\n if (Array.isArray(this.interiorProducts)) {\r\n data[\"interiorProducts\"] = [];\r\n for (let item of this.interiorProducts)\r\n data[\"interiorProducts\"].push(item.toJSON());\r\n }\r\n if (Array.isArray(this.gableProducts)) {\r\n data[\"gableProducts\"] = [];\r\n for (let item of this.gableProducts)\r\n data[\"gableProducts\"].push(item.toJSON());\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IProductLine {\r\n id: number;\r\n name: string;\r\n description: string;\r\n imageUrl: string | null;\r\n defaultSize: Vec2d;\r\n minSize: Vec2d;\r\n maxSize: Vec2d;\r\n doors: DoorProduct[];\r\n adapterProducts: GableProduct[];\r\n interiorProducts: InteriorProductGroup[];\r\n gableProducts: GableProduct[];\r\n}\r\n\r\nexport class DoorProduct implements IDoorProduct {\r\n id!: number;\r\n externalId!: string;\r\n name!: string;\r\n description!: string | null;\r\n imageUrl!: string | null;\r\n damperLeft!: DamperProduct | null;\r\n damperMiddle!: DamperProduct | null;\r\n damperRight!: DamperProduct | null;\r\n frame!: DoorFrame;\r\n doorSizes!: DoorSize[];\r\n bars!: DoorBar[];\r\n bandMaterials!: Material[];\r\n\r\n constructor(data?: IDoorProduct) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n if (!data) {\r\n this.frame = new DoorFrame();\r\n this.doorSizes = [];\r\n this.bars = [];\r\n this.bandMaterials = [];\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.id = _data[\"id\"] !== undefined ? _data[\"id\"] : null;\r\n this.externalId = _data[\"externalId\"] !== undefined ? _data[\"externalId\"] : null;\r\n this.name = _data[\"name\"] !== undefined ? _data[\"name\"] : null;\r\n this.description = _data[\"description\"] !== undefined ? _data[\"description\"] : null;\r\n this.imageUrl = _data[\"imageUrl\"] !== undefined ? _data[\"imageUrl\"] : null;\r\n this.damperLeft = _data[\"damperLeft\"] ? DamperProduct.fromJS(_data[\"damperLeft\"]) : null;\r\n this.damperMiddle = _data[\"damperMiddle\"] ? DamperProduct.fromJS(_data[\"damperMiddle\"]) : null;\r\n this.damperRight = _data[\"damperRight\"] ? DamperProduct.fromJS(_data[\"damperRight\"]) : null;\r\n this.frame = _data[\"frame\"] ? DoorFrame.fromJS(_data[\"frame\"]) : new DoorFrame();\r\n if (Array.isArray(_data[\"doorSizes\"])) {\r\n this.doorSizes = [] as any;\r\n for (let item of _data[\"doorSizes\"])\r\n this.doorSizes!.push(DoorSize.fromJS(item));\r\n }\r\n else {\r\n this.doorSizes = null;\r\n }\r\n if (Array.isArray(_data[\"bars\"])) {\r\n this.bars = [] as any;\r\n for (let item of _data[\"bars\"])\r\n this.bars!.push(DoorBar.fromJS(item));\r\n }\r\n else {\r\n this.bars = null;\r\n }\r\n if (Array.isArray(_data[\"bandMaterials\"])) {\r\n this.bandMaterials = [] as any;\r\n for (let item of _data[\"bandMaterials\"])\r\n this.bandMaterials!.push(Material.fromJS(item));\r\n }\r\n else {\r\n this.bandMaterials = null;\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): DoorProduct {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new DoorProduct();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"id\"] = this.id !== undefined ? this.id : null;\r\n data[\"externalId\"] = this.externalId !== undefined ? this.externalId : null;\r\n data[\"name\"] = this.name !== undefined ? this.name : null;\r\n data[\"description\"] = this.description !== undefined ? this.description : null;\r\n data[\"imageUrl\"] = this.imageUrl !== undefined ? this.imageUrl : null;\r\n data[\"damperLeft\"] = this.damperLeft ? this.damperLeft.toJSON() : null;\r\n data[\"damperMiddle\"] = this.damperMiddle ? this.damperMiddle.toJSON() : null;\r\n data[\"damperRight\"] = this.damperRight ? this.damperRight.toJSON() : null;\r\n data[\"frame\"] = this.frame ? this.frame.toJSON() : null;\r\n if (Array.isArray(this.doorSizes)) {\r\n data[\"doorSizes\"] = [];\r\n for (let item of this.doorSizes)\r\n data[\"doorSizes\"].push(item.toJSON());\r\n }\r\n if (Array.isArray(this.bars)) {\r\n data[\"bars\"] = [];\r\n for (let item of this.bars)\r\n data[\"bars\"].push(item.toJSON());\r\n }\r\n if (Array.isArray(this.bandMaterials)) {\r\n data[\"bandMaterials\"] = [];\r\n for (let item of this.bandMaterials)\r\n data[\"bandMaterials\"].push(item.toJSON());\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IDoorProduct {\r\n id: number;\r\n externalId: string;\r\n name: string;\r\n description: string | null;\r\n imageUrl: string | null;\r\n damperLeft: DamperProduct | null;\r\n damperMiddle: DamperProduct | null;\r\n damperRight: DamperProduct | null;\r\n frame: DoorFrame;\r\n doorSizes: DoorSize[];\r\n bars: DoorBar[];\r\n bandMaterials: Material[];\r\n}\r\n\r\nexport class DamperProduct implements IDamperProduct {\r\n id!: number;\r\n externalId!: string;\r\n name!: string;\r\n price!: number;\r\n minWidth!: number;\r\n\r\n constructor(data?: IDamperProduct) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.id = _data[\"id\"] !== undefined ? _data[\"id\"] : null;\r\n this.externalId = _data[\"externalId\"] !== undefined ? _data[\"externalId\"] : null;\r\n this.name = _data[\"name\"] !== undefined ? _data[\"name\"] : null;\r\n this.price = _data[\"price\"] !== undefined ? _data[\"price\"] : null;\r\n this.minWidth = _data[\"minWidth\"] !== undefined ? _data[\"minWidth\"] : null;\r\n }\r\n }\r\n\r\n static fromJS(data: any): DamperProduct {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new DamperProduct();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"id\"] = this.id !== undefined ? this.id : null;\r\n data[\"externalId\"] = this.externalId !== undefined ? this.externalId : null;\r\n data[\"name\"] = this.name !== undefined ? this.name : null;\r\n data[\"price\"] = this.price !== undefined ? this.price : null;\r\n data[\"minWidth\"] = this.minWidth !== undefined ? this.minWidth : null;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IDamperProduct {\r\n id: number;\r\n externalId: string;\r\n name: string;\r\n price: number;\r\n minWidth: number;\r\n}\r\n\r\nexport class DoorFrame implements IDoorFrame {\r\n textureUrl!: string;\r\n heightTop!: number;\r\n heightBotton!: number;\r\n widthSides!: number;\r\n thickness!: number;\r\n\r\n constructor(data?: IDoorFrame) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.textureUrl = _data[\"textureUrl\"] !== undefined ? _data[\"textureUrl\"] : null;\r\n this.heightTop = _data[\"heightTop\"] !== undefined ? _data[\"heightTop\"] : null;\r\n this.heightBotton = _data[\"heightBotton\"] !== undefined ? _data[\"heightBotton\"] : null;\r\n this.widthSides = _data[\"widthSides\"] !== undefined ? _data[\"widthSides\"] : null;\r\n this.thickness = _data[\"thickness\"] !== undefined ? _data[\"thickness\"] : null;\r\n }\r\n }\r\n\r\n static fromJS(data: any): DoorFrame {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new DoorFrame();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"textureUrl\"] = this.textureUrl !== undefined ? this.textureUrl : null;\r\n data[\"heightTop\"] = this.heightTop !== undefined ? this.heightTop : null;\r\n data[\"heightBotton\"] = this.heightBotton !== undefined ? this.heightBotton : null;\r\n data[\"widthSides\"] = this.widthSides !== undefined ? this.widthSides : null;\r\n data[\"thickness\"] = this.thickness !== undefined ? this.thickness : null;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IDoorFrame {\r\n textureUrl: string;\r\n heightTop: number;\r\n heightBotton: number;\r\n widthSides: number;\r\n thickness: number;\r\n}\r\n\r\nexport class DoorSize implements IDoorSize {\r\n externalId!: string;\r\n min!: Vec2d;\r\n max!: Vec2d;\r\n material!: Material;\r\n price!: number;\r\n\r\n constructor(data?: IDoorSize) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n if (!data) {\r\n this.min = new Vec2d();\r\n this.max = new Vec2d();\r\n this.material = new Material();\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.externalId = _data[\"externalId\"] !== undefined ? _data[\"externalId\"] : null;\r\n this.min = _data[\"min\"] ? Vec2d.fromJS(_data[\"min\"]) : new Vec2d();\r\n this.max = _data[\"max\"] ? Vec2d.fromJS(_data[\"max\"]) : new Vec2d();\r\n this.material = _data[\"material\"] ? Material.fromJS(_data[\"material\"]) : new Material();\r\n this.price = _data[\"price\"] !== undefined ? _data[\"price\"] : null;\r\n }\r\n }\r\n\r\n static fromJS(data: any): DoorSize {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new DoorSize();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"externalId\"] = this.externalId !== undefined ? this.externalId : null;\r\n data[\"min\"] = this.min ? this.min.toJSON() : null;\r\n data[\"max\"] = this.max ? this.max.toJSON() : null;\r\n data[\"material\"] = this.material ? this.material.toJSON() : null;\r\n data[\"price\"] = this.price !== undefined ? this.price : null;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IDoorSize {\r\n externalId: string;\r\n min: Vec2d;\r\n max: Vec2d;\r\n material: Material;\r\n price: number;\r\n}\r\n\r\nexport class Material implements IMaterial {\r\n id!: number;\r\n externalId!: string;\r\n name!: string;\r\n sampleImageUrl!: string | null;\r\n textureImageUrl!: string | null;\r\n\r\n constructor(data?: IMaterial) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.id = _data[\"id\"] !== undefined ? _data[\"id\"] : null;\r\n this.externalId = _data[\"externalId\"] !== undefined ? _data[\"externalId\"] : null;\r\n this.name = _data[\"name\"] !== undefined ? _data[\"name\"] : null;\r\n this.sampleImageUrl = _data[\"sampleImageUrl\"] !== undefined ? _data[\"sampleImageUrl\"] : null;\r\n this.textureImageUrl = _data[\"textureImageUrl\"] !== undefined ? _data[\"textureImageUrl\"] : null;\r\n }\r\n }\r\n\r\n static fromJS(data: any): Material {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new Material();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"id\"] = this.id !== undefined ? this.id : null;\r\n data[\"externalId\"] = this.externalId !== undefined ? this.externalId : null;\r\n data[\"name\"] = this.name !== undefined ? this.name : null;\r\n data[\"sampleImageUrl\"] = this.sampleImageUrl !== undefined ? this.sampleImageUrl : null;\r\n data[\"textureImageUrl\"] = this.textureImageUrl !== undefined ? this.textureImageUrl : null;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IMaterial {\r\n id: number;\r\n externalId: string;\r\n name: string;\r\n sampleImageUrl: string | null;\r\n textureImageUrl: string | null;\r\n}\r\n\r\nexport class DoorBar implements IDoorBar {\r\n id!: number;\r\n externalId!: string;\r\n numBars!: number;\r\n name!: string;\r\n barHeight!: number;\r\n bandHeight!: number | null;\r\n textureUrl!: string;\r\n\r\n constructor(data?: IDoorBar) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.id = _data[\"id\"] !== undefined ? _data[\"id\"] : null;\r\n this.externalId = _data[\"externalId\"] !== undefined ? _data[\"externalId\"] : null;\r\n this.numBars = _data[\"numBars\"] !== undefined ? _data[\"numBars\"] : null;\r\n this.name = _data[\"name\"] !== undefined ? _data[\"name\"] : null;\r\n this.barHeight = _data[\"barHeight\"] !== undefined ? _data[\"barHeight\"] : null;\r\n this.bandHeight = _data[\"bandHeight\"] !== undefined ? _data[\"bandHeight\"] : null;\r\n this.textureUrl = _data[\"textureUrl\"] !== undefined ? _data[\"textureUrl\"] : null;\r\n }\r\n }\r\n\r\n static fromJS(data: any): DoorBar {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new DoorBar();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"id\"] = this.id !== undefined ? this.id : null;\r\n data[\"externalId\"] = this.externalId !== undefined ? this.externalId : null;\r\n data[\"numBars\"] = this.numBars !== undefined ? this.numBars : null;\r\n data[\"name\"] = this.name !== undefined ? this.name : null;\r\n data[\"barHeight\"] = this.barHeight !== undefined ? this.barHeight : null;\r\n data[\"bandHeight\"] = this.bandHeight !== undefined ? this.bandHeight : null;\r\n data[\"textureUrl\"] = this.textureUrl !== undefined ? this.textureUrl : null;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IDoorBar {\r\n id: number;\r\n externalId: string;\r\n numBars: number;\r\n name: string;\r\n barHeight: number;\r\n bandHeight: number | null;\r\n textureUrl: string;\r\n}\r\n\r\nexport class GableProduct implements IGableProduct {\r\n id!: number;\r\n externalId!: string;\r\n name!: string;\r\n size!: Vec3d;\r\n materials!: ProductMaterial[];\r\n\r\n constructor(data?: IGableProduct) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n if (!data) {\r\n this.size = new Vec3d();\r\n this.materials = [];\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.id = _data[\"id\"] !== undefined ? _data[\"id\"] : null;\r\n this.externalId = _data[\"externalId\"] !== undefined ? _data[\"externalId\"] : null;\r\n this.name = _data[\"name\"] !== undefined ? _data[\"name\"] : null;\r\n this.size = _data[\"size\"] ? Vec3d.fromJS(_data[\"size\"]) : new Vec3d();\r\n if (Array.isArray(_data[\"materials\"])) {\r\n this.materials = [] as any;\r\n for (let item of _data[\"materials\"])\r\n this.materials!.push(ProductMaterial.fromJS(item));\r\n }\r\n else {\r\n this.materials = null;\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): GableProduct {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new GableProduct();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"id\"] = this.id !== undefined ? this.id : null;\r\n data[\"externalId\"] = this.externalId !== undefined ? this.externalId : null;\r\n data[\"name\"] = this.name !== undefined ? this.name : null;\r\n data[\"size\"] = this.size ? this.size.toJSON() : null;\r\n if (Array.isArray(this.materials)) {\r\n data[\"materials\"] = [];\r\n for (let item of this.materials)\r\n data[\"materials\"].push(item.toJSON());\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IGableProduct {\r\n id: number;\r\n externalId: string;\r\n name: string;\r\n size: Vec3d;\r\n materials: ProductMaterial[];\r\n}\r\n\r\nexport class ProductMaterial implements IProductMaterial {\r\n id!: number;\r\n externalId!: string;\r\n name!: string;\r\n sampleImageUrl!: string | null;\r\n textureImageUrl!: string | null;\r\n price!: number;\r\n\r\n constructor(data?: IProductMaterial) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.id = _data[\"id\"] !== undefined ? _data[\"id\"] : null;\r\n this.externalId = _data[\"externalId\"] !== undefined ? _data[\"externalId\"] : null;\r\n this.name = _data[\"name\"] !== undefined ? _data[\"name\"] : null;\r\n this.sampleImageUrl = _data[\"sampleImageUrl\"] !== undefined ? _data[\"sampleImageUrl\"] : null;\r\n this.textureImageUrl = _data[\"textureImageUrl\"] !== undefined ? _data[\"textureImageUrl\"] : null;\r\n this.price = _data[\"price\"] !== undefined ? _data[\"price\"] : null;\r\n }\r\n }\r\n\r\n static fromJS(data: any): ProductMaterial {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new ProductMaterial();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"id\"] = this.id !== undefined ? this.id : null;\r\n data[\"externalId\"] = this.externalId !== undefined ? this.externalId : null;\r\n data[\"name\"] = this.name !== undefined ? this.name : null;\r\n data[\"sampleImageUrl\"] = this.sampleImageUrl !== undefined ? this.sampleImageUrl : null;\r\n data[\"textureImageUrl\"] = this.textureImageUrl !== undefined ? this.textureImageUrl : null;\r\n data[\"price\"] = this.price !== undefined ? this.price : null;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IProductMaterial {\r\n id: number;\r\n externalId: string;\r\n name: string;\r\n sampleImageUrl: string | null;\r\n textureImageUrl: string | null;\r\n price: number;\r\n}\r\n\r\nexport class InteriorProductGroup implements IInteriorProductGroup {\r\n id!: number;\r\n externalId!: string;\r\n name!: string;\r\n interiorProductSubGroups!: InteriorProductSubGroup[];\r\n\r\n constructor(data?: IInteriorProductGroup) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n if (!data) {\r\n this.interiorProductSubGroups = [];\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.id = _data[\"id\"] !== undefined ? _data[\"id\"] : null;\r\n this.externalId = _data[\"externalId\"] !== undefined ? _data[\"externalId\"] : null;\r\n this.name = _data[\"name\"] !== undefined ? _data[\"name\"] : null;\r\n if (Array.isArray(_data[\"interiorProductSubGroups\"])) {\r\n this.interiorProductSubGroups = [] as any;\r\n for (let item of _data[\"interiorProductSubGroups\"])\r\n this.interiorProductSubGroups!.push(InteriorProductSubGroup.fromJS(item));\r\n }\r\n else {\r\n this.interiorProductSubGroups = null;\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): InteriorProductGroup {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new InteriorProductGroup();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"id\"] = this.id !== undefined ? this.id : null;\r\n data[\"externalId\"] = this.externalId !== undefined ? this.externalId : null;\r\n data[\"name\"] = this.name !== undefined ? this.name : null;\r\n if (Array.isArray(this.interiorProductSubGroups)) {\r\n data[\"interiorProductSubGroups\"] = [];\r\n for (let item of this.interiorProductSubGroups)\r\n data[\"interiorProductSubGroups\"].push(item.toJSON());\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IInteriorProductGroup {\r\n id: number;\r\n externalId: string;\r\n name: string;\r\n interiorProductSubGroups: InteriorProductSubGroup[];\r\n}\r\n\r\nexport class InteriorProductSubGroup implements IInteriorProductSubGroup {\r\n id!: number;\r\n externalId!: string;\r\n name!: string;\r\n imageUrl!: string;\r\n productType!: InteriorProductType;\r\n products!: InteriorProduct[];\r\n\r\n constructor(data?: IInteriorProductSubGroup) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n if (!data) {\r\n this.products = [];\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.id = _data[\"id\"] !== undefined ? _data[\"id\"] : null;\r\n this.externalId = _data[\"externalId\"] !== undefined ? _data[\"externalId\"] : null;\r\n this.name = _data[\"name\"] !== undefined ? _data[\"name\"] : null;\r\n this.imageUrl = _data[\"imageUrl\"] !== undefined ? _data[\"imageUrl\"] : null;\r\n this.productType = _data[\"productType\"] !== undefined ? _data[\"productType\"] : null;\r\n if (Array.isArray(_data[\"products\"])) {\r\n this.products = [] as any;\r\n for (let item of _data[\"products\"])\r\n this.products!.push(InteriorProduct.fromJS(item));\r\n }\r\n else {\r\n this.products = null;\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): InteriorProductSubGroup {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new InteriorProductSubGroup();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"id\"] = this.id !== undefined ? this.id : null;\r\n data[\"externalId\"] = this.externalId !== undefined ? this.externalId : null;\r\n data[\"name\"] = this.name !== undefined ? this.name : null;\r\n data[\"imageUrl\"] = this.imageUrl !== undefined ? this.imageUrl : null;\r\n data[\"productType\"] = this.productType !== undefined ? this.productType : null;\r\n if (Array.isArray(this.products)) {\r\n data[\"products\"] = [];\r\n for (let item of this.products)\r\n data[\"products\"].push(item.toJSON());\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IInteriorProductSubGroup {\r\n id: number;\r\n externalId: string;\r\n name: string;\r\n imageUrl: string;\r\n productType: InteriorProductType;\r\n products: InteriorProduct[];\r\n}\r\n\r\nexport enum InteriorProductType {\r\n None = 0,\r\n Gable = 1,\r\n Module = 2,\r\n ShelfOrDrawer = 3,\r\n ModuleShelf = 4,\r\n GableShelf = 5,\r\n LeftMount = 6,\r\n RightMount = 7,\r\n LeftOrRightMount = 8,\r\n TopMount = 9,\r\n TopAndBottom = 10,\r\n}\r\n\r\nexport class InteriorProduct implements IInteriorProduct {\r\n id!: number;\r\n externalId!: string;\r\n name!: string;\r\n price!: number;\r\n productType!: InteriorProductType;\r\n isPullout!: boolean;\r\n defaultSize!: Vec3d;\r\n minSize!: Vec3d;\r\n maxSize!: Vec3d;\r\n textureUrl!: string;\r\n snapOffset!: number;\r\n materials!: InteriorProductMaterial[];\r\n\r\n constructor(data?: IInteriorProduct) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n if (!data) {\r\n this.defaultSize = new Vec3d();\r\n this.minSize = new Vec3d();\r\n this.maxSize = new Vec3d();\r\n this.materials = [];\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.id = _data[\"id\"] !== undefined ? _data[\"id\"] : null;\r\n this.externalId = _data[\"externalId\"] !== undefined ? _data[\"externalId\"] : null;\r\n this.name = _data[\"name\"] !== undefined ? _data[\"name\"] : null;\r\n this.price = _data[\"price\"] !== undefined ? _data[\"price\"] : null;\r\n this.productType = _data[\"productType\"] !== undefined ? _data[\"productType\"] : null;\r\n this.isPullout = _data[\"isPullout\"] !== undefined ? _data[\"isPullout\"] : null;\r\n this.defaultSize = _data[\"defaultSize\"] ? Vec3d.fromJS(_data[\"defaultSize\"]) : new Vec3d();\r\n this.minSize = _data[\"minSize\"] ? Vec3d.fromJS(_data[\"minSize\"]) : new Vec3d();\r\n this.maxSize = _data[\"maxSize\"] ? Vec3d.fromJS(_data[\"maxSize\"]) : new Vec3d();\r\n this.textureUrl = _data[\"textureUrl\"] !== undefined ? _data[\"textureUrl\"] : null;\r\n this.snapOffset = _data[\"snapOffset\"] !== undefined ? _data[\"snapOffset\"] : null;\r\n if (Array.isArray(_data[\"materials\"])) {\r\n this.materials = [] as any;\r\n for (let item of _data[\"materials\"])\r\n this.materials!.push(InteriorProductMaterial.fromJS(item));\r\n }\r\n else {\r\n this.materials = null;\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): InteriorProduct {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new InteriorProduct();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"id\"] = this.id !== undefined ? this.id : null;\r\n data[\"externalId\"] = this.externalId !== undefined ? this.externalId : null;\r\n data[\"name\"] = this.name !== undefined ? this.name : null;\r\n data[\"price\"] = this.price !== undefined ? this.price : null;\r\n data[\"productType\"] = this.productType !== undefined ? this.productType : null;\r\n data[\"isPullout\"] = this.isPullout !== undefined ? this.isPullout : null;\r\n data[\"defaultSize\"] = this.defaultSize ? this.defaultSize.toJSON() : null;\r\n data[\"minSize\"] = this.minSize ? this.minSize.toJSON() : null;\r\n data[\"maxSize\"] = this.maxSize ? this.maxSize.toJSON() : null;\r\n data[\"textureUrl\"] = this.textureUrl !== undefined ? this.textureUrl : null;\r\n data[\"snapOffset\"] = this.snapOffset !== undefined ? this.snapOffset : null;\r\n if (Array.isArray(this.materials)) {\r\n data[\"materials\"] = [];\r\n for (let item of this.materials)\r\n data[\"materials\"].push(item.toJSON());\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IInteriorProduct {\r\n id: number;\r\n externalId: string;\r\n name: string;\r\n price: number;\r\n productType: InteriorProductType;\r\n isPullout: boolean;\r\n defaultSize: Vec3d;\r\n minSize: Vec3d;\r\n maxSize: Vec3d;\r\n textureUrl: string;\r\n snapOffset: number;\r\n materials: InteriorProductMaterial[];\r\n}\r\n\r\nexport class InteriorProductMaterial implements IInteriorProductMaterial {\r\n interiorMaterialId!: number;\r\n externalId!: string | null;\r\n name!: string;\r\n price!: number;\r\n picturePath!: string | null;\r\n drawingPath!: string | null;\r\n\r\n constructor(data?: IInteriorProductMaterial) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.interiorMaterialId = _data[\"interiorMaterialId\"] !== undefined ? _data[\"interiorMaterialId\"] : null;\r\n this.externalId = _data[\"externalId\"] !== undefined ? _data[\"externalId\"] : null;\r\n this.name = _data[\"name\"] !== undefined ? _data[\"name\"] : null;\r\n this.price = _data[\"price\"] !== undefined ? _data[\"price\"] : null;\r\n this.picturePath = _data[\"picturePath\"] !== undefined ? _data[\"picturePath\"] : null;\r\n this.drawingPath = _data[\"drawingPath\"] !== undefined ? _data[\"drawingPath\"] : null;\r\n }\r\n }\r\n\r\n static fromJS(data: any): InteriorProductMaterial {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new InteriorProductMaterial();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"interiorMaterialId\"] = this.interiorMaterialId !== undefined ? this.interiorMaterialId : null;\r\n data[\"externalId\"] = this.externalId !== undefined ? this.externalId : null;\r\n data[\"name\"] = this.name !== undefined ? this.name : null;\r\n data[\"price\"] = this.price !== undefined ? this.price : null;\r\n data[\"picturePath\"] = this.picturePath !== undefined ? this.picturePath : null;\r\n data[\"drawingPath\"] = this.drawingPath !== undefined ? this.drawingPath : null;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IInteriorProductMaterial {\r\n interiorMaterialId: number;\r\n externalId: string | null;\r\n name: string;\r\n price: number;\r\n picturePath: string | null;\r\n drawingPath: string | null;\r\n}\r\n\r\nexport class ExtraProductGroup implements IExtraProductGroup {\r\n id!: number;\r\n externalId!: string;\r\n name!: string;\r\n products!: ExtraProduct[];\r\n\r\n constructor(data?: IExtraProductGroup) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n if (!data) {\r\n this.products = [];\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.id = _data[\"id\"] !== undefined ? _data[\"id\"] : null;\r\n this.externalId = _data[\"externalId\"] !== undefined ? _data[\"externalId\"] : null;\r\n this.name = _data[\"name\"] !== undefined ? _data[\"name\"] : null;\r\n if (Array.isArray(_data[\"products\"])) {\r\n this.products = [] as any;\r\n for (let item of _data[\"products\"])\r\n this.products!.push(ExtraProduct.fromJS(item));\r\n }\r\n else {\r\n this.products = null;\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): ExtraProductGroup {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new ExtraProductGroup();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"id\"] = this.id !== undefined ? this.id : null;\r\n data[\"externalId\"] = this.externalId !== undefined ? this.externalId : null;\r\n data[\"name\"] = this.name !== undefined ? this.name : null;\r\n if (Array.isArray(this.products)) {\r\n data[\"products\"] = [];\r\n for (let item of this.products)\r\n data[\"products\"].push(item.toJSON());\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IExtraProductGroup {\r\n id: number;\r\n externalId: string;\r\n name: string;\r\n products: ExtraProduct[];\r\n}\r\n\r\nexport class ExtraProduct implements IExtraProduct {\r\n id!: number;\r\n externalId!: string;\r\n name!: string;\r\n price!: number;\r\n imageUrl!: string | null;\r\n materials!: InteriorProductMaterial[];\r\n\r\n constructor(data?: IExtraProduct) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n if (!data) {\r\n this.materials = [];\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.id = _data[\"id\"] !== undefined ? _data[\"id\"] : null;\r\n this.externalId = _data[\"externalId\"] !== undefined ? _data[\"externalId\"] : null;\r\n this.name = _data[\"name\"] !== undefined ? _data[\"name\"] : null;\r\n this.price = _data[\"price\"] !== undefined ? _data[\"price\"] : null;\r\n this.imageUrl = _data[\"imageUrl\"] !== undefined ? _data[\"imageUrl\"] : null;\r\n if (Array.isArray(_data[\"materials\"])) {\r\n this.materials = [] as any;\r\n for (let item of _data[\"materials\"])\r\n this.materials!.push(InteriorProductMaterial.fromJS(item));\r\n }\r\n else {\r\n this.materials = null;\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): ExtraProduct {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new ExtraProduct();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"id\"] = this.id !== undefined ? this.id : null;\r\n data[\"externalId\"] = this.externalId !== undefined ? this.externalId : null;\r\n data[\"name\"] = this.name !== undefined ? this.name : null;\r\n data[\"price\"] = this.price !== undefined ? this.price : null;\r\n data[\"imageUrl\"] = this.imageUrl !== undefined ? this.imageUrl : null;\r\n if (Array.isArray(this.materials)) {\r\n data[\"materials\"] = [];\r\n for (let item of this.materials)\r\n data[\"materials\"].push(item.toJSON());\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IExtraProduct {\r\n id: number;\r\n externalId: string;\r\n name: string;\r\n price: number;\r\n imageUrl: string | null;\r\n materials: InteriorProductMaterial[];\r\n}\r\n\r\nexport class InteriorMaterial implements IInteriorMaterial {\r\n id!: number;\r\n name!: string;\r\n sampleImageUrl!: string | null;\r\n\r\n constructor(data?: IInteriorMaterial) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.id = _data[\"id\"] !== undefined ? _data[\"id\"] : null;\r\n this.name = _data[\"name\"] !== undefined ? _data[\"name\"] : null;\r\n this.sampleImageUrl = _data[\"sampleImageUrl\"] !== undefined ? _data[\"sampleImageUrl\"] : null;\r\n }\r\n }\r\n\r\n static fromJS(data: any): InteriorMaterial {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new InteriorMaterial();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"id\"] = this.id !== undefined ? this.id : null;\r\n data[\"name\"] = this.name !== undefined ? this.name : null;\r\n data[\"sampleImageUrl\"] = this.sampleImageUrl !== undefined ? this.sampleImageUrl : null;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IInteriorMaterial {\r\n id: number;\r\n name: string;\r\n sampleImageUrl: string | null;\r\n}\r\n\r\nexport class SupportProduct implements ISupportProduct {\r\n id!: number;\r\n externalId!: string;\r\n name!: string;\r\n price!: number;\r\n supportedProducts!: string[];\r\n numItemsSupported!: number;\r\n\r\n constructor(data?: ISupportProduct) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n if (!data) {\r\n this.supportedProducts = [];\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.id = _data[\"id\"] !== undefined ? _data[\"id\"] : null;\r\n this.externalId = _data[\"externalId\"] !== undefined ? _data[\"externalId\"] : null;\r\n this.name = _data[\"name\"] !== undefined ? _data[\"name\"] : null;\r\n this.price = _data[\"price\"] !== undefined ? _data[\"price\"] : null;\r\n if (Array.isArray(_data[\"supportedProducts\"])) {\r\n this.supportedProducts = [] as any;\r\n for (let item of _data[\"supportedProducts\"])\r\n this.supportedProducts!.push(item);\r\n }\r\n else {\r\n this.supportedProducts = null;\r\n }\r\n this.numItemsSupported = _data[\"numItemsSupported\"] !== undefined ? _data[\"numItemsSupported\"] : null;\r\n }\r\n }\r\n\r\n static fromJS(data: any): SupportProduct {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new SupportProduct();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"id\"] = this.id !== undefined ? this.id : null;\r\n data[\"externalId\"] = this.externalId !== undefined ? this.externalId : null;\r\n data[\"name\"] = this.name !== undefined ? this.name : null;\r\n data[\"price\"] = this.price !== undefined ? this.price : null;\r\n if (Array.isArray(this.supportedProducts)) {\r\n data[\"supportedProducts\"] = [];\r\n for (let item of this.supportedProducts)\r\n data[\"supportedProducts\"].push(item);\r\n }\r\n data[\"numItemsSupported\"] = this.numItemsSupported !== undefined ? this.numItemsSupported : null;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ISupportProduct {\r\n id: number;\r\n externalId: string;\r\n name: string;\r\n price: number;\r\n supportedProducts: string[];\r\n numItemsSupported: number;\r\n}\r\n\r\nexport class CabinetListResponse implements ICabinetListResponse {\r\n userSolutions!: UserSolution[];\r\n\r\n constructor(data?: ICabinetListResponse) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n if (!data) {\r\n this.userSolutions = [];\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n if (Array.isArray(_data[\"userSolutions\"])) {\r\n this.userSolutions = [] as any;\r\n for (let item of _data[\"userSolutions\"])\r\n this.userSolutions!.push(UserSolution.fromJS(item));\r\n }\r\n else {\r\n this.userSolutions = null;\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): CabinetListResponse {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new CabinetListResponse();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n if (Array.isArray(this.userSolutions)) {\r\n data[\"userSolutions\"] = [];\r\n for (let item of this.userSolutions)\r\n data[\"userSolutions\"].push(item.toJSON());\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ICabinetListResponse {\r\n userSolutions: UserSolution[];\r\n}\r\n\r\nexport class UserSolution implements IUserSolution {\r\n id!: string;\r\n name!: string;\r\n createdAt!: Date;\r\n orderedAt!: Date | null;\r\n pdfPath!: string;\r\n orderNumber!: string | null;\r\n errorFlags!: ErrorFlag;\r\n\r\n constructor(data?: IUserSolution) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.id = _data[\"id\"] !== undefined ? _data[\"id\"] : null;\r\n this.name = _data[\"name\"] !== undefined ? _data[\"name\"] : null;\r\n this.createdAt = _data[\"createdAt\"] ? new Date(_data[\"createdAt\"].toString()) : null;\r\n this.orderedAt = _data[\"orderedAt\"] ? new Date(_data[\"orderedAt\"].toString()) : null;\r\n this.pdfPath = _data[\"pdfPath\"] !== undefined ? _data[\"pdfPath\"] : null;\r\n this.orderNumber = _data[\"orderNumber\"] !== undefined ? _data[\"orderNumber\"] : null;\r\n this.errorFlags = _data[\"errorFlags\"] !== undefined ? _data[\"errorFlags\"] : null;\r\n }\r\n }\r\n\r\n static fromJS(data: any): UserSolution {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new UserSolution();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"id\"] = this.id !== undefined ? this.id : null;\r\n data[\"name\"] = this.name !== undefined ? this.name : null;\r\n data[\"createdAt\"] = this.createdAt ? this.createdAt.toISOString() : null;\r\n data[\"orderedAt\"] = this.orderedAt ? this.orderedAt.toISOString() : null;\r\n data[\"pdfPath\"] = this.pdfPath !== undefined ? this.pdfPath : null;\r\n data[\"orderNumber\"] = this.orderNumber !== undefined ? this.orderNumber : null;\r\n data[\"errorFlags\"] = this.errorFlags !== undefined ? this.errorFlags : null;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IUserSolution {\r\n id: string;\r\n name: string;\r\n createdAt: Date;\r\n orderedAt: Date | null;\r\n pdfPath: string;\r\n orderNumber: string | null;\r\n errorFlags: ErrorFlag;\r\n}\r\n\r\nexport enum ErrorFlag {\r\n None = 0,\r\n Pullout = 1,\r\n WallMount = 2,\r\n ExceedsBounds = 4,\r\n}\r\n\r\nexport class SaveCabinetRequest implements ISaveCabinetRequest {\r\n cabinet!: Cabinet;\r\n name!: string;\r\n doorImageB64Png!: string | null;\r\n interiorImageB64Png!: string | null;\r\n errorFlags!: ErrorFlag;\r\n\r\n constructor(data?: ISaveCabinetRequest) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n if (!data) {\r\n this.cabinet = new Cabinet();\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.cabinet = _data[\"cabinet\"] ? Cabinet.fromJS(_data[\"cabinet\"]) : new Cabinet();\r\n this.name = _data[\"name\"] !== undefined ? _data[\"name\"] : null;\r\n this.doorImageB64Png = _data[\"doorImageB64Png\"] !== undefined ? _data[\"doorImageB64Png\"] : null;\r\n this.interiorImageB64Png = _data[\"interiorImageB64Png\"] !== undefined ? _data[\"interiorImageB64Png\"] : null;\r\n this.errorFlags = _data[\"errorFlags\"] !== undefined ? _data[\"errorFlags\"] : null;\r\n }\r\n }\r\n\r\n static fromJS(data: any): SaveCabinetRequest {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new SaveCabinetRequest();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"cabinet\"] = this.cabinet ? this.cabinet.toJSON() : null;\r\n data[\"name\"] = this.name !== undefined ? this.name : null;\r\n data[\"doorImageB64Png\"] = this.doorImageB64Png !== undefined ? this.doorImageB64Png : null;\r\n data[\"interiorImageB64Png\"] = this.interiorImageB64Png !== undefined ? this.interiorImageB64Png : null;\r\n data[\"errorFlags\"] = this.errorFlags !== undefined ? this.errorFlags : null;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ISaveCabinetRequest {\r\n cabinet: Cabinet;\r\n name: string;\r\n doorImageB64Png: string | null;\r\n interiorImageB64Png: string | null;\r\n errorFlags: ErrorFlag;\r\n}\r\n\r\nexport class GetCabinetResponse implements IGetCabinetResponse {\r\n cabinet!: Cabinet;\r\n\r\n constructor(data?: IGetCabinetResponse) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n if (!data) {\r\n this.cabinet = new Cabinet();\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.cabinet = _data[\"cabinet\"] ? Cabinet.fromJS(_data[\"cabinet\"]) : new Cabinet();\r\n }\r\n }\r\n\r\n static fromJS(data: any): GetCabinetResponse {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new GetCabinetResponse();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"cabinet\"] = this.cabinet ? this.cabinet.toJSON() : null;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IGetCabinetResponse {\r\n cabinet: Cabinet;\r\n}\r\n\r\nexport class CustomerSearchResponse implements ICustomerSearchResponse {\r\n searchResults!: UserSearchResult[];\r\n\r\n constructor(data?: ICustomerSearchResponse) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n if (!data) {\r\n this.searchResults = [];\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n if (Array.isArray(_data[\"searchResults\"])) {\r\n this.searchResults = [] as any;\r\n for (let item of _data[\"searchResults\"])\r\n this.searchResults!.push(UserSearchResult.fromJS(item));\r\n }\r\n else {\r\n this.searchResults = null;\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): CustomerSearchResponse {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new CustomerSearchResponse();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n if (Array.isArray(this.searchResults)) {\r\n data[\"searchResults\"] = [];\r\n for (let item of this.searchResults)\r\n data[\"searchResults\"].push(item.toJSON());\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ICustomerSearchResponse {\r\n searchResults: UserSearchResult[];\r\n}\r\n\r\nexport class UserSearchResult implements IUserSearchResult {\r\n userId!: string;\r\n username!: string;\r\n name!: string;\r\n phoneNumber!: string;\r\n emailAddress!: string;\r\n lastActive!: Date;\r\n solutions!: UserSolution[];\r\n\r\n constructor(data?: IUserSearchResult) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n if (!data) {\r\n this.solutions = [];\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.userId = _data[\"userId\"] !== undefined ? _data[\"userId\"] : null;\r\n this.username = _data[\"username\"] !== undefined ? _data[\"username\"] : null;\r\n this.name = _data[\"name\"] !== undefined ? _data[\"name\"] : null;\r\n this.phoneNumber = _data[\"phoneNumber\"] !== undefined ? _data[\"phoneNumber\"] : null;\r\n this.emailAddress = _data[\"emailAddress\"] !== undefined ? _data[\"emailAddress\"] : null;\r\n this.lastActive = _data[\"lastActive\"] ? new Date(_data[\"lastActive\"].toString()) : null;\r\n if (Array.isArray(_data[\"solutions\"])) {\r\n this.solutions = [] as any;\r\n for (let item of _data[\"solutions\"])\r\n this.solutions!.push(UserSolution.fromJS(item));\r\n }\r\n else {\r\n this.solutions = null;\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): UserSearchResult {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new UserSearchResult();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"userId\"] = this.userId !== undefined ? this.userId : null;\r\n data[\"username\"] = this.username !== undefined ? this.username : null;\r\n data[\"name\"] = this.name !== undefined ? this.name : null;\r\n data[\"phoneNumber\"] = this.phoneNumber !== undefined ? this.phoneNumber : null;\r\n data[\"emailAddress\"] = this.emailAddress !== undefined ? this.emailAddress : null;\r\n data[\"lastActive\"] = this.lastActive ? this.lastActive.toISOString() : null;\r\n if (Array.isArray(this.solutions)) {\r\n data[\"solutions\"] = [];\r\n for (let item of this.solutions)\r\n data[\"solutions\"].push(item.toJSON());\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IUserSearchResult {\r\n userId: string;\r\n username: string;\r\n name: string;\r\n phoneNumber: string;\r\n emailAddress: string;\r\n lastActive: Date;\r\n solutions: UserSolution[];\r\n}\r\n\r\nexport class OrderSolutionResponse implements IOrderSolutionResponse {\r\n orderNumber!: string;\r\n\r\n constructor(data?: IOrderSolutionResponse) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.orderNumber = _data[\"orderNumber\"] !== undefined ? _data[\"orderNumber\"] : null;\r\n }\r\n }\r\n\r\n static fromJS(data: any): OrderSolutionResponse {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new OrderSolutionResponse();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"orderNumber\"] = this.orderNumber !== undefined ? this.orderNumber : null;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IOrderSolutionResponse {\r\n orderNumber: string;\r\n}\r\n\r\nexport class OrderSolutionRequest implements IOrderSolutionRequest {\r\n customerAddress!: PostalAddress;\r\n deliveryType!: DeliveryType;\r\n\r\n constructor(data?: IOrderSolutionRequest) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n if (!data) {\r\n this.customerAddress = new PostalAddress();\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.customerAddress = _data[\"customerAddress\"] ? PostalAddress.fromJS(_data[\"customerAddress\"]) : new PostalAddress();\r\n this.deliveryType = _data[\"deliveryType\"] !== undefined ? _data[\"deliveryType\"] : null;\r\n }\r\n }\r\n\r\n static fromJS(data: any): OrderSolutionRequest {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new OrderSolutionRequest();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"customerAddress\"] = this.customerAddress ? this.customerAddress.toJSON() : null;\r\n data[\"deliveryType\"] = this.deliveryType !== undefined ? this.deliveryType : null;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IOrderSolutionRequest {\r\n customerAddress: PostalAddress;\r\n deliveryType: DeliveryType;\r\n}\r\n\r\nexport class PostalAddress implements IPostalAddress {\r\n name!: string;\r\n address1!: string;\r\n address2!: string;\r\n postalCode!: string;\r\n city!: string;\r\n country!: string;\r\n caseId!: string;\r\n phone!: string;\r\n\r\n constructor(data?: IPostalAddress) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.name = _data[\"name\"] !== undefined ? _data[\"name\"] : null;\r\n this.address1 = _data[\"address1\"] !== undefined ? _data[\"address1\"] : null;\r\n this.address2 = _data[\"address2\"] !== undefined ? _data[\"address2\"] : null;\r\n this.postalCode = _data[\"postalCode\"] !== undefined ? _data[\"postalCode\"] : null;\r\n this.city = _data[\"city\"] !== undefined ? _data[\"city\"] : null;\r\n this.country = _data[\"country\"] !== undefined ? _data[\"country\"] : null;\r\n this.caseId = _data[\"caseId\"] !== undefined ? _data[\"caseId\"] : null;\r\n this.phone = _data[\"phone\"] !== undefined ? _data[\"phone\"] : null;\r\n }\r\n }\r\n\r\n static fromJS(data: any): PostalAddress {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new PostalAddress();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"name\"] = this.name !== undefined ? this.name : null;\r\n data[\"address1\"] = this.address1 !== undefined ? this.address1 : null;\r\n data[\"address2\"] = this.address2 !== undefined ? this.address2 : null;\r\n data[\"postalCode\"] = this.postalCode !== undefined ? this.postalCode : null;\r\n data[\"city\"] = this.city !== undefined ? this.city : null;\r\n data[\"country\"] = this.country !== undefined ? this.country : null;\r\n data[\"caseId\"] = this.caseId !== undefined ? this.caseId : null;\r\n data[\"phone\"] = this.phone !== undefined ? this.phone : null;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IPostalAddress {\r\n name: string;\r\n address1: string;\r\n address2: string;\r\n postalCode: string;\r\n city: string;\r\n country: string;\r\n caseId: string;\r\n phone: string;\r\n}\r\n\r\nexport enum DeliveryType {\r\n Unused = 0,\r\n BillingAddress = 1,\r\n StoreAddress = 2,\r\n}\r\n\r\nexport class StartSyncResult implements IStartSyncResult {\r\n wasQueued!: boolean;\r\n\r\n constructor(data?: IStartSyncResult) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.wasQueued = _data[\"wasQueued\"] !== undefined ? _data[\"wasQueued\"] : null;\r\n }\r\n }\r\n\r\n static fromJS(data: any): StartSyncResult {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new StartSyncResult();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"wasQueued\"] = this.wasQueued !== undefined ? this.wasQueued : null;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IStartSyncResult {\r\n wasQueued: boolean;\r\n}\r\n\r\nexport class SyncStatus implements ISyncStatus {\r\n started!: Date | null;\r\n completed!: Date | null;\r\n\r\n constructor(data?: ISyncStatus) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.started = _data[\"started\"] ? new Date(_data[\"started\"].toString()) : null;\r\n this.completed = _data[\"completed\"] ? new Date(_data[\"completed\"].toString()) : null;\r\n }\r\n }\r\n\r\n static fromJS(data: any): SyncStatus {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new SyncStatus();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"started\"] = this.started ? this.started.toISOString() : null;\r\n data[\"completed\"] = this.completed ? this.completed.toISOString() : null;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ISyncStatus {\r\n started: Date | null;\r\n completed: Date | null;\r\n}\r\n\r\nexport class GetUsersResponse implements IGetUsersResponse {\r\n users!: User[];\r\n\r\n constructor(data?: IGetUsersResponse) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n if (!data) {\r\n this.users = [];\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n if (Array.isArray(_data[\"users\"])) {\r\n this.users = [] as any;\r\n for (let item of _data[\"users\"])\r\n this.users!.push(User.fromJS(item));\r\n }\r\n else {\r\n this.users = null;\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): GetUsersResponse {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new GetUsersResponse();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n if (Array.isArray(this.users)) {\r\n data[\"users\"] = [];\r\n for (let item of this.users)\r\n data[\"users\"].push(item.toJSON());\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IGetUsersResponse {\r\n users: User[];\r\n}\r\n\r\nexport class User implements IUser {\r\n id!: string;\r\n chainId!: number;\r\n storeId!: number | null;\r\n username!: string;\r\n name!: string;\r\n email!: string;\r\n userRole!: UserRole;\r\n\r\n constructor(data?: IUser) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.id = _data[\"id\"] !== undefined ? _data[\"id\"] : null;\r\n this.chainId = _data[\"chainId\"] !== undefined ? _data[\"chainId\"] : null;\r\n this.storeId = _data[\"storeId\"] !== undefined ? _data[\"storeId\"] : null;\r\n this.username = _data[\"username\"] !== undefined ? _data[\"username\"] : null;\r\n this.name = _data[\"name\"] !== undefined ? _data[\"name\"] : null;\r\n this.email = _data[\"email\"] !== undefined ? _data[\"email\"] : null;\r\n this.userRole = _data[\"userRole\"] !== undefined ? _data[\"userRole\"] : null;\r\n }\r\n }\r\n\r\n static fromJS(data: any): User {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new User();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"id\"] = this.id !== undefined ? this.id : null;\r\n data[\"chainId\"] = this.chainId !== undefined ? this.chainId : null;\r\n data[\"storeId\"] = this.storeId !== undefined ? this.storeId : null;\r\n data[\"username\"] = this.username !== undefined ? this.username : null;\r\n data[\"name\"] = this.name !== undefined ? this.name : null;\r\n data[\"email\"] = this.email !== undefined ? this.email : null;\r\n data[\"userRole\"] = this.userRole !== undefined ? this.userRole : null;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IUser {\r\n id: string;\r\n chainId: number;\r\n storeId: number | null;\r\n username: string;\r\n name: string;\r\n email: string;\r\n userRole: UserRole;\r\n}\r\n\r\nexport enum UserRole {\r\n StoreUser = 0,\r\n Admin = 1,\r\n Developer = 2,\r\n}\r\n\r\nexport class UserEditRequest implements IUserEditRequest {\r\n id!: string;\r\n username!: string;\r\n name!: string;\r\n email!: string;\r\n password!: string | null;\r\n userRole!: UserRole;\r\n storeId!: number | null;\r\n\r\n constructor(data?: IUserEditRequest) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.id = _data[\"id\"] !== undefined ? _data[\"id\"] : null;\r\n this.username = _data[\"username\"] !== undefined ? _data[\"username\"] : null;\r\n this.name = _data[\"name\"] !== undefined ? _data[\"name\"] : null;\r\n this.email = _data[\"email\"] !== undefined ? _data[\"email\"] : null;\r\n this.password = _data[\"password\"] !== undefined ? _data[\"password\"] : null;\r\n this.userRole = _data[\"userRole\"] !== undefined ? _data[\"userRole\"] : null;\r\n this.storeId = _data[\"storeId\"] !== undefined ? _data[\"storeId\"] : null;\r\n }\r\n }\r\n\r\n static fromJS(data: any): UserEditRequest {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new UserEditRequest();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"id\"] = this.id !== undefined ? this.id : null;\r\n data[\"username\"] = this.username !== undefined ? this.username : null;\r\n data[\"name\"] = this.name !== undefined ? this.name : null;\r\n data[\"email\"] = this.email !== undefined ? this.email : null;\r\n data[\"password\"] = this.password !== undefined ? this.password : null;\r\n data[\"userRole\"] = this.userRole !== undefined ? this.userRole : null;\r\n data[\"storeId\"] = this.storeId !== undefined ? this.storeId : null;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IUserEditRequest {\r\n id: string;\r\n username: string;\r\n name: string;\r\n email: string;\r\n password: string | null;\r\n userRole: UserRole;\r\n storeId: number | null;\r\n}\r\n\r\nexport class CreateUserResponse2 implements ICreateUserResponse2 {\r\n userId!: string;\r\n password!: string;\r\n\r\n constructor(data?: ICreateUserResponse2) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.userId = _data[\"userId\"] !== undefined ? _data[\"userId\"] : null;\r\n this.password = _data[\"password\"] !== undefined ? _data[\"password\"] : null;\r\n }\r\n }\r\n\r\n static fromJS(data: any): CreateUserResponse2 {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new CreateUserResponse2();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"userId\"] = this.userId !== undefined ? this.userId : null;\r\n data[\"password\"] = this.password !== undefined ? this.password : null;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ICreateUserResponse2 {\r\n userId: string;\r\n password: string;\r\n}\r\n\r\nexport class CreateUserRequest2 implements ICreateUserRequest2 {\r\n chainId!: number;\r\n username!: string;\r\n\r\n constructor(data?: ICreateUserRequest2) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.chainId = _data[\"chainId\"] !== undefined ? _data[\"chainId\"] : null;\r\n this.username = _data[\"username\"] !== undefined ? _data[\"username\"] : null;\r\n }\r\n }\r\n\r\n static fromJS(data: any): CreateUserRequest2 {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new CreateUserRequest2();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"chainId\"] = this.chainId !== undefined ? this.chainId : null;\r\n data[\"username\"] = this.username !== undefined ? this.username : null;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ICreateUserRequest2 {\r\n chainId: number;\r\n username: string;\r\n}\r\n\r\nexport class GetLanguagesResponse implements IGetLanguagesResponse {\r\n languages!: Language[];\r\n\r\n constructor(data?: IGetLanguagesResponse) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n if (!data) {\r\n this.languages = [];\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n if (Array.isArray(_data[\"languages\"])) {\r\n this.languages = [] as any;\r\n for (let item of _data[\"languages\"])\r\n this.languages!.push(Language.fromJS(item));\r\n }\r\n else {\r\n this.languages = null;\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): GetLanguagesResponse {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new GetLanguagesResponse();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n if (Array.isArray(this.languages)) {\r\n data[\"languages\"] = [];\r\n for (let item of this.languages)\r\n data[\"languages\"].push(item.toJSON());\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IGetLanguagesResponse {\r\n languages: Language[];\r\n}\r\n\r\nexport class Language implements ILanguage {\r\n id!: number;\r\n name!: string;\r\n translations!: Translation[];\r\n\r\n constructor(data?: ILanguage) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n if (!data) {\r\n this.translations = [];\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.id = _data[\"id\"] !== undefined ? _data[\"id\"] : null;\r\n this.name = _data[\"name\"] !== undefined ? _data[\"name\"] : null;\r\n if (Array.isArray(_data[\"translations\"])) {\r\n this.translations = [] as any;\r\n for (let item of _data[\"translations\"])\r\n this.translations!.push(Translation.fromJS(item));\r\n }\r\n else {\r\n this.translations = null;\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): Language {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new Language();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"id\"] = this.id !== undefined ? this.id : null;\r\n data[\"name\"] = this.name !== undefined ? this.name : null;\r\n if (Array.isArray(this.translations)) {\r\n data[\"translations\"] = [];\r\n for (let item of this.translations)\r\n data[\"translations\"].push(item.toJSON());\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ILanguage {\r\n id: number;\r\n name: string;\r\n translations: Translation[];\r\n}\r\n\r\nexport class Translation implements ITranslation {\r\n languageId!: number;\r\n key!: string;\r\n defaultValue!: string;\r\n value!: string | null;\r\n\r\n constructor(data?: ITranslation) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.languageId = _data[\"languageId\"] !== undefined ? _data[\"languageId\"] : null;\r\n this.key = _data[\"key\"] !== undefined ? _data[\"key\"] : null;\r\n this.defaultValue = _data[\"defaultValue\"] !== undefined ? _data[\"defaultValue\"] : null;\r\n this.value = _data[\"value\"] !== undefined ? _data[\"value\"] : null;\r\n }\r\n }\r\n\r\n static fromJS(data: any): Translation {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new Translation();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"languageId\"] = this.languageId !== undefined ? this.languageId : null;\r\n data[\"key\"] = this.key !== undefined ? this.key : null;\r\n data[\"defaultValue\"] = this.defaultValue !== undefined ? this.defaultValue : null;\r\n data[\"value\"] = this.value !== undefined ? this.value : null;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ITranslation {\r\n languageId: number;\r\n key: string;\r\n defaultValue: string;\r\n value: string | null;\r\n}\r\n\r\nexport class CreateKeysRequest implements ICreateKeysRequest {\r\n translationKeys!: TranslationKey[];\r\n\r\n constructor(data?: ICreateKeysRequest) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n if (!data) {\r\n this.translationKeys = [];\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n if (Array.isArray(_data[\"translationKeys\"])) {\r\n this.translationKeys = [] as any;\r\n for (let item of _data[\"translationKeys\"])\r\n this.translationKeys!.push(TranslationKey.fromJS(item));\r\n }\r\n else {\r\n this.translationKeys = null;\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): CreateKeysRequest {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new CreateKeysRequest();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n if (Array.isArray(this.translationKeys)) {\r\n data[\"translationKeys\"] = [];\r\n for (let item of this.translationKeys)\r\n data[\"translationKeys\"].push(item.toJSON());\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ICreateKeysRequest {\r\n translationKeys: TranslationKey[];\r\n}\r\n\r\nexport class TranslationKey implements ITranslationKey {\r\n key!: string;\r\n defaultValue!: string;\r\n\r\n constructor(data?: ITranslationKey) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.key = _data[\"key\"] !== undefined ? _data[\"key\"] : null;\r\n this.defaultValue = _data[\"defaultValue\"] !== undefined ? _data[\"defaultValue\"] : null;\r\n }\r\n }\r\n\r\n static fromJS(data: any): TranslationKey {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new TranslationKey();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"key\"] = this.key !== undefined ? this.key : null;\r\n data[\"defaultValue\"] = this.defaultValue !== undefined ? this.defaultValue : null;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ITranslationKey {\r\n key: string;\r\n defaultValue: string;\r\n}\r\n\r\nexport class SetTranslationsRequest implements ISetTranslationsRequest {\r\n translations!: Translation[];\r\n\r\n constructor(data?: ISetTranslationsRequest) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n if (!data) {\r\n this.translations = [];\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n if (Array.isArray(_data[\"translations\"])) {\r\n this.translations = [] as any;\r\n for (let item of _data[\"translations\"])\r\n this.translations!.push(Translation.fromJS(item));\r\n }\r\n else {\r\n this.translations = null;\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): SetTranslationsRequest {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new SetTranslationsRequest();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n if (Array.isArray(this.translations)) {\r\n data[\"translations\"] = [];\r\n for (let item of this.translations)\r\n data[\"translations\"].push(item.toJSON());\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ISetTranslationsRequest {\r\n translations: Translation[];\r\n}\r\n\r\nexport class CreateLanguageResponse implements ICreateLanguageResponse {\r\n languageId!: number;\r\n\r\n constructor(data?: ICreateLanguageResponse) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.languageId = _data[\"languageId\"] !== undefined ? _data[\"languageId\"] : null;\r\n }\r\n }\r\n\r\n static fromJS(data: any): CreateLanguageResponse {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new CreateLanguageResponse();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"languageId\"] = this.languageId !== undefined ? this.languageId : null;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ICreateLanguageResponse {\r\n languageId: number;\r\n}\r\n\r\nexport class CreateLanguageRequest implements ICreateLanguageRequest {\r\n name!: string;\r\n\r\n constructor(data?: ICreateLanguageRequest) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.name = _data[\"name\"] !== undefined ? _data[\"name\"] : null;\r\n }\r\n }\r\n\r\n static fromJS(data: any): CreateLanguageRequest {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new CreateLanguageRequest();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"name\"] = this.name !== undefined ? this.name : null;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ICreateLanguageRequest {\r\n name: string;\r\n}\r\n\r\nexport class GetProductGroupsResponse implements IGetProductGroupsResponse {\r\n productGroups!: ProductGroup[];\r\n\r\n constructor(data?: IGetProductGroupsResponse) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n if (!data) {\r\n this.productGroups = [];\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n if (Array.isArray(_data[\"productGroups\"])) {\r\n this.productGroups = [] as any;\r\n for (let item of _data[\"productGroups\"])\r\n this.productGroups!.push(ProductGroup.fromJS(item));\r\n }\r\n else {\r\n this.productGroups = null;\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): GetProductGroupsResponse {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new GetProductGroupsResponse();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n if (Array.isArray(this.productGroups)) {\r\n data[\"productGroups\"] = [];\r\n for (let item of this.productGroups)\r\n data[\"productGroups\"].push(item.toJSON());\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IGetProductGroupsResponse {\r\n productGroups: ProductGroup[];\r\n}\r\n\r\nexport class ProductGroup implements IProductGroup {\r\n id!: string;\r\n name!: string;\r\n productSubGroups!: ProductSubGroup[];\r\n\r\n constructor(data?: IProductGroup) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n if (!data) {\r\n this.productSubGroups = [];\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.id = _data[\"id\"] !== undefined ? _data[\"id\"] : null;\r\n this.name = _data[\"name\"] !== undefined ? _data[\"name\"] : null;\r\n if (Array.isArray(_data[\"productSubGroups\"])) {\r\n this.productSubGroups = [] as any;\r\n for (let item of _data[\"productSubGroups\"])\r\n this.productSubGroups!.push(ProductSubGroup.fromJS(item));\r\n }\r\n else {\r\n this.productSubGroups = null;\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): ProductGroup {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new ProductGroup();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"id\"] = this.id !== undefined ? this.id : null;\r\n data[\"name\"] = this.name !== undefined ? this.name : null;\r\n if (Array.isArray(this.productSubGroups)) {\r\n data[\"productSubGroups\"] = [];\r\n for (let item of this.productSubGroups)\r\n data[\"productSubGroups\"].push(item.toJSON());\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IProductGroup {\r\n id: string;\r\n name: string;\r\n productSubGroups: ProductSubGroup[];\r\n}\r\n\r\nexport class ProductSubGroup implements IProductSubGroup {\r\n id!: string;\r\n name!: string;\r\n products!: Product[];\r\n\r\n constructor(data?: IProductSubGroup) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n if (!data) {\r\n this.products = [];\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.id = _data[\"id\"] !== undefined ? _data[\"id\"] : null;\r\n this.name = _data[\"name\"] !== undefined ? _data[\"name\"] : null;\r\n if (Array.isArray(_data[\"products\"])) {\r\n this.products = [] as any;\r\n for (let item of _data[\"products\"])\r\n this.products!.push(Product.fromJS(item));\r\n }\r\n else {\r\n this.products = null;\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): ProductSubGroup {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new ProductSubGroup();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"id\"] = this.id !== undefined ? this.id : null;\r\n data[\"name\"] = this.name !== undefined ? this.name : null;\r\n if (Array.isArray(this.products)) {\r\n data[\"products\"] = [];\r\n for (let item of this.products)\r\n data[\"products\"].push(item.toJSON());\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IProductSubGroup {\r\n id: string;\r\n name: string;\r\n products: Product[];\r\n}\r\n\r\nexport class Product implements IProduct {\r\n id!: number;\r\n externalId!: string;\r\n defaultName!: string;\r\n snapOffset!: number;\r\n isInteriorActive!: boolean;\r\n isExtraActive!: boolean;\r\n materials!: InteriorProductMaterial2[];\r\n\r\n constructor(data?: IProduct) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n if (!data) {\r\n this.materials = [];\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.id = _data[\"id\"] !== undefined ? _data[\"id\"] : null;\r\n this.externalId = _data[\"externalId\"] !== undefined ? _data[\"externalId\"] : null;\r\n this.defaultName = _data[\"defaultName\"] !== undefined ? _data[\"defaultName\"] : null;\r\n this.snapOffset = _data[\"snapOffset\"] !== undefined ? _data[\"snapOffset\"] : null;\r\n this.isInteriorActive = _data[\"isInteriorActive\"] !== undefined ? _data[\"isInteriorActive\"] : null;\r\n this.isExtraActive = _data[\"isExtraActive\"] !== undefined ? _data[\"isExtraActive\"] : null;\r\n if (Array.isArray(_data[\"materials\"])) {\r\n this.materials = [] as any;\r\n for (let item of _data[\"materials\"])\r\n this.materials!.push(InteriorProductMaterial2.fromJS(item));\r\n }\r\n else {\r\n this.materials = null;\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): Product {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new Product();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"id\"] = this.id !== undefined ? this.id : null;\r\n data[\"externalId\"] = this.externalId !== undefined ? this.externalId : null;\r\n data[\"defaultName\"] = this.defaultName !== undefined ? this.defaultName : null;\r\n data[\"snapOffset\"] = this.snapOffset !== undefined ? this.snapOffset : null;\r\n data[\"isInteriorActive\"] = this.isInteriorActive !== undefined ? this.isInteriorActive : null;\r\n data[\"isExtraActive\"] = this.isExtraActive !== undefined ? this.isExtraActive : null;\r\n if (Array.isArray(this.materials)) {\r\n data[\"materials\"] = [];\r\n for (let item of this.materials)\r\n data[\"materials\"].push(item.toJSON());\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IProduct {\r\n id: number;\r\n externalId: string;\r\n defaultName: string;\r\n snapOffset: number;\r\n isInteriorActive: boolean;\r\n isExtraActive: boolean;\r\n materials: InteriorProductMaterial2[];\r\n}\r\n\r\nexport class InteriorProductMaterial2 implements IInteriorProductMaterial2 {\r\n globalProductId!: number;\r\n interiorMaterialId!: number;\r\n isActive!: boolean;\r\n externalId!: string | null;\r\n drawingImageUrl!: string | null;\r\n pictureImageUrl!: string | null;\r\n\r\n constructor(data?: IInteriorProductMaterial2) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.globalProductId = _data[\"globalProductId\"] !== undefined ? _data[\"globalProductId\"] : null;\r\n this.interiorMaterialId = _data[\"interiorMaterialId\"] !== undefined ? _data[\"interiorMaterialId\"] : null;\r\n this.isActive = _data[\"isActive\"] !== undefined ? _data[\"isActive\"] : null;\r\n this.externalId = _data[\"externalId\"] !== undefined ? _data[\"externalId\"] : null;\r\n this.drawingImageUrl = _data[\"drawingImageUrl\"] !== undefined ? _data[\"drawingImageUrl\"] : null;\r\n this.pictureImageUrl = _data[\"pictureImageUrl\"] !== undefined ? _data[\"pictureImageUrl\"] : null;\r\n }\r\n }\r\n\r\n static fromJS(data: any): InteriorProductMaterial2 {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new InteriorProductMaterial2();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"globalProductId\"] = this.globalProductId !== undefined ? this.globalProductId : null;\r\n data[\"interiorMaterialId\"] = this.interiorMaterialId !== undefined ? this.interiorMaterialId : null;\r\n data[\"isActive\"] = this.isActive !== undefined ? this.isActive : null;\r\n data[\"externalId\"] = this.externalId !== undefined ? this.externalId : null;\r\n data[\"drawingImageUrl\"] = this.drawingImageUrl !== undefined ? this.drawingImageUrl : null;\r\n data[\"pictureImageUrl\"] = this.pictureImageUrl !== undefined ? this.pictureImageUrl : null;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IInteriorProductMaterial2 {\r\n globalProductId: number;\r\n interiorMaterialId: number;\r\n isActive: boolean;\r\n externalId: string | null;\r\n drawingImageUrl: string | null;\r\n pictureImageUrl: string | null;\r\n}\r\n\r\nexport class EditProductRequest implements IEditProductRequest {\r\n snapOffset!: number;\r\n isInteriorActive!: boolean;\r\n isExtraActive!: boolean;\r\n materials!: InteriorProductMaterialUpdate[];\r\n\r\n constructor(data?: IEditProductRequest) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n if (!data) {\r\n this.materials = [];\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.snapOffset = _data[\"snapOffset\"] !== undefined ? _data[\"snapOffset\"] : null;\r\n this.isInteriorActive = _data[\"isInteriorActive\"] !== undefined ? _data[\"isInteriorActive\"] : null;\r\n this.isExtraActive = _data[\"isExtraActive\"] !== undefined ? _data[\"isExtraActive\"] : null;\r\n if (Array.isArray(_data[\"materials\"])) {\r\n this.materials = [] as any;\r\n for (let item of _data[\"materials\"])\r\n this.materials!.push(InteriorProductMaterialUpdate.fromJS(item));\r\n }\r\n else {\r\n this.materials = null;\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): EditProductRequest {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new EditProductRequest();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"snapOffset\"] = this.snapOffset !== undefined ? this.snapOffset : null;\r\n data[\"isInteriorActive\"] = this.isInteriorActive !== undefined ? this.isInteriorActive : null;\r\n data[\"isExtraActive\"] = this.isExtraActive !== undefined ? this.isExtraActive : null;\r\n if (Array.isArray(this.materials)) {\r\n data[\"materials\"] = [];\r\n for (let item of this.materials)\r\n data[\"materials\"].push(item.toJSON());\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IEditProductRequest {\r\n snapOffset: number;\r\n isInteriorActive: boolean;\r\n isExtraActive: boolean;\r\n materials: InteriorProductMaterialUpdate[];\r\n}\r\n\r\nexport class InteriorProductMaterialUpdate implements IInteriorProductMaterialUpdate {\r\n interiorMaterialId!: number;\r\n externalId!: string;\r\n\r\n constructor(data?: IInteriorProductMaterialUpdate) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.interiorMaterialId = _data[\"interiorMaterialId\"] !== undefined ? _data[\"interiorMaterialId\"] : null;\r\n this.externalId = _data[\"externalId\"] !== undefined ? _data[\"externalId\"] : null;\r\n }\r\n }\r\n\r\n static fromJS(data: any): InteriorProductMaterialUpdate {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new InteriorProductMaterialUpdate();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"interiorMaterialId\"] = this.interiorMaterialId !== undefined ? this.interiorMaterialId : null;\r\n data[\"externalId\"] = this.externalId !== undefined ? this.externalId : null;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IInteriorProductMaterialUpdate {\r\n interiorMaterialId: number;\r\n externalId: string;\r\n}\r\n\r\nexport class GetProductLinesResponse implements IGetProductLinesResponse {\r\n productLines!: ProductLine2[];\r\n\r\n constructor(data?: IGetProductLinesResponse) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n if (!data) {\r\n this.productLines = [];\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n if (Array.isArray(_data[\"productLines\"])) {\r\n this.productLines = [] as any;\r\n for (let item of _data[\"productLines\"])\r\n this.productLines!.push(ProductLine2.fromJS(item));\r\n }\r\n else {\r\n this.productLines = null;\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): GetProductLinesResponse {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new GetProductLinesResponse();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n if (Array.isArray(this.productLines)) {\r\n data[\"productLines\"] = [];\r\n for (let item of this.productLines)\r\n data[\"productLines\"].push(item.toJSON());\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IGetProductLinesResponse {\r\n productLines: ProductLine2[];\r\n}\r\n\r\nexport class ProductLine2 implements IProductLine2 {\r\n id!: number;\r\n defaultName!: string;\r\n imageUrl!: string | null;\r\n productLineLanguages!: ProductLineLanguage[];\r\n\r\n constructor(data?: IProductLine2) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n if (!data) {\r\n this.productLineLanguages = [];\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.id = _data[\"id\"] !== undefined ? _data[\"id\"] : null;\r\n this.defaultName = _data[\"defaultName\"] !== undefined ? _data[\"defaultName\"] : null;\r\n this.imageUrl = _data[\"imageUrl\"] !== undefined ? _data[\"imageUrl\"] : null;\r\n if (Array.isArray(_data[\"productLineLanguages\"])) {\r\n this.productLineLanguages = [] as any;\r\n for (let item of _data[\"productLineLanguages\"])\r\n this.productLineLanguages!.push(ProductLineLanguage.fromJS(item));\r\n }\r\n else {\r\n this.productLineLanguages = null;\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): ProductLine2 {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new ProductLine2();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"id\"] = this.id !== undefined ? this.id : null;\r\n data[\"defaultName\"] = this.defaultName !== undefined ? this.defaultName : null;\r\n data[\"imageUrl\"] = this.imageUrl !== undefined ? this.imageUrl : null;\r\n if (Array.isArray(this.productLineLanguages)) {\r\n data[\"productLineLanguages\"] = [];\r\n for (let item of this.productLineLanguages)\r\n data[\"productLineLanguages\"].push(item.toJSON());\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IProductLine2 {\r\n id: number;\r\n defaultName: string;\r\n imageUrl: string | null;\r\n productLineLanguages: ProductLineLanguage[];\r\n}\r\n\r\nexport class ProductLineLanguage implements IProductLineLanguage {\r\n languageId!: number;\r\n languageName!: string;\r\n name!: string;\r\n description!: string;\r\n\r\n constructor(data?: IProductLineLanguage) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.languageId = _data[\"languageId\"] !== undefined ? _data[\"languageId\"] : null;\r\n this.languageName = _data[\"languageName\"] !== undefined ? _data[\"languageName\"] : null;\r\n this.name = _data[\"name\"] !== undefined ? _data[\"name\"] : null;\r\n this.description = _data[\"description\"] !== undefined ? _data[\"description\"] : null;\r\n }\r\n }\r\n\r\n static fromJS(data: any): ProductLineLanguage {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new ProductLineLanguage();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"languageId\"] = this.languageId !== undefined ? this.languageId : null;\r\n data[\"languageName\"] = this.languageName !== undefined ? this.languageName : null;\r\n data[\"name\"] = this.name !== undefined ? this.name : null;\r\n data[\"description\"] = this.description !== undefined ? this.description : null;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IProductLineLanguage {\r\n languageId: number;\r\n languageName: string;\r\n name: string;\r\n description: string;\r\n}\r\n\r\nexport class CreateProductLineResponse implements ICreateProductLineResponse {\r\n id!: number;\r\n\r\n constructor(data?: ICreateProductLineResponse) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.id = _data[\"id\"] !== undefined ? _data[\"id\"] : null;\r\n }\r\n }\r\n\r\n static fromJS(data: any): CreateProductLineResponse {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new CreateProductLineResponse();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"id\"] = this.id !== undefined ? this.id : null;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ICreateProductLineResponse {\r\n id: number;\r\n}\r\n\r\nexport class CreateProductLineRequest implements ICreateProductLineRequest {\r\n\r\n constructor(data?: ICreateProductLineRequest) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n }\r\n\r\n static fromJS(data: any): CreateProductLineRequest {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new CreateProductLineRequest();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ICreateProductLineRequest {\r\n}\r\n\r\nexport class EditProductLineResponse implements IEditProductLineResponse {\r\n\r\n constructor(data?: IEditProductLineResponse) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n }\r\n\r\n static fromJS(data: any): EditProductLineResponse {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new EditProductLineResponse();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IEditProductLineResponse {\r\n}\r\n\r\nexport class EditProductLineRequest implements IEditProductLineRequest {\r\n productLineLanguages!: ProductLineLanguage[];\r\n\r\n constructor(data?: IEditProductLineRequest) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n if (!data) {\r\n this.productLineLanguages = [];\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n if (Array.isArray(_data[\"productLineLanguages\"])) {\r\n this.productLineLanguages = [] as any;\r\n for (let item of _data[\"productLineLanguages\"])\r\n this.productLineLanguages!.push(ProductLineLanguage.fromJS(item));\r\n }\r\n else {\r\n this.productLineLanguages = null;\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): EditProductLineRequest {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new EditProductLineRequest();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n if (Array.isArray(this.productLineLanguages)) {\r\n data[\"productLineLanguages\"] = [];\r\n for (let item of this.productLineLanguages)\r\n data[\"productLineLanguages\"].push(item.toJSON());\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IEditProductLineRequest {\r\n productLineLanguages: ProductLineLanguage[];\r\n}\r\n\r\nexport class SetProductLineImageResponse implements ISetProductLineImageResponse {\r\n\r\n constructor(data?: ISetProductLineImageResponse) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n }\r\n\r\n static fromJS(data: any): SetProductLineImageResponse {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new SetProductLineImageResponse();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ISetProductLineImageResponse {\r\n}\r\n\r\nexport class GetProductLineProductsResponse implements IGetProductLineProductsResponse {\r\n productLineProducts!: ProductLineProduct[];\r\n\r\n constructor(data?: IGetProductLineProductsResponse) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n if (!data) {\r\n this.productLineProducts = [];\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n if (Array.isArray(_data[\"productLineProducts\"])) {\r\n this.productLineProducts = [] as any;\r\n for (let item of _data[\"productLineProducts\"])\r\n this.productLineProducts!.push(ProductLineProduct.fromJS(item));\r\n }\r\n else {\r\n this.productLineProducts = null;\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): GetProductLineProductsResponse {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new GetProductLineProductsResponse();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n if (Array.isArray(this.productLineProducts)) {\r\n data[\"productLineProducts\"] = [];\r\n for (let item of this.productLineProducts)\r\n data[\"productLineProducts\"].push(item.toJSON());\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IGetProductLineProductsResponse {\r\n productLineProducts: ProductLineProduct[];\r\n}\r\n\r\nexport class ProductLineProduct implements IProductLineProduct {\r\n productId!: number;\r\n externalId!: string;\r\n name!: string;\r\n isActive!: boolean;\r\n\r\n constructor(data?: IProductLineProduct) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.productId = _data[\"productId\"] !== undefined ? _data[\"productId\"] : null;\r\n this.externalId = _data[\"externalId\"] !== undefined ? _data[\"externalId\"] : null;\r\n this.name = _data[\"name\"] !== undefined ? _data[\"name\"] : null;\r\n this.isActive = _data[\"isActive\"] !== undefined ? _data[\"isActive\"] : null;\r\n }\r\n }\r\n\r\n static fromJS(data: any): ProductLineProduct {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new ProductLineProduct();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"productId\"] = this.productId !== undefined ? this.productId : null;\r\n data[\"externalId\"] = this.externalId !== undefined ? this.externalId : null;\r\n data[\"name\"] = this.name !== undefined ? this.name : null;\r\n data[\"isActive\"] = this.isActive !== undefined ? this.isActive : null;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IProductLineProduct {\r\n productId: number;\r\n externalId: string;\r\n name: string;\r\n isActive: boolean;\r\n}\r\n\r\nexport class SetProductLineProductResponse implements ISetProductLineProductResponse {\r\n\r\n constructor(data?: ISetProductLineProductResponse) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n }\r\n\r\n static fromJS(data: any): SetProductLineProductResponse {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new SetProductLineProductResponse();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ISetProductLineProductResponse {\r\n}\r\n\r\nexport class SetProductLineProductRequest implements ISetProductLineProductRequest {\r\n isActive!: boolean;\r\n\r\n constructor(data?: ISetProductLineProductRequest) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.isActive = _data[\"isActive\"] !== undefined ? _data[\"isActive\"] : null;\r\n }\r\n }\r\n\r\n static fromJS(data: any): SetProductLineProductRequest {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new SetProductLineProductRequest();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"isActive\"] = this.isActive !== undefined ? this.isActive : null;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ISetProductLineProductRequest {\r\n isActive: boolean;\r\n}\r\n\r\nexport class MaterialListResponse implements IMaterialListResponse {\r\n materials!: MaterialItem[];\r\n\r\n constructor(data?: IMaterialListResponse) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n if (!data) {\r\n this.materials = [];\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n if (Array.isArray(_data[\"materials\"])) {\r\n this.materials = [] as any;\r\n for (let item of _data[\"materials\"])\r\n this.materials!.push(MaterialItem.fromJS(item));\r\n }\r\n else {\r\n this.materials = null;\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): MaterialListResponse {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new MaterialListResponse();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n if (Array.isArray(this.materials)) {\r\n data[\"materials\"] = [];\r\n for (let item of this.materials)\r\n data[\"materials\"].push(item.toJSON());\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IMaterialListResponse {\r\n materials: MaterialItem[];\r\n}\r\n\r\nexport class MaterialItem implements IMaterialItem {\r\n externalId!: string;\r\n name!: string;\r\n sampleImageUrl!: string | null;\r\n textureImageUrl!: string | null;\r\n\r\n constructor(data?: IMaterialItem) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.externalId = _data[\"externalId\"] !== undefined ? _data[\"externalId\"] : null;\r\n this.name = _data[\"name\"] !== undefined ? _data[\"name\"] : null;\r\n this.sampleImageUrl = _data[\"sampleImageUrl\"] !== undefined ? _data[\"sampleImageUrl\"] : null;\r\n this.textureImageUrl = _data[\"textureImageUrl\"] !== undefined ? _data[\"textureImageUrl\"] : null;\r\n }\r\n }\r\n\r\n static fromJS(data: any): MaterialItem {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new MaterialItem();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"externalId\"] = this.externalId !== undefined ? this.externalId : null;\r\n data[\"name\"] = this.name !== undefined ? this.name : null;\r\n data[\"sampleImageUrl\"] = this.sampleImageUrl !== undefined ? this.sampleImageUrl : null;\r\n data[\"textureImageUrl\"] = this.textureImageUrl !== undefined ? this.textureImageUrl : null;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IMaterialItem {\r\n externalId: string;\r\n name: string;\r\n sampleImageUrl: string | null;\r\n textureImageUrl: string | null;\r\n}\r\n\r\nexport class SetTextureImageResponse implements ISetTextureImageResponse {\r\n path!: string | null;\r\n\r\n constructor(data?: ISetTextureImageResponse) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.path = _data[\"path\"] !== undefined ? _data[\"path\"] : null;\r\n }\r\n }\r\n\r\n static fromJS(data: any): SetTextureImageResponse {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new SetTextureImageResponse();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"path\"] = this.path !== undefined ? this.path : null;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ISetTextureImageResponse {\r\n path: string | null;\r\n}\r\n\r\nexport class SetSampleImageResponse implements ISetSampleImageResponse {\r\n path!: string | null;\r\n\r\n constructor(data?: ISetSampleImageResponse) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.path = _data[\"path\"] !== undefined ? _data[\"path\"] : null;\r\n }\r\n }\r\n\r\n static fromJS(data: any): SetSampleImageResponse {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new SetSampleImageResponse();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"path\"] = this.path !== undefined ? this.path : null;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ISetSampleImageResponse {\r\n path: string | null;\r\n}\r\n\r\nexport class InteriorMaterialListResponse implements IInteriorMaterialListResponse {\r\n interiorMaterials!: InteriorMaterial2[];\r\n\r\n constructor(data?: IInteriorMaterialListResponse) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n if (!data) {\r\n this.interiorMaterials = [];\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n if (Array.isArray(_data[\"interiorMaterials\"])) {\r\n this.interiorMaterials = [] as any;\r\n for (let item of _data[\"interiorMaterials\"])\r\n this.interiorMaterials!.push(InteriorMaterial2.fromJS(item));\r\n }\r\n else {\r\n this.interiorMaterials = null;\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): InteriorMaterialListResponse {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new InteriorMaterialListResponse();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n if (Array.isArray(this.interiorMaterials)) {\r\n data[\"interiorMaterials\"] = [];\r\n for (let item of this.interiorMaterials)\r\n data[\"interiorMaterials\"].push(item.toJSON());\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IInteriorMaterialListResponse {\r\n interiorMaterials: InteriorMaterial2[];\r\n}\r\n\r\nexport class InteriorMaterial2 implements IInteriorMaterial2 {\r\n id!: number;\r\n defaultName!: string;\r\n translations!: InteriorMaterialTranslation[];\r\n sampleImageUrl!: string | null;\r\n\r\n constructor(data?: IInteriorMaterial2) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n if (!data) {\r\n this.translations = [];\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.id = _data[\"id\"] !== undefined ? _data[\"id\"] : null;\r\n this.defaultName = _data[\"defaultName\"] !== undefined ? _data[\"defaultName\"] : null;\r\n if (Array.isArray(_data[\"translations\"])) {\r\n this.translations = [] as any;\r\n for (let item of _data[\"translations\"])\r\n this.translations!.push(InteriorMaterialTranslation.fromJS(item));\r\n }\r\n else {\r\n this.translations = null;\r\n }\r\n this.sampleImageUrl = _data[\"sampleImageUrl\"] !== undefined ? _data[\"sampleImageUrl\"] : null;\r\n }\r\n }\r\n\r\n static fromJS(data: any): InteriorMaterial2 {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new InteriorMaterial2();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"id\"] = this.id !== undefined ? this.id : null;\r\n data[\"defaultName\"] = this.defaultName !== undefined ? this.defaultName : null;\r\n if (Array.isArray(this.translations)) {\r\n data[\"translations\"] = [];\r\n for (let item of this.translations)\r\n data[\"translations\"].push(item.toJSON());\r\n }\r\n data[\"sampleImageUrl\"] = this.sampleImageUrl !== undefined ? this.sampleImageUrl : null;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IInteriorMaterial2 {\r\n id: number;\r\n defaultName: string;\r\n translations: InteriorMaterialTranslation[];\r\n sampleImageUrl: string | null;\r\n}\r\n\r\nexport class InteriorMaterialTranslation implements IInteriorMaterialTranslation {\r\n languageId!: number;\r\n languageName!: string;\r\n name!: string;\r\n\r\n constructor(data?: IInteriorMaterialTranslation) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.languageId = _data[\"languageId\"] !== undefined ? _data[\"languageId\"] : null;\r\n this.languageName = _data[\"languageName\"] !== undefined ? _data[\"languageName\"] : null;\r\n this.name = _data[\"name\"] !== undefined ? _data[\"name\"] : null;\r\n }\r\n }\r\n\r\n static fromJS(data: any): InteriorMaterialTranslation {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new InteriorMaterialTranslation();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"languageId\"] = this.languageId !== undefined ? this.languageId : null;\r\n data[\"languageName\"] = this.languageName !== undefined ? this.languageName : null;\r\n data[\"name\"] = this.name !== undefined ? this.name : null;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IInteriorMaterialTranslation {\r\n languageId: number;\r\n languageName: string;\r\n name: string;\r\n}\r\n\r\nexport class SetInteriorMaterialDetailsRequest implements ISetInteriorMaterialDetailsRequest {\r\n translations!: InteriorMaterialTranslation[];\r\n\r\n constructor(data?: ISetInteriorMaterialDetailsRequest) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n if (!data) {\r\n this.translations = [];\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n if (Array.isArray(_data[\"translations\"])) {\r\n this.translations = [] as any;\r\n for (let item of _data[\"translations\"])\r\n this.translations!.push(InteriorMaterialTranslation.fromJS(item));\r\n }\r\n else {\r\n this.translations = null;\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): SetInteriorMaterialDetailsRequest {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new SetInteriorMaterialDetailsRequest();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n if (Array.isArray(this.translations)) {\r\n data[\"translations\"] = [];\r\n for (let item of this.translations)\r\n data[\"translations\"].push(item.toJSON());\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ISetInteriorMaterialDetailsRequest {\r\n translations: InteriorMaterialTranslation[];\r\n}\r\n\r\nexport class GetDoorsResponse implements IGetDoorsResponse {\r\n doors!: Door2[];\r\n\r\n constructor(data?: IGetDoorsResponse) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n if (!data) {\r\n this.doors = [];\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n if (Array.isArray(_data[\"doors\"])) {\r\n this.doors = [] as any;\r\n for (let item of _data[\"doors\"])\r\n this.doors!.push(Door2.fromJS(item));\r\n }\r\n else {\r\n this.doors = null;\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): GetDoorsResponse {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new GetDoorsResponse();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n if (Array.isArray(this.doors)) {\r\n data[\"doors\"] = [];\r\n for (let item of this.doors)\r\n data[\"doors\"].push(item.toJSON());\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IGetDoorsResponse {\r\n doors: Door2[];\r\n}\r\n\r\nexport class Door2 implements IDoor2 {\r\n id!: number;\r\n defaultName!: string;\r\n doorTranslations!: DoorTranslation[];\r\n imageUrl!: string | null;\r\n\r\n constructor(data?: IDoor2) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n if (!data) {\r\n this.doorTranslations = [];\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.id = _data[\"id\"] !== undefined ? _data[\"id\"] : null;\r\n this.defaultName = _data[\"defaultName\"] !== undefined ? _data[\"defaultName\"] : null;\r\n if (Array.isArray(_data[\"doorTranslations\"])) {\r\n this.doorTranslations = [] as any;\r\n for (let item of _data[\"doorTranslations\"])\r\n this.doorTranslations!.push(DoorTranslation.fromJS(item));\r\n }\r\n else {\r\n this.doorTranslations = null;\r\n }\r\n this.imageUrl = _data[\"imageUrl\"] !== undefined ? _data[\"imageUrl\"] : null;\r\n }\r\n }\r\n\r\n static fromJS(data: any): Door2 {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new Door2();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"id\"] = this.id !== undefined ? this.id : null;\r\n data[\"defaultName\"] = this.defaultName !== undefined ? this.defaultName : null;\r\n if (Array.isArray(this.doorTranslations)) {\r\n data[\"doorTranslations\"] = [];\r\n for (let item of this.doorTranslations)\r\n data[\"doorTranslations\"].push(item.toJSON());\r\n }\r\n data[\"imageUrl\"] = this.imageUrl !== undefined ? this.imageUrl : null;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IDoor2 {\r\n id: number;\r\n defaultName: string;\r\n doorTranslations: DoorTranslation[];\r\n imageUrl: string | null;\r\n}\r\n\r\nexport class DoorTranslation implements IDoorTranslation {\r\n languageId!: number;\r\n languageName!: string;\r\n name!: string;\r\n description!: string;\r\n\r\n constructor(data?: IDoorTranslation) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.languageId = _data[\"languageId\"] !== undefined ? _data[\"languageId\"] : null;\r\n this.languageName = _data[\"languageName\"] !== undefined ? _data[\"languageName\"] : null;\r\n this.name = _data[\"name\"] !== undefined ? _data[\"name\"] : null;\r\n this.description = _data[\"description\"] !== undefined ? _data[\"description\"] : null;\r\n }\r\n }\r\n\r\n static fromJS(data: any): DoorTranslation {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new DoorTranslation();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"languageId\"] = this.languageId !== undefined ? this.languageId : null;\r\n data[\"languageName\"] = this.languageName !== undefined ? this.languageName : null;\r\n data[\"name\"] = this.name !== undefined ? this.name : null;\r\n data[\"description\"] = this.description !== undefined ? this.description : null;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IDoorTranslation {\r\n languageId: number;\r\n languageName: string;\r\n name: string;\r\n description: string;\r\n}\r\n\r\nexport class EditDoorRequest implements IEditDoorRequest {\r\n translations!: DoorTranslation[];\r\n\r\n constructor(data?: IEditDoorRequest) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n if (!data) {\r\n this.translations = [];\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n if (Array.isArray(_data[\"translations\"])) {\r\n this.translations = [] as any;\r\n for (let item of _data[\"translations\"])\r\n this.translations!.push(DoorTranslation.fromJS(item));\r\n }\r\n else {\r\n this.translations = null;\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): EditDoorRequest {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new EditDoorRequest();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n if (Array.isArray(this.translations)) {\r\n data[\"translations\"] = [];\r\n for (let item of this.translations)\r\n data[\"translations\"].push(item.toJSON());\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IEditDoorRequest {\r\n translations: DoorTranslation[];\r\n}\r\n\r\nexport class GetChainsResponse implements IGetChainsResponse {\r\n chains!: Chain[];\r\n\r\n constructor(data?: IGetChainsResponse) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n if (!data) {\r\n this.chains = [];\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n if (Array.isArray(_data[\"chains\"])) {\r\n this.chains = [] as any;\r\n for (let item of _data[\"chains\"])\r\n this.chains!.push(Chain.fromJS(item));\r\n }\r\n else {\r\n this.chains = null;\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): GetChainsResponse {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new GetChainsResponse();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n if (Array.isArray(this.chains)) {\r\n data[\"chains\"] = [];\r\n for (let item of this.chains)\r\n data[\"chains\"].push(item.toJSON());\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IGetChainsResponse {\r\n chains: Chain[];\r\n}\r\n\r\nexport class Chain implements IChain {\r\n id!: number;\r\n name!: string;\r\n logoUrl!: string | null;\r\n cssUrl!: string | null;\r\n vatRate!: number;\r\n productRailTop!: string;\r\n productRailBottom!: string;\r\n productShippingFee!: string;\r\n languageId!: number;\r\n hostNames!: HostName[];\r\n\r\n constructor(data?: IChain) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n if (!data) {\r\n this.hostNames = [];\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.id = _data[\"id\"] !== undefined ? _data[\"id\"] : null;\r\n this.name = _data[\"name\"] !== undefined ? _data[\"name\"] : null;\r\n this.logoUrl = _data[\"logoUrl\"] !== undefined ? _data[\"logoUrl\"] : null;\r\n this.cssUrl = _data[\"cssUrl\"] !== undefined ? _data[\"cssUrl\"] : null;\r\n this.vatRate = _data[\"vatRate\"] !== undefined ? _data[\"vatRate\"] : null;\r\n this.productRailTop = _data[\"productRailTop\"] !== undefined ? _data[\"productRailTop\"] : null;\r\n this.productRailBottom = _data[\"productRailBottom\"] !== undefined ? _data[\"productRailBottom\"] : null;\r\n this.productShippingFee = _data[\"productShippingFee\"] !== undefined ? _data[\"productShippingFee\"] : null;\r\n this.languageId = _data[\"languageId\"] !== undefined ? _data[\"languageId\"] : null;\r\n if (Array.isArray(_data[\"hostNames\"])) {\r\n this.hostNames = [] as any;\r\n for (let item of _data[\"hostNames\"])\r\n this.hostNames!.push(HostName.fromJS(item));\r\n }\r\n else {\r\n this.hostNames = null;\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): Chain {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new Chain();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"id\"] = this.id !== undefined ? this.id : null;\r\n data[\"name\"] = this.name !== undefined ? this.name : null;\r\n data[\"logoUrl\"] = this.logoUrl !== undefined ? this.logoUrl : null;\r\n data[\"cssUrl\"] = this.cssUrl !== undefined ? this.cssUrl : null;\r\n data[\"vatRate\"] = this.vatRate !== undefined ? this.vatRate : null;\r\n data[\"productRailTop\"] = this.productRailTop !== undefined ? this.productRailTop : null;\r\n data[\"productRailBottom\"] = this.productRailBottom !== undefined ? this.productRailBottom : null;\r\n data[\"productShippingFee\"] = this.productShippingFee !== undefined ? this.productShippingFee : null;\r\n data[\"languageId\"] = this.languageId !== undefined ? this.languageId : null;\r\n if (Array.isArray(this.hostNames)) {\r\n data[\"hostNames\"] = [];\r\n for (let item of this.hostNames)\r\n data[\"hostNames\"].push(item.toJSON());\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IChain {\r\n id: number;\r\n name: string;\r\n logoUrl: string | null;\r\n cssUrl: string | null;\r\n vatRate: number;\r\n productRailTop: string;\r\n productRailBottom: string;\r\n productShippingFee: string;\r\n languageId: number;\r\n hostNames: HostName[];\r\n}\r\n\r\nexport class HostName implements IHostName {\r\n id!: number;\r\n host!: string;\r\n\r\n constructor(data?: IHostName) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.id = _data[\"id\"] !== undefined ? _data[\"id\"] : null;\r\n this.host = _data[\"host\"] !== undefined ? _data[\"host\"] : null;\r\n }\r\n }\r\n\r\n static fromJS(data: any): HostName {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new HostName();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"id\"] = this.id !== undefined ? this.id : null;\r\n data[\"host\"] = this.host !== undefined ? this.host : null;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IHostName {\r\n id: number;\r\n host: string;\r\n}\r\n\r\nexport class SetChainDetailsRequest implements ISetChainDetailsRequest {\r\n vatRate!: number;\r\n productRailTopExternalId!: string;\r\n productRailBottomExternalId!: string;\r\n productShippingFeeExternalId!: string;\r\n languageId!: number;\r\n\r\n constructor(data?: ISetChainDetailsRequest) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.vatRate = _data[\"vatRate\"] !== undefined ? _data[\"vatRate\"] : null;\r\n this.productRailTopExternalId = _data[\"productRailTopExternalId\"] !== undefined ? _data[\"productRailTopExternalId\"] : null;\r\n this.productRailBottomExternalId = _data[\"productRailBottomExternalId\"] !== undefined ? _data[\"productRailBottomExternalId\"] : null;\r\n this.productShippingFeeExternalId = _data[\"productShippingFeeExternalId\"] !== undefined ? _data[\"productShippingFeeExternalId\"] : null;\r\n this.languageId = _data[\"languageId\"] !== undefined ? _data[\"languageId\"] : null;\r\n }\r\n }\r\n\r\n static fromJS(data: any): SetChainDetailsRequest {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new SetChainDetailsRequest();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"vatRate\"] = this.vatRate !== undefined ? this.vatRate : null;\r\n data[\"productRailTopExternalId\"] = this.productRailTopExternalId !== undefined ? this.productRailTopExternalId : null;\r\n data[\"productRailBottomExternalId\"] = this.productRailBottomExternalId !== undefined ? this.productRailBottomExternalId : null;\r\n data[\"productShippingFeeExternalId\"] = this.productShippingFeeExternalId !== undefined ? this.productShippingFeeExternalId : null;\r\n data[\"languageId\"] = this.languageId !== undefined ? this.languageId : null;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ISetChainDetailsRequest {\r\n vatRate: number;\r\n productRailTopExternalId: string;\r\n productRailBottomExternalId: string;\r\n productShippingFeeExternalId: string;\r\n languageId: number;\r\n}\r\n\r\nexport class CreateHostNameResponse implements ICreateHostNameResponse {\r\n hostName!: HostName;\r\n\r\n constructor(data?: ICreateHostNameResponse) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n if (!data) {\r\n this.hostName = new HostName();\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.hostName = _data[\"hostName\"] ? HostName.fromJS(_data[\"hostName\"]) : new HostName();\r\n }\r\n }\r\n\r\n static fromJS(data: any): CreateHostNameResponse {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new CreateHostNameResponse();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"hostName\"] = this.hostName ? this.hostName.toJSON() : null;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ICreateHostNameResponse {\r\n hostName: HostName;\r\n}\r\n\r\nexport class CreateHostNameRequest implements ICreateHostNameRequest {\r\n chainId!: number;\r\n host!: string;\r\n\r\n constructor(data?: ICreateHostNameRequest) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.chainId = _data[\"chainId\"] !== undefined ? _data[\"chainId\"] : null;\r\n this.host = _data[\"host\"] !== undefined ? _data[\"host\"] : null;\r\n }\r\n }\r\n\r\n static fromJS(data: any): CreateHostNameRequest {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new CreateHostNameRequest();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"chainId\"] = this.chainId !== undefined ? this.chainId : null;\r\n data[\"host\"] = this.host !== undefined ? this.host : null;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ICreateHostNameRequest {\r\n chainId: number;\r\n host: string;\r\n}\r\n\r\nexport class GetChainProductLinesResponse implements IGetChainProductLinesResponse {\r\n chainProductLines!: ChainProductLine[];\r\n\r\n constructor(data?: IGetChainProductLinesResponse) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n if (!data) {\r\n this.chainProductLines = [];\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n if (Array.isArray(_data[\"chainProductLines\"])) {\r\n this.chainProductLines = [] as any;\r\n for (let item of _data[\"chainProductLines\"])\r\n this.chainProductLines!.push(ChainProductLine.fromJS(item));\r\n }\r\n else {\r\n this.chainProductLines = null;\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): GetChainProductLinesResponse {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new GetChainProductLinesResponse();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n if (Array.isArray(this.chainProductLines)) {\r\n data[\"chainProductLines\"] = [];\r\n for (let item of this.chainProductLines)\r\n data[\"chainProductLines\"].push(item.toJSON());\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IGetChainProductLinesResponse {\r\n chainProductLines: ChainProductLine[];\r\n}\r\n\r\nexport class ChainProductLine implements IChainProductLine {\r\n productLineId!: number;\r\n chainId!: number;\r\n defaultName!: string;\r\n customName!: string | null;\r\n isActive!: boolean;\r\n\r\n constructor(data?: IChainProductLine) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.productLineId = _data[\"productLineId\"] !== undefined ? _data[\"productLineId\"] : null;\r\n this.chainId = _data[\"chainId\"] !== undefined ? _data[\"chainId\"] : null;\r\n this.defaultName = _data[\"defaultName\"] !== undefined ? _data[\"defaultName\"] : null;\r\n this.customName = _data[\"customName\"] !== undefined ? _data[\"customName\"] : null;\r\n this.isActive = _data[\"isActive\"] !== undefined ? _data[\"isActive\"] : null;\r\n }\r\n }\r\n\r\n static fromJS(data: any): ChainProductLine {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new ChainProductLine();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"productLineId\"] = this.productLineId !== undefined ? this.productLineId : null;\r\n data[\"chainId\"] = this.chainId !== undefined ? this.chainId : null;\r\n data[\"defaultName\"] = this.defaultName !== undefined ? this.defaultName : null;\r\n data[\"customName\"] = this.customName !== undefined ? this.customName : null;\r\n data[\"isActive\"] = this.isActive !== undefined ? this.isActive : null;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IChainProductLine {\r\n productLineId: number;\r\n chainId: number;\r\n defaultName: string;\r\n customName: string | null;\r\n isActive: boolean;\r\n}\r\n\r\nexport class SetChainProductLineResponse implements ISetChainProductLineResponse {\r\n\r\n constructor(data?: ISetChainProductLineResponse) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n }\r\n\r\n static fromJS(data: any): SetChainProductLineResponse {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new SetChainProductLineResponse();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ISetChainProductLineResponse {\r\n}\r\n\r\nexport class SetChainProductLineRequest implements ISetChainProductLineRequest {\r\n isActive!: boolean;\r\n name!: string | null;\r\n\r\n constructor(data?: ISetChainProductLineRequest) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.isActive = _data[\"isActive\"] !== undefined ? _data[\"isActive\"] : null;\r\n this.name = _data[\"name\"] !== undefined ? _data[\"name\"] : null;\r\n }\r\n }\r\n\r\n static fromJS(data: any): SetChainProductLineRequest {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new SetChainProductLineRequest();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"isActive\"] = this.isActive !== undefined ? this.isActive : null;\r\n data[\"name\"] = this.name !== undefined ? this.name : null;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ISetChainProductLineRequest {\r\n isActive: boolean;\r\n name: string | null;\r\n}\r\n\r\nexport class GetStoresResponse implements IGetStoresResponse {\r\n stores!: Store[];\r\n\r\n constructor(data?: IGetStoresResponse) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n if (!data) {\r\n this.stores = [];\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n if (Array.isArray(_data[\"stores\"])) {\r\n this.stores = [] as any;\r\n for (let item of _data[\"stores\"])\r\n this.stores!.push(Store.fromJS(item));\r\n }\r\n else {\r\n this.stores = null;\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): GetStoresResponse {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new GetStoresResponse();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n if (Array.isArray(this.stores)) {\r\n data[\"stores\"] = [];\r\n for (let item of this.stores)\r\n data[\"stores\"].push(item.toJSON());\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IGetStoresResponse {\r\n stores: Store[];\r\n}\r\n\r\nexport class Store implements IStore {\r\n id!: number;\r\n externalId!: string;\r\n name!: string;\r\n\r\n constructor(data?: IStore) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.id = _data[\"id\"] !== undefined ? _data[\"id\"] : null;\r\n this.externalId = _data[\"externalId\"] !== undefined ? _data[\"externalId\"] : null;\r\n this.name = _data[\"name\"] !== undefined ? _data[\"name\"] : null;\r\n }\r\n }\r\n\r\n static fromJS(data: any): Store {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new Store();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"id\"] = this.id !== undefined ? this.id : null;\r\n data[\"externalId\"] = this.externalId !== undefined ? this.externalId : null;\r\n data[\"name\"] = this.name !== undefined ? this.name : null;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IStore {\r\n id: number;\r\n externalId: string;\r\n name: string;\r\n}\r\n\r\nexport interface FileParameter {\r\n data: any;\r\n fileName: string;\r\n}\r\n\r\nexport class ApiException extends Error {\r\n message: string;\r\n status: number;\r\n response: string;\r\n headers: { [key: string]: any; };\r\n result: any;\r\n\r\n constructor(message: string, status: number, response: string, headers: { [key: string]: any; }, result: any) {\r\n super();\r\n\r\n this.message = message;\r\n this.status = status;\r\n this.response = response;\r\n this.headers = headers;\r\n this.result = result;\r\n }\r\n\r\n protected isApiException = true;\r\n\r\n static isApiException(obj: any): obj is ApiException {\r\n return obj.isApiException === true;\r\n }\r\n}\r\n\r\nfunction throwException(message: string, status: number, response: string, headers: { [key: string]: any; }, result?: any): any {\r\n throw new ApiException(message, status, response, headers, result);\r\n}","import React, { ChangeEvent } from \"react\";\r\nimport { ILoginService } from \"../../services/LoginService\";\r\nimport \"./login.scss\"\r\n\r\ninterface Props {\r\n onLoginSuccess(): void;\r\n loginService: ILoginService;\r\n}\r\ninterface State {\r\n username: string;\r\n password: string;\r\n isLoginEnabled: boolean;\r\n}\r\ntype KeysWithValsOfType = keyof { [P in keyof T as T[P] extends V ? P : never]: P };\r\n\r\nexport default class Login extends React.Component{\r\n\r\n constructor(props: Props) {\r\n super(props);\r\n this.state = {\r\n username: \"\",\r\n password: \"\",\r\n isLoginEnabled: false\r\n };\r\n }\r\n\r\n private handleLogin = async (evt: React.FormEvent) => {\r\n evt.preventDefault();\r\n const success = await this.props.loginService.login(this.state.username, this.state.password);\r\n if (success) {\r\n this.props.onLoginSuccess();\r\n }\r\n\r\n }\r\n\r\n\r\n private handleChange(fieldName: KeysWithValsOfType) {\r\n return (evt: ChangeEvent) => {\r\n this.setState(oldState => {\r\n let state = {\r\n ...oldState,\r\n [fieldName]: evt.target.value,\r\n };\r\n state.isLoginEnabled = !!state.password && !!state.username;\r\n return state;\r\n });\r\n }\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n
\r\n
\r\n \"Logo\"\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 {History} from 'history'\r\nimport { CabinetService, ChangeResult } from './CabinetService';\r\nimport { Translatable } from './TranslationService';\r\nimport { ErrorFlag, UserRight } from './WebApiClient';\r\n\r\nexport interface NavPage extends Translatable {\r\n readonly url: string;\r\n readonly translationKey: string;\r\n readonly translationDefault: string;\r\n readonly requiredRights?: UserRight[];\r\n //TODO more NavPages\r\n}\r\nexport interface EditorNavPage extends NavPage {\r\n /**1-based index */\r\n readonly editorIndex: number;\r\n hasErrors(cabinetService: CabinetService): boolean;\r\n}\r\n\r\nexport module NavPage {\r\n\r\n export const ProductLine: EditorNavPage = {\r\n editorIndex: 1,\r\n url: \"/\",\r\n translationKey: \"route productline\",\r\n translationDefault: \"Produktlinje\",\r\n hasErrors: (_) => false,\r\n }\r\n\r\n export const Dimensions: EditorNavPage = {\r\n editorIndex: 2,\r\n url: \"/dimensions\",\r\n translationKey: \"route dimensions\",\r\n translationDefault: \"Dimensioner\",\r\n hasErrors: (_) => false,\r\n }\r\n\r\n export const Corpus: EditorNavPage = {\r\n editorIndex: 3000,\r\n url: \"/corpus\",\r\n translationKey: \"route corpus\",\r\n translationDefault: \"Korpus\",\r\n hasErrors: (_) => false,\r\n }\r\n\r\n export const DoorTypes: EditorNavPage = {\r\n editorIndex: 3,\r\n url: \"/doorTypes\",\r\n translationKey: \"route doortypes\",\r\n translationDefault: \"Dørtype\",\r\n hasErrors: (_) => false,\r\n };\r\n\r\n export const Doors: EditorNavPage = {\r\n editorIndex: 4,\r\n url: \"/doors\",\r\n translationKey: \"route doors\",\r\n translationDefault: \"Døre\",\r\n hasErrors: (_) => false,\r\n };\r\n\r\n export const Interior: EditorNavPage = {\r\n editorIndex: 5,\r\n url: \"/interior\",\r\n translationKey: \"route interior\",\r\n translationDefault: \"Interiør\",\r\n hasErrors: (cabinetService) => cabinetService.getErrorFlags() !== ErrorFlag.None,\r\n };\r\n\r\n export const ExtraProducts: EditorNavPage = {\r\n editorIndex: 6,\r\n url: \"/extraProducts\",\r\n translationKey: \"route extraProducts\",\r\n translationDefault: \"Løssalg\",\r\n hasErrors: (_) => false,\r\n }\r\n\r\n export const PieceList: EditorNavPage = {\r\n editorIndex: 7,\r\n url: \"/piecelist\",\r\n translationKey: \"route piecelist\",\r\n translationDefault: \"Stykliste\",\r\n hasErrors: (_) => false,\r\n }\r\n\r\n \r\n\r\n export module Admin {\r\n export const Material: NavPage = {\r\n url: \"/admin/materials\",\r\n translationKey: \"route admin materials\",\r\n translationDefault: \"Materialer\",\r\n requiredRights: [UserRight.EditMaterials]\r\n };\r\n\r\n export const Chain: NavPage = {\r\n url: \"/admin/chains\",\r\n translationKey: \"route admin chains\",\r\n translationDefault: \"Brands\",\r\n requiredRights: [UserRight.EditChains]\r\n }\r\n\r\n export const ProductLine: NavPage = {\r\n url: \"/admin/productLines\",\r\n translationKey: \"route admin productLines\",\r\n translationDefault: \"Produktlinjer\",\r\n requiredRights: [UserRight.EditProductLines]\r\n }\r\n\r\n export const Product: NavPage = {\r\n url: \"/admin/products\",\r\n translationKey: \"route admin products\",\r\n translationDefault: \"Produkter\",\r\n requiredRights: [UserRight.EditProducts]\r\n }\r\n\r\n export const InteriorMaterial: NavPage = {\r\n url: \"/admin/interiorMaterials\",\r\n translationKey: \"route admin interior materials\",\r\n translationDefault: \"Interiør-materialer\",\r\n requiredRights: [UserRight.EditMaterials],\r\n }\r\n\r\n export const Door: NavPage = {\r\n url: \"/admin/doors\",\r\n translationKey: \"route admin doors\",\r\n translationDefault: \"Døre\",\r\n requiredRights: [UserRight.EditProducts]\r\n }\r\n\r\n export const Translation: NavPage = {\r\n url: \"/admin/translations\",\r\n translationKey: \"route admin translations\",\r\n translationDefault: \"Oversættelser\",\r\n requiredRights: [UserRight.EditTranslations]\r\n }\r\n\r\n export const Misc: NavPage = {\r\n url: \"/admin/misc\",\r\n translationKey: \"route admin misc\",\r\n translationDefault: \"Diverse Admin\",\r\n requiredRights: [UserRight.StartSync],\r\n }\r\n\r\n export const Pages: NavPage[] = [\r\n Material,\r\n InteriorMaterial,\r\n Chain,\r\n ProductLine,\r\n Product,\r\n Door,\r\n Translation,\r\n\r\n Misc,\r\n ];\r\n }\r\n\r\n export module User {\r\n export const CabinetList: NavPage = {\r\n translationKey: \"route user solution list\",\r\n translationDefault: \"Gemte Løsninger\",\r\n url: \"/user/solutions\",\r\n requiredRights: [UserRight.LoadSolution]\r\n }\r\n\r\n export const UserSearch: NavPage = {\r\n translationKey: \"route user search\",\r\n translationDefault: \"Kundesøgning\",\r\n url: \"/user/search\",\r\n requiredRights: [UserRight.LoadChainSolution]\r\n }\r\n\r\n export const Pages: NavPage[] = [\r\n CabinetList,\r\n UserSearch,\r\n ];\r\n }\r\n\r\n export const EditorPages: EditorNavPage[] = [\r\n ProductLine,\r\n Dimensions,\r\n //Corpus,\r\n DoorTypes,\r\n Doors,\r\n Interior,\r\n ExtraProducts,\r\n PieceList,\r\n ];\r\n}\r\n\r\n\r\n\r\nexport interface INavService {\r\n/**\r\n * Returns the previous page in the flow, or undefined if there is no obvious previous page. Does not navigate.\r\n * @param current\r\n */\r\n prev(current: EditorNavPage): EditorNavPage | undefined;\r\n navigatePrev(current: EditorNavPage): void;\r\n navigatePrevAvailable(current: EditorNavPage): void;\r\n\r\n /**\r\n * Returns the next page in the flow, or undefined if there is no obvious next page. Does not navigate.\r\n * @param current\r\n */\r\n next(current: EditorNavPage): EditorNavPage | undefined;\r\n navigateNext(current: EditorNavPage, force?: true): void;\r\n navigateNextAvailable(current: EditorNavPage): void;\r\n\r\n canNavigateTo(page: NavPage | undefined): page is NavPage;\r\n\r\n navigate(page: NavPage, force?: true): Promise;\r\n\r\n getUrl(page: NavPage): string;\r\n}\r\n\r\nexport class NavService implements INavService {\r\n constructor(\r\n private readonly cabinetService: CabinetService,\r\n private readonly history?: History,\r\n ) {\r\n\r\n }\r\n navigatePrev(current: EditorNavPage): void{\r\n this.navigate(this.prev(current));\r\n }\r\n navigatePrevAvailable(current: EditorNavPage): void {\r\n this.navigate(this.prevAvailable(current));\r\n }\r\n navigateNext(current: EditorNavPage, force?: true): void {\r\n this.navigate(this.next(current), force);\r\n }\r\n\r\n navigateNextAvailable(current: EditorNavPage): void {\r\n this.navigate(this.nextAvailable(current));\r\n }\r\n\r\n prev(current: EditorNavPage): EditorNavPage | undefined {\r\n if (!current?.editorIndex)\r\n return;\r\n return NavPage.EditorPages[current.editorIndex - 2];\r\n }\r\n prevAvailable(current: EditorNavPage): EditorNavPage | undefined {\r\n let prev = this.prev(current);\r\n while (prev) {\r\n if (this.canNavigateTo(prev)) {\r\n return prev;\r\n }\r\n prev = this.prev(prev);\r\n }\r\n return undefined;\r\n }\r\n\r\n next(current: EditorNavPage): EditorNavPage | undefined {\r\n if (!current?.editorIndex)\r\n return;\r\n return NavPage.EditorPages[current.editorIndex ];\r\n }\r\n nextAvailable(current: EditorNavPage): EditorNavPage | undefined {\r\n let next = this.next(current);\r\n while (next) {\r\n if (this.canNavigateTo(next)) {\r\n return next;\r\n }\r\n next = this.next(next);\r\n }\r\n return undefined;\r\n }\r\n getUrl(page: NavPage): string {\r\n return page.url;\r\n }\r\n\r\n canNavigateTo(page: NavPage | undefined): page is NavPage {\r\n if (!page)\r\n return false;\r\n\r\n if (page === NavPage.ProductLine)\r\n return true;\r\n\r\n if (page === NavPage.PieceList)\r\n return true;\r\n\r\n if (page === NavPage.ExtraProducts)\r\n return true;\r\n\r\n if (NavPage.Admin.Pages.find(p => p === page))\r\n return true;\r\n\r\n if (NavPage.User.Pages.find(p => p === page))\r\n return true;\r\n\r\n\r\n if (this.cabinetService.cabinet.productLineId === null)\r\n return false;\r\n if (page === NavPage.Dimensions)\r\n return true;\r\n\r\n if (this.cabinetService.cabinet.position === null)\r\n return false;\r\n if (page === NavPage.Corpus)\r\n return true;\r\n\r\n if (this.cabinetService.cabinet.roof === null)\r\n return false;\r\n if (this.cabinetService.cabinet.bottom === null)\r\n return false;\r\n if (this.cabinetService.cabinet.sidePanel === null)\r\n return false;\r\n if (page === NavPage.DoorTypes)\r\n return true;\r\n\r\n if (page === NavPage.Interior)\r\n return true;\r\n\r\n if (page === NavPage.Doors)\r\n return true;\r\n\r\n return false;\r\n\r\n }\r\n\r\n async navigate(page: NavPage | undefined, force?:true): Promise {\r\n if (!force && !this.canNavigateTo(page))\r\n return { success: false };\r\n if (!page)\r\n return { success: false };\r\n if (page === NavPage.Dimensions) {\r\n const result = await this.cabinetService.initDimensions();\r\n if (!result.success)\r\n return result;\r\n }\r\n else if (page === NavPage.Doors) {\r\n const result = await this.cabinetService.initDoors();\r\n if (!result.success)\r\n return result;\r\n\r\n }\r\n this.history?.push(page.url);\r\n return { success: true };\r\n }\r\n\r\n \r\n}\r\n","\r\n\r\nexport enum GableType {\r\n None,\r\n Gable,\r\n SidePanel\r\n}\r\n","import { IVec2d, IVec3d } from \"./IChainInfo\";\r\n\r\nexport interface IObj {\r\n readonly position: T;\r\n readonly size: T;\r\n}\r\n\r\n\r\nexport interface IObj3d extends IObj {\r\n}\r\n\r\nexport interface IObj2d extends IObj {\r\n}\r\n\r\n\r\nexport function isInside(vec: IVec3d, obj: IObj3d): boolean;\r\nexport function isInside(vec: IVec2d, obj: IObj2d): boolean\r\nexport function isInside(vec: IVec2d, obj: IObj2d): boolean {\r\n if (vec.x < obj.position.x)\r\n return false;\r\n if (vec.x > obj.position.x + obj.size.x)\r\n return false;\r\n\r\n if (vec.y < obj.position.y)\r\n return false;\r\n if (vec.y > obj.position.y + obj.size.y)\r\n return false;\r\n\r\n if (isIVec3d(vec) && isObj3d(obj)) {\r\n if (vec.z < obj.position.z)\r\n return false;\r\n if (vec.z > obj.position.z + obj.size.z)\r\n return false;\r\n }\r\n return true;\r\n\r\n}\r\n\r\nexport function maxPos(obj: IObj3d): IVec3d;\r\nexport function maxPos(obj: IObj2d): IVec2d;\r\nexport function maxPos(obj: IObj3d | IObj2d) {\r\n return add(obj.position, obj.size);\r\n}\r\n\r\nexport function topFrontRight(obj: IObj3d): IVec3d {\r\n return add(obj.position, obj.size);\r\n}\r\n\r\nexport function topRight(obj: IObj2d): IVec2d {\r\n return add(obj.position, obj.size);\r\n}\r\n\r\nexport function middle(obj: IObj3d): IVec3d {\r\n return {\r\n x: obj.position.x + (obj.size.x / 2),\r\n y: obj.position.y + (obj.size.y / 2),\r\n z: obj.position.z + (obj.size.z / 2)\r\n };\r\n}\r\n\r\nexport function add(a: IVec3d, b: IVec3d): IVec3d;\r\nexport function add(a: IVec2d, b: IVec2d): IVec2d;\r\nexport function add(a: IVec2d | IVec3d, b: IVec2d | IVec3d): IVec2d | IVec3d {\r\n if (isIVec3d(a) && isIVec3d(b)) {\r\n return {\r\n x: a.x + b.x,\r\n y: a.y + b.y,\r\n z: a.z + b.z,\r\n };\r\n }\r\n return {\r\n x: a.x + b.x,\r\n y: a.y + b.y\r\n };\r\n}\r\nexport function subtract(a: IVec3d, b: IVec3d): IVec3d;\r\nexport function subtract(a: IVec2d, b: IVec2d): IVec2d;\r\nexport function subtract(a: IVec2d | IVec3d, b: IVec2d | IVec3d): IVec2d | IVec3d {\r\n if (isIVec3d(a) && isIVec3d(b)) {\r\n return {\r\n x: a.x - b.x,\r\n y: a.y - b.y,\r\n z: a.z - b.z,\r\n };\r\n }\r\n return {\r\n x: a.x - b.x,\r\n y: a.y - b.y\r\n };\r\n}\r\n\r\nexport function moveObj(obj: IObj2d, vec: IVec2d): IObj2d {\r\n return {\r\n size: { ...obj.size },\r\n position: add(obj.position, vec),\r\n };\r\n}\r\n\r\nexport function isIVec2d(v: {}): v is IVec2d {\r\n const av = v as any;\r\n return (typeof av.x === \"number\")\r\n && (typeof av.y === \"number\");\r\n}\r\n\r\nexport function isIVec3d(v: IVec2d | IVec3d): v is IVec3d {\r\n const av = v as any;\r\n return typeof av === \"number\";\r\n}\r\nexport function isObj3d(o: IObj2d | IObj3d): o is IObj3d {\r\n return isIVec3d(o.size)\r\n && isIVec3d(o.position);\r\n}\r\n\r\nfunction intersectDim(\r\n x: IObj,\r\n y: IObj,\r\n dim: K\r\n): boolean {\r\n for (let [a, b] of [[x, y], [y, x]]) {\r\n if (a.position[dim] + a.size[dim] <= b.position[dim])\r\n return false; //a is \"left\" of b\r\n }\r\n return true;\r\n}\r\n\r\n\r\nexport function intersect(a: IObj3d, b: IObj3d): boolean;\r\nexport function intersect(a: IObj2d, b: IObj2d): boolean;\r\nexport function intersect(a: IObj2d, b: IObj2d): boolean {\r\n if (isObj3d(a) && isObj3d(b)) {\r\n const dimensions = [\"x\", \"y\", \"z\"] as (keyof IVec3d)[];\r\n return dimensions.every(dim => intersectDim(a, b, dim));\r\n }\r\n else {\r\n const dimensions = [\"x\", \"y\"] as (keyof IVec2d)[];\r\n return dimensions.every(dim => intersectDim(a, b, dim));\r\n }\r\n\r\n}\r\n\r\nexport function cheapDist(a: IVec3d, b: IVec3d): number\r\nexport function cheapDist(a: IVec2d, b: IVec2d): number\r\nexport function cheapDist(a: IVec2d, b: IVec2d): number {\r\n var zDist = 0;\r\n if (isIVec3d(a) && isIVec3d(b)) {\r\n zDist = Math.abs(a.z - b.z);\r\n }\r\n return Math.abs(a.x - b.x) + Math.abs(a.y - b.y) + zDist;\r\n}\r\n\r\n/**\r\n * Given a list of rectangles, gives a rectangle containing all inputs\r\n * @param objs\r\n */\r\nexport function boundingBoxO2(...objs: IObj2d[]): IObj2d {\r\n const dims = [\"x\", \"y\"] as (keyof IVec2d)[];\r\n return boundingBoxN(objs, dims);\r\n}\r\nexport function boundingBoxO3(...objs: IObj3d[]): IObj3d {\r\n const dims = [\"x\", \"y\", \"z\"] as (keyof IVec3d)[];\r\n return boundingBoxN(objs, dims);\r\n}\r\nexport function boundingBoxV2(...points: IVec2d[]): IObj2d {\r\n let xMin = Number.POSITIVE_INFINITY;\r\n let xMax = Number.NEGATIVE_INFINITY;\r\n let yMin = Number.POSITIVE_INFINITY;\r\n let yMax = Number.NEGATIVE_INFINITY;\r\n for (let p of points) {\r\n xMin = Math.min(xMin, p.x);\r\n xMax = Math.max(xMax, p.x);\r\n yMin = Math.min(yMin, p.y);\r\n yMax = Math.max(yMax, p.y);\r\n }\r\n return {\r\n position: {\r\n x: xMin,\r\n y: yMin,\r\n },\r\n size: {\r\n x: xMax - xMin,\r\n y: yMax - yMin\r\n }\r\n };\r\n}\r\n\r\n\r\n\r\nfunction boundingBoxN(objs: IObj[], dims: K[]) {\r\n if (objs.length === 0) {\r\n\r\n const result: any = {\r\n position: {},\r\n size: {}\r\n };\r\n for (let dim of dims) {\r\n result.position[dim] = 0;\r\n result.size[dim] = 0;\r\n }\r\n return result;\r\n }\r\n\r\n const result: IObj = {\r\n position: { ...objs[0].position },\r\n size: { ...objs[0].size }\r\n }\r\n for (let obj of objs) {\r\n for (let dim of dims) {\r\n console.assert(obj.size[dim] >= 0, `Object size should be positive, but is negative for dimension ${dim}`, { dim, obj, objs });\r\n const oldMax = result.position[dim] + result.size[dim];\r\n const objMax = obj.position[dim] + obj.size[dim];\r\n const newMax = Math.max(oldMax, objMax);\r\n const newPos = Math.min(result.position[dim], obj.position[dim]);\r\n const newSize = newMax - newPos;\r\n console.assert(newSize >= 0, `Size should be >= 0, but is ${newSize} for dimension ${dim}`, { newSize, dim, obj, objs });\r\n (result.position[dim] as any) = newPos;\r\n (result.size[dim] as any) = newSize;\r\n }\r\n }\r\n return result;\r\n}\r\n","interface SliceResult {\r\n prev: T[];\r\n current: T;\r\n next: T[];\r\n}\r\n\r\ntype sameFunc = ((f: T) => T);\r\n\r\nexport function arraySlice(arr: T[], n: number): SliceResult {\r\n\r\n return {\r\n prev: arr.slice(0, n),\r\n current: arr[n],\r\n next: arr.slice(n + 1)\r\n };\r\n}\r\n\r\nexport function updateElement(arr: T[], n: number, elem: T): T[];\r\nexport function updateElement(arr: T[], n: number, elemFunc: ((t: T) => T)): T[];\r\nexport function updateElement(arr: T[], n: number, elem: T | ((t: T) => T)): T[] {\r\n const slices = arraySlice(arr, n);\r\n const newElem = (typeof (elem) === \"function\")\r\n ? (elem as sameFunc)(slices.current)\r\n : elem;\r\n return slices.prev\r\n .concat(newElem)\r\n .concat(...slices.next);\r\n}\r\n\r\n\r\nexport function min(ts: T[], func: (t: T) => number): T | undefined {\r\n if (ts.length === 0)\r\n return undefined;\r\n\r\n let minT = ts[0];\r\n let minVal = func(minT);\r\n for (let i = 1; i < ts.length; i++) {\r\n const t = ts[i];\r\n const tVal = func(t);\r\n if (tVal < minVal) {\r\n minVal = tVal;\r\n minT = t;\r\n }\r\n }\r\n return minT;\r\n}\r\n","\r\nexport default function clamp(min: number, mid: number, max: number): number {\r\n mid = Math.max(min, mid);\r\n mid = Math.min(mid, max);\r\n return mid;\r\n}\r\n","import { IObj2d, subtract } from \"../../models/IObj\";\r\nimport { IInteriorItem, InteriorItem, InteriorProductType, Vec2d } from \"../WebApiClient\";\r\nimport { ICabinetWithDimensions as ICabinet, ICabinetWithDimensions } from \"../../models/IcabinetWithDimensions\";\r\nimport { CabinetService } from \"./CabinetService\";\r\nimport { PlaceItemInfo } from \"./InteriorService\";\r\nimport { IItemInfo } from \"../../models/IItemInfo\";\r\nimport { BaseState } from \"./BaseState\";\r\nimport { Section } from \"./Section\";\r\nimport { IInteriorProductSubGroup, IVec2d } from \"../../models/IChainInfo\";\r\nimport { GableType } from \"../../models/GableType\";\r\n\r\n\r\nexport interface DragInfo extends IObj2d, PlaceItemInfo {\r\n readonly textureUrl: string;\r\n readonly productId: number;\r\n readonly shadows: IObj2d[];\r\n readonly isFlipped?: boolean;\r\n parentIndexes: number[];\r\n};\r\n\r\n\r\nexport interface DragServiceProps {\r\n readonly cabinet: ICabinetWithDimensions;\r\n readonly cabinetService: CabinetService;\r\n readonly productSubGroup: IInteriorProductSubGroup;\r\n readonly item: IInteriorItem | undefined;\r\n readonly cursorModelPos: IVec2d;\r\n readonly mouseOffset: IVec2d;\r\n}\r\n\r\n\r\nexport interface IDragService {\r\n getDragInfo(cursorModelPos: IVec2d, forceCopy: boolean): T | undefined;\r\n place(dragInfo: T, forceCopy: boolean): IInteriorItem[];\r\n}\r\n\r\ninterface PrevGableInfo {\r\n readonly maxPos: IVec2d;\r\n readonly item?: IItemInfo;\r\n}\r\n\r\ninterface GableInfo {\r\n readonly pos: IVec2d;\r\n readonly maxPos: IVec2d;\r\n readonly size: IVec2d;\r\n readonly item?: IItemInfo;\r\n}\r\n\r\nexport abstract class DragService implements IDragService {\r\n protected static readonly moduleMaterialThickness = 16.5;\r\n protected readonly baseState: BaseState;\r\n protected readonly mouseOffset: IVec2d;\r\n protected readonly floorY = 0; //TODO get floor height\r\n protected readonly cabinet: ICabinet;\r\n protected readonly cabinetService: CabinetService;\r\n protected readonly productSubGroup: IInteriorProductSubGroup;\r\n protected readonly item: IInteriorItem | undefined;\r\n\r\n constructor(props: DragServiceProps) {\r\n this.cabinet = props.cabinet;\r\n this.cabinetService = props.cabinetService;\r\n this.productSubGroup = props.productSubGroup;\r\n this.item = props.item;\r\n this.baseState = this.getBaseState();\r\n this.mouseOffset = props.mouseOffset ?? ((!!props.item)\r\n ? subtract(props.cursorModelPos, props.item.position)\r\n : { x: 0, y: 0 });\r\n console.log({ psg: props.productSubGroup });\r\n }\r\n\r\n\r\n abstract getDragInfo(cursorModelPos: IVec2d, forceCopy: boolean): T | undefined;\r\n\r\n //This method is good for overriding\r\n place(dragInfo: T, forceCopy: boolean): IInteriorItem[] {\r\n const shouldCopy = forceCopy || (!this.item);\r\n return shouldCopy\r\n ? this.copy(dragInfo)\r\n : this.move(dragInfo)\r\n ;\r\n }\r\n\r\n\r\n //This method is good for overriding\r\n protected copy(dragObject: T): IInteriorItem[] {\r\n const newIndex = (this.cabinet.interiorItems.length > 0)\r\n ? Math.max(...this.cabinet.interiorItems.map(i => i.index)) + 1\r\n : 1;\r\n\r\n const newItem = new InteriorItem({\r\n position: new Vec2d(dragObject.position),\r\n size: new Vec2d(dragObject.size),\r\n productId: dragObject.productId,\r\n index: newIndex,\r\n isFlipped: dragObject.isFlipped ?? false,\r\n parentIndexes: dragObject.parentIndexes,\r\n interiorMaterialId: this.item?.interiorMaterialId ?? this.cabinet.interiorMaterialId\r\n });\r\n const newItems = this.cabinet.interiorItems.concat(newItem);\r\n return newItems;\r\n }\r\n\r\n //This method is good for overriding\r\n protected move(itemInfo: T): IInteriorItem[] {\r\n if (!this.item)\r\n throw new Error(\"DragService.item === null\");\r\n\r\n const newItem = new InteriorItem({\r\n ...this.item,\r\n size: new Vec2d(itemInfo.size),\r\n position: new Vec2d(itemInfo.position),\r\n productId: itemInfo.productId,\r\n isFlipped: itemInfo.isFlipped ?? false,\r\n parentIndexes: itemInfo.parentIndexes,\r\n });\r\n\r\n const newItems = this.baseState.otherItems\r\n .map(itemInfo => itemInfo.item)\r\n .concat(newItem);\r\n return newItems;\r\n }\r\n\r\n protected getProduct(item: IInteriorItem): IItemInfo {\r\n const product = this.cabinetService.interior.getProduct(item.productId);\r\n return { product, item };\r\n }\r\n\r\n private getBaseState(): BaseState {\r\n const otherItems = this.cabinet.interiorItems\r\n .filter(item => item !== this.item)\r\n .map(item => this.getProduct(item))\r\n ;\r\n const otherGables = otherItems.filter(i => i.product.productSubGroup.productType === InteriorProductType.Gable);\r\n const otherModules = otherItems.filter(i => i.product.productSubGroup.productType === InteriorProductType.Module);\r\n return {\r\n otherItems,\r\n otherGables,\r\n otherModules,\r\n sections: this.getSections(otherGables, otherModules),\r\n };\r\n }\r\n\r\n private getSections(otherGables: IItemInfo[], otherModules: IItemInfo[]): Section[] {\r\n\r\n const inf = this.cabinetService.getGableInfo();\r\n let left = inf.left.type === GableType.Gable\r\n ? inf.left.position.x + inf.left.size.x\r\n : 0;\r\n\r\n let sections: Section[] = [];\r\n let prevGables: PrevGableInfo[] = [{ // This element represents the left outer gable or the house wall.\r\n maxPos: { x: left, y: this.cabinet.height },\r\n item: undefined\r\n }];\r\n const otherGableLikeStuff = otherGables.concat(otherModules);\r\n otherGableLikeStuff.sort((a, b) => a.item.position.x - b.item.position.x);\r\n\r\n for (let gable of otherGableLikeStuff) {\r\n let gableInfo: GableInfo = {\r\n pos: gable.item.position,\r\n maxPos: {\r\n x: gable.item.position.x + gable.item.size.x,\r\n y: gable.item.position.y + gable.item.size.y\r\n },\r\n size: gable.item.size,\r\n item: gable\r\n };\r\n sections.push(...this.getSectionsForGable(gableInfo, prevGables));\r\n\r\n prevGables.push({\r\n item: gable,\r\n maxPos: gableInfo.maxPos,\r\n });\r\n }\r\n\r\n const right = inf.right.type === GableType.Gable\r\n ? inf.right.position.x\r\n : this.cabinet.width!;\r\n\r\n let rightOuterGableInfo: GableInfo = {\r\n pos: {\r\n x: right,\r\n y: 0 //TODO find floor height\r\n },\r\n maxPos: {\r\n x: this.cabinet.width,//Not used\r\n y: this.cabinet.height,\r\n },\r\n size: {\r\n x: 0,\r\n y: this.cabinet.height,\r\n },\r\n item: undefined,\r\n };\r\n sections.push(...this.getSectionsForGable(rightOuterGableInfo, prevGables));\r\n\r\n sections.push(...this.getSectionsForModules(otherModules));\r\n\r\n sections.sort((secA, secB) => secA.position.x - secB.position.x);\r\n\r\n return sections;\r\n }\r\n\r\n private getSectionsForModules(otherModules: IItemInfo[]): Section[] {\r\n return otherModules.map(mod => ({\r\n leftGable: mod,\r\n rightGable: mod,\r\n position: {\r\n x: mod.item.position.x + DragService.moduleMaterialThickness,\r\n y: mod.item.position.y\r\n },\r\n size: {\r\n x: mod.item.size.x - (2 * DragService.moduleMaterialThickness),\r\n y: mod.item.size.y\r\n },\r\n isModule: true,\r\n stepHeight: 32, //TODO get correct step offset\r\n stepOffset: 32, //TODO get correct step height\r\n }));\r\n }\r\n\r\n private getSectionsForGable(gable: GableInfo, prevGables: PrevGableInfo[]): Section[] {\r\n const result: Section[] = [];\r\n\r\n let yMin = gable.pos.y;\r\n for (let i = prevGables.length - 1; i >= 0; i--) {\r\n const prevGable = prevGables[i];\r\n if (prevGable.maxPos.x >= gable.pos.x) {\r\n //gables are right next to each other, do not make a section\r\n\r\n if (prevGable.maxPos.y <= (gable.maxPos.y)) {\r\n prevGables.pop();\r\n }\r\n continue; \r\n }\r\n result.push({\r\n leftGable: prevGable.item,\r\n rightGable: gable.item,\r\n position: { x: prevGable.maxPos.x, y: yMin },\r\n size: {\r\n x: gable.pos.x - prevGable.maxPos.x,\r\n y: Math.min(gable.pos.y + gable.size.y, prevGable.maxPos.y) - yMin\r\n },\r\n stepOffset: 32, //TODO get correct step offset\r\n stepHeight: 32, //TODO get correct step height\r\n isModule: false, \r\n });\r\n if (gable.maxPos.y >= prevGable.maxPos.y) {\r\n // current gable is taller than previous gable.\r\n // it is no longer possible to make any more sections reaching prevGable,\r\n // so remove it from lookback list\r\n yMin = prevGable.maxPos.y;\r\n prevGables.pop();\r\n\r\n }\r\n else {\r\n break;\r\n }\r\n }\r\n return result;\r\n }\r\n}\r\n\r\n","\r\n\r\n/**\r\n * Takes an array and returns a new array where one element is replaced.\r\n */\r\nexport function replaceInArray(\r\n arr: T[],\r\n selector: (t: T) => boolean,\r\n replacer: (t: T) => T\r\n): T[] | undefined {\r\n arr = arr.slice();\r\n const index = arr.findIndex(selector);\r\n if (index < 0)\r\n return undefined;\r\n const original = arr[index];\r\n const replacement = replacer(original);\r\n arr[index] = replacement;\r\n return arr;\r\n}\r\n","import { toDictionary } from \"../../util/toDictionary\";\r\nimport { CabinetService } from \"./\";\r\nimport { ICabinet, IInteriorItem, InteriorItem, InteriorProductType, Vec2d } from \"../WebApiClient\";\r\nimport { IChainInfo, IInteriorProduct, IVec2d } from \"../../models/IChainInfo\";\r\nimport { topRight } from \"../../models/IObj\";\r\nimport { GableType } from \"../../models/GableType\";\r\nimport { replaceInArray } from \"../../util/replaceInArray\";\r\nimport { groupBy } from \"../../util/groupBy\";\r\nimport { DoorInfo } from \"../../models/DoorInfo\";\r\n\r\n\r\nexport interface PlaceItemInfo {\r\n readonly position: IVec2d;\r\n readonly size: IVec2d;\r\n readonly productId: number;\r\n}\r\n\r\n\r\nexport class InteriorService {\r\n \r\n\r\n private readonly productDict: {\r\n [productId: number]: IInteriorProduct\r\n };\r\n\r\n constructor(\r\n private readonly cabinetService: CabinetService,\r\n private readonly cabinet: Readonly,\r\n private readonly changeCabinet: (changes: Partial) => void,\r\n ) {\r\n\r\n this.productDict = InteriorService.createProductDict(cabinetService.chainInfo);\r\n }\r\n\r\n getProduct(productId: number): IInteriorProduct {\r\n return this.productDict[productId];\r\n }\r\n\r\n setItems(items: IInteriorItem[]) {\r\n this.changeCabinet({ interiorItems: items.map(i => new InteriorItem(i)) });\r\n }\r\n\r\n\r\n setInteriorMaterialId(id: number | null) {\r\n const changes: Partial = {};\r\n changes.interiorMaterialId = id;\r\n const newItems = this.cabinet.interiorItems.map(item => {\r\n //replace the material on the item if the material is valid for the item\r\n //return the item unchanged otherwise\r\n const product = this.getProduct(item.productId);\r\n if (!product)\r\n return item;\r\n const productMaterial = product.materials.find(mat => mat.interiorMaterialId === id);\r\n if (!productMaterial)\r\n return item;\r\n\r\n return new InteriorItem( {\r\n ...item,\r\n interiorMaterialId: id\r\n });\r\n })\r\n changes.interiorItems = newItems;\r\n this.changeCabinet(changes);\r\n }\r\n\r\n setItemMaterial(itemIndex: number, materialId: number | null): void {\r\n\r\n const newItems = replaceInArray(this.cabinet.interiorItems,\r\n i => i.index === itemIndex,\r\n oldItem => new InteriorItem({\r\n ...oldItem,\r\n interiorMaterialId: materialId\r\n })\r\n );\r\n if (newItems) {\r\n this.setItems(newItems);\r\n }\r\n }\r\n\r\n getPulloutViolations(): IInteriorItem[] {\r\n const doorInfos = this.cabinetService.getDoorInfos();\r\n const doorsByRail = groupBy(doorInfos, di => di.railNumber);\r\n\r\n const sightRect = this.cabinetService.getSightRect();\r\n if (!sightRect)\r\n return [];\r\n const sightLeftX = sightRect.position.x;\r\n const sightRightX = sightRect.position.x + sightRect.size.x\r\n\r\n const pulloutItems = this.cabinet\r\n .interiorItems\r\n .filter(item => this.getProduct(item.productId).isPullout);\r\n\r\n const violatingItems = pulloutItems\r\n .filter(item => !this.clearsAllDoors(item, doorsByRail, sightLeftX, sightRightX))\r\n ;\r\n return violatingItems;\r\n }\r\n\r\n getExceededBounds(): IInteriorItem[] {\r\n return this.cabinet.interiorItems\r\n .filter(i => this.isExceedingBounds(i));\r\n }\r\n\r\n isExceedingBounds(item: IInteriorItem): boolean {\r\n const interiorLimits = this.interiorLimits();\r\n if (item.position.x < interiorLimits.minX)\r\n return true;\r\n if (item.position.x + item.size.x > interiorLimits.maxX)\r\n return true;\r\n return false;\r\n }\r\n\r\n clearsAllDoors(item: IInteriorItem, doorsByRail: DoorInfo[][], sightLeftX: number, sightRightX: number): boolean {\r\n return doorsByRail.every(rail => this.clearsRail(item, rail, sightLeftX, sightRightX));\r\n }\r\n\r\n private clearsRail(item: IInteriorItem, doorGroup: DoorInfo[], sightLeftX: number, sightRightX: number) {\r\n\r\n const extraClearance = 1;\r\n\r\n //start by moving all doors all the way to the right.\r\n //see if the item can fit through the opening. If not,\r\n //move the first door on the rail to the left, and try again.\r\n for (let i = 0; i <= doorGroup.length; i++) {\r\n\r\n const leftDoors = doorGroup.filter((_, n) => n < i);\r\n const openingStartX = sightLeftX + this.totalSize(leftDoors);\r\n\r\n const rightDoors = doorGroup.filter((_, n) => n >= i);\r\n const openingEndX = sightRightX - this.totalSize(rightDoors);\r\n\r\n const fitsLeft = item.position.x + extraClearance >= openingStartX;\r\n const fitsRight = item.position.x + item.size.x - extraClearance <= openingEndX;\r\n\r\n if (fitsLeft && fitsRight) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n private totalSize(doors: DoorInfo[]) {\r\n return doors.map(d => d.size.x).reduce((sum, doorSize) => sum + doorSize, 0);\r\n }\r\n\r\n getWallMountViolations(): IInteriorItem[] {\r\n return this.cabinet.interiorItems\r\n .filter(i => this.isMountedOnWall(i))\r\n }\r\n\r\n isMountedOnWall(item: IInteriorItem): boolean {\r\n const product = this.getProduct(item.productId);\r\n const productType = product.productType;\r\n const gableInfo = this.cabinetService.getGableInfo();\r\n\r\n const checkLeft = (\r\n productType === InteriorProductType.GableShelf\r\n || productType === InteriorProductType.ShelfOrDrawer\r\n || productType === InteriorProductType.LeftMount\r\n || (productType === InteriorProductType.LeftOrRightMount && !item.isFlipped)\r\n ) && gableInfo.left.type !== GableType.Gable;\r\n const checkRight = (\r\n productType === InteriorProductType.GableShelf\r\n || productType === InteriorProductType.ShelfOrDrawer\r\n || productType === InteriorProductType.RightMount\r\n || (productType === InteriorProductType.LeftOrRightMount && item.isFlipped)\r\n ) && gableInfo.right.type !== GableType.Gable;\r\n if (!checkLeft && !checkRight)\r\n return false;\r\n const limits = this.interiorLimits();\r\n\r\n if (checkLeft) {\r\n if (limits.minX + 1 >= item.position.x)\r\n return true;\r\n }\r\n if (checkRight) {\r\n if (limits.maxX - 1 <= item.position.x + item.size.x)\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n moveGable(index: number, dist: number) {\r\n const max = this.maxGableMovement(index);\r\n const clampedDist = dist < 0\r\n ? Math.max(-max.left, dist)\r\n : Math.min(max.right, dist);\r\n if (clampedDist === 0)\r\n return;\r\n const oldCabinet = this.cabinet;\r\n const allItems = oldCabinet.interiorItems;\r\n const oldItem = allItems.find(i => i.index === index);\r\n if (!oldItem)\r\n return;\r\n const newItem = new InteriorItem({\r\n ...oldItem,\r\n position: new Vec2d({\r\n x: oldItem.position.x + clampedDist,\r\n y: oldItem.position.y\r\n }),\r\n });\r\n\r\n const newItems = allItems.filter(i => i !== oldItem).concat(newItem);\r\n this.changeCabinet({ interiorItems: newItems });\r\n }\r\n\r\n maxGableMovement(gableIndex: number): { left: number, right: number } {\r\n const oldCabinet = this.cabinet;\r\n const allItems = oldCabinet.interiorItems;\r\n const oldItem = allItems.find(i => i.index === gableIndex);\r\n if (!oldItem)\r\n return {\r\n left: 0,\r\n right: 0,\r\n };\r\n const itemTopRight = topRight(oldItem);\r\n const gableInfo = this.cabinetService.getGableInfo();\r\n const minX = gableInfo.left.type === GableType.Gable\r\n ? gableInfo.left.position.x + gableInfo.left.size.x\r\n : 0;\r\n const maxX = gableInfo.right.type === GableType.Gable\r\n ? gableInfo.right.position.x\r\n : oldCabinet.width ?? 0;\r\n\r\n return {\r\n left: Math.max(0, oldItem.position.x - minX),\r\n right: Math.max(0, maxX - itemTopRight.x)\r\n };\r\n }\r\n\r\n interiorLimits(): { minX: number, maxX: number } {\r\n const oldCabinet = this.cabinet;\r\n const gableInfo = this.cabinetService.getGableInfo();\r\n const minX = gableInfo.left.type === GableType.Gable\r\n ? gableInfo.left.position.x + gableInfo.left.size.x\r\n : 0;\r\n const maxX = gableInfo.right.type === GableType.Gable\r\n ? gableInfo.right.position.x\r\n : oldCabinet.width ?? 0;\r\n return { minX, maxX };\r\n }\r\n\r\n deleteItem(index: number) {\r\n\r\n const oldCabinet = this.cabinet;\r\n const indexesToRemove = InteriorService.getDescendentIndexes(index, oldCabinet.interiorItems);\r\n indexesToRemove.add(index);\r\n const newItems = oldCabinet.interiorItems\r\n .filter(item => !indexesToRemove.has(item.index));\r\n this.changeCabinet({ interiorItems: newItems });\r\n }\r\n\r\n private static createProductDict(chainInfo: IChainInfo): { [productId: number]: IInteriorProduct } {\r\n const productInfos = chainInfo.productLines.flatMap(pl =>\r\n pl.interiorProducts.flatMap(pg =>\r\n pg.interiorProductSubGroups.flatMap(psg => psg.products)\r\n )\r\n );\r\n return toDictionary(productInfos, product => product.id);\r\n }\r\n\r\n static getDescendentIndexes(parentIndex: number, items: IInteriorItem[]): Set {\r\n const parentIndexes = new Set([parentIndex]);\r\n const result = new Set();\r\n let foundAny = true;\r\n while (foundAny) {\r\n foundAny = false;\r\n for (let potentialChild of items) {\r\n for (let childParentIndex of potentialChild.parentIndexes) {\r\n if (parentIndexes.has(childParentIndex)) {\r\n if (!result.has(potentialChild.index)) {\r\n foundAny = true;\r\n result.add(potentialChild.index);\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n return result;\r\n }\r\n}\r\n\r\n","\r\ntype Group = T[] & { key: TKey };\r\n\r\nexport function groupBy(arr: T[], keySelector: (t: T) => TKey): Group[] {\r\n const result: Group[] = [];\r\n\r\n for (let t of arr) {\r\n let key = keySelector(t);\r\n let group = result.find(g => g.key === key);\r\n if (group) {\r\n group.push(t);\r\n }\r\n else {\r\n const newGroup = [t] as any;\r\n newGroup.key = key;\r\n result.push(newGroup);\r\n }\r\n }\r\n return result;\r\n}\r\n","\r\nexport function toDictionary(\r\n arr: TVal[],\r\n keyFunc: ((val: TVal) => number)\r\n): { [key: number]: TVal };\r\n\r\nexport function toDictionary(\r\n arr: TVal[],\r\n keyFunc: ((val: TVal) => number),\r\n valFunc: ((val: TVal) => TOut)\r\n): { [key: number]: TOut };\r\n\r\nexport function toDictionary(\r\n arr: TVal[],\r\n keyFunc: ((val: TVal) => number),\r\n valFunc?: ((val: TVal) => TOut)\r\n): { [key: number]: TOut } {\r\n\r\n if (!valFunc)\r\n valFunc = ((v) => v as any as TOut);\r\n\r\n const result: { [key: number]: TOut } = {};\r\n for (let val of arr) {\r\n const key = keyFunc(val);\r\n result[key] = valFunc(val);\r\n }\r\n\r\n return result;\r\n}\r\n","import { GableType } from \"../../models/GableType\";\r\nimport { IInteriorProduct, IInteriorProductSubGroup } from \"../../models/IChainInfo\";\r\nimport { IItemInfo } from \"../../models/IItemInfo\";\r\nimport { intersect, IObj2d, subtract, topRight } from \"../../models/IObj\";\r\nimport { min } from \"../../util/arraySlice\";\r\nimport clamp from \"../../util/clamp\";\r\nimport { IInteriorItem, InteriorItem, InteriorProductType, IVec2d, Vec2d } from \"../WebApiClient\";\r\nimport { CabinetService } from \"./CabinetService\";\r\nimport { DragInfo, DragService, DragServiceProps } from \"./DragService\";\r\nimport { InteriorService } from \"./InteriorService\";\r\n\r\ninterface GableState {\r\n product: IInteriorProduct;\r\n gableSnapPositions: number[];\r\n\r\n}\r\ninterface GableDragInfo extends DragInfo {\r\n valid: boolean;\r\n}\r\ninterface FreeSpace {\r\n readonly min: number;\r\n readonly max: number;\r\n}\r\n\r\nexport class DragServiceGable extends DragService {\r\n\r\n private readonly gableState: GableState;\r\n private readonly isModule: boolean;\r\n private readonly nonDescendents: IInteriorItem[];\r\n private readonly minX: number;\r\n private readonly maxX: number;\r\n private readonly freeSpaces: FreeSpace[];\r\n private readonly productWidth: number;\r\n\r\n constructor(props: DragServiceProps) {\r\n super(props);\r\n const product = props.productSubGroup.products[0];\r\n const otherGableLikeStuff = this.baseState.otherGables.concat(this.baseState.otherModules);\r\n otherGableLikeStuff.sort((itemA, itemB) => itemA.item.position.x - itemB.item.position.x);\r\n this.productWidth = product.defaultSize.x;\r\n this.gableState = {\r\n product: product,\r\n gableSnapPositions: DragServiceGable.getGableSnapPositions(\r\n otherGableLikeStuff,\r\n props.cabinet.width,\r\n this.productWidth,\r\n props.cabinetService\r\n )\r\n }\r\n this.isModule = this.productSubGroup.productType === InteriorProductType.Module;\r\n const descendentIndexes = (props.item)\r\n ? InteriorService.getDescendentIndexes(props.item.index, props.cabinet.interiorItems)\r\n : new Set();\r\n this.nonDescendents = props.cabinet.interiorItems.filter(ii =>\r\n ii.index !== props.item?.index\r\n && !descendentIndexes.has(ii.index));\r\n\r\n const gableInfo = props.cabinetService.getGableInfo();\r\n this.minX = gableInfo.left.type === GableType.Gable\r\n ? gableInfo.left.size.x + gableInfo.left.position.x\r\n : 0;\r\n const maxX = (gableInfo.right.type === GableType.Gable\r\n ? gableInfo.right.position.x\r\n : props.cabinet.width\r\n )\r\n this.maxX = maxX - this.productWidth;\r\n\r\n this.freeSpaces = getFreeSpaces(this.minX, maxX, this.nonDescendents)\r\n .map(fs => ({ min: fs.min, max: fs.max - this.productWidth }))\r\n .filter(fs => fs.min <= fs.max);\r\n }\r\n\r\n\r\n //overridden from GableService.\r\n //In addition to moving the gable itself, it should also move the items that are connected to it\r\n protected move(itemInfo: GableDragInfo): IInteriorItem[] {\r\n if (!this.item)\r\n return super.move(itemInfo);\r\n let itemsWithGableMoved = super.move(itemInfo);\r\n const gableTr = topRight(this.item);\r\n const gableMoveAmount = subtract(this.item.position, itemInfo.position);\r\n\r\n let result = itemsWithGableMoved.map(item => {\r\n if (item.index === this.item?.index)\r\n return item; //this is the gable itself, it's already moved\r\n\r\n const itemTr = topRight(item);\r\n if (item.position.x >= this.item!.position.x\r\n && item.position.y >= this.item!.position.y\r\n && itemTr.x <= gableTr.x\r\n && itemTr.y <= gableTr.y\r\n ) {\r\n //item is inside gable - move item by same amount as gable\r\n return {\r\n ...item,\r\n position: new Vec2d(subtract(item.position, gableMoveAmount)),\r\n };\r\n }\r\n //TODO move/resize items that are connected to gable/module on just one side\r\n\r\n return item;\r\n });\r\n return result.map(ii => new InteriorItem(ii));\r\n }\r\n\r\n static acceptable(pt: IInteriorProductSubGroup): boolean {\r\n return (\r\n pt.productType === InteriorProductType.Gable\r\n || pt.productType === InteriorProductType.Module\r\n );\r\n }\r\n\r\n getDragInfo(cursorModelPos: IVec2d, forceCopy: boolean): GableDragInfo {\r\n //TODO low priority: handle forceCopy\r\n const product = this.productSubGroup.products[0];\r\n const obj = this.getBestPos(cursorModelPos, product);\r\n\r\n\r\n\r\n const shadows = this.isModule\r\n ? []\r\n : this.gableState.gableSnapPositions.map(posX => ({\r\n position: { x: posX, y: this.floorY },\r\n size: product.defaultSize\r\n }));\r\n\r\n const productMaterial = product.materials.find(m => m.interiorMaterialId === this.cabinet.interiorMaterialId);\r\n const textureUrl = productMaterial?.drawingPath ?? product.textureUrl;\r\n return {\r\n ...obj,\r\n productId: product.id,\r\n textureUrl: textureUrl,\r\n shadows,\r\n valid: !!obj && !this.overlapsOthers(obj),\r\n parentIndexes: []\r\n };\r\n }\r\n\r\n place(dragInfo: GableDragInfo, forceCopy: boolean): IInteriorItem[] {\r\n if (!dragInfo.valid)\r\n return this.cabinet.interiorItems;\r\n return super.place(dragInfo, forceCopy);\r\n }\r\n\r\n private overlapsOthers(obj: IObj2d): boolean {\r\n return this.nonDescendents\r\n .some(otherItem => intersect(otherItem, obj));\r\n }\r\n\r\n private getBestPos(cursorModelPos: IVec2d, product: IInteriorProduct): IObj2d {\r\n const height = clamp(product.minSize.y, this.cabinet.height, product.maxSize.y);\r\n return {\r\n position: {\r\n x: this.getBestGableX(cursorModelPos),\r\n y: this.floorY\r\n },\r\n size: {\r\n x: product.defaultSize.x,\r\n y: height,\r\n }\r\n };\r\n\r\n }\r\n\r\n private getBestGableX(cursorModelPos: IVec2d): number {\r\n const snapDist = 50;\r\n const baseX = clamp(\r\n this.minX,\r\n Math.round(cursorModelPos.x - this.mouseOffset.x),\r\n this.maxX\r\n );\r\n\r\n\r\n if (this.gableState.gableSnapPositions.length > 0) {\r\n const orderedSnapPositions = [...this.gableState.gableSnapPositions]\r\n .sort((a, b) => Math.abs(a - baseX) - Math.abs(b - baseX))\r\n ;\r\n const best = orderedSnapPositions[0];\r\n if (Math.abs(best - baseX) < snapDist) {\r\n //current position is close to a snap position, return the snap position\r\n return best;\r\n }\r\n }\r\n //TODO handle no space for object\r\n const distances = this.freeSpaces.map(fs => ({\r\n fs,\r\n bestPosInSpace: clamp(fs.min, baseX, fs.max),\r\n dist: Math.abs(clamp(fs.min, baseX, fs.max) - baseX)\r\n }));\r\n const bestFreeSpace = min(distances, d => d.dist);\r\n const bestPos = bestFreeSpace?.bestPosInSpace;\r\n return bestPos ?? baseX;\r\n }\r\n\r\n private static getGableSnapPositions(otherGables: IItemInfo[], cabinetWidth: number, itemWidth: number, cabinetService: CabinetService): number[] {\r\n const positions: number[] = [];\r\n const gableInfo = cabinetService.getGableInfo();\r\n const leftOuterGableMaxX = gableInfo.left.type === GableType.Gable\r\n ? gableInfo.left.size.x + gableInfo.left.position.x\r\n : 0;\r\n const rightGableMinX = gableInfo.right.type === GableType.Gable\r\n ? gableInfo.right.position.x\r\n : cabinetWidth;\r\n\r\n let leftX = leftOuterGableMaxX;\r\n for (let gable of otherGables) {\r\n //get snap distances between previous gable and this gable\r\n const rightX = gable.item.position.x;\r\n positions.push(...this.getSnapPositions(leftX, rightX, itemWidth));\r\n leftX = gable.item.position.x + gable.item.size.x;\r\n }\r\n //get snap distance between last gable and outer gable\r\n positions.push(...this.getSnapPositions(leftX, rightGableMinX, itemWidth));\r\n return positions;\r\n }\r\n\r\n private static getSnapPositions(leftX: number, rightX: number, itemWidth: number): number[] {\r\n const snapDistances = [0, 367, 567, 767];\r\n const dist = rightX - leftX;\r\n const positions: number[] = [];\r\n for (let snapDist of snapDistances) {\r\n if (snapDist + itemWidth > dist)\r\n break;\r\n positions.push(leftX + snapDist);\r\n positions.push(rightX - snapDist - itemWidth);\r\n }\r\n return positions;\r\n }\r\n}\r\n\r\nfunction getFreeSpaces(minX: number, maxX: number, nonDescendents: IInteriorItem[]): FreeSpace[] {\r\n const result: FreeSpace[] = [];\r\n let freeStartX = minX;\r\n\r\n for (let item of nonDescendents) {\r\n if (freeStartX < item.position.x) {\r\n result.push({\r\n min: freeStartX,\r\n max: item.position.x\r\n });\r\n freeStartX = item.position.x + item.size.x;\r\n }\r\n else {\r\n freeStartX = Math.max(freeStartX, item.position.x + item.size.x);\r\n }\r\n }\r\n if (freeStartX < maxX) {\r\n result.push({\r\n min: freeStartX,\r\n max: maxX\r\n });\r\n }\r\n return result;\r\n}\r\n","\r\n\r\nexport enum GableSide {\r\n Left,\r\n Right\r\n}\r\n","import { DoorInfo, FillingElement, FrameElement } from \"../../models/DoorInfo\";\r\nimport { IObj2d, maxPos } from \"../../models/IObj\";\r\nimport { OverlapInfo } from \"../../models/OverlapInfo\";\r\nimport { updateElement } from \"../../util/arraySlice\";\r\nimport clamp from \"../../util/clamp\";\r\nimport range from \"../../util/range\";\r\nimport { InteriorService } from \"./InteriorService\";\r\nimport { Cabinet, CabinetPosition, ICabinet, IDoor, Door, IVec3d, Vec2d, CabinetClient, IExtraItem, ExtraItem, ErrorFlag, } from \"../WebApiClient\";\r\nimport { GableInfo, GableSideInfo } from \"../../models/GableInfo\";\r\nimport { GableType } from \"../../models/GableType\";\r\nimport { GableSide } from \"../../models/GableSide\";\r\nimport { hasDimensions } from \"../CabinetValidator\";\r\nimport { ICabinetWithDimensions } from \"../../models/IcabinetWithDimensions\";\r\nimport { replaceInArray } from \"../../util/replaceInArray\";\r\nimport {\r\n IChainInfo,\r\n IDoorBar,\r\n IDoorProduct,\r\n IProductLine,\r\n IMaterial,\r\n IVec2d\r\n} from \"../../models/IChainInfo\";\r\nimport { CabinetError } from \"../../models/CabinetError\";\r\nimport { addFlag } from \"../../util/flags\";\r\n\r\n\r\nexport enum ResetTopic {\r\n Dimensions = \"Dimensions\",\r\n Corpus = \"Corpus\",\r\n Doors = \"Doors\",\r\n Interior = \"Interior\",\r\n}\r\n\r\nexport interface ChangeResult {\r\n success: boolean;\r\n}\r\nfunction success(): ChangeResult {\r\n return { success: true };\r\n}\r\nfunction failure(): ChangeResult {\r\n return { success: false };\r\n}\r\n\r\nexport type ResetConfirmer = (topics: ResetTopic[]) => Promise;\r\n\r\nexport class CabinetService {\r\n private readonly doorOverlapWidth = 34;\r\n\r\n public readonly interior: InteriorService;\r\n private _cabinet: ICabinet;\r\n\r\n constructor(\r\n public readonly chainInfo: IChainInfo,\r\n private readonly resetConfirmer: ResetConfirmer,\r\n cabinet: ICabinet,\r\n private readonly setCabinet: (c: ICabinet) => void\r\n ) {\r\n this._cabinet = cabinet;\r\n this.interior = new InteriorService(this,\r\n cabinet,\r\n (cabinetChanges) => this.change(cabinetChanges));\r\n }\r\n\r\n public get cabinet(): Readonly { return this._cabinet; }\r\n\r\n static createDefaultCabinet(chainInfo: IChainInfo): Cabinet {\r\n\r\n return new Cabinet({\r\n height: null,\r\n width: null,\r\n depth: null,\r\n position: null,\r\n roof: false, //Roof is disabled completely for now\r\n bottom: false, //disabled completely for now\r\n doorDampening: null,\r\n doorProductId: null,\r\n doors: [],\r\n extraItems: [],\r\n interiorItems: [],\r\n leftGableMaterialId: null,\r\n rightGableMaterialId: null,\r\n numDoorOverlaps: null,\r\n productLineId: null,\r\n sidePanel: null,\r\n interiorMaterialId: chainInfo.interiorMaterials.length === 0\r\n ? null\r\n : chainInfo.interiorMaterials[0].id,\r\n userSolutionId: null,\r\n name: \"\",\r\n orderNumber: null,\r\n });\r\n }\r\n\r\n copyCabinet(cabinet: ICabinet): Cabinet {\r\n return new Cabinet(cabinet);\r\n }\r\n\r\n async loadSavedCabinet(userSolutionId: string, client: CabinetClient) {\r\n const response = await client.getCabinet(userSolutionId);\r\n this.change(response.cabinet);\r\n }\r\n\r\n\r\n private change(changes: Partial) {\r\n console.debug(\"Cabinet change made: \", changes);\r\n const newDoors = this.updateDoorDimensions(changes);\r\n const errorFlags = this.getErrorFlags(changes);\r\n const newCabinet = {\r\n ...this.cabinet,\r\n ...changes,\r\n doors: newDoors,\r\n };\r\n this._cabinet = newCabinet;\r\n this.setCabinet(newCabinet);\r\n }\r\n private changeDoor(doorIndex: number, changes: Partial) {\r\n const newDoors = updateElement(\r\n this.cabinet.doors as IDoor[],\r\n doorIndex,\r\n oldDoor => ({ ...oldDoor, ...changes })\r\n ).map(iDoor => new Door(iDoor));\r\n this.change({ doors: newDoors });\r\n }\r\n\r\n private exceedsBounds(n: number | null, min: number, max: number): boolean {\r\n if (n === null)\r\n return false;\r\n if (n < min)\r\n return true;\r\n if (n > max)\r\n return true;\r\n return false;\r\n }\r\n\r\n async initDimensions(): Promise {\r\n const productLine = this.getProductLine();\r\n if (!productLine)\r\n return { success: false, isChanged: false };\r\n\r\n let changes: Partial = {};\r\n let isChanged = false;\r\n if (this.cabinet.width === null) {\r\n changes.width = productLine.defaultSize.x;\r\n isChanged = true;\r\n }\r\n if (this.cabinet.height === null) {\r\n changes.height = productLine.defaultSize.y;\r\n isChanged = true;\r\n }\r\n if (this.cabinet.depth === null) {\r\n changes.depth = productLine.gableProducts[0].size.z;\r\n isChanged = true;\r\n }\r\n\r\n if (isChanged) {\r\n this.change(changes);\r\n }\r\n return { success: true, isChanged };\r\n }\r\n\r\n async initDoors(): Promise {\r\n const doorProduct = this.getDoorProduct();\r\n let changes: Partial = {};\r\n if (!doorProduct) {\r\n\r\n changes.doorDampening = false;\r\n changes.doors = [];\r\n changes.numDoorOverlaps = null;\r\n this.change(changes);\r\n\r\n return { success: true, isChanged: true };\r\n }\r\n\r\n\r\n let doors = this.cabinet.doors.slice();\r\n let isChanged = false;\r\n\r\n const numDoorChoices = this.getNumDoorChoices(changes);\r\n\r\n //add doors\r\n if (doors.length < numDoorChoices.min) {\r\n const numDoors = this.getOptimalNumberOfDoors();\r\n const newDoor = this.getNewDoor();\r\n if (!newDoor)\r\n return { success: false, isChanged: false };\r\n while (doors.length < numDoors) {\r\n doors.push(new Door(newDoor));\r\n }\r\n isChanged = true;\r\n changes.doors = doors;\r\n }\r\n\r\n //remove extra doors\r\n if (doors.length > numDoorChoices.max) {\r\n doors = doors.slice(0, numDoorChoices.max);\r\n changes.doors = doors;\r\n isChanged = true;\r\n }\r\n\r\n if (this.cabinet.doorDampening === null) {\r\n if (!this.supportsDoorDamping(doorProduct)) {\r\n changes.doorDampening = false;\r\n isChanged = true;\r\n }\r\n }\r\n\r\n //initOverlaps\r\n const numOverlapChoices = this.getOverlapInfos(changes)\r\n if (!numOverlapChoices.find(oi => oi.numOverlaps === this.cabinet.numDoorOverlaps)) {\r\n changes.numDoorOverlaps = numOverlapChoices[0].numOverlaps;\r\n isChanged = true;\r\n }\r\n\r\n //init gables and adapters, since they are on the same page as doors\r\n if (this.cabinet.leftGableMaterialId === null) {\r\n changes.leftGableMaterialId = this.getGableMaterials(GableSide.Left)[0]?.id ?? null;\r\n isChanged = true;\r\n }\r\n\r\n if (this.cabinet.rightGableMaterialId === null) {\r\n changes.rightGableMaterialId = this.getGableMaterials(GableSide.Right)[0]?.id ?? null;\r\n isChanged = true;\r\n }\r\n\r\n if (isChanged) {\r\n changes.doors = doors.map(iDoor => new Door(iDoor));\r\n this.change(changes);\r\n }\r\n return {\r\n success: true,\r\n isChanged: isChanged\r\n };\r\n }\r\n\r\n supportsDoorDamping(doorProduct: IDoorProduct | undefined): boolean {\r\n return !!(\r\n doorProduct?.damperLeft\r\n || doorProduct?.damperRight\r\n || doorProduct?.damperMiddle\r\n );\r\n\r\n }\r\n\r\n getGableWidthDeduction(side: GableSide, changes: Partial = {}): {size: number, affectsInterior: boolean, affectsDoors: boolean} {\r\n const cabinet = {\r\n ...this.cabinet,\r\n ...changes\r\n };\r\n const materialId = side === GableSide.Left\r\n ? cabinet.leftGableMaterialId\r\n : cabinet.rightGableMaterialId;\r\n if (!this.hasWall(cabinet, side)) {\r\n const pl = this.getProductLine(changes);\r\n const size = pl?.gableProducts.filter(gp => gp.materials.some(mat => mat.id === materialId))[0]?.size.x ?? 0;\r\n return {\r\n size,\r\n affectsDoors: true,\r\n affectsInterior: true,\r\n };\r\n\r\n }\r\n else if (cabinet.sidePanel) {\r\n const pl = this.getProductLine(changes);\r\n const size = pl?.adapterProducts[0]?.size.x ?? 0;\r\n return {\r\n size,\r\n affectsInterior: false,\r\n affectsDoors: true,\r\n }\r\n }\r\n else {\r\n return {\r\n size: 0,\r\n affectsDoors: true,\r\n affectsInterior: false\r\n };\r\n }\r\n }\r\n\r\n getDampingStatus(doorIndex: number): \"notAvailableOnDoorType\" | \"tooNarrow\" | \"activated\" | \"deactivated\" {\r\n const doorProduct = this.getDoorProduct();\r\n if (!doorProduct)\r\n return \"notAvailableOnDoorType\";\r\n if (!this.canUseDampening())\r\n return \"notAvailableOnDoorType\";\r\n const doorInfos = this.getDoorInfos();\r\n if (!doorInfos)\r\n return \"notAvailableOnDoorType\";\r\n const damperProduct = (doorIndex === 0) ? doorProduct.damperLeft\r\n : (doorIndex === doorInfos.length - 1) ? doorProduct.damperRight\r\n : doorProduct.damperMiddle;\r\n if (damperProduct === null)\r\n return \"notAvailableOnDoorType\";\r\n if (doorInfos[doorIndex].size.x < damperProduct.minWidth) {\r\n return \"tooNarrow\";\r\n }\r\n return this.cabinet.doorDampening === true ? \"activated\" : \"deactivated\";\r\n }\r\n\r\n addExtraProduct(extraProductId: number, count: number, materialId: number | null) {\r\n const oldExtraItems = this.cabinet.extraItems as IExtraItem[];\r\n let newArray = replaceInArray(oldExtraItems,\r\n ei => ei.productId === extraProductId && ei.interiorMaterialId === materialId,\r\n ei => ({ ...ei, count: ei.count + count })\r\n );\r\n\r\n if (!newArray) {\r\n //No element was replaced - there were no extraItems with the correct productId\r\n newArray = oldExtraItems.concat({ count, productId: extraProductId, interiorMaterialId: materialId });\r\n }\r\n const changes: Partial = {\r\n extraItems: newArray.map(ei => new ExtraItem(ei))\r\n };\r\n this.change(changes);\r\n }\r\n\r\n setExtraItemCount(extraProductId: number, newCount: number, materialId: number | null) {\r\n const oldExtraItems = this.cabinet.extraItems as IExtraItem[];\r\n let newArray = replaceInArray(oldExtraItems,\r\n ei => (ei.productId === extraProductId && ei.interiorMaterialId === materialId),\r\n ei => ({ ...ei, count: newCount })\r\n );\r\n if (!newArray) {\r\n //No element was replaced - there were no extraItems with the correct productId\r\n newArray = oldExtraItems.concat({\r\n count: newCount,\r\n productId: extraProductId,\r\n interiorMaterialId: materialId,\r\n });\r\n }\r\n const changes: Partial = {\r\n extraItems: newArray.map(ei => new ExtraItem(ei))\r\n };\r\n this.change(changes);\r\n\r\n }\r\n\r\n removeExtraItem(extraProductId: number) {\r\n const oldExtraItems = this.cabinet.extraItems as IExtraItem[];\r\n const newExtraItems = oldExtraItems.filter(ei => ei.productId !== extraProductId);\r\n\r\n const changes: Partial = {\r\n extraItems: newExtraItems.map(ei => new ExtraItem(ei))\r\n };\r\n this.change(changes);\r\n }\r\n\r\n\r\n private withNumDoors(numDoors: number, existingDoors: IDoor[]): Door[] {\r\n if (numDoors > existingDoors.length) {\r\n let door = existingDoors.length > 0 ? existingDoors[existingDoors.length - 1] : this.getNewDoor();\r\n if (!door)\r\n throw new Error(\"Could not make door\");\r\n let newDoors = range(existingDoors.length, numDoors).map(_ => new Door(door));\r\n return existingDoors\r\n .map(d => new Door(d))\r\n .concat(...newDoors);\r\n }\r\n return existingDoors.slice(0, numDoors)\r\n .map(d => new Door(d));\r\n }\r\n\r\n private getOptimalNumberOfDoors(): number {\r\n //TODO calculate\r\n let nrOfDoorChoices = this.getNumDoorChoices();\r\n return nrOfDoorChoices.min;\r\n }\r\n\r\n private getNewDoor(changes: Partial = {}): IDoor | undefined {\r\n if (this.cabinet.doors.length > 0) {\r\n const lastDoor = this.cabinet.doors[this.cabinet.doors.length - 1];\r\n return {\r\n bandMaterialId: lastDoor.bandMaterialId,\r\n barId: lastDoor.barId,\r\n materialId: lastDoor.materialId,\r\n size: new Vec2d(lastDoor.size)\r\n };\r\n }\r\n\r\n const doorProduct = this.getDoorProduct(changes);\r\n if (!doorProduct)\r\n return;\r\n return {\r\n bandMaterialId: doorProduct.bandMaterials[0]?.id ?? null,\r\n barId: doorProduct.bars[0]?.id ?? null,\r\n materialId: doorProduct.doorSizes[0]?.material?.id ?? null,\r\n size: new Vec2d({x:0, y:0})\r\n }\r\n }\r\n\r\n getNumDoorChoices(changes: Partial = {}): { min: number, max: number } {\r\n\r\n const currentCabinet = { ...this.cabinet, ...changes };\r\n const overlapInfos = this.doorPositions.map(dp => new OverlapInfo(dp,\r\n currentCabinet.width!, //TODO account for outer gables\r\n this.doorOverlapWidth\r\n ));\r\n const doorProduct = this.getDoorProduct(changes);\r\n const possibleOverlapInfos = overlapInfos.filter(oi => doorProduct?.doorSizes?.some(ds =>\r\n ds.min.x <= oi.doorWidth\r\n && ds.max.x >= oi.doorWidth\r\n && ds.min.y <= currentCabinet.height!\r\n && ds.max.y >= currentCabinet.height!));\r\n const doorCounts = possibleOverlapInfos?.map(oi => oi.doorPositions.length);\r\n return {\r\n min: Math.min(...doorCounts),\r\n max: Math.max(...doorCounts)\r\n };\r\n \r\n }\r\n private readonly doorPositions = [\r\n //[], // 0 doors //invalid\r\n //[0], // 1 door //invalid\r\n [0, 1], // 2\r\n [1, 0, 1], // 3\r\n [1, 0, 1, 0], // 4\r\n [1, 0, 0, 1],\r\n [1, 0, 1, 0, 1], // 5\r\n [1, 0, 1, 1, 0],\r\n [1, 0, 1, 0, 1, 0], // 6\r\n [1, 0, 1, 1, 0, 1],\r\n [1, 0, 1, 0 ,1, 0 ,1], // 7\r\n [1, 0, 0, 1, 0, 0, 1]\r\n ];\r\n\r\n getOverlapInfos(changes: Partial = {}): OverlapInfo[] {\r\n const currentCabinet = { ...this.cabinet, ...changes };\r\n\r\n if (currentCabinet.doors.length === 0) {\r\n return [];\r\n }\r\n\r\n const possibleDoorPositions = this.doorPositions\r\n .filter(dp => dp.length === currentCabinet.doors.length);\r\n if (possibleDoorPositions.length < 0)\r\n throw new Error(`Overlap info for ${currentCabinet.doors.length} doors not implemented`);\r\n return possibleDoorPositions.map(dp => new OverlapInfo(dp,\r\n currentCabinet.width!, //TODO account for outer gables\r\n this.doorOverlapWidth\r\n ));\r\n }\r\n\r\n currentOverlapInfo(changes: Partial = {}): OverlapInfo | undefined {\r\n const cabinet: ICabinet = {\r\n ...this.cabinet,\r\n ...changes\r\n };\r\n const infos = this.getOverlapInfos(changes);\r\n const result = infos\r\n .find(oi => oi.numOverlaps === cabinet.numDoorOverlaps)\r\n return result;\r\n }\r\n\r\n\r\n getGableInfo(changes: Partial = {}): GableInfo {\r\n const cabinet = {\r\n ...this.cabinet,\r\n ...changes,\r\n };\r\n if (!hasDimensions(cabinet))\r\n return {\r\n left: {\r\n position: { x: 0, y: 0, z: 0 },\r\n size: { x: 0, y: 0, z: 0 },\r\n type: GableType.None\r\n },\r\n right: {\r\n position: { x: 0, y: 0, z: 0 },\r\n size: { x: 0, y: 0, z: 0 },\r\n type: GableType.None\r\n }\r\n };\r\n return {\r\n left: this.getLeftSideInfo(cabinet),\r\n right: this.getRightSideInfo(cabinet),\r\n };\r\n }\r\n\r\n private getLeftSideInfo(cabinet: ICabinetWithDimensions): GableSideInfo {\r\n if (this.hasWall(cabinet, GableSide.Left)) {\r\n if (cabinet.sidePanel) {\r\n const pl = this.getProductLine(cabinet);\r\n const adapterSize = pl?.adapterProducts[0]?.size ?? { x: 0, y: 0, z: 0 };\r\n return {\r\n type: GableType.SidePanel,\r\n position: {\r\n x: 0,\r\n y: 0,// TODO account for floor\r\n z: cabinet.depth - adapterSize.z\r\n },\r\n size: {\r\n ...adapterSize,//TODO account for floor and roof\r\n y: cabinet.height,\r\n }\r\n }\r\n }\r\n else {\r\n return {\r\n type: GableType.None,\r\n position: { x: 0, y: 0, z: 0 },\r\n size: { x: 0, y: 0, z: 0 },\r\n };\r\n }\r\n }\r\n else {\r\n const pl = this.getProductLine(cabinet);\r\n const gableSize = pl?.gableProducts[0]?.size ?? { x: 0, y: 0, z: 0 };\r\n\r\n return {\r\n type: GableType.Gable,\r\n position: { x: 0, y: 0, z: 0 },// TODO account for floor\r\n size: {\r\n x: gableSize.x,\r\n y: cabinet.height,//TODO account for floor and roof\r\n z: cabinet.depth\r\n }\r\n };\r\n }\r\n }\r\n private getRightSideInfo(cabinet: ICabinetWithDimensions): GableSideInfo {\r\n if (this.hasWall(cabinet, GableSide.Right)) {\r\n if (cabinet.sidePanel) {\r\n const pl = this.getProductLine(cabinet);\r\n const adapterSize = pl?.adapterProducts[0]?.size ?? { x: 0, y: 0, z: 0 };\r\n return {\r\n type: GableType.SidePanel,\r\n position: {\r\n x: cabinet.width - adapterSize.x,\r\n y: 0,// TODO account for floor\r\n z: cabinet.depth - adapterSize.z\r\n },\r\n size: {\r\n ...adapterSize,\r\n //TODO account for floor and roof\r\n y: cabinet.height,\r\n }\r\n }\r\n\r\n }\r\n else {\r\n return {\r\n type: GableType.None,\r\n position: { x: cabinet.width, y: 0, z: 0 },\r\n size: { x: 0, y: cabinet.height, z: cabinet.depth },\r\n };\r\n }\r\n }\r\n else {\r\n\r\n const pl = this.getProductLine(cabinet);\r\n const gableSize = pl?.gableProducts[0]?.size ?? { x: 0, y: 0, z: 0 };\r\n return {\r\n type: GableType.Gable,\r\n position: {\r\n x: cabinet.width - gableSize.x,\r\n y: 0,// TODO account for floor\r\n z: 0,\r\n },\r\n size: {\r\n x: gableSize.x,\r\n y: cabinet.height,//TODO account for floor and roof\r\n z: cabinet.depth\r\n }\r\n };\r\n }\r\n }\r\n\r\n hasWall(cabinet: ICabinet, side: GableSide) {\r\n const wall = side === GableSide.Left\r\n ? CabinetPosition.WallLeft\r\n : CabinetPosition.WallRight;\r\n return cabinet.position === CabinetPosition.WallBoth || cabinet.position === wall;\r\n }\r\n\r\n getGableMaterials(gableSide: GableSide, changes: Partial = {}): IMaterial[] {\r\n const cabinet = {\r\n ...this.cabinet,\r\n ...changes\r\n };\r\n const productLine = this.getProductLine(changes);\r\n const gableProducts = productLine?.gableProducts.filter(gp => gp.size.z === cabinet.depth) ?? [];\r\n const materials = this.hasWall(cabinet, gableSide)\r\n ? productLine?.adapterMaterials ?? []\r\n : gableProducts.flatMap(gp => gp.materials)\r\n ;\r\n return materials;\r\n }\r\n\r\n setGableMaterialId(id: number, side: GableSide): Promise {\r\n const changes: Partial = {};\r\n if (side === GableSide.Left) {\r\n changes.leftGableMaterialId = id;\r\n }\r\n else {\r\n changes.rightGableMaterialId = id;\r\n }\r\n this.change(changes);\r\n return Promise.resolve({ success: true });\r\n }\r\n\r\n private getFillingMaterial(id: number, changes: Partial) {\r\n return this.getDoorProduct(changes)?.doorSizes.find(ds => ds.material.id === id)?.material;\r\n }\r\n\r\n private getBandFillingMaterial(id: number | null, changes: Partial): IMaterial | undefined {\r\n return this.getDoorProduct(changes)?.bandMaterials.find(bm => bm.id === id);\r\n }\r\n\r\n getDoorBar(barId: number, changes: Partial) {\r\n return this.getDoorProduct(changes)?.bars.find(b => b.id === barId);\r\n }\r\n\r\n getProductLine(changes: Partial = {}): IProductLine | undefined {\r\n const cabinet = {\r\n ...this.cabinet,\r\n ...changes\r\n };\r\n const productLine = this.chainInfo.productLines.find(pl => pl.id === cabinet.productLineId);\r\n return productLine;\r\n }\r\n\r\n getDoorProduct(changes: Partial = {}): IDoorProduct | undefined {\r\n const cabinet = {\r\n ...this.cabinet,\r\n ...changes\r\n };\r\n const door = this.getProductLine(changes)?.doors.find(dp => dp.id === cabinet.doorProductId);\r\n return door;\r\n }\r\n\r\n getSightRect(changes: Partial = {}): IObj2d | undefined {\r\n const cabinet = { ...this.cabinet, ...changes };\r\n if (!cabinet.width)\r\n return undefined;\r\n if (!cabinet.height)\r\n return undefined;\r\n\r\n const gableInfo = this.getGableInfo(changes);\r\n const position = {\r\n x: maxPos(gableInfo.left).x,\r\n y: 0 // TODO account for floor\r\n }\r\n const result = {\r\n position,\r\n size: {\r\n x: Math.abs(gableInfo.right.position.x - position.x),\r\n y: cabinet.height //TODO account for floor and ceiling\r\n }\r\n };\r\n for (let dim of ['x', 'y'] as (keyof IVec2d)[])\r\n console.assert(result.size[dim] >= 0, `SightRect must be non-negative`, {\r\n gableInfo,\r\n position,\r\n result\r\n });\r\n return result;\r\n }\r\n private getDoorBarProduct(doorIndex: number, changes: Partial = {}): IDoorBar | undefined {\r\n const cabinet = {\r\n ...this.cabinet,\r\n ...changes\r\n };\r\n const doorBarId = cabinet.doors[doorIndex]?.barId;\r\n return this.getDoorProduct(changes)?.bars.find(bar => bar.id === doorBarId);\r\n }\r\n\r\n async setProductLine(id: number): Promise {\r\n const newProductLine = this.chainInfo.productLines.find(pl => pl.id === id);\r\n if (!newProductLine)\r\n return failure();\r\n\r\n const resetTopics: ResetTopic[] = [];\r\n\r\n let resetDimensions = false;\r\n if (this.exceedsBounds(this.cabinet.width, newProductLine.minSize.x, newProductLine.maxSize.x))\r\n resetDimensions = true;\r\n if (this.exceedsBounds(this.cabinet.height, newProductLine.minSize.y, newProductLine.maxSize.y))\r\n resetDimensions = true;\r\n if (this.cabinet.depth && !newProductLine.gableProducts.find(gp => gp.size.z === this.cabinet.depth))\r\n resetDimensions = true;\r\n if (resetDimensions)\r\n resetTopics.push(ResetTopic.Dimensions);\r\n\r\n let resetDoors = false;\r\n if (this.cabinet.doorProductId !== null) {\r\n if (!newProductLine.doors.find(door => door.id === this.cabinet.doorProductId)) {\r\n resetDoors = true;\r\n }\r\n }\r\n if (resetDoors)\r\n resetTopics.push(ResetTopic.Doors);\r\n\r\n\r\n if (resetTopics.length > 0) {\r\n\r\n const shouldReset = await this.resetConfirmer(resetTopics);\r\n if (!shouldReset)\r\n return failure();\r\n }\r\n\r\n let changes: Partial = { productLineId: id };\r\n if (resetDimensions) {\r\n changes.width = null;\r\n changes.height = null;\r\n changes.depth = null;\r\n }\r\n this.change(changes);\r\n return success();\r\n }\r\n\r\n\r\n async setCabinetPosition(position: CabinetPosition): Promise {\r\n const changes: Partial = { position: position };\r\n if (position === CabinetPosition.FreeStanding) {\r\n changes.sidePanel = false;\r\n }\r\n this.change(changes);\r\n return success();\r\n }\r\n\r\n async setCabinetWidth(width: number): Promise<{ success: boolean, actualWidth: number }> {\r\n const productLine = this.chainInfo.productLines.find(pl => pl.id === this.cabinet.productLineId);\r\n if (!productLine)\r\n return { success: false, actualWidth: width };\r\n width = clamp(productLine.minSize.x, width, productLine.maxSize.x);\r\n\r\n //TODO check doors\r\n //TODO check interior\r\n\r\n this.change({ width: width });\r\n return { success: true, actualWidth: width };\r\n }\r\n\r\n async setCabinetHeight(height: number): Promise {\r\n const productLine = this.chainInfo.productLines.find(pl => pl.id === this.cabinet.productLineId);\r\n if (!productLine)\r\n return { success: false, actualHeight: height };\r\n height = clamp(productLine.minSize.y, height, productLine.maxSize.y);\r\n\r\n //TODO check doors\r\n //TODO check interior\r\n\r\n this.change({ height });\r\n return { success: true, actualHeight: height };\r\n }\r\n\r\n private updateDoorDimensions(changes: Partial = {}): Door[] {\r\n const result: Door[] = [];\r\n const cabinet = {\r\n ...this.cabinet,\r\n ...changes\r\n };\r\n if (!cabinet.doors.length)\r\n return result;\r\n const doorInfos = this.getDoorInfos(changes);\r\n for (let i = 0; i < doorInfos.length; i++) {\r\n const door = cabinet.doors[i];\r\n const doorInfo = doorInfos[i];\r\n result.push(new Door({\r\n ...door,\r\n size: new Vec2d(doorInfo.size)\r\n }))\r\n }\r\n return result;\r\n }\r\n\r\n getErrorFlags(changes?: Partial): ErrorFlag {\r\n let result = ErrorFlag.None;\r\n if (this.interior.getPulloutViolations().length > 0) {\r\n result |= ErrorFlag.Pullout;\r\n }\r\n if (this.interior.getWallMountViolations().length > 0) {\r\n result |= ErrorFlag.WallMount;\r\n }\r\n if (this.interior.getExceededBounds().length > 0) {\r\n result |= ErrorFlag.ExceedsBounds;\r\n }\r\n return result;\r\n }\r\n\r\n async setCabinetDepth(depth: number): Promise {\r\n //TODO validate\r\n this.change({ depth });\r\n return success();\r\n }\r\n\r\n async setRoof(roof: boolean): Promise {\r\n this.change({ roof: !!roof });\r\n return success();\r\n }\r\n\r\n async setBottom(bottom: boolean): Promise {\r\n this.change({ bottom: !!bottom });\r\n return success();\r\n }\r\n\r\n async setSidePanel(sidePanel: boolean): Promise {\r\n this.change({ sidePanel: !!sidePanel });\r\n return success();\r\n }\r\n\r\n\r\n async setDoorProduct(id: number|null): Promise {\r\n if (this.cabinet.doorProductId !== id) {\r\n\r\n if (this.cabinet.doors.length > 0) {\r\n const answer = await this.resetConfirmer([ResetTopic.Doors])\r\n if (!answer)\r\n return failure();\r\n }\r\n\r\n }\r\n this.change({\r\n doorProductId: id,\r\n doors: [],\r\n doorDampening: undefined\r\n });\r\n return success();\r\n }\r\n\r\n async setNumDoors(numDoors: number): Promise {\r\n\r\n const numDoorChoices = this.getNumDoorChoices();\r\n numDoors = clamp(numDoorChoices.min, numDoors, numDoorChoices.max);\r\n\r\n if (numDoors === this.cabinet.doors.length)\r\n return success();\r\n\r\n const changes: Partial = {};\r\n let doors = this.cabinet.doors;\r\n changes.doors = this.withNumDoors(numDoors, doors);\r\n\r\n //numOverlaps might not be valid\r\n const overlapInfos = this.getOverlapInfos(changes);\r\n if (!overlapInfos.find(oi => oi.numOverlaps === this.cabinet.numDoorOverlaps)) {\r\n changes.numDoorOverlaps = overlapInfos[0].numOverlaps;\r\n }\r\n\r\n this.change(changes);\r\n return success();\r\n }\r\n\r\n async setNumOverlaps(numOverlaps: number): Promise {\r\n\r\n this.change({ numDoorOverlaps: numOverlaps });\r\n return success();\r\n }\r\n\r\n canUseDampening(changes: Partial = {}) {\r\n //TODO implement\r\n return true;\r\n }\r\n\r\n async setUseDamping(use: boolean): Promise {\r\n if (!this.canUseDampening())\r\n return failure();\r\n\r\n this.change({ doorDampening: use });\r\n return success();\r\n }\r\n\r\n async setDoorMaterial(doorIndex: number, materialId: number): Promise {\r\n this.changeDoor(doorIndex, { materialId: materialId });\r\n return success();\r\n }\r\n async setBandMaterial(doorIndex: number, id: number): Promise {\r\n this.changeDoor(doorIndex, { bandMaterialId: id });\r\n return success();\r\n }\r\n\r\n\r\n async setBar(doorIndex: number, barId: number): Promise {\r\n const bar = this.getDoorProduct()?.bars.find(b => b.id === barId);\r\n if (!bar)\r\n return failure();\r\n const door = this.cabinet.doors[doorIndex];\r\n if (!door)\r\n return failure();\r\n const changes: Partial = { barId: barId };\r\n\r\n if (door.bandMaterialId === null && bar.bandHeight !== null) {\r\n const bandMat = this.getBandFillingMaterial(door.bandMaterialId, {});\r\n if (!bandMat)\r\n return failure();\r\n changes.bandMaterialId = bandMat.id;\r\n }\r\n\r\n this.changeDoor(doorIndex, changes);\r\n return success();\r\n }\r\n\r\n getDoorInfos(changes: Partial = {}): DoorInfo[] {\r\n const cabinet = {\r\n ...this.cabinet,\r\n ...changes\r\n };\r\n if (cabinet.doors.length === 0)\r\n return [];\r\n if (!cabinet.width)\r\n throw new Error(\"width not defined\");\r\n if (!cabinet.height)\r\n throw new Error(\"height not defined\");\r\n const doorProduct = this.getDoorProduct(changes);\r\n if (!doorProduct)\r\n throw new Error(\"Door product not defined\");\r\n const sightRect = this.getSightRect(changes);\r\n if (!sightRect)\r\n throw new Error(\"Sight rect not defined\");\r\n const overlapInfo = this.currentOverlapInfo(changes);\r\n if (!overlapInfo)\r\n throw new Error(\"Overlap info not defined\");\r\n\r\n //TODO review Poomas\r\n const doorThickness = 20; //Pooma\r\n const barThickness = 10; //Pooma\r\n const railTrackSpacing = 40; //Pooma\r\n\r\n const totalOverlapWidth = (cabinet.numDoorOverlaps ?? 0) * this.doorOverlapWidth;\r\n const width = (sightRect.size.x + totalOverlapWidth) / cabinet.doors.length;\r\n const roundedWidth = Math.round(width);\r\n const doorSize: IVec3d = {\r\n x: roundedWidth,\r\n y: sightRect.size.y,\r\n z: doorThickness\r\n }; //TODO account for outer gables\r\n for (let dim of ['x', 'y', 'z'] as (keyof IVec3d)[])\r\n console.assert(doorSize[dim] >= 0, `DoorSize should be non-negative`, {\r\n sightRect,\r\n totalOverlapWidth,\r\n doors: cabinet.doors,\r\n doorThickness\r\n });\r\n\r\n let nextDoorPosX = sightRect.position.x;\r\n\r\n const result: DoorInfo[] = [];\r\n for (let doorIndex = 0; doorIndex < cabinet.doors.length; doorIndex++) {\r\n const door = cabinet.doors[doorIndex];\r\n const barProduct = this.getDoorBarProduct(doorIndex);\r\n const fillingMaterial = this.getFillingMaterial(door.materialId, changes);\r\n if (!fillingMaterial)\r\n throw new Error(`Filling material invalid for door ${doorIndex} materialId ${door.materialId}`);\r\n const fillingTexture = fillingMaterial?.textureImageUrl ?? \"\";\r\n const railNumber = overlapInfo.doorPositions[doorIndex];\r\n\r\n if (doorIndex > 0) {\r\n nextDoorPosX += doorSize.x;\r\n {\r\n const overlapsPrevious = (doorIndex === 0)\r\n ? false //first door - no overlap with previous\r\n : overlapInfo.doorPositions[doorIndex] !== overlapInfo.doorPositions[doorIndex - 1]\r\n ;\r\n\r\n if (overlapsPrevious)\r\n nextDoorPosX -= this.doorOverlapWidth;\r\n }\r\n }\r\n const position: IVec3d = {\r\n x: nextDoorPosX,\r\n y: 0,\r\n z: cabinet.depth! - (railNumber * railTrackSpacing) - doorThickness,\r\n };\r\n\r\n //Construct frame elements\r\n let frameElements: FrameElement[];\r\n {\r\n const frame = doorProduct.frame;\r\n const posZ = - (frame.thickness / 2);\r\n frameElements = [\r\n //Top\r\n {\r\n frameName: \"top\",\r\n size: {\r\n x: doorSize.x,\r\n y: frame.heightTop,\r\n z: frame.thickness\r\n },\r\n position: {\r\n x: 0,\r\n y: doorSize.y - frame.heightTop,\r\n z: posZ\r\n },\r\n textureUrl: frame.textureUrl\r\n },\r\n //Bottom\r\n {\r\n frameName: \"bottom\",\r\n size: {\r\n x: doorSize.x,\r\n y: frame.heightBotton,\r\n z: frame.thickness\r\n },\r\n position: {\r\n x: 0,\r\n y: 0,\r\n z: posZ\r\n },\r\n textureUrl: frame.textureUrl\r\n },\r\n //Left\r\n {\r\n frameName: \"left\",\r\n size: {\r\n x: frame.widthSides,\r\n y: doorSize.y,\r\n z: frame.thickness\r\n },\r\n position: {\r\n x: 0,\r\n y: 0,\r\n z: posZ\r\n },\r\n textureUrl: frame.textureUrl\r\n },\r\n //Right\r\n {\r\n frameName: \"right\",\r\n size: {\r\n x: frame.widthSides,\r\n y: doorSize.y,\r\n z: frame.thickness\r\n },\r\n position: {\r\n x: doorSize.x - frame.widthSides,\r\n y: 0,\r\n z: posZ\r\n },\r\n textureUrl: frame.textureUrl\r\n }\r\n ];\r\n }\r\n\r\n\r\n\r\n let barFrameElements: FrameElement[];\r\n let fillingElements: FillingElement[];\r\n if (!barProduct?.bandHeight) {\r\n //use normal bars\r\n\r\n fillingElements = [{\r\n position: {\r\n x: 0,\r\n y: 0,\r\n z: 0\r\n },\r\n size: doorSize,\r\n textureUrl: fillingTexture,\r\n }\r\n ];\r\n\r\n\r\n barFrameElements = barProduct ? range(barProduct.numBars)\r\n .map(barIndex => {\r\n return {\r\n frameName: `bar_${barIndex}` as `bar_${number}`,\r\n textureUrl: barProduct.textureUrl,\r\n position: {\r\n x: 0,\r\n y: doorSize.y * (barIndex + 1) / (barProduct.numBars + 1),\r\n z: doorSize.z\r\n },\r\n size: {\r\n x: doorSize.x,\r\n y: barProduct.barHeight,\r\n z: barThickness\r\n }\r\n };\r\n })\r\n : [];\r\n\r\n\r\n }\r\n else {\r\n //bars and bands\r\n if (barProduct.numBars !== 2)\r\n throw new Error(\"Number of bars other than 2 with bands is not implemented\");\r\n const bandFillingMaterial = this.getBandFillingMaterial(door.bandMaterialId, changes);\r\n if (!bandFillingMaterial)\r\n throw new Error(`invalid band filling texture for door ${doorIndex} bandMaterialId ${door.bandMaterialId}`);\r\n const bandFillingTexture = bandFillingMaterial.textureImageUrl;\r\n const bandHeight = 450;\r\n const bandDepth = 10;\r\n const bandYStart = (doorSize.y / 2) - (bandHeight / 2);\r\n const bandPos = {\r\n x: 0,\r\n y: bandYStart,\r\n z: 0\r\n };\r\n const bandSize = {\r\n x: doorSize.x,\r\n y: bandHeight,\r\n z: bandDepth\r\n };\r\n barFrameElements = [\r\n {\r\n frameName: 'bar_0',\r\n textureUrl: barProduct.textureUrl,\r\n position: {\r\n x: bandPos.x,\r\n y: bandPos.y - (barProduct.barHeight / 2),\r\n z: doorSize.z\r\n },\r\n size: {\r\n x: doorSize.x,\r\n y: barProduct.barHeight,\r\n z: barThickness\r\n }\r\n },\r\n {\r\n frameName: 'bar_1',\r\n textureUrl: barProduct.textureUrl,\r\n position: {\r\n x: bandPos.x,\r\n y: bandPos.y + bandSize.y - (barProduct.barHeight / 2),\r\n z: doorSize.z\r\n },\r\n size: {\r\n x: doorSize.x,\r\n y: barProduct.barHeight,\r\n z: barThickness\r\n }\r\n }\r\n ];\r\n\r\n fillingElements = [\r\n {\r\n position: {\r\n x: 0,\r\n y: 0,\r\n z: 0\r\n },\r\n size: {\r\n x: doorSize.x,\r\n y: bandPos.y,\r\n z: doorSize.z\r\n },\r\n textureUrl: fillingTexture,\r\n },\r\n {\r\n position: bandPos,\r\n size: bandSize,\r\n textureUrl: bandFillingTexture ?? \"\",\r\n },\r\n {\r\n position: {\r\n x: 0,\r\n y: bandPos.y + bandSize.y,\r\n z: 0\r\n },\r\n size: {\r\n x: doorSize.x,\r\n y: bandPos.y,\r\n z: doorSize.z\r\n },\r\n textureUrl: fillingTexture\r\n }\r\n ];\r\n }\r\n\r\n result.push({\r\n size: doorSize,\r\n position,\r\n railNumber,\r\n index: doorIndex,\r\n fillingElements,\r\n frameElements: barFrameElements.concat(frameElements)\r\n });\r\n }\r\n return result;\r\n }\r\n}\r\n\r\n","import { IInteriorProduct, IInteriorProductSubGroup, IVec2d } from \"../../models/IChainInfo\";\r\nimport { add, cheapDist, intersect, IObj2d } from \"../../models/IObj\";\r\nimport { InteriorProductType } from \"../WebApiClient\";\r\nimport { DragInfo, DragService, DragServiceProps } from \"./DragService\";\r\nimport { min } from \"../../util/arraySlice\";\r\nimport { Section } from \"./Section\";\r\n\r\ninterface Pos extends IObj2d {\r\n section: Section;\r\n product: IInteriorProduct;\r\n mouseTarget: IVec2d;\r\n isFlipped: boolean;\r\n}\r\n\r\nexport class DragServiceSide extends DragService {\r\n\r\n private readonly possiblePositions: Pos[];\r\n\r\n constructor(props: DragServiceProps) {\r\n super(props);\r\n\r\n this.possiblePositions = this.getPossiblePositions(props);\r\n if (this.possiblePositions.length === 0) {\r\n console.warn(\"No possible positions\", this);\r\n }\r\n }\r\n\r\n\r\n private getPossiblePositions(props: DragServiceProps) {\r\n const result: Pos[] = [];\r\n for (let sect of this.baseState.sections) {\r\n const product = this.productSubGroup.products.find(p =>\r\n p.defaultSize.x <= sect.size.x\r\n );\r\n if (!product)\r\n continue;\r\n\r\n for (let y = sect.position.y + sect.stepOffset - product.snapOffset; sect.position.y + sect.size.y >= y + product.defaultSize.y; y += sect.stepHeight) {\r\n if (y < sect.position.y)\r\n continue;\r\n\r\n const objSize = product.defaultSize;\r\n\r\n let sides: (\"L\" | \"R\")[];\r\n if (product.productType === InteriorProductType.LeftMount) {\r\n sides = [\"L\"];\r\n }\r\n else if (product.productType === InteriorProductType.RightMount) {\r\n sides = [\"R\"];\r\n }\r\n else if (product.productType === InteriorProductType.LeftOrRightMount) {\r\n sides = [\"L\", \"R\"];\r\n }\r\n else {\r\n sides = [];\r\n }\r\n\r\n for (let side of sides) {\r\n\r\n const objPos = (side === \"L\")\r\n ? { x: sect.position.x, y: y }\r\n : {\r\n x: sect.position.x + sect.size.x - product.defaultSize.x,\r\n y: y\r\n };\r\n\r\n const obj: IObj2d = {\r\n size: objSize,\r\n position: objPos,\r\n };\r\n const collidingObject = this.baseState.otherItems\r\n .filter(i => !(i.product.productSubGroup.productType === InteriorProductType.Module))\r\n .find(otherItem => intersect(obj, otherItem.item))\r\n if (collidingObject) {\r\n continue;\r\n }\r\n result.push({\r\n ...obj,\r\n product: product,\r\n section: sect,\r\n mouseTarget: add(obj.position, props.mouseOffset),\r\n isFlipped: side === \"R\",\r\n });\r\n }\r\n\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n\r\n getDragInfo(cursorModelPos: IVec2d): DragInfo | undefined {\r\n\r\n const pos = min(this.possiblePositions, pos => cheapDist(pos.mouseTarget, cursorModelPos));\r\n if (!pos)\r\n return undefined;\r\n const gable = pos.isFlipped\r\n ? pos.section.rightGable\r\n : pos.section.leftGable\r\n ;\r\n const parentIndexes = gable\r\n ? [gable.item.index]\r\n : [];\r\n\r\n const productMaterial = pos.product.materials.find(m => m.interiorMaterialId === this.cabinet.interiorMaterialId);\r\n const textureUrl = productMaterial?.drawingPath ?? pos.product.textureUrl;\r\n return {\r\n position: pos.position,\r\n productId: pos.product.id,\r\n size: pos.size,\r\n shadows: [],\r\n textureUrl: textureUrl,\r\n isFlipped: pos.isFlipped,\r\n parentIndexes\r\n };\r\n }\r\n\r\n static acceptable(pt: IInteriorProductSubGroup): boolean {\r\n return (\r\n pt.productType === InteriorProductType.LeftMount\r\n || pt.productType === InteriorProductType.RightMount\r\n || pt.productType === InteriorProductType.LeftOrRightMount\r\n );\r\n }\r\n}\r\n","import { IInteriorProduct, IInteriorProductSubGroup, IVec2d } from \"../../models/IChainInfo\";\r\nimport { add, cheapDist, intersect, IObj2d } from \"../../models/IObj\";\r\nimport { min } from \"../../util/arraySlice\";\r\nimport { InteriorProductType } from \"../WebApiClient\";\r\nimport { DragInfo, DragService, DragServiceProps } from \"./DragService\";\r\nimport { Section } from \"./Section\";\r\n\r\ninterface Pos extends IObj2d {\r\n section: Section;\r\n product: IInteriorProduct;\r\n mouseTarget: IVec2d;\r\n}\r\n\r\n\r\nexport class DragServiceSnapLeftAndRight extends DragService {\r\n\r\n private readonly possiblePositions: Pos[];\r\n\r\n constructor(props: DragServiceProps) {\r\n super(props);\r\n\r\n \r\n this.possiblePositions = this.getPossiblePositions(props);\r\n }\r\n\r\n private getPossiblePositions(props: DragServiceProps) {\r\n const result: Pos[] = [];\r\n for (let sect of this.baseState.sections) {\r\n const product = this.productSubGroup.products\r\n .find(p => this.isMatching(p, sect));\r\n if (!product)\r\n continue;\r\n\r\n const sectionResult: Pos[] = [];\r\n for (let y = sect.position.y + sect.stepOffset - product.snapOffset; sect.position.y + sect.size.y >= y + product.defaultSize.y; y += sect.stepHeight) {\r\n if (y < sect.position.y)\r\n continue;\r\n const obj: IObj2d = {\r\n position: { x: sect.position.x, y: y },\r\n size: { x: sect.size.x, y: product.defaultSize.y },\r\n };\r\n const collidingObject = this.baseState.otherItems\r\n .filter(i => !(i.product.productSubGroup.productType === InteriorProductType.Module))\r\n .find(otherItem => intersect(obj, otherItem.item))\r\n if (collidingObject) {\r\n continue;\r\n }\r\n sectionResult.push({\r\n ...obj,\r\n product: product,\r\n section: sect,\r\n mouseTarget: add(obj.position, props.mouseOffset)\r\n });\r\n }\r\n result.push(...sectionResult);\r\n }\r\n return result;\r\n }\r\n\r\n getDragInfo(cursorModelPos: IVec2d): DragInfo | undefined {\r\n\r\n const pos = min(this.possiblePositions, pos => cheapDist(pos.mouseTarget, cursorModelPos));\r\n if (!pos)\r\n return undefined;\r\n const parentIndexes = new Set( [pos.section.leftGable, pos.section.rightGable]\r\n .map(gab => gab?.item.index!)\r\n .filter(i => i !== undefined));\r\n\r\n const productMaterial = pos.product.materials.find(m => m.interiorMaterialId === this.cabinet.interiorMaterialId);\r\n const textureUrl = productMaterial?.drawingPath ?? pos.product.textureUrl;\r\n return {\r\n position: pos.position,\r\n productId: pos.product.id,\r\n size: pos.size,\r\n shadows: [],\r\n textureUrl: textureUrl,\r\n parentIndexes: [...parentIndexes]\r\n };\r\n }\r\n\r\n static acceptable(pt: IInteriorProductSubGroup): boolean {\r\n return (\r\n pt.productType === InteriorProductType.GableShelf\r\n || pt.productType === InteriorProductType.ShelfOrDrawer\r\n || pt.productType === InteriorProductType.ModuleShelf\r\n );\r\n }\r\n\r\n private isMatching(product: IInteriorProduct, section: Section): boolean {\r\n return this.isSizeMatching(product, section)\r\n && this.isTypeMatching(product, section);\r\n }\r\n\r\n private isSizeMatching(product: IInteriorProduct, section: Section): boolean {\r\n const sizeTolerance = 1;\r\n const sizeDifference = Math.abs(product.defaultSize.x - section.size.x);\r\n\r\n if (sizeDifference <= sizeTolerance)\r\n return true;\r\n return product.minSize.x <= section.size.x\r\n && product.maxSize.x >= section.size.x\r\n }\r\n\r\n private isTypeMatching(product: IInteriorProduct, section: Section): boolean {\r\n if (product.productType === InteriorProductType.ShelfOrDrawer)\r\n return true;\r\n if (section.isModule) {\r\n return product.productType === InteriorProductType.ModuleShelf;\r\n }\r\n else {\r\n return product.productType === InteriorProductType.GableShelf;\r\n }\r\n }\r\n}\r\n","import { IInteriorProduct, IInteriorProductSubGroup } from \"../../models/IChainInfo\";\r\nimport { intersect, IObj2d, isInside } from \"../../models/IObj\";\r\nimport { InteriorProductType, IVec2d } from \"../WebApiClient\";\r\nimport { DragInfo, DragService, DragServiceProps } from \"./DragService\";\r\nimport { Section } from \"./Section\";\r\n\r\ninterface Pos {\r\n section: Section;\r\n product: IInteriorProduct;\r\n isValid: boolean;\r\n}\r\n\r\n/**For objects that only fit in top and bottom of sections.\r\n * These items are sold as a top+bottom set, so two items shoulde be displayed, and only one item is listed on the piecelist.\r\n\r\n * A set of top and bottom shelfs. Can only be ordered as a set.\r\n * There should be one item per set, and it should be placed at the top of a section.\r\n * For display purposes, the bottom part of the set should also be displayed on the bottom of visualizations.\r\n * */\r\nexport class DragServiceTopBottom extends DragService {\r\n\r\n private readonly possiblePositions: Pos[];\r\n\r\n constructor(props: DragServiceProps) {\r\n super(props);\r\n this.possiblePositions = this.getPossiblePositions(props);\r\n }\r\n\r\n getDragInfo(cursorModelPos: Readonly, forceCopy: boolean): DragInfo | undefined {\r\n //find the section the cursor is in\r\n const bestPosition = this.possiblePositions.find(pp => isInside(cursorModelPos, pp.section));\r\n if (!bestPosition)\r\n return undefined;\r\n\r\n const itemY = bestPosition.section.position.y + bestPosition.section.size.y - bestPosition.product.defaultSize.y;\r\n\r\n const obj: IObj2d = {\r\n position: {\r\n x: bestPosition.section.position.x,\r\n y: itemY\r\n },\r\n size: {\r\n x: bestPosition.section.size.x,\r\n y: bestPosition.product.defaultSize.y\r\n }\r\n };\r\n if (this.baseState.otherItems.some(otherItem => intersect(obj, otherItem.item))) {\r\n return undefined;\r\n }\r\n\r\n return {\r\n ...obj,\r\n parentIndexes: [bestPosition.section.leftGable?.item.index, bestPosition.section.rightGable?.item.index].filter(idx => idx !== undefined) as number[],\r\n textureUrl: bestPosition.product.textureUrl,\r\n shadows: [],\r\n isFlipped: false,\r\n productId: bestPosition.product.id,\r\n };\r\n }\r\n\r\n private getPossiblePositions(props: DragServiceProps) {\r\n const result: Pos[] = [];\r\n for (let sect of this.baseState.sections) {\r\n if (sect.isModule)\r\n continue;\r\n const product = this.productSubGroup.products.find(p =>\r\n (p.defaultSize.x === sect.size.x\r\n || (p.minSize.x <= sect.size.x && p.maxSize.x >= sect.size.x)\r\n )\r\n );\r\n if (!product)\r\n continue;\r\n result.push({\r\n section: sect,\r\n product,\r\n isValid: true, //TODO find products that intersect\r\n });\r\n \r\n }\r\n return result;\r\n }\r\n\r\n\r\n static acceptable(pt: IInteriorProductSubGroup): boolean {\r\n return pt.productType === InteriorProductType.TopAndBottom;\r\n }\r\n\r\n}\r\n","import { IInteriorProduct, IInteriorProductSubGroup, IVec2d } from \"../../models/IChainInfo\";\r\nimport { add, cheapDist, intersect, IObj2d } from \"../../models/IObj\";\r\nimport { min } from \"../../util/arraySlice\";\r\nimport { InteriorProductType } from \"../WebApiClient\";\r\nimport { DragInfo, DragService, DragServiceProps } from \"./DragService\";\r\nimport { Section } from \"./Section\";\r\n\r\ninterface Pos extends IObj2d {\r\n section: Section;\r\n product: IInteriorProduct;\r\n mouseTarget: IVec2d;\r\n}\r\n\r\nexport class DragServiceTopMount extends DragService{\r\n\r\n private readonly possiblePositions: Pos[];\r\n\r\n constructor(props: DragServiceProps) {\r\n super(props);\r\n\r\n this.possiblePositions = this.getPossiblePositions(props);\r\n if (this.possiblePositions.length === 0) {\r\n console.warn(\"No possible positions\", this);\r\n }\r\n\r\n }\r\n\r\n\r\n private getPossiblePositions(props: DragServiceProps): Pos[] {\r\n\r\n const result: Pos[] = [];\r\n for (let sect of this.baseState.sections) {\r\n const product = this.productSubGroup.products.find(p =>\r\n p.defaultSize.x <= sect.size.x\r\n );\r\n if (!product)\r\n continue;\r\n \r\n const sectTopBottomY = sect.position.y + sect.size.y - DragService.moduleMaterialThickness;\r\n const sectMiddleX = sect.position.x + (sect.size.x / 2);\r\n const obj: IObj2d = {\r\n size: product.defaultSize,\r\n position: {\r\n x: sectMiddleX - (product.defaultSize.x / 2),\r\n y: sectTopBottomY - product.defaultSize.y\r\n }\r\n };\r\n\r\n const collidingObject = this.baseState.otherItems\r\n .filter(i => i.product.productSubGroup.productType === InteriorProductType.Module)\r\n .find(otherItem => intersect(obj, otherItem.item))\r\n if (collidingObject) {\r\n continue;\r\n }\r\n result.push({\r\n ...obj,\r\n product: product,\r\n section: sect,\r\n mouseTarget: add(obj.position, props.mouseOffset),\r\n });\r\n }\r\n return result;\r\n }\r\n\r\n getDragInfo(cursorModelPos: IVec2d): DragInfo | undefined {\r\n\r\n const pos = min(this.possiblePositions, pos => cheapDist(pos.mouseTarget, cursorModelPos));\r\n if (!pos)\r\n return undefined;\r\n const parentIndexes = new Set([pos.section.leftGable, pos.section.rightGable]\r\n .map(gab => gab?.item.index!)\r\n .filter(i => i !== undefined));\r\n const productMaterial = pos.product.materials.find(m => m.interiorMaterialId === this.cabinet.interiorMaterialId);\r\n const textureUrl = productMaterial?.drawingPath ?? pos.product.textureUrl;\r\n return {\r\n position: pos.position,\r\n productId: pos.product.id,\r\n size: pos.size,\r\n shadows: [],\r\n textureUrl: textureUrl,\r\n isFlipped: false,\r\n parentIndexes: [...parentIndexes]\r\n };\r\n }\r\n\r\n static acceptable(pt: IInteriorProductSubGroup): boolean {\r\n\r\n return pt.productType === InteriorProductType.TopMount;\r\n }\r\n}\r\n","\r\nexport class OverlapInfo {\r\n\r\n constructor(doorPositions: number[], openingWidth: number, overlapWidth: number) {\r\n this.doorPositions = doorPositions.slice(); //copy array\r\n this.numOverlaps = OverlapInfo.getNumOverlaps(doorPositions);\r\n const totalDoorWidth = openingWidth + (this.numOverlaps * overlapWidth);\r\n const numDoors = doorPositions.length;\r\n this.doorWidth = (numDoors > 0)\r\n ? totalDoorWidth / numDoors\r\n : 0;\r\n\r\n }\r\n readonly doorPositions: number[];\r\n readonly numOverlaps: number;\r\n readonly doorWidth: number;\r\n\r\n private static getNumOverlaps(railPositions: number[]): number {\r\n let result = 0;\r\n let prevPos = railPositions[0];\r\n for (let pos of railPositions) {\r\n if (pos !== prevPos)\r\n result++;\r\n prevPos = pos;\r\n }\r\n return result;\r\n }\r\n}\r\n","\r\nexport default function range(start: number, end: number): number[];\r\nexport default function range(end: number): number[];\r\nexport default function range(start: number, end: number | undefined = undefined): number[] {\r\n if (end === undefined) {\r\n end = start;\r\n start = 0;\r\n }\r\n const result = []\r\n for (let i = start; i < end; i++) {\r\n result.push(i);\r\n }\r\n\r\n return result;\r\n}\r\n","import { ICabinetWithDimensions } from \"../models/IcabinetWithDimensions\";\r\nimport { ICabinet } from \"./WebApiClient\";\r\n\r\n\r\nexport function hasProductLine(cabinet: ICabinet): cabinet is (ICabinet & { productLineId: number }) {\r\n return notNullish(cabinet.productLineId);\r\n}\r\n\r\nexport function hasDimensions(cabinet: ICabinet): cabinet is ICabinetWithDimensions {\r\n return notNullish(cabinet.width)\r\n && notNullish(cabinet.height)\r\n && notNullish(cabinet.depth);\r\n}\r\nexport function hasDoorProduct(cabinet: ICabinet): cabinet is (ICabinet & { doorProductId: number }) {\r\n return notNullish(cabinet.doorProductId);\r\n}\r\n\r\nfunction notNullish (t: T|null|undefined): t is T{\r\n return t !== null && t !== undefined;\r\n}\r\nfunction nullish(t: T | null | undefined): t is null | undefined {\r\n return t === null || t === undefined;\r\n}\r\n\r\n\r\nexport function assertHasDimensions(cabinet: ICabinet): ICabinetWithDimensions {\r\n if (nullish(cabinet.width)\r\n || nullish(cabinet.height)\r\n || nullish(cabinet.depth))\r\n throw new Error(\"assertion failed\");\r\n return cabinet as any as ICabinetWithDimensions;\r\n}\r\n","import { ICabinetWithDimensions } from '../../models/IcabinetWithDimensions';\r\nimport { IInteriorProductSubGroup, IVec2d } from '../../models/IChainInfo';\r\nimport { IInteriorItem} from '../WebApiClient';\r\nimport { CabinetService } from './CabinetService';\r\nimport { DragServiceProps, IDragService } from './DragService';\r\nimport { DragServiceGable } from './DragServiceGable';\r\nimport { DragServiceSide } from './DragServiceSide';\r\nimport { DragServiceSnapLeftAndRight } from './DragServiceSnapLeftAndRight';\r\nimport { DragServiceTopBottom } from './DragServiceTopBottom';\r\nimport { DragServiceTopMount } from './DragServiceTopMount';\r\n\r\nexport { CabinetService, ResetTopic } from './CabinetService';\r\nexport type { ResetConfirmer, ChangeResult } from './CabinetService'\r\nexport type { IDragService, DragInfo } from './DragService';\r\n\r\nexport type { PlaceItemInfo } from './InteriorService';\r\n\r\n\r\n\r\nexport function getDragService(\r\n cabinet: ICabinetWithDimensions,\r\n cabinetService: CabinetService,\r\n productSubGroup: IInteriorProductSubGroup,\r\n item: IInteriorItem | undefined,\r\n cursorModelPos: IVec2d,\r\n mouseOffset: IVec2d,\r\n): IDragService {\r\n const props: DragServiceProps = {\r\n cabinet,\r\n cabinetService,\r\n productSubGroup,\r\n item,\r\n cursorModelPos,\r\n mouseOffset\r\n }\r\n\r\n const dragServices = [\r\n DragServiceGable,\r\n DragServiceSnapLeftAndRight,\r\n DragServiceSide,\r\n DragServiceTopMount,\r\n DragServiceTopBottom\r\n ];\r\n\r\n for (let service of dragServices) {\r\n if (service.acceptable(productSubGroup)) {\r\n return new service(props);\r\n }\r\n }\r\n\r\n console.error(\"Could not find acceptable drag service\", productSubGroup);\r\n throw new Error(\"Not implemented - Could not find acceptable drag service\"); //TODO implement\r\n}\r\n","\r\nexport interface Translatable {\r\n readonly translationKey: string;\r\n readonly translationDefault: string;\r\n};\r\nexport type UnknownTranslationCollection = {\r\n [key: string]: {\r\n defaultValue: string;\r\n reported: boolean;\r\n };\r\n};\r\ntype TranslationArgs = { [argName: string]: string };\r\n\r\ntype TranslatableTranslator = (key: string, defaultValue: string, args?: TranslationArgs) => string;\r\ntype StringTranslator = (o: Translatable, args?: TranslationArgs) => string;\r\nexport type Translator = TranslatableTranslator & StringTranslator;\r\n\r\nfunction fillTemplate(template: string, args: { [argName: string]: string }): string {\r\n let result = template;\r\n for (let key in args) {\r\n result = result.replaceAll(\"{\" + key + \"}\", args[key]);\r\n }\r\n return result;\r\n}\r\n\r\nexport class TranslationService {\r\n\r\n constructor(\r\n private readonly translations: { [key: string]: string | undefined } | undefined,\r\n private readonly showTranslationKeys: boolean\r\n ) {\r\n\r\n }\r\n\r\n static unknownTranslations: UnknownTranslationCollection = {};\r\n\r\n translate(translatable: Translatable, args?: TranslationArgs): string;\r\n translate(key: string, defaultValue: string, args?: TranslationArgs): string;\r\n translate(a: string | Translatable, b: string | TranslationArgs | undefined, c?: TranslationArgs): string {\r\n\r\n let key;\r\n let defaultValue;\r\n let args;\r\n if (typeof a === \"string\") {\r\n key = a;\r\n defaultValue = b as string;\r\n args = c as TranslationArgs | undefined;\r\n }\r\n else {\r\n key = a.translationKey;\r\n defaultValue = a.translationDefault;\r\n args = b as TranslationArgs | undefined;\r\n }\r\n if (!args) {\r\n args = {} as TranslationArgs;\r\n }\r\n\r\n let result = this.getValue(key, defaultValue);\r\n result = fillTemplate(result, args);\r\n return result;\r\n }\r\n\r\n private getValue(key: string, defaultValue: string) {\r\n key = key.toLowerCase();\r\n if (this.showTranslationKeys) {\r\n return \"<\" + key + \">\";\r\n }\r\n if (this.translations) {\r\n let result = this.translations[key];\r\n if (result)\r\n return result;\r\n\r\n this.reportMissing(key, defaultValue);\r\n this.translations[key] = defaultValue;\r\n return defaultValue;\r\n }\r\n return defaultValue;\r\n }\r\n\r\n private reportMissing(key: string, defaultValue: string) {\r\n const existingReport = TranslationService.unknownTranslations[key];\r\n if (existingReport)\r\n return;\r\n TranslationService.unknownTranslations[key] = {\r\n defaultValue,\r\n reported: false,\r\n };\r\n }\r\n\r\n}\r\n\r\nlet numTranslations = 0;\r\n\r\nconst NullTranslator: Translator = (a: string | Translatable, b?: string | TranslationArgs, c?: TranslationArgs) => {\r\n let defaultValue;\r\n let args;\r\n if (typeof a === \"string\") {\r\n defaultValue = b as string;\r\n args = c as TranslationArgs | undefined;\r\n }\r\n else {\r\n defaultValue = a.translationDefault;\r\n args = b as TranslationArgs | undefined;\r\n }\r\n if (!args) {\r\n args = {} as TranslationArgs;\r\n }\r\n\r\n if (++numTranslations % 100 === 1) {\r\n console.log(\"Using NullTranslator\");\r\n }\r\n return fillTemplate(defaultValue, args);\r\n}\r\n\r\nexport { NullTranslator }\r\n","import React from \"react\";\r\nimport { IChainInfo } from \"../../models/IChainInfo\";\r\nimport { CabinetService } from \"../../services/CabinetService\";\r\nimport { INavService, NavService } from \"../../services/NavService\";\r\nimport { NullTranslator, Translator } from \"../../services/TranslationService\";\r\nimport { ICabinet } from \"../../services/WebApiClient\";\r\n\r\n\r\nexport interface CommonEditorProps {\r\n readonly navService: INavService;\r\n readonly cabinet: ICabinet;\r\n readonly cabinetService: CabinetService;\r\n readonly translator: Translator;\r\n}\r\n\r\nconst chainInfo: IChainInfo = {\r\n chainId: -1,\r\n productLines: [],\r\n logoUrl: undefined,\r\n cssUrl: undefined,\r\n extraProducts: [],\r\n interiorMaterials: [],\r\n};\r\n\r\nconst cabinet = CabinetService.createDefaultCabinet(chainInfo);\r\n\r\nconst cabinetService = new CabinetService(chainInfo,\r\n (t) => Promise.resolve(true),\r\n cabinet,\r\n c => true\r\n);\r\n\r\nconst navService = new NavService(cabinetService);\r\n\r\nconst EditorContext = React.createContext({\r\n cabinet,\r\n cabinetService,\r\n navService,\r\n translator: NullTranslator\r\n});\r\n\r\n\r\nexport { EditorContext };\r\n","import { useContext } from \"react\";\r\nimport { EditorNavPage, NavPage } from \"../../services/NavService\";\r\nimport { EditorContext } from \"../EditorCommon/EditorContext\";\r\nimport \"./EditorNav.scss\"\r\n\r\n\r\n/** Goes inside a TopNav for navigating the editor */\r\nexport function EditorNav(props: {\r\n currentPage: EditorNavPage;\r\n nextButton?: JSX.Element;\r\n}) {\r\n\r\n const ec = useContext(EditorContext);\r\n\r\n\r\n function navigate(np: EditorNavPage) {\r\n ec.navService.canNavigateTo(np)\r\n && ec.navService.navigate(np);\r\n }\r\n\r\n function getClassName(np: EditorNavPage): string {\r\n const classes = [\r\n \"nav-link\",\r\n ];\r\n if (np === props.currentPage) {\r\n classes.push(\"active\");\r\n }\r\n\r\n if (!ec.navService.canNavigateTo(np)) {\r\n classes.push(\"disabled\");\r\n }\r\n if (np.hasErrors(ec.cabinetService)) {\r\n classes.push(\"error\");\r\n }\r\n\r\n return classes.join(\" \");\r\n }\r\n\r\n\r\n const prevPage = ec.navService.prev(props.currentPage);\r\n const prevValid = ec.navService.canNavigateTo(prevPage);\r\n\r\n const nextPage = ec.navService.next(props.currentPage);\r\n const nextValid = ec.navService.canNavigateTo(nextPage);\r\n\r\n const nextButton = props.nextButton ?? (\r\n \r\n );\r\n\r\n return (\r\n \r\n );\r\n}\r\n\r\n","import React from \"react\";\r\nimport { State } from \"../util/useState2\";\r\n\r\nexport interface DebugContextProps {\r\n displayExtendedProductInfo: boolean;\r\n}\r\n\r\nexport const DebugContext = React.createContext>({\r\n value: {\r\n displayExtendedProductInfo: false,\r\n },\r\n set: () => { throw new Error(\"This debug context does not work\"); }\r\n});\r\n\r\n\r\n","import { UserRight } from \"../services/WebApiClient\";\r\n\r\nexport default class User {\r\n constructor(\r\n public readonly id: string,\r\n public readonly username: string,\r\n public readonly name: string,\r\n public readonly userRights: UserRight[],\r\n ) {\r\n\r\n }\r\n}\r\n","import User from \"../models/User\";\r\nimport { ApiException, ILoginResponse, LoginClient, LoginRequest, CreateUserRequest } from \"./WebApiClient\";\r\n\r\nexport interface ILoginService {\r\n readonly http: IHttpService;\r\n readonly currentUser?: Readonly;\r\n login(username: string, password: string): Promise;\r\n logout(): void;\r\n createCustomer(\r\n username: string,\r\n password: string,\r\n name: string,\r\n phoneNumber: string,\r\n email:string\r\n ): Promise;\r\n}\r\n\r\nexport class LoginService implements ILoginService {\r\n private static readonly userTokenKey = \"userToken\";\r\n\r\n private loginClient: LoginClient;\r\n private storage: Storage;\r\n\r\n constructor(\r\n private readonly onUserChange: (u: User | undefined) => void,\r\n ) {\r\n this.storage = window.sessionStorage;\r\n this.http = new AuthorizationHttpService();\r\n this.handleLoginResponseChanged(false);\r\n this.loginClient = new LoginClient(undefined, this.http);\r\n }\r\n \r\n private setLoginResponse(lr: ILoginResponse|undefined) {\r\n if (lr){\r\n this.storage.setItem(LoginService.userTokenKey, JSON.stringify(lr));\r\n }\r\n else{\r\n this.storage.removeItem(LoginService.userTokenKey);\r\n }\r\n this.handleLoginResponseChanged(true);\r\n }\r\n\r\n private handleLoginResponseChanged(doCallback: boolean) {\r\n const lr = this.loadLoginResponse();\r\n let user;\r\n if (lr) {\r\n this.http.token = lr.token;\r\n user = new User(\r\n lr.userId,\r\n lr.username,\r\n lr.name,\r\n lr.userRights);\r\n }\r\n else {\r\n this.http.token = undefined;\r\n user = undefined;\r\n }\r\n if (doCallback) {\r\n this.onUserChange(user);\r\n }\r\n }\r\n\r\n readonly http: AuthorizationHttpService;\r\n currentUser?: User;\r\n\r\n async login(username: string, password: string): Promise {\r\n try {\r\n const response = await this.loginClient.login(new LoginRequest({ username, password }));\r\n this.setLoginResponse(response);\r\n return true;\r\n } catch (ex) {\r\n this.setLoginResponse(undefined);\r\n if (ex instanceof ApiException) {\r\n if (ex.status === 401 || ex.status === 403) {\r\n //wrong username of password\r\n return false;\r\n }\r\n }\r\n throw ex;\r\n }\r\n }\r\n\r\n logout() {\r\n this.setLoginResponse(undefined);\r\n }\r\n\r\n private loadLoginResponse(): ILoginResponse | undefined {\r\n const storage = this.storage;\r\n const tokenJson = storage.getItem(LoginService.userTokenKey);\r\n if (!tokenJson)\r\n return undefined;\r\n return JSON.parse(tokenJson);\r\n }\r\n\r\n async createCustomer(\r\n username: string,\r\n password: string,\r\n name: string,\r\n phoneNumber: string,\r\n email: string\r\n ): Promise {\r\n const request = new CreateUserRequest({\r\n username,\r\n password,\r\n email,\r\n name,\r\n phoneNumber\r\n });\r\n\r\n const response = await this.loginClient.createCustomer(request);\r\n this.setLoginResponse(response.login);\r\n return true;\r\n }\r\n}\r\n\r\nexport interface IHttpService {\r\n fetch(url: RequestInfo, init?: RequestInit): Promise\r\n}\r\nexport class AuthorizationHttpService implements IHttpService {\r\n\r\n constructor(private readonly parent: IHttpService = window) {\r\n\r\n }\r\n\r\n token?: string;\r\n\r\n async fetch(url: RequestInfo, init: RequestInit = {}): Promise {\r\n init = { ...init };\r\n const headers = new Headers(init.headers);\r\n if (this.token) {\r\n\r\n headers.set(\"Authorization\", `Bearer ${this.token}`);\r\n }\r\n else {\r\n headers.delete(\"Authorization\");\r\n }\r\n init.headers = headers;\r\n return await this.parent.fetch(url, init);\r\n }\r\n\r\n}\r\n","import React from \"react\";\r\nimport User from \"../models/User\";\r\nimport { ILoginService, LoginService } from \"../services/LoginService\";\r\nimport { INavService } from \"../services/NavService\";\r\nimport { NullTranslator, Translator } from \"../services/TranslationService\";\r\n\r\n\r\nexport const TopNavContext = React.createContext({\r\n currentUser: undefined as (User | undefined),\r\n loginService: new LoginService(u => true) as ILoginService,\r\n translator: NullTranslator as Translator,\r\n navService: undefined as (INavService | undefined),\r\n logoUrl: undefined as (string | undefined),\r\n});\r\n","import React from \"react\";\r\nimport { NullTranslator, Translator } from \"../services/TranslationService\";\r\n\r\nexport interface TranslationContextProps {\r\n readonly translator: Translator;\r\n\r\n};\r\nexport const TranslationContext = React.createContext({\r\n translator: NullTranslator\r\n});\r\n","import React from \"react\";\r\nimport { ILoginService, LoginService } from '../../services/LoginService'\r\n\r\nexport interface LoginProps {\r\n loginService: ILoginService;\r\n}\r\n\r\nexport const LoginContext = React.createContext({\r\n loginService: new LoginService(u => true)\r\n})\r\n","import React, { useContext, useState } from \"react\";\r\nimport { TranslationContext } from \"../../contexts/TranslationContext\";\r\nimport { LoginContext } from \"./LoginContext\";\r\n\r\n\r\nexport function CreateUserForm(props: {\r\n onUserCreated: () => void\r\n}) {\r\n const lc = useContext(LoginContext);\r\n const tc = useContext(TranslationContext);\r\n\r\n const [isWorking, setIsWorking] = useState(false);\r\n const [username, setUsername] = useState(\"\");\r\n const [password, setPassword] = useState(\"\");\r\n const [name, setName] = useState(\"\");\r\n const [phoneNumber, setPhoneNumber] = useState(\"+45\");\r\n const [email, setEmail] = useState(\"\");\r\n\r\n const canCreate = !!username\r\n && !!password\r\n && phoneNumber.length > 3\r\n && !isWorking\r\n ;\r\n\r\n\r\n async function createUser(evt: React.FormEvent) {\r\n evt.preventDefault();\r\n if (!canCreate)\r\n return;\r\n let success = false;\r\n try {\r\n setIsWorking(true);\r\n success = await lc.loginService.createCustomer(username,\r\n password,\r\n name,\r\n phoneNumber,\r\n email\r\n );\r\n if (success)\r\n props.onUserCreated();\r\n }\r\n finally {\r\n if (!success)\r\n setIsWorking(false);\r\n }\r\n\r\n }\r\n\r\n const tcUsername = tc.translator(\"login modal username\", \"Brugernavn\");\r\n const tcPassword = tc.translator(\"login modal password\", \"Password\");\r\n const tcName = tc.translator(\"login modal name\", \"Navn\");\r\n const tcPhone = tc.translator(\"login modal phoneNumber\", \"Telefonnummer\");\r\n const tcEmail = tc.translator(\"login modal email\", \"E-mail\");\r\n\r\n return (\r\n
\r\n
\r\n

\r\n {tc.translator(\"create user header\", \"Opret ny bruger\")}\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 setUsername(evt.target.value)}\r\n />\r\n
\r\n \r\n \r\n setPassword(evt.target.value)}\r\n name=\"password\" />\r\n
\r\n \r\n \r\n setName(evt.target.value)}\r\n />\r\n
\r\n \r\n \r\n setPhoneNumber(evt.target.value)}\r\n />\r\n
\r\n \r\n \r\n setEmail(evt.target.value)}\r\n />\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n );\r\n}\r\n","import React, { useContext, useState } from \"react\";\r\nimport { TranslationContext } from \"../../contexts/TranslationContext\";\r\nimport { LoginContext } from \"./LoginContext\";\r\n\r\n\r\nexport function LoginForm(props: {\r\n onLoggedIn: () => void\r\n}) {\r\n\r\n const lc = useContext(LoginContext);\r\n const tc = useContext(TranslationContext);\r\n\r\n const [isWorking, setIsWorking] = useState(false);\r\n const [username, setUsername] = useState(\"\");\r\n const [password, setPassword] = useState(\"\");\r\n\r\n const isLoginEnabled = !!username && !!password && !isWorking;\r\n\r\n async function login(evt: React.FormEvent) {\r\n evt.preventDefault();\r\n if (isWorking)\r\n return;\r\n if (!isLoginEnabled)\r\n return;\r\n let success = false;\r\n try {\r\n setIsWorking(true);\r\n success = await lc.loginService.login(username, password);\r\n if (success)\r\n props.onLoggedIn()\r\n }\r\n finally {\r\n if (!success)\r\n setIsWorking(false);\r\n }\r\n }\r\n\r\n return (\r\n
\r\n
\r\n

\r\n {tc.translator(\"login modal login header\", \"Log ind med eksisterende bruger\")}\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 setUsername(evt.target.value)}\r\n />\r\n
\r\n \r\n \r\n setPassword(evt.target.value)}\r\n name=\"password\" />\r\n
\r\n
\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 { Modal } from \"react-bootstrap\";\r\nimport { TranslationContext } from \"../../contexts/TranslationContext\";\r\nimport { CreateUserForm } from './CreateUserForm';\r\nimport { LoginForm } from './LoginForm';\r\nimport \"./LoginModal.scss\"\r\n\r\nexport function LoginModal(props: {\r\n onLoggedIn: () => void,\r\n onClose?: () => void\r\n}) {\r\n\r\n\r\n const tc = useContext(TranslationContext);\r\n\r\n return (\r\n \r\n \r\n \r\n {tc.translator(\"login modal header\", \"Login eller opret bruger\")}\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 { useContext, useMemo } from 'react';\r\nimport { LoginContext } from \"../components/EditorCommon/LoginContext\";\r\n\r\n\r\n/**\r\n * Creates a new instance of the WebApiClient with the correct context\r\n * @param clientConstructor\r\n */\r\nexport function useClient(clientConstructor: { new (baseUrl?: string, http?: { fetch(url: RequestInfo, init?: RequestInit): Promise }): T }): T {\r\n\r\n\r\n const loginContext = useContext(LoginContext);\r\n return useMemo(() =>\r\n new clientConstructor(undefined, loginContext.loginService.http),\r\n [loginContext.loginService.http, clientConstructor]\r\n );\r\n}\r\n","import React, { useState, useContext } from 'react';\r\nimport { Modal } from 'react-bootstrap';\r\nimport { TopNavContext } from '../../contexts/TopNavContext';\r\nimport { TranslationContext } from '../../contexts/TranslationContext';\r\nimport { ChangePasswordRequest, LoginClient } from '../../services/WebApiClient';\r\nimport { useClient } from '../../util/useClient';\r\n\r\nexport function PasswordEditModal(props: {\r\n onClose: () => void\r\n}) {\r\n const [oldPassword, setOldPassword] = useState(\"\");\r\n const [newPassword, setNewPassword] = useState(\"\");\r\n const [isBusy, setIsBusy] = useState(false);\r\n\r\n\r\n const tc = useContext(TranslationContext);\r\n let topNavContext = useContext(TopNavContext);\r\n const client = useClient(LoginClient);\r\n\r\n async function submit(evt: React.FormEvent) {\r\n evt.preventDefault();\r\n setIsBusy(true);\r\n try {\r\n await client.changePassword(new ChangePasswordRequest({\r\n oldPassword,\r\n newPassword\r\n }));\r\n props.onClose();\r\n }\r\n catch (ex) {\r\n //TODO Handle error\r\n } finally {\r\n setIsBusy(false);\r\n }\r\n }\r\n\r\n const isEnabled = !isBusy && !!newPassword;\r\n\r\n return (\r\n \r\n \r\n

{tc.translator(\"change password modal header\", \"Skift password\")}

\r\n
\r\n
\r\n \r\n \r\n
\r\n \r\n setOldPassword(evt.target.value)}\r\n />\r\n
\r\n
\r\n \r\n setNewPassword(evt.target.value)}\r\n />\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n );\r\n}\r\n","import React, { useContext, useState } from \"react\";\r\nimport { NavDropdown } from \"react-bootstrap\";\r\nimport { Link } from \"react-router-dom\";\r\nimport { DebugContext } from \"../../contexts/DebugContext\";\r\nimport { TopNavContext } from \"../../contexts/TopNavContext\";\r\nimport User from \"../../models/User\";\r\nimport { INavService, NavPage } from \"../../services/NavService\";\r\nimport { Translator } from \"../../services/TranslationService\";\r\nimport { UserRight } from \"../../services/WebApiClient\";\r\nimport { LoginModal } from \"../EditorCommon/LoginModal\";\r\nimport { PasswordEditModal } from \"../PasswordEditModal/PasswordEditModal\";\r\n\r\n\r\n\r\nexport function TopNav(props: {\r\n children?: React.ReactNode;\r\n header: string;\r\n}) {\r\n let context = useContext(TopNavContext);\r\n const [showModal, setShowModal] = useState(undefined);\r\n async function login(evt: React.MouseEvent) {\r\n evt.preventDefault();\r\n setShowModal(\"login\");\r\n }\r\n\r\n let rightSide = (context.currentUser)\r\n ? \r\n : (\r\n \r\n { context.translator(\"topbar login button\", \"login\")}\r\n \r\n );\r\n\r\n return (\r\n \r\n );\r\n}\r\n\r\n\r\nfunction RightSideWithLogin(props: {\r\n user: User,\r\n showModal: undefined | \"login\" | \"changePassword\",\r\n setShowModal: (m: undefined | \"login\" | \"changePassword\") => void\r\n}) {\r\n let context = useContext(TopNavContext);\r\n const debugContext = useContext(DebugContext);\r\n function logout() {\r\n context.loginService.logout();\r\n context.navService?.navigate(NavPage.ProductLine);\r\n }\r\n function startChangePassword() {\r\n props.setShowModal(\"changePassword\");\r\n }\r\n\r\n const elements: JSX.Element[] = [];\r\n\r\n {\r\n const userElements = getDropdownItems(NavPage.User.Pages,\r\n props.user,\r\n context.navService,\r\n context.translator\r\n );\r\n\r\n if (userElements.length > 0) {\r\n elements.push(...userElements);\r\n elements.push();\r\n }\r\n }\r\n {\r\n\r\n const adminElements = getDropdownItems(NavPage.Admin.Pages,\r\n props.user,\r\n context.navService,\r\n context.translator\r\n );\r\n\r\n if (adminElements.length > 0) {\r\n elements.push(...adminElements);\r\n elements.push();\r\n }\r\n }\r\n\r\n {\r\n const debugElements: JSX.Element[] = [];\r\n\r\n if (props.user.userRights.find(ur => ur === UserRight.EditProducts)) {\r\n debugElements.push(\r\n debugContext.set({\r\n ...debugContext.value,\r\n displayExtendedProductInfo: !(debugContext.value.displayExtendedProductInfo)\r\n })}\r\n key=\"debug-ext-product-info\"\r\n >\r\n {debugContext.value.displayExtendedProductInfo && \"✔\"}\r\n {context.translator(\"topbar menu debug extended product info\", \"Vis udvidet produkt-info\")}\r\n \r\n );\r\n }\r\n\r\n if (debugElements.length > 0) {\r\n elements.push(...debugElements);\r\n elements.push()\r\n }\r\n }\r\n\r\n\r\n return (\r\n <>\r\n
    \r\n
  • \r\n \r\n {elements}\r\n\r\n \r\n {context.translator(\"topbar setting change password\", \"Skift password...\")}\r\n\r\n \r\n \r\n {context.translator(\"topbar setting logout\", \"Log ud\")}\r\n \r\n \r\n
  • \r\n
\r\n \r\n );\r\n}\r\n\r\nfunction getDropdownItems(navPages: NavPage[], user: User, navService: INavService | undefined, translator: Translator): JSX.Element[] {\r\n const result = navPages\r\n .filter(page =>\r\n !page.requiredRights\r\n || page.requiredRights.every(requiredRight => user.userRights.find(ur => ur === requiredRight))\r\n )\r\n .map(page => (\r\n navService?.navigate(page)}\r\n key={page.url}\r\n >\r\n {translator(page)}\r\n \r\n ));\r\n return result;\r\n}\r\n","import { NavPage } from \"../../services/NavService\";\r\nimport { EditorNav } from \"../EditorNav/EditorNav\";\r\nimport { TopNav } from \"../TopNav/TopNav\";\r\nimport \"../../style/editor.scss\";\r\nimport \"./ProductLineEditor.scss\";\r\nimport { EditorContext } from \"../EditorCommon/EditorContext\";\r\nimport { useContext } from \"react\";\r\nimport { Card } from \"react-bootstrap\";\r\n\r\nexport function ProductLineEditor() {\r\n const ec = useContext(EditorContext);\r\n const selectProductLine = async (id: number) => {\r\n const result = await ec.cabinetService.setProductLine(id);\r\n if (result.success) {\r\n ec.navService.navigateNext(NavPage.ProductLine,true);\r\n }\r\n };\r\n\r\n const productLines = ec.cabinetService.chainInfo.productLines.map(pl => {\r\n const border = pl.id === ec.cabinet.productLineId ? \"primary\" : undefined;\r\n return (\r\n selectProductLine(pl.id)}\r\n key={pl.id}\r\n >\r\n {pl.imageUrl && }\r\n \r\n {pl.name}\r\n {pl.description && \r\n {pl.description}\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
\r\n {productLines}\r\n
\r\n
\r\n\r\n \r\n
\r\n );\r\n}\r\n","import { useContext, useState } from \"react\";\r\nimport { EditorContext } from \"../EditorCommon/EditorContext\";\r\n\r\n\r\nexport function CabinetWidthSetter(props: React.HTMLProps) {\r\n\r\n const ec = useContext(EditorContext);\r\n const [widthStr, setWidthStr] = useState(ec.cabinet.width?.toString() ?? \"\");\r\n async function setWidth() {\r\n const width = parseInt(widthStr)\r\n const result = await ec.cabinetService.setCabinetWidth(width);\r\n if (result.success)\r\n setWidthStr(result.actualWidth.toString());\r\n }\r\n\r\n const text = ec.translator(\"dimensions width placeholder\", \"Bredde\");\r\n\r\n return (\r\n setWidthStr(evt.target.value)}\r\n onBlur={setWidth}\r\n title={text}\r\n placeholder={text}\r\n min={ec.cabinetService.getProductLine()?.minSize.x}\r\n max={ec.cabinetService.getProductLine()?.maxSize.x}\r\n />\r\n );\r\n\r\n}\r\n","import { useContext, useState } from \"react\";\r\nimport { EditorContext } from \"../EditorCommon/EditorContext\";\r\n\r\n\r\nexport function CabinetHeightSetter(props: React.HTMLProps) {\r\n\r\n const ec = useContext(EditorContext);\r\n\r\n const [heightStr, setHeightStr] = useState(ec.cabinet.height?.toString() ?? \"\");\r\n async function setHeight() {\r\n const height = parseInt(heightStr)\r\n const result = await ec.cabinetService.setCabinetHeight(height);\r\n if (result.success) {\r\n setHeightStr(result.actualHeight.toString());\r\n }\r\n else {\r\n setHeightStr(ec.cabinet.height?.toString() ?? \"\");\r\n }\r\n }\r\n\r\n const text = ec.translator(\"dimensions height placeholder\", \"Højde\")\r\n\r\n return (\r\n setHeightStr(evt.target.value)}\r\n onBlur={setHeight}\r\n title={text}\r\n placeholder={text}\r\n min={ec.cabinetService.getProductLine()?.minSize.x}\r\n max={ec.cabinetService.getProductLine()?.maxSize.x}\r\n />\r\n \r\n );\r\n}\r\n","import { useContext, useState } from \"react\";\r\nimport { EditorContext } from \"../EditorCommon/EditorContext\";\r\n\r\n\r\nexport function CabinetDepthSetter(props: React.HTMLProps) {\r\n\r\n const ec = useContext(EditorContext);\r\n\r\n const [depthStr, setDepthStr] = useState(ec.cabinet.depth?.toString() ?? \"\");\r\n function setDepth(evt: React.ChangeEvent) {\r\n const _depthStr = evt.target.value;\r\n const depth = parseInt(_depthStr);\r\n if (!Number.isNaN(depth)) {\r\n setDepthStr(_depthStr);\r\n ec.cabinetService.setCabinetDepth(depth);\r\n }\r\n }\r\n const depths = ec.cabinetService.getProductLine()?.gableProducts.map((gp) => (\r\n \r\n ));\r\n\r\n\r\n return (\r\n \r\n {depths}\r\n \r\n );\r\n}\r\n","import { useContext } from \"react\";\r\nimport { Card } from \"react-bootstrap\";\r\nimport { CabinetPosition } from \"../../services/WebApiClient\";\r\nimport { EditorContext } from \"../EditorCommon/EditorContext\";\r\n\r\ninterface Position {\r\n key: CabinetPosition;\r\n name: string;\r\n image: string;\r\n}\r\n\r\nexport function CabinetPositionSetter() {\r\n\r\n const ec = useContext(EditorContext);\r\n\r\n\r\n\r\n const positions: Position[] = [\r\n {\r\n key: CabinetPosition.FreeStanding,\r\n name: ec.translator(\"cabPos freeStanding\", \"Fritstående\"),\r\n image: \"/positions/nosides.png\",\r\n },\r\n {\r\n key: CabinetPosition.WallLeft,\r\n name: ec.translator(\"cabPos wallLeft\", \"Væg Venstre\"),\r\n image: \"/positions/leftside.png\",\r\n },\r\n {\r\n key: CabinetPosition.WallRight,\r\n name: ec.translator(\"cabPos wallRight\", \"Væg Højre\"),\r\n image: \"/positions/rightside.png\",\r\n },\r\n {\r\n key: CabinetPosition.WallBoth,\r\n name: ec.translator(\"cabPos wallBoth\", \"Væg Begge Sider\"),\r\n image: \"/positions/bothsides.png\",\r\n },\r\n ];\r\n\r\n\r\n const posElements = positions.map(p => {\r\n const border = ec.cabinet.position === p.key ? \"primary\" : undefined;\r\n return (\r\n ec.cabinetService.setCabinetPosition(p.key)}\r\n border={border}\r\n key={p.key}\r\n >\r\n \r\n \r\n {p.name}\r\n \r\n \r\n )\r\n });\r\n\r\n return (\r\n
\r\n
\r\n {posElements}\r\n
\r\n
\r\n );\r\n\r\n}\r\n","import React, { useContext } from \"react\";\r\nimport { NavPage } from \"../../services/NavService\";\r\nimport { EditorNav } from \"../EditorNav/EditorNav\";\r\nimport { TopNav } from \"../TopNav/TopNav\";\r\nimport \"../../style/editor.scss\";\r\nimport \"./DimensionsEditor.scss\";\r\nimport { CabinetWidthSetter } from \"./CabinetWidthSetter\";\r\nimport { CabinetHeightSetter } from \"./CabinetHeightSetter\";\r\nimport { CabinetDepthSetter } from \"./CabinetDepthSetter\";\r\nimport { EditorContext } from \"../EditorCommon/EditorContext\";\r\nimport { CabinetPositionSetter } from \"./CabinetPositionSetter\";\r\nimport { OverlayTrigger, Popover, PopoverContent, PopoverTitle } from \"react-bootstrap\";\r\nimport { CabinetPosition } from \"../../services/WebApiClient\";\r\n\r\n\r\n\r\nexport function DimensionsEditor(props: {}) {\r\n\r\n const ec = useContext(EditorContext);\r\n\r\n const sidePanelOverlay = (\r\n \r\n \r\n {ec.translator(\"interior side panel help title\", \"Anslag\")}\r\n \r\n \r\n {ec.translator(\r\n \"interior side panel help text\",\r\n \"Anslagslisten bruges hvis væggen er skæv eller ujævn.\\nKan med fordel bruges ved murstensvæg for at skåne kanten på døren.\")}\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\n
\r\n \r\n
\r\n \r\n
\r\n
mm
\r\n
\r\n
\r\n
\r\n\r\n
\r\n \r\n
\r\n \r\n
\r\n
mm
\r\n
\r\n
\r\n
\r\n\r\n
\r\n \r\n
\r\n \r\n
\r\n
mm
\r\n
\r\n
\r\n
\r\n\r\n
\r\n \r\n
    \r\n
  • ec.cabinetService.setSidePanel(true)}\r\n tabIndex={0}\r\n >\r\n {ec.translator(\"dimensions sidepanel on\", \"Anslag\")}\r\n
  • \r\n\r\n
  • ec.cabinetService.setSidePanel(false)}\r\n tabIndex={0}\r\n >\r\n {ec.translator(\"dimensions sidepanel off\", \"Ingen Anslag\")}\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\nfunction classes(classNames: { [className: string]: any }): string {\r\n const activeClasses: string[] = [];\r\n for (let className in classNames) {\r\n const isActive = classNames[className];\r\n if (isActive) {\r\n activeClasses.push(className);\r\n }\r\n }\r\n const result = activeClasses.join(\" \");\r\n return result;\r\n}\r\n","import { useHistory } from \"react-router-dom\";\r\nimport { Translator } from \"../services/TranslationService\";\r\n\r\n\r\nexport function NotFound(props: {\r\n translator: Translator,\r\n}) {\r\n\r\n const history = useHistory();\r\n\r\n return (\r\n
\r\n

{props.translator(\"notFound header\", \"Siden blev ikke fundet\")}

\r\n\r\n \r\n
\r\n );\r\n}\r\n","import { useContext } from \"react\";\r\nimport { NavPage } from \"../../services/NavService\";\r\nimport { EditorNav } from \"../EditorNav/EditorNav\";\r\nimport { TopNav } from \"../TopNav/TopNav\";\r\nimport \"../../style/editor.scss\";\r\nimport \"./DoorTypeEditor.scss\"\r\nimport { EditorContext } from \"../EditorCommon/EditorContext\";\r\nimport { Card } from \"react-bootstrap\";\r\n\r\nexport default function DoorTypeEditor() {\r\n\r\n const ec = useContext(EditorContext);\r\n\r\n async function setDoorProduct(id: number|null) {\r\n const result = await ec.cabinetService.setDoorProduct(id);\r\n if (result.success) {\r\n ec.navService.navigateNextAvailable(NavPage.DoorTypes);\r\n }\r\n }\r\n\r\n const doorTypes = ec.cabinetService.getProductLine()?.doors.map(dp => {\r\n const border = (dp.id === ec.cabinet.doorProductId) ? \"primary\" : undefined;\r\n return (\r\n setDoorProduct(dp.id)}\r\n border={border}\r\n key={dp.id}>\r\n {dp.imageUrl && }\r\n \r\n {dp.name}\r\n {dp.description && (\r\n \r\n {dp.description}\r\n \r\n )}\r\n \r\n \r\n )\r\n });\r\n\r\n const noDoor = (\r\n setDoorProduct(null)}\r\n key={-1}>\r\n \r\n \r\n {ec.translator(\"doorTypeEditor noDoor title\", \"Ingen døre\")}\r\n \r\n {ec.translator(\"doorTypeEditor noDoor description\", \"En løsning uden døre, kun med indretning og gavle.\")}\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
\r\n\r\n
\r\n {doorTypes?.concat(noDoor)}\r\n
\r\n
\r\n \r\n
\r\n );\r\n}\r\n","import { IObj2d, IObj3d } from \"../models/IObj\";\r\nimport { IVec2d, IVec3d } from \"../services/WebApiClient\";\r\n\r\n\r\nexport type SvgSize = { width: number; height: number; };\r\nexport type SvgPos = { x: number, y: number };\r\n\r\nexport class FrontPosConverter {\r\n\r\n constructor(private readonly cabinetHeight: number) { }\r\n size(size: IVec2d): SvgSize {\r\n return {\r\n width: size.x,\r\n height: size.y\r\n };\r\n }\r\n pos(pos: IVec2d, size: IVec2d = { x: 0, y: 0 }): SvgPos {\r\n return {\r\n x: pos.x,\r\n y: this.cabinetHeight - pos.y - size.y\r\n };\r\n }\r\n\r\n obj(obj: IObj2d): SvgPos & SvgSize {\r\n return {\r\n ...this.size(obj.size),\r\n ...this.pos(obj.position, obj.size)\r\n };\r\n }\r\n\r\n reversePos(pos: SvgPos): IVec2d {\r\n return {\r\n x: pos.x,\r\n y: this.cabinetHeight - pos.y\r\n };\r\n }\r\n\r\n getFlipTransformString(obj: IObj2d): string {\r\n const svgObj = this.obj(obj);\r\n return `translate(${2 * svgObj.x + svgObj.width}, 0) scale(-1,1)`\r\n }\r\n\r\n}\r\n\r\nexport class TopPosConverter {\r\n\r\n size(size: IVec3d): SvgSize {\r\n return {\r\n width: size.x,\r\n height: size.z\r\n };\r\n }\r\n\r\n pos(pos: IVec3d, size: IVec3d): SvgPos {\r\n return {\r\n x: pos.x,\r\n y: pos.z\r\n };\r\n }\r\n\r\n obj(obj: IObj3d): SvgPos & SvgSize {\r\n return {\r\n ...this.size(obj.size),\r\n ...this.pos(obj.position, obj.size)\r\n };\r\n }\r\n}\r\n","import React from 'react';\r\n\r\nexport interface DrawContextProps {\r\n readonly preserveAspectRatio: string;\r\n}\r\n\r\nexport const DrawContext = React.createContext({\r\n preserveAspectRatio: \"xMidYMid slice\",\r\n});\r\n\r\n\r\n","\r\n\r\nexport const ImageOutline = {\r\n stroke: \"black\",\r\n fill: \"none\",\r\n className: \"image-outline\",\r\n}\r\n","import { useContext } from \"react\";\r\nimport { add, IObj2d } from \"../../models/IObj\";\r\nimport { hasDimensions } from \"../../services/CabinetValidator\";\r\nimport { FrontPosConverter } from \"../../util/PosConverter\";\r\nimport { DrawContext } from \"../EditorCommon/DrawContext\";\r\nimport { CommonEditorProps, EditorContext } from \"../EditorCommon/EditorContext\";\r\nimport { ImageOutline } from \"../EditorCommon/ImageOutline\";\r\n\r\nconst minFrameDisplaySize = 2;\r\n\r\nexport function DoorImageFront(props: {\r\n onClickDoor?: ((doorIndex: number) => void),\r\n}) {\r\n const ec = useContext(EditorContext);\r\n const drawContext = useContext(DrawContext);\r\n\r\n const cabinet = ec.cabinet;\r\n if (!hasDimensions(cabinet))\r\n throw new Error(\"dimensions not defined\");\r\n\r\n const convert = new FrontPosConverter(cabinet.height!);\r\n\r\n\r\n const doorInfos = ec.cabinetService.getDoorInfos()\r\n .sort((a, b) => a.railNumber - b.railNumber); //sort by railNumber, so the inner doors are drawn first\r\n\r\n const doorGroups = doorInfos.map((door) => {\r\n\r\n\r\n const fillings = door.fillingElements.map((filling, fillingIndex) => {\r\n return (\r\n \r\n \r\n \r\n );\r\n });\r\n\r\n const frames = door.frameElements.map((frame, frameIndex) => {\r\n var size = {\r\n x: Math.max(minFrameDisplaySize, frame.size.x),\r\n y: Math.max(minFrameDisplaySize, frame.size.y),\r\n };\r\n return (\r\n \r\n \r\n \r\n );\r\n });\r\n\r\n //display info about damping\r\n const dampingStatus = ec.cabinetService.getDampingStatus(door.index);\r\n\r\n function getDampingProps() {\r\n switch (dampingStatus) {\r\n case \"notAvailableOnDoorType\":\r\n return undefined;\r\n case \"tooNarrow\":\r\n return undefined;\r\n //return {\r\n // text: ec.translator(\"door image front damping too narrow\", \"Denne dør er for\\nsmal til at installere\\ndæmper\"),\r\n // width: 360,\r\n // height: 190\r\n //};\r\n case \"deactivated\":\r\n return undefined;\r\n //return {\r\n // text: ec.translator(\"door image front damping deactivated\", \"Ingen dæmpning\"),\r\n // width: 360,\r\n // height: 60\r\n //};\r\n case \"activated\":\r\n return {\r\n text: ec.translator(\"door image front damping activated\", \"Dæmpning\"),\r\n width: 250,\r\n height: 60\r\n };\r\n \r\n }\r\n }\r\n const dampingProps = getDampingProps();\r\n const doorMidX = door.position.x + (door.size.x / 2);\r\n const dampingInfo = (dampingProps)\r\n ? (\r\n \r\n \r\n {dampingProps.text}\r\n \r\n \r\n ): undefined;\r\n\r\n //only display overlay if there's a click-action\r\n const overlay = props.onClickDoor ? (\r\n props.onClickDoor?.(door.index)}\r\n />\r\n ) : undefined;\r\n\r\n return (\r\n \r\n {fillings}\r\n \r\n {frames}\r\n {dampingInfo}\r\n {overlay}\r\n \r\n );\r\n });\r\n\r\n\r\n\r\n\r\n return (\r\n \r\n {doorGroups}\r\n \r\n );\r\n}\r\n\r\nexport module DoorImageFront {\r\n export function boundingBox(ec: CommonEditorProps): IObj2d {\r\n const cabinet = ec.cabinet;\r\n if (!hasDimensions(cabinet))\r\n throw new Error(\"dimensions not defined\");\r\n const mainBox: IObj2d = {\r\n position: { x: 0, y: 0 },\r\n size: { x: cabinet.width, y: cabinet.height }\r\n }\r\n return mainBox;\r\n }\r\n}\r\n","import { useContext } from \"react\";\r\nimport { boundingBoxO2, IObj2d } from \"../../models/IObj\";\r\nimport { hasDimensions } from \"../../services/CabinetValidator\";\r\nimport { TopPosConverter } from \"../../util/PosConverter\";\r\nimport { CommonEditorProps, EditorContext } from \"../EditorCommon/EditorContext\";\r\n\r\n\r\nexport function DoorImageTop() {\r\n const ec = useContext(EditorContext);\r\n\r\n\r\n if (!hasDimensions(ec.cabinet))\r\n throw new Error(\"dimensions not defined\");\r\n\r\n const convert = new TopPosConverter();\r\n\r\n const doors = ec.cabinetService.getDoorInfos();\r\n const doorGroups = doors.map(door => (\r\n \r\n \r\n \r\n ));\r\n\r\n return (\r\n \r\n {doorGroups}\r\n \r\n );\r\n}\r\n\r\n\r\nexport module DoorImageTop {\r\n export function boundingBox(ec: CommonEditorProps): IObj2d {\r\n\r\n const doors = ec.cabinetService.getDoorInfos();\r\n const doorTopPoss = doors.map(door => ({\r\n position: { x: door.position.x, y: door.position.z },\r\n size: { x: door.size.x, y: door.size.z }\r\n }));\r\n return boundingBoxO2(...doorTopPoss);\r\n }\r\n}\r\n","import { useContext } from \"react\";\r\nimport { GableSide } from \"../../models/GableSide\";\r\nimport { GableType } from \"../../models/GableType\";\r\nimport { hasDimensions } from \"../../services/CabinetValidator\";\r\nimport { FrontPosConverter } from \"../../util/PosConverter\";\r\nimport { DrawContext } from \"../EditorCommon/DrawContext\";\r\nimport { EditorContext } from \"../EditorCommon/EditorContext\";\r\nimport { ImageOutline } from \"../EditorCommon/ImageOutline\";\r\n\r\n\r\nexport function GableImage(props: {\r\n onClick?: (() => void),\r\n side: GableSide,\r\n}) {\r\n\r\n const ec = useContext(EditorContext);\r\n const drawContext = useContext(DrawContext);\r\n\r\n const cabinet = ec.cabinet;\r\n if (!hasDimensions(cabinet))\r\n throw new Error(\"dimensions not defined\");\r\n\r\n const gableInfo = ec.cabinetService.getGableInfo();\r\n\r\n const convert = new FrontPosConverter(cabinet.height!);\r\n\r\n const side = props.side === GableSide.Left\r\n ? gableInfo.left\r\n : gableInfo.right;\r\n if (side.type === GableType.None)\r\n return null;\r\n\r\n\r\n const matId = props.side === GableSide.Left\r\n ? cabinet.leftGableMaterialId\r\n : cabinet.rightGableMaterialId;\r\n const materials = ec.cabinetService.getGableMaterials(props.side);\r\n const material = materials?.find(mat => mat.id === matId);\r\n\r\n return (\r\n props.onClick?.()}\r\n >\r\n \r\n \r\n \r\n );\r\n\r\n}\r\n\r\n","import \"./DoorImage.scss\";\r\nimport { hasDimensions } from \"../../services/CabinetValidator\";\r\nimport { DoorImageFront } from \"./DoorImageFront\";\r\nimport { DoorImageTop } from \"./DoorImageTop\";\r\nimport { useContext } from \"react\";\r\nimport { EditorContext } from \"../EditorCommon/EditorContext\";\r\nimport { GableSide } from \"../../models/GableSide\";\r\nimport { GableImage } from \"./GableImage\";\r\nimport { boundingBoxO2, moveObj } from \"../../models/IObj\";\r\nimport { IVec2d } from \"../../services/WebApiClient\";\r\n\r\ntype SvgProps = React.SVGProps;\r\n\r\ntype OverriddenSvgProps = Pick;\r\ntype NonOverriddenSvgProperties = Omit;\r\n\r\n\r\nexport function DoorImage(props: NonOverriddenSvgProperties & {\r\n onClickDoor?: ((doorIndex: number) => void),\r\n onClickGable?: ((gableSide: GableSide) => void),\r\n}) {\r\n const { onClickDoor, onClickGable, className, ...rest } = props;\r\n const ec = useContext(EditorContext);\r\n const cabinet = ec.cabinet;\r\n if (!hasDimensions(cabinet))\r\n throw new Error(\"dimensions not defined\");\r\n\r\n const paddingBetweenImages = 60;\r\n\r\n const doorInfo = ec.cabinetService.getDoorInfos();\r\n const doorMinZ = doorInfo.length\r\n ? Math.min(...doorInfo.map(di => di.position.z))\r\n : 0;\r\n\r\n const topImageOffset = {\r\n x: 0,\r\n y: cabinet.height + (2 * paddingBetweenImages) - doorMinZ,\r\n };\r\n\r\n const viewBoxDimensions = boundingBoxO2(\r\n DoorImageFront.boundingBox(ec),\r\n moveObj(DoorImageTop.boundingBox(ec), topImageOffset),\r\n );\r\n\r\n function toTransformString(offset: IVec2d): string {\r\n return `translate( ${offset.x} ${offset.y} )`\r\n }\r\n\r\n\r\n return (\r\n \r\n onClickGable(GableSide.Left)) : undefined}\r\n side={GableSide.Left}\r\n />\r\n onClickGable(GableSide.Right)) : undefined}\r\n side={GableSide.Right}\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, { useContext } from \"react\";\r\nimport Modal from \"react-bootstrap/Modal\";\r\nimport Button from \"react-bootstrap/Button\";\r\nimport { EditorContext } from \"./EditorContext\";\r\nimport { Card } from \"react-bootstrap\";\r\n\r\n\r\nexport function MaterialSelectorModal(props: {\r\n materials: T[],\r\n onClose: (() => void),\r\n onSelect: ((mat: T) => void),\r\n currentId?: number,\r\n}) {\r\n\r\n const ec = useContext(EditorContext);\r\n\r\n \r\n return (\r\n \r\n \r\n \r\n {ec.translator(\"material-selector modal header\", \"Vælg materiale\")}\r\n \r\n \r\n\r\n \r\n
\r\n {props.materials.map(mat => {\r\n const border = mat.id === props.currentId\r\n ? \"primary\"\r\n : undefined;\r\n return (\r\n
\r\n props.onSelect(mat)}\r\n className=\"h-100\"\r\n border={border}\r\n >\r\n {mat.sampleImageUrl && }\r\n \r\n \r\n {mat.name}\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, { useContext, useState } from \"react\";\r\nimport { EditorContext } from \"./EditorContext\";\r\nimport { MaterialSelectorModal } from \"./MaterialSelectorModal\";\r\nimport \"./MaterialSelector.scss\";\r\nimport { Card } from \"react-bootstrap\";\r\n\r\n\r\nexport function MaterialSelector(props: {\r\n materials: T[],\r\n currentId?: number,\r\n onSelect: ((mat: T) => void),\r\n header: string,\r\n}) {\r\n\r\n const ec = useContext(EditorContext);\r\n\r\n const [showMaterialModal, setShowMaterialModal] = useState(false);\r\n\r\n function closeModal() {\r\n setShowMaterialModal(false);\r\n }\r\n function openModal() {\r\n setShowMaterialModal(true);\r\n }\r\n function selectMat(mat: T) {\r\n closeModal();\r\n props.onSelect(mat);\r\n }\r\n\r\n const currentMaterial = props.materials.find(m => m.id === props.currentId);\r\n const bgImage = currentMaterial?.sampleImageUrl ?? undefined;\r\n const matName = currentMaterial?.name\r\n ?? ec.translator(\"material-selector unknown name\", \"Vælg materiale\");\r\n\r\n\r\n return (\r\n <>\r\n \r\n {props.header && {props.header} }\r\n {bgImage && }\r\n \r\n \r\n {matName}\r\n \r\n \r\n \r\n {showMaterialModal && (\r\n \r\n )}\r\n \r\n );\r\n}\r\n","import { useContext, useState } from \"react\";\r\nimport range from \"../../util/range\";\r\nimport { EditorContext } from \"../EditorCommon/EditorContext\";\r\n\r\n\r\nexport function DoorNumSetter(props: Exclude, { value: any, onchange: any }>) {\r\n const ec = useContext(EditorContext);\r\n\r\n\r\n const [numDoorsStr, setNumDoorsStr] = useState(ec.cabinet.doors.length.toString());\r\n\r\n async function setNumDoors(evt: React.ChangeEvent) {\r\n const newValStr = evt.target.value;\r\n const newVal = parseInt(newValStr);\r\n const result = await ec.cabinetService.setNumDoors(newVal);\r\n if (!result.success)\r\n return;\r\n\r\n setNumDoorsStr(newValStr);\r\n }\r\n\r\n\r\n const doorChoices = ec.cabinetService.getNumDoorChoices();\r\n function doorChoiceTranslator(n: number) {\r\n return ec.translator(\"doorEditor numDoors option\", \"{doors} Døre\", { doors: n.toString() });\r\n }\r\n const numDoorChoices = range(doorChoices.min, doorChoices.max + 1)\r\n .map(n => );\r\n\r\n\r\n return (\r\n \r\n \r\n );\r\n\r\n}\r\n","import { useContext, useState } from \"react\";\r\nimport { OverlapInfo } from \"../../models/OverlapInfo\";\r\nimport { EditorContext } from \"../EditorCommon/EditorContext\";\r\n\r\nexport function DoorOverlapSetter(props: Exclude, { value: any, onChange: any }>) {\r\n const ec = useContext(EditorContext);\r\n\r\n\r\n const [str, setStr] = useState(ec.cabinet.numDoorOverlaps?.toString());\r\n\r\n async function setDoorOverlaps(evt: React.ChangeEvent) {\r\n const newValStr = evt.target.value;\r\n const newVal = parseInt(newValStr);\r\n const result = await ec.cabinetService.setNumOverlaps(newVal);\r\n if (!result.success)\r\n return;\r\n\r\n setStr(newValStr);\r\n }\r\n\r\n const overlapInfos = ec.cabinetService.getOverlapInfos();\r\n function optionTranslator(oi: OverlapInfo) {\r\n return ec.translator(\"doorEditor selector numOverlaps\", \"{overlaps} Overlap\", { overlaps: oi.numOverlaps.toString() });\r\n }\r\n const options = overlapInfos\r\n .map(oi => );\r\n\r\n return (\r\n \r\n\r\n );\r\n\r\n}\r\n","import { useContext } from \"react\";\r\nimport { EditorContext } from \"../EditorCommon/EditorContext\";\r\n\r\nexport function UseDamperSetter(props: Exclude, {type: any, onChange: any, checked: any}>) {\r\n const ec = useContext(EditorContext);\r\n\r\n async function setUseDamper(evt: React.ChangeEvent) {\r\n const use = evt.target.checked;\r\n const result = await ec.cabinetService.setUseDamping(use);\r\n if (!result.success)\r\n return;\r\n }\r\n\r\n return (\r\n \r\n \r\n );\r\n}\r\n","import React, { useContext } from \"react\";\r\nimport { GableSide } from \"../../models/GableSide\";\r\nimport { GableType } from \"../../models/GableType\";\r\nimport { EditorContext } from \"../EditorCommon/EditorContext\";\r\nimport { MaterialSelector } from \"../EditorCommon/MaterialSelector\";\r\nimport { DoorNumSetter } from \"./DoorNumSetter\";\r\nimport { DoorOverlapSetter } from \"./DoorOverlapSetter\";\r\nimport { UseDamperSetter } from \"./UseDamperSetter\";\r\n\r\nexport function AllDoorsEditor() {\r\n const ec = useContext(EditorContext);\r\n\r\n const doorProduct = ec.cabinetService.getDoorProduct();\r\n const supportsDamping = ec.cabinetService.supportsDoorDamping(doorProduct);\r\n const gableInfo = ec.cabinetService.getGableInfo();\r\n\r\n return (\r\n
    \r\n {doorProduct &&\r\n
  • \r\n
    \r\n \r\n \r\n
    \r\n
  • \r\n }\r\n\r\n {doorProduct &&\r\n
  • \r\n
    \r\n \r\n \r\n
    \r\n
  • \r\n }\r\n\r\n {supportsDamping && (\r\n
  • \r\n
    \r\n \r\n \r\n\r\n
    \r\n
  • \r\n )}\r\n\r\n {(gableInfo.left.type !== GableType.None) && (\r\n
  • \r\n
    \r\n ec.cabinetService.setGableMaterialId(mat.id, GableSide.Left)}\r\n currentId={ec.cabinet.leftGableMaterialId ?? undefined}\r\n />\r\n
    \r\n
  • \r\n )}\r\n\r\n\r\n {(gableInfo.right.type !== GableType.None) && (\r\n
  • \r\n
    \r\n ec.cabinetService.setGableMaterialId(mat.id, GableSide.Right)}\r\n currentId={ec.cabinet.rightGableMaterialId ?? undefined}\r\n />\r\n
    \r\n
  • \r\n )}\r\n\r\n
    \r\n \r\n {ec.translator(\"doorEditor allDors door help header\", \"Tip\")}\r\n \r\n
    \r\n {ec.translator(\"doorEditor allDors door help text\", \"Klik på dørene på tegningen for at ændre farver og sprosser\")}\r\n
    \r\n\r\n
\r\n );\r\n}\r\n","import { useContext } from \"react\";\r\nimport { EditorContext } from \"../EditorCommon/EditorContext\";\r\n\r\nexport function BarCountSelector(props: { doorIndex: number }) {\r\n\r\n const ec = useContext(EditorContext);\r\n\r\n const display = ec.cabinetService.getDoorProduct()?.bars.length ?? 0 > 1;\r\n if (!display)\r\n return null;\r\n\r\n const options = ec.cabinetService.getDoorProduct()?.bars\r\n .map(bar => (\r\n \r\n ));\r\n\r\n if (!options || options.length < 2)\r\n return null;\r\n\r\n function onChange(evt: React.ChangeEvent) {\r\n const barId = parseInt(evt.target.value);\r\n ec.cabinetService.setBar(props.doorIndex, barId);\r\n }\r\n\r\n return (\r\n
\r\n \r\n \r\n
\r\n )\r\n}\r\n","import { useContext } from \"react\";\r\nimport { IMaterial } from \"../../services/WebApiClient\";\r\nimport { distinct } from \"../../util/distinct\";\r\nimport { EditorContext } from \"../EditorCommon/EditorContext\";\r\nimport { MaterialSelector } from \"../EditorCommon/MaterialSelector\";\r\nimport { BarCountSelector } from \"./BarCountSelector\";\r\n\r\n\r\nexport function SingleDoorEditor(props: {\r\n doorIndex: number,\r\n onClose: (() => void)\r\n}) {\r\n const ec = useContext(EditorContext);\r\n\r\n const door = ec.cabinet.doors[props.doorIndex];\r\n if (!door) {\r\n props.onClose();\r\n return null;\r\n }\r\n const doorProduct = ec.cabinetService.getDoorProduct()\r\n if (!doorProduct) {\r\n props.onClose();\r\n return null;\r\n }\r\n const barProduct = door.barId ? ec.cabinetService.getDoorBar(door.barId, {}) : undefined;\r\n\r\n function setDoorMaterial(mat: IMaterial) {\r\n ec.cabinetService.setDoorMaterial(props.doorIndex, mat.id);\r\n }\r\n function setBandMaterial(mat: IMaterial) {\r\n ec.cabinetService.setBandMaterial(props.doorIndex, mat.id);\r\n }\r\n\r\n let bandMaterial = undefined;\r\n if (barProduct?.bandHeight !== null && doorProduct.bandMaterials.length > 0) {\r\n bandMaterial = (\r\n
  • \r\n \r\n
  • \r\n );\r\n }\r\n\r\n const barCountSelector = ;\r\n let barCount = undefined;\r\n if (barCountSelector) {\r\n barCount = (\r\n
  • \r\n {barCountSelector}\r\n
  • \r\n );\r\n }\r\n const doorSizes = doorProduct.doorSizes\r\n .filter(ds => ds.min.x <= door.size.x\r\n && ds.max.x >= door.size.x\r\n && ds.min.y <= door.size.y\r\n && ds.max.y >= door.size.y\r\n );\r\n const materials = distinct(doorSizes.map(ds => ds.material), mat => mat.id);\r\n\r\n\r\n\r\n return (\r\n <>\r\n

    \r\n {ec.translator(\"doors editor header\", \"Dør {index}\", { index: (props.doorIndex + 1).toString() })}\r\n

    \r\n
      \r\n
    • \r\n \r\n
    • \r\n {barCount}\r\n {bandMaterial}\r\n\r\n
    \r\n \r\n );\r\n}\r\n","\r\nexport function distinct(arr: TArr[], keyFunc: ((t: TArr) => number)): TArr[] {\r\n const result: TArr[] = [];\r\n const keys: { [k: number]: true } = {};\r\n for (let item of arr) {\r\n const key = keyFunc(item);\r\n if (keys[key])\r\n continue;\r\n keys[key] = true;\r\n result.push(item);\r\n }\r\n return result;\r\n}\r\n","import { useContext } from \"react\";\r\nimport { GableSide } from \"../../models/GableSide\";\r\nimport { GableType } from \"../../models/GableType\";\r\nimport { IMaterial } from \"../../services/WebApiClient\";\r\nimport { EditorContext } from \"../EditorCommon/EditorContext\";\r\nimport { MaterialSelector } from \"../EditorCommon/MaterialSelector\";\r\n\r\n\r\nexport function SingleGableEditor(props: {\r\n gableSide: GableSide,\r\n onClose?: (() => void)\r\n}) {\r\n\r\n const ec = useContext(EditorContext);\r\n\r\n var materials = ec.cabinetService.getGableMaterials(props.gableSide);\r\n var currentId = props.gableSide === GableSide.Left\r\n ? ec.cabinet.leftGableMaterialId\r\n : ec.cabinet.rightGableMaterialId;\r\n\r\n const gableInfo = ec.cabinetService.getGableInfo();\r\n const side = props.gableSide === GableSide.Left\r\n ? gableInfo.left\r\n : gableInfo.right;\r\n\r\n function setGableMaterial(mat: IMaterial) {\r\n ec.cabinetService.setGableMaterialId(mat.id, props.gableSide);\r\n }\r\n\r\n return (\r\n
    \r\n

    \r\n {side.type === GableType.Gable\r\n ? ec.translator(\"doors gable header gable\", \"Gavl\")\r\n : ec.translator(\"doors gable header sidePanel\", \"Anslag\")}\r\n

    \r\n \r\n
    \r\n );\r\n}\r\n","import React, { useContext, useState } from \"react\";\r\nimport { NavPage } from \"../../services/NavService\";\r\nimport { DoorImage } from \"./DoorImage\";\r\nimport { EditorNav } from \"../EditorNav/EditorNav\";\r\nimport { TopNav } from \"../TopNav/TopNav\";\r\nimport { AllDoorsEditor } from \"./AllDoorsEditor\";\r\nimport { SingleDoorEditor } from \"./SingleDoorEditor\";\r\nimport \"../../style/editor.scss\";\r\nimport { GableSide } from \"../../models/GableSide\";\r\nimport { SingleGableEditor } from \"./SingleGableEditor\";\r\nimport { EditorContext } from \"../EditorCommon/EditorContext\";\r\n\r\n\r\ntype EditorType =\r\n { type: \"door\", doorIndex: number } //show a door editor\r\n | { type: \"gable\", gableSide: GableSide } //show a gable editor\r\n | undefined; //Don't show an editor\r\n\r\nexport function DoorEditor() {\r\n\r\n const ec = useContext(EditorContext);\r\n\r\n const [showEditor, setShowEditor] = useState(undefined);\r\n\r\n function onClickDoor(doorIndex: number) {\r\n setShowEditor({ type: \"door\", doorIndex: doorIndex });\r\n }\r\n function onClickGable(gableSide: GableSide) {\r\n setShowEditor({ type: \"gable\", gableSide: gableSide })\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 {showEditor?.type === \"door\" && (\r\n setShowEditor(undefined)}\r\n />\r\n )}\r\n {showEditor?.type === \"gable\" && (\r\n setShowEditor(undefined)}\r\n />\r\n )}\r\n
    \r\n\r\n \r\n
    \r\n\r\n );\r\n}\r\n","import Modal from \"react-bootstrap/Modal\";\r\nimport Button from \"react-bootstrap/Button\";\r\nimport { Translator } from \"../../services/TranslationService\";\r\nimport { ResetTopic } from \"../../services/CabinetService\";\r\n\r\nexport function ResetConfirmModal(props: {\r\n onAnswer: (a: boolean) => void,\r\n translator: Translator,\r\n topics: ResetTopic[],\r\n\r\n}) {\r\n\r\n //const topicItems = [ResetTopic.Doors, ResetTopic.Dimensions, ResetTopic.Corpus, ResetTopic.Interior].map(topic => {\r\n const topicItems = props.topics.map(topic => {\r\n const translation = props.translator(\r\n `confirm reset topic ${topic}`,\r\n topic\r\n );\r\n return (
  • {translation}
  • );\r\n });\r\n\r\n\r\n return (\r\n props.onAnswer(false)}\r\n >\r\n \r\n

    {props.translator(\"confirm reset header\", \"Nulstil?\")}

    \r\n
    \r\n\r\n \r\n {props.translator(\r\n \"confirm reset explainer before\",\r\n \"Dette valg vil føre til at følgende dele af dit skab bliver nulstillet:\"\r\n )}\r\n\r\n
      \r\n {topicItems}\r\n
    \r\n\r\n {props.translator(\"confirm reset explainer after\", \"Ønsker du at nulstille?\")}\r\n
    \r\n\r\n \r\n \r\n \r\n \r\n
    \r\n )\r\n}\r\n","import React from \"react\";\r\nimport { IInteriorProductSubGroup, IVec2d } from \"../../models/IChainInfo\";\r\nimport { IInteriorItem } from \"../../services/WebApiClient\";\r\n\r\n\r\nexport interface InteriorDragContextInfo {\r\n readonly subGroup: IInteriorProductSubGroup;\r\n readonly mouseOffset: IVec2d;\r\n readonly item: IInteriorItem | undefined;\r\n readonly isDragging: boolean;\r\n readonly initialCoords: IVec2d;\r\n}\r\n\r\nexport const InteriorDragContext = React.createContext({\r\n info: undefined as InteriorDragContextInfo | undefined,\r\n setInfo: (info: InteriorDragContextInfo | undefined) => { return; }\r\n});\r\n\r\n\r\n","import React, { useContext, useRef, useState } from \"react\";\r\nimport { hasDimensions, hasProductLine, assertHasDimensions } from \"../../services/CabinetValidator\";\r\nimport { DragInfo, getDragService, IDragService } from \"../../services/CabinetService\";\r\nimport { IVec2d } from \"../../services/WebApiClient\";\r\nimport { FrontPosConverter } from \"../../util/PosConverter\";\r\nimport { EditorContext } from \"../EditorCommon/EditorContext\";\r\nimport { InteriorDragContext } from \"./InteriorImageDragContext\";\r\nimport { subtract } from \"../../models/IObj\";\r\n\r\nexport interface ProperSvgElement extends SVGElement {\r\n getScreenCTM(): SVGMatrix;\r\n createSVGPoint(): SVGPoint;\r\n}\r\n\r\ntype MEvent = React.MouseEvent;\r\n\r\nexport function InteriorImageDragHandler(props: {\r\n svgCanvas: ProperSvgElement | null,\r\n children?: React.ReactNode\r\n}) {\r\n\r\n const ec = useContext(EditorContext);\r\n const cabinet = assertHasDimensions(ec.cabinet);\r\n const dragContext = useContext(InteriorDragContext);\r\n const ref = useRef(null);\r\n let [dragService, setDragService] = useState(undefined as IDragService | undefined);\r\n let [dragInfo, setDragInfo] = useState(undefined as DragInfo | undefined);\r\n\r\n if (!hasDimensions(ec.cabinet))\r\n throw new Error(\"dimensions not defined\");\r\n if (!hasProductLine(ec.cabinet))\r\n throw new Error(\"product line not defined\");\r\n\r\n const convert = new FrontPosConverter(ec.cabinet.height!);\r\n\r\n const cabinetSize = {\r\n x: ec.cabinet.width,\r\n y: ec.cabinet.height,\r\n };\r\n\r\n \r\n\r\n function cancelDrag() {\r\n setDragService(undefined);\r\n setDragInfo(undefined);\r\n dragContext.setInfo(undefined);\r\n }\r\n\r\n function mouseOver(evt: MEvent) {\r\n if (!dragContext?.info)\r\n return;\r\n \r\n\r\n evt.preventDefault();\r\n\r\n if (!dragContext.info.isDragging)\r\n return;\r\n\r\n if (dragService)\r\n return;\r\n\r\n const modelPos = getModelPos(evt, props.svgCanvas, ec.cabinet.height!);\r\n dragService = getDragService(\r\n cabinet,\r\n ec.cabinetService,\r\n dragContext.info.subGroup,\r\n undefined,\r\n modelPos,\r\n dragContext.info.mouseOffset);\r\n setDragService(dragService);\r\n dragInfo = dragService.getDragInfo(modelPos, evt.ctrlKey);\r\n setDragInfo(dragInfo);\r\n }\r\n\r\n\r\n function mouseMove(evt: MEvent) {\r\n if (!dragContext.info)\r\n return;\r\n if (dragContext.info.isDragging && !isLeftMouseButtonPressed(evt)) {\r\n cancelDrag();\r\n return;\r\n }\r\n\r\n if (!dragContext.info.isDragging && isLeftMouseButtonPressed(evt)) {\r\n const minDist = 4;\r\n if (Math.abs(dragContext.info.initialCoords.x - evt.clientX) > minDist\r\n || Math.abs(dragContext.info.initialCoords.y - evt.clientY) > minDist) {\r\n\r\n dragContext.info = {\r\n ...dragContext.info,\r\n isDragging: true,\r\n };\r\n dragContext.setInfo(dragContext.info)\r\n }\r\n }\r\n\r\n if (dragContext.info.isDragging && !dragService) {\r\n\r\n const modelPos = getModelPos(evt, props.svgCanvas, ec.cabinet.height!);\r\n const initialMouseModelPos = getModelPos2(dragContext.info.initialCoords, props.svgCanvas, ec.cabinet.height!);\r\n const item = dragContext.info.item;\r\n if (!item)\r\n return;\r\n const mouseOffset = subtract(initialMouseModelPos, item.position);\r\n dragService = getDragService(\r\n cabinet,\r\n ec.cabinetService,\r\n dragContext.info.subGroup,\r\n dragContext.info.item,\r\n modelPos,\r\n mouseOffset\r\n );\r\n setDragService(dragService);\r\n dragInfo = dragService.getDragInfo(modelPos, evt.ctrlKey);\r\n setDragInfo(dragInfo);\r\n }\r\n else if (dragService) {\r\n const modelPos = getModelPos(evt, props.svgCanvas, ec.cabinet.height!);\r\n dragInfo = dragService.getDragInfo(modelPos, evt.ctrlKey);\r\n setDragInfo(dragInfo);\r\n }\r\n }\r\n\r\n function mouseDown(evt: MEvent) {\r\n dragContext.setInfo(undefined);\r\n }\r\n\r\n\r\n\r\n function mouseUp(evt: MEvent) {\r\n //TODO Move some of this into InteriorService\r\n if (!dragService)\r\n return;\r\n if (!dragContext.info)\r\n return;\r\n const dragInfo = dragService.getDragInfo(getModelPos(evt, props.svgCanvas, ec.cabinet.height!), evt.ctrlKey);\r\n let item = dragContext.info.item;\r\n if (dragInfo) {\r\n const items = dragService.place(dragInfo, evt.ctrlKey);\r\n ec.cabinetService.interior.setItems(items);\r\n }\r\n setDragService(undefined);\r\n setDragInfo(undefined);\r\n dragContext.setInfo({\r\n ...dragContext.info,\r\n isDragging: false,\r\n item: item,\r\n });\r\n }\r\n\r\n\r\n\r\n function mouseOut(evt: MEvent) {\r\n //setDragService(undefined);\r\n }\r\n\r\n const shadows = dragInfo?.shadows.map((shadow, index) => (\r\n \r\n ));\r\n\r\n let draggedItem;\r\n if (dragInfo) {\r\n const svgObj = convert.obj(dragInfo);\r\n const transformString = dragInfo.isFlipped\r\n ? convert.getFlipTransformString(dragInfo)\r\n : '';\r\n draggedItem = ;\r\n\r\n }\r\n let selectRect;\r\n if (!dragInfo && dragContext.info?.item) {\r\n const item = ec.cabinet.interiorItems.find(i => i.index === dragContext.info?.item?.index);\r\n if (item) {\r\n const svgObj = convert.obj(item);\r\n selectRect = \r\n }\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n\r\n \r\n {props.children}\r\n {shadows}\r\n {draggedItem}\r\n {selectRect}\r\n \r\n \r\n\r\n );\r\n}\r\n\r\n\r\n\r\nfunction isLeftMouseButtonPressed(evt: React.MouseEvent): boolean {\r\n // https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/buttons\r\n return (!!(evt.buttons & 1));\r\n}\r\n\r\n\r\n\r\nfunction getModelPos(evt: MEvent, svgCanvas: ProperSvgElement | null, cabinetHeight: number): IVec2d {\r\n let clientPos = {\r\n x: evt.clientX,\r\n y: evt.clientY,\r\n }; //TODO get position fron TouchEvent\r\n return getModelPos2(clientPos, svgCanvas, cabinetHeight);\r\n}\r\n\r\n\r\nfunction getModelPos2(clientPos: IVec2d, svgCanvas: ProperSvgElement | null, cabinetHeight: number): IVec2d {\r\n if (!svgCanvas)\r\n return clientPos;\r\n const svgPoint = svgCanvas.createSVGPoint();\r\n svgPoint.x = clientPos.x;\r\n svgPoint.y = clientPos.y;\r\n const svgCoordinate = svgPoint.matrixTransform(svgCanvas.getScreenCTM().inverse());\r\n const result = {\r\n x: svgCoordinate.x,\r\n y: cabinetHeight - svgCoordinate.y\r\n };\r\n return result;\r\n}\r\n","import React from \"react\";\r\n\r\n\r\nexport const RulerContext = React.createContext({\r\n stroke: \"black\",\r\n fontSize: 62,\r\n});\r\n","import React, { useContext } from 'react';\r\nimport { RulerContext } from '../../contexts/RulerContext';\r\n\r\nconst serifHeight = 20;\r\n\r\n\r\nexport function HorizontalRuler(props: {\r\n x: number;\r\n svgY: number;\r\n length: number;\r\n\r\n}) {\r\n const {\r\n stroke,\r\n fontSize\r\n } = useContext(RulerContext);\r\n\r\n const x = props.x;\r\n const y = props.svgY + 10;\r\n\r\n const x2 = x + props.length;\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n {toDist(props.length)}\r\n \r\n \r\n\t);\r\n}\r\n\r\nexport function toDist(length: number): string {\r\n //Don't display \"cm\" for very short distances\r\n const suffix = length > 250\r\n ? \" cm\"\r\n : \"\";\r\n return (length/10).toLocaleString(undefined, { minimumFractionDigits: 1, maximumFractionDigits: 1 }) + suffix;\r\n}\r\n\r\nexport module HorizontalRuler {\r\n export const height = 2 * serifHeight + 80;\r\n}\r\n","import React, { useContext } from 'react';\r\nimport { RulerContext } from '../../contexts/RulerContext';\r\nimport { toDist } from './HorizontalRuler';\r\n\r\nconst serifWidth = 20;\r\n\r\n\r\nexport function VerticalRuler(props:{\r\n x: number;\r\n y: number;\r\n length: number;\r\n}) {\r\n const {\r\n x,\r\n y,\r\n length\r\n } = props;\r\n const {\r\n stroke,\r\n fontSize\r\n } = useContext(RulerContext);\r\n\r\n var y2 = y + length;\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n {toDist(length)}\r\n \r\n \r\n\t);\r\n}\r\n\r\nexport module VerticalRuler {\r\n export const width = serifWidth * 2 + 60;\r\n}\r\n","import React, { useContext } from 'react';\r\nimport { DebugContext } from '../../contexts/DebugContext';\r\nimport { IInteriorProduct } from '../../models/IChainInfo';\r\nimport { IInteriorItem, InteriorProductType } from '../../services/WebApiClient';\r\nimport { FrontPosConverter } from '../../util/PosConverter';\r\nimport { EditorContext } from '../EditorCommon/EditorContext';\r\nimport { InteriorDragContext } from './InteriorImageDragContext';\r\n\r\n\r\nexport function InteriorImageItem(props: {\r\n item: IInteriorItem;\r\n product: IInteriorProduct;\r\n}) {\r\n\r\n const ec = useContext(EditorContext);\r\n const dragContext = useContext(InteriorDragContext);\r\n const debugContext = useContext(DebugContext);\r\n\r\n const {\r\n item,\r\n product\r\n } = { ...props };\r\n\r\n const material = product.materials.find(m => m.interiorMaterialId === item.interiorMaterialId);\r\n const imageUrl = material?.drawingPath\r\n ?? product.textureUrl\r\n ?? undefined;\r\n\r\n // don't display item if user is dragging it\r\n if (dragContext.info?.item && dragContext.info.isDragging) {\r\n if (dragContext.info.item.index === item.index) {\r\n return null; \r\n }\r\n }\r\n\r\n const convert = new FrontPosConverter(ec.cabinet.height!);\r\n\r\n const displayBottomPiece = product.productType === InteriorProductType.TopAndBottom;\r\n const bottomPiece = displayBottomPiece && (\r\n \r\n itemMouseDown(evt, item, product)}\r\n {...convert.pos({ ...item.position, y: 0 }, item.size)}\r\n {...convert.size(item.size)}\r\n transform={item.isFlipped ? convert.getFlipTransformString(item) : ''}\r\n xlinkHref={imageUrl}\r\n preserveAspectRatio=\"none\"\r\n />\r\n {debugContext.value.displayExtendedProductInfo && (\r\n \r\n )}\r\n \r\n );\r\n\r\n\r\n function itemMouseDown(\r\n evt: React.MouseEvent,\r\n item: IInteriorItem,\r\n product: IInteriorProduct) {\r\n evt.preventDefault();\r\n evt.stopPropagation();\r\n\r\n dragContext.setInfo({\r\n item,\r\n isDragging: false,\r\n initialCoords: { x: evt.clientX, y: evt.clientY },\r\n subGroup: product.productSubGroup,\r\n mouseOffset: { x: 0, y: 0 }\r\n });\r\n }\r\n\r\n return (\r\n \r\n itemMouseDown(evt, item, product)}\r\n {...convert.pos(item.position, item.size)}\r\n {...convert.size(item.size)}\r\n transform={item.isFlipped ? convert.getFlipTransformString(item) : ''}\r\n xlinkHref={imageUrl}\r\n preserveAspectRatio=\"none\"\r\n />\r\n\r\n {bottomPiece}\r\n\r\n {debugContext.value.displayExtendedProductInfo && (\r\n \r\n )}\r\n \r\n );\r\n}\r\n","import React, { useContext } from 'react';\r\nimport { GableType } from '../../models/GableType';\r\nimport { IInteriorProduct } from '../../models/IChainInfo';\r\nimport { IObj2d } from '../../models/IObj';\r\nimport { hasDimensions, hasProductLine } from '../../services/CabinetValidator';\r\nimport { IInteriorItem, InteriorProductType } from '../../services/WebApiClient';\r\nimport { DoorImageTop } from '../DoorEditor/DoorImageTop';\r\nimport { VerticalRuler } from '../DoorEditor/VerticalRuler';\r\nimport { CommonEditorProps, EditorContext } from '../EditorCommon/EditorContext';\r\nimport { InteriorDragContext } from './InteriorImageDragContext';\r\n\r\ninterface PulloutViolation {\r\n item: IInteriorItem,\r\n product: IInteriorProduct\r\n}\r\n\r\nconst gableDisplayProps: React.SVGProps = {\r\n fill: \"none\",\r\n stroke: \"black\",\r\n strokeWidth: 2\r\n};\r\n\r\n\r\nexport function InteriorImageTop(props: {\r\n\r\n}) {\r\n\r\n const ec = useContext(EditorContext);\r\n\r\n const dragContext = useContext(InteriorDragContext);\r\n\r\n if (!hasDimensions(ec.cabinet))\r\n throw new Error(\"dimensions not defined\");\r\n if (!hasProductLine(ec.cabinet))\r\n throw new Error(\"product line not defined\");\r\n\r\n const pulloutViolations: PulloutViolation[] = ec.cabinetService.interior.getPulloutViolations()\r\n .map(i => ({\r\n item: i,\r\n product: ec.cabinetService.interior.getProduct(i.productId)\r\n }));\r\n\r\n function selectPulloutViolator(evt: React.MouseEvent, pv: PulloutViolation) {\r\n dragContext.setInfo({\r\n item: pv.item,\r\n initialCoords: { x: evt.clientX, y: evt.clientY },\r\n isDragging: false,\r\n mouseOffset: { x: 0, y: 0 },\r\n subGroup: pv.product.productSubGroup\r\n });\r\n }\r\n\r\n const gablesAndModules = ec.cabinet.interiorItems\r\n .map(ii => ({\r\n item: ii,\r\n product: ec.cabinetService.interior.getProduct(ii.productId)\r\n }))\r\n .filter(itemInfo =>\r\n (itemInfo.product.productType === InteriorProductType.Gable)\r\n || (itemInfo.product.productType === InteriorProductType.Module)\r\n );\r\n\r\n const gableDepth = gablesAndModules[0]?.product.defaultSize.z\r\n ?? ec.cabinet.depth! - 100;\r\n\r\n const wallThicknesses = InteriorImageTop.getWallThicknesses(ec);\r\n\r\n const gableInfo = ec.cabinetService.getGableInfo();\r\n\r\n return (\r\n \r\n\r\n \r\n\r\n \r\n {wallThicknesses.left && (\r\n \r\n )}\r\n {wallThicknesses.right && (\r\n \r\n )}\r\n \r\n \r\n\r\n \r\n {[gableInfo.left, gableInfo.right].map((gable, idx) => (\r\n \r\n ))}\r\n \r\n\r\n {gablesAndModules.map(gam => (\r\n \r\n ))}\r\n {pulloutViolations.map(pv => (\r\n \r\n selectPulloutViolator(evt, pv)}\r\n />\r\n \r\n {ec.translator(\"interior image top pullout warning text\", \"Begrænset\\nudtræk!\")}\r\n \r\n \r\n ))}\r\n \r\n \r\n );\r\n}\r\n\r\n\r\nexport module InteriorImageTop {\r\n\r\n export const wallThickness = 40;\r\n export const wallDisplayProps: React.SVGProps = {\r\n fill: \"#bbb\",\r\n stroke: \"none\"\r\n };\r\n\r\n export function getWallThicknesses(ec: CommonEditorProps): { left: number, right: number } {\r\n\r\n const gi = ec.cabinetService.getGableInfo();\r\n const hasWallLeft = gi.left.type !== GableType.Gable;\r\n const hasWallRight = gi.right.type !== GableType.Gable;\r\n const wallThicknessLeft = hasWallLeft ? wallThickness : 0;\r\n const wallThicknessRight = hasWallRight ? wallThickness : 0;\r\n\r\n return {\r\n left: wallThicknessLeft,\r\n right: wallThicknessRight,\r\n };\r\n }\r\n\r\n export function boundingBox(ec: CommonEditorProps): IObj2d {\r\n\r\n const wallthicknesses = getWallThicknesses(ec);\r\n\r\n return {\r\n size: {\r\n x: ec.cabinet.width! + (wallthicknesses.left + wallthicknesses.right),\r\n y: ec.cabinet.depth! + wallThickness,\r\n },\r\n position: {\r\n x: -wallthicknesses.left,\r\n y: -wallThickness,\r\n }\r\n }\r\n }\r\n}\r\n","import React, { useContext } from \"react\";\r\nimport { IInteriorItem, IVec2d } from \"../../services/WebApiClient\";\r\nimport { FrontPosConverter } from \"../../util/PosConverter\";\r\nimport { EditorContext } from \"../EditorCommon/EditorContext\";\r\n\r\n\r\nexport function ItemWarning({ item }: { item: IInteriorItem }) {\r\n const ec = useContext(EditorContext);\r\n const convert = new FrontPosConverter(ec.cabinet.height!);\r\n\r\n const overCoverage = { x: 50, y: 20 };\r\n\r\n const blownUpItem = {\r\n size: { ...item.size },\r\n position: { ...item.position }\r\n };\r\n\r\n for (let dim of (['x', 'y'] as (keyof IVec2d)[])) {\r\n const sizeToAdd = overCoverage[dim];\r\n blownUpItem.size[dim] += sizeToAdd;\r\n blownUpItem.position[dim] -= (sizeToAdd / 2);\r\n }\r\n\r\n\r\n return ();\r\n}\r\n","import { useContext } from \"react\";\r\nimport { GableSide } from \"../../models/GableSide\";\r\nimport { IInteriorProduct } from \"../../models/IChainInfo\";\r\nimport { IObj2d } from \"../../models/IObj\";\r\nimport { hasDimensions, hasProductLine } from \"../../services/CabinetValidator\";\r\nimport { IInteriorItem, InteriorProductType } from \"../../services/WebApiClient\";\r\nimport { GableImage } from \"../DoorEditor/GableImage\";\r\nimport { HorizontalRuler } from \"../DoorEditor/HorizontalRuler\";\r\nimport { VerticalRuler } from \"../DoorEditor/VerticalRuler\";\r\nimport { CommonEditorProps, EditorContext } from \"../EditorCommon/EditorContext\";\r\nimport { InteriorDragContext } from \"./InteriorImageDragContext\";\r\nimport { InteriorImageItem } from \"./InteriorImageItem\";\r\nimport { InteriorImageTop } from \"./InteriorImageTop\";\r\nimport { ItemWarning } from \"./ItemWarning\";\r\n\r\n\r\n//Lower numbers are drawn first, higher numbers are drawn on top\r\nfunction getSortOrder(product: IInteriorProduct): number {\r\n switch (product.productType) {\r\n case InteriorProductType.Gable:\r\n case InteriorProductType.Module:\r\n return 0;\r\n default:\r\n return 1;\r\n }\r\n}\r\n\r\nexport function InteriorImageFront(props: { displayHelpTextOnEmpty: boolean }) {\r\n const ec = useContext(EditorContext);\r\n\r\n if (!hasDimensions(ec.cabinet))\r\n throw new Error(\"dimensions not defined\");\r\n if (!hasProductLine(ec.cabinet))\r\n throw new Error(\"product line not defined\");\r\n\r\n const dragContext = useContext(InteriorDragContext);\r\n\r\n const wallThicknesses = InteriorImageTop.getWallThicknesses(ec);\r\n\r\n let items = ec.cabinet.interiorItems.map(ii => ({\r\n item: ii,\r\n product: ec.cabinetService.interior.getProduct(ii.productId)\r\n }))\r\n \r\n items.sort((a, b) => getSortOrder(a.product) - getSortOrder(b.product));\r\n\r\n function shouldShowItem(item: IInteriorItem): boolean {\r\n return !dragContext.info?.isDragging\r\n || item !== dragContext.info?.item;\r\n }\r\n \r\n\r\n const itemImages = items\r\n .map(item => );\r\n\r\n const useHelpText = props.displayHelpTextOnEmpty && itemImages.length === 0;\r\n\r\n const helpText = useHelpText\r\n ? (\r\n {ec.translator(\"interior empty help text\", \"← ← Træk varer ind fra venstre for at placere dem i skabet. Start med en gavl eller et modul.\")}\r\n )\r\n : undefined;\r\n\r\n const pulloutViolations = ec.cabinetService.interior\r\n .getPulloutViolations()\r\n .filter(shouldShowItem)\r\n .map(item => )\r\n ;\r\n\r\n const wallMountViolations = ec.cabinetService.interior\r\n .getWallMountViolations()\r\n .filter(shouldShowItem)\r\n .map(item => )\r\n ;\r\n\r\n const exceededBounds = ec.cabinetService.interior\r\n .getExceededBounds()\r\n .filter(shouldShowItem)\r\n .map(item => )\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 {wallThicknesses.left && (\r\n \r\n )}\r\n {wallThicknesses.right && (\r\n \r\n )}\r\n \r\n \r\n\r\n\r\n {itemImages}\r\n {helpText}\r\n {pulloutViolations}\r\n {wallMountViolations}\r\n {exceededBounds}\r\n \r\n \r\n \r\n );\r\n}\r\n\r\n\r\nexport module InteriorImageFront {\r\n\r\n export function boundingBox(ec: CommonEditorProps): IObj2d {\r\n\r\n const wallthicknesses = InteriorImageTop.getWallThicknesses(ec);\r\n\r\n return {\r\n position: {\r\n x: -wallthicknesses.left - VerticalRuler.width,\r\n y: -InteriorImageTop.wallThickness - HorizontalRuler.height\r\n },\r\n size: {\r\n x: (ec.cabinet.width ?? 0)\r\n + wallthicknesses.left\r\n + wallthicknesses.right\r\n + VerticalRuler.width,\r\n y: (ec.cabinet.height ?? 0)\r\n + HorizontalRuler.height\r\n + InteriorImageTop.wallThickness\r\n },\r\n }\r\n }\r\n}\r\n","import React, { useContext } from 'react';\r\nimport { GableType } from '../../models/GableType';\r\nimport { DragServiceGable } from '../../services/CabinetService/DragServiceGable';\r\nimport { EditorContext } from '../EditorCommon/EditorContext';\r\nimport { HorizontalRuler } from './HorizontalRuler';\r\n\r\n\r\nconst minRulerLength = 1;\r\ninterface Stop {\r\n start: number;\r\n stop: number;\r\n}\r\n\r\n/**\r\n * Displays a set of rulers that matches the space between gables on a cabinet\r\n */\r\nexport function InterGableRulers(props: {\r\n y: number;\r\n}) {\r\n\r\n const ec = useContext(EditorContext);\r\n\r\n const inf = ec.cabinetService.getGableInfo();\r\n const gables = ec.cabinet.interiorItems.filter(ii => {\r\n const product = ec.cabinetService.interior.getProduct(ii.productId);\r\n return DragServiceGable.acceptable(product.productSubGroup)\r\n });\r\n gables.sort((a, b) => a.position.x - b.position.x);\r\n\r\n let left = inf.left.type === GableType.Gable\r\n ? inf.left.position.x + inf.left.size.x\r\n : 0;\r\n let stops: Stop[] = [];\r\n for (let gable of gables) {\r\n stops.push({ start: left, stop: gable.position.x });\r\n const right = gable.position.x + gable.size.x;\r\n left = right;\r\n }\r\n const right = inf.right.type === GableType.Gable\r\n ? inf.right.position.x\r\n : ec.cabinet.width!;\r\n stops.push({ start: left, stop: right });\r\n\r\n stops = stops.filter(s => s.stop - s.start > minRulerLength);\r\n\r\n return (\r\n \r\n {stops.map((s, index) => (\r\n \r\n ))\r\n }\r\n \r\n );\r\n}\r\n","import React, { useContext } from 'react';\r\nimport { DragServiceGable } from '../../services/CabinetService/DragServiceGable';\r\nimport { EditorContext } from '../EditorCommon/EditorContext';\r\nimport { HorizontalRuler } from './HorizontalRuler';\r\n\r\n\r\nexport function GableWidthRulers(props: {\r\n\r\n}) {\r\n\r\n\r\n const ec = useContext(EditorContext);\r\n const gables = ec.cabinet.interiorItems.filter(ii => {\r\n const product = ec.cabinetService.interior.getProduct(ii.productId);\r\n return DragServiceGable.acceptable(product.productSubGroup)\r\n });\r\n\r\n\r\n return (\r\n \r\n {gables.map(gable => (\r\n \r\n ))}\r\n \r\n );\r\n}\r\n","import React, { useContext, useRef } from \"react\";\r\nimport { hasDimensions } from \"../../services/CabinetValidator\";\r\nimport { InteriorImageDragHandler, ProperSvgElement } from \"./InteriorImageDragHandler\";\r\nimport { InteriorImageFront } from \"./InteriorImageFront\";\r\nimport \"./InteriorImage.scss\";\r\nimport { EditorContext } from \"../EditorCommon/EditorContext\";\r\nimport { InterGableRulers } from \"../DoorEditor/InterGableRulers\";\r\nimport { ImageOutline } from \"../EditorCommon/ImageOutline\";\r\nimport { InteriorImageTop } from \"./InteriorImageTop\";\r\nimport { boundingBoxO2, moveObj } from \"../../models/IObj\";\r\nimport { GableWidthRulers } from \"../DoorEditor/GableWidthRulers\";\r\n\r\n\r\ntype SvgProps = React.SVGProps;\r\n\r\ntype OverriddenSvgProps = Pick;\r\ntype NonOverriddenSvgProperties = Omit;\r\n\r\n\r\nexport function InteriorImage(props: NonOverriddenSvgProperties & {\r\n displayHelpTextOnEmpty: boolean,\r\n className?: string\r\n}) {\r\n\r\n const {\r\n displayHelpTextOnEmpty,\r\n className,\r\n ...rest\r\n } = props;\r\n\r\n const ec = useContext(EditorContext);\r\n\r\n const svgCanvas = useRef(null);\r\n if (!hasDimensions(ec.cabinet))\r\n throw new Error(\"dimensions not defined\");\r\n\r\n\r\n const paddingBetweenImages = 70;\r\n\r\n const topImageOffset = { x: 0, y: ec.cabinet.height + (150) };\r\n const baseTopImageBounds = InteriorImageTop.boundingBox(ec);\r\n const topImageBounds = moveObj(baseTopImageBounds, topImageOffset);\r\n const topImage = (\r\n \r\n \r\n \r\n );\r\n const frontImageBounds = InteriorImageFront.boundingBox(ec);\r\n const imageBounds = boundingBoxO2(\r\n frontImageBounds,\r\n topImageBounds);\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 {topImage}\r\n \r\n );\r\n}\r\n","import React, { useContext } from 'react';\r\nimport { OverlayTrigger, Popover, PopoverContent, PopoverTitle } from 'react-bootstrap';\r\nimport { DragServiceGable } from '../../services/CabinetService/DragServiceGable';\r\nimport { EditorContext } from '../EditorCommon/EditorContext';\r\nimport { InteriorDragContext } from './InteriorImageDragContext';\r\n\r\nexport function GableMover(props: {\r\n\r\n}) {\r\n\r\n const ec = useContext(EditorContext);\r\n const dragContext = useContext(InteriorDragContext);\r\n\r\n if (!dragContext.info?.item) {\r\n return null;\r\n }\r\n\r\n const itemIndex = dragContext.info.item.index;\r\n\r\n const product = ec.cabinetService.interior.getProduct(dragContext.info.item.productId);\r\n if (!DragServiceGable.acceptable(product.productSubGroup)) {\r\n return null;\r\n }\r\n\r\n function moveItem(evt: React.MouseEvent, direction: number) {\r\n evt.preventDefault();\r\n evt.stopPropagation();\r\n const distance = evt.ctrlKey\r\n ? 1\r\n : 10;\r\n ec.cabinetService.interior.moveGable(itemIndex, direction * distance);\r\n }\r\n\r\n const helpOverlay = (\r\n \r\n \r\n {ec.translator(\"interior editor move item\", \"Flyt\")}\r\n \r\n \r\n {ec.translator(\"interior editor move item help\",\r\n \"Klik på pilene for at flytte varen.\\nHold Ctrl nede for at flytte 1 mm ad gangen.\")}\r\n \r\n \r\n );\r\n\r\n return (\r\n \r\n
      \r\n
    • moveItem(evt, -1)}\r\n title={ec.translator(\"interior editor move item title left\", \"Flyt varen til venstre.\")}\r\n >\r\n «\r\n
    • \r\n
    • \r\n {ec.translator(\"interior editor move item\", \"Flyt\")}\r\n
    • \r\n
    • moveItem(evt, +1)}\r\n title={ec.translator(\"interior editor move item title right\", \"Flyt varen til højre.\")}\r\n >\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 { DebugContext } from '../../contexts/DebugContext';\r\nimport { IInteriorProduct } from '../../models/IChainInfo';\r\nimport { IInteriorProductMaterial } from '../../services/WebApiClient';\r\n\r\n\r\nexport function ProductDebugInfo(props: {\r\n product: IInteriorProduct;\r\n material: IInteriorProductMaterial | undefined;\r\n\r\n}) {\r\n const debugContext = useContext(DebugContext);\r\n\r\n if (!debugContext.value.displayExtendedProductInfo)\r\n return null;\r\n const {\r\n product,\r\n material,\r\n } = props;\r\n\r\n return (\r\n
    \r\n
    \r\n Product group: {product.productSubGroup.productGroup.externalId}\r\n
    \r\n
    \r\n Product sub group: {product.productSubGroup.externalId}\r\n
    \r\n
    \r\n Product: {product.externalId}\r\n
    \r\n
    \r\n Material: {material?.externalId ?? \" -- \"}\r\n
    \r\n
    \r\n Other products in subgroup:\r\n
      \r\n {product.productSubGroup.products.map(p => (\r\n
    • \r\n {p.externalId}\r\n
        \r\n {p.materials.map(m => (\r\n
      • \r\n {m.name}: {m.externalId ?? ' -- '}\r\n
      • \r\n ))}\r\n
      \r\n
    • \r\n ))}\r\n
    \r\n
    \r\n
    \r\n );\r\n}\r\n","import React, { useContext, useState } from \"react\";\r\nimport { Button } from \"react-bootstrap\";\r\nimport { EditorContext } from \"../EditorCommon/EditorContext\";\r\nimport { MaterialSelectorModal } from \"../EditorCommon/MaterialSelectorModal\";\r\nimport { GableMover } from \"./GableMover\";\r\nimport { InteriorDragContext } from \"./InteriorImageDragContext\";\r\nimport \"./InteriorItemEditor.scss\"\r\nimport { ProductDebugInfo } from \"./ProductDebugInfo\";\r\n\r\nexport function InteriorItemEditor(props: {\r\n\r\n}) {\r\n\r\n const ec = useContext(EditorContext);\r\n const dragContext = useContext(InteriorDragContext);\r\n const [isMaterialModalOpen, setIsMaterialModalOpen] = useState(false);\r\n\r\n const item = dragContext.info?.item;\r\n if (!item)\r\n return null;\r\n\r\n const product = ec.cabinetService.interior.getProduct(item.productId);\r\n\r\n const itemIndex = item.index;\r\n\r\n function deleteItem() {\r\n ec.cabinetService.interior.deleteItem(itemIndex);\r\n dragContext.setInfo(undefined);\r\n }\r\n\r\n const isViolatingPullout = ec.cabinetService.interior\r\n .getPulloutViolations()\r\n .indexOf(item) >= 0;\r\n\r\n const isMountedOnWall = ec.cabinetService.interior\r\n .isMountedOnWall(item);\r\n\r\n const isExceedingBounds = ec.cabinetService.interior\r\n .isExceedingBounds(item);\r\n\r\n const material = product.materials.find(m => m.interiorMaterialId === item.interiorMaterialId);\r\n const imageUrl = material?.picturePath ?? product.productSubGroup.imageUrl;\r\n const canSelectMaterials = product.materials.length > 1;\r\n\r\n function openMaterialSelector() {\r\n if (!canSelectMaterials)\r\n return;\r\n setIsMaterialModalOpen(true);\r\n }\r\n\r\n function setMaterial(matId: number) {\r\n ec.cabinetService.interior.setItemMaterial(item!.index, matId);\r\n setIsMaterialModalOpen(false);\r\n }\r\n\r\n const selectableMaterials = product.materials.map(m => ({\r\n id: m.interiorMaterialId,\r\n name: m.name,\r\n sampleImageUrl: m.picturePath\r\n ?? ec.cabinetService.chainInfo.interiorMaterials.find(im => im.id === m.interiorMaterialId)?.sampleImageUrl\r\n ?? null,\r\n textureImageUrl: m.drawingPath,\r\n }));\r\n\r\n const materialSelectorModal = isMaterialModalOpen\r\n && (\r\n setIsMaterialModalOpen(false)}\r\n onSelect={m => setMaterial(m.id)}\r\n currentId={item.interiorMaterialId ?? undefined}\r\n materials={selectableMaterials}\r\n />\r\n );\r\n\r\n\r\n return (\r\n
    \r\n

    {product.productSubGroup.name}

    \r\n\r\n
    \r\n {imageUrl && \"\"}\r\n
    \r\n
    {product.name}
    \r\n
    \r\n
    \r\n\r\n\r\n {isViolatingPullout &&
    \r\n {ec.translator(\r\n \"interior item pullout violation warninng\",\r\n \"Skuffen kan ikke åbnes, da døren er i vejen.\")}\r\n
    }\r\n\r\n {isMountedOnWall && (\r\n
    \r\n {ec.translator(\r\n \"interior item mall mount violation warning\",\r\n \"Produktet bør ikke monteres direkte på en væg. Sæt eventuelt en gavl op mod væggen.\")}\r\n
    \r\n\r\n )}\r\n\r\n {isExceedingBounds && (\r\n
    \r\n {ec.translator(\r\n \"interior item warning exceeds bounds\",\r\n \"Varen er placeret udenfor skabet. Flyt varen, så den er inde i skabet.\")}\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 {materialSelectorModal}\r\n
    \r\n );\r\n}\r\n","import React, { useContext } from \"react\";\r\nimport { Card, ListGroup } from \"react-bootstrap\";\r\nimport { DebugContext } from \"../../contexts/DebugContext\";\r\nimport { IInteriorProductSubGroup } from \"../../models/IChainInfo\";\r\nimport { EditorContext } from \"../EditorCommon/EditorContext\";\r\nimport { InteriorDragContext } from \"./InteriorImageDragContext\";\r\nimport \"./ProductSubGroup.scss\";\r\n\r\n\r\nexport function ProductSubGroup(props: {\r\n subGroup: IInteriorProductSubGroup,\r\n}) {\r\n\r\n const dragContext = useContext(InteriorDragContext);\r\n const ec = useContext(EditorContext);\r\n const debugContext = useContext(DebugContext);\r\n\r\n function mouseDown(evt: React.MouseEvent | React.TouchEvent) {\r\n dragContext.setInfo({\r\n subGroup: props.subGroup,\r\n isDragging: true,\r\n initialCoords: { x: 0, y: 0 },\r\n item: undefined,\r\n mouseOffset: {\r\n x: props.subGroup.products[0].defaultSize.x / 2,\r\n y: props.subGroup.products[0].defaultSize.y / 2,\r\n }\r\n });\r\n if (!(window as any).TouchEvent || !(evt.nativeEvent instanceof TouchEvent)) {\r\n evt.preventDefault();\r\n }\r\n }\r\n\r\n function mouseUp() {\r\n dragContext.setInfo(undefined);\r\n }\r\n\r\n const interiorMaterialId = ec.cabinet.interiorMaterialId;\r\n const materialWithPicture = props.subGroup.products\r\n .flatMap(p => p.materials)\r\n .find(mat => mat.interiorMaterialId === interiorMaterialId && mat.picturePath)\r\n ;\r\n\r\n const imageUrl = materialWithPicture?.picturePath\r\n ?? props.subGroup.imageUrl\r\n ?? \"\";\r\n\r\n return (\r\n \r\n \r\n \"\"\r\n \r\n {debugContext.value.displayExtendedProductInfo && (props.subGroup.externalId + \" - \")}\r\n {props.subGroup.name}\r\n \r\n \r\n\r\n \r\n );\r\n}\r\n\r\n","import { Button, Card, ListGroup } from \"react-bootstrap\";\r\nimport React, { useContext, useState } from \"react\";\r\nimport { ProductSubGroup } from \"./ProductSubGroup\";\r\nimport \"./ProductGroup.scss\";\r\nimport { IInteriorProductGroup } from \"../../models/IChainInfo\";\r\nimport { DebugContext } from \"../../contexts/DebugContext\";\r\n\r\nexport function ProductGroup(props: {\r\n group: IInteriorProductGroup\r\n}) {\r\n\r\n const [collapsed, setCollapsed] = useState(true);\r\n const debugContext = useContext(DebugContext);\r\n\r\n const subGroups = props.group.interiorProductSubGroups\r\n .map(sg => );\r\n\r\n const icon = collapsed\r\n ? \"/imgs/icons/glyphicons-halflings-131-chevron-right.svg\"\r\n : \"/imgs/icons/glyphicons-halflings-128-chevron-down.svg\"\r\n ;\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 {subGroups}\r\n \r\n \r\n \r\n );\r\n}\r\n","import React, { useContext } from \"react\";\r\nimport { EditorContext } from \"../EditorCommon/EditorContext\";\r\nimport { ProductGroup } from \"./ProductGroup\";\r\n\r\n\r\nexport function ProductList() {\r\n\r\n const ec = useContext(EditorContext);\r\n\r\n const groupCards = ec.cabinetService.getProductLine()?.interiorProducts\r\n .map(ipGroup => () );\r\n\r\n return (\r\n \r\n {groupCards}\r\n
    \r\n );\r\n}\r\n","\r\ntype Optional = T | null | undefined;\r\n\r\n/**Contains functions for sorting arrays */\r\nexport module SortBy {\r\n /**\r\n * Generates a function for sorting an array of T by the specified string property.\r\n * Used like this: persons.sort(SortBy.String(person => person.name))\r\n */\r\n export function String(prop: (t: T) => Optional): (a: T, b: T) => number{\r\n return (a: T, b: T) => {\r\n const sa = prop(a) ?? \"\";\r\n const sb = prop(b) ?? \"\";\r\n return sa.localeCompare(sb);\r\n }\r\n }\r\n\r\n /**\r\n * Generates a function for sorting an array of T by the specified date property.\r\n * Used like this: persons.sort(SortBy.String(person => person.birthDate))\r\n */\r\n export function Date(prop: (t: T) => Optional): (a: T, b: T) => number {\r\n return (a: T, b: T) => {\r\n const sa = prop(a);\r\n const sb = prop(b);\r\n if (!sa) {\r\n if (!sb)\r\n return 0;\r\n return -1;\r\n }\r\n if (!sb)\r\n return 1;\r\n\r\n return sa.valueOf() - sb.valueOf();\r\n }\r\n }\r\n\r\n /**\r\n * Generates a function for sorting an array of T by the specified number property.\r\n * Used like this: persons.sort(SortBy.String(person => person.numFingers))\r\n */\r\n export function Number(prop: (t: T) => Optional): (a: T, b: T) => number {\r\n return (a: T, b: T) => {\r\n const sa = prop(a) ?? 0;\r\n const sb = prop(b) ?? 0;\r\n\r\n return sa - sb;\r\n }\r\n }\r\n\r\n export function StringArray(prop: (t: T) => Optional[]>): (a: T, b: T) => number {\r\n return (a: T, b: T) => {\r\n const sa = prop(a) ?? [];\r\n const sb = prop(b) ?? [];\r\n const minLength = Math.min(sa.length, sb.length);\r\n for (let i = 0; i < minLength; i++) {\r\n const saa = sa[i] ?? \"\";\r\n const sba = sb[i] ?? \"\";\r\n const result = saa.localeCompare(sba);\r\n if (result !== 0)\r\n return result;\r\n }\r\n return sa.length - sb.length;\r\n }\r\n }\r\n\r\n export function Array(prop: (t: T) => Optional, comparer: (a: TA, b: TA) => number): (a: T, b: T) => number {\r\n return (a: T, b: T) => {\r\n const sa = prop(a) ?? [];\r\n const sb = prop(b) ?? [];\r\n const minLength = Math.min(sa.length, sb.length);\r\n for (let i = 0; i < minLength; i++) {\r\n const saa = sa[i];\r\n const sba = sb[i];\r\n const result = comparer(saa, sba);\r\n if (result !== 0)\r\n return result;\r\n }\r\n return sa.length - sb.length;\r\n };\r\n }\r\n\r\n}\r\n","import React, { useContext } from 'react';\r\nimport { EditorContext } from '../EditorCommon/EditorContext';\r\nimport { MaterialSelector } from '../EditorCommon/MaterialSelector';\r\n\r\nexport function InteriorMaterialSelector(props:{\r\n\t\r\n}) {\r\n\r\n const ec = useContext(EditorContext);\r\n\r\n\r\n const productLine = ec.cabinetService.getProductLine();\r\n const productGroups = productLine?.interiorProducts\r\n ?? ec.cabinetService.chainInfo.productLines.flatMap(pl => pl.interiorProducts);\r\n const activeMaterialIds = productGroups.flatMap(pg => pg.interiorProductSubGroups)\r\n .flatMap(psg => psg.products)\r\n .flatMap(p => p.materials)\r\n .map(m => m.interiorMaterialId);\r\n const activeMaterialIdSet = new Set(activeMaterialIds);\r\n\r\n const interiorMaterials = ec.cabinetService.chainInfo.interiorMaterials\r\n .filter(im => activeMaterialIdSet.has(im.id));\r\n if (interiorMaterials.length < 2)\r\n return null;\r\n\r\n let materials = interiorMaterials.map(im => ({\r\n id: im.id,\r\n name: im.name,\r\n sampleImageUrl: im.sampleImageUrl,\r\n textureImageUrl: null\r\n }));\r\n\r\n\r\n\r\n return (\r\n ec.cabinetService.interior.setInteriorMaterialId(newMat.id)}\r\n />\r\n\t);\r\n}\r\n","import { useContext, useState } from \"react\";\r\nimport { NavPage } from \"../../services/NavService\";\r\nimport \"../../style/editor.scss\";\r\nimport { EditorNav } from \"../EditorNav/EditorNav\";\r\nimport { TopNav } from \"../TopNav/TopNav\";\r\nimport { InteriorImage } from \"./InteriorImage\";\r\nimport { InteriorDragContext, InteriorDragContextInfo } from \"./InteriorImageDragContext\";\r\nimport { InteriorItemEditor } from \"./InteriorItemEditor\";\r\nimport { ProductList } from \"./ProductList\";\r\nimport \"./InteriorEditor.scss\";\r\nimport { EditorContext } from \"../EditorCommon/EditorContext\";\r\nimport { InteriorMaterialSelector } from \"./InteriorMaterialSelector\";\r\n\r\n\r\n\r\nexport function InteriorEditor() {\r\n\r\n const [currentDragInfo, setCurrentDragInfo]\r\n = useState(undefined as (InteriorDragContextInfo | undefined));\r\n\r\n const ec = useContext(EditorContext);\r\n\r\n function updateCurrentItem(info: InteriorDragContextInfo | undefined): InteriorDragContextInfo | undefined {\r\n if (!info)\r\n return;\r\n if (!info.item)\r\n return info;\r\n const newItem = ec.cabinet.interiorItems.find(ii => ii.index === info.item?.index);\r\n return {\r\n ...info,\r\n item: newItem ?? info.item\r\n };\r\n }\r\n\r\n return (\r\n
    \r\n \r\n {\r\n setCurrentDragInfo(info);\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 { useEffect, useState } from \"react\";\r\n\r\n\r\nexport function usePromise(\r\n func: (() => Promise)\r\n): T | undefined {\r\n\r\n const [val, setVal] = useState(undefined);\r\n\r\n useEffect(() => {\r\n let cancelled = false;\r\n func().then(v => {\r\n if (cancelled)\r\n return;\r\n setVal(v);\r\n });\r\n\r\n return function cancelFunction() {\r\n cancelled = true;\r\n }\r\n },\r\n [func]\r\n );\r\n\r\n return val;\r\n}\r\n","\r\n\r\nexport function LoadSpinner({ isVisible = true, color = \"primary\"}) {\r\n\r\n return (\r\n
    \r\n Loading...\r\n
    \r\n );\r\n}\r\n","import { useState } from \"react\";\r\n\r\nexport interface State {\r\n readonly value: T;\r\n set(value: T): void;\r\n}\r\n\r\nexport function useState2(initialStateFunc: () => T): State;\r\nexport function useState2(initialState: T): State;\r\nexport function useState2(): State;\r\nexport function useState2(initialState: T | (() => T) = undefined as any): State {\r\n const [s, setS] = useState(initialState);\r\n return {\r\n value: s,\r\n set: setS\r\n };\r\n}\r\n","import React, { useMemo } from 'react';\r\nimport { useState2 } from '../../util/useState2';\r\nimport \"./Table.scss\";\r\n\r\nexport interface IColumn {\r\n header?: React.ReactNode;\r\n footer?: React.ReactNode;\r\n key: string;\r\n content: (t: T, rowIndex: number) => (React.ReactNode);\r\n className?: string;\r\n sort?: (a: T, b: T) => number;\r\n}\r\n\r\nexport function Table(props: {\r\n columns: IColumn[],\r\n rows: T[],\r\n rowKey?: (t: T, index: number) => (string | number),\r\n tableProps?: React.HTMLProps\r\n onRowClick?: (row: T) => void\r\n}) {\r\n\r\n const sortStrategy = useState2<{colIndex: number, reverse: boolean}>();\r\n\r\n const {\r\n className: originalClassName,\r\n ...otherTableProps\r\n } = props.tableProps ?? {};\r\n\r\n const rows = useMemo(() => {\r\n if (!sortStrategy.value) {\r\n return props.rows;\r\n }\r\n const sorter = props.columns?.[sortStrategy.value.colIndex]?.sort;\r\n if (!sorter) {\r\n return props.rows;\r\n }\r\n \r\n const result = [...props.rows]; //copy existing array, because sorting changes the array\r\n const reverser = sortStrategy.value.reverse ? -1 : 1;\r\n result.sort((a, b) => reverser * sorter(a, b));\r\n return result;\r\n\r\n }, [sortStrategy.value, props.rows, props.columns])\r\n \r\n\r\n const tableClassName = originalClassName ?? \"table table-striped table-hover\";\r\n function setSort(colIndex: number) {\r\n if (!props.columns[colIndex].sort) {\r\n return; //column is not sortable\r\n }\r\n if (colIndex === sortStrategy.value?.colIndex) {\r\n sortStrategy.set({\r\n colIndex: colIndex,\r\n reverse: !sortStrategy.value.reverse\r\n });\r\n }\r\n else {\r\n sortStrategy.set({\r\n colIndex: colIndex,\r\n reverse: false\r\n })\r\n }\r\n }\r\n\r\n function getHeaderClasses(colIndex: number) {\r\n const col = props.columns[colIndex];\r\n const results: string[] = [];\r\n if (col?.className) {\r\n results.push(col.className);\r\n }\r\n if (col?.sort) {\r\n results.push(\"sortable-column\");\r\n }\r\n if (colIndex === sortStrategy.value?.colIndex) {\r\n results.push(\"sorted-column\");\r\n if (sortStrategy.value?.reverse) {\r\n results.push(\"sorted-column-reverse\");\r\n }\r\n }\r\n\r\n return results.join(\" \");\r\n }\r\n\r\n const cols = props.columns.map(col => (\r\n \r\n ));\r\n\r\n const headers = props.columns.some(c => c.header)\r\n && props.columns.map((col, colIndex) => (\r\n setSort(colIndex)}\r\n >\r\n {col.header}\r\n \r\n ));\r\n\r\n const rowElements = rows.map((dat, rowIndex) => {\r\n const fields = props.columns.map((col, colIndex) => (\r\n {col.content(dat, rowIndex)}\r\n ));\r\n return (\r\n props.onRowClick!(dat)) : undefined}\r\n >\r\n {fields}\r\n \r\n );\r\n });\r\n\r\n const footers = props.columns.some(col => col.footer)\r\n && props.columns.map(col => (\r\n {col.footer}\r\n ));\r\n\r\n\r\n return (\r\n \r\n \r\n {cols}\r\n \r\n\r\n {headers && (\r\n \r\n \r\n {headers}\r\n \r\n \r\n )}\r\n\r\n \r\n {rowElements}\r\n \r\n\r\n {footers && (\r\n \r\n \r\n {footers}\r\n \r\n \r\n )}\r\n
    \r\n );\r\n}\r\n\r\n","import { useContext } from \"react\";\r\nimport { IPieceList, IPieceListLine } from \"../../services/WebApiClient\";\r\nimport { EditorContext } from \"../EditorCommon/EditorContext\";\r\nimport { SortBy } from \"../Table/SortBy\";\r\nimport { IColumn, Table } from \"../Table/Table\";\r\nimport './PieceListTable.scss'\r\n\r\n\r\nfunction formatQuantity(n: number): string {\r\n const nStr = n.toLocaleString(\r\n undefined,\r\n { maximumSignificantDigits: 5 }\r\n );\r\n return `x ${nStr}`;\r\n}\r\n\r\n\r\nexport function PieceListTable(props: {\r\n pieceList: IPieceList\r\n}) {\r\n\r\n const ec = useContext(EditorContext);\r\n\r\n function totalUnitPrice(pll: IPieceListLine): number {\r\n return pll.unitPriceExVat;\r\n }\r\n\r\n function formatPrice(priceExVat: number): string {\r\n const priceInclVat = priceExVat * (1 + props.pieceList.vatRate);\r\n const formattedPrice = priceInclVat.toLocaleString(\r\n undefined, //use browser format\r\n { minimumFractionDigits: 2, maximumFractionDigits: 2 }\r\n );\r\n const translatedPrice = ec.translator(\"piecelist table row price\", \"{price} {currency}\",\r\n { price: formattedPrice, currency: props.pieceList.currency }\r\n )\r\n return translatedPrice;\r\n }\r\n const totalQuantity = props.pieceList.pieceListLines.reduce((previousSum, pll) => pll.quantity + previousSum, 0);\r\n\r\n const vatPercent = (props.pieceList.vatRate * 100).toLocaleString(undefined, {\r\n maximumFractionDigits: 2\r\n });\r\n\r\n\r\n\r\n const columns: IColumn[] = [\r\n {\r\n key: \"piece-list-external-id\",\r\n className: \"piece-list-external-id\",\r\n header: ec.translator(\"piecelist table header item external id\", \"Varenr.\"),\r\n content: (row) => row.partNo,\r\n sort: SortBy.String(row => row.partNo)\r\n },\r\n {\r\n key: \"piece-list-desc\",\r\n className: \"piece-list-desc\",\r\n header: ec.translator(\"piecelist table header item description\", \"Vare\"),\r\n footer: ec.translator(\"piecelist table footer item description\", \"Total incl. {vat} % moms:\", { vat: vatPercent }),\r\n content: (row) => {\r\n let texts = [\r\n row.name,\r\n ...row.descriptions?.map(d => d.name) ?? []\r\n ];\r\n return texts.map((t, idx) =>
    {t}
    );\r\n },\r\n },\r\n {\r\n key: \"piece-list-unit-price\",\r\n className: \"piece-list-unit-price price-col\",\r\n header: ec.translator(\"piecelist table header unit price\", \"Enh. pris\"),\r\n content: (row) => formatPrice(totalUnitPrice(row)),\r\n sort: SortBy.Number(row => totalUnitPrice(row)),\r\n },\r\n {\r\n key: \"piece-list-quantity\",\r\n className: \"piece-list-quantity number-col\",\r\n header: ec.translator(\"piecelist table header quantity\", \"Antal\"),\r\n footer: formatQuantity(totalQuantity),\r\n content: (row) => formatQuantity(row.quantity),\r\n sort: SortBy.Number(row => row.quantity),\r\n },\r\n {\r\n key: \"piece-list-price\",\r\n className: \"piece-list-price price-col\",\r\n header: ec.translator(\"piecelist table header total price\", \"Pris ({currency})\", { currency: props.pieceList.currency }),\r\n footer: formatPrice(props.pieceList.totalPriceExVat),\r\n content: (row) => formatPrice(totalUnitPrice(row) * row.quantity),\r\n sort: SortBy.Number(row => totalUnitPrice(row) * row.quantity),\r\n }\r\n ];\r\n\r\n\r\n return (\r\n \r\n columns={columns}\r\n rows={props.pieceList.pieceListLines}\r\n tableProps={{ className: \"table table-striped table-hover piece-list-table\" }}\r\n />\r\n );\r\n}\r\n","import Canvg from 'canvg';\r\nimport React from 'react'\r\nimport ReactDOMServer from \"react-dom/server\";\r\nimport { DoorImage } from '../components/DoorEditor/DoorImage';\r\nimport { DrawContext } from '../components/EditorCommon/DrawContext';\r\nimport { CommonEditorProps, EditorContext } from \"../components/EditorCommon/EditorContext\";\r\nimport { InteriorImage } from '../components/InteriorEditor/InteriorImage';\r\nimport { IHttpService } from \"./LoginService\";\r\nimport { Cabinet, CabinetClient, IUserSolution, IVec2d, SaveCabinetRequest } from \"./WebApiClient\";\r\n\r\n\r\nexport class SaveService {\r\n cabinetClient: CabinetClient;\r\n constructor(http: IHttpService) {\r\n\r\n this.cabinetClient = new CabinetClient(undefined, http);\r\n\r\n }\r\n\r\n async save(editorContext: CommonEditorProps, name: string, overwrite: boolean): Promise {\r\n let cabinet = editorContext.cabinet;\r\n if (overwrite && cabinet.orderNumber !== null) {\r\n throw new Error(\"Cannot overwrite a solution that has already been ordered\");\r\n }\r\n if (overwrite && cabinet.userSolutionId === null) {\r\n throw new Error(\"Cannot overwrite a solution that wasn't saved in the first place\");\r\n }\r\n if (!overwrite) {\r\n cabinet = {\r\n ...cabinet,\r\n userSolutionId: null,\r\n }\r\n }\r\n const images = await this.getImages(editorContext);\r\n const errorFlags = editorContext.cabinetService.getErrorFlags();\r\n const req = new SaveCabinetRequest({\r\n cabinet: new Cabinet(cabinet),\r\n name,\r\n doorImageB64Png: images.doorImage,\r\n interiorImageB64Png: images.interiorImage,\r\n errorFlags: errorFlags\r\n });\r\n const serverSolution = await this.cabinetClient.saveCabinet(req);\r\n await editorContext.cabinetService.loadSavedCabinet(serverSolution.id, this.cabinetClient);\r\n return serverSolution\r\n }\r\n\r\n private async getImages(editorContext: CommonEditorProps) {\r\n const size: IVec2d = {\r\n x: 800,\r\n y: 600\r\n };\r\n let doorImage = null;\r\n try {\r\n doorImage = await this.toPng(React.createElement(\r\n DoorImage,\r\n { width: size.x, height: size.y }\r\n ),\r\n \"Door image\",\r\n editorContext\r\n );\r\n } catch (e) {\r\n //Ignore error - better to ignore than to crash here\r\n //TODO log error\r\n }\r\n\r\n let interiorImage = null;\r\n try {\r\n interiorImage = await this.toPng(React.createElement(\r\n InteriorImage,\r\n { width: size.x, height: size.y, displayHelpTextOnEmpty: false }\r\n ),\r\n \"Interior image\",\r\n editorContext\r\n );\r\n } catch (e) {\r\n //Ignore error - better to ignore than to crash here\r\n //TODO log error\r\n }\r\n return { doorImage, interiorImage };\r\n }\r\n\r\n\r\n private async toPng(svgElement: JSX.Element, imageName: string, editorContext: CommonEditorProps): Promise {\r\n const size: IVec2d = {\r\n x: 800,\r\n y: 600\r\n };\r\n await Promise.resolve();\r\n try {\r\n //const elem = (\r\n // \r\n // { svgElement }\r\n // < /EditorContext.Provider>\r\n //);\r\n const editorContextElem = React.createElement(\r\n EditorContext.Provider,\r\n { value: editorContext },\r\n svgElement\r\n );\r\n const drawContextElem = React.createElement(\r\n DrawContext.Provider,\r\n { value: { preserveAspectRatio: \"none\" } },\r\n editorContextElem\r\n );\r\n\r\n const markup = ReactDOMServer.renderToStaticMarkup(drawContextElem);\r\n\r\n\r\n const canvas = document.createElement('canvas');\r\n document.body.appendChild(canvas);\r\n canvas.style.display = \"none\";\r\n canvas.width = size.x;\r\n canvas.height = size.y;\r\n const ctx = canvas.getContext(\"2d\");\r\n if (!ctx)\r\n throw new Error(\"Could not get 2d canvas context\");\r\n\r\n const v = Canvg.fromString(ctx, markup, {\r\n ignoreMouse: true,\r\n ignoreAnimation: true,\r\n window,\r\n\r\n });\r\n await v.render();\r\n\r\n let dataUrl = canvas.toDataURL(\"image/png\");\r\n return dataUrl;\r\n } catch (e) {\r\n if (e instanceof Error) {\r\n throw new Error(`Failed to convert ${imageName} to png: ${e.message}\\n${e.stack}`);\r\n }\r\n throw e;\r\n }\r\n }\r\n}\r\n","import React, { useContext, useState } from \"react\";\r\nimport { Modal } from \"react-bootstrap\";\r\nimport { TranslationContext } from \"../../contexts/TranslationContext\";\r\nimport { SaveService } from \"../../services/SaveService\";\r\nimport { ErrorFlag, IUserSolution } from \"../../services/WebApiClient\";\r\nimport { LoadSpinner } from \"../LoadSpinner\";\r\nimport { EditorContext } from \"./EditorContext\";\r\nimport { LoginContext } from \"./LoginContext\";\r\n\r\n\r\nexport function SaveModal(props: {\r\n errorFlags: ErrorFlag,\r\n onClose: () => void,\r\n onSaved: (userSolution: IUserSolution) => void\r\n}) {\r\n\r\n const tc = useContext(TranslationContext);\r\n const ec = useContext(EditorContext);\r\n const loginContext = useContext(LoginContext);\r\n\r\n const [isWorking, setIsWorking] = useState(false);\r\n const [name, setName] = useState(ec.cabinet.name);\r\n\r\n const canSave = !!name && !isWorking;\r\n const canOverwrite = (\r\n ec.cabinet.userSolutionId !== null\r\n && ec.cabinet.orderNumber === null\r\n );\r\n\r\n async function save(overwrite: boolean) {\r\n if (!canSave)\r\n return;\r\n try {\r\n setIsWorking(true);\r\n const saveService = new SaveService(loginContext.loginService.http);\r\n const userSolution = await saveService.save(ec, name, overwrite);\r\n props.onSaved(userSolution);\r\n }\r\n finally {\r\n setIsWorking(false);\r\n }\r\n }\r\n\r\n const btnSaveClasses = [\r\n \"btn\",\r\n \"btn-primary\",\r\n \"btn-block\"\r\n ];\r\n if (!canSave) {\r\n btnSaveClasses.push(\"disabled\");\r\n }\r\n const btnOverwriteClasses = [\r\n \"btn\",\r\n \"btn-primary\",\r\n \"btn-block\"\r\n ];\r\n if (!canSave) {\r\n btnOverwriteClasses.push(\"disabled\");\r\n }\r\n const absStyle: React.CSSProperties = {\r\n position: \"absolute\",\r\n width: \"100%\",\r\n height: \"100%\",\r\n }\r\n\r\n\r\n return (\r\n \r\n\r\n \r\n \r\n {tc.translator(\"save modal header\", \"Gem løsning\")}\r\n \r\n \r\n\r\n \r\n
    \r\n {tc.translator(\r\n \"save modal instructions\",\r\n \"Giv din løsning et navn, så vi kan hjælpe dig med at finde den frem i forretningen.\")}\r\n
    \r\n {(props.errorFlags !== 0) &&
    \r\n {tc.translator(\r\n \"save modal errors\",\r\n \"Din løsning indeholder en eller flere fejl, som du bør rette inden bestilling.\"\r\n )}\r\n
    }\r\n\r\n
    { evt.preventDefault(); save(false); }}>\r\n setName(evt.target.value)} />\r\n\r\n \r\n\r\n {canOverwrite && (\r\n \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 { Modal } from 'react-bootstrap';\r\nimport { TranslationContext } from '../../contexts/TranslationContext';\r\nimport { IUserSolution } from \"../../services/WebApiClient\";\r\n\r\n\r\nexport function SaveSuccessModal(props: {\r\n userSolution: IUserSolution;\r\n onClose: () => void;\r\n}) {\r\n\r\n const tc = useContext(TranslationContext);\r\n\r\n return (\r\n \r\n\r\n \r\n {tc.translator(\"save success modal header\", \"Løsning gemt\")}\r\n \r\n\r\n \r\n
    \r\n {tc.translator(\r\n \"save success modal text\",\r\n \"Din løsning er nu gemt, og kan hentes frem i din lokal butik.\\n\\nTegningen hentes frem ved at give butikken dit telefonnummer.\\n\\nDu kan nu gennemgå dit forslag med sælgeren, og evt. rette indretning og døre til, så det stemmer helt overens med dine ønsker og behov.\\n\\nDu kan også hente tilbuddet som .pdf.\"\r\n )}\r\n
    \r\n \r\n {tc.translator(\r\n \"save success modal download button\",\r\n \"Hent løsning som .pdf\"\r\n )}\r\n \r\n
    \r\n
    \r\n );\r\n}\r\n","import React, { useContext, useState } from \"react\";\r\nimport { IUserSolution } from \"../../services/WebApiClient\";\r\nimport { EditorContext } from \"../EditorCommon/EditorContext\";\r\nimport { LoginContext } from \"../EditorCommon/LoginContext\";\r\nimport { LoginModal } from \"../EditorCommon/LoginModal\";\r\nimport { SaveModal } from \"../EditorCommon/SaveModal\";\r\nimport { SaveSuccessModal } from \"../EditorCommon/SaveSuccessModal\";\r\n\r\n\r\n\r\nexport function SaveButton(props: {}) {\r\n const loginContext = useContext(LoginContext);\r\n\r\n const ec = useContext(EditorContext);\r\n\r\n const [activeModal, setActiveModal] = useState<\r\n { s: \"none\" }\r\n | { s: \"login\" }\r\n | { s: \"save\" }\r\n | { s: \"success\", userSolution: IUserSolution }\r\n >({ s: \"none\" });\r\n\r\n function click() {\r\n const newModal = loginContext.loginService.currentUser\r\n ? \"save\"\r\n : \"login\";\r\n setActiveModal({ s: newModal });\r\n }\r\n\r\n function closeModal() { setActiveModal({ s: \"none\" }); }\r\n\r\n function onLoggedIn() { setActiveModal({ s: \"save\" }); }\r\n\r\n function onSaved(userSolution: IUserSolution) {\r\n setActiveModal({\r\n s: \"success\",\r\n userSolution\r\n });\r\n }\r\n\r\n let modal;\r\n if (activeModal.s === \"login\") {\r\n modal = ;\r\n }\r\n else if (activeModal.s === \"save\") {\r\n modal = ;\r\n }\r\n else if (activeModal.s === \"success\") {\r\n modal = \r\n }\r\n else {\r\n modal = undefined;\r\n }\r\n\r\n return (\r\n <>\r\n \r\n\r\n {modal}\r\n \r\n );\r\n}\r\n\r\n","import React, { useCallback, useContext } from 'react';\r\nimport { NavPage } from '../../services/NavService';\r\nimport { Cabinet, PieceListClient, PieceListConvertRequest } from '../../services/WebApiClient';\r\nimport { EditorContext } from '../EditorCommon/EditorContext';\r\nimport { usePromise } from '../EditorCommon/usePromise';\r\nimport { EditorNav } from '../EditorNav/EditorNav';\r\nimport { LoadSpinner } from '../LoadSpinner';\r\nimport { TopNav } from '../TopNav/TopNav';\r\nimport { PieceListTable } from './PieceListTable';\r\nimport { SaveButton } from './SaveButton';\r\n\r\nexport function PieceListEditor(props: {\r\n\r\n}) {\r\n const ec = useContext(EditorContext);\r\n const pieceList = usePromise(useCallback(async () => {\r\n const client = new PieceListClient();\r\n const response = await client.convert(new PieceListConvertRequest({\r\n cabinet: new Cabinet(ec.cabinet)\r\n }));\r\n return response.pieceList;\r\n },\r\n [ec.cabinet]\r\n ))\r\n\r\n return (\r\n
    \r\n \r\n\r\n
    \r\n {(pieceList === undefined)\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 {\r\n IChainInfo,\r\n IExtraProduct,\r\n IExtraProductGroup,\r\n IInteriorProduct,\r\n IInteriorProductGroup,\r\n IInteriorProductSubGroup,\r\n IProductLine\r\n} from \"../models/IChainInfo\";\r\nimport { ChainInfoClient } from \"./WebApiClient\";\r\n\r\n\r\nexport class ChainInfoService {\r\n\r\n constructor(private readonly client: ChainInfoClient) {\r\n\r\n }\r\n\r\n async getChainInfo(): Promise {\r\n var dtoCi = await this.client.getChainInfo();\r\n const extraProducts = dtoCi.extraProducts.map(dtoPg => {\r\n const ps = [] as IExtraProduct[];\r\n const pg = {\r\n ...dtoPg,\r\n products: ps,\r\n } as IExtraProductGroup;\r\n for (let dtoP of dtoPg.products) {\r\n const p = {\r\n ...dtoP,\r\n productGroup: pg,\r\n } as IExtraProduct;\r\n ps.push(p);\r\n }\r\n return pg;\r\n });\r\n\r\n return {\r\n ...dtoCi,\r\n logoUrl: dtoCi.logoUrl ?? undefined,\r\n cssUrl: dtoCi.cssUrl ?? undefined,\r\n extraProducts,\r\n productLines: dtoCi.productLines.map(dtoPl => {\r\n const interiorProducts = dtoPl.interiorProducts.map(dtoPg => {\r\n const psgs = [] as IInteriorProductSubGroup[];\r\n const pg = {\r\n ...dtoPg,\r\n interiorProductSubGroups: psgs\r\n } as IInteriorProductGroup;\r\n for (let dtoPsg of dtoPg.interiorProductSubGroups) {\r\n const ps = [] as IInteriorProduct[];\r\n const psg = {\r\n ...dtoPsg,\r\n productGroup: pg,\r\n products: ps\r\n } as IInteriorProductSubGroup;\r\n for (let dtoP of dtoPsg.products) {\r\n const p = {\r\n ...dtoP,\r\n productSubGroup: psg\r\n } as IInteriorProduct;\r\n ps.push(p);\r\n }\r\n\r\n psgs.push(psg);\r\n }\r\n return pg;\r\n });\r\n \r\n const result: IProductLine = {\r\n ...dtoPl,\r\n adapterMaterials: dtoPl.adapterProducts.flatMap(p => p.materials),\r\n interiorProducts,\r\n imageUrl: dtoPl.imageUrl ?? undefined\r\n };\r\n return result;\r\n })\r\n }\r\n }\r\n}\r\n","import { useContext } from 'react';\r\nimport { TranslationContext } from \"../../../contexts/TranslationContext\";\r\nimport { NavPage } from \"../../../services/NavService\";\r\nimport { TopNav } from \"../../TopNav/TopNav\";\r\n\r\n\r\nexport function AdminNav(props: {\r\n page: NavPage\r\n}) {\r\n const tc = useContext(TranslationContext);\r\n\r\n return (\r\n \r\n );\r\n}\r\n","import React from \"react\";\r\nimport \"./ImageSetter.scss\"\r\n\r\nexport function ImageSetter(props: {\r\n url: string | null,\r\n onSet: (file: File) => void\r\n}) {\r\n\r\n\r\n function onDrop(evt: React.DragEvent) {\r\n evt.preventDefault();\r\n const file = getFirstFile(evt);\r\n if (!file)\r\n return;\r\n props.onSet(file);\r\n }\r\n\r\n function onDragOver(evt: React.DragEvent) {\r\n evt.preventDefault();\r\n evt.stopPropagation();\r\n evt.dataTransfer.dropEffect = \"copy\";\r\n }\r\n const classes = [\r\n \"image-setter\",\r\n props.url ? \"img-set\" : \"img-unset\"\r\n ];\r\n\r\n const style: React.CSSProperties = {\r\n backgroundImage: props.url ? `url(${props.url})` : undefined\r\n };\r\n\r\n return (\r\n
    \r\n Drag image here\r\n
    \r\n );\r\n}\r\nfunction getFirstFile(evt: React.DragEvent) {\r\n if (!evt.dataTransfer.items)\r\n return;\r\n for (let i = 0; i < evt.dataTransfer.items.length; i++) {\r\n let item = evt.dataTransfer.items[i];\r\n if (item.kind === \"file\") {\r\n return item.getAsFile();\r\n }\r\n }\r\n return;\r\n}\r\n","import { useContext, useState } from \"react\";\r\nimport { NavPage } from \"../../../services/NavService\";\r\nimport { IMaterialListResponse, MaterialClient, MaterialItem } from \"../../../services/WebApiClient\";\r\nimport { LoginContext } from \"../../EditorCommon/LoginContext\";\r\nimport { LoadSpinner } from \"../../LoadSpinner\";\r\nimport { AdminNav } from \"../AdminNav/AdminNav\";\r\nimport { ImageSetter } from \"./ImageSetter\";\r\n\r\n\r\nexport function MaterialEditor(props: {}) {\r\n\r\n const loginContext = useContext(LoginContext);\r\n const [matsPromise, setMatsPromise] = useState | undefined>(undefined);\r\n const [mats, setMats] = useState(undefined);\r\n\r\n\r\n const matService = new MaterialClient(undefined, loginContext.loginService.http);\r\n if (!matsPromise) {\r\n const promise = matService.getMaterials().then(setMats);\r\n setMatsPromise(promise);\r\n }\r\n\r\n if (!mats) {\r\n return ;\r\n }\r\n\r\n\r\n function setSampleImage(mat: MaterialItem, f: File) {\r\n return matService.setSampleImage(mat.externalId, { data: f, fileName: mat.externalId })\r\n .then(response => response.path ?? undefined)\r\n }\r\n function setTextureImage(mat: MaterialItem, f: File) {\r\n return matService.setTextureImage(mat.externalId, { data: f, fileName: mat.externalId })\r\n .then(response => response.path ?? undefined)\r\n }\r\n\r\n const bodyRows = mats.materials.map(mat => (\r\n \r\n {mat.externalId}\r\n {mat.name}\r\n \r\n setSampleImage(mat, f)} />\r\n \r\n \r\n setTextureImage(mat, f)} />\r\n \r\n \r\n ));\r\n //TODO use \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 {bodyRows}\r\n \r\n\r\n
    IdNameSample imageTexture image
    \r\n
    \r\n );\r\n}\r\n","import React, { useContext } from 'react';\r\nimport { Modal } from 'react-bootstrap';\r\nimport { TranslationContext } from '../../contexts/TranslationContext';\r\nimport { IUserSolution } from '../../services/WebApiClient';\r\n\r\n\r\nexport function ReceiptModal(props: {\r\n userSolution: IUserSolution;\r\n onClose: () => void;\r\n}) {\r\n\r\n const tc = useContext(TranslationContext);\r\n\r\n return (\r\n \r\n \r\n {tc.translator(\"order receipt title\", \"Bekræftelse\")}\r\n \r\n\r\n \r\n
    \r\n {tc.translator(\"order receipt text\",\r\n \"Tilbuddet er oprettet med tilbudsnummer {orderNumber}.\\n\\nOBS: Dette er IKKE en ordre endnu - indsend tilbudsnummeret til ordrekontoret.\",\r\n { orderNumber: props.userSolution.orderNumber ?? \" -- \" }\r\n )}\r\n
    \r\n
    \r\n\r\n \r\n \r\n {tc.translator(\r\n \"save success modal download button\",\r\n \"Hent løsning som .pdf\"\r\n )}\r\n \r\n \r\n \r\n
    \r\n );\r\n}\r\n","import React from 'react';\r\n\r\n\r\nexport function DisplayDate(ddProps: { date: Date | undefined | null }) {\r\n const titleOpts: Intl.DateTimeFormatOptions = {\r\n weekday: \"long\",\r\n year: \"numeric\",\r\n month: \"long\",\r\n day: \"numeric\",\r\n hour: \"2-digit\",\r\n minute: \"2-digit\"\r\n\r\n };\r\n return (\r\n \r\n {ddProps.date?.toLocaleDateString() ?? \" -- \"}\r\n \r\n );\r\n}\r\n","\r\n\r\nexport function hasFlag(valueToTest: T, flag: T): boolean {\r\n return (valueToTest & flag) === flag;\r\n}\r\n\r\nexport function addFlag(existingValue: T, flag: T): T {\r\n return (existingValue | flag);\r\n}\r\n\r\n","import React, { useContext } from \"react\";\r\nimport { TranslationContext } from \"../../contexts/TranslationContext\";\r\nimport { ErrorFlag } from \"../../services/WebApiClient\";\r\nimport { hasFlag } from \"../../util/flags\";\r\n\r\n\r\nexport function ErrorFlagBadges({ errorFlags }: { errorFlags: ErrorFlag }) {\r\n\r\n const result: JSX.Element[] = [];\r\n if (hasFlag(errorFlags, ErrorFlag.Pullout)) {\r\n result.push();\r\n }\r\n if (hasFlag(errorFlags, ErrorFlag.WallMount)) {\r\n result.push();\r\n }\r\n if (hasFlag(errorFlags, ErrorFlag.ExceedsBounds)) {\r\n result.push();\r\n }\r\n return <>{result}\r\n}\r\n\r\nexport function PulloutWarningBadge() {\r\n const tc = useContext(TranslationContext);\r\n return (\r\n \r\n {tc.translator(\"error badge pullout main\", \"Udtræk\")}\r\n \r\n );\r\n}\r\nexport function WallMountWarningBadge() {\r\n const tc = useContext(TranslationContext);\r\n return (\r\n \r\n {tc.translator(\"error badge WallMount main\", \"Vare mod væg\")}\r\n \r\n );\r\n}\r\n\r\nexport function ExceedsBoundsWarningBadge() {\r\n const tc = useContext(TranslationContext);\r\n return (\r\n \r\n {tc.translator(\"error badge ExceedsBounds main\", \"Vare udenfor væg\")}\r\n \r\n );\r\n}\r\n","import React from 'react';\r\nimport \"./LoadSpinnerOverlay.scss\";\r\n\r\nexport function LoadSpinnerOverlay(props: {\r\n\r\n}) {\r\n\r\n\r\n\r\n return (\r\n
    \r\n
    \r\n
    \r\n Loading...\r\n
    \r\n
    \r\n
    \r\n );\r\n}\r\n","import React, { useContext } from 'react';\r\nimport { Modal } from 'react-bootstrap';\r\nimport { TranslationContext } from '../../contexts/TranslationContext';\r\n\r\n\r\nexport function OrderConfirmationModal(props: {\r\n onClose: () => void,\r\n orderNumber: string\r\n}) {\r\n\r\n\r\n const tc = useContext(TranslationContext);\r\n\r\n return (\r\n \r\n \r\n\r\n \r\n {tc.translator(\"order-confirm modal header\", \"Tilbud oprettet!\")}\r\n \r\n\r\n \r\n\r\n\r\n \r\n
    \r\n {tc.translator(\"order-confirm modal body-1\",\r\n \"Din løsning har fået tilbudsnummer {number}.\",\r\n { number: props.orderNumber }\r\n )}\r\n
    \r\n\r\n
    \r\n {tc.translator(\"order-confirm modal body-2\",\r\n \"OBS: Dette er IKKE en ordre endnu - indsend tilbudsnummeret til ordrekontoret.\"\r\n )}\r\n
    \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 { TranslationContext } from '../../contexts/TranslationContext';\r\nimport { IPostalAddress } from '../../services/WebApiClient';\r\nimport { State } from '../../util/useState2';\r\n\r\n\r\nexport function PostalAddressEditorField(props: {\r\n propName: keyof IPostalAddress;\r\n defaultName: string;\r\n address: State;\r\n htmlType: \"text\" | \"tel\" | \"email\";\r\n required?: boolean;\r\n disabled?: boolean;\r\n}) {\r\n\r\n const tc = useContext(TranslationContext);\r\n const label = tc.translator(`postal address prop ${props.defaultName}`, props.defaultName);\r\n const id = `pa_${props.propName}`;\r\n\r\n const required = props.required ?? true;\r\n\r\n function setProp(val: string) {\r\n props.address.set({\r\n ...props.address.value,\r\n [props.propName]: val\r\n });\r\n }\r\n\r\n return (\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n setProp(evt.target.value)}\r\n />\r\n
    \r\n
    \r\n );\r\n}\r\n","import React from 'react';\r\nimport { IPostalAddress } from '../../services/WebApiClient';\r\nimport { State } from '../../util/useState2';\r\nimport { PostalAddressEditorField } from './PostalAddressEditorField';\r\n\r\n\r\nexport function PostalAddressEditor(props: {\r\n postalAddress: State;\r\n disabled: boolean;\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","import React, { FormEvent, useContext, useState } from 'react';\r\nimport { Modal } from 'react-bootstrap';\r\nimport { TranslationContext } from '../../contexts/TranslationContext';\r\nimport { DeliveryType, IOrderSolutionRequest, IPostalAddress, IUserSolution, PostalAddress } from '../../services/WebApiClient';\r\nimport { useState2 } from '../../util/useState2';\r\nimport { PostalAddressEditor } from './PostalAddressEditor';\r\n\r\n\r\nexport function OrderModal(props: {\r\n us: IUserSolution;\r\n onClose: (orderInfo: IOrderSolutionRequest | undefined) => void;\r\n\r\n}) {\r\n\r\n const tc = useContext(TranslationContext);\r\n const billingAddress = useState2({\r\n name: \"\",\r\n address1: \"\",\r\n address2: \"\",\r\n city: \"\",\r\n country: tc.translator(\"order modal default country\", \"Danmark\"),\r\n caseId: \"\",\r\n phone: \"\",\r\n postalCode: \"\"\r\n });\r\n const [deliveryType, setDeliveryType] = useState(DeliveryType.BillingAddress);\r\n\r\n function submit(evt?: FormEvent) {\r\n evt?.preventDefault();\r\n const result: IOrderSolutionRequest = {\r\n customerAddress: new PostalAddress(billingAddress.value),\r\n deliveryType: deliveryType\r\n };\r\n props.onClose(result);\r\n }\r\n\r\n function setDeliveryType2(evt: React.ChangeEvent) {\r\n const strVal = evt.target.value;\r\n const intVal = parseInt(strVal);\r\n setDeliveryType(intVal);\r\n }\r\n\r\n return (\r\n props.onClose(undefined)}\r\n animation={false}\r\n show\r\n centered\r\n scrollable\r\n\r\n >\r\n
    \r\n \r\n \r\n {tc.translator(\"order modal header\", \"Bestil {name}\", { name: props.us.name })}\r\n \r\n \r\n\r\n \r\n\r\n {(props.us.errorFlags !== 0) &&
    \r\n {tc.translator(\r\n \"save modal errors\",\r\n \"Din løsning indeholder en eller flere fejl, som du bør rette inden bestilling.\"\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, { useContext } from 'react';\r\nimport { OverlayTrigger, Popover, PopoverContent, PopoverTitle } from 'react-bootstrap';\r\nimport { TopNavContext } from '../../contexts/TopNavContext';\r\nimport { CabinetClient, IOrderSolutionRequest, IUserSolution, OrderSolutionRequest, UserRight } from '../../services/WebApiClient';\r\nimport { useClient } from '../../util/useClient';\r\nimport { useState2 } from '../../util/useState2';\r\nimport { EditorContext } from '../EditorCommon/EditorContext';\r\nimport { LoadSpinnerOverlay } from '../LoadSpinnerOverlay/LoadSpinnerOverlay';\r\nimport \"./OrderButton.scss\"\r\nimport { OrderConfirmationModal } from './OrderConfirmationModal';\r\nimport { OrderModal } from './OrderModal';\r\n\r\n\r\nexport function OrderButton(props: {\r\n solution: IUserSolution;\r\n orderChanged: () => void;\r\n onOrderComplete: (us: IUserSolution) => void;\r\n}) {\r\n\r\n const ec = useContext(EditorContext);\r\n const topBarContext = useContext(TopNavContext);\r\n const cabinetClient = useClient(CabinetClient);\r\n const currentState = useState2<\r\n { s: \"initial\" }\r\n | { s: \"ordering\" }\r\n | { s: \"processing\" }\r\n | { s: \"showingConfirmation\", orderNumber: string}\r\n >({ s: \"initial\" });\r\n\r\n if (props.solution.orderedAt !== null) {\r\n return (<>\r\n \r\n {currentState.value.s === \"showingConfirmation\" && currentState.set({ s: \"initial\" })} />}\r\n );\r\n }\r\n\r\n\r\n if (!topBarContext.currentUser?.userRights.find(ur => ur === UserRight.OrderSolution)) {\r\n const overlay = (\r\n \r\n \r\n {ec.translator(\"user solution order button popover title notallowed\", \"Bestil\")}\r\n \r\n \r\n {ec.translator(\r\n \"user solution order button popover text notallowed\",\r\n \"Kontakt din lokale butik for at bestille løsningen. Oplys dit navn eller telefonnummer, så finder vores ekspedient din løsning.\")}\r\n \r\n \r\n );\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n\r\n async function orderSolution(orderInfo: IOrderSolutionRequest | undefined) {\r\n\r\n currentState.set({ s: \"processing\" });\r\n\r\n try {\r\n if (!orderInfo) {\r\n currentState.set({ s: 'initial' });\r\n return; //User closed the orderModal without pressing \"Order\"\r\n }\r\n\r\n const response = await cabinetClient.orderSolution(props.solution.id, new OrderSolutionRequest(orderInfo));\r\n currentState.set({ s: \"showingConfirmation\", orderNumber: response.orderNumber });\r\n props.onOrderComplete(props.solution);\r\n }\r\n catch (e) {\r\n //Ignore\r\n currentState.set({ s: 'initial' });\r\n }\r\n finally {\r\n props.orderChanged();\r\n }\r\n }\r\n\r\n\r\n\r\n\r\n return (\r\n <>\r\n \r\n {currentState.value.s === \"ordering\" && }\r\n {currentState.value.s === \"processing\" && }\r\n \r\n );\r\n}\r\n","import { useContext } from \"react\";\r\nimport { NavPage } from \"../../services/NavService\";\r\nimport { CabinetClient, IUserSolution } from \"../../services/WebApiClient\";\r\nimport { useClient } from \"../../util/useClient\";\r\nimport { DisplayDate } from \"../DisplayDate\";\r\nimport { EditorContext } from \"../EditorCommon/EditorContext\";\r\nimport { LoginContext } from \"../EditorCommon/LoginContext\";\r\nimport { IColumn, Table } from \"../Table/Table\";\r\nimport { ErrorFlagBadges } from \"./ErrorFlagBadges\";\r\nimport { OrderButton } from \"./OrderButton\";\r\n\r\n\r\n\r\nexport function UserSolutionTable(props: {\r\n userSolutions: IUserSolution[];\r\n orderChanged: () => void;\r\n onOrderComplete: (us: IUserSolution) => void;\r\n}) {\r\n\r\n const ec = useContext(EditorContext);\r\n const loginContext = useContext(LoginContext);\r\n const cabinetClient = useClient(CabinetClient);\r\n\r\n async function openSolution(us: IUserSolution) {\r\n const cabinetClient = new CabinetClient(undefined, loginContext.loginService.http);\r\n await ec.cabinetService.loadSavedCabinet(us.id, cabinetClient);\r\n const navigateResult = await ec.navService.navigate(NavPage.PieceList);\r\n if (!navigateResult.success) {\r\n await ec.navService.navigate(NavPage.ProductLine);\r\n }\r\n }\r\n\r\n function isDeletable(userSolution: IUserSolution) {\r\n return userSolution.orderedAt === null;\r\n }\r\n\r\n async function deleteSolution(userSolution: IUserSolution) {\r\n if (!isDeletable(userSolution)) {\r\n //Solution is ordered - cannot be deleted\r\n return;\r\n }\r\n const sure = window.confirm(ec.translator(\"user solution table delete question\", \"Er du sikker på du vil slette løsningen '{name}'?\", { name: userSolution.name}))\r\n if (!sure) {\r\n return;\r\n }\r\n await cabinetClient.deleteSolution(userSolution.id);\r\n props.orderChanged();\r\n }\r\n \r\n\r\n const columns: IColumn[] = [\r\n {\r\n key: \"name\",\r\n content: us => (\r\n {us.name} \r\n ),\r\n header: ec.translator(\"user solution table col name\", \"Navn\"),\r\n sort: (a,b) => a.name.localeCompare(b.name)\r\n },\r\n {\r\n key: \"createdAt\",\r\n content: us => ,\r\n header: ec.translator(\"user solution table col createdAt\", \"Oprettet\"),\r\n sort: (a,b) => a.createdAt.valueOf() - b.createdAt.valueOf()\r\n },\r\n {\r\n key: \"orderedAt\",\r\n content: us => ,\r\n header: ec.translator(\"user solution table col orderedAt\", \"Bestilt\"),\r\n sort: (a, b) => (a.orderedAt?.valueOf() ?? 0) - (b.orderedAt?.valueOf() ?? 0)\r\n },\r\n {\r\n key: \"orderNumber\",\r\n content: us => us.orderNumber ?? \" -- \",\r\n header: ec.translator(\"user solution table col orderNumber\", \"Tilbudsnummer\"),\r\n sort: (a,b) => a.orderNumber?.localeCompare(b.orderNumber ?? \"\") ?? -1 //Maybe change this to 1\r\n },\r\n {\r\n key: \"btnOpen\",\r\n className: \"width-auto\",\r\n content: us => (\r\n \r\n ),\r\n },\r\n {\r\n key: \"btnPdf\",\r\n className: \"width-auto\",\r\n content: us => (\r\n \r\n {ec.translator(\"user solution table btn pdf\", \"Hent som .pdf\")}\r\n \r\n ),\r\n },\r\n {\r\n key: \"btnOrder\",\r\n className: \"width-auto\",\r\n content: us => (\r\n \r\n ),\r\n },\r\n {\r\n key: \"btnDelete\",\r\n className: \"width-auto\",\r\n content: us => (\r\n \r\n )\r\n },\r\n ];\r\n\r\n\r\n return \r\n columns={columns}\r\n rows={props.userSolutions}\r\n rowKey={us => us.id}\r\n tableProps={{ className: \"table table-striped table-hover user-solution-table\" }}\r\n />\r\n\r\n}\r\n","import { useContext, useEffect, useState } from \"react\";\r\nimport { TranslationContext } from \"../../contexts/TranslationContext\";\r\nimport { NavPage } from \"../../services/NavService\";\r\nimport { CabinetClient, IUserSolution } from \"../../services/WebApiClient\";\r\nimport { LoginContext } from \"../EditorCommon/LoginContext\";\r\nimport { LoadSpinner } from \"../LoadSpinner\";\r\nimport { TopNav } from \"../TopNav/TopNav\";\r\nimport { ReceiptModal } from \"./ReceiptModal\";\r\nimport { UserSolutionTable } from \"./UserSolutionTable\";\r\n\r\n\r\nexport function CabinetList(props: {\r\n\r\n}) {\r\n\r\n const loginContext = useContext(LoginContext);\r\n const tc = useContext(TranslationContext);\r\n const [orderRevision, setOrderRevision] = useState(0);\r\n const [showReceiptFor, setShowReceiptFor] = useState();\r\n\r\n const [userSolutions, setUserSolutions] = useState(undefined);\r\n\r\n useEffect(() => {\r\n const cabinetClient = new CabinetClient(undefined, loginContext.loginService.http);\r\n cabinetClient.getCabinetList()\r\n .then(cl => {\r\n setUserSolutions(cl.userSolutions);\r\n });\r\n },\r\n [loginContext.loginService.http, orderRevision]);\r\n\r\n function updateOrderRevision() {\r\n setOrderRevision(orderRevision + 1);\r\n }\r\n\r\n return (\r\n <>\r\n \r\n\r\n {(userSolutions === undefined)\r\n ? \r\n : \r\n }\r\n\r\n {showReceiptFor?.orderNumber &&\r\n setShowReceiptFor(undefined)}\r\n userSolution={showReceiptFor}\r\n />\r\n }\r\n\r\n \r\n );\r\n}\r\n","import { useContext } from \"react\";\r\nimport { TranslationContext } from \"../../contexts/TranslationContext\";\r\nimport { IUserSearchResult } from \"../../services/WebApiClient\";\r\nimport { DisplayDate } from \"../DisplayDate\";\r\nimport { SortBy } from \"../Table/SortBy\";\r\nimport { IColumn, Table } from \"../Table/Table\";\r\n\r\n\r\n\r\nexport function CustomerSearchTable(props: {\r\n results: IUserSearchResult[];\r\n onSelectUser: ((u: IUserSearchResult) => void);\r\n}) {\r\n\r\n const tc = useContext(TranslationContext);\r\n\r\n const columns: IColumn[] = [\r\n {\r\n key: \"name\",\r\n content: usr => usr.name,\r\n header: tc.translator(\"customer search table col name\", \"Navn\"),\r\n sort: SortBy.String(usr => usr.name),\r\n },\r\n {\r\n key: \"email\",\r\n content: usr => usr.emailAddress,\r\n header: tc.translator(\"customer search table col email\", \"Email\"),\r\n sort: SortBy.String(usr => usr.emailAddress),\r\n },\r\n {\r\n key: \"phoneNumber\",\r\n content: usr => usr.phoneNumber,\r\n header: tc.translator(\"customer search table col phone\", \"Telefonnummer\"),\r\n sort: SortBy.String(usr => usr.phoneNumber),\r\n },\r\n {\r\n key: \"lastActive\",\r\n content: usr => ,\r\n header: tc.translator(\"customer search table col lastActive\", \"Sidst aktiv\"),\r\n sort: SortBy.Date(usr => usr.lastActive),\r\n },\r\n {\r\n key: \"numSolutions\",\r\n content: usr => usr.solutions.length + \"\",\r\n header: tc.translator(\"customer search table col numSolutions\", \"Løsninger\"),\r\n sort: SortBy.Number(usr => usr.solutions.length),\r\n },\r\n {\r\n key: \"openUser\",\r\n content: usr => (\r\n \r\n ),\r\n }\r\n ];\r\n return \r\n columns={columns}\r\n rows={props.results}\r\n rowKey={usr => usr.userId}\r\n tableProps={{ className: \"table table-striped table-hover customer-search-table\" }}\r\n />\r\n}\r\n","import React, { useContext } from 'react';\r\nimport { Modal } from \"react-bootstrap\";\r\nimport { TranslationContext } from \"../../contexts/TranslationContext\";\r\nimport { IUserSearchResult, IUserSolution } from \"../../services/WebApiClient\";\r\nimport { UserSolutionTable } from '../CabinetList/UserSolutionTable';\r\n\r\n\r\nexport function UserModal(props: {\r\n user: IUserSearchResult;\r\n onClose: () => void;\r\n orderChanged: () => void;\r\n onOrderComplete: (us: IUserSolution) => void;\r\n}) {\r\n\r\n const tc = useContext(TranslationContext);\r\n\r\n return (\r\n \r\n \r\n \r\n { props.user.name }\r\n \r\n\r\n \r\n \r\n {props.user.solutions.length > 0\r\n ? \r\n :

    {tc.translator(\"user modal no solutions text\", \"Ingen løsninger\")}

    \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, { useContext, useRef } from \"react\";\r\nimport { TranslationContext } from \"../../contexts/TranslationContext\";\r\nimport { NavPage } from \"../../services/NavService\";\r\nimport { CabinetClient, IUserSearchResult } from \"../../services/WebApiClient\";\r\nimport { useClient } from \"../../util/useClient\";\r\nimport { useState2 } from \"../../util/useState2\";\r\nimport { ReceiptModal } from \"../CabinetList/ReceiptModal\";\r\nimport { TopNav } from \"../TopNav/TopNav\";\r\nimport { CustomerSearchTable } from \"./CustomerSearchTable\";\r\nimport { UserModal } from \"./UserModal\";\r\n\r\n\r\nexport function CustomerSearch(props: {\r\n\r\n}) {\r\n\r\n const tc = useContext(TranslationContext);\r\n const searchField = useRef(null);\r\n const searchString = useState2(\"\");\r\n const selectedUserId = useState2();\r\n const userList = useState2();\r\n const showReceiptForId = useState2();\r\n const cabinetClient = useClient(CabinetClient);\r\n\r\n const showReceiptFor = userList.value\r\n ?.flatMap(u => u.solutions)\r\n ?.find(us => us.id === showReceiptForId.value);\r\n\r\n async function updateUserList() {\r\n const response = await cabinetClient.findCustomers(searchString.value);\r\n userList.set(response.searchResults);\r\n }\r\n async function search(evt: React.FormEvent) {\r\n evt.preventDefault();\r\n searchField.current?.select();\r\n await updateUserList();\r\n }\r\n\r\n\r\n const selectedUser = userList.value?.find(u => u.userId === selectedUserId.value);\r\n\r\n return (\r\n
    \r\n \r\n\r\n
    \r\n
    \r\n
    \r\n searchString.set(evt.target.value)}\r\n />\r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n\r\n {/*{searchString.value && }*/}\r\n {userList.value && selectedUserId.set(u.userId)}\r\n results={userList.value}\r\n />}\r\n\r\n {selectedUser && selectedUserId.set(undefined)}\r\n user={selectedUser}\r\n orderChanged={updateUserList}\r\n onOrderComplete={us => showReceiptForId.set(us.id)}\r\n />}\r\n\r\n {showReceiptFor?.orderNumber &&\r\n showReceiptForId.set(undefined)}\r\n userSolution={showReceiptFor}\r\n />\r\n }\r\n
    \r\n
    \r\n );\r\n}\r\n","import React, { useState, useCallback, useContext } from 'react';\r\nimport { TranslationContext } from '../../contexts/TranslationContext';\r\nimport { NavPage } from '../../services/NavService';\r\nimport { State, useState2 } from '../../util/useState2';\r\nimport { usePromise } from '../EditorCommon/usePromise';\r\nimport { LoadSpinner } from '../LoadSpinner';\r\nimport { AdminNav } from './AdminNav/AdminNav';\r\nimport \"./GenericEditor.scss\"\r\n\r\n\r\ninterface GenericEditorProps {\r\n /** Function to return a list of Ts. This will be called every time onChange() is called from editorFunc */\r\n getterFunc: () => Promise,\r\n /** Function to get the displayName of a T (for displaying in the left toolbar) */\r\n nameFunc: (t: T) => React.ReactNode,\r\n /** Function to get an editor for a single T. The element should have a key that is based both on T.id and on updateCount */\r\n editorFunc: (t: T, onChange: () => void, updateCount: number) => React.ReactNode\r\n className?: string,\r\n navPage?: NavPage,\r\n /** If set, makes a new button in the bottom of the left toolbar that should create a new T */\r\n newHandler?: {\r\n /**Text to display on the new button */\r\n buttonName: string,\r\n /** Handler to create a new T with default values. */\r\n onClick: () => Promise\r\n },\r\n /** If set, this element is placed in the left toolbox, below the main list */\r\n leftToolbox?: React.ReactNode,\r\n\r\n selectedId?: State,\r\n}\r\n\r\nexport function GenericEditor(props: GenericEditorProps) {\r\n const [updateCount, setUpdateCount] = useState(0);\r\n\r\n //use the provided selected id, if provided\r\n //call useState no matter what.\r\n const internalSelectedId = useState2(undefined);\r\n const selectedId = props.selectedId ?? internalSelectedId;\r\n\r\n const tc = useContext(TranslationContext);\r\n const getterFunc = props.getterFunc;\r\n const itemResponse = usePromise(useCallback(async () => {\r\n const response = await getterFunc();\r\n return {\r\n items: response,\r\n updateCount,\r\n };\r\n },\r\n [updateCount, getterFunc]\r\n ));\r\n\r\n const selectedItem = itemResponse?.items.find(i => i.id === selectedId.value);\r\n\r\n const itemElements = itemResponse?.items.map(i => {\r\n const classes = i.id === selectedId.value\r\n ? \"list-group-item active\"\r\n : \"list-group-item\";\r\n return (\r\n
  • selectedId.set(i.id)}\r\n >\r\n {props.nameFunc(i)}\r\n
  • \r\n );\r\n });\r\n\r\n\r\n function onChange() {\r\n setUpdateCount(updateCount + 1);\r\n }\r\n\r\n async function onNew(itemCreator: () => Promise) {\r\n try {\r\n selectedId.set(undefined);\r\n const newId = await itemCreator();\r\n selectedId.set(newId);\r\n }\r\n finally {\r\n onChange();\r\n }\r\n }\r\n\r\n return (\r\n
    \r\n {props.navPage && }\r\n\r\n
    \r\n {itemResponse === undefined\r\n ? \r\n : (\r\n <>\r\n
      \r\n {itemElements}\r\n {props.newHandler && (\r\n
    • onNew(props.newHandler!.onClick)}\r\n >\r\n {props.newHandler.buttonName}\r\n
    • \r\n\r\n )}\r\n
    \r\n\r\n {props.leftToolbox}\r\n \r\n )\r\n }\r\n
    \r\n\r\n
    \r\n {selectedItem\r\n ? props.editorFunc(selectedItem, onChange, itemResponse?.updateCount ?? -1)\r\n : {tc.translator(\"generic editor nothing selected\", \"Vælg et element fra listen til venstre.\")}\r\n }\r\n
    \r\n
    \r\n );\r\n}\r\n","import React, { useState } from 'react';\r\nimport { IStore, IUser, IUserEditRequest, UserClient, UserEditRequest, UserRole } from '../../../services/WebApiClient';\r\nimport { useClient } from '../../../util/useClient';\r\n\r\nexport function SingleUserEditor(props: {\r\n user: IUser;\r\n onChange: () => void;\r\n stores: IStore[] | undefined;\r\n}) {\r\n\r\n const user = props.user;\r\n const [state, setState] = useState({\r\n id: user.id,\r\n email: user.email,\r\n name: user.name,\r\n password: null,\r\n username: user.username,\r\n userRole: user.userRole,\r\n storeId: user.storeId\r\n });\r\n const client = useClient(UserClient);\r\n\r\n\r\n function updateProp(changes: Partial) {\r\n setState({\r\n ...state,\r\n ...changes\r\n });\r\n }\r\n async function updateUser(evt: React.FormEvent) {\r\n evt.preventDefault();\r\n const request = {\r\n ...state,\r\n password: state.password === \"\" ? null : state.password\r\n };\r\n try {\r\n await client.editUser(new UserEditRequest(request));\r\n }\r\n finally {\r\n props.onChange();\r\n }\r\n }\r\n\r\n return (\r\n
    \r\n

    User: {props.user.name}

    \r\n\r\n
    \r\n\r\n
    \r\n \r\n updateProp({ username: evt.target.value })} />\r\n
    \r\n\r\n
    \r\n \r\n updateProp({ name: evt.target.value })} />\r\n
    \r\n\r\n
    \r\n \r\n updateProp({ email: evt.target.value })} />\r\n
    \r\n\r\n
    \r\n \r\n updateProp({ password: evt.target.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
    \r\n
    \r\n );\r\n}\r\n","import React, { useCallback } from 'react';\r\nimport { CreateUserRequest2, IStore, IUser, UserClient } from '../../../services/WebApiClient';\r\nimport { useClient } from '../../../util/useClient';\r\nimport { GenericEditor } from '../GenericEditor';\r\nimport { SingleUserEditor } from './SingleUserEditor';\r\nimport \"./UserEditor.scss\";\r\n\r\n\r\nexport function UserEditor(props: {\r\n chainId: number;\r\n stores: IStore[] | undefined;\r\n}) {\r\n\r\n const chainId = props.chainId;\r\n const client = useClient(UserClient);\r\n const getterFunc = useCallback(\r\n () => client.getUsers(chainId)\r\n .then(response => response.users),\r\n [client, chainId]\r\n )\r\n\r\n function editorFunc(user: IUser, onChange: () => void, updateCount: number) {\r\n return (\r\n \r\n\r\n )\r\n }\r\n\r\n async function newUser(): Promise {\r\n const username = window.prompt(\"username\");\r\n if (!username)\r\n return undefined;\r\n const response = await client.createUser(new CreateUserRequest2({\r\n chainId: props.chainId,\r\n username: username\r\n }));\r\n return response.userId;\r\n }\r\n\r\n return (\r\n \r\n getterFunc={getterFunc}\r\n nameFunc={u => u.username}\r\n editorFunc={editorFunc}\r\n className=\"user-editor no-right-menu\"\r\n newHandler={{\r\n buttonName: \"Create new User...\",\r\n onClick: newUser\r\n }}\r\n />\r\n );\r\n}\r\n","import React, { useState, useCallback } from 'react';\r\nimport { Chain, ChainClient, SetChainProductLineRequest } from '../../../services/WebApiClient';\r\nimport { replaceInArray } from '../../../util/replaceInArray';\r\nimport { useClient } from '../../../util/useClient';\r\nimport { usePromise } from '../../EditorCommon/usePromise';\r\nimport { LoadSpinner } from '../../LoadSpinner';\r\nimport { IColumn, Table } from '../../Table/Table';\r\n\r\ninterface ICpl {\r\n productLineId: number;\r\n isActive: boolean;\r\n originalName: string;\r\n customName: string;\r\n isChanged: boolean;\r\n}\r\n\r\nexport function ChainProductLineAdmin(props: {\r\n chain: Chain;\r\n onChange: () => void\r\n}) {\r\n\r\n const client = useClient(ChainClient);\r\n const [chainProductLines, setChainProductLines] = useState();\r\n const [updateCount, setUpdateCount] = useState(0);\r\n\r\n usePromise(useCallback(async () => {\r\n const uc = updateCount;\r\n const response = await client.getChainProductLines(props.chain.id);\r\n setChainProductLines(response.chainProductLines.map(cpl => ({\r\n productLineId: cpl.productLineId,\r\n isActive: cpl.isActive,\r\n customName: cpl.customName ?? '',\r\n originalName: cpl.defaultName,\r\n isChanged: false\r\n })));\r\n return {\r\n chainProductLines: response.chainProductLines,\r\n uc,\r\n };\r\n },\r\n [client, props.chain, updateCount]\r\n ));\r\n\r\n function replaceCpl(productLineId: number, replacer: (original: ICpl) => ICpl) {\r\n if (!chainProductLines)\r\n return;\r\n const newState = replaceInArray(chainProductLines,\r\n c => c.productLineId === productLineId,\r\n c => ({ ...replacer(c), isChanged: true })\r\n ) ?? chainProductLines;\r\n setChainProductLines(newState);\r\n }\r\n function setIsActive(cpl: ICpl, isActive: boolean) {\r\n replaceCpl(cpl.productLineId,\r\n c => ({ ...c, isActive })\r\n );\r\n }\r\n\r\n function setName(cpl: ICpl, name: string) {\r\n replaceCpl(cpl.productLineId,\r\n c => ({ ...c, customName: name })\r\n );\r\n }\r\n\r\n async function save() {\r\n if (!chainProductLines)\r\n return;\r\n setChainProductLines(undefined);\r\n try {\r\n const requests = chainProductLines.filter(c => c.isChanged)\r\n .map(c => client.setChainProductLine(\r\n props.chain.id,\r\n c.productLineId,\r\n new SetChainProductLineRequest({\r\n isActive: c.isActive,\r\n name: c.customName === ''\r\n ? null\r\n : c.customName\r\n })\r\n ));\r\n await Promise.allSettled(requests);\r\n\r\n }\r\n finally {\r\n setUpdateCount(updateCount + 1);\r\n props.onChange();\r\n }\r\n }\r\n\r\n\r\n const columns: IColumn[] = [\r\n {\r\n content: cpl => cpl.originalName,\r\n key: \"originalName\",\r\n header: \"Original Name\"\r\n },\r\n {\r\n content: cpl => ( setIsActive(cpl, evt.target.checked)} />),\r\n key: \"isActive\",\r\n header: \"Active\",\r\n },\r\n {\r\n content: (cpl) => ( setName(cpl, evt.target.value)} />),\r\n key: \"customName\",\r\n header: \"Custom Name\",\r\n }\r\n ];\r\n\r\n if (!chainProductLines)\r\n return ;\r\n\r\n return (\r\n <>\r\n cpl.productLineId} />\r\n \r\n \r\n );\r\n}\r\n","import React, { useState } from 'react';\r\nimport { LoadSpinner } from '../../LoadSpinner';\r\nimport \"./FileUploader.scss\"\r\n\r\n\r\nexport function FileUploader(props: {\r\n text: string,\r\n onSet: (file: File) => Promise\r\n}) {\r\n\r\n const [isBusy, setIsBusy] = useState(false);\r\n\r\n async function onDrop(evt: React.DragEvent) {\r\n evt.preventDefault();\r\n if (isBusy)\r\n return;\r\n const file = getFirstFile(evt);\r\n if (!file)\r\n return;\r\n setIsBusy(true);\r\n\r\n try {\r\n await props.onSet(file);\r\n }\r\n finally {\r\n setIsBusy(false);\r\n }\r\n }\r\n\r\n function onDragOver(evt: React.DragEvent) {\r\n evt.preventDefault();\r\n evt.stopPropagation();\r\n evt.dataTransfer.dropEffect = \"copy\";\r\n }\r\n\r\n\r\n\r\n return (\r\n
    \r\n { isBusy ? : {props.text} }\r\n
    \r\n\t);\r\n}\r\n\r\nfunction getFirstFile(evt: React.DragEvent) {\r\n if (!evt.dataTransfer.items)\r\n return;\r\n for (let i = 0; i < evt.dataTransfer.items.length; i++) {\r\n let item = evt.dataTransfer.items[i];\r\n if (item.kind === \"file\") {\r\n return item.getAsFile();\r\n }\r\n }\r\n return;\r\n}\r\n","import React, { useContext } from 'react';\r\nimport { TranslationContext } from '../../../contexts/TranslationContext';\r\nimport { Chain, ChainClient } from '../../../services/WebApiClient';\r\nimport { useClient } from '../../../util/useClient';\r\nimport { FileUploader } from './FileUploader';\r\n\r\nexport function CssAdmin(props: {\r\n chain: Chain;\r\n onChange: () => void;\r\n}) {\r\n\r\n const tc = useContext(TranslationContext);\r\n const chainClient = useClient(ChainClient);\r\n\r\n async function uploadCss(f: File) {\r\n console.log(`Uploading css ${f.name}`);\r\n try {\r\n await chainClient.setCss(props.chain.id, { fileName: \"css.css\", data: f });\r\n }\r\n catch (ex) {\r\n window.alert(`Could not upload .css: ${ex}`)\r\n }\r\n finally {\r\n props.onChange();\r\n }\r\n }\r\n\r\n return (\r\n
    \r\n\r\n \r\n\r\n {props.chain.cssUrl\r\n ? {tc.translator(\"admin css download text\", \"Download .css file\")}\r\n : {tc.translator(\"admin css no file\", \"No custom .css set\")}\r\n }\r\n
    \r\n\t);\r\n}\r\n","import React, { useContext } from 'react';\r\nimport { ChainClient, IHostName } from '../../../services/WebApiClient';\r\nimport { LoginContext } from '../../EditorCommon/LoginContext';\r\nimport { SortBy } from '../../Table/SortBy';\r\nimport { IColumn, Table } from '../../Table/Table';\r\n\r\nexport function HostNameTable(props: {\r\n hostnames: IHostName[],\r\n onHostnameDeleted: (hn: IHostName) => void\r\n}) {\r\n\r\n const loginContext = useContext(LoginContext);\r\n\r\n async function deleteHost(hn: IHostName) {\r\n const isSure = window.confirm(`Are you sure you want to delete the hostname '${hn.host}'`);\r\n if (!isSure)\r\n return;\r\n const client = new ChainClient(undefined, loginContext.loginService.http);\r\n await client.deleteHostname(hn.id);\r\n props.onHostnameDeleted(hn);\r\n }\r\n\r\n const columns: IColumn[] = [\r\n {\r\n content: hn => hn.host,\r\n key: \"host\",\r\n header: \"Host\",\r\n sort: SortBy.String(hn => hn.host)\r\n },\r\n {\r\n content: hn => (\r\n deleteHost(hn)}\r\n >\r\n Delete\r\n \r\n ),\r\n key: \"delete\"\r\n }\r\n ]\r\n\r\n return (\r\n
    hn.id}\r\n />\r\n );\r\n}\r\n","import React, { useContext, useState } from 'react';\r\nimport { Chain, ChainClient, CreateHostNameRequest } from '../../../services/WebApiClient';\r\nimport { LoginContext } from '../../EditorCommon/LoginContext';\r\nimport { HostNameTable } from './HostNameTable';\r\n\r\nexport function HostNameAdmin(props: {\r\n chain: Chain,\r\n onChange: () => void,\r\n}) {\r\n\r\n const [newHostname, setNewHostname] = useState(\"\");\r\n const [isWorking, setIsWorking] = useState(false);\r\n const loginContext = useContext(LoginContext);\r\n\r\n const canCreate = !isWorking && !!newHostname;\r\n\r\n async function createHostName(evt: React.FormEvent) {\r\n evt.preventDefault();\r\n if (!canCreate) {\r\n return;\r\n }\r\n\r\n setIsWorking(true);\r\n try {\r\n const client = new ChainClient(undefined, loginContext.loginService.http);\r\n await client.createHostName(new CreateHostNameRequest({\r\n chainId: props.chain.id,\r\n host: newHostname\r\n }));\r\n setNewHostname(\"\");\r\n }\r\n catch (ex) {\r\n window.alert(`Could not set hostname: ${ex}`);\r\n }\r\n finally {\r\n setIsWorking(false);\r\n }\r\n props.onChange();\r\n }\r\n\r\n\r\n return (\r\n <>\r\n {props.chain.hostNames.length > 0\r\n ? \r\n : \"No host names\"\r\n }\r\n\r\n
    \r\n
    \r\n setNewHostname(evt.target.value)} />\r\n
    \r\n \r\n
    \r\n
    \r\n \r\n \r\n );\r\n}\r\n","import { Chain, ChainClient } from '../../../services/WebApiClient';\r\nimport { useClient } from '../../../util/useClient';\r\nimport { ImageSetter } from '../MaterialEditor/ImageSetter';\r\n\r\nexport function LogoAdmin(props: {\r\n chain: Chain,\r\n onChange: () => void\r\n}) {\r\n\r\n const chainClient = useClient(ChainClient);\r\n\r\n async function setLogo(f: File) {\r\n const extension = f.type.split(\"/\")[1];\r\n await chainClient.setLogo(props.chain.id,\r\n extension,\r\n { data: f, fileName: f.name }\r\n );\r\n props.onChange();\r\n }\r\n\r\n\r\n return (\r\n <>\r\n\r\n \r\n\r\n \r\n );\r\n}\r\n","import React, { useCallback, useContext, useState } from 'react';\r\nimport { TranslationContext } from '../../../contexts/TranslationContext';\r\nimport { Chain, ChainClient, SetChainDetailsRequest, TranslationAdminClient } from '../../../services/WebApiClient';\r\nimport { useClient } from '../../../util/useClient';\r\nimport { usePromise } from '../../EditorCommon/usePromise';\r\nimport { LoadSpinner } from '../../LoadSpinner';\r\n\r\nexport function SettingsAdmin(props: {\r\n chain: Chain,\r\n onChange: () => void,\r\n}) {\r\n\r\n const client = useClient(ChainClient);\r\n const translationClient = useClient(TranslationAdminClient);\r\n const tc = useContext(TranslationContext);\r\n const [vatRate, setVatRate] = useState(props.chain.vatRate * 100.0);\r\n const [productRailTop, setProductRailTop] = useState(props.chain.productRailTop);\r\n const [productRailBottom, setProductRailBottom] = useState(props.chain.productRailBottom);\r\n const [productShipping, setProductShipping] = useState(props.chain.productShippingFee);\r\n const [languageId, setLanguageId] = useState(props.chain.languageId);\r\n const [isBusy, setIsBusy] = useState(false);\r\n\r\n async function edit(evt: React.FormEvent) {\r\n evt.preventDefault();\r\n setIsBusy(true);\r\n try {\r\n await client.setChainDetails(props.chain.id, new SetChainDetailsRequest({\r\n vatRate: vatRate / 100,\r\n productRailTopExternalId: productRailTop,\r\n productRailBottomExternalId: productRailBottom,\r\n productShippingFeeExternalId: productShipping,\r\n languageId: languageId,\r\n }));\r\n\r\n }\r\n finally {\r\n setIsBusy(false);\r\n props.onChange();\r\n }\r\n }\r\n\r\n const languages = usePromise(useCallback(async () => {\r\n try {\r\n const response = await translationClient.getLanguages();\r\n return response.languages;\r\n }\r\n catch (ex) {\r\n return undefined;\r\n }\r\n },\r\n [translationClient]\r\n ))\r\n\r\n if (isBusy) {\r\n return \r\n }\r\n\r\n function setVatRateStr(vatStr: string) {\r\n try {\r\n const vr = parseFloat(vatStr);\r\n setVatRate(vr);\r\n }\r\n catch (ex) {\r\n console.warn(\"Could not convert vatrate\", ex);\r\n }\r\n }\r\n\r\n return (\r\n
    \r\n
    \r\n \r\n setVatRateStr(evt.target.value)}\r\n />\r\n
    \r\n\r\n
    \r\n \r\n setProductRailTop(evt.target.value)}\r\n />\r\n
    \r\n
    \r\n \r\n setProductRailBottom(evt.target.value)}\r\n />\r\n
    \r\n\r\n
    \r\n \r\n setProductShipping(evt.target.value)}\r\n />\r\n
    \r\n\r\n {languages && (\r\n
    \r\n \r\n \r\n
    \r\n )}\r\n\r\n \r\n \r\n );\r\n}\r\n","import { useCallback } from 'react';\r\nimport { Card } from 'react-bootstrap';\r\nimport { Chain, ChainClient } from '../../../services/WebApiClient';\r\nimport { useClient } from '../../../util/useClient';\r\nimport { usePromise } from '../../EditorCommon/usePromise';\r\nimport { UserEditor } from '../UserEditor/UserEditor';\r\nimport { ChainProductLineAdmin } from './ChainProductLineAdmin';\r\nimport { CssAdmin } from './CssAdmin';\r\nimport { HostNameAdmin } from './HostNameAdmin';\r\nimport { LogoAdmin } from './LogoAdmin';\r\nimport { SettingsAdmin } from './SettingsAdmin';\r\n\r\nexport function SingleChainAdmin(props: {\r\n chain: Chain,\r\n onChange: () => void,\r\n}) {\r\n\r\n const chainClient = useClient(ChainClient);\r\n const stores = usePromise(useCallback(async () => {\r\n\r\n const response = await chainClient.getStores(props.chain.id);\r\n return response.stores;\r\n\r\n }, [chainClient, props.chain.id]));\r\n\r\n return (\r\n
    \r\n
    \r\n \r\n
    \r\n \r\n \r\n Hostnames\r\n\r\n \r\n \r\n \r\n \r\n \r\n Product Lines\r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n Logo\r\n\r\n \r\n \r\n \r\n \r\n \r\n CSS\r\n\r\n \r\n \r\n \r\n \r\n \r\n Settings\r\n\r\n \r\n \r\n \r\n
    \r\n
    \r\n \r\n \r\n Users\r\n \r\n \r\n \r\n\r\n
    \r\n
    \r\n\r\n
    \r\n );\r\n}\r\n","import { useCallback, useState } from 'react';\r\nimport { NavPage } from '../../../services/NavService';\r\nimport { ChainClient } from '../../../services/WebApiClient';\r\nimport { useClient } from '../../../util/useClient';\r\nimport { usePromise } from '../../EditorCommon/usePromise';\r\nimport { LoadSpinner } from '../../LoadSpinner';\r\nimport { AdminNav } from '../AdminNav/AdminNav';\r\nimport \"./ChainEditor.scss\"\r\nimport { SingleChainAdmin } from './SingleChainAdmin';\r\n\r\n\r\nexport function ChainEditor(props: {\r\n\r\n}) {\r\n\r\n const [updateCount, setUpdateCount] = useState(0);\r\n const [selectedChainId, setSelectedChainId] = useState(undefined);\r\n\r\n const chainClient = useClient(ChainClient);\r\n const chainResponse = usePromise(useCallback(async () => {\r\n const uc = updateCount;\r\n const response = await chainClient.getChains();\r\n return {\r\n chains: response.chains,\r\n updateCount: uc,\r\n };\r\n }, [updateCount, chainClient]));\r\n\r\n const selectedChain = chainResponse?.chains.find(c => c.id === selectedChainId);\r\n\r\n const chainItems = chainResponse?.chains.map(c => {\r\n const classes = [\"list-group-item\"];\r\n if (selectedChain?.id === c.id) {\r\n classes.push(\"active\");\r\n }\r\n return (\r\n
  • setSelectedChainId(c.id)}\r\n >{c.name}
  • \r\n )\r\n });\r\n\r\n function onChange() {\r\n setUpdateCount(updateCount + 1);\r\n }\r\n\r\n const key = (selectedChain?.id ?? 'none') + \"-\" + chainResponse?.updateCount;\r\n\r\n return (\r\n
    \r\n \r\n\r\n
    \r\n {chainItems === undefined\r\n ? \r\n :
      {chainItems}
    \r\n }\r\n\r\n
    \r\n\r\n
    \r\n {selectedChain\r\n ? \r\n : ←←Select a chain to edit\r\n }\r\n
    \r\n
    \r\n );\r\n}\r\n","import React, { useContext, useEffect } from 'react';\r\nimport { EditorContext } from './EditorCommon/EditorContext';\r\n\r\nexport function ChainCss(props:{\r\n\t\r\n}) {\r\n\r\n const ec = useContext(EditorContext);\r\n const cssUrl = ec.cabinetService.chainInfo.cssUrl;\r\n useEffect(() => {\r\n if (!cssUrl) {\r\n return;\r\n }\r\n const elem = window.document.createElement(\"link\");\r\n elem.rel = \"stylesheet\";\r\n elem.href = cssUrl;\r\n elem.className = \"chain-css\";\r\n window.document.head.appendChild(elem);\r\n\r\n return function cleanup() {\r\n window.document.head.removeChild(elem);\r\n }\r\n })\r\n return <>;\r\n}\r\n","import React, { useContext } from 'react';\r\nimport { Card } from 'react-bootstrap';\r\nimport { TranslationContext } from '../../../contexts/TranslationContext';\r\nimport { EditProductLineRequest, IProductLine2, ProductLineClient, ProductLineLanguage } from '../../../services/WebApiClient';\r\nimport { useClient } from '../../../util/useClient';\r\nimport { useState2 } from '../../../util/useState2';\r\n\r\nexport function ProductLineDetaulsAdmin(props: {\r\n\r\n onChange: () => void;\r\n productLine: Readonly\r\n}) {\r\n\r\n\r\n const tc = useContext(TranslationContext);\r\n\r\n\r\n const client = useClient(ProductLineClient);\r\n const translations = useState2(() => props.productLine.productLineLanguages.map(pll => {\r\n\r\n return {\r\n id: pll.languageId,\r\n productLineLanguage: { ...pll },\r\n isChanged: false\r\n };\r\n }));\r\n const selectedTranslationIndex = useState2(0);\r\n const selectedTranslation = translations.value[selectedTranslationIndex.value];\r\n\r\n\r\n async function submit(evt: React.FormEvent) {\r\n evt.preventDefault();\r\n try {\r\n await client.editProductLine(\r\n props.productLine.id,\r\n new EditProductLineRequest({\r\n productLineLanguages: translations.value\r\n .filter(l => l.isChanged)\r\n .map(l => new ProductLineLanguage(l.productLineLanguage))\r\n })\r\n );\r\n }\r\n finally {\r\n props.onChange();\r\n }\r\n }\r\n function setName(newName: string) {\r\n const newTranslations = [...translations.value];\r\n newTranslations[selectedTranslationIndex.value] = {\r\n ...selectedTranslation,\r\n productLineLanguage: {\r\n ...selectedTranslation.productLineLanguage,\r\n name: newName\r\n },\r\n isChanged: true\r\n };\r\n translations.set(newTranslations);\r\n }\r\n function setDesc(newDesc: string) {\r\n const newTranslations = [...translations.value];\r\n newTranslations[selectedTranslationIndex.value] = {\r\n ...selectedTranslation,\r\n productLineLanguage: {\r\n ...selectedTranslation.productLineLanguage,\r\n description: newDesc\r\n },\r\n isChanged: true\r\n };\r\n translations.set(newTranslations);\r\n }\r\n\r\n return (\r\n \r\n \r\n Text\r\n\r\n
    \r\n
    \r\n \r\n \r\n
    \r\n
    \r\n \r\n setName(evt.target.value)}\r\n placeholder={tc.translator(\"admin edit product line name\", \"Navn\")}\r\n />\r\n
    \r\n\r\n
    \r\n \r\n \r\n ),\r\n header: tc.translator(\"admin language table header value\", \"Oversættelse\"),\r\n sort: SortBy.String(t => t.value),\r\n className:\"value\"\r\n }\r\n ];\r\n\r\n return (\r\n
    \r\n

    {language.name}

    \r\n \r\n
    \r\n\r\n \r\n \r\n \r\n );\r\n}\r\n","import React, { useCallback, useContext, useState } from 'react';\r\nimport { TranslationContext } from '../../../contexts/TranslationContext';\r\nimport { NavPage } from '../../../services/NavService';\r\nimport { TranslationService } from '../../../services/TranslationService';\r\nimport { CreateKeysRequest, CreateLanguageRequest, ILanguage, TranslationAdminClient, TranslationKey } from '../../../services/WebApiClient';\r\nimport { useClient } from '../../../util/useClient';\r\nimport { State } from '../../../util/useState2';\r\nimport { GenericEditor } from '../GenericEditor';\r\nimport { SingleLanguageEditor } from './SingleLanguageEditor';\r\n\r\n\r\nexport function TranslationEditor(props: {\r\n showTranslationKeys: State\r\n}) {\r\n\r\n const client = useClient(TranslationAdminClient);\r\n const [updateCount, setUpdateCount] = useState(0);\r\n const tc = useContext(TranslationContext);\r\n\r\n const getterFunc = useCallback(async () => {\r\n const response = await client.getLanguages();\r\n return {\r\n languages: response.languages,\r\n updateCount\r\n };\r\n },\r\n [client, updateCount]\r\n )\r\n\r\n const unreportedKeys = Object.keys(TranslationService.unknownTranslations)\r\n .filter(k => !TranslationService.unknownTranslations[k]?.reported)\r\n .length;\r\n\r\n function editorFunc(lang: ILanguage, onChange: () => void, editorUpdateCount: number) {\r\n return (\r\n \r\n );\r\n }\r\n\r\n async function createMissingKeys() {\r\n try {\r\n await client.createkeys(new CreateKeysRequest({\r\n translationKeys: Object.keys(TranslationService.unknownTranslations)\r\n .filter(k => TranslationService.unknownTranslations[k].reported === false)\r\n .map(key => new TranslationKey({\r\n key,\r\n defaultValue: TranslationService.unknownTranslations[key].defaultValue\r\n }))\r\n }));\r\n\r\n for (let k of Object.keys(TranslationService.unknownTranslations)) {\r\n const val = TranslationService.unknownTranslations[k];\r\n val.reported = true;\r\n }\r\n }\r\n finally {\r\n await Promise.resolve();\r\n setUpdateCount(updateCount + 1);\r\n }\r\n }\r\n\r\n const leftToolbox = (\r\n
    \r\n {unreportedKeys > 0 &&\r\n
    \r\n \r\n
    \r\n }\r\n
    \r\n props.showTranslationKeys.set(evt.target.checked)}\r\n id=\"chk-show-translation-keys\"\r\n />\r\n \r\n
    \r\n
    \r\n );\r\n\r\n return (\r\n \r\n nameFunc={lang => {\r\n const unknownCount = lang.translations\r\n .filter(t => t.value === null)\r\n .length;\r\n if (unknownCount === 0)\r\n return lang.name;\r\n return (\r\n \r\n \r\n {unknownCount}\r\n \r\n \r\n {lang.name}\r\n \r\n \r\n );\r\n }}\r\n getterFunc={async () => (await getterFunc()).languages}\r\n editorFunc={editorFunc}\r\n key={updateCount}\r\n navPage={NavPage.Admin.Translation}\r\n leftToolbox={leftToolbox}\r\n newHandler={{\r\n buttonName: tc.translator(\"admin translations sidebar new lang button\", \"Nyt sprog\"),\r\n onClick: async () => {\r\n const newName = window.prompt(\r\n tc.translator(\"admin translations sidebar new lang prompt\", \"Sprognavn\"),\r\n tc.translator(\"admin translations sidebar new lang prompt default\", \"Volapyk\")\r\n );\r\n if (!newName)\r\n return;\r\n const response = await client.createLanguage(new CreateLanguageRequest({ name: newName }));\r\n return response.languageId;\r\n }\r\n }}\r\n\r\n />\r\n );\r\n}\r\n","import React, { useCallback, useState } from 'react';\r\nimport 'bootstrap/dist/css/bootstrap.min.css';\r\nimport {\r\n Switch,\r\n Route,\r\n useHistory,\r\n} from \"react-router-dom\";\r\nimport './App.scss';\r\nimport 'bootstrap/dist/css/bootstrap.min.css';\r\nimport Login from './components/login/login';\r\nimport { ProductLineEditor } from './components/ProductLine/ProductLineEditor';\r\nimport { NavService, NavPage } from './services/NavService';\r\nimport { LoginService } from './services/LoginService';\r\nimport { ChainInfoClient, ICabinet, TranslationClient } from './services/WebApiClient';\r\nimport { ResetTopic, CabinetService, ResetConfirmer } from './services/CabinetService';\r\nimport { DimensionsEditor } from './components/DimensionsEditor/DimensionsEditor';\r\nimport { TranslationService } from './services/TranslationService';\r\nimport { NotFound } from './components/NotFound';\r\nimport DoorTypeEditor from './components/DoorTypeEditor/DoorTypeEditor';\r\nimport { DoorEditor } from './components/DoorEditor/DoorEditor';\r\nimport { ResetConfirmModal } from './components/EditorCommon/ResetConfirmModal';\r\nimport User from './models/User';\r\nimport { InteriorEditor } from './components/InteriorEditor/InteriorEditor';\r\nimport { CommonEditorProps, EditorContext } from './components/EditorCommon/EditorContext';\r\nimport { PieceListEditor } from './components/PieceListEditor/PieceListEditor';\r\nimport { LoginContext } from './components/EditorCommon/LoginContext';\r\nimport { ChainInfoService } from './services/ChainInfoService';\r\nimport { MaterialEditor } from './components/admin/MaterialEditor/MaterialEditor';\r\nimport { TranslationContext } from './contexts/TranslationContext';\r\nimport { CabinetList } from './components/CabinetList/CabinetList';\r\nimport { CustomerSearch } from './components/CustomerSearch/CustomerSearch';\r\nimport { ChainEditor } from './components/admin/ChainEditor/ChainEditor';\r\nimport { ChainCss } from './components/ChainCss';\r\nimport { ProductLineAdminEditor } from './components/admin/ProductLineAdminEditor/ProductLineAdminEditor';\r\nimport { ExtraProductEditor } from './components/ExtraProductEditor/ExtraProductEditor';\r\nimport { ProductAdminEditor } from './components/admin/ProductAdminEditor/ProductAdminEditor';\r\nimport { InteriorMaterialEditor } from './components/admin/InteriorMaterialEditor/InteriorMaterialEditor';\r\nimport { DoorAdmin } from './components/admin/DoorAdmin/DoorAdmin';\r\nimport { MiscAdmin } from './components/admin/Misc/MiscAdmin';\r\nimport { usePromise } from './components/EditorCommon/usePromise';\r\nimport { TranslationEditor } from './components/admin/TranslationEditor/TranslationEditor';\r\nimport { useClient } from './util/useClient';\r\nimport { useState2 } from './util/useState2';\r\nimport { TopNavContext } from './contexts/TopNavContext';\r\nimport { DebugContext, DebugContextProps } from './contexts/DebugContext';\r\n\r\ninterface ResetConfirmState {\r\n confirmer: ((a: boolean) => void),\r\n topics: ResetTopic[],\r\n}\r\n\r\nfunction App(props: {\r\n\r\n}) {\r\n\r\n\r\n const history = useHistory();\r\n const [user, setUser] = useState(undefined);\r\n const [resetConfirmState, setResetConfirmState] = useState();\r\n let [cabinet, setCabinet] = useState();\r\n const showTranslationKeys = useState2(false);\r\n const debugContextProps = useState2({\r\n displayExtendedProductInfo: false,\r\n });\r\n const translationClient = useClient(TranslationClient);\r\n const translations = usePromise(useCallback(async () => {\r\n const response = await translationClient.getTranslations();\r\n return response.translations;\r\n },\r\n [translationClient]\r\n ));\r\n\r\n const translationService = new TranslationService(translations, showTranslationKeys.value);\r\n const translator = translationService.translate.bind(translationService);\r\n\r\n const loginService = new LoginService(setUser);\r\n\r\n const resetConfirmer: ResetConfirmer = (topics) => new Promise((resolve, reject) => {\r\n //this is run if you make a change where the user needs to confirm that some changes to the cabinet are discarded.\r\n\r\n //if there is already a dialog open, discard that\r\n resetConfirmState?.confirmer(false);\r\n\r\n setResetConfirmState({\r\n topics,\r\n confirmer: (ans: boolean) => {\r\n //this is run when the user confirms or abandons their changes.\r\n setResetConfirmState(undefined);\r\n resolve(ans);\r\n }\r\n })\r\n });\r\n\r\n const chainInfo = usePromise(useCallback(\r\n async () => {\r\n const cis = new ChainInfoService(new ChainInfoClient());\r\n return await cis.getChainInfo();\r\n },\r\n []\r\n ));\r\n\r\n let cabinetService = undefined;\r\n let navService = undefined;\r\n if (chainInfo) {\r\n if (!cabinet) {\r\n cabinet = CabinetService.createDefaultCabinet(chainInfo);\r\n setCabinet(cabinet);\r\n }\r\n cabinetService = new CabinetService(chainInfo, resetConfirmer, cabinet, setCabinet);\r\n navService = new NavService(cabinetService, history);\r\n }\r\n\r\n\r\n\r\n let resetConfirmModal = resetConfirmState && (\r\n \r\n );\r\n\r\n let routeSwitch = (\r\n <>\r\n \r\n \r\n \r\n history.push(\"/\")} loginService={loginService} />\r\n \r\n\r\n { /* Editor Routes */}\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 { /* Admin Routes */}\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\r\n \r\n );\r\n\r\n if (cabinetService && cabinet && navService) {\r\n\r\n let commonEditorProps: CommonEditorProps = {\r\n navService: navService,\r\n cabinetService: cabinetService,\r\n cabinet: cabinet,\r\n translator: translator,\r\n };\r\n routeSwitch = (\r\n \r\n {routeSwitch}\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 {resetConfirmModal}\r\n \r\n\r\n {routeSwitch}\r\n\r\n \r\n \r\n \r\n \r\n
    \r\n );\r\n}\r\n\r\n\r\n\r\nfunction preventDrop(evt: React.DragEvent) {\r\n evt.preventDefault();\r\n evt.stopPropagation();\r\n evt.dataTransfer.dropEffect = \"none\";\r\n}\r\n\r\nexport default App;\r\n","import { MemoryRouter as Router } from 'react-router-dom';\r\n\r\n\r\nfunction AppWrapper(props: { children?: JSX.Element }) {\r\n return (\r\n \r\n {props.children}\r\n \r\n );\r\n}\r\n\r\n\r\nexport default AppWrapper;\r\n","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport './index.css';\r\nimport App from './App';\r\nimport AppWrapper from './AppWrapper';\r\n\r\nReactDOM.render(\r\n \r\n \r\n \r\n \r\n ,\r\n document.getElementById('root')\r\n);\r\n"],"sourceRoot":""}