{"version":3,"sources":["components/availableDevices/duck.js","components/entities/duck.js","indexedDB/etimDB.js","components/favorites/duck.js","components/entities/operationPoint/duck.js","components/possibleDevices/machines/blind.js","components/possibleDevices/machines/data.js","components/possibleDevices/machines/dimmer.js","components/possibleDevices/machines/motion.js","components/possibleDevices/machines/socket.js","components/possibleDevices/machines/switch.js","components/elbridge/duck.js","vendor/qlib.js","redux/rootReducer.js","components/entities/device/duck.js","components/projects/duck.js","vendor/migration.js","components/entities/helpers/changeDesignRange.js","components/possibleDevices/machines/doorCommunication.js","redux/store/configureStore.js","proto/etim_pb.js","vendor/enableBatchReducer.js","components/entities/helpers/calculateTouchProtection.js","components/entities/helpers/updateOnPiecelist.js","logic/calculateFavorites.js","logic/calculateTemplate.js","logic/calculateTouchProtection.js","components/possibleDevices/machines/rtr.js","logic/calculatePossibleDevice.js","components/entities/room/duck.js","vendor/persistQueryClient.js","vendor/queryClient.js","components/entities/helpers/index.js","App.js","index.js","redux/middleware/updateProject.js","redux/store/configureStore.prod.js","components/entities/floor/duck.js","components/api/index.js","logic/calculateDeviceForCplate.js","components/entities/building/duck.js","logic/calculateFrame.js"],"names":["initialState","buffer","ArrayBuffer","additionalDoorCommunicationData","additionalBlindData","additionalCplateData","additionalDataData","additionalDimmerData","additionalMotionData","additionalSocketData","additionalSwitchData","additionalRtrData","etimClasses","specialSocketData","synonyms","cplateMapping","calculatedTemplates","designChangeSpecialties","availableDevicesSlice","createSlice","name","reducers","setDevices","state","action","payload","setAdditionalDoorCommunicationData","data","setAdditionalBlindData","setAdditionalCplateData","setAdditionalDataData","setAdditionalDimmerData","setAdditionalMotionData","setAdditionalSocketData","setAdditionalSwitchData","setAdditionalRtrData","setSpecialSocketData","setSynonyms","setCPlateMapping","setFrameMapping","frameMapping","setCalculatedTemplates","setDesignChangeSpecialties","_availableDevicesSlic","actions","getCalculatedTemplates","availableDevices","getFrameMapping","getCplateMapping","getSynonyms","getDesignChangeSpecialties","getAdditionalDoorCommunicationData","getAdditionalBlindData","getAdditionalCplateData","getAdditionalDataData","getAdditionalDimmerData","getAdditionalMotionData","getAdditionalSocketData","getAdditionalSwitchData","getAdditionalRtrData","getSpecialSocketData","getAdditionalData","createByteLengthEqualSelector","concat","_toConsumableArray","reduce","arr","index","findIndex","el","supplier_pid","_arr$index$additional","_data$additionalArtic","element","_objectSpread","omit","additionalArticles","split","length","filter","self","indexOf","join","exclude","push","getDeviceList","byteLength","etimProto","deserializeBinary","getDevicesList","getAdditionalDataResolved","additionalData","deviceList","Array","isArray","map","replaceAll","id","device","find","dev","getSupplierpid","supplierPid","manufacturerTypeDescr","getManufacturertypedescr","features","getFeatures","getAdditionalSwitchDataResolved","getAdditionalDoorCommunicationDataResolved","getAdditionalBlindDataResolved","getAdditionalDimmerDataResolved","getAdditionalMotionDataResolved","getSerie","_state$projects","_state$projects$data","projects","serie","getDevicesWithoutFrame","JSON","parse","Id","etimClassesForAdditionalDevices","includes","getOriginDevice","availableDeviceId","createDraftSafeSelector","getCplatesForColors","cPlateMapping","obj","_cPlateMapping$find","originDevice","articleColor","parseInt","seriesId","colorId","cPlateColorId","cPlates","calculateDeviceForCPlate","articleNumber","splits","slice","defaults","IsDefault","getCplate","serieId","limit","arguments","undefined","orientation","_cPlateMapping$find2","defaultCurrency","getDefaultCplate","getDateFromProtobuf","protoTimestamp","seconds","getSeconds","nanos","getNanos","Date","CLEAR_ENTITIES","SET_ENTITIES","SET_ENTITY_LABEL","SET_CONFIG_VALUE","entityInitialState","byId","allIds","entityReducer","configIndex","type","_defineProperty","label","config","reducer","building","floor","room","operationPoint","entitiesAtom","atomWithReducer","_JSON$parse","localStorage","getItem","enableBatchReducer","atom","get","set","setItem","stringify","entityAttributes","clearEntities","setEntities","entities","Object","keys","setEntityLabel","setConfigValue","cloneEntity","entity","dispatch","getState","generateCloneSequence","batchActions","calculateOnPiecelist","onPiecelist","updateOnPiecelist","getAllEntities","getEntity","entityId","getEntityResolved","createDeepEqualSelector","resolve","unresolvedDevice","_loop","entityAttribute","i","hasOwnProperty","parent","frame","getRootEntityId","createSelector","getEditableProject","project","_project$data","rootEntityId","getRootEntity","_project$data2","getRootEntityResolved","rootEntity","getFloors","floors","getActiveFloor","activeFloor","getActiveRoom","rooms","activeRoom","getDesignRangeForActiveRoom","getParentDesignRange","getAllDevices","devices","forEach","operationPoints","op","isUpdating","roomId","quantity","getAllOperationPoints","getOperationPointsFromEntity","entityResolved","getConfiguratedDevices","allDevices","mapConfiguratedDevices","byRoom","configuredDevices","getTotalPriceFromConfiguratedDevices","totalSum","_device$originDevice","_device$originDevice$","_device$originDevice$2","s","getPricedetails","getPricesList","getAmount","Math","round","getEntitiesFromOperationPoint","operationPointId","opEntities","deviceId","cplateId","cplate","getHasOperationPointError","roomEntities","projectId","devicesWithoutFrame","hasError","el2","getCalculatedFavorites","getFavorites","designRange","favorites","calculateFavorites","getAvailableTemplates","getDesignInformationFromProject","designInfomationen","calculateTemplates","getAvailableCombinations","imgData","getImageDataFromOperationPoint","getOrientation","equals","isFavorite","favoriteId","ID","getStartCombinations","val","key","onStart","getAvailableStartCombinations","getAvailableSuggestions","getAvailableOperationPoints","getAvailableOperationPointsLength","combinations","getAvailableStartCombination","startCombinations","getAvailableSeries","cplateColor","frameColor","getCategories","series","switchRangeId","switchColorId","switchFrameColorId","height","groups","frameTypeId","frameHeight","products","orderNumber","seriesImages","promise","then","img","fetchImage","Promise","cats","catsImages","cat","axios","post","process","responseType","response","Buffer","toString","possibleClasses","possibleSwitchClasses","possibleBlindClasses","possibleDataClasses","possibleDimmerClasses","possibleMotionClasses","possibleSocketClasses","possibleDoorCommunicationClasses","possibleTypes","ret","types","class","getClassForName","className","classIndex","_possibleTypes$classI","_possibleTypes$classI2","_possibleTypes$classI3","getFeatureDescriptionFromOperationPoint","combination","classes","_synonyms$find","description","classID","synonym","deviceProto","_synonyms$find2","feature","_loop2","_possibleClasses$clas","_possibleClasses$clas2","keysIndex","feat","possible","filters","Feature","Fname","Value","Fvalue","komfortschalter","availableDescriptions","getDescriptionshort","getNameFromMachines","getMergedFeatureDescriptionFromOperationPoint","acc","getIsSocket","getProjectResolved","mapDataForPlansoftExort","allEntities","text","position","device2Id","date","getFullYear","String","getMonth","padStart","getDate","design","designInformation","_entity$config","_entity$config$find","_entity$config2","_entity$config2$find","_entity$config3","_entity$config3$find","value","frameRangeId","frameColorId","GetUrlDevices","url","encodeURIComponent","getIdsForDesignRangeChange","ids","getCplateForSerie","foundIndex","newCPlateMapping","newArticleName","newOriginDevice","_regeneratorRuntime","exports","Op","prototype","hasOwn","defineProperty","desc","$Symbol","Symbol","iteratorSymbol","iterator","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","toStringTag","define","enumerable","configurable","writable","err","wrap","innerFn","outerFn","tryLocsList","protoGenerator","Generator","generator","create","context","Context","makeInvokeMethod","tryCatch","fn","arg","call","ContinueSentinel","GeneratorFunction","GeneratorFunctionPrototype","IteratorPrototype","getProto","getPrototypeOf","NativeIteratorPrototype","values","Gp","defineIteratorMethods","method","_invoke","AsyncIterator","PromiseImpl","previousPromise","callInvokeWithMethodAndArg","reject","invoke","record","result","__await","unwrapped","error","Error","doneResult","delegate","delegateResult","maybeInvokeDelegate","sent","_sent","dispatchException","abrupt","done","methodName","return","TypeError","info","resultName","next","nextLoc","pushTryEntry","locs","entry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","reset","iterable","iteratorMethod","isNaN","displayName","isGeneratorFunction","genFun","ctor","constructor","mark","setPrototypeOf","__proto__","awrap","async","iter","object","reverse","pop","skipTempReset","prev","charAt","stop","rootRecord","rval","exception","handle","loc","caught","hasCatch","hasFinally","finallyEntry","complete","finish","catch","thrown","delegateYield","etimDB","Dexie","version","stores","etim","on","_asyncToGenerator","_callee","_context","add","open","favoritesSlice","setFavorites","fetchAddFavorite","status","statusText","queryClient","invalidateQueries","FETCH_FAVORITES","fetchRemoveFavorite","getFavoriteFromCombination","_cplateMapping$find","_tmpFavorite","tmpFavorite","pick","replace","ADD_OPERATION_POINT","CLONE_OPERATION_POINT","OPERATION_POINT_REFERENCE_DEVICE","OPERATION_POINT_DEREFERENCE_DEVICE","OPERATION_POINT_REFERENCE_FRAME","OPERATION_POINT_DEREFERENCE_FRAME","REORDER_DEVICES","SET_OPERATION_POINT_QUANTITY","SET_OPERATIONPOINT_IS_UPDATING","deviceIndex","roomListReducer","allIdIndex","originOperationPointId","addOperationPoint","changeQuantity","v4","setQuantity","generateDeleteSequence","sequence","createOperationPoint","newDeviceId","isSocket","projectType","addDeviceToOperationPoint","newCPlateId","subtype","frameSize","frameData","getFrameDataFromOperationPoint","calculateFrame","addFrameToOpertaionPoint","createOperationPointWithDevice","cPlateColor","buildOperationPointRoomReference","deleteOperationPoint","removeOperationPoint","referenceDeviceWithOperationPoint","dereferenceDeviceWithOperationPoint","referenceFrameWithOperationPoint","dereferenceFrameWithOperationPoint","removeDeviceOperationPointReference","copyOperationPoint","setOrderDevices","combOrientation","_operationPoint$confi","_operationPoint$confi2","width","deviceLength","getOperationPointFromCombination","getOperationPointOrientation","_operationPoint$confi3","conf","_operationPoint$confi4","initialValues","switch","operation","extension","timing","sensor","specials","blindMachine","Machine","states","initial","TYPE_NONE","MECHANISCH","ELEKTRONISCH","SWITCH_NONE","SCHALTER","TASTER","OPERATION_NONE","DRUECKEN","SCHLUESSEL","MANUEL","DREHEN","IR","EXTENSION_NONE","NEBENSTELLE","SENSOR_NONE","TEMPERATUR","HELLIGKEIT","GLAS","WIND","REGEN","SPECIALS_NONE","NEUTRALLEITER","LAUFZEIT_PARAMETRIERBAR","calculate","assign","event","actionMeta","_actionMeta$state","_event$payload","identifier","sw","notPossible","formStatus","additionalFilters","descriptions","_blindMachine$transit","transition","_blindMachine$transit2","_blindMachine$transit3","_blindMachine$transit4","dataMachine","UAE","TAE","SPEAKER","ANTENNA","OTHER","_dataMachine$initialS","_dataMachine$initialS2","_dataMachine$transiti","_dataMachine$transiti2","_dataMachine$transiti3","_dataMachine$transiti4","_dataMachine$transiti5","_dataMachine$transiti6","last","special","dimmerMachine","DREHBEDIENUNG","TASTBEDIENUNG","DREHNEBENSTELLE","LAST_NONE","INDUCTIVE","KAPAZITVE","OHM","EVG1_10V","UNIVERSAL","WECHSEL_KREUZSCHALTER","SPECIAL_NONE","ZWEITER_AUSGANG_GESCHALTET","ZWEITER_AUSGANG_GEDIMMT","_dimmerMachine$transi","_dimmerMachine$transi2","_dimmerMachine$transi3","_dimmerMachine$transi4","_dimmerMachine$transi5","_dimmerMachine$transi6","lence","connection","channel","voltage","motionMachine","BEWEGUNGSMELDER","KOMFORTSCHALTER","_motionMachine$initia","_motionMachine$initia2","_motionMachine$transi","_motionMachine$transi2","color","socketMachine","ERHOEHTER_BERUEHRUNGSSCHUTZ","KLAPPDECKEL","UEBERSPANNUNGSSCHUTZ","LABEL_NONE","BESCHRIFTUNGSFELD","EDV","COLOR_NONE","GRUEN","ORANGE","KONTROLLLICHT","_socketMachine$transi","_socketMachine$transi2","_socketMachine$transi3","_socketMachine$transi4","_socketMachine$transi5","_socketMachine$transi6","_socketMachine$transi7","_socketMachine$transi8","rocker","light","switchMachine","WECHSELSCHALTER","AUSSCHALTER","KREUZSCHALTER","DREI_STUFEN_MIT_NULLSTELLUNG","DREI_STUFEN_OHNE_NULLSTELLUNG","JALOUSIESCHALTER","JALOUSIESCHALTER_DREHKNOPF","PROFILHALBZYLINDER_SCHALTER","SCHLIESSER","OEFFNENTASTER","ZUGTASTER","WECHSELTASTER","JALOUSIETASTER","JALOUSIETASTER_DREHTASTER","PROFILHALBZYLINDER_TASTER","CHANNEL_NONE","SINGLE_KANAL","DOUBLE_KANAL","TRIPPLE_KANAL","ROCKER_NONE","SINGLE_ROCKER","DOUBLE_ROCKER","VOLTAGE_NONE","VOLTAGE_TEN_A","VOLTAGE_TEN_AX","VOLTAGE_SIXTEEN_A","VOLTAGE_SIXTEEN_AX","LIGHT_NONE","KONTROLLLEUCHTE","N_KLEMME","SEP_KLEMME","OERIENTIERUNGSLICHT","SEPERATE_EINSPEISUNG","elements","events","_switchMachine$initia","_switchMachine$initia2","_switchMachine$transi","_switchMachine$transi2","_switchMachine$transi3","_switchMachine$transi4","_switchMachine$transi5","_switchMachine$transi6","_switchMachine$transi7","_switchMachine$transi8","_switchMachine$transi9","_switchMachine$transi10","_switchMachine$transi11","_switchMachine$transi12","_switchMachine$transi13","_switchMachine$transi14","_switchMachine$transi15","_switchMachine$transi16","isSet","hookurl","country","language","supplierId","elbridgeSlice","setElbridge","disableEldbridge","_elbridgeSlice$action","getElbridge","elbridge","capitalize","this","toUpperCase","createSelectorCreator","defaultMemoize","isEqual","a","b","usePrevious","ref","useRef","useEffect","current","RESET_APP","appReducer","combineReducers","enableBatching","ADD_DEVICE","CLONE_DEVICE","REMOVE_DEVICE","CHANGE_DEVICE","CHANGE_QUANTITY","CHANGE_ON_PIECELIST","deviceReducer","parentId","parentEntityId","deviceType","deviceListReducer","originDeviceId","addDevice","opId","deleteDevice","removeDevice","copyDevice","changeDevice","changeOnPiecelist","noDevice","projectsSlice","addProject","addExistingProject","setProjectPreferences","projectPreferences","setProjectDeviceType","setProjectSerie","setProjectCplateColor","setProjectFrameColor","setRoomFloorPlanning","roomFloorPlanning","setProjectId","_projectsSlice$action","createProject","floorId","createBuilding","createFloor","createRoom","loadProject","projectToLoad","newState","currentState","deviceState","operationPointState","parentDesignRange","migration","getProjectDeviceType","touchProtection","dataSockets","satSockets","getIsRoomFloorPlanning","defaultDeviceType","calculateChangeDesignRange","args","currentDesignRange","calculateActionsForDesignRangeChange","changeFrame","affectedEntities","getAffectedEntities","actionsKeep","operationPointError","operationPointActions","_device$devices","oldCPlateMapping","availableDevice","newArticleNumber","newAvailableDevice","foundReplace","string","_bestPossibleDevice","_bestPossibleDevice2","possibleDevices","calculatePossibleDevice","bestPossibleDevice","bestMatches","pDev","matches","originParentDevice","_deviceList$find","frameId","actionKeep","subEntities","x","doorCommunicationMachine","DOOR_COMMUNICATION","_doorCommunicationMac","_doorCommunicationMac2","module","require","jspb","goog","global","globalThis","window","Function","google_protobuf_timestamp_pb","extend","proto","exportSymbol","model","DeviceProto","opt_data","Message","initialize","inherits","DEBUG","COMPILED","DiscountGroup","PackagingUnit","UserDefinedExtensions","repeatedFields_","Prices","PriceDetails","Mime_infos","MimeDetails","DevicesProto","GENERATE_TO_OBJECT","toObject","opt_includeInstance","includeInstance","msg","f","internationalpid","getFieldWithDefault","manufacturername","descriptionshort","descriptionlong","supplieraltpid","manufacturerpid","manufacturertypedescr","supplierpid","pricedetails","userdefinedextensions","getUserdefinedextensions","dividingunit","knxteilnehmer","mimedetails","getMimedetails","insertedat","getInsertedat","Timestamp","$jspbMessageInstance","bytes","reader","BinaryReader","deserializeBinaryFromReader","nextField","isEndGroup","getFieldNumber","readUint64","setInternationalpid","readString","setManufacturername","setDescriptionshort","setDescriptionlong","setSupplieraltpid","setManufacturerpid","setManufacturertypedescr","setSupplierpid","readMessage","setPricedetails","setUserdefinedextensions","setDividingunit","setKnxteilnehmer","setColor","setMimedetails","setFeatures","setInsertedat","skipField","serializeBinary","writer","BinaryWriter","serializeBinaryToWriter","getResultBuffer","message","getInternationalpid","writeUint64","getManufacturername","writeString","getDescriptionlong","getSupplieraltpid","getManufacturerpid","writeMessage","getDividingunit","getKnxteilnehmer","getColor","groupmanufacturer","setGroupmanufacturer","getGroupmanufacturer","setProto3StringField","gtin","depth","getFloatingPointFieldWithDefault","weight","quantitymax","quantitymin","packageunitcode","setGtin","readFloat","setDepth","setWidth","setLength","setWeight","readInt32","setQuantitymax","setQuantitymin","setPackageunitcode","getGtin","getDepth","writeFloat","getWidth","getLength","getWeight","getQuantitymax","writeInt32","getQuantitymin","getPackageunitcode","setProto3FloatField","setProto3IntField","discountgroupList","toObjectList","getDiscountgroupList","packagingunitList","getPackagingunitList","veryshortdescription","addDiscountgroup","addPackagingunit","setVeryshortdescription","writeRepeatedMessage","getVeryshortdescription","getRepeatedWrapperField","setDiscountgroupList","setRepeatedWrapperField","opt_value","opt_index","addToRepeatedWrapperField","clearDiscountgroupList","setPackagingunitList","clearPackagingunitList","tax","amount","currency","setTax","setAmount","setCurrency","getTax","getCurrency","pricesList","addPrices","setPricesList","clearPricesList","source","purpose","setDesc","setType","setSource","setPurpose","getDesc","getType","getSource","getPurpose","mimeInfosList","getMimeInfosList","addMimeInfos","setMimeInfosList","clearMimeInfosList","getWrapperField","setWrapperField","clearPricedetails","hasPricedetails","getField","clearUserdefinedextensions","hasUserdefinedextensions","clearMimedetails","hasMimedetails","clearInsertedat","hasInsertedat","devicesList","addDevices","setDevicesList","clearDevicesList","curState","calculateTouchProtection","curDev","newDevice","calulatedTemplates","templates","elementTypes","possibleFrames","calulatePossibleFrameSizes","template","_template$combination","size","articleNumbers","einsatz","additionalDevice","article","_originDevice","_originDevice4","_originDevice2","_originDevice3","possibleArticle","possibleDevice","possibleDevices2","possibleDevice2","calculateTouchProtectionForTemplates","steckverbindung","cplates","wippe","console","warn","chk","comb","returnObj","rtrMachine","_rtrMachine$initialSt","_rtrMachine$initialSt2","checkDeviceForClass","checkDevicesForFeatures","checkDeviceForColor","checkDevicesForFeatures2","chkDevice","chk1","arrayChk","checkForAdditionalFilters","_descriptions$0$addit","all","ADD_ROOM","CLONE_ROOM","REMOVE_ROOM","ROOM_REFERENCE_OPERATION_POINT","ROOM_DEREFERENCE_OPERATION_POINT","roomInitialState","operationPointIndex","originRoomId","addRoom","buildRoomFloorReference","deleteRoom","removeRoom","referenceOperationPointWithRoom","dereferenceOperationPointWithRoom","OperationPointId","copyRoom","_persistQueryClient","_ref","persistor","_ref$maxAge","maxAge","_ref$buster","buster","saveClient","persistedClient","expired","busted","persistClient","timestamp","now","clientState","dehydrate","restoreClient","removeClient","hydrate","t0","getQueryCache","subscribe","apply","throttle","func","wait","timer","_len","_key","setTimeout","QueryClient","defaultOptions","queries","cacheTime","localStoragePersistor","_ref2","_ref2$localStorageKey","localStorageKey","_ref2$throttleTime","throttleTime","filteredQueries","query","queryKey","FETCH_IMAGE","FETCH_CENTRALPLATE","filteredClient","cacheString","removeItem","createLocalStoragePersistor","_x","persistQueryClient","batch","layer","targetEntityId","originSubId","newId","copyFloor","referenceFloorWithBuilding","setActiveFloor","referenceRoomWithFloor","setActiveRoom","subSequence","subEntity","_entity$parent","actionSequence","dereferenceFloorWithBuilding","deleteFloor","dereferenceRoomWithFloor","_entity$parent2","_entity$parent3","_entity$parent4","Layout","lazy","messages","de","messages_de","formats","number","style","App","_configureStore","configureStore","store","BroadcastChannel","addEventListener","location","reload","React","createElement","ToastContainer","toastClassName","autoClose","Provider","Router","ThemeProvider","IntlProvider","locale","defaultFormats","onError","code","QueryClientProvider","client","PersistGate","loading","Suspense","fallback","CircularProgress","ReactQueryDevtools","initialIsOpen","gsap","registerPlugin","CSSPlugin","ReactDOM","render","document","getElementById","updateProject","getActions","isLoggedIn","getIsLoggedIn","fetchUpdateProject","enhancer","compose","applyMiddleware","thunkMiddleware","createSentryMiddleware","Sentry","persistConfig","storage","migrate","blacklist","persistedReducer","persistReducer","createStore","persistStore","ADD_FLOOR","CLONE_FLOOR","REMOVE_FLOOR","FLOOR_REFERENCE_ROOM","FLOOR_DEREFERENCE_ROOM","SET_ACTIVE_ROOM","floorInitialState","roomIndex","buildingId","floorListReducer","originFloorId","addFloor","removeFloor","createFloorWithRoom","buildFloorBuildingReference","FETCH_SERIES","FETCH_COLORS","FETCH_FRAMEMAPPING","FETCH_CPLATEMAPPING","FETCH_CALCULATED_DATA","FETCH_DEVICES_PROTO","FETCH_USER_DATA","FETCH_FRAMEPOSITIONS","FETCH_SYNONYMS","FETCH_PROJECTS","FETCH_PROJECT","FETCH_GLOBAL_SETTINGS","FETCH_DESIGN_CHANGE_SPECIALTIES","FETCH_DEVICE_CLASSES","FETCH_DEVICE_FEATURES","FETCH_DEVICE_VALUES","seriesSchema","isFetching","schema","Entity","idAttribute","fetchSeries","Axios","normalize","colorsSchema","colors","fetchColors","fetchFrameMapping","fetchCplateMapping","fetchDesginChangeSpecialties","getFramePositions","rangeID","frameTypeID","y","resp","fetchCalculatedData","fetchDevicesProto","update","fetchSynoyms","getFrameColors","frameColors","getCplateColors","src","fetchUserData","ssoAuth","xhr","XMLHttpRequest","FormData","append","readyState","responseText","Cookies","expires","remove","send","ssoRefresh","secure","HttpOnly","interceptors","request","use","token","headers","Authorization","originalRequest","e","log","getUser","getQueryData","_getUser2","username","fetchProjects","mappedProjects","fetchProject","saveProject","intl","toast","success","formatMessage","defaultMessage","fetchQuery","removeProject","fetchAdditionalDoorCommunicationData","fetchAdditionalBlindData","fetchAdditionalCplateData","fetchAdditionalDataData","fetchAdditionalDimmerData","fetchAdditionalMotionData","fetchAdditionalSocketData","fetchAdditionalSwitchData","fetchAdditionalRtrData","fetchSpecialSocketData","fetchGlobalSettings","saveGlobalSettings","fetchETIMChecksum","checksum","fetchDeviceClasses","fetchDeviceFeatures","fetchDeviceValues","exportPlansoft","checkPossibleForAddionalArticles","getAdditionalArticles","calculateDescritpions1","possibleForAddionalArticles","_featureClass$Feature","_featureClass$Feature2","_featureClass$Feature3","_featureClass$Feature4","_featureClass$Feature5","additionalArticleData","featureClass","getFeatureClass","description2","description3","description4","bedienungsart","uae","speaker","bedienung","_featureClass$Feature6","additionalDeviceFeatures","calculateDescritpions2","featClass","withoutIcon","some","feature2","countButton","ausfuehrung","_additionalDeviceData","additionalDeviceData","fname","fvalue","calculateForAdditionalData","calculatedAdditionalArticles","_calculateDescritpion","ADD_BUILDING","REMOVE_BUILDING","CLONE_BUILDING","REFERENCE_FLOOR","DEREFERENCE_FLOOR","SET_ACTIVE_FLOOR","buildingInitialState","floorIndex","buildingListReducer","originBuildingId","addBuilding","calculateFrames","_frameMapping$find","match","klappDeckel","sort"],"mappings":"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","file":"static/js/main.d9c12537.chunk.js","sourcesContent":["import * as etimProto from '../../proto/etim_pb';\nimport omit from 'lodash/omit'\nimport { createByteLengthEqualSelector } from '../../vendor/qlib';\nimport { createDraftSafeSelector, createSlice } from '@reduxjs/toolkit'\nimport { calculateDeviceForCPlate } from '../../logic/calculateDeviceForCplate';\n\nexport const FETCH_DEVICES_BUFFER_RECEIVE = 'plansoft/availableDevices/FETCH_DEVICES_BUFFER_RECEIVE'\n\nexport const initialState = {\n buffer: new ArrayBuffer(0),\n additionalDoorCommunicationData: [],\n additionalBlindData: [],\n additionalCplateData: [],\n additionalDataData: [],\n additionalDimmerData: [],\n additionalMotionData: [],\n additionalSocketData: [],\n additionalSwitchData: [],\n additionalRtrData: [],\n etimClasses: [],\n specialSocketData: [],\n synonyms: [],\n cplateMapping: [],\n calculatedTemplates: [],\n designChangeSpecialties: [],\n}\n\nconst availableDevicesSlice = createSlice({\n name: 'availableDevices',\n initialState,\n reducers: {\n setDevices(state, action) {\n state.buffer = action.payload.buffer\n },\n setAdditionalDoorCommunicationData(state, action) {\n state.additionalDoorCommunicationData = action.payload.data\n },\n setAdditionalBlindData(state, action) {\n state.additionalBlindData = action.payload.data\n },\n setAdditionalCplateData(state, action) {\n state.additionalCplateData = action.payload.data\n },\n setAdditionalDataData(state, action) {\n state.additionalDataData = action.payload.data\n },\n setAdditionalDimmerData(state, action) {\n state.additionalDimmerData = action.payload.data\n },\n setAdditionalMotionData(state, action) {\n state.additionalMotionData = action.payload.data\n },\n setAdditionalSocketData(state, action) {\n state.additionalSocketData = action.payload.data\n },\n setAdditionalSwitchData(state, action) {\n state.additionalSwitchData = action.payload.data\n },\n setAdditionalRtrData(state, action) {\n state.additionalRtrData = action.payload.data\n },\n setSpecialSocketData(state, action) {\n state.specialSocketData = action.payload.data\n },\n setSynonyms(state, action) {\n state.synonyms = action.payload.synonyms\n },\n setCPlateMapping(state, action) {\n state.cplateMapping = action.payload.cplateMapping\n },\n setFrameMapping(state, action) {\n state.frameMapping = action.payload.frameMapping\n },\n setCalculatedTemplates(state, action) {\n state.calculatedTemplates = action.payload.calculatedTemplates\n },\n setDesignChangeSpecialties(state, action) {\n state.designChangeSpecialties = action.payload.designChangeSpecialties\n }\n \n },\n})\n\nexport const {\n setDevices,\n setSynonyms,\n setCPlateMapping,\n setFrameMapping,\n setCalculatedTemplates,\n setAdditionalDoorCommunicationData,\n setAdditionalBlindData,\n setAdditionalCplateData,\n setAdditionalDataData,\n setAdditionalDimmerData,\n setAdditionalMotionData,\n setAdditionalSocketData,\n setAdditionalSwitchData,\n setAdditionalRtrData,\n setSpecialSocketData,\n setDesignChangeSpecialties\n} = availableDevicesSlice.actions\nexport default availableDevicesSlice.reducer\n\nexport const getCalculatedTemplates = state => state.availableDevices.calculatedTemplates\nexport const getFrameMapping = state => state.availableDevices.frameMapping\nexport const getCplateMapping = state => state.availableDevices.cplateMapping\nexport const getSynonyms = state => state.availableDevices.synonyms\nexport const getDesignChangeSpecialties = state => state.availableDevices.designChangeSpecialties\n\nexport const getAdditionalDoorCommunicationData = state => state.availableDevices.additionalDoorCommunicationData\nexport const getAdditionalBlindData = state => state.availableDevices.additionalBlindData\nexport const getAdditionalCplateData = state => state.availableDevices.additionalCplateData\nexport const getAdditionalDataData = state => state.availableDevices.additionalDataData\nexport const getAdditionalDimmerData = state => state.availableDevices.additionalDimmerData\nexport const getAdditionalMotionData = state => state.availableDevices.additionalMotionData\nexport const getAdditionalSocketData = state => state.availableDevices.additionalSocketData\nexport const getAdditionalSwitchData = state => state.availableDevices.additionalSwitchData\nexport const getAdditionalRtrData = state => state.availableDevices.additionalRtrData\nexport const getSpecialSocketData = state => state.availableDevices.specialSocketData\n\nexport const getAdditionalData = createByteLengthEqualSelector(\n [getAdditionalBlindData, getAdditionalCplateData, getAdditionalDataData, getAdditionalDimmerData, getAdditionalMotionData, getAdditionalSocketData, getAdditionalSwitchData, getAdditionalRtrData, getAdditionalDoorCommunicationData],\n (additionalBlindData, additionalCplateData, additionalDataData, additionalDimmerData, additionalMotionData, additionalSocketData, additionalSwitchData, additionalRtrData, additionalDoorCommunicationData) => {\n return [\n ...additionalBlindData,\n ...additionalCplateData,\n ...additionalDataData,\n ...additionalDimmerData,\n ...additionalMotionData,\n ...additionalSocketData,\n ...additionalSwitchData,\n ...additionalRtrData,\n ...additionalDoorCommunicationData\n ].reduce((arr, data) => {\n const index = arr.findIndex(el => el.supplier_pid === data.supplier_pid)\n if (index > -1) {\n let element = {\n ...omit(arr[index], ['additionalArticles', 'exclude']),\n ...omit(data, ['additionalArticles', 'exclude']),\n }\n const additionalArticles = [\n ...(arr[index].additionalArticles?.split(', ') || []),\n ...(data.additionalArticles?.split(', ') || [])\n ]\n\n if (additionalArticles.length > 0) {\n element.additionalArticles = additionalArticles\n .filter((el, index, self) => index === self.indexOf(el))\n .join(', ')\n }\n\n element.exclude = {\n ...arr[index].exclude,\n ...data.exclude\n }\n \n arr[index] = element\n } else {\n arr.push(data)\n }\n return arr\n }, [])\n }\n)\n\nexport const getAvailableDeviceBuffer = state => state.availableDevices.buffer\n\nexport const getDeviceList = createByteLengthEqualSelector(\n [getAvailableDeviceBuffer],\n (buffer) => {\n if (buffer && buffer.byteLength > 0) {\n return etimProto.DevicesProto.deserializeBinary(buffer).getDevicesList()\n }\n return []\n }\n)\n\nconst getAdditionalDataResolved = (additionalData, deviceList) => {\n if (Array.isArray(additionalData)) {\n return additionalData.map(el => {\n let additionalArticles\n if (el.additionalArticles) {\n additionalArticles = el.additionalArticles.replaceAll(' ', '').split(',').map(id => {\n const device = deviceList.find(dev => {\n return dev.getSupplierpid() === id\n })\n if (device) {\n return {\n supplierPid: id,\n manufacturerTypeDescr: device.getManufacturertypedescr(),\n features: device.getFeatures()\n } \n }\n return {\n supplierPid: id\n }\n })\n }\n return {\n ...el,\n additionalArticles: additionalArticles\n }\n })\n }\n return additionalData\n}\n\nexport const getAdditionalSwitchDataResolved = createByteLengthEqualSelector(\n [getAdditionalSwitchData, getDeviceList],\n (additionalSwitchData, deviceList) => {\n return getAdditionalDataResolved(additionalSwitchData, deviceList)\n }\n)\n\nexport const getAdditionalDoorCommunicationDataResolved = createByteLengthEqualSelector(\n [getAdditionalDoorCommunicationData, getDeviceList],\n (additionalDoorCommunicationData, deviceList) => {\n return getAdditionalDataResolved(additionalDoorCommunicationData, deviceList)\n }\n)\n\nexport const getAdditionalBlindDataResolved = createByteLengthEqualSelector(\n [getAdditionalBlindData, getDeviceList],\n (additionalBlindData, deviceList) => {\n return getAdditionalDataResolved(additionalBlindData, deviceList)\n }\n)\n\nexport const getAdditionalDimmerDataResolved = createByteLengthEqualSelector(\n [getAdditionalDimmerData, getDeviceList],\n (additionalDimmerData, deviceList) => {\n return getAdditionalDataResolved(additionalDimmerData, deviceList)\n }\n)\n\nexport const getAdditionalMotionDataResolved = createByteLengthEqualSelector(\n [getAdditionalMotionData, getDeviceList],\n (additionalMotionData, deviceList) => {\n return getAdditionalDataResolved(additionalMotionData, deviceList)\n }\n)\n\nconst getSerie = (state) => state?.projects?.data?.serie \n\nexport const getDevicesWithoutFrame = createByteLengthEqualSelector(\n [getDeviceList],\n (deviceList) => {\n if (deviceList && Array.isArray(deviceList)) {\n return deviceList\n .filter(el => {\n let features = el?.getFeatures() ? JSON.parse(el.getFeatures()) : null\n //EC000450 Geräteanschlussdose\n //EC000779 Innenstation für Türkommunikation (One Touch)\n return features && Array.isArray(features) && (features[0].Id === 'EC000450' || features[0].Id === 'EC000779' || !etimClassesForAdditionalDevices.includes(features[0].Id))\n })\n .map(el => el.getSupplierpid()) \n }\n return []\n }\n)\n\nexport const getOriginDevice = (state, availableDeviceId) => {\n return createDraftSafeSelector(\n [getDeviceList],\n (deviceList) => {\n if (availableDeviceId && deviceList) {\n return deviceList.find(el => el.getSupplierpid() === availableDeviceId)\n }\n return null\n }\n )(state)\n}\n\nexport const getCplatesForColors = (state, data) => {\n return createDraftSafeSelector(\n [getDeviceList, getCplateMapping, getAdditionalData, getSerie],\n (deviceList, cPlateMapping, additionalData, serie) => {\n return data.map(obj => {\n const originDevice = deviceList.find(el => {\n return el.getSupplierpid() === obj.availableDeviceId\n })\n \n const articleColor = cPlateMapping.find(\n el => el.serie === parseInt(obj.seriesId) && el.colorId === parseInt(obj.cPlateColorId)\n )?.articleColor\n\n if (originDevice && articleColor) {\n const cPlates = calculateDeviceForCPlate(\n obj.availableDeviceId,\n deviceList,\n JSON.parse(originDevice.getFeatures()),\n articleColor,\n additionalData,\n [],\n 'full',\n serie\n )\n\n const articleNumber = originDevice.getManufacturertypedescr ? originDevice.getManufacturertypedescr() : null\n const splits = articleNumber ? articleNumber.split('-') : []\n const id = (splits.length > 1 ? splits.slice(0, -1) : splits).join('-')\n const defaults = cPlates.filter(el => el.IsDefault)\n\n if (defaults.length > 0) {\n return cPlates.find(el => el.manufacturerTypeDescr.includes(id)) || defaults[0]\n }\n\n return cPlates.find(el => el.manufacturerTypeDescr.includes(id)) || cPlates[0]\n }\n \n return null\n })\n }\n )(state)\n}\n\nexport const getCplate = (state, serieId, cPlateColorId, availableDeviceId, limit = false, additionalArticles, orientation) => {\n return createDraftSafeSelector(\n [getDeviceList, getCplateMapping, getAdditionalData, getSerie],\n (deviceList, cPlateMapping, additionalData, serie) => {\n const originDevice = deviceList.find(el => el.getSupplierpid() === availableDeviceId)\n const articleColor = cPlateMapping.find(\n el => el.serie === parseInt(serieId) && el.colorId === parseInt(cPlateColorId)\n )?.articleColor\n if (originDevice && articleColor) {\n const cPlates = calculateDeviceForCPlate(\n availableDeviceId,\n deviceList,\n JSON.parse(originDevice.getFeatures()),\n articleColor,\n additionalData,\n additionalArticles,\n orientation,\n serie\n )\n if (limit) {\n return cPlates.find(el => el.IsDefault) || cPlates[0]\n } else {\n return cPlates\n }\n }\n\n return null\n }\n )(state)\n}\n\nexport const defaultCurrency = 'EUR'\n\nexport const getDefaultCplate = serieId => {\n return serieId === 64 \n ? '2CKA001710A4248'\n : '2CKA001012A1069'\n}\n\nexport const getDateFromProtobuf = (protoTimestamp) => {\n if (protoTimestamp) {\n const seconds = protoTimestamp.getSeconds();\n const nanos = protoTimestamp.getNanos();\n \n const date = new Date(seconds * 1000 + nanos / 1000000)\n return date\n }\n return null\n}\n\nexport const etimClassesForAdditionalDevices = [\n \"EC000044\",\n \"EC000615\",\n \"EC001264\",\n \"EC000018\",\n \"EC000025\",\n \"EC001035\",\n \"EC000125\",\n \"EC001590\",\n \"EC001036\",\n \"EC000029\",\n \"EC000450\",\n \"EC000439\",\n \"EC000011\",\n \"EC000007\",\n \"EC000138\",\n \"EC001588\",\n \"EC000205\",\n \"EC002253\",\n \"EC010927\",\n \"EC011309\",\n \"EC000436\",\n \"EC000779\",\n \"EC000354\",\n \"EC000000\",\n \"EC000941\"\n]","import { createDeepEqualSelector } from '../../vendor/qlib'\nimport { createSelector } from 'reselect'\nimport axios from 'axios'\n\nimport building from './building/duck'\nimport floor from './floor/duck'\nimport room from './room/duck'\nimport operationPoint, { getImageDataFromOperationPoint, getOrientation } from './operationPoint/duck'\nimport device from './device/duck'\nimport { generateCloneSequence, generateDeleteSequence } from './helpers'\nimport { batchActions } from 'redux-batched-actions'\nimport { getDesignInformationFromProject, getEditableProject } from '../projects/duck'\nimport { equals } from 'ramda'\nimport {\n getAdditionalData,\n getCalculatedTemplates,\n getCplateMapping,\n getDeviceList,\n getDevicesWithoutFrame,\n getFrameMapping,\n getSynonyms,\n getCplate\n} from '../availableDevices/duck'\nimport {calculateChangeDesignRange} from './helpers/changeDesignRange'\nimport { atomWithReducer } from 'jotai/utils'\nimport { atom } from 'jotai'\nimport { enableBatchReducer } from '../../vendor/enableBatchReducer'\nimport { createDraftSafeSelector } from '@reduxjs/toolkit'\nimport { calculateTemplates } from '../../logic/calculateTemplate'\nimport { calculateTouchProtection } from './helpers/calculateTouchProtection'\nimport { updateOnPiecelist } from './helpers/updateOnPiecelist'\nimport { getFavorites } from '../favorites/duck'\nimport { calculateFavorites } from '../../logic/calculateFavorites'\n\nimport {possibleBlindClasses} from '../possibleDevices/machines/blind'\nimport {possibleDataClasses} from '../possibleDevices/machines/data'\nimport {possibleDimmerClasses} from '../possibleDevices/machines/dimmer'\nimport {possibleMotionClasses} from '../possibleDevices/machines/motion'\nimport {possibleRotationClasses} from '../possibleDevices/machines/rtr'\nimport {possibleSocketClasses} from '../possibleDevices/machines/socket'\nimport {possibleSwitchClasses} from '../possibleDevices/machines/switch'\nimport {possibleDoorCommunicationClasses} from '../possibleDevices/machines/doorCommunication'\n\nexport const CLEAR_ENTITIES = 'raumplaner/entities/CLEAR_ENTITIES'\nexport const SET_ENTITIES = 'raumplaner/entities/SET_ENTITIES'\nexport const SET_ENTITY_LABEL = 'raumplaner/entities/SET_ENTITY_LABEL'\nexport const SET_CONFIG_VALUE = 'raumplaner/entities/SET_CONFIG_VALUE'\n\nconst entityInitialState = { byId: {}, allIds: [] }\n\nconst entityReducer = (state = entityInitialState, action) => {\n let configIndex\n switch (action.type) {\n case SET_ENTITIES:\n return {\n ...state,\n byId: action.byId,\n allIds: action.allIds,\n }\n case CLEAR_ENTITIES:\n return { ...entityInitialState }\n case SET_ENTITY_LABEL:\n return {\n ...state,\n byId: {\n ...state.byId,\n [action.id]: {\n ...state.byId[action.id],\n label: action.label,\n },\n },\n }\n case SET_CONFIG_VALUE:\n configIndex = state.byId[action.id].config.findIndex(el => el.type === action.config.type)\n if (configIndex !== -1) {\n return {\n ...state,\n byId: {\n ...state.byId,\n [action.id]: {\n ...state.byId[action.id],\n config: [\n ...state.byId[action.id].config.slice(0, configIndex),\n ...state.byId[action.id].config.slice(configIndex + 1),\n action.config,\n ]\n },\n }\n }\n }\n return {\n ...state,\n byId: {\n ...state.byId,\n [action.id]: {\n ...state.byId[action.id],\n config: [...state.byId[action.id].config, action.config],\n }\n }\n }\n default:\n return state\n }\n}\n\nconst reducer = (state = { byId: {}, allIds: [] }, action) => {\n return entityReducer(\n building(floor(room(operationPoint(device(state, action), action), action), action), action),\n action\n )\n}\n\nexport const entitiesAtom = atomWithReducer(\n JSON.parse(localStorage.getItem('entities')) ?? entityInitialState,\n (state, action) => enableBatchReducer(state, action, reducer)\n)\n\nexport const entitiesAtomWithPersistence = atom(\n (get) => get(entitiesAtom),\n (get, set, action) => {\n set(entitiesAtom, action)\n localStorage.setItem('entities', JSON.stringify(get(entitiesAtom)))\n }\n)\n\nexport default reducer\n\nexport const entityAttributes = ['buildings', 'floors', 'rooms', 'operationPoints', 'devices', 'frame']\n\nexport const clearEntities = () => {\n return {\n type: CLEAR_ENTITIES,\n }\n}\n\nexport const setEntities = (entities = {}) => {\n return {\n type: SET_ENTITIES,\n byId: entities,\n allIds: Object.keys(entities),\n }\n}\n\nexport const setEntityLabel = (id, label) => {\n return {\n type: SET_ENTITY_LABEL,\n id,\n label,\n }\n}\n\nexport const setConfigValue = (id, config) => {\n return {\n type: SET_CONFIG_VALUE,\n id,\n config,\n }\n}\n\nexport const deleteEntity = entity => {\n return (dispatch, getState) => {\n dispatch(generateDeleteSequence(getState(), entity))\n }\n}\n\nexport const cloneEntity = entity => {\n return (dispatch, getState) => {\n let actions = generateCloneSequence(getState(), entity)\n return dispatch(batchActions(actions))\n }\n}\nexport const changeDesignRange = (serieId, frameColorId, cPlateColorId, entityId = null) =>{\n return (dispatch, getState) => {\n calculateChangeDesignRange({state: getState(), serieId, frameColorId, cPlateColorId, entityId}).then(data => {\n dispatch(data.action)\n })\n } \n}\n\nexport const changeTouchProtection = touchProtection => {\n return (dispatch, getState) => {\n calculateTouchProtection(dispatch, getState, touchProtection)\n } \n}\n\nexport const calculateOnPiecelist = onPiecelist => {\n return (dispatch, getState) => {\n updateOnPiecelist(dispatch, getState, onPiecelist)\n } \n}\n\nexport const getAllEntities = state => state.entities.byId\nexport const getAllEntityIds = state => state.entities.allIds\nexport const getAllEntitiesLength = state => state.entities.allIds.length\n\nexport const getEntity = (state, entityId) => getAllEntities(state)[entityId]\n\nexport const getEntityResolved = (state, entityId) => {\n return createDeepEqualSelector([getAllEntities, getDeviceList], (entities, deviceList) => {\n return resolve(getEntity(state, entityId), entities, deviceList)\n })(state)\n}\n\nexport const _resolveDevice = (unresolvedDevice, deviceList) => {\n if (unresolvedDevice) {\n return {\n ...unresolvedDevice,\n //originDevice: deviceList.find(dev => dev.getSupplierpid() === unresolvedDevice.availableDeviceId),\n }\n }\n return null\n}\n\nexport const resolve = (entity, entities, deviceList) => {\n if (!entity) {\n return null\n }\n\n entity = { ...entity }\n for (let i = 0; i < entityAttributes.length; i++) {\n let entityAttribute = entityAttributes[i]\n if (entityAttribute !== 'frame' && entity.hasOwnProperty(entityAttribute) && entity[entityAttribute].length > 0) {\n entity[entityAttribute] = entity[entityAttribute].map(entityId => {\n const index = entity[entityAttribute] ? entity[entityAttribute].indexOf(entityId) : -1\n return {\n ...resolve(entities[entityId], entities, deviceList),\n index,\n }\n })\n }\n }\n\n if (entity.hasOwnProperty('parent')) {\n entity.parent = entities[entity.parent]\n }\n\n if (entity.hasOwnProperty('frame')) {\n entity.frame = {\n ...resolve(entities[entity.frame], entities, deviceList),\n }\n }\n\n return entity.type === 'device' || entity.type === 'frame' ? _resolveDevice(entity, deviceList) : entity\n}\n\nexport const getRootEntityId = createSelector([getEditableProject], (project) => {\n return project?.data?.rootEntityId\n})\n\nexport const getRootEntity = createSelector([getEditableProject, getAllEntities], (project, entities) => {\n if (project?.data?.rootEntityId) {\n return entities[project.data.rootEntityId]\n }\n return null\n})\n\nexport const getRootEntityResolved = createDeepEqualSelector(\n [getRootEntity, getAllEntities, getDeviceList],\n (rootEntity, entities, deviceList) => {\n if (rootEntity) {\n return resolve(rootEntity, entities, deviceList)\n }\n return null\n }\n)\n\nexport const getFloors = createDeepEqualSelector([getRootEntityResolved], rootEntity => {\n if (rootEntity) {\n return rootEntity.floors\n }\n return []\n})\n\nexport const getActiveFloor = createDeepEqualSelector([getRootEntityResolved], rootEntity => {\n if (rootEntity) {\n return rootEntity.floors.find(floor => floor.id === rootEntity.activeFloor)\n }\n return null\n})\n\nexport const getActiveRoom = createDeepEqualSelector([getActiveFloor], activeFloor => {\n if (activeFloor) {\n return activeFloor.rooms.find(room => room.id === activeFloor.activeRoom)\n }\n return null\n})\n\nexport const getDesignRangeForActiveRoom = (state) => {\n const activeRoom = getActiveRoom(state)\n if (!activeRoom?.id) {\n return null\n }\n return getParentDesignRange(state, activeRoom.id)\n}\n\nexport const getAllDevices = createDeepEqualSelector(\n [getRootEntityResolved, getAllEntities, getDeviceList],\n (rootEntity, entities, deviceList) => {\n if (rootEntity) {\n const devices = []\n rootEntity.floors.forEach(floor => {\n floor.rooms.forEach(room => {\n room.operationPoints.forEach(op => {\n const isUpdating = op.isUpdating\n const roomId = op.parent.id\n for (let i = 0; i < op.quantity; i++) {\n op.devices.forEach(device => {\n devices.push({ ...device, roomId, isUpdating })\n if (device?.devices) {\n device.devices.forEach(device => devices.push({ ...device, roomId, isUpdating }))\n }\n })\n devices.push({ ...op.frame, roomId, isUpdating })\n }\n })\n })\n })\n \n return devices\n }\n return []\n }\n)\n\nexport const getAllOperationPoints = createDeepEqualSelector(\n [getRootEntityResolved, getAllEntities],\n (rootEntity, entities) => {\n if (rootEntity) {\n let operationPoints = []\n rootEntity.floors.forEach(floor => {\n floor.rooms.forEach(room => {\n operationPoints = operationPoints.concat(room.operationPoints)\n })\n })\n\n return operationPoints\n }\n return []\n }\n)\n\nexport const getOperationPointsFromEntity = (state, entityId) => {\n const entities = getAllEntities(state)\n let entity = entityId ? entities[entityId] : null\n let operationPoints = []\n if (entity) {\n const entityResolved = getEntityResolved(state, entityId)\n if (entityResolved.type === 'operationPoint') {\n operationPoints.push(entityResolved)\n } else if (entityResolved.type === 'room') {\n operationPoints = operationPoints.concat(entityResolved.operationPoints)\n } else if (entityResolved.type === 'floor') {\n entityResolved.rooms.forEach(room => {\n operationPoints = operationPoints.concat(room.operationPoints)\n })\n } else if (entityResolved.type === 'building') {\n entityResolved.floors.forEach(floor => {\n floor.rooms.forEach(room => {\n operationPoints = operationPoints.concat(room.operationPoints)\n })\n })\n }\n }\n return operationPoints\n}\n\nexport const getConfiguratedDevices = createDeepEqualSelector([getAllDevices, getDeviceList], (allDevices, deviceList) => {\n const devices = mapConfiguratedDevices(allDevices, deviceList, true)\n return devices\n})\n\nexport const mapConfiguratedDevices = (devices, deviceList, byRoom) => {\n let configuredDevices = []\n devices.forEach((dev, i) => {\n if (dev.onPiecelist) {\n const index = configuredDevices.findIndex(\n el =>\n (byRoom && el.availableDeviceId === dev.availableDeviceId && el.roomId === dev.roomId) ||\n (!byRoom && el.availableDeviceId === dev.availableDeviceId)\n )\n if (index !== -1) {\n configuredDevices[index] = {\n ...configuredDevices[index],\n quantity: configuredDevices[index].quantity + dev.quantity,\n }\n } else {\n configuredDevices.push({\n availableDeviceId: dev.availableDeviceId,\n roomId: dev.roomId,\n quantity: dev.quantity,\n originDevice: deviceList.find(el => el.getSupplierpid() === dev.availableDeviceId),\n onPiecelist: dev.onPiecelist,\n })\n }\n }\n })\n\n return configuredDevices\n}\n\nexport const getTotalPriceFromConfiguratedDevices = createDeepEqualSelector([getConfiguratedDevices], (devices) => {\n let totalSum = 0\n devices.forEach((device, index) => {\n if (device.originDevice) {\n let s =\n (device.originDevice\n ?.getPricedetails()\n ?.getPricesList()[0]\n ?.getAmount() || 0) * device.quantity \n totalSum += s\n }\n })\n return Math.round(totalSum * 100) / 100\n})\n\nexport const getEntitiesFromOperationPoint = (entities, operationPointId) => {\n let opEntities = {}\n const operationPoint = entities[operationPointId]\n\n if (operationPoint) {\n opEntities[operationPoint.id] = operationPoint\n if (operationPoint.devices) {\n operationPoint.devices.forEach(deviceId => {\n const device = entities[deviceId]\n if (device) {\n opEntities[device.id] = device\n if (device.devices) {\n device.devices.forEach(cplateId => {\n const cplate = entities[cplateId]\n if (cplate) {\n opEntities[cplate.id] = cplate\n }\n })\n }\n }\n })\n }\n }\n return opEntities\n}\n\nexport const getHasOperationPointError = (rootEntityId, roomEntities, projectId, devicesWithoutFrame) => {\n let hasError = false\n const rootEntity = roomEntities[rootEntityId]\n if (rootEntity) {\n const frameSize = rootEntity.devices.map(id => roomEntities[id]).filter(el => {\n return el && !devicesWithoutFrame.find(el2 => el2 === el.availableDeviceId)\n }).length\n \n if (frameSize > 0 && !rootEntity.frame) {\n hasError = true\n }\n } \n return hasError\n}\n\nexport const getCalculatedFavorites = createDeepEqualSelector(\n [getDeviceList, getDesignRangeForActiveRoom, getFavorites, getCplateMapping, getFrameMapping, getAdditionalData],\n (deviceList, designRange, favorites, cplateMapping, frameMapping, additionalData) => {\n return calculateFavorites(deviceList, designRange, favorites, cplateMapping, frameMapping, additionalData)\n }\n)\n\nexport const getAvailableTemplates = createDeepEqualSelector(\n [getDeviceList, getDesignRangeForActiveRoom, getDesignInformationFromProject, getCalculatedTemplates, getCplateMapping, getFrameMapping, getAdditionalData],\n (deviceList, designRange, designInfomationen, calculatedTemplates, cplateMapping, frameMapping, additionalData) => {\n return calculateTemplates(deviceList, designRange, designInfomationen, calculatedTemplates, cplateMapping, frameMapping, additionalData)\n }\n)\n\nexport const getAvailableCombinations = createSelector(\n [getEditableProject, getAvailableTemplates, getActiveRoom, getAllEntities, getCalculatedFavorites, getDevicesWithoutFrame],\n (project, calculatedTemplates, activeRoom, entities, favorites, devicesWithoutFrame) => {\n let operationPoints = []\n if (!project) {\n return operationPoints\n }\n if (activeRoom) {\n operationPoints = activeRoom.operationPoints.map(el => {\n let roomEntities = getEntitiesFromOperationPoint(entities, el.id)\n return {\n ...el,\n rootEntity: el.id,\n imgData: getImageDataFromOperationPoint(project, entities, el.id, el.orientation),\n entities: roomEntities,\n orientation: getOrientation(el),\n hasError: getHasOperationPointError(el.id, roomEntities, project, devicesWithoutFrame),\n }\n })\n }\n\n favorites = favorites.map(el => {\n let imgData = getImageDataFromOperationPoint(project, el.data.entities, el.data.rootEntityId, el.orientation)\n let operationPoint = operationPoints.find(op => equals(op.imgData, imgData))\n return {\n ...el.data,\n imgData,\n quantity: operationPoint ? operationPoint.quantity : 0,\n orientation: operationPoint ? getOrientation(operationPoint) : el.orientation || 'V',\n isFavorite: true,\n favoriteId: el.ID,\n }\n })\n\n calculatedTemplates = calculatedTemplates\n //.filter(el => !el.onStart)\n .map(el => {\n let imgData = getImageDataFromOperationPoint(project, el.entities, el.rootEntityId, el.orientation)\n let operationPoint = operationPoints.find(op => {\n return equals(op.imgData, imgData)\n })\n return {\n ...el,\n imgData,\n rootEntityId: el.rootEntityId,\n orientation: operationPoint ? getOrientation(operationPoint) : el.orientation || 'V',\n quantity: operationPoint ? operationPoint.quantity : 0,\n }\n })\n\n return [\n ...calculatedTemplates.filter(el => {\n return (\n !favorites.find(el2 => equals(el.imgData, el2.imgData)) &&\n !operationPoints.find(el2 => equals(el.imgData, el2.imgData))\n )\n }),\n ]\n }\n)\n\nconst getStartCombinations = (project, calculatedTemplates, activeRoom, entities, favorites, devicesWithoutFrame, additionalData, designInfomationen) => {\n let operationPoints = []\n if (!project) {\n return operationPoints\n }\n if (activeRoom) {\n operationPoints = activeRoom.operationPoints.filter(el => {\n let roomEntities = getEntitiesFromOperationPoint(entities, el.id)\n return Object.keys(roomEntities).reduce((val, key) => {\n const dev = roomEntities[key]\n if (dev.type === 'operationPoint' || dev.type === 'cplate') {\n return val\n }\n /*const additionalDeviceData = additionalData.find(el => el.supplier_pid === dev.availableDeviceId)\n if (additionalDeviceData && designInfomationen?.deviceType !== undefined) {\n return val\n || ((designInfomationen.deviceType === 'conventional' && !additionalDeviceData.flex)\n || (designInfomationen.deviceType === 'flex' && additionalDeviceData.flex))\n }\n return val || designInfomationen.deviceType === 'conventional'*/\n return val\n }, true)\n }).map(el => { \n let roomEntities = getEntitiesFromOperationPoint(entities, el.id)\n return {\n ...el,\n rootEntityId: el.id,\n imgData: getImageDataFromOperationPoint(project, entities, el.id, el.orientation),\n entities: roomEntities,\n orientation: getOrientation(el),\n isUpdating: el.isUpdating,\n hasError: getHasOperationPointError(el.id, roomEntities, project, devicesWithoutFrame),\n }\n })\n }\n\n /*favorites = favorites.map(el => {\n let imgData = getImageDataFromOperationPoint(project, el.data.entities, el.data.rootEntityId, el.orientation)\n let operationPoint = operationPoints.find(op => equals(op.imgData, imgData))\n return {\n ...el.data,\n imgData,\n quantity: operationPoint ? operationPoint.quantity : 0,\n isFavorite: true,\n favoriteId: el.ID,\n orientation: operationPoint ? getOrientation(operationPoint) : el.orientation || 'V',\n isUpdating: operationPoint ? operationPoint.isUpdating : false\n }\n })*/\n\n calculatedTemplates = calculatedTemplates\n .filter(el => el.onStart)\n .map(el => {\n let imgData = getImageDataFromOperationPoint(project, el.entities, el.rootEntityId, el.orientation)\n let operationPoint = operationPoints.find(op => {\n return equals(op.imgData, imgData)\n })\n return {\n ...el,\n imgData,\n rootEntityId: operationPoint ? operationPoint.id : el.rootEntityId,\n entities: operationPoint ? operationPoint.entities : el.entities,\n quantity: operationPoint ? operationPoint.quantity : 0,\n orientation: operationPoint ? getOrientation(operationPoint) : el.orientation || 'V',\n isUpdating: operationPoint ? operationPoint.isUpdating : false\n }\n })\n\n return {\n //favorites,\n calculatedTemplates,\n operationPoints,\n }\n}\n\nexport const getAvailableStartCombinations = createSelector(\n [getEditableProject, getAvailableTemplates, getActiveRoom, getAllEntities, getCalculatedFavorites, getDevicesWithoutFrame, getAdditionalData, getDesignInformationFromProject],\n (project, calculatedTemplates, activeRoom, entities, favorites, devicesWithoutFrame, additionalData, designInfomationen) => {\n const data = getStartCombinations(project, calculatedTemplates, activeRoom, entities, favorites, devicesWithoutFrame, additionalData, designInfomationen) \n return [\n //...data.favorites,\n ...data.calculatedTemplates/*.filter(el => {\n return !data.favorites.find(el2 => equals(el.imgData, el2.imgData))\n })*/,\n ...data.operationPoints.filter(el => {\n return !data.calculatedTemplates.find(el2 => equals(el.imgData, el2.imgData))\n // && !data.favorites.find(el2 => equals(el.imgData, el2.imgData))\n })\n ]\n }\n)\n\nexport const getAvailableSuggestions = createSelector(\n [getEditableProject, getAvailableTemplates, getActiveRoom, getAllEntities, getCalculatedFavorites, getDevicesWithoutFrame, getAdditionalData, getDesignInformationFromProject],\n (project, calculatedTemplates, activeRoom, entities, favorites, devicesWithoutFrame, additionalData, designInfomationen) => {\n const data = getStartCombinations(project, calculatedTemplates, activeRoom, entities, favorites, devicesWithoutFrame, additionalData, designInfomationen) \n return [\n //...data.favorites,\n ...data.calculatedTemplates/*.filter(el => {\n return !data.favorites.find(el2 => equals(el.imgData, el2.imgData))\n })*/,\n ]\n }\n)\n\nexport const getAvailableOperationPoints = createSelector(\n [getEditableProject, getAvailableTemplates, getActiveRoom, getAllEntities, getCalculatedFavorites, getDevicesWithoutFrame, getAdditionalData, getDesignInformationFromProject],\n (project, calculatedTemplates, activeRoom, entities, favorites, devicesWithoutFrame, additionalData, designInfomationen) => {\n const data = getStartCombinations(project, calculatedTemplates, activeRoom, entities, favorites, devicesWithoutFrame, additionalData, designInfomationen) \n return [\n ...data.operationPoints\n ]\n }\n)\n\nexport const getAvailableOperationPointsLength = createSelector(\n [getAvailableOperationPoints],\n (combinations) => {\n return combinations.length\n }\n)\n\nexport const getAvailableStartCombination = (state, id) => {\n return createDeepEqualSelector(\n [getAvailableStartCombinations],\n startCombinations => {\n return startCombinations.find(el => el.rootEntityId === id)\n }\n )(state)\n}\n\nexport const getAvailableSeries = createDeepEqualSelector([], () => {\n return [\n {\n id: 28,\n name: 'future® linear',\n cplateColor: 37,\n frameColor: 37,\n deviceId: '2CKA001751A3027',\n },\n {\n id: 52,\n name: 'Busch-balance® SI',\n cplateColor: 22,\n frameColor: 22,\n deviceId: '2CKA001731A2002',\n },\n {\n id: 53,\n name: 'Reflex SI',\n cplateColor: 22,\n frameColor: 22,\n deviceId: '2CKA001731A0876',\n },\n {\n id: 60,\n name: 'Reflex SI Linear',\n cplateColor: 22,\n frameColor: 22,\n deviceId: '2CKA001731A0876',\n },\n {\n id: 21,\n name: 'Busch-axcent®',\n cplateColor: 37,\n frameColor: 7,\n deviceId: '2CKA001751A3027',\n },\n {\n id: 59,\n name: 'Busch-Duro 2000® SI',\n cplateColor: 51,\n frameColor: 51,\n deviceId: '2CKA001731A0223',\n },\n {\n id: 58,\n name: 'Busch-Duro 2000® SI Linear',\n cplateColor: 51,\n frameColor: 51,\n deviceId: '2CKA001731A0223',\n },\n {\n id: 26,\n name: 'carat®',\n cplateColor: 37,\n frameColor: 47,\n deviceId: '2CKA001751A3027',\n },\n {\n id: 29,\n name: 'solo®',\n cplateColor: 37,\n frameColor: 56,\n deviceId: '2CKA001751A3027',\n },\n {\n id: 30,\n name: 'pur edelstahl',\n cplateColor: 10,\n frameColor: 10,\n deviceId: '2CKA001751A2956',\n },\n {\n id: 25,\n name: 'Busch-dynasty®',\n cplateColor: 35,\n frameColor: 18,\n deviceId: '2CKA001751A2741',\n },\n /*{\n id: 63,\n name: 'Allwetter 44®',\n cplateColor: 22,\n frameColor: 22,\n deviceId: '2CKA001731A1775',\n },*/\n {\n id: 64,\n name: 'Busch-art linear®',\n cplateColor: 37,\n frameColor: 37,\n deviceId: '2CKA001710A4248',\n },\n ]\n})\n\nexport const getAvailableSeriesWithImgData = createDeepEqualSelector([getAvailableSeries], series => {\n return series.map(serie => {\n return {\n ...serie,\n imgData: {\n name: 'Muster',\n switchRangeId: serie.id,\n switchColorId: serie.cplateColor,\n switchFrameColorId: serie.frameColor,\n height: 200,\n groups: [\n {\n frameTypeId: 1,\n devices: [\n {\n frameHeight: 1,\n products: [\n {\n orderNumber: serie.deviceId,\n quantity: 1,\n },\n ],\n },\n ],\n },\n ],\n }\n }\n })\n})\n\nexport const getSeriesImages = createDeepEqualSelector([getAvailableSeries], series => {\n let seriesImages = []\n return series\n .reduce((promise, serie, index) => {\n const data = {\n name: 'Muster',\n switchRangeId: serie.id,\n switchColorId: serie.cplateColor,\n switchFrameColorId: serie.frameColor,\n height: 200,\n groups: [\n {\n frameTypeId: 1,\n devices: [\n {\n frameHeight: 1,\n products: [\n {\n orderNumber: serie.deviceId,\n quantity: 1,\n },\n ],\n },\n ],\n },\n ],\n }\n return promise.then(img => {\n if (index > 0) {\n seriesImages.push(img)\n }\n return fetchImage(data)\n })\n }, Promise.resolve())\n .then(img => {\n seriesImages.push(img)\n return seriesImages\n })\n})\n\nexport const getCategories = createDeepEqualSelector([], () => {\n return [\n {\n switchRangeId: 28,\n name: 'Schalter/Taster',\n cplateColor: 37,\n frameColor: 37,\n deviceId: '2CKA001751A3027',\n },\n {\n switchRangeId: 28,\n name: 'Steckdosen',\n cplateColor: 37,\n frameColor: 37,\n deviceId: '2CKA002011A3725',\n },\n {\n switchRangeId: 28,\n name: 'Jalousien',\n cplateColor: 37,\n frameColor: 37,\n deviceId: '2CKA001751A2756',\n },\n {\n switchRangeId: 28,\n name: 'Datenkommunikation',\n cplateColor: 37,\n frameColor: 37,\n deviceId: '2CKA001710A3164',\n },\n {\n switchRangeId: 28,\n name: 'Dimmer',\n cplateColor: 37,\n frameColor: 37,\n deviceId: '2CKA006599A2953',\n },\n {\n switchRangeId: 28,\n name: 'Bewegungsmelder',\n cplateColor: 37,\n frameColor: 37,\n deviceId: '2CKA006800A2101',\n },\n ]\n})\n\nexport const getCategoriesImages = createDeepEqualSelector([getCategories], cats => {\n let catsImages = []\n return cats\n .reduce((promise, cat, index) => {\n const data = {\n name: 'Muster',\n switchRangeId: cat.switchRangeId,\n switchColorId: cat.cplateColor,\n switchFrameColorId: cat.frameColor,\n height: 200,\n groups: [\n {\n frameTypeId: 1,\n devices: [\n {\n frameHeight: 1,\n products: [\n {\n orderNumber: cat.deviceId,\n quantity: 1,\n },\n ],\n },\n ],\n },\n ],\n }\n return promise.then(img => {\n if (index > 0) {\n catsImages.push(img)\n }\n return fetchImage(data)\n })\n }, Promise.resolve())\n .then(img => {\n catsImages.push(img)\n return catsImages\n })\n})\n\n// Helpers\nexport const fetchImage = data => {\n return axios\n .post(`${process.env.REACT_APP_TERMINAL_API_URL}/api/image`, data, {\n responseType: 'arraybuffer',\n })\n .then(response => {\n return 'data:img/png;base64,' + new Buffer(response.data, 'binary').toString('base64')\n })\n}\n\nconst possibleClasses = [\n possibleSwitchClasses,\n possibleBlindClasses,\n possibleDataClasses,\n possibleDimmerClasses,\n possibleMotionClasses,\n possibleSocketClasses,\n possibleDoorCommunicationClasses,\n]\n\nconst possibleTypes = possibleClasses.map((el, index) => {\n let ret = {\n types: Object.keys(el.types)\n }\n\n switch(index) {\n case 1:\n ret.class = 'blind'\n break;\n case 2:\n ret.class = 'data'\n break;\n case 3:\n ret.class = 'dimmer'\n break;\n case 4:\n ret.class = 'motion'\n break;\n case 5:\n ret.class = 'socket'\n break;\n case 6:\n ret.class = 'doorcommunication'\n break;\n default:\n ret.class = 'switch'\n }\n\n return ret\n})\n\nexport const getClassForName = (name) => {\n let className = null\n let classIndex = 0\n while (className === null && classIndex < possibleTypes.length) {\n if (possibleTypes[classIndex]?.types?.find(id => id === name)) {\n className = possibleTypes[classIndex]?.class\n }\n classIndex++;\n }\n return className\n}\n\nexport const getNameFromMachines = (feature, data, entities, deviceId, deviceList) => {\n let name = null\n let classIndex = 0\n\n while (name === null && classIndex < possibleClasses.length) {\n if (possibleClasses[classIndex]?.classes?.find(id => id === feature.Id)) {\n const keys = Object.keys(possibleClasses[classIndex].types)\n let keysIndex = 0\n while (name === null && keysIndex < keys.length) {\n const el = possibleClasses[classIndex].types[keys[keysIndex]]\n el.forEach(el2 => {\n if ((Array.isArray(el2?.feature) && el2?.feature.find(feat => feat === feature.Id))\n || (!Array.isArray(el2?.feature) && el2?.feature === feature.Id)\n ) {\n let possible = true\n el2.filters.forEach(filter => {\n possible = !!feature.Feature.find(feat => {\n if (feat.Fname === filter.Id) {\n if (Array.isArray(filter.Value)) {\n return !!filter.Value.find(val => val == feat.Fvalue)\n } else {\n return feat.Fvalue == filter.Value\n } \n }\n return false\n })\n });\n\n if (possible) {\n if(keys[keysIndex] === 'KOMFORTSCHALTER' || keys[keysIndex] === 'BEWEGUNGSMELDER') {\n if (data?.komfortschalter) {\n name = 'KOMFORTSCHALTER'\n } else {\n const device = entities[deviceId]\n \n const availableDescriptions = [\n device.availableDeviceId,\n ...device.devices.map(id => {\n const dev = entities[id]\n return dev?.availableDeviceId\n }).filter(el => !!el)\n ].map(id => deviceList.find(el => el.getSupplierpid() === id))\n .filter(el => !!el)\n .map(el => el.getDescriptionshort())\n\n if (availableDescriptions.find(el => el.includes('Bedienelement flex'))) {\n name = \"FLEXSCHALTER\"\n } else if (availableDescriptions.find(el => el.includes('Komfortschalter'))) {\n name = 'KOMFORTSCHALTER'\n } else {\n name = \"BEWEGUNGSMELDER\"\n }\n }\n } else {\n name = keys[keysIndex]\n }\n }\n }\n })\n keysIndex++\n }\n\n }\n classIndex++\n }\n return name\n}\n\nexport const getFeatureDescriptionFromOperationPoint = (state, combination) => {\n return createDraftSafeSelector(\n [getDeviceList, getSynonyms, getAdditionalData],\n (deviceList, synonyms, additionalData) => {\n let classes = []\n if (combination?.entities && combination.entities[combination.rootEntityId]) {\n combination.entities[combination.rootEntityId].devices.forEach((deviceId) => {\n const device = combination.entities[deviceId]\n if (deviceList && device?.availableDeviceId) {\n if (device.availableDeviceId === 'Hirschmann' || device.availableDeviceId === 'Ankaro') {\n let index = classes.findIndex(el => el.id === device.availableDeviceId)\n if (index === -1) {\n classes.push({\n id: device.availableDeviceId,\n description: synonyms.find(el => el.classID === \"EC000439\")?.synonym, //Antennensteckdose\n quantity: 1,\n })\n } else {\n classes[index].quantity++\n }\n } else {\n const deviceProto = deviceList.find(el => el.getSupplierpid() === device.availableDeviceId)\n \n if (deviceProto && synonyms && synonyms.length > 0) {\n const features = JSON.parse(deviceProto.getFeatures())\n const data = additionalData.find(el => el.supplier_pid === device.availableDeviceId)\n if (features && features[0]) {\n const name = getNameFromMachines(features[0], data, combination.entities, deviceId, deviceList)\n classes.push({\n id: features[0].Id,\n description: name || synonyms.find(el => el.classID === features[0].Id)?.synonym,\n quantity: 1,\n })\n }\n }\n }\n }\n })\n }\n \n return classes\n }\n )(state)\n}\n\nexport const getMergedFeatureDescriptionFromOperationPoint = (state, combination) => {\n return createDraftSafeSelector(\n [getDeviceList, getSynonyms],\n (deviceList, synonyms) => {\n const classes = getFeatureDescriptionFromOperationPoint(state, combination)\n return classes.reduce((acc, el) => {\n let index = acc.findIndex(el2 => el2.id === el.id)\n if (index === -1) {\n acc.push(el)\n } else {\n acc[index].quantity++\n }\n return acc\n }, [])\n }\n )(state)\n}\n\nexport const getIsSocket = (state, availableDeviceId) => {\n return createDraftSafeSelector(\n [getDeviceList],\n (deviceList) => {\n if (deviceList && availableDeviceId) {\n const deviceProto = deviceList.find(el => el.getSupplierpid() === availableDeviceId)\n if (deviceProto) {\n const features = JSON.parse(deviceProto.getFeatures())\n if (features && features[0]) {\n return features[0].Id === 'EC000125' //Steckdose\n }\n }\n }\n return false\n }\n )(state)\n}\n\nexport const getProjectResolved = createSelector(\n [getEditableProject, getAllEntities, getConfiguratedDevices, getDeviceList],\n (project, entities, allDevices, deviceList) => {\n /*const devices = allDevices\n .map(el => {\n let originDevice = deviceList.find(el2 => el2.getSupplierpid() === el.availableDeviceId)\n return {\n ...el,\n originDevice\n }\n })\n .filter(el => el.originDevice)\n .map(el => {\n return {\n supplierPid: el.originDevice.getSupplierpid(),\n manufacturertypedescr: el.originDevice.getManufacturertypedescr(),\n descriptionShort: el.originDevice.getDescriptionshort(),\n quantity: el.quantity,\n price:\n Math.round(\n el.originDevice\n ?.getPricedetails()\n ?.getPricesList()[0]\n ?.getAmount() * 100 || 0\n ) / 100,\n link: el.originDevice\n ?.getMimedetails()\n ?.getMimeInfosList()\n ?.find(el => {\n return el.getSource().includes('https://new.abb.com/products/')\n })\n ?.getSource(),\n }\n })\n\n Object.keys(entities).forEach(key => {\n entities[key] = {\n ...entities[key],\n originDevice: devices.find(el2 => el2.supplierPid === entities[key].availableDeviceId)\n }\n })*/\n\n return {\n ...project,\n ID: project.ID === 'local' ? -1 : project.ID,\n data: JSON.stringify({\n ...project.data,\n entities\n })\n }\n }\n)\n\nexport const mapDataForPlansoftExort = createDraftSafeSelector(\n [getAllEntities],\n (allEntities) => {\n let rootEntityId = null\n let entities = JSON.parse(JSON.stringify(allEntities))\n Object.keys(entities).forEach(id => {\n let entity = entities[id]\n if (entity) {\n if (entity.type === 'building') {\n rootEntityId = id\n } else if (entity.type === 'room') {\n entity.devices = []\n entity.operationPoints.forEach(operationPointId => {\n let operationPoint = entities[operationPointId]\n if (operationPoint.frame) {\n entity.devices.push(operationPoint.frame)\n entities[operationPoint.frame].type = 'device'\n entities[operationPoint.frame].text = ''\n delete entities[operationPoint.frame].devices\n delete entities[operationPoint.frame].onPiecelist\n delete entities[operationPoint.frame].position\n }\n operationPoint.devices.forEach(deviceId => {\n entity.devices.push(deviceId)\n let device = entities[deviceId]\n device.devices.forEach(device2Id => {\n entity.devices.push(device2Id)\n entities[device2Id].type = 'device'\n entities[device2Id].text = ''\n entities[device2Id].quantity = operationPoint.quantity\n delete entities[device2Id].devices\n delete entities[device2Id].onPiecelist\n delete entities[device2Id].position\n })\n entities[deviceId].type = 'device'\n entities[deviceId].text = ''\n entities[deviceId].quantity = operationPoint.quantity\n delete entities[deviceId].devices\n delete entities[deviceId].onPiecelist\n delete entities[deviceId].position\n })\n delete entities[operationPointId]\n })\n delete entity.operationPoints\n }\n delete entities[id].config\n }\n })\n\n let date = new Date()\n return {\n date: `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}-${String(date.getDate()).padStart(2, '0')}`,\n type: 'Wohnung',\n \"projectType\": 'room',\n rootEntityId,\n entities,\n }\n }\n)\n\nexport const getParentDesignRange = (\n state,\n id,\n design = {\n serie: null,\n frameColor: null,\n cplateColor: null\n }\n) => {\n return createDeepEqualSelector([getAllEntities, getDesignInformationFromProject], (entities, designInformation) => {\n let entity = id ? entities[id] : null\n \n if (!entity || entity.type === 'building') {\n if (!design.serie) {\n design.serie = designInformation?.frameRangeId\n }\n \n if (!design.frameColor) {\n design.frameColor = designInformation?.frameColorId\n }\n \n if (!design.cplateColor) {\n design.cplateColor = designInformation?.switchColorId\n }\n } else {\n if (!design.serie) {\n design.serie = entity?.config?.find(el => el.type === 'serie')?.value\n }\n \n if (!design.frameColor) {\n design.frameColor = entity?.config?.find(el => el.type === 'frameColor')?.value\n }\n \n if (!design.cplateColor) {\n design.cplateColor = entity?.config?.find(el => el.type === 'cplateColor')?.value\n }\n }\n \n\n if (entity?.parent && (!design.serie || !design.frameColor || !design.cplateColor)) {\n return getParentDesignRange(state, entity.parent, design)\n }\n return design\n })(state)\n}\n\nexport const GetUrlDevices = createDeepEqualSelector(\n [getConfiguratedDevices],\n (devices) => {\n let url = devices.map(device => {\n return encodeURIComponent(`${device.availableDeviceId}|${device.quantity}`)\n }).join(\",\")\n return `https://www.busch-jaeger.de/online-katalog/stueckliste?plids=${url}`\n }\n)\nexport const getIdsForDesignRangeChange = (\n state,\n id,\n) => {\n return createDeepEqualSelector([getAllEntities], (entities) => {\n let ids = {\n building: null,\n floor: null,\n room: null,\n operationPoint: null\n }\n \n let entity = id ? entities[id] : null\n \n while(entity) {\n if (ids.hasOwnProperty(entity.type)) {\n ids[entity.type] = entity.id\n }\n entity = entity.parent ? entities[entity.parent] : null\n }\n return ids\n })(state)\n}\n\nexport const getCplateForSerie = (state, seriesId, cPlateColorId, availableDeviceId, limit = false, additionalArticles, orientation) => {\n return createDeepEqualSelector([getAvailableSeries, getDeviceList, getCplateMapping], (series, deviceList, cPlateMapping) => {\n const serie = series.find(s => s.id === seriesId)\n const originDevice = deviceList.find(el => el.getSupplierpid() === serie.deviceId)\n \n if (originDevice) {\n let splits = originDevice.getManufacturertypedescr().split('-')\n let index = -1\n cPlateMapping.forEach(el => {\n if (el.serie === seriesId) {\n const foundIndex = splits.findIndex(el2 => {\n return el2 === el.articleColor\n })\n if (foundIndex > -1) {\n index = foundIndex\n }\n }\n })\n const newCPlateMapping = cPlateMapping.find(el => el.serie === seriesId && el.colorId === cPlateColorId)\n\n const newArticleName = splits.map((el, i) => {\n if (i === index && newCPlateMapping) {\n return newCPlateMapping.articleColor\n }\n return el\n }).join('-')\n \n const newOriginDevice = deviceList.find(el => el.getManufacturertypedescr() === newArticleName)\n\n if (newOriginDevice) {\n return {\n supplierPid: newOriginDevice.getSupplierpid()\n }\n }\n }\n return getCplate(state, seriesId, cPlateColorId, availableDeviceId, limit, additionalArticles, orientation)\n })(state)\n}","import Dexie from \"dexie\";\n\nconst etimDB = new Dexie(\"etim\");\n\netimDB.version(1).stores({ etim: \"id, value\" });\n\netimDB.on(\"populate\", async function () {\n await etimDB.etim.add({ id: \"fetchDate\", value: null });\n await etimDB.etim.add({ id: \"buffer\", value: null });\n await etimDB.etim.add({ id: \"checksum\", value: null });\n await etimDB.etim.add({ id: \"categoryLength\", value: 0 });\n});\n\netimDB.open();\n\nexport default etimDB;\n","import axios from 'axios'\nimport { createDraftSafeSelector, createSlice } from '@reduxjs/toolkit'\nimport { queryClient } from '../../vendor/queryClient'\nimport { FETCH_FAVORITES } from '../api'\nimport { getCplateMapping, getDeviceList } from '../availableDevices/duck'\nimport { getDesignInformationFromProject } from '../projects/duck'\nimport { pick } from 'ramda'\n\n\nexport const initialState = {\n favorites: [],\n}\n\nconst favoritesSlice = createSlice({\n name: 'favorites',\n initialState,\n reducers: {\n setFavorites(state, action) {\n state.favorites = action.payload.favorites\n }\n },\n})\n\nexport const {\n setFavorites,\n} = favoritesSlice.actions\nexport default favoritesSlice.reducer\n\nexport const fetchAddFavorite = (data) => {\n return axios({\n method: 'POST',\n url: process.env.REACT_APP_API_URL + '/api/favorites',\n data,\n })\n .then(response => {\n if (response.status >= 400) {\n //eslint-disable-next-line no-throw-literal\n throw `${response.status} ${response.statusText}`\n }\n return response.data\n })\n .then(function (favorites) {\n queryClient.invalidateQueries(FETCH_FAVORITES)\n })\n}\n\nexport const fetchRemoveFavorite = (id) => {\n return axios({\n method: 'DELETE',\n url: process.env.REACT_APP_API_URL + '/api/favorites/' + id,\n })\n .then(response => {\n if (response.status >= 400) {\n //eslint-disable-next-line no-throw-literal\n throw `${response.status} ${response.statusText}`\n }\n return response.data\n })\n .then(function (favorites) {\n queryClient.invalidateQueries(FETCH_FAVORITES)\n })\n \n}\n\nexport const getFavorites = state => state.favorites.favorites\n\nexport const getFavoriteFromCombination = (state, combination) => {\n return createDraftSafeSelector(\n [getDeviceList, getCplateMapping, getDesignInformationFromProject],\n (deviceList, cplateMapping, designInfomationen) => {\n const articleColor = cplateMapping.find(el => {\n return el.serie === designInfomationen.frameRangeId\n && el.colorId === designInfomationen?.switchColorId\n })?.articleColor\n\n let tmpFavorite = {\n ...pick(['type', 'rootEntityId', 'entities'], combination),\n type: 'operationPoint',\n }\n\n if (tmpFavorite?.entities) {\n Object.keys(tmpFavorite.entities).forEach(key => {\n let entity = tmpFavorite.entities[key]\n if (entity.availableDeviceId) {\n const originDevice = deviceList.find(el => el.getSupplierpid() === entity.availableDeviceId)\n if (originDevice) {\n tmpFavorite = {\n ...tmpFavorite,\n entities: {\n ...tmpFavorite.entities,\n [key]: {\n ...tmpFavorite.entities[key],\n availableDeviceId: originDevice.getManufacturertypedescr().replace(`-${articleColor}`, '-XX')\n }\n }\n }\n }\n }\n })\n }\n return tmpFavorite\n }\n )(state)\n}","import v4 from 'node-uuid'\nimport omit from 'lodash/omit'\nimport { batchActions } from 'redux-batched-actions'\nimport { buildOperationPointRoomReference } from '../room/duck'\nimport { getActiveRoom, getAllEntities, getEntityResolved, getIsSocket, getParentDesignRange, setConfigValue } from '../duck'\nimport { generateDeleteSequence } from '../helpers/index'\nimport { equals } from 'ramda'\nimport { getEditableProject } from '../../projects/duck'\nimport { addDeviceToOperationPoint, addFrameToOpertaionPoint } from '../device/duck'\nimport { createDeepEqualSelector } from '../../../vendor/qlib'\nimport { calculateFrame } from '../../../logic/calculateFrame'\nimport { getDeviceList, getFrameMapping, getDevicesWithoutFrame } from '../../availableDevices/duck'\n\n// Actions\n//\nexport const ADD_OPERATION_POINT = 'raumplaner/entities/OPERATION_POINT/ADD'\nexport const CLONE_OPERATION_POINT = 'raumplaner/entities/OPERATION_POINT/CLONE'\nexport const REMOVE_OPERATION_POINT = 'raumplaner/entities/OPERATION_POINT/REMOVE'\nexport const OPERATION_POINT_REFERENCE_DEVICE = 'raumplaner/entities/ROOPERATION_POINTOM/REFERENCE_DEVICE'\nexport const OPERATION_POINT_DEREFERENCE_DEVICE = 'raumplaner/entities/OPERATION_POINT/DEREFERENCE_DEVICE'\nexport const OPERATION_POINT_REFERENCE_FRAME = 'raumplaner/entities/ROOPERATION_POINTOM/REFERENCE_FRAME'\nexport const OPERATION_POINT_DEREFERENCE_FRAME = 'raumplaner/entities/OPERATION_POINT/DEREFERENCE_FRAME'\nexport const REORDER_DEVICES = 'raumplaner/entities/OPERATION_POINT/REORDER_DEVICES'\nexport const SET_OPERATION_POINT_QUANTITY = 'raumplaner/entities/OPERATION_POINT/SET_OPERATION_POINT_QUANTITY'\nexport const ADD_OPERATION_POINT_CONFIG = 'raumplaner/entities/OPERATION_POINT/ADD_OPERATION_POINT_CONFIG'\nexport const DEL_OPERATION_POINT_CONFIG = 'raumplaner/entities/OPERATION_POINT/DEL_OPERATION_POINT_CONFIG'\nexport const SET_OPERATIONPOINT_IS_UPDATING = 'raumplaner/entities/OPERATION_POINT/SET_IS_UPDATING'\n\n// Reducer\n//\nexport const initialState = {\n type: 'operationPoint',\n id: null,\n parent: null,\n label: null,\n devices: [],\n frame: null,\n config: [],\n quantity: 1,\n isUpdating: false,\n}\n\nfunction reducer(state = initialState, action) {\n let deviceIndex\n switch (action.type) {\n case CLONE_OPERATION_POINT:\n return {\n ...state,\n id: action.operationPointId,\n parent: action.roomId,\n devices: initialState.devices,\n frame: initialState.frame,\n }\n case ADD_OPERATION_POINT:\n return {\n ...state,\n id: action.operationPointId,\n parent: action.roomId,\n }\n case OPERATION_POINT_REFERENCE_DEVICE:\n if (!isNaN(parseInt(action.index)) && action.index >= 0) {\n return {\n ...state,\n devices: [\n ...state.devices.slice(0, action.index),\n action.deviceId,\n ...state.devices.slice(action.index),\n ],\n }\n }\n return {\n ...state,\n devices: [...state.devices, action.deviceId],\n }\n case OPERATION_POINT_DEREFERENCE_DEVICE:\n deviceIndex = state.devices.indexOf(action.deviceId)\n return {\n ...state,\n devices: [...state.devices.slice(0, deviceIndex), ...state.devices.slice(deviceIndex + 1)],\n }\n case OPERATION_POINT_REFERENCE_FRAME:\n return {\n ...state,\n frame: action.deviceId,\n }\n case OPERATION_POINT_DEREFERENCE_FRAME:\n return {\n ...state,\n frame: null,\n }\n case REORDER_DEVICES: {\n return {\n ...state,\n devices: action.devices,\n }\n }\n case SET_OPERATION_POINT_QUANTITY: {\n return {\n ...state,\n quantity: action.quantity,\n }\n }\n case SET_OPERATIONPOINT_IS_UPDATING: {\n return {\n ...state,\n isUpdating: action.isUpdating,\n }\n }\n default:\n return state\n }\n}\n\nexport default function roomListReducer(state = { byId: {}, allIds: [] }, action) {\n let allIdIndex\n switch (action.type) {\n case CLONE_OPERATION_POINT:\n return {\n ...state,\n byId: {\n ...state.byId,\n [action.operationPointId]: reducer(state.byId[action.originOperationPointId], action),\n },\n allIds: [...state.allIds, action.operationPointId],\n }\n case ADD_OPERATION_POINT:\n return {\n ...state,\n byId: {\n ...state.byId,\n [action.operationPointId]: reducer(state.byId[action.operationPointId], action),\n },\n allIds: [...state.allIds, action.operationPointId],\n }\n case REMOVE_OPERATION_POINT: {\n allIdIndex = state.allIds.indexOf(action.operationPointId)\n return {\n ...state,\n byId: omit(state.byId, [action.operationPointId]),\n allIds: [...state.allIds.slice(0, allIdIndex), ...state.allIds.slice(allIdIndex + 1)],\n }\n }\n case ADD_OPERATION_POINT_CONFIG:\n case DEL_OPERATION_POINT_CONFIG:\n case OPERATION_POINT_REFERENCE_DEVICE:\n case OPERATION_POINT_DEREFERENCE_DEVICE:\n case OPERATION_POINT_REFERENCE_FRAME:\n case OPERATION_POINT_DEREFERENCE_FRAME:\n case REORDER_DEVICES:\n case SET_OPERATION_POINT_QUANTITY:\n case SET_OPERATIONPOINT_IS_UPDATING:\n return {\n ...state,\n byId: {\n ...state.byId,\n [action.operationPointId]: reducer(state.byId[action.operationPointId], action),\n },\n }\n default:\n return state\n }\n}\n\n// Action Creators\n//\nexport const addOperationPoint = (roomId, operationPointId) => {\n return {\n type: ADD_OPERATION_POINT,\n operationPointId,\n roomId,\n }\n}\n\nexport const changeQuantity = (combination, quantity, operationPointId = v4()) => {\n return (dispatch, getState) => {\n const project = getEditableProject(getState())\n const activeRoom = getActiveRoom(getState())\n const entities = getAllEntities(getState())\n const deviceList = getDeviceList(getState())\n const frameMapping = getFrameMapping(getState())\n const devicesWithoutFrame = getDevicesWithoutFrame(getState())\n\n let operationPoint = activeRoom.operationPoints.find(el => {\n return equals(getImageDataFromOperationPoint(project, entities, el.id), combination.imgData)\n })\n\n if (operationPoint) {\n if (quantity > 0) {\n dispatch(setQuantity(operationPoint.id, quantity))\n } else {\n dispatch(generateDeleteSequence(getState(), operationPoint))\n }\n } else {\n const designRange = getParentDesignRange(getState(), activeRoom.id)\n let sequence = []\n sequence.push(createOperationPoint(\n activeRoom.id,\n operationPointId,\n designRange?.serie,\n designRange?.frameColor,\n designRange?.cplateColor\n ))\n let operationPoint = combination.entities[combination.rootEntityId]\n operationPoint.devices.forEach(deviceId => {\n let newDeviceId = v4()\n let device = combination.entities[deviceId]\n const isSocket = getIsSocket(getState(), device.availableDeviceId)\n const onPiecelist = project.data.projectType === 1 || isSocket\n sequence.push(\n addDeviceToOperationPoint(\n device.availableDeviceId,\n operationPointId,\n newDeviceId,\n 'device',\n onPiecelist\n )\n )\n if (device.devices) {\n device.devices.forEach(cplateId => {\n let newCPlateId = v4()\n let cplate = combination.entities[cplateId]\n sequence.push(\n addDeviceToOperationPoint(\n cplate.availableDeviceId,\n newDeviceId,\n newCPlateId,\n cplate.subtype,\n true,\n cplate.position\n )\n )\n })\n }\n })\n\n sequence.push(setConfigValue(operationPointId, { type: 'orientation', value: combination.orientation }))\n const frameSize = operationPoint.devices.map(id => combination.entities[id]).filter(el => !devicesWithoutFrame.find(el2 => el2 === el.availableDeviceId)).length\n \n let frameData = getFrameDataFromOperationPoint(designRange, frameSize)\n const frame = calculateFrame(deviceList, frameData.switchRangeId, frameData.frameTypeId, frameData.switchFrameColorId, combination.orientation, frameMapping)\n \n if (frame) {\n dispatch(addFrameToOpertaionPoint(frame.supplierPid, operationPointId))\n }\n dispatch(batchActions(sequence))\n }\n }\n}\n\nexport const createOperationPointWithDevice = (combination, operationPointId = v4(), orientation) => {\n return (dispatch, getState) => {\n const project = getEditableProject(getState())\n const activeRoom = getActiveRoom(getState())\n const deviceList = getDeviceList(getState())\n const devicesWithoutFrame = getDevicesWithoutFrame(getState())\n const frameMapping = getFrameMapping(getState())\n const designRange = getParentDesignRange(getState(), activeRoom.id)\n let sequence = []\n sequence.push(createOperationPoint(\n activeRoom.id,\n operationPointId,\n designRange?.serie,\n designRange?.frameColor,\n designRange?.cplateColor\n ))\n let operationPoint = combination.entities[combination.rootEntityId]\n operationPoint.devices.forEach(deviceId => {\n let newDeviceId = v4()\n let device = combination.entities[deviceId]\n const isSocket = getIsSocket(getState(), device.availableDeviceId)\n const onPiecelist = project.data.projectType === 1 || isSocket\n sequence.push(\n addDeviceToOperationPoint(\n device.availableDeviceId,\n operationPointId,\n newDeviceId,\n 'device',\n onPiecelist\n )\n )\n if (device.devices) {\n device.devices.forEach(cplateId => {\n let newCPlateId = v4()\n let cplate = combination.entities[cplateId]\n sequence.push(\n addDeviceToOperationPoint(cplate.availableDeviceId, newDeviceId, newCPlateId, cplate.subtype, true, cplate.position)\n )\n })\n }\n })\n sequence.push(setConfigValue(operationPointId, { type: 'orientation', value: orientation || combination.orientation }))\n const frameSize = operationPoint.devices.map(id => combination.entities[id]).filter(el => !devicesWithoutFrame.find(el2 => el2 === el.availableDeviceId)).length\n \n let frameData = getFrameDataFromOperationPoint(designRange, frameSize)\n const frame = calculateFrame(deviceList, frameData.switchRangeId, frameData.frameTypeId, frameData.switchFrameColorId, orientation || combination.orientation, frameMapping)\n \n if (frame) {\n dispatch(addFrameToOpertaionPoint(frame.supplierPid, operationPointId))\n }\n dispatch(batchActions(sequence))\n }\n}\n\nexport const setQuantity = (operationPointId, quantity) => {\n return {\n type: SET_OPERATION_POINT_QUANTITY,\n operationPointId,\n quantity,\n }\n}\n\nexport const createOperationPoint = (\n roomId,\n operationPointId = v4(),\n serie,\n frameColor,\n cPlateColor,\n) => {\n const sequence = [\n addOperationPoint(roomId, operationPointId),\n buildOperationPointRoomReference(roomId, operationPointId),\n ]\n\n if (serie) {\n sequence.push(setConfigValue(operationPointId, {type: 'serie', value: serie}))\n }\n\n if (frameColor) {\n sequence.push(setConfigValue(operationPointId, {type: 'frameColor', value: frameColor}))\n }\n\n if (cPlateColor) {\n sequence.push(setConfigValue(operationPointId, {type: 'cplateColor', value: cPlateColor}))\n }\n\n return batchActions(sequence)\n}\n\nexport const deleteOperationPoint = operationPointId => {\n return {\n type: REMOVE_OPERATION_POINT,\n operationPointId,\n }\n}\n\nexport const removeOperationPoint = operationPoint => {\n return (dispatch, getState) => {\n if (!operationPoint.parent.hasOwnProperty('id')) {\n operationPoint = getEntityResolved(getState(), operationPoint.id)\n }\n return dispatch(generateDeleteSequence(getState(), operationPoint, 0))\n }\n}\n\nexport const referenceDeviceWithOperationPoint = (operationPointId, deviceId, index = -1) => {\n return {\n type: OPERATION_POINT_REFERENCE_DEVICE,\n operationPointId,\n deviceId,\n index\n }\n}\n\nexport const dereferenceDeviceWithOperationPoint = (operationPointId, deviceId) => {\n return {\n type: OPERATION_POINT_DEREFERENCE_DEVICE,\n operationPointId,\n deviceId,\n }\n}\n\nexport const referenceFrameWithOperationPoint = (operationPointId, deviceId) => {\n return {\n type: OPERATION_POINT_REFERENCE_FRAME,\n operationPointId,\n deviceId,\n }\n}\n\nexport const dereferenceFrameWithOperationPoint = (operationPointId, deviceId) => {\n return {\n type: OPERATION_POINT_DEREFERENCE_FRAME,\n operationPointId,\n deviceId,\n }\n}\n\nexport const buildDeviceOperationPointReference = (operationPointId, deviceId) => {\n return referenceDeviceWithOperationPoint(operationPointId, deviceId)\n}\n\nexport const removeDeviceOperationPointReference = (operationPointId, deviceId) => {\n return dereferenceDeviceWithOperationPoint(operationPointId, deviceId)\n}\n\nexport const copyOperationPoint = (roomId, originOperationPointId, operationPointId = v4()) => {\n return {\n type: CLONE_OPERATION_POINT,\n roomId,\n originOperationPointId,\n operationPointId,\n }\n}\n\nexport const cloneOperationPoint = (roomId, originOperationPointId, operationPointId = v4()) => {\n return batchActions([\n copyOperationPoint(roomId, originOperationPointId, operationPointId),\n buildOperationPointRoomReference(roomId, operationPointId),\n ])\n}\n\nexport const setOrderDevices = (operationPointId, devices) => {\n return {\n type: REORDER_DEVICES,\n operationPointId,\n devices,\n }\n}\n\nexport const setOperationPointIsUpdating = (operationPointId, isUpdating) => {\n return {\n type: SET_OPERATIONPOINT_IS_UPDATING,\n operationPointId,\n isUpdating,\n }\n}\n\nexport const getImageDataFromOperationPoint = (project, entities, operationPointId, combOrientation) => {\n const operationPoint = entities[operationPointId]\n const orientation = operationPoint.config?.find(el => el.type === 'orientation')?.value || combOrientation || 'V'\n\n const data = {\n switchRangeId: project.data.serie,\n switchColorId: project.data.cplateColor,\n switchFrameColorId: project.data.frameColor,\n orientation: orientation,\n groups: [\n {\n frameTypeId: operationPoint.devices.length,\n devices: operationPoint.devices.map(deviceId => {\n let products = []\n const device = entities[deviceId]\n if (device) {\n products.push({\n orderNumber: device.availableDeviceId,\n quantity: 1,\n })\n if (device.devices) {\n device.devices.forEach(cplateId => {\n const cplate = entities[cplateId]\n if (cplate) {\n products.push({\n orderNumber: cplate.availableDeviceId,\n quantity: 1,\n })\n }\n })\n }\n }\n\n return {\n frameHeight: 1,\n products: products,\n }\n }),\n },\n ],\n }\n\n if (orientation === 'H') {\n data.height = 80\n } else {\n data.width = 150\n }\n return data\n}\n\nexport const getFrameDataFromOperationPoint = (designRange, deviceLength) => {\n return {\n switchRangeId: designRange?.serie,\n switchFrameColorId: designRange?.frameColor,\n frameTypeId: deviceLength,\n }\n}\n\nexport const getOperationPointFromCombination = (state, combination) => {\n return createDeepEqualSelector(\n [getEditableProject, getAllEntities, getActiveRoom],\n (project, entities, activeRoom) => {\n let operationPoint = activeRoom?.operationPoints.find(el => {\n return equals(getImageDataFromOperationPoint(project, entities, el.id), combination?.imgData)\n })\n return operationPoint\n }\n )(state)\n}\n\nexport const getOperationPointOrientation = (state, operationPointId, combination) => {\n return createDeepEqualSelector([getAllEntities], entities => {\n let operationPoint = entities[operationPointId]\n let orientation = null\n if (combination) {\n operationPoint = getOperationPointFromCombination(state, combination)\n orientation = combination.orientation\n }\n if (operationPoint) {\n const orientation = operationPoint.config?.find(conf => conf.type === 'orientation')\n return orientation?.value\n }\n return orientation\n })(state)\n}\n\nexport const getOrientation = operationPoint => {\n return operationPoint.config.find(el => el.type === 'orientation')?.value\n}\n","import { Machine, assign } from 'xstate'\n\nconst initialValues = {\n type: 'TYPE_NONE',\n switch: 'SWITCH_NONE',\n operation: 'OPERATION_NONE',\n extension: 'EXTENSION_NONE',\n timing: 'TIMING_NONE',\n sensor: 'SENSOR_NONE',\n specials: 'SPECIALS_NONE',\n}\n\nexport const calculate = (context, event, actionMeta) => {\n let value = JSON.parse(JSON.stringify(actionMeta.state?.value || initialValues))\n if (event?.payload?.identifier) {\n value[event.payload.identifier] = event.type\n }\n const { type, switch: sw, operation, extension, /*timing,*/ sensor, specials } = value\n let notPossible = false\n\n let formStatus = {}\n Object.keys(blindMachine.states).forEach(key => {\n formStatus[key] = {\n open: key === 'type' ? true : false\n }\n })\n\n context = [{\n feature: '',\n filters: [\n {\n Id: 'EF000005', //Zusammenstellung\n Value: 'EV000078', //Basiselement\n },\n ],\n additionalFilters: []\n }]\n\n if (type === 'MECHANISCH') {\n if (\n operation === 'MANUEL' ||\n operation === 'IR' ||\n specials === 'NEUTRALLEITER' ||\n specials === 'LAUFZEIT_PARAMETRIERBAR'\n ) {\n notPossible = true\n }\n\n if (!notPossible) {\n context[0].feature = 'EC000044' //Jalousieschalter/-taster\n }\n } else if (type === 'ELEKTRONISCH') {\n context[0].feature = 'EC000615' //Jalousiesteuerung\n }\n\n if (sw === 'SCHALTER') {\n context[0].filters.push({\n Id: 'EF000010', //Ausführung\n //EV000499 Schalter 1-polig\n //EV000500 Schalter 2-polig\n //EV006509 Tastrastschalter 1-polig\n //EV006510 Tastrastschalter 2-polig\n Value: ['EV000499', 'EV000500', 'EV006509', 'EV006510'],\n })\n } else if (sw === 'TASTER') {\n context[0].filters.push({\n Id: 'EF000010', //Ausführung\n Value: ['EV000502', 'EV000503'], //EV000502 Taster 1-polig oder EV000503 Taster 2-polig\n })\n }\n\n if (operation === 'DRUECKEN') {\n context[0].filters.push({\n Id: 'EF000006', //Bedienungsart\n Value: 'EV000200', //Wippe\n })\n } else if (operation === 'SCHLUESSEL') {\n context[0].filters.push({\n Id: 'EF000006', //Bedienungsart\n Value: 'EV000175', //Schlüssel\n })\n } else if (operation === 'DREHEN') {\n context[0].filters.push({\n Id: 'EF000006', //Bedienungsart\n Value: 'EV000092', //Drehknopf\n })\n } else if (operation === 'IR') {\n context[0].additionalFilters.push('ir')\n }\n\n if (extension === 'NEBENSTELLE') {\n context[0].filters.push({\n Id: 'EF003876', //Nebenstelleneingang\n Value: 'true',\n })\n }\n\n if (sensor === 'HELLIGKEIT') {\n context[0].filters.push({\n Id: 'EF003872', //Mit Helligkeitssensoranschluss\n Value: 'true',\n })\n } else if (sensor === 'GLAS') {\n context[0].filters.push({\n Id: 'EF003871', //Mit Glasbruchmelderanschluss\n Value: 'true',\n })\n } else if (sensor === 'WIND') {\n context[0].filters.push({\n Id: 'EF005866', //Geeignet für Windsensor\n Value: 'true',\n })\n } else if (sensor === 'REGEN') {\n context[0].filters.push({\n Id: 'EF005847', //Geeignet für Regensensor\n Value: 'true',\n })\n }\n\n if (specials === 'NEUTRALLEITER') {\n context[0].additionalFilters.push('neutralleiter')\n } else if (specials === 'LAUFZEIT_PARAMETRIERBAR') {\n context[0].additionalFilters.push('Neutralleiter')\n }\n\n if (type === 'ELEKTRONISCH') {\n context.push({\n feature: ['EC001035', 'EC001588'], //EC001035 Bewegungsmelder Basiselement oder EC001588 Elektronischer Schalter\n filters: [{\n \"Id\": \"EF000010\", //Ausführung\n \"Value\": \"EV004400\" //Nebenstelle\n }],\n additionalFilters: []\n })\n }\n\n if (type === 'TYPE_NONE') {\n //Jalousieschalter/-taster, Jalousiesteuerung oder Jalousiesteuerung\n context[0].feature = ['EC000044', 'EC000615'] //EC000044 Jalousieschalter/-taster oder EC000615 Jalousiesteuerung\n context.push({\n feature: ['EC001035', 'EC001588'], //EC001035 Bewegungsmelder Basiselement oder EC001588 Elektronischer Schalter\n filters: [{\n \"Id\": \"EF000010\", //Ausführung\n \"Value\": \"EV004400\" //Nebenstelle\n }],\n additionalFilters: []\n })\n }\n\n return {\n descriptions: context,\n formStatus\n }\n}\n\nexport const blindMachine = Machine(\n {\n id: 'blind',\n type: 'parallel',\n context: {},\n states: {\n type: {\n initial: initialValues.type,\n on: {\n TYPE_NONE: 'type.TYPE_NONE',\n MECHANISCH: 'type.MECHANISCH',\n ELEKTRONISCH: 'type.ELEKTRONISCH',\n },\n states: {\n TYPE_NONE: {\n entry: ['calculate'],\n },\n MECHANISCH: {\n entry: ['calculate'],\n },\n ELEKTRONISCH: {\n entry: ['calculate'],\n },\n },\n },\n switch: {\n initial: initialValues.switch,\n on: {\n SWITCH_NONE: 'switch.SWITCH_NONE',\n SCHALTER: 'switch.SCHALTER',\n TASTER: 'switch.TASTER',\n },\n states: {\n SWITCH_NONE: {\n entry: ['calculate'],\n },\n SCHALTER: {\n entry: ['calculate'],\n },\n TASTER: {\n entry: ['calculate'],\n },\n },\n },\n operation: {\n initial: initialValues.operation,\n on: {\n OPERATION_NONE: 'operation.OPERATION_NONE',\n DRUECKEN: 'operation.DRUECKEN',\n SCHLUESSEL: 'operation.SCHLUESSEL',\n MANUEL: 'operation.MANUEL',\n DREHEN: 'operation.DREHEN',\n IR: 'operation.IR',\n },\n states: {\n OPERATION_NONE: {\n entry: ['calculate'],\n },\n DRUECKEN: {\n entry: ['calculate'],\n },\n SCHLUESSEL: {\n entry: ['calculate'],\n },\n MANUEL: {\n entry: ['calculate'],\n },\n DREHEN: {\n entry: ['calculate'],\n },\n IR: {\n entry: ['calculate'],\n },\n },\n },\n extension: {\n initial: initialValues.extension,\n on: {\n EXTENSION_NONE: 'extension.EXTENSION_NONE',\n NEBENSTELLE: 'extension.NEBENSTELLE',\n },\n states: {\n EXTENSION_NONE: {\n entry: ['calculate'],\n },\n NEBENSTELLE: {\n entry: ['calculate'],\n },\n },\n },\n sensor: {\n initial: initialValues.sensor,\n on: {\n SENSOR_NONE: 'sensor.SENSOR_NONE',\n TEMPERATUR: 'sensor.TEMPERATUR',\n HELLIGKEIT: 'sensor.HELLIGKEIT',\n GLAS: 'sensor.GLAS',\n WIND: 'sensor.WIND',\n REGEN: 'sensor.REGEN',\n },\n states: {\n SENSOR_NONE: {\n entry: ['calculate'],\n },\n TEMPERATUR: {\n entry: ['calculate'],\n },\n HELLIGKEIT: {\n entry: ['calculate'],\n },\n GLAS: {\n entry: ['calculate'],\n },\n WIND: {\n entry: ['calculate'],\n },\n REGEN: {\n entry: ['calculate'],\n },\n },\n },\n specials: {\n initial: initialValues.specials,\n on: {\n SPECIALS_NONE: 'specials.SPECIALS_NONE',\n NEUTRALLEITER: 'specials.NEUTRALLEITER',\n LAUFZEIT_PARAMETRIERBAR: 'specials.LAUFZEIT_PARAMETRIERBAR',\n },\n states: {\n SPECIALS_NONE: {\n entry: ['calculate'],\n },\n NEUTRALLEITER: {\n entry: ['calculate'],\n },\n LAUFZEIT_PARAMETRIERBAR: {\n entry: ['calculate'],\n },\n },\n },\n },\n },\n {\n actions: {\n calculate: assign(calculate),\n },\n }\n)\n\nexport const possibleBlindClasses = {\n //EC000044 Jalousieschalter/-taster\n //EC000615 Jalousiesteuerung\n //EC001035 Bewegungsmelder Basiselement\n //EC001588 Elektronischer Schalter\n classes: ['EC000044', 'EC000615', 'EC001035', 'EC001588'],\n types: {\n 'MECHANISCH': blindMachine.transition(blindMachine.initialState, { type: 'MECHANISCH', payload: { identifier: 'type'} })?.context?.descriptions,\n 'ELEKTRONISCH': blindMachine.transition(blindMachine.initialState, { type: 'ELEKTRONISCH', payload: { identifier: 'type'} })?.context?.descriptions\n }\n}\n\nexport default blindMachine\n","import { Machine, assign } from 'xstate'\n\nconst initialValues = {\n type: 'UAE',\n}\n\nexport const calculate = (context, event, actionMeta) => {\n let value = JSON.parse(JSON.stringify(actionMeta.state?.value || initialValues))\n if (event?.payload?.identifier) {\n value[event.payload.identifier] = event.type\n }\n const { type } = value\n\n let formStatus = {}\n Object.keys(dataMachine.states).forEach(key => {\n formStatus[key] = {\n open: key === 'type' ? true : false\n }\n })\n\n context = [{\n feature: '',\n filters: [\n {\n Id: 'EF000005', //Zusammenstellung\n Value: 'EV000078', //Basiselement\n }\n ],\n additionalFilters: []\n }]\n\n if (type === 'UAE') {\n context[0].feature = 'EC000018' //Einsatz/Abdeckung für Kommunikationstechnik\n context[0].filters.push(\n {\n Id: 'EF000133', //Verwendung\n Value: 'EV000154', //sonstige\n }\n )\n context[0].additionalFilters.push('uae')\n } else if (type === 'TAE') {\n context[0].feature = 'EC000018' //Einsatz/Abdeckung für Kommunikationstechnik\n context[0].filters.push(\n {\n Id: 'EF000133', //Verwendung\n Value: 'EV000378', //TAE\n }\n )\n } else if (type === 'SPEAKER') {\n context[0].feature = 'EC000018' //Einsatz/Abdeckung für Kommunikationstechnik\n context[0].filters.push(\n {\n Id: 'EF000133', //Verwendung\n Value: 'EV000154', //sonstige\n }\n )\n context[0].additionalFilters.push('speaker')\n } else if (type === 'ANTENNA') {\n context[0].feature = 'EC000439' //Antennensteckdose\n context[0].filters = []\n } else if (type === 'OTHER') {\n context[0].feature = 'EC000018' //Einsatz/Abdeckung für Kommunikationstechnik\n context[0].filters.push({\n Id: 'EF000133', //Verwendung\n //EV004045 USB\n //EV010888 HDMI\n //EV001102 offene/geschlossene Systeme\n //EV015645 DisplayPort (DP)\n Value: ['EV004045', 'EV010888', 'EV001102', 'EV015645'],\n })\n }\n\n return {\n descriptions: context,\n formStatus\n }\n}\n\nexport const dataMachine = Machine(\n {\n id: 'data',\n type: 'parallel',\n context: {},\n states: {\n type: {\n initial: initialValues.type,\n on: {\n UAE: 'type.UAE',\n TAE: 'type.TAE',\n SPEAKER: 'type.SPEAKER',\n ANTENNA: 'type.ANTENNA',\n OTHER: 'type.OTHER',\n },\n states: {\n UAE: { entry: ['calculate'] },\n TAE: { entry: ['calculate'] },\n SPEAKER: { entry: ['calculate'] },\n ANTENNA: { entry: ['calculate'] },\n OTHER: { entry: ['calculate'] },\n },\n },\n },\n },\n {\n actions: {\n calculate: assign(calculate),\n },\n }\n)\n\nexport const possibleDataClasses = {\n //EC000018 Einsatz/Abdeckung für Kommunikationstechnik\n //EC000439 Antennensteckdose\n classes: ['EC000018', 'EC000439'],\n types: {\n 'UAE': dataMachine.initialState?.context?.descriptions,\n 'TAE': dataMachine.transition(dataMachine.initialState, { type: 'TAE' , payload: { identifier: 'type'} })?.context?.descriptions,\n 'SPEAKER': dataMachine.transition(dataMachine.initialState, { type: 'SPEAKER', payload: { identifier: 'type'} })?.context?.descriptions,\n 'ANTENNA': dataMachine.transition(dataMachine.initialState, { type: 'ANTENNA', payload: { identifier: 'type'} })?.context?.descriptions,\n }\n}\n\nexport default dataMachine\n","import { Machine, assign } from 'xstate';\n\nconst initialValues = {\n operation: 'OPERATION_NONE',\n last: 'LAST_NONE',\n extension: 'EXTENSION_NONE',\n special: 'SPECIAL_NONE',\n}\n\nexport const calculate = (context, event, actionMeta) => {\n let value = JSON.parse(JSON.stringify(actionMeta.state?.value || initialValues))\n if (event?.payload?.identifier) {\n value[event.payload.identifier] = event.type\n }\n\n const {operation, last, extension, special} = value\n\n let formStatus = {}\n Object.keys(dimmerMachine.states).forEach(key => {\n formStatus[key] = {\n open: key === 'operation' ? true : false\n }\n })\n\n context = [{\n feature: \"EC000025\", //Dimmer\n filters: [\n {\n \"Id\": \"EF000005\", //Zusammenstellung\n \"Value\": \"EV000078\" //Basiselement\n },\n {\n \"Id\": \"EF000003\", //Montageart\n \"Value\": \"EV000383\" //Unterputz\n }\n ],\n additionalFilters: []\n }]\n\n if (operation === 'DREHBEDIENUNG') {\n context[0].filters.push({\n \"Id\": \"EF000006\", //Bedienungsart\n \"Value\": [\"EV000092\", \"EV000251\"] //EV000092 Drehknopf oder EV000251 Dreh-/Druckknopf\n })\n } else if (operation === 'TASTBEDIENUNG') {\n context[0].filters.push({\n \"Id\": \"EF000006\", //Bedienungsart\n \"Value\": [\"EV008969\", \"EV000554\"] //EV008969 Tipptaster oder EV000554 Drucktaster\n })\n } else if (operation === 'IR') {\n context[0].filters.push({\n \"Id\": \"EF003908\", //Verwendbar mit IR-Taste\n \"Value\": \"true\"\n })\n } else if (operation === 'DREHNEBENSTELLE') {\n context[0].additionalFilters.push('drehnebenstelle')\n }\n\n if (last === 'OHM') {\n context[0].filters.push( {\n \"Id\": \"EF001508\", //Lastart\n \"Value\": \"EV006463\" //ohmsche Last\n })\n } else if (last === 'INDUCTIVE') {\n context[0].filters.push( {\n \"Id\": \"EF001508\", //Lastart\n \"Value\": \"EV006403\" //induktive Last\n })\n } else if (last === 'KAPAZITIVE') {\n context[0].filters.push( {\n \"Id\": \"EF001508\", //Lastart\n \"Value\": \"EV006425\" //kapazitive Last\n })\n } else if (last === 'EVG1_10V') {\n context[0].filters.push( {\n \"Id\": \"EF001508\", //Lastart\n \"Value\": \"EV006788\" //EVG 1-10 V\n })\n } else if (last === 'UNIVERSAL') {\n context[0].filters.push( {\n \"Id\": \"EF001508\", //Lastart\n \"Value\": [\"EV011953\", \"EV000028\"] //EV011953 universal und LED Retrofit oder EV000028 universal\n })\n }\n\n if (extension === 'DREHNEBENSTELLE') {\n context[0].additionalFilters.push('mn_drehnebenstelle')\n } else if (extension === 'TASTER') {\n context[0].additionalFilters.push('mn_taster')\n context[0].filters.push({\n \"Id\": \"EF003910\", //Verwendbar mit Taste\n \"Value\": \"true\"\n })\n } else if (extension === 'WECHSEL_KREUZSCHALTER') {\n context[0].additionalFilters.push('mn_wechsel_kreuz')\n }\n\n if (special === 'WEITER_AUSGANG_GESCHALTET') {\n context[0].additionalFilters.push('ausgang_geschaltet')\n } else if (special === 'ZWEITER_AUSGANG_GEDIMMT') {\n context[0].additionalFilters.push('ausgang_gedimmt')\n }\n\n if (operation === 'OPERATION_NONE') {\n context.push({\n feature: ['EC001035', 'EC001588'], //EC001035 Bewegungsmelder Basiselement oder EC001588 rrrElektronischer Schalter\n filters: [{\n \"Id\": \"EF000010\", //Ausführung\n \"Value\": \"EV004400\" //Nebenstelle\n }],\n additionalFilters: []\n })\n }\n \n return {\n descriptions: context,\n formStatus\n }\n}\n\nexport const dimmerMachine = Machine({\n id: 'dimmer',\n type: 'parallel',\n context: {},\n states: {\n operation: {\n initial: initialValues.operation,\n on: {\n OPERATION_NONE: 'operation.OPERATION_NONE',\n DREHBEDIENUNG: 'operation.DREHBEDIENUNG',\n TASTBEDIENUNG: 'operation.TASTBEDIENUNG',\n IR: 'operation.IR',\n DREHNEBENSTELLE: 'operation.DREHNEBENSTELLE',\n },\n states: {\n OPERATION_NONE: {\n entry: ['calculate'],\n \n },\n DREHBEDIENUNG: {\n entry: ['calculate'],\n \n },\n TASTBEDIENUNG: {\n entry: ['calculate'],\n \n },\n IR: {\n entry: ['calculate'],\n \n },\n DREHNEBENSTELLE: {\n entry: ['calculate'],\n \n }\n }\n },\n last: {\n initial: initialValues.last,\n on: {\n LAST_NONE: 'last.LAST_NONE',\n INDUCTIVE: 'last.INDUCTIVE',\n KAPAZITVE: 'last.KAPAZITVE',\n OHM: 'last.OHM',\n EVG1_10V: 'last.EVG1_10V',\n UNIVERSAL: 'last.UNIVERSAL',\n },\n states: {\n LAST_NONE: {\n entry: ['calculate'],\n \n },\n OHM: {\n entry: ['calculate'],\n \n },\n INDUCTIVE: {\n entry: ['calculate'],\n \n },\n KAPAZITVE: {\n entry: ['calculate'],\n \n },\n EVG1_10V: {\n entry: ['calculate'],\n \n },\n UNIVERSAL: {\n entry: ['calculate'],\n \n }\n }\n },\n extension: {\n initial: initialValues.extension,\n on: {\n EXTENSION_NONE: 'extension.EXTENSION_NONE',\n DREHNEBENSTELLE: 'extension.DREHNEBENSTELLE',\n TASTER: 'extension.TASTER',\n WECHSEL_KREUZSCHALTER: 'extension.WECHSEL_KREUZSCHALTER'\n },\n states: {\n EXTENSION_NONE: {\n entry: ['calculate'],\n \n },\n DREHNEBENSTELLE: {\n entry: ['calculate'],\n \n },\n TASTER: {\n entry: ['calculate'],\n \n },\n WECHSEL_KREUZSCHALTER: {\n entry: ['calculate'],\n \n }\n }\n },\n special: {\n initial: initialValues.special,\n on: {\n SPECIAL_NONE: 'special.SPECIAL_NONE',\n ZWEITER_AUSGANG_GESCHALTET: 'special.ZWEITER_AUSGANG_GESCHALTET',\n ZWEITER_AUSGANG_GEDIMMT: 'special.ZWEITER_AUSGANG_GEDIMMT',\n },\n states: {\n SPECIAL_NONE: {\n entry: ['calculate'],\n \n },\n ZWEITER_AUSGANG_GESCHALTET: {\n entry: ['calculate'],\n \n },\n ZWEITER_AUSGANG_GEDIMMT: {\n entry: ['calculate'],\n \n }\n }\n }\n }\n}, {\n actions: {\n calculate: assign(calculate),\n }\n});\n\nexport const possibleDimmerClasses = {\n //EC000025 Dimmer\n //EC001035 Bewegungsmelder Basiselement\n //EC001588 Elektronischer Schalter\n classes: ['EC000025', 'EC001035', 'EC001588'],\n types: {\n 'DREHBEDIENUNG': dimmerMachine.transition(dimmerMachine.initialState, { type: 'DREHBEDIENUNG', payload: { identifier: 'operation' } })?.context?.descriptions,\n 'TASTBEDIENUNG': dimmerMachine.transition(dimmerMachine.initialState, { type: 'TASTBEDIENUNG', payload: { identifier: 'operation'} })?.context?.descriptions,\n 'DREHNEBENSTELLE': dimmerMachine.transition(dimmerMachine.initialState, { type: 'DREHNEBENSTELLE', payload: { identifier: 'operation'} })?.context?.descriptions\n }\n}\n\nexport default dimmerMachine","import { Machine, assign } from 'xstate'\n\nconst initialValues = {\n type: 'BEWEGUNGSMELDER',\n lence: 'LENCE_NONE',\n connection: 'CONNECTION_NONE',\n channel: 'CHANNEL_NONE',\n extension: 'EXTENSION_NONE',\n voltage: 'VOLTAGE_NONE',\n specials: 'SPECIALS_NONE',\n}\n\nexport const calculate = (context, event, actionMeta) => {\n let value = JSON.parse(JSON.stringify(actionMeta.state?.value || initialValues))\n if (event?.payload?.identifier) {\n value[event.payload.identifier] = event.type\n }\n const { type } = value\n\n let formStatus = {}\n Object.keys(motionMachine.states).forEach(key => {\n formStatus[key] = {\n open: key === 'type' ? true : false,\n }\n })\n\n context = []\n\n if (type === 'BEWEGUNGSMELDER') {\n context.push({\n feature: 'EC000138', //Bewegungsmelder-Sensor\n filters: [\n {\n Id: 'EF000010', //Ausführung\n Value: 'EV004048', //Bewegungsmelder\n },\n {\n Id: 'EF000003', //Montageart\n Value: 'EV000383', //Unterputz\n }\n ],\n additionalFilters: ['motionDetection'],\n })\n } else if (type === 'KOMFORTSCHALTER') {\n context.push({\n feature: 'EC000138', //Bewegungsmelder-Sensor\n filters: [\n {\n Id: 'EF000010', //Ausführung\n Value: 'EV004048', //Bewegungsmelder\n },\n {\n Id: 'EF000003', //Montageart\n Value: 'EV000383', //Unterputz\n }\n ],\n additionalFilters: ['komfortschalter'],\n })\n }\n\n return {\n descriptions: context,\n formStatus,\n }\n}\n\nexport const motionMachine = Machine(\n {\n id: 'motion',\n type: 'parallel',\n context: {},\n states: {\n type: {\n initial: initialValues.type,\n on: {\n BEWEGUNGSMELDER: 'type.BEWEGUNGSMELDER',\n KOMFORTSCHALTER: 'type.KOMFORTSCHALTER',\n },\n states: {\n BEWEGUNGSMELDER: {\n entry: ['calculate'],\n },\n KOMFORTSCHALTER: {\n entry: ['calculate'],\n },\n },\n },\n },\n },\n {\n actions: {\n calculate: assign(calculate),\n },\n }\n)\n\nexport const possibleMotionClasses = {\n //EC000138 Bewegungsmelder-Sensor\n classes: ['EC000138'],\n types: {\n 'BEWEGUNGSMELDER': motionMachine.initialState?.context?.descriptions,\n 'KOMFORTSCHALTER': motionMachine.transition(motionMachine.initialState, { type: 'KOMFORTSCHALTER', payload: { identifier: 'type'}})?.context?.descriptions,\n }\n}\n\nexport default motionMachine\n","import { Machine, assign } from 'xstate';\n\nconst initialValues = {\n type: 'TYPE_NONE',\n label: 'LABEL_NONE',\n color: 'COLOR_NONE',\n special: 'SPECIAL_NONE',\n}\n\nexport const calculate = (context, event, actionMeta) => {\n let value = JSON.parse(JSON.stringify(actionMeta.state?.value || initialValues))\n if (event?.payload?.identifier) {\n value[event.payload.identifier] = event.type\n }\n const {type, label, color, special} = value\n\n let formStatus = {}\n Object.keys(socketMachine.states).forEach(key => {\n formStatus[key] = {\n open: key === 'type' ? true : false\n }\n })\n\n context = [{\n feature: \"EC000125\", //Steckdose\n filters: [\n ],\n }]\n\n if (type === 'ERHOEHTER_BERUEHRUNGSSCHUTZ') {\n context[0].filters.push({\n \"Id\": \"EF000389\", //Mit erhöhtem Berührungsschutz\n \"Value\": \"true\"\n })\n } else if (type ==='SCHUKO') {\n context[0].filters.push({\n \"Id\": \"EF000010\", //Ausführung\n \"Value\": \"EV002727\" //SCHUKO\n })\n } else if (type ==='KLAPPDECKEL') {\n context[0].filters.push({\n \"Id\": \"EF000117\", //Mit Klappdeckel\n \"Value\": \"true\"\n })\n } else if (type ==='UEBERSPANNUNGSSCHUTZ') {\n context[0].filters.push({\n \"Id\": \"EF001332\", //Überspannungsschutz\n \"Value\": \"true\"\n })\n }\n\n if (label === 'BESCHRIFTUNGSFELD') {\n context[0].filters.push({\n \"Id\": \"EF001035\", //Textfeld/Beschriftungsfläche\n \"Value\": \"true\"\n })\n } else if (label === 'EDV') {\n context[0].filters.push({\n \"Id\": \"EF003823\", //Aufdruck/Kennzeichnung\n \"Value\": \"EV006379\" //EDV\n })\n }\n\n if (color === 'GRUEN') {\n context[0].filters.push({\n \"Id\": \"EF000007\", //Farbe\n \"Value\": \"EV000235\" //grün\n })\n } else if (color === 'ORANGE') {\n context[0].filters.push({\n \"Id\": \"EF000007\", //Farbe\n \"Value\": \"EV000236\" //orange\n })\n }\n\n if (special === 'KONTROLLLICHT') {\n context[0].filters.push({\n \"Id\": \"EF008861\", //Mit Funktionsbeleuchtung\n \"Value\": \"true\"\n })\n }\n\n return {\n descriptions: context,\n formStatus,\n }\n}\n\nexport const socketMachine = Machine({\n id: 'socket',\n type: 'parallel',\n context: {},\n states: {\n type: {\n initial: initialValues.type,\n on: {\n TYPE_NONE: 'type.TYPE_NONE',\n ERHOEHTER_BERUEHRUNGSSCHUTZ: 'type.ERHOEHTER_BERUEHRUNGSSCHUTZ',\n KLAPPDECKEL: 'type.KLAPPDECKEL',\n UEBERSPANNUNGSSCHUTZ: 'type.UEBERSPANNUNGSSCHUTZ'\n },\n states: {\n TYPE_NONE: {\n entry: ['calculate'],\n },\n ERHOEHTER_BERUEHRUNGSSCHUTZ: {\n entry: ['calculate'],\n },\n KLAPPDECKEL: {\n entry: ['calculate'],\n },\n UEBERSPANNUNGSSCHUTZ: {\n entry: ['calculate'],\n }\n }\n },\n label: {\n initial: initialValues.label,\n on: {\n LABEL_NONE: 'label.LABEL_NONE',\n BESCHRIFTUNGSFELD: 'label.BESCHRIFTUNGSFELD',\n EDV: 'label.EDV'\n },\n states: {\n LABEL_NONE: {\n entry: ['calculate'],\n },\n BESCHRIFTUNGSFELD: {\n entry: ['calculate'],\n },\n EDV: {\n entry: ['calculate'],\n }\n }\n },\n color: {\n initial: initialValues.color,\n on: {\n COLOR_NONE: 'color.COLOR_NONE',\n GRUEN: 'color.GRUEN',\n ORANGE: 'color.ORANGE'\n },\n states: {\n COLOR_NONE: {\n entry: ['calculate'],\n },\n GRUEN: {\n entry: ['calculate'],\n },\n ORANGE: {\n entry: ['calculate'],\n }\n }\n },\n special: {\n initial: initialValues.special,\n on: {\n SPECIAL_NONE: 'special.SPECIAL_NONE',\n KONTROLLLICHT: 'special.KONTROLLLICHT'\n },\n states: {\n SPECIAL_NONE: {\n entry: ['calculate'],\n },\n KONTROLLLICHT: {\n entry: ['calculate'],\n }\n }\n }\n }\n}, {\n actions: {\n calculate: assign(calculate)\n }\n});\n\nexport const possibleSocketClasses = {\n //EC000125 Steckdose\n classes: ['EC000125'],\n types: {\n 'ERHOEHTER_BERUEHRUNGSSCHUTZ': socketMachine.transition(socketMachine.initialState, { type: 'ERHOEHTER_BERUEHRUNGSSCHUTZ', payload: { identifier: 'type'}})?.context?.descriptions,\n 'SCHUKO': socketMachine.transition(socketMachine.initialState, { type: 'SCHUKO', payload: { identifier: 'type'} })?.context?.descriptions,\n 'KLAPPDECKEL': socketMachine.transition(socketMachine.initialState, { type: 'KLAPPDECKEL', payload: { identifier: 'type'} })?.context?.descriptions,\n 'UEBERSPANNUNGSSCHUTZ': socketMachine.transition(socketMachine.initialState, { type: 'UEBERSPANNUNGSSCHUTZ', payload: { identifier: 'type'} })?.context?.descriptions\n }\n}\n\nexport default socketMachine","import { Machine, assign } from 'xstate'\n\nconst initialValues = {\n type: 'WECHSELSCHALTER',\n channel: 'CHANNEL_NONE',\n rocker: 'ROCKER_NONE',\n voltage: 'VOLTAGE_NONE',\n light: 'LIGHT_NONE',\n specials: 'SPECIALS_NONE',\n}\n\nexport const calculate = (context, event, actionMeta) => {\n let value = JSON.parse(JSON.stringify(actionMeta.state?.value || initialValues))\n if (event?.payload?.identifier) {\n value[event.payload.identifier] = event.type\n }\n const { type, channel, rocker, light, voltage, specials } = value\n let notPossible = false\n\n let formStatus = {}\n Object.keys(switchMachine.states).forEach(key => {\n formStatus[key] = {\n open: key === 'type' ? true : false,\n }\n\n if (key === 'type') {\n formStatus[key].elements = switchMachine.states.type.events.filter(key => {\n return [type, 'TYPE_NONE', 'WECHSELSCHALTER', 'AUSSCHALTER', 'KREUZSCHALTER'].find(id => id === key)\n })\n }\n })\n\n context = [\n {\n feature: '',\n filters: [\n {\n Id: 'EF000005', //Zusammenstellung\n Value: 'EV000078', //Basiselement\n },\n ],\n additionalFilters: [],\n },\n ]\n\n if (type === 'WECHSELSCHALTER') {\n let filter = {\n Id: 'EF002960', //Schaltungsart\n Value: ['EV000648', 'EV006530'], //EV000648 Wechselschalter oder EV006530\n }\n if (channel === 'SINGLE_KANAL') {\n filter = {\n Id: 'EF002960', //Schaltungsart\n Value: 'EV000648', //Wechselschalter\n }\n } else if (channel === 'DOUBLE_KANAL') {\n filter = {\n Id: 'EF002960', //Schaltungsart\n Value: 'EV006530',\n }\n } else if (channel === 'TRIPPLE_KANAL') {\n notPossible = true\n }\n\n if (!notPossible) {\n context[0].feature = 'EC001590' //Installationsschalter\n }\n context[0].filters.push(filter)\n } else if (type === 'AUSSCHALTER') {\n let filters = []\n if (channel === 'SINGLE_KANAL') {\n notPossible = true\n } else if (channel === 'DOUBLE_KANAL') {\n if (rocker === 'DOUBLE_ROCKER') {\n filters.push({\n Id: 'EF002960', //Schaltungsart\n Value: 'EV000943', //Serienschalter\n })\n } else if (rocker === 'SINGLE_ROCKER') {\n filters.push({\n Id: 'EF002960', //Schaltungsart\n Value: 'EV000500', //Schalter 2-polig\n })\n } else {\n filters.push({\n Id: 'EF002960', //Schaltungsart\n Value: 'EV000500', //Schalter 2-polig\n })\n }\n } else if (channel === 'TRIPPLE_KANAL') {\n filters.push({\n Id: 'EF002960', //Schaltungsart\n Value: 'EV006374', //Schalter 3-polig\n })\n } else if (channel === 'CHANNEL_NONE') {\n filters.push({\n Id: 'EF002960', //Schaltungsart\n //EV000943 Serienschalter\n //EV000500 Schalter 2-polig\n //EV006374 Schalter 3-polig\n Value: ['EV000943', 'EV000500', 'EV006374'],\n })\n }\n if (!notPossible) {\n context[0].feature = 'EC001590' //Installationsschalter\n }\n context[0].filters = context[0].filters.concat(filters)\n } else if (type === 'KREUZSCHALTER') {\n if (channel === 'DOUBLE_KANAL' || channel === 'TRIPPLE_KANAL') {\n notPossible = true\n }\n\n if (!notPossible) {\n context[0].feature = 'EC001590' //Installationsschalter\n }\n context[0].filters.push({\n Id: 'EF002960', //Schaltungsart\n Value: 'EV006435', //Kreuzschalter\n })\n } else if (type === 'DREI_STUFEN_MIT_NULLSTELLUNG') {\n if (channel === 'SINGLE_KANAL' || channel === 'DOUBLE_KANAL' || channel === 'TRIPPLE_KANAL') {\n notPossible = true\n }\n\n if (!notPossible) {\n context[0].feature = 'EC001036' //Dreistufen-Schalter\n }\n context[0].filters.push({\n Id: 'EF000006', //Bedienungsart\n Value: 'EV000092', //Drehknopf\n })\n context[0].additionalFilters.push('mit_nullstellung')\n } else if (type === 'KOMFORTSCHALTER') {\n if (channel === 'SINGLE_KANAL' || channel === 'DOUBLE_KANAL' || channel === 'TRIPPLE_KANAL') {\n notPossible = true\n }\n\n if (!notPossible) {\n context[0].feature = ['EC001588'] //Elektronischer Schalter\n }\n //Entfernung der Zusammenstellung aus den Filtern\n context[0].filters = context[0].filters.filter(el => el.Id !== 'EF000005')\n } else if (type === 'DREI_STUFEN_OHNE_NULLSTELLUNG') {\n if (channel === 'SINGLE_KANAL' || channel === 'DOUBLE_KANAL' || channel === 'TRIPPLE_KANAL') {\n notPossible = true\n }\n\n if (!notPossible) {\n context[0].feature = 'EC001036' //Dreistufen-Schalter\n }\n context[0].filters.push({\n Id: 'EF000006', //Bedienungsart\n Value: 'EV000092', //Drehknopf\n })\n context[0].additionalFilters.push('ohne_nullstellung')\n } else if (type === 'JALOUSIESCHALTER') {\n if (channel === 'TRIPPLE_KANAL') {\n notPossible = true\n }\n\n if (!notPossible) {\n context[0].feature = 'EC000044' //Jalousieschalter/-taster\n }\n context[0].filters.push({\n Id: 'EF000006', //Bedienungsart\n Value: 'EV000200', //Wippe\n })\n context[0].additionalFilters.push('schalter')\n } else if (type === 'JALOUSIESCHALTER_DREHKNOPF') {\n if (channel === 'TRIPPLE_KANAL') {\n notPossible = true\n }\n\n if (!notPossible) {\n context[0].feature = 'EC000044' //Jalousieschalter/-taster\n }\n context[0].filters.push({\n Id: 'EF000006', //Bedienungsart\n Value: 'EV000092', //Drehknopf\n })\n context[0].additionalFilters.push('schalter')\n } else if (type === 'PROFILHALBZYLINDER_SCHALTER') {\n if (channel === 'TRIPPLE_KANAL') {\n notPossible = true\n }\n\n if (!notPossible) {\n context[0].feature = 'EC000044' //Jalousieschalter/-taster\n }\n context[0].filters.push({\n Id: 'EF000006', //Bedienungsart\n Value: 'EV000175', //Schlüssel\n })\n context[0].additionalFilters.push('schalter')\n } else if (type === 'SCHLIESSER') {\n if (channel === 'TRIPPLE_KANAL') {\n notPossible = true\n }\n\n if (!notPossible) {\n context[0].feature = 'EC000029' //Taster\n context[0].filters.push({\n Id: 'EF000006', //Bedienungsart\n Value: ['EV000407', 'EV000239'], //EV000407 Druckknopf oder EV000239 Zugschnur\n })\n context[0].filters.push({\n Id: 'EF008256', //Anzahl der Kontakte als Schließer\n Value: ['1', '2'],\n })\n }\n } else if (type === 'OEFFNENTASTER') {\n if (channel === 'TRIPPLE_KANAL') {\n notPossible = true\n }\n\n if (!notPossible) {\n context[0].feature = 'EC000029' //Taster\n context[0].filters.push({\n Id: 'EF000006', //Bedienungsart\n Value: ['EV000407', 'EV000239'], //EV000407 Druckknopf oder EV000239 Zugschnur\n })\n context[0].filters.push({\n Id: 'EF008255', //Anzahl der Kontakte als Öffner\n Value: ['1', '2'],\n })\n }\n } else if (type === 'ZUGTASTER') {\n if (channel === 'DOUBLE_KANAL' || channel === 'TRIPPLE_KANAL') {\n notPossible = true\n }\n\n if (!notPossible) {\n context[0].feature = 'EC000029' //Taster\n context[0].filters.push({\n Id: 'EF000006', //Bedienungsart\n Value: ['EV000239'], //Zugschnur\n })\n }\n } else if (type === 'WECHSELTASTER') {\n if (channel === 'TRIPPLE_KANAL') {\n notPossible = true\n }\n\n if (!notPossible) {\n context[0].feature = 'EC000029' //Taster\n context[0].filters.push({\n Id: 'EF000006', //Bedienungsart\n Value: ['EV000407', 'EV000239'], //EV000407 Druckknopf oder EV000239 Zugschnur\n })\n context[0].filters.push({\n Id: 'EF008257', //Anzahl der Kontakte als Wechsler\n Value: ['1', '2'],\n })\n }\n } else if (type === 'JALOUSIETASTER') {\n if (channel === 'TRIPPLE_KANAL') {\n notPossible = true\n }\n\n if (!notPossible) {\n context[0].feature = 'EC000044' //Jalousieschalter/-taster\n }\n context[0].filters.push({\n Id: 'EF000006', //Bedienungsart\n Value: 'EV000200', //Wippe\n })\n context[0].additionalFilters.push('taster')\n } else if (type === 'JALOUSIETASTER_DREHTASTER') {\n if (channel === 'TRIPPLE_KANAL') {\n notPossible = true\n }\n\n if (!notPossible) {\n context[0].feature = 'EC000044' //Jalousieschalter/-taster\n }\n context[0].filters.push({\n Id: 'EF000006', //Bedienungsart\n Value: 'EV000175', //Schlüssel\n })\n context[0].additionalFilters.push('taster')\n } else if (type === 'PROFILHALBZYLINDER_TASTER') {\n if (channel === 'TRIPPLE_KANAL') {\n notPossible = true\n }\n\n if (!notPossible) {\n context[0].feature = 'EC000044' //Jalousieschalter/-taster\n }\n context[0].filters.push({\n Id: 'EF000006', //Bedienungsart\n Value: 'EV000175', //Schlüssel\n })\n context[0].additionalFilters.push('taster')\n }\n\n if (rocker === 'SINGLE_ROCKER') {\n context[0].filters.push({\n Id: 'EF003816', //Anzahl der Betätigungswippen\n Value: '1',\n })\n } else if (rocker === 'DOUBLE_ROCKER') {\n context[0].filters.push({\n Id: 'EF003816', //Anzahl der Betätigungswippen\n Value: '2',\n })\n }\n\n if (voltage === 'VOLTAGE_TEN_A') {\n context[0].filters.push({\n Id: 'EF000227', //Bemessungsstrom\n Value: '10',\n })\n } else if (voltage === 'VOLTAGE_TEN_AX') {\n context[0].filters.push({\n Id: 'EF003888', //Schaltstrom für Leuchtstofflampen\n Value: '10',\n })\n } else if (voltage === 'VOLTAGE_SIXTEEN_A') {\n context[0].filters.push({\n Id: 'EF000227', //Bemessungsstrom\n Value: '16',\n })\n } else if (voltage === 'VOLTAGE_SIXTEEN_AX') {\n context[0].filters.push({\n Id: 'EF003888', //Schaltstrom für Leuchtstofflampen\n Value: '16',\n })\n }\n\n if (light === 'KONTROLLLEUCHTE') {\n context[0].filters.push({\n Id: 'EF000134', //Beleuchtung\n Value: 'EV004711', //ja\n })\n context[0].filters.push({\n Id: 'EF009420', //Beleuchtungsfunktion\n Value: 'EV011600',\n })\n } else if (light === 'OERIENTIERUNGSLICHT') {\n context[0].filters.push({\n Id: 'EF000134', //Beleuchtung\n Value: 'EV004711', //ja\n })\n context[0].filters.push({\n Id: 'EF009420', //Beleuchtungsfunktion\n Value: ['EV011600', 'EV006466'], //EV011600 Kontrolle und Orientierung oder EV006466 Orientierung\n })\n } else if (light === 'N_KLEMME') {\n context[0].additionalFilters.push('n_klemme')\n } else if (light === 'SEP_KLEMME') {\n context[0].additionalFilters.push('sep_klemme')\n }\n\n if (specials === 'SEP_EINSPEISUNG') {\n context[0].additionalFilters.push('sep_einspeisung')\n }\n\n return {\n descriptions: context,\n formStatus,\n }\n}\n\nexport const switchMachine = Machine(\n {\n id: 'switch',\n type: 'parallel',\n context: {},\n states: {\n type: {\n initial: initialValues.type,\n on: {\n //TYPE_NONE: 'type.TYPE_NONE',\n WECHSELSCHALTER: 'type.WECHSELSCHALTER',\n AUSSCHALTER: 'type.AUSSCHALTER',\n KREUZSCHALTER: 'type.KREUZSCHALTER',\n DREI_STUFEN_MIT_NULLSTELLUNG: 'type.DREI_STUFEN_MIT_NULLSTELLUNG',\n KOMFORTSCHALTER: 'type.KOMFORTSCHALTER',\n DREI_STUFEN_OHNE_NULLSTELLUNG: 'type.DREI_STUFEN_OHNE_NULLSTELLUNG',\n JALOUSIESCHALTER: 'type.JALOUSIESCHALTER',\n JALOUSIESCHALTER_DREHKNOPF: 'type.JALOUSIESCHALTER_DREHKNOPF',\n PROFILHALBZYLINDER_SCHALTER: 'type.PROFILHALBZYLINDER_SCHALTER',\n SCHLIESSER: 'type.SCHLIESSER',\n OEFFNENTASTER: 'type.OEFFNENTASTER',\n ZUGTASTER: 'type.ZUGTASTER',\n WECHSELTASTER: 'type.WECHSELTASTER',\n JALOUSIETASTER: 'type.JALOUSIETASTER',\n JALOUSIETASTER_DREHTASTER: 'type.JALOUSIETASTER_DREHTASTER',\n PROFILHALBZYLINDER_TASTER: 'type.PROFILHALBZYLINDER_TASTER',\n },\n states: {\n /*TYPE_NONE: {\n entry: ['calculate'],\n },*/\n WECHSELSCHALTER: {\n entry: ['calculate'],\n },\n AUSSCHALTER: {\n entry: ['calculate'],\n },\n KREUZSCHALTER: {\n entry: ['calculate'],\n },\n DREI_STUFEN_MIT_NULLSTELLUNG: {\n entry: ['calculate'],\n },\n KOMFORTSCHALTER: {\n entry: ['calculate'],\n },\n DREI_STUFEN_OHNE_NULLSTELLUNG: {\n entry: ['calculate'],\n },\n JALOUSIESCHALTER: {\n entry: ['calculate'],\n },\n JALOUSIESCHALTER_DREHKNOPF: {\n entry: ['calculate'],\n },\n PROFILHALBZYLINDER_SCHALTER: {\n entry: ['calculate'],\n },\n OEFFNENTASTER: {\n entry: ['calculate'],\n },\n ZUGTASTER: {\n entry: ['calculate'],\n },\n SCHLIESSER: {\n entry: ['calculate'],\n },\n WECHSELTASTER: {\n entry: ['calculate'],\n },\n JALOUSIETASTER: {\n entry: ['calculate'],\n },\n JALOUSIETASTER_DREHTASTER: {\n entry: ['calculate'],\n },\n PROFILHALBZYLINDER_TASTER: {\n entry: ['calculate'],\n },\n },\n },\n channel: {\n initial: initialValues.channel,\n on: {\n CHANNEL_NONE: 'channel.CHANNEL_NONE',\n SINGLE_KANAL: 'channel.SINGLE_KANAL',\n DOUBLE_KANAL: 'channel.DOUBLE_KANAL',\n TRIPPLE_KANAL: 'channel.TRIPPLE_KANAL',\n },\n states: {\n CHANNEL_NONE: {\n entry: ['calculate'],\n },\n SINGLE_KANAL: {\n entry: ['calculate'],\n },\n DOUBLE_KANAL: {\n entry: ['calculate'],\n },\n TRIPPLE_KANAL: {\n entry: ['calculate'],\n },\n },\n },\n rocker: {\n initial: 'ROCKER_NONE',\n on: {\n ROCKER_NONE: 'rocker.ROCKER_NONE',\n SINGLE_ROCKER: 'rocker.SINGLE_ROCKER',\n DOUBLE_ROCKER: 'rocker.DOUBLE_ROCKER',\n },\n states: {\n ROCKER_NONE: {\n entry: ['calculate'],\n },\n SINGLE_ROCKER: {\n entry: ['calculate'],\n },\n DOUBLE_ROCKER: {\n entry: ['calculate'],\n },\n },\n },\n voltage: {\n initial: initialValues.voltage,\n on: {\n VOLTAGE_NONE: 'voltage.VOLTAGE_NONE',\n VOLTAGE_TEN_A: 'voltage.VOLTAGE_TEN_A',\n VOLTAGE_TEN_AX: 'voltage.VOLTAGE_TEN_AX',\n VOLTAGE_SIXTEEN_A: 'voltage.VOLTAGE_SIXTEEN_A',\n VOLTAGE_SIXTEEN_AX: 'voltage.VOLTAGE_SIXTEEN_AX',\n },\n states: {\n VOLTAGE_NONE: {\n entry: ['calculate'],\n },\n VOLTAGE_TEN_A: {\n entry: ['calculate'],\n },\n VOLTAGE_TEN_AX: {\n entry: ['calculate'],\n },\n VOLTAGE_SIXTEEN_A: {\n entry: ['calculate'],\n },\n VOLTAGE_SIXTEEN_AX: {\n entry: ['calculate'],\n },\n },\n },\n light: {\n initial: initialValues.light,\n on: {\n LIGHT_NONE: 'light.LIGHT_NONE',\n KONTROLLLEUCHTE: 'light.KONTROLLLEUCHTE',\n N_KLEMME: 'light.N_KLEMME',\n SEP_KLEMME: 'light.SEP_KLEMME',\n OERIENTIERUNGSLICHT: 'light.OERIENTIERUNGSLICHT',\n },\n states: {\n LIGHT_NONE: {\n entry: ['calculate'],\n },\n KONTROLLLEUCHTE: {\n entry: ['calculate'],\n },\n N_KLEMME: {\n entry: ['calculate'],\n },\n SEP_KLEMME: {\n entry: ['calculate'],\n },\n OERIENTIERUNGSLICHT: {\n entry: ['calculate'],\n },\n },\n },\n specials: {\n initial: initialValues.specials,\n on: {\n SPECIALS_NONE: 'specials.SPECIALS_NONE',\n SEPERATE_EINSPEISUNG: 'specials.SEPERATE_EINSPEISUNG',\n },\n states: {\n SPECIALS_NONE: {\n entry: ['calculate'],\n },\n SEPERATE_EINSPEISUNG: {\n entry: ['calculate'],\n },\n },\n },\n },\n },\n {\n actions: {\n calculate: assign(calculate),\n },\n }\n)\n\nexport const possibleSwitchClasses = {\n //EC000029 Taster\n //EC000044 Jalousieschalter/-taster\n //EC001036 Dreistufen-Schalter\n //EC001588 Elektronischer Schalter\n //EC001590 Installationsschalter\n classes: ['EC000029', 'EC000044', 'EC001036', 'EC001588', 'EC001590'],\n types: {\n 'WECHSELSCHALTER': switchMachine.initialState?.context?.descriptions,\n 'AUSSCHALTER': switchMachine.transition(switchMachine.initialState, { type: 'AUSSCHALTER', payload: { identifier: 'type'}})?.context?.descriptions,\n 'KREUZSCHALTER': switchMachine.transition(switchMachine.initialState, { type: 'KREUZSCHALTER', payload: { identifier: 'type'}})?.context?.descriptions,\n 'DREI_STUFEN_MIT_NULLSTELLUNG': switchMachine.transition(switchMachine.initialState, { type: 'DREI_STUFEN_MIT_NULLSTELLUNG', payload: { identifier: 'type'}})?.context?.descriptions,\n 'KOMFORTSCHALTER': switchMachine.transition(switchMachine.initialState, { type: 'KOMFORTSCHALTER', payload: { identifier: 'type'}})?.context?.descriptions,\n 'DREI_STUFEN_OHNE_NULLSTELLUNG': switchMachine.transition(switchMachine.initialState, { type: 'DREI_STUFEN_OHNE_NULLSTELLUNG', payload: { identifier: 'type'}})?.context?.descriptions,\n 'JALOUSIESCHALTER': switchMachine.transition(switchMachine.initialState, { type: 'JALOUSIESCHALTER', payload: { identifier: 'type'}})?.context?.descriptions,\n 'JALOUSIETASTER_DREHTASTER': switchMachine.transition(switchMachine.initialState, { type: 'JALOUSIETASTER_DREHTASTER', payload: { identifier: 'type'}})?.context?.descriptions,\n 'PROFILHALBZYLINDER_TASTER': switchMachine.transition(switchMachine.initialState, { type: 'PROFILHALBZYLINDER_TASTER', payload: { identifier: 'type'}})?.context?.descriptions,\n }\n}\n\nexport default switchMachine\n","import { createSlice } from '@reduxjs/toolkit'\n\nexport const initialState = {\n isSet: false,\n hookurl: null,\n version: null,\n country: null,\n language: null,\n supplierId: 4011395000007,\n}\n\nconst elbridgeSlice = createSlice({\n name: 'elbridge',\n initialState,\n reducers: {\n setElbridge(state, action) {\n state.isSet = action.payload.isSet\n state.hookurl = action.payload.hookurl\n state.version = action.payload.version\n state.country = action.payload.country\n state.language = action.payload.language\n },\n disableEldbridge(state, action) {\n state.isSet = initialState.isSet\n state.hookurl = initialState.hookurl\n state.version = initialState.version\n state.country = initialState.country\n state.language = initialState.language\n },\n },\n})\n\nexport const {\n setElbridge,\n disableEldbridge\n} = elbridgeSlice.actions\nexport default elbridgeSlice.reducer\n\nexport const getElbridge = state => state.elbridge\n","import { useState, useEffect, useRef} from 'react';\nimport {createSelectorCreator, defaultMemoize} from 'reselect'\nimport isEqual from 'lodash/isEqual'\n\n//eslint-disable-next-line no-extend-native\nString.prototype.capitalize = function() {\n return this.charAt(0).toUpperCase() + this.slice(1)\n}\n\nexport const createDeepEqualSelector = createSelectorCreator(defaultMemoize, isEqual)\n\nexport const createByteLengthEqualSelector = createSelectorCreator(defaultMemoize, (a, b) => {\n if (a?.byteLength && b?.byteLength) {\n return a.byteLength === b.byteLength\n } else {\n return a === b\n }\n})\n\nexport const useDebounce = (value, delay) => {\n const [debouncedValue, setDebouncedValue] = useState(value);\n useEffect(\n () => {\n const handler = setTimeout(() => {\n setDebouncedValue(value);\n }, delay);\n \n return () => {\n clearTimeout(handler);\n };\n },\n [value, delay]\n );\n \n return debouncedValue;\n}\n\nexport const usePrevious = (value) => {\n const ref = useRef();\n useEffect(() => {\n ref.current = value;\n });\n return ref.current;\n}\n\nexport const capitalize = s => {\n if (typeof s !== 'string') return ''\n return s.charAt(0).toUpperCase() + s.slice(1)\n}","import { combineReducers } from 'redux';\nimport {enableBatching} from 'redux-batched-actions';\nimport availableDevices from '../components/availableDevices/duck'\nimport elbridge from '../components/elbridge/duck'\nimport entities from '../components/entities/duck'\nimport favorites from '../components/favorites/duck'\nimport projects from '../components/projects/duck'\n\nconst RESET_APP = 'raumplaner/rootReducer/RESET_APP';\n\nconst reducers = {\n availableDevices,\n elbridge,\n entities,\n favorites,\n projects,\n};\n\nconst appReducer = combineReducers({\n ...reducers,\n});\n\nconst rootReducer = (state, action) => {\n if(action.type === RESET_APP) {\n state = undefined;\n }\n\n return appReducer(state, action);\n};\n\nexport const resetApp = () => {\n return {\n type: RESET_APP,\n }\n}\n\nexport default enableBatching(rootReducer);\n","import v4 from 'node-uuid'\nimport omit from 'lodash/omit'\nimport { batchActions } from 'redux-batched-actions'\nimport { getEntityResolved } from '../duck'\nimport { generateDeleteSequence } from '../helpers/index'\nimport { referenceDeviceWithOperationPoint, referenceFrameWithOperationPoint } from '../operationPoint/duck'\n\n// Actions\n//\nexport const ADD_DEVICE = 'raumplaner/entities/DEVICE/ADD'\nexport const CLONE_DEVICE = 'raumplaner/entities/DEVICE/CLONE'\nexport const REMOVE_DEVICE = 'raumplaner/entities/DEVICE/REMOVE'\nexport const CHANGE_DEVICE = 'raumplaner/entities/DEVICE/CHANGE'\nexport const CHANGE_QUANTITY = 'raumplaner/entities/DEVICE/QUANTITY'\nexport const CHANGE_ON_PIECELIST = 'raumplaner/entities/DEVICE/PIECELIST'\n\n// Reducer\n//\nexport const initialState = {\n type: 'device',\n id: null,\n availableDeviceId: null,\n quantity: 0,\n devices: [],\n onPiecelist: true,\n position: 'full'\n}\n\nfunction deviceReducer(state = initialState, action) {\n switch (action.type) {\n case CLONE_DEVICE:\n return {\n ...state,\n id: action.deviceId,\n devices: [],\n parent: action.parentId,\n }\n case ADD_DEVICE:\n return {\n ...state,\n id: action.deviceId,\n parent: action.parentEntityId,\n availableDeviceId: action.availableDeviceId,\n quantity: 1,\n type: action.deviceType,\n onPiecelist: action.onPiecelist,\n position: action.position\n }\n case CHANGE_QUANTITY:\n return {\n ...state,\n quantity: action.quantity,\n }\n case CHANGE_DEVICE:\n return {\n ...state,\n availableDeviceId: action.availableDeviceId,\n }\n case CHANGE_ON_PIECELIST:\n return {\n ...state,\n onPiecelist: action.onPiecelist,\n }\n default:\n return state\n }\n}\n\nexport default function deviceListReducer(\n state = { byId: {}, allIds: [] },\n action\n) {\n let allIdIndex\n switch (action.type) {\n case CLONE_DEVICE: {\n return {\n ...state,\n byId: {\n ...state.byId,\n [action.deviceId]: deviceReducer(\n state.byId[action.originDeviceId],\n action\n ),\n },\n allIds: [...state.allIds, action.deviceId],\n }\n }\n case ADD_DEVICE: {\n return {\n ...state,\n byId: {\n ...state.byId,\n [action.deviceId]: deviceReducer(\n state.byId[action.deviceId],\n action\n ),\n },\n allIds: [...state.allIds, action.deviceId],\n }\n }\n case REMOVE_DEVICE: {\n allIdIndex = state.allIds.indexOf(action.deviceId)\n return {\n byId: omit(state.byId, [action.deviceId]),\n allIds: [\n ...state.allIds.slice(0, allIdIndex),\n ...state.allIds.slice(allIdIndex + 1),\n ],\n }\n }\n case CHANGE_ON_PIECELIST:\n case CHANGE_QUANTITY:\n case CHANGE_DEVICE:\n return {\n ...state,\n byId: {\n ...state.byId,\n [action.id]: deviceReducer(state.byId[action.id], action),\n },\n }\n default: {\n return state\n }\n }\n}\n\n// Action Creators\n//\nexport const addDevice = (\n availableDeviceId,\n parentEntityId,\n deviceId = v4(),\n deviceType = 'device',\n onPiecelist = true,\n position = initialState.position\n) => {\n return {\n type: ADD_DEVICE,\n availableDeviceId,\n parentEntityId,\n deviceId,\n deviceType,\n onPiecelist,\n position\n }\n}\n\nexport const addDeviceToOperationPoint = (\n availableDeviceId,\n opId,\n deviceId = v4(),\n deviceType = 'device',\n onPiecelist = true,\n position = initialState.position\n) => {\n return batchActions([\n addDevice(availableDeviceId, opId, deviceId, deviceType, onPiecelist, position),\n referenceDeviceWithOperationPoint(opId, deviceId),\n ])\n}\n\nexport const addFrameToOpertaionPoint = (availableDeviceId, opId, deviceId = v4(), onPiecelist = true) => {\n return batchActions([\n addDevice(availableDeviceId, opId, deviceId, 'frame', onPiecelist, initialState.position),\n referenceFrameWithOperationPoint(opId, deviceId),\n ])\n}\n\nexport const deleteDevice = deviceId => {\n return {\n type: REMOVE_DEVICE,\n deviceId,\n }\n}\n\nexport const removeDevice = device => {\n return (dispatch, getState) => {\n if (!device.hasOwnProperty('id')) {\n device = getEntityResolved(getState(), device)\n }\n if (!device.parent.hasOwnProperty('id')) {\n device = getEntityResolved(getState(), device.id)\n }\n return dispatch(generateDeleteSequence(getState(), device, 0))\n }\n}\n\nexport const copyDevice = (parentId, originDeviceId, deviceId = v4()) => {\n return {\n type: CLONE_DEVICE,\n parentId,\n originDeviceId,\n deviceId,\n }\n}\nexport const cloneRoomDevice = (parentId, originDeviceId, deviceId = v4()) => {\n return batchActions([\n copyDevice(parentId, originDeviceId, deviceId),\n referenceDeviceWithOperationPoint(parentId, deviceId),\n ])\n}\n\nexport const changeQuantity = (deviceId, quantity) => {\n return {\n type: CHANGE_QUANTITY,\n id: deviceId,\n quantity: parseInt(quantity),\n }\n}\n\nexport const changeDevice = (deviceId, availableDeviceId) => {\n return {\n type: CHANGE_DEVICE,\n id: deviceId,\n availableDeviceId,\n }\n}\n\nexport const changeOnPiecelist = (deviceId, onPiecelist) => {\n return {\n type: CHANGE_ON_PIECELIST,\n id: deviceId,\n onPiecelist: onPiecelist,\n }\n}\n\nexport const noDevice = [\n 'Ankaro',\n 'Hirschmann'\n]","import {v4} from 'node-uuid'\nimport {batchActions} from 'redux-batched-actions'\nimport omit from 'lodash/omit'\nimport { createSlice } from '@reduxjs/toolkit'\nimport {createSelector} from 'reselect'\nimport {clearEntities, setEntities} from '../entities/duck'\nimport {createBuilding} from '../entities/building/duck'\nimport {createFloor} from '../entities/floor/duck'\nimport {createRoom} from '../entities/room/duck'\nimport { migration } from '../../vendor/migration'\n\nexport const FETCH_PROJECTS_REQUEST = 'raumplaner/projects/REQUEST'\nexport const FETCH_PROJECTS_FAILURE = 'raumplaner/projects/FAILURE'\nexport const FETCH_PROJECTS_RECEIVE = 'raumplaner/projects/RECEIVE'\n\nexport const CREATE_PROJECT = 'raumplaner/projects/CREATE_PROJECT'\nexport const SET_PROJECT_EDIT = 'raumplaner/projects/SET_EDIT'\nexport const SET_PROJECT_TYPE = 'raumplaner/projects/SET_PROJECT_TYPE'\nexport const SET_PROJECT_PREFERENCES = 'raumplaner/projects/SET_PROJECT_PREFERENCES'\nexport const SET_PROJECT_DEVICETYPE = 'raumplaner/projects/SET_PROJECT_DEVICETYPE'\nexport const SET_PROJECT_SERIE = 'raumplaner/projects/SET_PROJECT_SERIE'\nexport const SET_CPLATE_COLOR = 'raumplaner/projects/SET_CPLATE_COLOR'\nexport const SET_FRAME_COLOR = 'raumplaner/projects/SET_FRAME_COLOR'\nexport const SET_ROOM_FLOOR_PLANNING = 'raumplaner/projects/SET_ROOM_FLOOR_PLANNING'\n\n\n\nexport const initialState = {\n ID: null,\n data: {},\n}\n\nconst projectsSlice = createSlice({\n name: 'projects',\n initialState,\n reducers: {\n addProject(state, action) {\n state.ID = action.payload.id\n state.data = {\n ...initialState.data,\n rootEntityId: action.payload.rootEntityId,\n }\n },\n addExistingProject(state, action) {\n state.ID = action.payload.ID\n state.data = {\n ...action.payload.data,\n }\n },\n setProjectPreferences(state, action) {\n state.data = {\n ...state.data,\n ...action.payload.projectPreferences,\n }\n },\n setProjectDeviceType(state, action) {\n state.data = {\n ...state.data,\n deviceType: action.payload,\n }\n },\n setProjectSerie(state, action) {\n state.data.serie = action.payload.serie\n },\n setProjectCplateColor(state, action) {\n state.data.cplateColor = action.payload.cplateColor\n },\n setProjectFrameColor(state, action) {\n state.data.frameColor = action.payload.frameColor\n },\n setRoomFloorPlanning(state) {\n state.data.roomFloorPlanning = true\n },\n setProjectId(state, action) {\n state.ID = action.payload.ID\n }\n },\n})\n\nexport const {\n addProject,\n addExistingProject,\n setProjectPreferences,\n setProjectDeviceType,\n setProjectSerie,\n setProjectCplateColor,\n setProjectFrameColor,\n setRoomFloorPlanning,\n setProjectId\n} = projectsSlice.actions\nexport default projectsSlice.reducer\n\n\nexport const createProject = (id = 'local') => {\n return (dispatch) => {\n let rootEntityId = v4()\n let floorId = v4()\n let roomId = v4()\n \n dispatch(batchActions([\n clearEntities(),\n createBuilding(rootEntityId),\n createFloor(rootEntityId, floorId),\n createRoom(floorId, roomId),\n addProject({id, rootEntityId}),\n ]))\n }\n}\n\nexport const loadProject = project => {\n return (dispatch, getState) => {\n const state = getState()\n const data = JSON.parse(project.data)\n const projectToLoad = {\n ID: project.ID,\n data: {\n ...omit(data, ['entities']),\n },\n }\n\n const newState = migration({\n ...state,\n projects: projectToLoad,\n entities: { allIds: Object.keys(data.entities), byId: data.entities },\n })\n dispatch(batchActions([addExistingProject(projectToLoad), setEntities(newState.entities.byId)]))\n }\n}\n\nexport const getEditableProject = state => state.projects\nexport const getEditProject = state => state.projects.ID\nexport const getProjectDeviceType = state => state.projects?.data?.deviceType || 'conventional'\n\nexport const getDesignInformationFromProject = createSelector(\n [getEditableProject],\n (project) => {\n return {\n frameRangeId: project.data.serie,\n frameColorId: project.data.frameColor,\n switchColorId: project.data.cplateColor,\n touchProtection: project.data.touchProtection,\n dataSockets: project.data.dataSockets,\n satSockets: project.data.satSockets,\n deviceType: project.data.deviceType\n }\n }\n)\n\nexport const getIsRoomFloorPlanning = createSelector([getEditableProject], project => project.data.roomFloorPlanning)\n\nexport const defaultDeviceType = \"conventional\"","import { getParentDesignRange } from '../components/entities/duck'\nimport { initialState as operationPointState } from '../components/entities/operationPoint/duck'\nimport { initialState as deviceState } from '../components/entities/device/duck'\n\nexport const migration = currentState => {\n if (currentState) {\n let entities = currentState.entities.byId\n\n if (entities) {\n Object.keys(entities).forEach(key => {\n let entity = JSON.parse(JSON.stringify(entities[key]))\n if (entity.type === 'device' || entity.type === 'frame' || entity.type === 'cplate') {\n entity = { ...deviceState, ...entity }\n }\n if (entity.type === 'operationPoint') {\n entity = { ...operationPointState, ...entity }\n }\n\n if (['floor', 'room', 'operationPoint'].includes(entity.type)) {\n if (!entity.config) {\n entity.config = []\n }\n\n if (!entity.config.find(el => el.type === 'serie')\n || !entity.config.find(el => el.type === 'frameColor')\n || !entity.config.find(el => el.type === 'cplateColor')\n ) {\n const parentDesignRange = getParentDesignRange(currentState, entity.id)\n if (!entity.config.find(el => el.type === 'serie')) {\n entity.config.push({ type: 'serie', value: parentDesignRange.serie})\n }\n\n if (!entity.config.find(el => el.type === 'frameColor')) {\n entity.config.push({ type: 'frameColor', value: parentDesignRange.frameColor})\n }\n \n if (!entity.config.find(el => el.type === 'cplateColor')) {\n entity.config.push({ type: 'cplateColor', value: parentDesignRange.cplateColor})\n }\n }\n }\n\n entities[key] = entity\n })\n currentState.entities.byId = entities\n }\n }\n\n return currentState\n}\n","import v4 from 'node-uuid'\nimport { batchActions } from 'redux-batched-actions'\nimport {\n getAdditionalData,\n getCplateMapping,\n getDeviceList,\n getFrameMapping,\n getDesignChangeSpecialties,\n} from '../../availableDevices/duck'\nimport { getEditableProject, setProjectCplateColor, setProjectFrameColor, setProjectSerie } from '../../projects/duck'\nimport { addDevice, deleteDevice } from '../device/duck'\nimport { getEntity, getEntityResolved, getOperationPointsFromEntity, getParentDesignRange, setConfigValue } from '../duck'\nimport {\n dereferenceDeviceWithOperationPoint,\n dereferenceFrameWithOperationPoint,\n getOrientation,\n referenceDeviceWithOperationPoint,\n referenceFrameWithOperationPoint,\n removeOperationPoint,\n} from '../operationPoint/duck'\nimport { calculateFrame } from '../../../logic/calculateFrame'\nimport { calculateDeviceForCPlate } from '../../../logic/calculateDeviceForCplate'\nimport { createSelector } from 'reselect'\nimport { calculatePossibleDevice } from '../../../logic/calculatePossibleDevice'\nimport { generateDeleteSequence } from '.'\n\nexport const calculateChangeDesignRange = createSelector(\n [args => args.state, args => args.serieId, args => args.frameColorId, args => args.cPlateColorId, args => args.entityId, args => getDesignChangeSpecialties(args.state)],\n (state, serieId, frameColorId, cPlateColorId, entityId, designChangeSpecialties) => {\n const project = getEditableProject(state)\n const deviceList = getDeviceList(state)\n const cPlateMapping = getCplateMapping(state)\n const frameMapping = getFrameMapping(state)\n const additionalData = getAdditionalData(state)\n const operationPoints = getOperationPointsFromEntity(state, entityId ? entityId : project.data.rootEntityId)\n const currentDesignRange = getParentDesignRange(state, entityId ? entityId : project.data.rootEntityId)\n const entityResolved = getEntityResolved(state, entityId ? entityId : project.data.rootEntityId)\n \n return new Promise((resolve, reject) => {\n calculateActionsForDesignRangeChange(\n state,\n project,\n deviceList,\n cPlateMapping,\n frameMapping,\n additionalData,\n operationPoints,\n serieId,\n frameColorId,\n cPlateColorId,\n entityResolved,\n currentDesignRange,\n designChangeSpecialties\n ).then(data => resolve(data))\n })\n }\n)\n\nexport const calculateActionsForDesignRangeChange = (\n state,\n project,\n deviceList,\n cPlateMapping,\n frameMapping,\n additionalData,\n operationPoints,\n serieId,\n frameColorId,\n cPlateColorId,\n entity,\n currentDesignRange,\n designChangeSpecialties\n) => {\n return new Promise((resolve, reject) => {\n let error = false\n\n let changeFrame = false\n let changeDevice = false\n\n let affectedEntities = getAffectedEntities(entity)\n \n let actions = []\n \n if (currentDesignRange.serie !== serieId) {\n if (entity.type === 'building') {\n actions.push(setProjectSerie({ serie: serieId }))\n }\n affectedEntities.forEach(id => {\n actions.push(setConfigValue(id, {type: 'serie', value: serieId}))\n })\n changeFrame = true\n changeDevice = true\n }\n\n if (currentDesignRange.frameColor !== frameColorId) {\n if (entity.type === 'building') {\n actions.push(setProjectFrameColor({ frameColor: frameColorId }))\n }\n affectedEntities.forEach(id => {\n actions.push(setConfigValue(id, {type: 'frameColor', value: frameColorId}))\n })\n changeFrame = true\n }\n\n if (currentDesignRange.cplateColor !== cPlateColorId) {\n if (entity.type === 'building') {\n actions.push(setProjectCplateColor({ cplateColor: cPlateColorId }))\n }\n affectedEntities.forEach(id => {\n actions.push(setConfigValue(id, {type: 'cplateColor', value: cPlateColorId}))\n })\n changeDevice = true\n }\n\n let actionsKeep = JSON.parse(JSON.stringify(actions))\n\n if (changeFrame || changeDevice) {\n operationPoints.forEach(operationPoint => {\n let frameTypeId = 0\n let operationPointError = false\n let operationPointActions = []\n \n if (operationPoint.devices) {\n operationPoint.devices.forEach((device, index) => {\n if (device) {\n frameTypeId++\n \n if (changeDevice) {\n const oldCPlateMapping = cPlateMapping.find(\n el => el.serie === project.data.serie && el.colorId === project.data.cplateColor\n )\n const newCPlateMapping = cPlateMapping.find(\n el => el.serie === serieId && el.colorId === cPlateColorId\n )\n \n const availableDevice = deviceList.find(\n el => el.getSupplierpid() === device.availableDeviceId\n )\n \n if (oldCPlateMapping && newCPlateMapping && availableDevice) {\n let newArticleNumber = availableDevice\n .getManufacturertypedescr()\n .replace(\n `-${oldCPlateMapping.articleColor.toString()}`,\n `-${newCPlateMapping.articleColor.toString()}`\n )\n\n let newAvailableDevice = deviceList.find(\n el => el.getManufacturertypedescr() === newArticleNumber\n )\n \n if (!newAvailableDevice) {\n const foundReplace = designChangeSpecialties.find(el => newArticleNumber.includes(el.string))\n if (foundReplace) {\n newArticleNumber = newArticleNumber.replace(\n `${foundReplace.string}`,\n `${foundReplace.replace}`\n )\n }\n\n newAvailableDevice = deviceList.find(\n el => el.getManufacturertypedescr() === newArticleNumber\n )\n\n }\n\n if (newAvailableDevice) {\n if (newAvailableDevice.getSupplierpid() !== device.availableDeviceId) {\n operationPointActions.push(deleteDevice(device.id))\n operationPointActions.push(\n dereferenceDeviceWithOperationPoint(operationPoint.id, device.id)\n )\n const deviceId = v4()\n operationPointActions.push(\n addDevice(\n newAvailableDevice.getSupplierpid(),\n operationPoint.id,\n deviceId,\n 'device'\n )\n )\n operationPointActions.push(referenceDeviceWithOperationPoint(operationPoint.id, deviceId))\n }\n } else {\n const features = JSON.parse(availableDevice.getFeatures())\n if (features) {\n if (features[0]) {\n \n let filters = []\n const description = {\n feature: features[0].Id,\n manufacturerTypeDescr:\n '-' + newCPlateMapping.articleColor.toString(),\n filters: [],\n }\n\n const possibleDevices = calculatePossibleDevice(\n deviceList,\n [{ ...description, filters }],\n additionalData,\n serieId\n )\n\n let bestPossibleDevice = {}\n if (possibleDevices.length > 0) {\n let bestMatches = 0\n possibleDevices.forEach(pDev => {\n let matches = 0\n const pFeatures = JSON.parse(pDev.features)\n pFeatures[0].Feature.forEach(feature => {\n if (\n feature.Fname !== 'EF005474' && //Schutzart (IP)\n feature.Fname !== 'EF004293' && //Schlagfestigkeit\n feature.Fname !== 'EF002442' && //Befestigungsart\n feature.Fname !== 'EF000008' && //Breite\n feature.Fname !== 'EF000040' && //Höhe\n feature.Fname !== 'EF000049' && //Tiefe\n feature.Fname !== 'EF000846' && //Einbaubreite\n feature.Fname !== 'EF000332' && //Einbauhöhe\n feature.Fname !== 'EF009277' //Durchmesser Bohrung (Öffnung)\n ) {\n const matchedFeature = features[0].Feature.find(\n feat =>\n feat.Fname === feature.Fname &&\n feat.Fvalue === feature.Fvalue\n )\n if (matchedFeature) {\n matches++\n }\n }\n })\n if (matches > bestMatches) {\n bestPossibleDevice = pDev\n bestMatches = matches\n }\n })\n }\n\n if (bestPossibleDevice?.supplierPid\n && bestPossibleDevice?.supplierPid !== device.availableDeviceId\n ) {\n operationPointActions.push(deleteDevice(device.id))\n operationPointActions.push(\n dereferenceDeviceWithOperationPoint(\n operationPoint.id,\n device.id\n )\n )\n const deviceId = v4()\n operationPointActions.push(\n addDevice(\n bestPossibleDevice.supplierPid,\n operationPoint.id,\n deviceId,\n 'device'\n )\n )\n operationPointActions.push(\n referenceDeviceWithOperationPoint(\n operationPoint.id,\n deviceId\n )\n )\n device.id = deviceId\n device.availableDeviceId = bestPossibleDevice.supplierPid\n } else {\n operationPointError = true\n }\n }\n }\n }\n }\n\n if (device?.devices?.length > 0) { \n device.devices.forEach(dev => {\n if (newCPlateMapping) {\n const originParentDevice = deviceList.find(\n el => el.getSupplierpid() === device.availableDeviceId\n )\n \n const originDevice = deviceList.find(\n el => el.getSupplierpid() === dev.availableDeviceId\n )\n \n if (originParentDevice && originDevice) {\n let newArticleNumber = originDevice\n .getManufacturertypedescr()\n .replace(\n `-${oldCPlateMapping.articleColor.toString()}`,\n `-${newCPlateMapping.articleColor.toString()}`\n )\n\n let newAvailableDevice = deviceList.find(el => {\n return el.getManufacturertypedescr() === newArticleNumber\n })\n\n if (newAvailableDevice) {\n newAvailableDevice = {\n supplierPid: newAvailableDevice.getSupplierpid()\n }\n }\n\n if (!newAvailableDevice) {\n const foundReplace = designChangeSpecialties.find(el => newArticleNumber.includes(el.string))\n if (foundReplace) {\n newArticleNumber = newArticleNumber.replace(\n `${foundReplace.string}`,\n `${foundReplace.replace}`\n )\n }\n\n newAvailableDevice = deviceList.find(\n el => el.getManufacturertypedescr() === newArticleNumber\n )\n\n if (newAvailableDevice) {\n newAvailableDevice = {\n supplierPid: newAvailableDevice.getSupplierpid()\n }\n }\n\n }\n\n if (!newAvailableDevice && dev.type === 'cplate') {\n const cPlates = calculateDeviceForCPlate(\n originParentDevice.getSupplierpid(),\n deviceList,\n JSON.parse(originParentDevice.getFeatures()),\n newCPlateMapping.articleColor,\n additionalData,\n device.devices\n .filter(device => device.type === 'device')\n .map(el => {\n return deviceList.find(el2 => el2.getSupplierpid() === el.availableDeviceId)?.getManufacturertypedescr()\n }).filter(el => el),\n dev.position,\n serieId\n )\n\n if (cPlates && cPlates.length > 0) {\n newAvailableDevice = cPlates.find(el => el.IsDefault) || cPlates[0]\n }\n }\n\n if (newAvailableDevice) {\n if (newAvailableDevice.supplierPid !== dev.availableDeviceId) {\n operationPointActions.push(\n dereferenceDeviceWithOperationPoint(device.id, dev.id)\n )\n operationPointActions.push(deleteDevice(dev.id))\n const deviceId = v4()\n operationPointActions.push(\n addDevice(\n newAvailableDevice.supplierPid,\n device.id,\n deviceId,\n dev.type,\n undefined,\n dev.position\n )\n )\n operationPointActions.push(referenceDeviceWithOperationPoint(device.id, deviceId))\n }\n } else {\n operationPointError = true\n operationPointActions.push(\n dereferenceDeviceWithOperationPoint(device.id, dev.id)\n )\n operationPointActions.push(deleteDevice(dev.id))\n }\n }\n }\n })\n }\n }\n }\n })\n }\n\n if (operationPointError) {\n frameTypeId--\n }\n\n if (operationPoint.devices.length !== frameTypeId) {\n changeFrame = true\n }\n \n if (changeFrame) {\n if (frameTypeId > 0) {\n const frame = calculateFrame(\n deviceList,\n serieId,\n frameTypeId,\n frameColorId,\n getOrientation(operationPoint),\n frameMapping\n )\n\n if (operationPoint.frame) {\n operationPointActions.push(deleteDevice(operationPoint.frame.id))\n operationPointActions.push(dereferenceFrameWithOperationPoint(operationPoint.id, operationPoint.frame.id))\n }\n if (frame) {\n const frameId = v4()\n operationPointActions.push(addDevice(frame.supplierPid, operationPoint.id, frameId, 'frame'))\n operationPointActions.push(referenceFrameWithOperationPoint(operationPoint.id, frameId))\n } else {\n operationPointError = true\n }\n } else {\n operationPointActions.push(generateDeleteSequence(state, operationPoint))\n } \n }\n\n actions = actions.concat(operationPointActions)\n if (!operationPointError) {\n actionsKeep = actionsKeep.concat(operationPointActions)\n } else {\n error = true\n }\n })\n }\n\n resolve({\n status: error ? 'error' : actions.length === 0 ? 'noChange' : 'success',\n action: batchActions(actions),\n actionKeep: batchActions(actionsKeep)\n })\n })\n}\n\nexport const getDevicesFromEntity = (state, entityId) => {\n const entity = getEntity(state, entityId)\n let devices = []\n\n if (entity.floors) {\n entity.floors.forEach(floorId => {\n devices = devices.concat(getDevicesFromEntity(state, floorId))\n })\n }\n\n if (entity.rooms) {\n entity.rooms.forEach(roomId => {\n devices = devices.concat(getDevicesFromEntity(state, roomId))\n })\n }\n\n if (entity.operationPoints) {\n entity.operationPoints.forEach(operationPointId => {\n devices = devices.concat(getDevicesFromEntity(state, operationPointId))\n })\n }\n\n if (entity.devices) {\n entity.devices.forEach(deviceId => {\n const device = getEntity(state, deviceId)\n\n if (!devices.find(el => el === device.availableDeviceId)) {\n devices.push(device.availableDeviceId)\n }\n })\n }\n\n return devices\n}\n\nconst getAffectedEntities = (entity, affectedEntities = []) => {\n if (['building', 'floor', 'room'].includes(entity.type)) {\n if (entity.type !== 'building') {\n affectedEntities.push(entity.id)\n }\n let subEntities = entity.type === 'building'\n ? entity.floors\n : entity.type === 'floor'\n ? entity.rooms\n : entity.operationPoints\n subEntities.forEach(el => {\n affectedEntities = affectedEntities.concat(getAffectedEntities(el, affectedEntities))\n })\n }\n\n if (entity.type === 'operationPoint') {\n affectedEntities.push(entity.id)\n }\n return affectedEntities.filter((x, i, a) => a.indexOf(x) === i)\n}\n","import { Machine, assign } from 'xstate'\n\nconst initialValues = {\n type: 'DOOR_COMMUNICATION',\n}\n\nexport const calculate = (context, event, actionMeta) => {\n let value = JSON.parse(JSON.stringify(actionMeta.state?.value || initialValues))\n if (event?.payload?.identifier) {\n value[event.payload.identifier] = event.type\n }\n const { type } = value\n\n let formStatus = {}\n Object.keys(doorCommunicationMachine.states).forEach(key => {\n formStatus[key] = {\n open: key === 'type' ? true : false\n }\n })\n\n context = [{\n feature: 'EC000779', //Innenstation für Türkommunikation\n filters: [{\n \"Id\": \"EF000003\", //Montageart\n \"Value\": \"-\"\n }],\n }]\n\n return {\n descriptions: context,\n formStatus\n }\n}\n\nexport const doorCommunicationMachine = Machine(\n {\n id: 'doorcommunication',\n type: 'parallel',\n context: {},\n states: {\n type: {\n initial: initialValues.type,\n on: {\n },\n states: {\n DOOR_COMMUNICATION: {\n entry: ['calculate'],\n },\n },\n },\n },\n },\n {\n actions: {\n calculate: assign(calculate),\n },\n }\n)\n\nexport const possibleDoorCommunicationClasses = {\n //EC000779 Innenstation für Türkommunikation\n classes: ['EC000779'],\n types: {\n 'DOOR_COMMUNICATION': doorCommunicationMachine.transition(doorCommunicationMachine.initialState, { type: 'DOOR_COMMUNICATION', payload: { identifier: 'type'}})?.context?.descriptions,\n \n }\n}\n\nexport default doorCommunicationMachine\n","/* eslint no-process-env:0 */\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./configureStore.prod');\n} else {\n module.exports = require('./configureStore.dev');\n}\n","// source: model/etim.proto\n/**\n * @fileoverview\n * @enhanceable\n * @suppress {missingRequire} reports error on implicit type usages.\n * @suppress {messageConventions} JS Compiler reports an error if a variable or\n * field starts with 'MSG_' and isn't a translatable message.\n * @public\n */\n// GENERATED CODE -- DO NOT EDIT!\n/* eslint-disable */\n// @ts-nocheck\n\nvar jspb = require('google-protobuf');\nvar goog = jspb;\nvar global =\n (typeof globalThis !== 'undefined' && globalThis) ||\n (typeof window !== 'undefined' && window) ||\n (typeof global !== 'undefined' && global) ||\n (typeof self !== 'undefined' && self) ||\n (function () { return this; }).call(null) ||\n Function('return this')();\n\nvar google_protobuf_timestamp_pb = require('google-protobuf/google/protobuf/timestamp_pb.js');\ngoog.object.extend(proto, google_protobuf_timestamp_pb);\ngoog.exportSymbol('proto.model.DeviceProto', null, global);\ngoog.exportSymbol('proto.model.DeviceProto.DiscountGroup', null, global);\ngoog.exportSymbol('proto.model.DeviceProto.MimeDetails', null, global);\ngoog.exportSymbol('proto.model.DeviceProto.Mime_infos', null, global);\ngoog.exportSymbol('proto.model.DeviceProto.PackagingUnit', null, global);\ngoog.exportSymbol('proto.model.DeviceProto.PriceDetails', null, global);\ngoog.exportSymbol('proto.model.DeviceProto.Prices', null, global);\ngoog.exportSymbol('proto.model.DeviceProto.UserDefinedExtensions', null, global);\ngoog.exportSymbol('proto.model.DevicesProto', null, global);\n/**\n * Generated by JsPbCodeGenerator.\n * @param {Array=} opt_data Optional initial data array, typically from a\n * server response, or constructed directly in Javascript. The array is used\n * in place and becomes part of the constructed object. It is not cloned.\n * If no data is provided, the constructed object will be empty, but still\n * valid.\n * @extends {jspb.Message}\n * @constructor\n */\nproto.model.DeviceProto = function(opt_data) {\n jspb.Message.initialize(this, opt_data, 0, -1, null, null);\n};\ngoog.inherits(proto.model.DeviceProto, jspb.Message);\nif (goog.DEBUG && !COMPILED) {\n /**\n * @public\n * @override\n */\n proto.model.DeviceProto.displayName = 'proto.model.DeviceProto';\n}\n/**\n * Generated by JsPbCodeGenerator.\n * @param {Array=} opt_data Optional initial data array, typically from a\n * server response, or constructed directly in Javascript. The array is used\n * in place and becomes part of the constructed object. It is not cloned.\n * If no data is provided, the constructed object will be empty, but still\n * valid.\n * @extends {jspb.Message}\n * @constructor\n */\nproto.model.DeviceProto.DiscountGroup = function(opt_data) {\n jspb.Message.initialize(this, opt_data, 0, -1, null, null);\n};\ngoog.inherits(proto.model.DeviceProto.DiscountGroup, jspb.Message);\nif (goog.DEBUG && !COMPILED) {\n /**\n * @public\n * @override\n */\n proto.model.DeviceProto.DiscountGroup.displayName = 'proto.model.DeviceProto.DiscountGroup';\n}\n/**\n * Generated by JsPbCodeGenerator.\n * @param {Array=} opt_data Optional initial data array, typically from a\n * server response, or constructed directly in Javascript. The array is used\n * in place and becomes part of the constructed object. It is not cloned.\n * If no data is provided, the constructed object will be empty, but still\n * valid.\n * @extends {jspb.Message}\n * @constructor\n */\nproto.model.DeviceProto.PackagingUnit = function(opt_data) {\n jspb.Message.initialize(this, opt_data, 0, -1, null, null);\n};\ngoog.inherits(proto.model.DeviceProto.PackagingUnit, jspb.Message);\nif (goog.DEBUG && !COMPILED) {\n /**\n * @public\n * @override\n */\n proto.model.DeviceProto.PackagingUnit.displayName = 'proto.model.DeviceProto.PackagingUnit';\n}\n/**\n * Generated by JsPbCodeGenerator.\n * @param {Array=} opt_data Optional initial data array, typically from a\n * server response, or constructed directly in Javascript. The array is used\n * in place and becomes part of the constructed object. It is not cloned.\n * If no data is provided, the constructed object will be empty, but still\n * valid.\n * @extends {jspb.Message}\n * @constructor\n */\nproto.model.DeviceProto.UserDefinedExtensions = function(opt_data) {\n jspb.Message.initialize(this, opt_data, 0, -1, proto.model.DeviceProto.UserDefinedExtensions.repeatedFields_, null);\n};\ngoog.inherits(proto.model.DeviceProto.UserDefinedExtensions, jspb.Message);\nif (goog.DEBUG && !COMPILED) {\n /**\n * @public\n * @override\n */\n proto.model.DeviceProto.UserDefinedExtensions.displayName = 'proto.model.DeviceProto.UserDefinedExtensions';\n}\n/**\n * Generated by JsPbCodeGenerator.\n * @param {Array=} opt_data Optional initial data array, typically from a\n * server response, or constructed directly in Javascript. The array is used\n * in place and becomes part of the constructed object. It is not cloned.\n * If no data is provided, the constructed object will be empty, but still\n * valid.\n * @extends {jspb.Message}\n * @constructor\n */\nproto.model.DeviceProto.Prices = function(opt_data) {\n jspb.Message.initialize(this, opt_data, 0, -1, null, null);\n};\ngoog.inherits(proto.model.DeviceProto.Prices, jspb.Message);\nif (goog.DEBUG && !COMPILED) {\n /**\n * @public\n * @override\n */\n proto.model.DeviceProto.Prices.displayName = 'proto.model.DeviceProto.Prices';\n}\n/**\n * Generated by JsPbCodeGenerator.\n * @param {Array=} opt_data Optional initial data array, typically from a\n * server response, or constructed directly in Javascript. The array is used\n * in place and becomes part of the constructed object. It is not cloned.\n * If no data is provided, the constructed object will be empty, but still\n * valid.\n * @extends {jspb.Message}\n * @constructor\n */\nproto.model.DeviceProto.PriceDetails = function(opt_data) {\n jspb.Message.initialize(this, opt_data, 0, -1, proto.model.DeviceProto.PriceDetails.repeatedFields_, null);\n};\ngoog.inherits(proto.model.DeviceProto.PriceDetails, jspb.Message);\nif (goog.DEBUG && !COMPILED) {\n /**\n * @public\n * @override\n */\n proto.model.DeviceProto.PriceDetails.displayName = 'proto.model.DeviceProto.PriceDetails';\n}\n/**\n * Generated by JsPbCodeGenerator.\n * @param {Array=} opt_data Optional initial data array, typically from a\n * server response, or constructed directly in Javascript. The array is used\n * in place and becomes part of the constructed object. It is not cloned.\n * If no data is provided, the constructed object will be empty, but still\n * valid.\n * @extends {jspb.Message}\n * @constructor\n */\nproto.model.DeviceProto.Mime_infos = function(opt_data) {\n jspb.Message.initialize(this, opt_data, 0, -1, null, null);\n};\ngoog.inherits(proto.model.DeviceProto.Mime_infos, jspb.Message);\nif (goog.DEBUG && !COMPILED) {\n /**\n * @public\n * @override\n */\n proto.model.DeviceProto.Mime_infos.displayName = 'proto.model.DeviceProto.Mime_infos';\n}\n/**\n * Generated by JsPbCodeGenerator.\n * @param {Array=} opt_data Optional initial data array, typically from a\n * server response, or constructed directly in Javascript. The array is used\n * in place and becomes part of the constructed object. It is not cloned.\n * If no data is provided, the constructed object will be empty, but still\n * valid.\n * @extends {jspb.Message}\n * @constructor\n */\nproto.model.DeviceProto.MimeDetails = function(opt_data) {\n jspb.Message.initialize(this, opt_data, 0, -1, proto.model.DeviceProto.MimeDetails.repeatedFields_, null);\n};\ngoog.inherits(proto.model.DeviceProto.MimeDetails, jspb.Message);\nif (goog.DEBUG && !COMPILED) {\n /**\n * @public\n * @override\n */\n proto.model.DeviceProto.MimeDetails.displayName = 'proto.model.DeviceProto.MimeDetails';\n}\n/**\n * Generated by JsPbCodeGenerator.\n * @param {Array=} opt_data Optional initial data array, typically from a\n * server response, or constructed directly in Javascript. The array is used\n * in place and becomes part of the constructed object. It is not cloned.\n * If no data is provided, the constructed object will be empty, but still\n * valid.\n * @extends {jspb.Message}\n * @constructor\n */\nproto.model.DevicesProto = function(opt_data) {\n jspb.Message.initialize(this, opt_data, 0, -1, proto.model.DevicesProto.repeatedFields_, null);\n};\ngoog.inherits(proto.model.DevicesProto, jspb.Message);\nif (goog.DEBUG && !COMPILED) {\n /**\n * @public\n * @override\n */\n proto.model.DevicesProto.displayName = 'proto.model.DevicesProto';\n}\n\n\n\nif (jspb.Message.GENERATE_TO_OBJECT) {\n/**\n * Creates an object representation of this proto.\n * Field names that are reserved in JavaScript and will be renamed to pb_name.\n * Optional fields that are not set will be set to undefined.\n * To access a reserved field use, foo.pb_, eg, foo.pb_default.\n * For the list of reserved names please see:\n * net/proto2/compiler/js/internal/generator.cc#kKeyword.\n * @param {boolean=} opt_includeInstance Deprecated. whether to include the\n * JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @return {!Object}\n */\nproto.model.DeviceProto.prototype.toObject = function(opt_includeInstance) {\n return proto.model.DeviceProto.toObject(opt_includeInstance, this);\n};\n\n\n/**\n * Static version of the {@see toObject} method.\n * @param {boolean|undefined} includeInstance Deprecated. Whether to include\n * the JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @param {!proto.model.DeviceProto} msg The msg instance to transform.\n * @return {!Object}\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.model.DeviceProto.toObject = function(includeInstance, msg) {\n var f, obj = {\ninternationalpid: jspb.Message.getFieldWithDefault(msg, 1, 0),\nmanufacturername: jspb.Message.getFieldWithDefault(msg, 2, \"\"),\ndescriptionshort: jspb.Message.getFieldWithDefault(msg, 3, \"\"),\ndescriptionlong: jspb.Message.getFieldWithDefault(msg, 4, \"\"),\nsupplieraltpid: jspb.Message.getFieldWithDefault(msg, 5, \"\"),\nmanufacturerpid: jspb.Message.getFieldWithDefault(msg, 6, \"\"),\nmanufacturertypedescr: jspb.Message.getFieldWithDefault(msg, 7, \"\"),\nsupplierpid: jspb.Message.getFieldWithDefault(msg, 8, \"\"),\npricedetails: (f = msg.getPricedetails()) && proto.model.DeviceProto.PriceDetails.toObject(includeInstance, f),\nuserdefinedextensions: (f = msg.getUserdefinedextensions()) && proto.model.DeviceProto.UserDefinedExtensions.toObject(includeInstance, f),\ndividingunit: jspb.Message.getFieldWithDefault(msg, 11, \"\"),\nknxteilnehmer: jspb.Message.getFieldWithDefault(msg, 12, 0),\ncolor: jspb.Message.getFieldWithDefault(msg, 13, \"\"),\nmimedetails: (f = msg.getMimedetails()) && proto.model.DeviceProto.MimeDetails.toObject(includeInstance, f),\nfeatures: jspb.Message.getFieldWithDefault(msg, 15, \"\"),\ninsertedat: (f = msg.getInsertedat()) && google_protobuf_timestamp_pb.Timestamp.toObject(includeInstance, f)\n };\n\n if (includeInstance) {\n obj.$jspbMessageInstance = msg;\n }\n return obj;\n};\n}\n\n\n/**\n * Deserializes binary data (in protobuf wire format).\n * @param {jspb.ByteSource} bytes The bytes to deserialize.\n * @return {!proto.model.DeviceProto}\n */\nproto.model.DeviceProto.deserializeBinary = function(bytes) {\n var reader = new jspb.BinaryReader(bytes);\n var msg = new proto.model.DeviceProto;\n return proto.model.DeviceProto.deserializeBinaryFromReader(msg, reader);\n};\n\n\n/**\n * Deserializes binary data (in protobuf wire format) from the\n * given reader into the given message object.\n * @param {!proto.model.DeviceProto} msg The message object to deserialize into.\n * @param {!jspb.BinaryReader} reader The BinaryReader to use.\n * @return {!proto.model.DeviceProto}\n */\nproto.model.DeviceProto.deserializeBinaryFromReader = function(msg, reader) {\n while (reader.nextField()) {\n if (reader.isEndGroup()) {\n break;\n }\n var field = reader.getFieldNumber();\n switch (field) {\n case 1:\n var value = /** @type {number} */ (reader.readUint64());\n msg.setInternationalpid(value);\n break;\n case 2:\n var value = /** @type {string} */ (reader.readString());\n msg.setManufacturername(value);\n break;\n case 3:\n var value = /** @type {string} */ (reader.readString());\n msg.setDescriptionshort(value);\n break;\n case 4:\n var value = /** @type {string} */ (reader.readString());\n msg.setDescriptionlong(value);\n break;\n case 5:\n var value = /** @type {string} */ (reader.readString());\n msg.setSupplieraltpid(value);\n break;\n case 6:\n var value = /** @type {string} */ (reader.readString());\n msg.setManufacturerpid(value);\n break;\n case 7:\n var value = /** @type {string} */ (reader.readString());\n msg.setManufacturertypedescr(value);\n break;\n case 8:\n var value = /** @type {string} */ (reader.readString());\n msg.setSupplierpid(value);\n break;\n case 9:\n var value = new proto.model.DeviceProto.PriceDetails;\n reader.readMessage(value,proto.model.DeviceProto.PriceDetails.deserializeBinaryFromReader);\n msg.setPricedetails(value);\n break;\n case 10:\n var value = new proto.model.DeviceProto.UserDefinedExtensions;\n reader.readMessage(value,proto.model.DeviceProto.UserDefinedExtensions.deserializeBinaryFromReader);\n msg.setUserdefinedextensions(value);\n break;\n case 11:\n var value = /** @type {string} */ (reader.readString());\n msg.setDividingunit(value);\n break;\n case 12:\n var value = /** @type {number} */ (reader.readUint64());\n msg.setKnxteilnehmer(value);\n break;\n case 13:\n var value = /** @type {string} */ (reader.readString());\n msg.setColor(value);\n break;\n case 14:\n var value = new proto.model.DeviceProto.MimeDetails;\n reader.readMessage(value,proto.model.DeviceProto.MimeDetails.deserializeBinaryFromReader);\n msg.setMimedetails(value);\n break;\n case 15:\n var value = /** @type {string} */ (reader.readString());\n msg.setFeatures(value);\n break;\n case 16:\n var value = new google_protobuf_timestamp_pb.Timestamp;\n reader.readMessage(value,google_protobuf_timestamp_pb.Timestamp.deserializeBinaryFromReader);\n msg.setInsertedat(value);\n break;\n default:\n reader.skipField();\n break;\n }\n }\n return msg;\n};\n\n\n/**\n * Serializes the message to binary data (in protobuf wire format).\n * @return {!Uint8Array}\n */\nproto.model.DeviceProto.prototype.serializeBinary = function() {\n var writer = new jspb.BinaryWriter();\n proto.model.DeviceProto.serializeBinaryToWriter(this, writer);\n return writer.getResultBuffer();\n};\n\n\n/**\n * Serializes the given message to binary data (in protobuf wire\n * format), writing to the given BinaryWriter.\n * @param {!proto.model.DeviceProto} message\n * @param {!jspb.BinaryWriter} writer\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.model.DeviceProto.serializeBinaryToWriter = function(message, writer) {\n var f = undefined;\n f = message.getInternationalpid();\n if (f !== 0) {\n writer.writeUint64(\n 1,\n f\n );\n }\n f = message.getManufacturername();\n if (f.length > 0) {\n writer.writeString(\n 2,\n f\n );\n }\n f = message.getDescriptionshort();\n if (f.length > 0) {\n writer.writeString(\n 3,\n f\n );\n }\n f = message.getDescriptionlong();\n if (f.length > 0) {\n writer.writeString(\n 4,\n f\n );\n }\n f = message.getSupplieraltpid();\n if (f.length > 0) {\n writer.writeString(\n 5,\n f\n );\n }\n f = message.getManufacturerpid();\n if (f.length > 0) {\n writer.writeString(\n 6,\n f\n );\n }\n f = message.getManufacturertypedescr();\n if (f.length > 0) {\n writer.writeString(\n 7,\n f\n );\n }\n f = message.getSupplierpid();\n if (f.length > 0) {\n writer.writeString(\n 8,\n f\n );\n }\n f = message.getPricedetails();\n if (f != null) {\n writer.writeMessage(\n 9,\n f,\n proto.model.DeviceProto.PriceDetails.serializeBinaryToWriter\n );\n }\n f = message.getUserdefinedextensions();\n if (f != null) {\n writer.writeMessage(\n 10,\n f,\n proto.model.DeviceProto.UserDefinedExtensions.serializeBinaryToWriter\n );\n }\n f = message.getDividingunit();\n if (f.length > 0) {\n writer.writeString(\n 11,\n f\n );\n }\n f = message.getKnxteilnehmer();\n if (f !== 0) {\n writer.writeUint64(\n 12,\n f\n );\n }\n f = message.getColor();\n if (f.length > 0) {\n writer.writeString(\n 13,\n f\n );\n }\n f = message.getMimedetails();\n if (f != null) {\n writer.writeMessage(\n 14,\n f,\n proto.model.DeviceProto.MimeDetails.serializeBinaryToWriter\n );\n }\n f = message.getFeatures();\n if (f.length > 0) {\n writer.writeString(\n 15,\n f\n );\n }\n f = message.getInsertedat();\n if (f != null) {\n writer.writeMessage(\n 16,\n f,\n google_protobuf_timestamp_pb.Timestamp.serializeBinaryToWriter\n );\n }\n};\n\n\n\n\n\nif (jspb.Message.GENERATE_TO_OBJECT) {\n/**\n * Creates an object representation of this proto.\n * Field names that are reserved in JavaScript and will be renamed to pb_name.\n * Optional fields that are not set will be set to undefined.\n * To access a reserved field use, foo.pb_, eg, foo.pb_default.\n * For the list of reserved names please see:\n * net/proto2/compiler/js/internal/generator.cc#kKeyword.\n * @param {boolean=} opt_includeInstance Deprecated. whether to include the\n * JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @return {!Object}\n */\nproto.model.DeviceProto.DiscountGroup.prototype.toObject = function(opt_includeInstance) {\n return proto.model.DeviceProto.DiscountGroup.toObject(opt_includeInstance, this);\n};\n\n\n/**\n * Static version of the {@see toObject} method.\n * @param {boolean|undefined} includeInstance Deprecated. Whether to include\n * the JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @param {!proto.model.DeviceProto.DiscountGroup} msg The msg instance to transform.\n * @return {!Object}\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.model.DeviceProto.DiscountGroup.toObject = function(includeInstance, msg) {\n var f, obj = {\ngroupmanufacturer: jspb.Message.getFieldWithDefault(msg, 1, \"\")\n };\n\n if (includeInstance) {\n obj.$jspbMessageInstance = msg;\n }\n return obj;\n};\n}\n\n\n/**\n * Deserializes binary data (in protobuf wire format).\n * @param {jspb.ByteSource} bytes The bytes to deserialize.\n * @return {!proto.model.DeviceProto.DiscountGroup}\n */\nproto.model.DeviceProto.DiscountGroup.deserializeBinary = function(bytes) {\n var reader = new jspb.BinaryReader(bytes);\n var msg = new proto.model.DeviceProto.DiscountGroup;\n return proto.model.DeviceProto.DiscountGroup.deserializeBinaryFromReader(msg, reader);\n};\n\n\n/**\n * Deserializes binary data (in protobuf wire format) from the\n * given reader into the given message object.\n * @param {!proto.model.DeviceProto.DiscountGroup} msg The message object to deserialize into.\n * @param {!jspb.BinaryReader} reader The BinaryReader to use.\n * @return {!proto.model.DeviceProto.DiscountGroup}\n */\nproto.model.DeviceProto.DiscountGroup.deserializeBinaryFromReader = function(msg, reader) {\n while (reader.nextField()) {\n if (reader.isEndGroup()) {\n break;\n }\n var field = reader.getFieldNumber();\n switch (field) {\n case 1:\n var value = /** @type {string} */ (reader.readString());\n msg.setGroupmanufacturer(value);\n break;\n default:\n reader.skipField();\n break;\n }\n }\n return msg;\n};\n\n\n/**\n * Serializes the message to binary data (in protobuf wire format).\n * @return {!Uint8Array}\n */\nproto.model.DeviceProto.DiscountGroup.prototype.serializeBinary = function() {\n var writer = new jspb.BinaryWriter();\n proto.model.DeviceProto.DiscountGroup.serializeBinaryToWriter(this, writer);\n return writer.getResultBuffer();\n};\n\n\n/**\n * Serializes the given message to binary data (in protobuf wire\n * format), writing to the given BinaryWriter.\n * @param {!proto.model.DeviceProto.DiscountGroup} message\n * @param {!jspb.BinaryWriter} writer\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.model.DeviceProto.DiscountGroup.serializeBinaryToWriter = function(message, writer) {\n var f = undefined;\n f = message.getGroupmanufacturer();\n if (f.length > 0) {\n writer.writeString(\n 1,\n f\n );\n }\n};\n\n\n/**\n * optional string groupManufacturer = 1;\n * @return {string}\n */\nproto.model.DeviceProto.DiscountGroup.prototype.getGroupmanufacturer = function() {\n return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, \"\"));\n};\n\n\n/**\n * @param {string} value\n * @return {!proto.model.DeviceProto.DiscountGroup} returns this\n */\nproto.model.DeviceProto.DiscountGroup.prototype.setGroupmanufacturer = function(value) {\n return jspb.Message.setProto3StringField(this, 1, value);\n};\n\n\n\n\n\nif (jspb.Message.GENERATE_TO_OBJECT) {\n/**\n * Creates an object representation of this proto.\n * Field names that are reserved in JavaScript and will be renamed to pb_name.\n * Optional fields that are not set will be set to undefined.\n * To access a reserved field use, foo.pb_, eg, foo.pb_default.\n * For the list of reserved names please see:\n * net/proto2/compiler/js/internal/generator.cc#kKeyword.\n * @param {boolean=} opt_includeInstance Deprecated. whether to include the\n * JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @return {!Object}\n */\nproto.model.DeviceProto.PackagingUnit.prototype.toObject = function(opt_includeInstance) {\n return proto.model.DeviceProto.PackagingUnit.toObject(opt_includeInstance, this);\n};\n\n\n/**\n * Static version of the {@see toObject} method.\n * @param {boolean|undefined} includeInstance Deprecated. Whether to include\n * the JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @param {!proto.model.DeviceProto.PackagingUnit} msg The msg instance to transform.\n * @return {!Object}\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.model.DeviceProto.PackagingUnit.toObject = function(includeInstance, msg) {\n var f, obj = {\ngtin: jspb.Message.getFieldWithDefault(msg, 1, \"\"),\ndepth: jspb.Message.getFloatingPointFieldWithDefault(msg, 2, 0.0),\nwidth: jspb.Message.getFloatingPointFieldWithDefault(msg, 3, 0.0),\nlength: jspb.Message.getFloatingPointFieldWithDefault(msg, 4, 0.0),\nweight: jspb.Message.getFloatingPointFieldWithDefault(msg, 5, 0.0),\nquantitymax: jspb.Message.getFieldWithDefault(msg, 6, 0),\nquantitymin: jspb.Message.getFieldWithDefault(msg, 7, 0),\npackageunitcode: jspb.Message.getFieldWithDefault(msg, 8, \"\")\n };\n\n if (includeInstance) {\n obj.$jspbMessageInstance = msg;\n }\n return obj;\n};\n}\n\n\n/**\n * Deserializes binary data (in protobuf wire format).\n * @param {jspb.ByteSource} bytes The bytes to deserialize.\n * @return {!proto.model.DeviceProto.PackagingUnit}\n */\nproto.model.DeviceProto.PackagingUnit.deserializeBinary = function(bytes) {\n var reader = new jspb.BinaryReader(bytes);\n var msg = new proto.model.DeviceProto.PackagingUnit;\n return proto.model.DeviceProto.PackagingUnit.deserializeBinaryFromReader(msg, reader);\n};\n\n\n/**\n * Deserializes binary data (in protobuf wire format) from the\n * given reader into the given message object.\n * @param {!proto.model.DeviceProto.PackagingUnit} msg The message object to deserialize into.\n * @param {!jspb.BinaryReader} reader The BinaryReader to use.\n * @return {!proto.model.DeviceProto.PackagingUnit}\n */\nproto.model.DeviceProto.PackagingUnit.deserializeBinaryFromReader = function(msg, reader) {\n while (reader.nextField()) {\n if (reader.isEndGroup()) {\n break;\n }\n var field = reader.getFieldNumber();\n switch (field) {\n case 1:\n var value = /** @type {string} */ (reader.readString());\n msg.setGtin(value);\n break;\n case 2:\n var value = /** @type {number} */ (reader.readFloat());\n msg.setDepth(value);\n break;\n case 3:\n var value = /** @type {number} */ (reader.readFloat());\n msg.setWidth(value);\n break;\n case 4:\n var value = /** @type {number} */ (reader.readFloat());\n msg.setLength(value);\n break;\n case 5:\n var value = /** @type {number} */ (reader.readFloat());\n msg.setWeight(value);\n break;\n case 6:\n var value = /** @type {number} */ (reader.readInt32());\n msg.setQuantitymax(value);\n break;\n case 7:\n var value = /** @type {number} */ (reader.readInt32());\n msg.setQuantitymin(value);\n break;\n case 8:\n var value = /** @type {string} */ (reader.readString());\n msg.setPackageunitcode(value);\n break;\n default:\n reader.skipField();\n break;\n }\n }\n return msg;\n};\n\n\n/**\n * Serializes the message to binary data (in protobuf wire format).\n * @return {!Uint8Array}\n */\nproto.model.DeviceProto.PackagingUnit.prototype.serializeBinary = function() {\n var writer = new jspb.BinaryWriter();\n proto.model.DeviceProto.PackagingUnit.serializeBinaryToWriter(this, writer);\n return writer.getResultBuffer();\n};\n\n\n/**\n * Serializes the given message to binary data (in protobuf wire\n * format), writing to the given BinaryWriter.\n * @param {!proto.model.DeviceProto.PackagingUnit} message\n * @param {!jspb.BinaryWriter} writer\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.model.DeviceProto.PackagingUnit.serializeBinaryToWriter = function(message, writer) {\n var f = undefined;\n f = message.getGtin();\n if (f.length > 0) {\n writer.writeString(\n 1,\n f\n );\n }\n f = message.getDepth();\n if (f !== 0.0) {\n writer.writeFloat(\n 2,\n f\n );\n }\n f = message.getWidth();\n if (f !== 0.0) {\n writer.writeFloat(\n 3,\n f\n );\n }\n f = message.getLength();\n if (f !== 0.0) {\n writer.writeFloat(\n 4,\n f\n );\n }\n f = message.getWeight();\n if (f !== 0.0) {\n writer.writeFloat(\n 5,\n f\n );\n }\n f = message.getQuantitymax();\n if (f !== 0) {\n writer.writeInt32(\n 6,\n f\n );\n }\n f = message.getQuantitymin();\n if (f !== 0) {\n writer.writeInt32(\n 7,\n f\n );\n }\n f = message.getPackageunitcode();\n if (f.length > 0) {\n writer.writeString(\n 8,\n f\n );\n }\n};\n\n\n/**\n * optional string gtin = 1;\n * @return {string}\n */\nproto.model.DeviceProto.PackagingUnit.prototype.getGtin = function() {\n return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, \"\"));\n};\n\n\n/**\n * @param {string} value\n * @return {!proto.model.DeviceProto.PackagingUnit} returns this\n */\nproto.model.DeviceProto.PackagingUnit.prototype.setGtin = function(value) {\n return jspb.Message.setProto3StringField(this, 1, value);\n};\n\n\n/**\n * optional float depth = 2;\n * @return {number}\n */\nproto.model.DeviceProto.PackagingUnit.prototype.getDepth = function() {\n return /** @type {number} */ (jspb.Message.getFloatingPointFieldWithDefault(this, 2, 0.0));\n};\n\n\n/**\n * @param {number} value\n * @return {!proto.model.DeviceProto.PackagingUnit} returns this\n */\nproto.model.DeviceProto.PackagingUnit.prototype.setDepth = function(value) {\n return jspb.Message.setProto3FloatField(this, 2, value);\n};\n\n\n/**\n * optional float width = 3;\n * @return {number}\n */\nproto.model.DeviceProto.PackagingUnit.prototype.getWidth = function() {\n return /** @type {number} */ (jspb.Message.getFloatingPointFieldWithDefault(this, 3, 0.0));\n};\n\n\n/**\n * @param {number} value\n * @return {!proto.model.DeviceProto.PackagingUnit} returns this\n */\nproto.model.DeviceProto.PackagingUnit.prototype.setWidth = function(value) {\n return jspb.Message.setProto3FloatField(this, 3, value);\n};\n\n\n/**\n * optional float length = 4;\n * @return {number}\n */\nproto.model.DeviceProto.PackagingUnit.prototype.getLength = function() {\n return /** @type {number} */ (jspb.Message.getFloatingPointFieldWithDefault(this, 4, 0.0));\n};\n\n\n/**\n * @param {number} value\n * @return {!proto.model.DeviceProto.PackagingUnit} returns this\n */\nproto.model.DeviceProto.PackagingUnit.prototype.setLength = function(value) {\n return jspb.Message.setProto3FloatField(this, 4, value);\n};\n\n\n/**\n * optional float weight = 5;\n * @return {number}\n */\nproto.model.DeviceProto.PackagingUnit.prototype.getWeight = function() {\n return /** @type {number} */ (jspb.Message.getFloatingPointFieldWithDefault(this, 5, 0.0));\n};\n\n\n/**\n * @param {number} value\n * @return {!proto.model.DeviceProto.PackagingUnit} returns this\n */\nproto.model.DeviceProto.PackagingUnit.prototype.setWeight = function(value) {\n return jspb.Message.setProto3FloatField(this, 5, value);\n};\n\n\n/**\n * optional int32 quantityMax = 6;\n * @return {number}\n */\nproto.model.DeviceProto.PackagingUnit.prototype.getQuantitymax = function() {\n return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 6, 0));\n};\n\n\n/**\n * @param {number} value\n * @return {!proto.model.DeviceProto.PackagingUnit} returns this\n */\nproto.model.DeviceProto.PackagingUnit.prototype.setQuantitymax = function(value) {\n return jspb.Message.setProto3IntField(this, 6, value);\n};\n\n\n/**\n * optional int32 quantityMin = 7;\n * @return {number}\n */\nproto.model.DeviceProto.PackagingUnit.prototype.getQuantitymin = function() {\n return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 7, 0));\n};\n\n\n/**\n * @param {number} value\n * @return {!proto.model.DeviceProto.PackagingUnit} returns this\n */\nproto.model.DeviceProto.PackagingUnit.prototype.setQuantitymin = function(value) {\n return jspb.Message.setProto3IntField(this, 7, value);\n};\n\n\n/**\n * optional string packageUnitCode = 8;\n * @return {string}\n */\nproto.model.DeviceProto.PackagingUnit.prototype.getPackageunitcode = function() {\n return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 8, \"\"));\n};\n\n\n/**\n * @param {string} value\n * @return {!proto.model.DeviceProto.PackagingUnit} returns this\n */\nproto.model.DeviceProto.PackagingUnit.prototype.setPackageunitcode = function(value) {\n return jspb.Message.setProto3StringField(this, 8, value);\n};\n\n\n\n/**\n * List of repeated fields within this message type.\n * @private {!Array}\n * @const\n */\nproto.model.DeviceProto.UserDefinedExtensions.repeatedFields_ = [1,2];\n\n\n\nif (jspb.Message.GENERATE_TO_OBJECT) {\n/**\n * Creates an object representation of this proto.\n * Field names that are reserved in JavaScript and will be renamed to pb_name.\n * Optional fields that are not set will be set to undefined.\n * To access a reserved field use, foo.pb_, eg, foo.pb_default.\n * For the list of reserved names please see:\n * net/proto2/compiler/js/internal/generator.cc#kKeyword.\n * @param {boolean=} opt_includeInstance Deprecated. whether to include the\n * JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @return {!Object}\n */\nproto.model.DeviceProto.UserDefinedExtensions.prototype.toObject = function(opt_includeInstance) {\n return proto.model.DeviceProto.UserDefinedExtensions.toObject(opt_includeInstance, this);\n};\n\n\n/**\n * Static version of the {@see toObject} method.\n * @param {boolean|undefined} includeInstance Deprecated. Whether to include\n * the JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @param {!proto.model.DeviceProto.UserDefinedExtensions} msg The msg instance to transform.\n * @return {!Object}\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.model.DeviceProto.UserDefinedExtensions.toObject = function(includeInstance, msg) {\n var f, obj = {\ndiscountgroupList: jspb.Message.toObjectList(msg.getDiscountgroupList(),\n proto.model.DeviceProto.DiscountGroup.toObject, includeInstance),\npackagingunitList: jspb.Message.toObjectList(msg.getPackagingunitList(),\n proto.model.DeviceProto.PackagingUnit.toObject, includeInstance),\nveryshortdescription: jspb.Message.getFieldWithDefault(msg, 3, \"\")\n };\n\n if (includeInstance) {\n obj.$jspbMessageInstance = msg;\n }\n return obj;\n};\n}\n\n\n/**\n * Deserializes binary data (in protobuf wire format).\n * @param {jspb.ByteSource} bytes The bytes to deserialize.\n * @return {!proto.model.DeviceProto.UserDefinedExtensions}\n */\nproto.model.DeviceProto.UserDefinedExtensions.deserializeBinary = function(bytes) {\n var reader = new jspb.BinaryReader(bytes);\n var msg = new proto.model.DeviceProto.UserDefinedExtensions;\n return proto.model.DeviceProto.UserDefinedExtensions.deserializeBinaryFromReader(msg, reader);\n};\n\n\n/**\n * Deserializes binary data (in protobuf wire format) from the\n * given reader into the given message object.\n * @param {!proto.model.DeviceProto.UserDefinedExtensions} msg The message object to deserialize into.\n * @param {!jspb.BinaryReader} reader The BinaryReader to use.\n * @return {!proto.model.DeviceProto.UserDefinedExtensions}\n */\nproto.model.DeviceProto.UserDefinedExtensions.deserializeBinaryFromReader = function(msg, reader) {\n while (reader.nextField()) {\n if (reader.isEndGroup()) {\n break;\n }\n var field = reader.getFieldNumber();\n switch (field) {\n case 1:\n var value = new proto.model.DeviceProto.DiscountGroup;\n reader.readMessage(value,proto.model.DeviceProto.DiscountGroup.deserializeBinaryFromReader);\n msg.addDiscountgroup(value);\n break;\n case 2:\n var value = new proto.model.DeviceProto.PackagingUnit;\n reader.readMessage(value,proto.model.DeviceProto.PackagingUnit.deserializeBinaryFromReader);\n msg.addPackagingunit(value);\n break;\n case 3:\n var value = /** @type {string} */ (reader.readString());\n msg.setVeryshortdescription(value);\n break;\n default:\n reader.skipField();\n break;\n }\n }\n return msg;\n};\n\n\n/**\n * Serializes the message to binary data (in protobuf wire format).\n * @return {!Uint8Array}\n */\nproto.model.DeviceProto.UserDefinedExtensions.prototype.serializeBinary = function() {\n var writer = new jspb.BinaryWriter();\n proto.model.DeviceProto.UserDefinedExtensions.serializeBinaryToWriter(this, writer);\n return writer.getResultBuffer();\n};\n\n\n/**\n * Serializes the given message to binary data (in protobuf wire\n * format), writing to the given BinaryWriter.\n * @param {!proto.model.DeviceProto.UserDefinedExtensions} message\n * @param {!jspb.BinaryWriter} writer\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.model.DeviceProto.UserDefinedExtensions.serializeBinaryToWriter = function(message, writer) {\n var f = undefined;\n f = message.getDiscountgroupList();\n if (f.length > 0) {\n writer.writeRepeatedMessage(\n 1,\n f,\n proto.model.DeviceProto.DiscountGroup.serializeBinaryToWriter\n );\n }\n f = message.getPackagingunitList();\n if (f.length > 0) {\n writer.writeRepeatedMessage(\n 2,\n f,\n proto.model.DeviceProto.PackagingUnit.serializeBinaryToWriter\n );\n }\n f = message.getVeryshortdescription();\n if (f.length > 0) {\n writer.writeString(\n 3,\n f\n );\n }\n};\n\n\n/**\n * repeated DiscountGroup discountGroup = 1;\n * @return {!Array}\n */\nproto.model.DeviceProto.UserDefinedExtensions.prototype.getDiscountgroupList = function() {\n return /** @type{!Array} */ (\n jspb.Message.getRepeatedWrapperField(this, proto.model.DeviceProto.DiscountGroup, 1));\n};\n\n\n/**\n * @param {!Array} value\n * @return {!proto.model.DeviceProto.UserDefinedExtensions} returns this\n*/\nproto.model.DeviceProto.UserDefinedExtensions.prototype.setDiscountgroupList = function(value) {\n return jspb.Message.setRepeatedWrapperField(this, 1, value);\n};\n\n\n/**\n * @param {!proto.model.DeviceProto.DiscountGroup=} opt_value\n * @param {number=} opt_index\n * @return {!proto.model.DeviceProto.DiscountGroup}\n */\nproto.model.DeviceProto.UserDefinedExtensions.prototype.addDiscountgroup = function(opt_value, opt_index) {\n return jspb.Message.addToRepeatedWrapperField(this, 1, opt_value, proto.model.DeviceProto.DiscountGroup, opt_index);\n};\n\n\n/**\n * Clears the list making it empty but non-null.\n * @return {!proto.model.DeviceProto.UserDefinedExtensions} returns this\n */\nproto.model.DeviceProto.UserDefinedExtensions.prototype.clearDiscountgroupList = function() {\n return this.setDiscountgroupList([]);\n};\n\n\n/**\n * repeated PackagingUnit packagingUnit = 2;\n * @return {!Array}\n */\nproto.model.DeviceProto.UserDefinedExtensions.prototype.getPackagingunitList = function() {\n return /** @type{!Array} */ (\n jspb.Message.getRepeatedWrapperField(this, proto.model.DeviceProto.PackagingUnit, 2));\n};\n\n\n/**\n * @param {!Array} value\n * @return {!proto.model.DeviceProto.UserDefinedExtensions} returns this\n*/\nproto.model.DeviceProto.UserDefinedExtensions.prototype.setPackagingunitList = function(value) {\n return jspb.Message.setRepeatedWrapperField(this, 2, value);\n};\n\n\n/**\n * @param {!proto.model.DeviceProto.PackagingUnit=} opt_value\n * @param {number=} opt_index\n * @return {!proto.model.DeviceProto.PackagingUnit}\n */\nproto.model.DeviceProto.UserDefinedExtensions.prototype.addPackagingunit = function(opt_value, opt_index) {\n return jspb.Message.addToRepeatedWrapperField(this, 2, opt_value, proto.model.DeviceProto.PackagingUnit, opt_index);\n};\n\n\n/**\n * Clears the list making it empty but non-null.\n * @return {!proto.model.DeviceProto.UserDefinedExtensions} returns this\n */\nproto.model.DeviceProto.UserDefinedExtensions.prototype.clearPackagingunitList = function() {\n return this.setPackagingunitList([]);\n};\n\n\n/**\n * optional string veryShortDescription = 3;\n * @return {string}\n */\nproto.model.DeviceProto.UserDefinedExtensions.prototype.getVeryshortdescription = function() {\n return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 3, \"\"));\n};\n\n\n/**\n * @param {string} value\n * @return {!proto.model.DeviceProto.UserDefinedExtensions} returns this\n */\nproto.model.DeviceProto.UserDefinedExtensions.prototype.setVeryshortdescription = function(value) {\n return jspb.Message.setProto3StringField(this, 3, value);\n};\n\n\n\n\n\nif (jspb.Message.GENERATE_TO_OBJECT) {\n/**\n * Creates an object representation of this proto.\n * Field names that are reserved in JavaScript and will be renamed to pb_name.\n * Optional fields that are not set will be set to undefined.\n * To access a reserved field use, foo.pb_, eg, foo.pb_default.\n * For the list of reserved names please see:\n * net/proto2/compiler/js/internal/generator.cc#kKeyword.\n * @param {boolean=} opt_includeInstance Deprecated. whether to include the\n * JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @return {!Object}\n */\nproto.model.DeviceProto.Prices.prototype.toObject = function(opt_includeInstance) {\n return proto.model.DeviceProto.Prices.toObject(opt_includeInstance, this);\n};\n\n\n/**\n * Static version of the {@see toObject} method.\n * @param {boolean|undefined} includeInstance Deprecated. Whether to include\n * the JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @param {!proto.model.DeviceProto.Prices} msg The msg instance to transform.\n * @return {!Object}\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.model.DeviceProto.Prices.toObject = function(includeInstance, msg) {\n var f, obj = {\ntax: jspb.Message.getFloatingPointFieldWithDefault(msg, 1, 0.0),\namount: jspb.Message.getFloatingPointFieldWithDefault(msg, 2, 0.0),\ncurrency: jspb.Message.getFieldWithDefault(msg, 3, \"\")\n };\n\n if (includeInstance) {\n obj.$jspbMessageInstance = msg;\n }\n return obj;\n};\n}\n\n\n/**\n * Deserializes binary data (in protobuf wire format).\n * @param {jspb.ByteSource} bytes The bytes to deserialize.\n * @return {!proto.model.DeviceProto.Prices}\n */\nproto.model.DeviceProto.Prices.deserializeBinary = function(bytes) {\n var reader = new jspb.BinaryReader(bytes);\n var msg = new proto.model.DeviceProto.Prices;\n return proto.model.DeviceProto.Prices.deserializeBinaryFromReader(msg, reader);\n};\n\n\n/**\n * Deserializes binary data (in protobuf wire format) from the\n * given reader into the given message object.\n * @param {!proto.model.DeviceProto.Prices} msg The message object to deserialize into.\n * @param {!jspb.BinaryReader} reader The BinaryReader to use.\n * @return {!proto.model.DeviceProto.Prices}\n */\nproto.model.DeviceProto.Prices.deserializeBinaryFromReader = function(msg, reader) {\n while (reader.nextField()) {\n if (reader.isEndGroup()) {\n break;\n }\n var field = reader.getFieldNumber();\n switch (field) {\n case 1:\n var value = /** @type {number} */ (reader.readFloat());\n msg.setTax(value);\n break;\n case 2:\n var value = /** @type {number} */ (reader.readFloat());\n msg.setAmount(value);\n break;\n case 3:\n var value = /** @type {string} */ (reader.readString());\n msg.setCurrency(value);\n break;\n default:\n reader.skipField();\n break;\n }\n }\n return msg;\n};\n\n\n/**\n * Serializes the message to binary data (in protobuf wire format).\n * @return {!Uint8Array}\n */\nproto.model.DeviceProto.Prices.prototype.serializeBinary = function() {\n var writer = new jspb.BinaryWriter();\n proto.model.DeviceProto.Prices.serializeBinaryToWriter(this, writer);\n return writer.getResultBuffer();\n};\n\n\n/**\n * Serializes the given message to binary data (in protobuf wire\n * format), writing to the given BinaryWriter.\n * @param {!proto.model.DeviceProto.Prices} message\n * @param {!jspb.BinaryWriter} writer\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.model.DeviceProto.Prices.serializeBinaryToWriter = function(message, writer) {\n var f = undefined;\n f = message.getTax();\n if (f !== 0.0) {\n writer.writeFloat(\n 1,\n f\n );\n }\n f = message.getAmount();\n if (f !== 0.0) {\n writer.writeFloat(\n 2,\n f\n );\n }\n f = message.getCurrency();\n if (f.length > 0) {\n writer.writeString(\n 3,\n f\n );\n }\n};\n\n\n/**\n * optional float tax = 1;\n * @return {number}\n */\nproto.model.DeviceProto.Prices.prototype.getTax = function() {\n return /** @type {number} */ (jspb.Message.getFloatingPointFieldWithDefault(this, 1, 0.0));\n};\n\n\n/**\n * @param {number} value\n * @return {!proto.model.DeviceProto.Prices} returns this\n */\nproto.model.DeviceProto.Prices.prototype.setTax = function(value) {\n return jspb.Message.setProto3FloatField(this, 1, value);\n};\n\n\n/**\n * optional float amount = 2;\n * @return {number}\n */\nproto.model.DeviceProto.Prices.prototype.getAmount = function() {\n return /** @type {number} */ (jspb.Message.getFloatingPointFieldWithDefault(this, 2, 0.0));\n};\n\n\n/**\n * @param {number} value\n * @return {!proto.model.DeviceProto.Prices} returns this\n */\nproto.model.DeviceProto.Prices.prototype.setAmount = function(value) {\n return jspb.Message.setProto3FloatField(this, 2, value);\n};\n\n\n/**\n * optional string currency = 3;\n * @return {string}\n */\nproto.model.DeviceProto.Prices.prototype.getCurrency = function() {\n return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 3, \"\"));\n};\n\n\n/**\n * @param {string} value\n * @return {!proto.model.DeviceProto.Prices} returns this\n */\nproto.model.DeviceProto.Prices.prototype.setCurrency = function(value) {\n return jspb.Message.setProto3StringField(this, 3, value);\n};\n\n\n\n/**\n * List of repeated fields within this message type.\n * @private {!Array}\n * @const\n */\nproto.model.DeviceProto.PriceDetails.repeatedFields_ = [1];\n\n\n\nif (jspb.Message.GENERATE_TO_OBJECT) {\n/**\n * Creates an object representation of this proto.\n * Field names that are reserved in JavaScript and will be renamed to pb_name.\n * Optional fields that are not set will be set to undefined.\n * To access a reserved field use, foo.pb_, eg, foo.pb_default.\n * For the list of reserved names please see:\n * net/proto2/compiler/js/internal/generator.cc#kKeyword.\n * @param {boolean=} opt_includeInstance Deprecated. whether to include the\n * JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @return {!Object}\n */\nproto.model.DeviceProto.PriceDetails.prototype.toObject = function(opt_includeInstance) {\n return proto.model.DeviceProto.PriceDetails.toObject(opt_includeInstance, this);\n};\n\n\n/**\n * Static version of the {@see toObject} method.\n * @param {boolean|undefined} includeInstance Deprecated. Whether to include\n * the JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @param {!proto.model.DeviceProto.PriceDetails} msg The msg instance to transform.\n * @return {!Object}\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.model.DeviceProto.PriceDetails.toObject = function(includeInstance, msg) {\n var f, obj = {\npricesList: jspb.Message.toObjectList(msg.getPricesList(),\n proto.model.DeviceProto.Prices.toObject, includeInstance)\n };\n\n if (includeInstance) {\n obj.$jspbMessageInstance = msg;\n }\n return obj;\n};\n}\n\n\n/**\n * Deserializes binary data (in protobuf wire format).\n * @param {jspb.ByteSource} bytes The bytes to deserialize.\n * @return {!proto.model.DeviceProto.PriceDetails}\n */\nproto.model.DeviceProto.PriceDetails.deserializeBinary = function(bytes) {\n var reader = new jspb.BinaryReader(bytes);\n var msg = new proto.model.DeviceProto.PriceDetails;\n return proto.model.DeviceProto.PriceDetails.deserializeBinaryFromReader(msg, reader);\n};\n\n\n/**\n * Deserializes binary data (in protobuf wire format) from the\n * given reader into the given message object.\n * @param {!proto.model.DeviceProto.PriceDetails} msg The message object to deserialize into.\n * @param {!jspb.BinaryReader} reader The BinaryReader to use.\n * @return {!proto.model.DeviceProto.PriceDetails}\n */\nproto.model.DeviceProto.PriceDetails.deserializeBinaryFromReader = function(msg, reader) {\n while (reader.nextField()) {\n if (reader.isEndGroup()) {\n break;\n }\n var field = reader.getFieldNumber();\n switch (field) {\n case 1:\n var value = new proto.model.DeviceProto.Prices;\n reader.readMessage(value,proto.model.DeviceProto.Prices.deserializeBinaryFromReader);\n msg.addPrices(value);\n break;\n default:\n reader.skipField();\n break;\n }\n }\n return msg;\n};\n\n\n/**\n * Serializes the message to binary data (in protobuf wire format).\n * @return {!Uint8Array}\n */\nproto.model.DeviceProto.PriceDetails.prototype.serializeBinary = function() {\n var writer = new jspb.BinaryWriter();\n proto.model.DeviceProto.PriceDetails.serializeBinaryToWriter(this, writer);\n return writer.getResultBuffer();\n};\n\n\n/**\n * Serializes the given message to binary data (in protobuf wire\n * format), writing to the given BinaryWriter.\n * @param {!proto.model.DeviceProto.PriceDetails} message\n * @param {!jspb.BinaryWriter} writer\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.model.DeviceProto.PriceDetails.serializeBinaryToWriter = function(message, writer) {\n var f = undefined;\n f = message.getPricesList();\n if (f.length > 0) {\n writer.writeRepeatedMessage(\n 1,\n f,\n proto.model.DeviceProto.Prices.serializeBinaryToWriter\n );\n }\n};\n\n\n/**\n * repeated Prices prices = 1;\n * @return {!Array}\n */\nproto.model.DeviceProto.PriceDetails.prototype.getPricesList = function() {\n return /** @type{!Array} */ (\n jspb.Message.getRepeatedWrapperField(this, proto.model.DeviceProto.Prices, 1));\n};\n\n\n/**\n * @param {!Array} value\n * @return {!proto.model.DeviceProto.PriceDetails} returns this\n*/\nproto.model.DeviceProto.PriceDetails.prototype.setPricesList = function(value) {\n return jspb.Message.setRepeatedWrapperField(this, 1, value);\n};\n\n\n/**\n * @param {!proto.model.DeviceProto.Prices=} opt_value\n * @param {number=} opt_index\n * @return {!proto.model.DeviceProto.Prices}\n */\nproto.model.DeviceProto.PriceDetails.prototype.addPrices = function(opt_value, opt_index) {\n return jspb.Message.addToRepeatedWrapperField(this, 1, opt_value, proto.model.DeviceProto.Prices, opt_index);\n};\n\n\n/**\n * Clears the list making it empty but non-null.\n * @return {!proto.model.DeviceProto.PriceDetails} returns this\n */\nproto.model.DeviceProto.PriceDetails.prototype.clearPricesList = function() {\n return this.setPricesList([]);\n};\n\n\n\n\n\nif (jspb.Message.GENERATE_TO_OBJECT) {\n/**\n * Creates an object representation of this proto.\n * Field names that are reserved in JavaScript and will be renamed to pb_name.\n * Optional fields that are not set will be set to undefined.\n * To access a reserved field use, foo.pb_, eg, foo.pb_default.\n * For the list of reserved names please see:\n * net/proto2/compiler/js/internal/generator.cc#kKeyword.\n * @param {boolean=} opt_includeInstance Deprecated. whether to include the\n * JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @return {!Object}\n */\nproto.model.DeviceProto.Mime_infos.prototype.toObject = function(opt_includeInstance) {\n return proto.model.DeviceProto.Mime_infos.toObject(opt_includeInstance, this);\n};\n\n\n/**\n * Static version of the {@see toObject} method.\n * @param {boolean|undefined} includeInstance Deprecated. Whether to include\n * the JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @param {!proto.model.DeviceProto.Mime_infos} msg The msg instance to transform.\n * @return {!Object}\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.model.DeviceProto.Mime_infos.toObject = function(includeInstance, msg) {\n var f, obj = {\ndesc: jspb.Message.getFieldWithDefault(msg, 1, \"\"),\ntype: jspb.Message.getFieldWithDefault(msg, 2, \"\"),\nsource: jspb.Message.getFieldWithDefault(msg, 3, \"\"),\npurpose: jspb.Message.getFieldWithDefault(msg, 4, \"\")\n };\n\n if (includeInstance) {\n obj.$jspbMessageInstance = msg;\n }\n return obj;\n};\n}\n\n\n/**\n * Deserializes binary data (in protobuf wire format).\n * @param {jspb.ByteSource} bytes The bytes to deserialize.\n * @return {!proto.model.DeviceProto.Mime_infos}\n */\nproto.model.DeviceProto.Mime_infos.deserializeBinary = function(bytes) {\n var reader = new jspb.BinaryReader(bytes);\n var msg = new proto.model.DeviceProto.Mime_infos;\n return proto.model.DeviceProto.Mime_infos.deserializeBinaryFromReader(msg, reader);\n};\n\n\n/**\n * Deserializes binary data (in protobuf wire format) from the\n * given reader into the given message object.\n * @param {!proto.model.DeviceProto.Mime_infos} msg The message object to deserialize into.\n * @param {!jspb.BinaryReader} reader The BinaryReader to use.\n * @return {!proto.model.DeviceProto.Mime_infos}\n */\nproto.model.DeviceProto.Mime_infos.deserializeBinaryFromReader = function(msg, reader) {\n while (reader.nextField()) {\n if (reader.isEndGroup()) {\n break;\n }\n var field = reader.getFieldNumber();\n switch (field) {\n case 1:\n var value = /** @type {string} */ (reader.readString());\n msg.setDesc(value);\n break;\n case 2:\n var value = /** @type {string} */ (reader.readString());\n msg.setType(value);\n break;\n case 3:\n var value = /** @type {string} */ (reader.readString());\n msg.setSource(value);\n break;\n case 4:\n var value = /** @type {string} */ (reader.readString());\n msg.setPurpose(value);\n break;\n default:\n reader.skipField();\n break;\n }\n }\n return msg;\n};\n\n\n/**\n * Serializes the message to binary data (in protobuf wire format).\n * @return {!Uint8Array}\n */\nproto.model.DeviceProto.Mime_infos.prototype.serializeBinary = function() {\n var writer = new jspb.BinaryWriter();\n proto.model.DeviceProto.Mime_infos.serializeBinaryToWriter(this, writer);\n return writer.getResultBuffer();\n};\n\n\n/**\n * Serializes the given message to binary data (in protobuf wire\n * format), writing to the given BinaryWriter.\n * @param {!proto.model.DeviceProto.Mime_infos} message\n * @param {!jspb.BinaryWriter} writer\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.model.DeviceProto.Mime_infos.serializeBinaryToWriter = function(message, writer) {\n var f = undefined;\n f = message.getDesc();\n if (f.length > 0) {\n writer.writeString(\n 1,\n f\n );\n }\n f = message.getType();\n if (f.length > 0) {\n writer.writeString(\n 2,\n f\n );\n }\n f = message.getSource();\n if (f.length > 0) {\n writer.writeString(\n 3,\n f\n );\n }\n f = message.getPurpose();\n if (f.length > 0) {\n writer.writeString(\n 4,\n f\n );\n }\n};\n\n\n/**\n * optional string Desc = 1;\n * @return {string}\n */\nproto.model.DeviceProto.Mime_infos.prototype.getDesc = function() {\n return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, \"\"));\n};\n\n\n/**\n * @param {string} value\n * @return {!proto.model.DeviceProto.Mime_infos} returns this\n */\nproto.model.DeviceProto.Mime_infos.prototype.setDesc = function(value) {\n return jspb.Message.setProto3StringField(this, 1, value);\n};\n\n\n/**\n * optional string Type = 2;\n * @return {string}\n */\nproto.model.DeviceProto.Mime_infos.prototype.getType = function() {\n return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, \"\"));\n};\n\n\n/**\n * @param {string} value\n * @return {!proto.model.DeviceProto.Mime_infos} returns this\n */\nproto.model.DeviceProto.Mime_infos.prototype.setType = function(value) {\n return jspb.Message.setProto3StringField(this, 2, value);\n};\n\n\n/**\n * optional string Source = 3;\n * @return {string}\n */\nproto.model.DeviceProto.Mime_infos.prototype.getSource = function() {\n return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 3, \"\"));\n};\n\n\n/**\n * @param {string} value\n * @return {!proto.model.DeviceProto.Mime_infos} returns this\n */\nproto.model.DeviceProto.Mime_infos.prototype.setSource = function(value) {\n return jspb.Message.setProto3StringField(this, 3, value);\n};\n\n\n/**\n * optional string Purpose = 4;\n * @return {string}\n */\nproto.model.DeviceProto.Mime_infos.prototype.getPurpose = function() {\n return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 4, \"\"));\n};\n\n\n/**\n * @param {string} value\n * @return {!proto.model.DeviceProto.Mime_infos} returns this\n */\nproto.model.DeviceProto.Mime_infos.prototype.setPurpose = function(value) {\n return jspb.Message.setProto3StringField(this, 4, value);\n};\n\n\n\n/**\n * List of repeated fields within this message type.\n * @private {!Array}\n * @const\n */\nproto.model.DeviceProto.MimeDetails.repeatedFields_ = [1];\n\n\n\nif (jspb.Message.GENERATE_TO_OBJECT) {\n/**\n * Creates an object representation of this proto.\n * Field names that are reserved in JavaScript and will be renamed to pb_name.\n * Optional fields that are not set will be set to undefined.\n * To access a reserved field use, foo.pb_, eg, foo.pb_default.\n * For the list of reserved names please see:\n * net/proto2/compiler/js/internal/generator.cc#kKeyword.\n * @param {boolean=} opt_includeInstance Deprecated. whether to include the\n * JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @return {!Object}\n */\nproto.model.DeviceProto.MimeDetails.prototype.toObject = function(opt_includeInstance) {\n return proto.model.DeviceProto.MimeDetails.toObject(opt_includeInstance, this);\n};\n\n\n/**\n * Static version of the {@see toObject} method.\n * @param {boolean|undefined} includeInstance Deprecated. Whether to include\n * the JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @param {!proto.model.DeviceProto.MimeDetails} msg The msg instance to transform.\n * @return {!Object}\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.model.DeviceProto.MimeDetails.toObject = function(includeInstance, msg) {\n var f, obj = {\nmimeInfosList: jspb.Message.toObjectList(msg.getMimeInfosList(),\n proto.model.DeviceProto.Mime_infos.toObject, includeInstance)\n };\n\n if (includeInstance) {\n obj.$jspbMessageInstance = msg;\n }\n return obj;\n};\n}\n\n\n/**\n * Deserializes binary data (in protobuf wire format).\n * @param {jspb.ByteSource} bytes The bytes to deserialize.\n * @return {!proto.model.DeviceProto.MimeDetails}\n */\nproto.model.DeviceProto.MimeDetails.deserializeBinary = function(bytes) {\n var reader = new jspb.BinaryReader(bytes);\n var msg = new proto.model.DeviceProto.MimeDetails;\n return proto.model.DeviceProto.MimeDetails.deserializeBinaryFromReader(msg, reader);\n};\n\n\n/**\n * Deserializes binary data (in protobuf wire format) from the\n * given reader into the given message object.\n * @param {!proto.model.DeviceProto.MimeDetails} msg The message object to deserialize into.\n * @param {!jspb.BinaryReader} reader The BinaryReader to use.\n * @return {!proto.model.DeviceProto.MimeDetails}\n */\nproto.model.DeviceProto.MimeDetails.deserializeBinaryFromReader = function(msg, reader) {\n while (reader.nextField()) {\n if (reader.isEndGroup()) {\n break;\n }\n var field = reader.getFieldNumber();\n switch (field) {\n case 1:\n var value = new proto.model.DeviceProto.Mime_infos;\n reader.readMessage(value,proto.model.DeviceProto.Mime_infos.deserializeBinaryFromReader);\n msg.addMimeInfos(value);\n break;\n default:\n reader.skipField();\n break;\n }\n }\n return msg;\n};\n\n\n/**\n * Serializes the message to binary data (in protobuf wire format).\n * @return {!Uint8Array}\n */\nproto.model.DeviceProto.MimeDetails.prototype.serializeBinary = function() {\n var writer = new jspb.BinaryWriter();\n proto.model.DeviceProto.MimeDetails.serializeBinaryToWriter(this, writer);\n return writer.getResultBuffer();\n};\n\n\n/**\n * Serializes the given message to binary data (in protobuf wire\n * format), writing to the given BinaryWriter.\n * @param {!proto.model.DeviceProto.MimeDetails} message\n * @param {!jspb.BinaryWriter} writer\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.model.DeviceProto.MimeDetails.serializeBinaryToWriter = function(message, writer) {\n var f = undefined;\n f = message.getMimeInfosList();\n if (f.length > 0) {\n writer.writeRepeatedMessage(\n 1,\n f,\n proto.model.DeviceProto.Mime_infos.serializeBinaryToWriter\n );\n }\n};\n\n\n/**\n * repeated Mime_infos mime_infos = 1;\n * @return {!Array}\n */\nproto.model.DeviceProto.MimeDetails.prototype.getMimeInfosList = function() {\n return /** @type{!Array} */ (\n jspb.Message.getRepeatedWrapperField(this, proto.model.DeviceProto.Mime_infos, 1));\n};\n\n\n/**\n * @param {!Array} value\n * @return {!proto.model.DeviceProto.MimeDetails} returns this\n*/\nproto.model.DeviceProto.MimeDetails.prototype.setMimeInfosList = function(value) {\n return jspb.Message.setRepeatedWrapperField(this, 1, value);\n};\n\n\n/**\n * @param {!proto.model.DeviceProto.Mime_infos=} opt_value\n * @param {number=} opt_index\n * @return {!proto.model.DeviceProto.Mime_infos}\n */\nproto.model.DeviceProto.MimeDetails.prototype.addMimeInfos = function(opt_value, opt_index) {\n return jspb.Message.addToRepeatedWrapperField(this, 1, opt_value, proto.model.DeviceProto.Mime_infos, opt_index);\n};\n\n\n/**\n * Clears the list making it empty but non-null.\n * @return {!proto.model.DeviceProto.MimeDetails} returns this\n */\nproto.model.DeviceProto.MimeDetails.prototype.clearMimeInfosList = function() {\n return this.setMimeInfosList([]);\n};\n\n\n/**\n * optional uint64 internationalPid = 1;\n * @return {number}\n */\nproto.model.DeviceProto.prototype.getInternationalpid = function() {\n return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 0));\n};\n\n\n/**\n * @param {number} value\n * @return {!proto.model.DeviceProto} returns this\n */\nproto.model.DeviceProto.prototype.setInternationalpid = function(value) {\n return jspb.Message.setProto3IntField(this, 1, value);\n};\n\n\n/**\n * optional string manufacturerName = 2;\n * @return {string}\n */\nproto.model.DeviceProto.prototype.getManufacturername = function() {\n return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, \"\"));\n};\n\n\n/**\n * @param {string} value\n * @return {!proto.model.DeviceProto} returns this\n */\nproto.model.DeviceProto.prototype.setManufacturername = function(value) {\n return jspb.Message.setProto3StringField(this, 2, value);\n};\n\n\n/**\n * optional string descriptionShort = 3;\n * @return {string}\n */\nproto.model.DeviceProto.prototype.getDescriptionshort = function() {\n return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 3, \"\"));\n};\n\n\n/**\n * @param {string} value\n * @return {!proto.model.DeviceProto} returns this\n */\nproto.model.DeviceProto.prototype.setDescriptionshort = function(value) {\n return jspb.Message.setProto3StringField(this, 3, value);\n};\n\n\n/**\n * optional string descriptionLong = 4;\n * @return {string}\n */\nproto.model.DeviceProto.prototype.getDescriptionlong = function() {\n return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 4, \"\"));\n};\n\n\n/**\n * @param {string} value\n * @return {!proto.model.DeviceProto} returns this\n */\nproto.model.DeviceProto.prototype.setDescriptionlong = function(value) {\n return jspb.Message.setProto3StringField(this, 4, value);\n};\n\n\n/**\n * optional string supplierAltPid = 5;\n * @return {string}\n */\nproto.model.DeviceProto.prototype.getSupplieraltpid = function() {\n return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 5, \"\"));\n};\n\n\n/**\n * @param {string} value\n * @return {!proto.model.DeviceProto} returns this\n */\nproto.model.DeviceProto.prototype.setSupplieraltpid = function(value) {\n return jspb.Message.setProto3StringField(this, 5, value);\n};\n\n\n/**\n * optional string manufacturerPid = 6;\n * @return {string}\n */\nproto.model.DeviceProto.prototype.getManufacturerpid = function() {\n return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 6, \"\"));\n};\n\n\n/**\n * @param {string} value\n * @return {!proto.model.DeviceProto} returns this\n */\nproto.model.DeviceProto.prototype.setManufacturerpid = function(value) {\n return jspb.Message.setProto3StringField(this, 6, value);\n};\n\n\n/**\n * optional string manufacturerTypeDescr = 7;\n * @return {string}\n */\nproto.model.DeviceProto.prototype.getManufacturertypedescr = function() {\n return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 7, \"\"));\n};\n\n\n/**\n * @param {string} value\n * @return {!proto.model.DeviceProto} returns this\n */\nproto.model.DeviceProto.prototype.setManufacturertypedescr = function(value) {\n return jspb.Message.setProto3StringField(this, 7, value);\n};\n\n\n/**\n * optional string supplierPid = 8;\n * @return {string}\n */\nproto.model.DeviceProto.prototype.getSupplierpid = function() {\n return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 8, \"\"));\n};\n\n\n/**\n * @param {string} value\n * @return {!proto.model.DeviceProto} returns this\n */\nproto.model.DeviceProto.prototype.setSupplierpid = function(value) {\n return jspb.Message.setProto3StringField(this, 8, value);\n};\n\n\n/**\n * optional PriceDetails priceDetails = 9;\n * @return {?proto.model.DeviceProto.PriceDetails}\n */\nproto.model.DeviceProto.prototype.getPricedetails = function() {\n return /** @type{?proto.model.DeviceProto.PriceDetails} */ (\n jspb.Message.getWrapperField(this, proto.model.DeviceProto.PriceDetails, 9));\n};\n\n\n/**\n * @param {?proto.model.DeviceProto.PriceDetails|undefined} value\n * @return {!proto.model.DeviceProto} returns this\n*/\nproto.model.DeviceProto.prototype.setPricedetails = function(value) {\n return jspb.Message.setWrapperField(this, 9, value);\n};\n\n\n/**\n * Clears the message field making it undefined.\n * @return {!proto.model.DeviceProto} returns this\n */\nproto.model.DeviceProto.prototype.clearPricedetails = function() {\n return this.setPricedetails(undefined);\n};\n\n\n/**\n * Returns whether this field is set.\n * @return {boolean}\n */\nproto.model.DeviceProto.prototype.hasPricedetails = function() {\n return jspb.Message.getField(this, 9) != null;\n};\n\n\n/**\n * optional UserDefinedExtensions userDefinedExtensions = 10;\n * @return {?proto.model.DeviceProto.UserDefinedExtensions}\n */\nproto.model.DeviceProto.prototype.getUserdefinedextensions = function() {\n return /** @type{?proto.model.DeviceProto.UserDefinedExtensions} */ (\n jspb.Message.getWrapperField(this, proto.model.DeviceProto.UserDefinedExtensions, 10));\n};\n\n\n/**\n * @param {?proto.model.DeviceProto.UserDefinedExtensions|undefined} value\n * @return {!proto.model.DeviceProto} returns this\n*/\nproto.model.DeviceProto.prototype.setUserdefinedextensions = function(value) {\n return jspb.Message.setWrapperField(this, 10, value);\n};\n\n\n/**\n * Clears the message field making it undefined.\n * @return {!proto.model.DeviceProto} returns this\n */\nproto.model.DeviceProto.prototype.clearUserdefinedextensions = function() {\n return this.setUserdefinedextensions(undefined);\n};\n\n\n/**\n * Returns whether this field is set.\n * @return {boolean}\n */\nproto.model.DeviceProto.prototype.hasUserdefinedextensions = function() {\n return jspb.Message.getField(this, 10) != null;\n};\n\n\n/**\n * optional string dividingUnit = 11;\n * @return {string}\n */\nproto.model.DeviceProto.prototype.getDividingunit = function() {\n return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 11, \"\"));\n};\n\n\n/**\n * @param {string} value\n * @return {!proto.model.DeviceProto} returns this\n */\nproto.model.DeviceProto.prototype.setDividingunit = function(value) {\n return jspb.Message.setProto3StringField(this, 11, value);\n};\n\n\n/**\n * optional uint64 knxTeilnehmer = 12;\n * @return {number}\n */\nproto.model.DeviceProto.prototype.getKnxteilnehmer = function() {\n return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 12, 0));\n};\n\n\n/**\n * @param {number} value\n * @return {!proto.model.DeviceProto} returns this\n */\nproto.model.DeviceProto.prototype.setKnxteilnehmer = function(value) {\n return jspb.Message.setProto3IntField(this, 12, value);\n};\n\n\n/**\n * optional string color = 13;\n * @return {string}\n */\nproto.model.DeviceProto.prototype.getColor = function() {\n return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 13, \"\"));\n};\n\n\n/**\n * @param {string} value\n * @return {!proto.model.DeviceProto} returns this\n */\nproto.model.DeviceProto.prototype.setColor = function(value) {\n return jspb.Message.setProto3StringField(this, 13, value);\n};\n\n\n/**\n * optional MimeDetails mimeDetails = 14;\n * @return {?proto.model.DeviceProto.MimeDetails}\n */\nproto.model.DeviceProto.prototype.getMimedetails = function() {\n return /** @type{?proto.model.DeviceProto.MimeDetails} */ (\n jspb.Message.getWrapperField(this, proto.model.DeviceProto.MimeDetails, 14));\n};\n\n\n/**\n * @param {?proto.model.DeviceProto.MimeDetails|undefined} value\n * @return {!proto.model.DeviceProto} returns this\n*/\nproto.model.DeviceProto.prototype.setMimedetails = function(value) {\n return jspb.Message.setWrapperField(this, 14, value);\n};\n\n\n/**\n * Clears the message field making it undefined.\n * @return {!proto.model.DeviceProto} returns this\n */\nproto.model.DeviceProto.prototype.clearMimedetails = function() {\n return this.setMimedetails(undefined);\n};\n\n\n/**\n * Returns whether this field is set.\n * @return {boolean}\n */\nproto.model.DeviceProto.prototype.hasMimedetails = function() {\n return jspb.Message.getField(this, 14) != null;\n};\n\n\n/**\n * optional string Features = 15;\n * @return {string}\n */\nproto.model.DeviceProto.prototype.getFeatures = function() {\n return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 15, \"\"));\n};\n\n\n/**\n * @param {string} value\n * @return {!proto.model.DeviceProto} returns this\n */\nproto.model.DeviceProto.prototype.setFeatures = function(value) {\n return jspb.Message.setProto3StringField(this, 15, value);\n};\n\n\n/**\n * optional google.protobuf.Timestamp InsertedAt = 16;\n * @return {?proto.google.protobuf.Timestamp}\n */\nproto.model.DeviceProto.prototype.getInsertedat = function() {\n return /** @type{?proto.google.protobuf.Timestamp} */ (\n jspb.Message.getWrapperField(this, google_protobuf_timestamp_pb.Timestamp, 16));\n};\n\n\n/**\n * @param {?proto.google.protobuf.Timestamp|undefined} value\n * @return {!proto.model.DeviceProto} returns this\n*/\nproto.model.DeviceProto.prototype.setInsertedat = function(value) {\n return jspb.Message.setWrapperField(this, 16, value);\n};\n\n\n/**\n * Clears the message field making it undefined.\n * @return {!proto.model.DeviceProto} returns this\n */\nproto.model.DeviceProto.prototype.clearInsertedat = function() {\n return this.setInsertedat(undefined);\n};\n\n\n/**\n * Returns whether this field is set.\n * @return {boolean}\n */\nproto.model.DeviceProto.prototype.hasInsertedat = function() {\n return jspb.Message.getField(this, 16) != null;\n};\n\n\n\n/**\n * List of repeated fields within this message type.\n * @private {!Array}\n * @const\n */\nproto.model.DevicesProto.repeatedFields_ = [1];\n\n\n\nif (jspb.Message.GENERATE_TO_OBJECT) {\n/**\n * Creates an object representation of this proto.\n * Field names that are reserved in JavaScript and will be renamed to pb_name.\n * Optional fields that are not set will be set to undefined.\n * To access a reserved field use, foo.pb_, eg, foo.pb_default.\n * For the list of reserved names please see:\n * net/proto2/compiler/js/internal/generator.cc#kKeyword.\n * @param {boolean=} opt_includeInstance Deprecated. whether to include the\n * JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @return {!Object}\n */\nproto.model.DevicesProto.prototype.toObject = function(opt_includeInstance) {\n return proto.model.DevicesProto.toObject(opt_includeInstance, this);\n};\n\n\n/**\n * Static version of the {@see toObject} method.\n * @param {boolean|undefined} includeInstance Deprecated. Whether to include\n * the JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @param {!proto.model.DevicesProto} msg The msg instance to transform.\n * @return {!Object}\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.model.DevicesProto.toObject = function(includeInstance, msg) {\n var f, obj = {\ndevicesList: jspb.Message.toObjectList(msg.getDevicesList(),\n proto.model.DeviceProto.toObject, includeInstance)\n };\n\n if (includeInstance) {\n obj.$jspbMessageInstance = msg;\n }\n return obj;\n};\n}\n\n\n/**\n * Deserializes binary data (in protobuf wire format).\n * @param {jspb.ByteSource} bytes The bytes to deserialize.\n * @return {!proto.model.DevicesProto}\n */\nproto.model.DevicesProto.deserializeBinary = function(bytes) {\n var reader = new jspb.BinaryReader(bytes);\n var msg = new proto.model.DevicesProto;\n return proto.model.DevicesProto.deserializeBinaryFromReader(msg, reader);\n};\n\n\n/**\n * Deserializes binary data (in protobuf wire format) from the\n * given reader into the given message object.\n * @param {!proto.model.DevicesProto} msg The message object to deserialize into.\n * @param {!jspb.BinaryReader} reader The BinaryReader to use.\n * @return {!proto.model.DevicesProto}\n */\nproto.model.DevicesProto.deserializeBinaryFromReader = function(msg, reader) {\n while (reader.nextField()) {\n if (reader.isEndGroup()) {\n break;\n }\n var field = reader.getFieldNumber();\n switch (field) {\n case 1:\n var value = new proto.model.DeviceProto;\n reader.readMessage(value,proto.model.DeviceProto.deserializeBinaryFromReader);\n msg.addDevices(value);\n break;\n default:\n reader.skipField();\n break;\n }\n }\n return msg;\n};\n\n\n/**\n * Serializes the message to binary data (in protobuf wire format).\n * @return {!Uint8Array}\n */\nproto.model.DevicesProto.prototype.serializeBinary = function() {\n var writer = new jspb.BinaryWriter();\n proto.model.DevicesProto.serializeBinaryToWriter(this, writer);\n return writer.getResultBuffer();\n};\n\n\n/**\n * Serializes the given message to binary data (in protobuf wire\n * format), writing to the given BinaryWriter.\n * @param {!proto.model.DevicesProto} message\n * @param {!jspb.BinaryWriter} writer\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.model.DevicesProto.serializeBinaryToWriter = function(message, writer) {\n var f = undefined;\n f = message.getDevicesList();\n if (f.length > 0) {\n writer.writeRepeatedMessage(\n 1,\n f,\n proto.model.DeviceProto.serializeBinaryToWriter\n );\n }\n};\n\n\n/**\n * repeated DeviceProto devices = 1;\n * @return {!Array}\n */\nproto.model.DevicesProto.prototype.getDevicesList = function() {\n return /** @type{!Array} */ (\n jspb.Message.getRepeatedWrapperField(this, proto.model.DeviceProto, 1));\n};\n\n\n/**\n * @param {!Array} value\n * @return {!proto.model.DevicesProto} returns this\n*/\nproto.model.DevicesProto.prototype.setDevicesList = function(value) {\n return jspb.Message.setRepeatedWrapperField(this, 1, value);\n};\n\n\n/**\n * @param {!proto.model.DeviceProto=} opt_value\n * @param {number=} opt_index\n * @return {!proto.model.DeviceProto}\n */\nproto.model.DevicesProto.prototype.addDevices = function(opt_value, opt_index) {\n return jspb.Message.addToRepeatedWrapperField(this, 1, opt_value, proto.model.DeviceProto, opt_index);\n};\n\n\n/**\n * Clears the list making it empty but non-null.\n * @return {!proto.model.DevicesProto} returns this\n */\nproto.model.DevicesProto.prototype.clearDevicesList = function() {\n return this.setDevicesList([]);\n};\n\n\ngoog.object.extend(exports, proto.model);\n","export const enableBatchReducer = (state, action, reducer) => {\n if (Array.isArray(action)) {\n return action.reduce((curState, acc) => {\n return reducer(curState, acc)\n }, state)\n }\n return reducer(state, action)\n}","import v4 from 'node-uuid'\nimport { batchActions } from 'redux-batched-actions'\n\nimport { getCplateMapping, getDeviceList } from '../../availableDevices/duck'\nimport { getEditableProject } from '../../projects/duck'\nimport { addDevice, deleteDevice } from '../device/duck'\nimport { getAllOperationPoints, getIsSocket } from '../duck'\nimport { dereferenceDeviceWithOperationPoint, referenceDeviceWithOperationPoint } from '../operationPoint/duck'\nimport { calculatePossibleDevice } from '../../../logic/calculatePossibleDevice'\n\nexport function calculateTouchProtection(dispatch, getState, touchProtection) {\n let actions = []\n\n const state = getState()\n const project = getEditableProject(state)\n const deviceList = getDeviceList(state)\n\n let devices = deviceList.map(dev => {\n return {\n supplierPid: dev.getSupplierpid(),\n manufacturerTypeDescr: dev.getManufacturertypedescr(),\n features: dev.getFeatures(),\n }\n })\n\n const cPlateMapping = getCplateMapping(state)\n const articleColor = cPlateMapping.find(\n el => el.serie === project.data.serie && el.colorId === project.data.cplateColor\n )?.articleColor\n\n let description = {\n feature: 'EC000125', //Steckdose\n manufacturerTypeDescr: '-' + articleColor,\n filters: [],\n }\n\n const operationPoints = getAllOperationPoints(state)\n operationPoints.forEach(operationPoint => {\n if (operationPoint.devices) {\n operationPoint.devices.forEach(device => {\n if (device) {\n if (getIsSocket(state, device.availableDeviceId)) {\n const curDev = devices.find(el => el.supplierPid === device.availableDeviceId)\n const features = JSON.parse(curDev.features)[0].Feature\n let filters = []\n features.forEach(feature => {\n //Mit erhöhtem Berührungsschutz\n if (feature.Fname === 'EF000389') {\n filters.push({\n Id: feature.Fname,\n Value: `${touchProtection}`,\n })\n } else {\n filters.push({\n Id: feature.Fname,\n Value: feature.Fvalue,\n })\n }\n })\n const newDevices = calculatePossibleDevice(deviceList, [{ ...description, filters }], undefined, project?.data?.serie)\n const newDevice = newDevices[0]\n if (newDevice && curDev.supplierPid !== newDevice.supplierPid) {\n actions.push(deleteDevice(device.id))\n actions.push(dereferenceDeviceWithOperationPoint(operationPoint.id, device.id))\n const deviceId = v4()\n actions.push(addDevice(newDevice.supplierPid, operationPoint.id, deviceId, 'device'))\n actions.push(referenceDeviceWithOperationPoint(operationPoint.id, deviceId))\n }\n }\n }\n })\n }\n })\n\n dispatch(batchActions(actions))\n}\n","import { batchActions } from 'redux-batched-actions'\n\nimport { changeOnPiecelist} from '../device/duck'\nimport { getAllOperationPoints, getIsSocket } from '../duck'\n\nexport function updateOnPiecelist(dispatch, getState, onPiecelist) {\n let actions = []\n\n const state = getState()\n\n const operationPoints = getAllOperationPoints(state)\n operationPoints.forEach(operationPoint => {\n if (operationPoint.devices) {\n operationPoint.devices.forEach(device => {\n if (device) {\n if (!getIsSocket(state, device.availableDeviceId)) {\n actions.push(changeOnPiecelist(device.id, !!onPiecelist))\n }\n }\n })\n }\n })\n\n dispatch(batchActions(actions))\n}\n","import { calculateDeviceForCPlate } from \"./calculateDeviceForCplate\"\nimport { calulatePossibleFrameSizes } from \"./calculateFrame\"\n\nexport const calculateFavorites = (deviceList, designRange, favorites, cplateMapping, frameMapping, additionalData) => {\n let calculatedFavorites = []\n /*if (designRange?.serie && designRange?.frameColor && designRange?.cplateColor) {\n if (frameMapping && cplateMapping && favorites && deviceList.length > 0) {\n const possibleFrames = calulatePossibleFrameSizes(deviceList, designRange.serie, undefined, designRange.frameColor, 'H', frameMapping)\n \n favorites = favorites.filter(favorite => {\n return possibleFrames.find(\n size => size === favorite.data.entities[favorite.data.rootEntityId].devices.length\n )\n })\n \n const articleColor = cplateMapping.find(el => {\n return el.serie === designRange.serie\n && el.colorId === designRange?.cplateColor\n })?.articleColor\n \n if (articleColor) {\n let articleNumbers = []\n favorites.forEach(favorite => {\n if (favorite?.data?.entities) {\n Object.keys(favorite.data.entities).forEach(id => {\n const entity = favorite.data.entities[id]\n const parent = favorite.data.entities[entity.parent]\n \n if (parent && entity.availableDeviceId) {\n if (!articleNumbers.find(el => el.identifier === entity.availableDeviceId)) {\n articleNumbers.push({\n identifier: entity.availableDeviceId,\n type: parent.type === 'operationPoint'\n ? 'einsatz'\n : entity.type === 'device'\n ? 'additionalDevice'\n : entity.position === 'left'\n ? 'wippeLinks'\n : entity.position === 'right'\n ? 'wippeRechts'\n : 'wippe',\n additionalArticles: parent.type !== 'operationPoint'\n && parent.devices\n && Array.isArray(parent.devices)\n ? parent.devices\n .filter(device => device.type === 'device')\n .map(device => device.availableDeviceId)\n : [],\n einsatz: parent.type !== 'operationPoint'\n ? parent.availableDeviceId\n : null,\n })\n }\n }\n })\n \n }\n })\n\n articleNumbers.forEach(article => {\n if (article.type === 'einsatz') {\n article.availableDeviceId = article.identifier.replace('XX', articleColor)\n const originDevice = deviceList.find(el => {\n return el.getManufacturertypedescr() === article.availableDeviceId\n })\n if (originDevice) {\n article.supplierPid = originDevice?.getSupplierpid()\n }\n } else {\n article.availableDeviceId = article.identifier.replace('XX', articleColor)\n const originDevice = deviceList.find(el => {\n return el.getManufacturertypedescr() === article.availableDeviceId\n })\n\n if (originDevice) {\n article.supplierPid = originDevice?.getSupplierpid()\n } else {\n article.availableDeviceId = article.identifier.replace('XX', articleColor)\n const einsatz = deviceList.find(el => {\n return el.getManufacturertypedescr() === article.einsatz\n })\n if (einsatz && article.type.includes('wippe')) {\n const features = JSON.parse(einsatz.getFeatures())\n const possibleDevices = calculateDeviceForCPlate(\n einsatz.getSupplierpid(),\n deviceList,\n features,\n articleColor,\n additionalData,\n article.additionalArticles,\n article.type === 'wippeLinks'\n ? 'left'\n : article.type === 'wippeRechts'\n ? 'right'\n : 'full',\n designRange?.serie\n )\n if (possibleDevices.length > 0) {\n let device = possibleDevices.find(dev => dev.IsDefault) || possibleDevices[0]\n article.supplierPid = device.supplierPid\n } else {\n article.availableDeviceId = article.identifier.replace('XX', articleColor)\n const originDevice = deviceList.find(el => {\n return el.getManufacturertypedescr() === article.availableDeviceId\n })\n article.supplierPid = originDevice?.getSupplierpid()\n }\n }\n }\n }\n })\n\n calculatedFavorites = favorites.map(favorite => {\n if (favorite?.data?.entities) {\n Object.keys(favorite.data.entities).forEach(id => {\n if (favorite.data.entities[id].availableDeviceId) {\n articleNumbers.forEach(articleNumber => {\n if (articleNumber.identifier === favorite.data.entities[id].availableDeviceId) {\n favorite = {\n ...favorite,\n data: {\n ...favorite.data,\n entities: {\n ...favorite.data.entities,\n [id]: {\n ...favorite.data.entities[id],\n availableDeviceId: articleNumber.supplierPid,\n onPiecelist: true\n }\n }\n }\n }\n }\n })\n }\n })\n }\n return favorite\n })\n }\n }\n }*/\n return calculatedFavorites\n}","import v4 from 'node-uuid'\nimport { calculateDeviceForCPlate } from './calculateDeviceForCplate'\nimport { calulatePossibleFrameSizes } from './calculateFrame'\nimport { calculatePossibleDevice } from './calculatePossibleDevice'\nimport { calculateTouchProtectionForTemplates } from './calculateTouchProtection'\n\nexport const calculateTemplates = (\n deviceList,\n designRange,\n designInfomationen,\n calulatedTemplates,\n cplateMapping,\n frameMapping,\n additionalData\n) => {\n let templates = []\n const elementTypes = ['additionalDevice', 'wippe', 'wippeLinks', 'wippeRechts']\n if (designRange?.serie && designRange?.frameColor && designRange?.cplateColor) {\n if (frameMapping && cplateMapping && calulatedTemplates && deviceList.length > 0) {\n const possibleFrames = calulatePossibleFrameSizes(\n deviceList,\n designRange.serie,\n undefined,\n designRange.frameColor,\n 'H',\n frameMapping\n )\n\n calulatedTemplates = calulatedTemplates.filter(template => {\n if (!template?.combination?.length) {\n return false\n }\n if (template?.exclude && designRange?.serie && template.exclude.find(id => id === designRange.serie)) {\n return false\n }\n return possibleFrames.find(size => size === template.combination.length)\n })\n\n const articleColor = cplateMapping.find(el => {\n return el.serie === designRange.serie && el.colorId === designRange?.cplateColor\n })?.articleColor\n\n if (articleColor) {\n let articleNumbers = []\n calulatedTemplates.forEach(template => {\n template.combination.forEach(combination => {\n if (combination.einsatz) {\n if (!articleNumbers.find(el => el.identifier === combination.einsatz)) {\n articleNumbers.push({ identifier: combination.einsatz, type: 'einsatz' })\n }\n }\n\n elementTypes.forEach(id => {\n if (combination[id]) {\n if (!articleNumbers.find(el => el.identifier === combination[id])) {\n articleNumbers.push({ \n identifier: combination[id],\n type: id, \n einsatz: combination.einsatz,\n additionalArticles: combination?.additionalDevice\n ? [combination.additionalDevice]\n : []\n })\n }\n }\n })\n })\n })\n\n articleNumbers.forEach(article => {\n if (article.type === 'einsatz') {\n\n article.availableDeviceId = article.identifier.replaceAll('XX', articleColor)\n\n let originDevice = article.availableDeviceId.split(' || ').reduce((acc, identifier) => {\n if (acc) {\n return acc\n }\n\n const availableDeviceId = identifier.replace('XX', articleColor)\n const dev = deviceList.find(el => {\n return el.getManufacturertypedescr() === availableDeviceId\n })\n\n if (dev) {\n article.availableDeviceId = availableDeviceId\n }\n\n return dev\n }, null)\n \n article.supplierPid = originDevice?.getSupplierpid()\n\n if (!originDevice) {\n const possibleArticle = article.identifier.split('-')[0]\n originDevice = deviceList.find(el => {\n return el.getManufacturertypedescr().includes(`${possibleArticle}-`)\n })\n\n const features = originDevice?.getFeatures() ? JSON.parse(originDevice?.getFeatures()) : null\n if (features) {\n if (features[0]) {\n let filters = []\n const description = {\n feature: features[0].Id,\n manufacturerTypeDescr: '-' + articleColor,\n filters: [],\n }\n const possibleDevices = calculatePossibleDevice(\n deviceList,\n [{ ...description, filters }],\n additionalData,\n designRange?.serie\n )\n\n let bestPossibleDevice = {}\n if (possibleDevices.length > 0) {\n let bestMatches = 0\n possibleDevices.forEach(pDev => {\n let matches = 0\n const pFeatures = JSON.parse(pDev.features)\n pFeatures[0].Feature.forEach(feature => {\n if (\n feature.Fname !== 'EF005474' && //Schutzart (IP)\n feature.Fname !== 'EF004293' && //Schlagfestigkeit\n feature.Fname !== 'EF002442' && //Befestigungsart\n feature.Fname !== 'EF000008' && //Breite\n feature.Fname !== 'EF000040' && //Höhe\n feature.Fname !== 'EF000049' && //Tiefe\n feature.Fname !== 'EF000846' && //Einbaubreite\n feature.Fname !== 'EF000332' && //Einbauhöhe\n feature.Fname !== 'EF009277' //Durchmesser Bohrung (Öffnung)\n ) {\n const matchedFeature = features[0].Feature.find(\n feat =>\n feat.Fname === feature.Fname &&\n feat.Fvalue === feature.Fvalue\n )\n if (matchedFeature) {\n matches++\n }\n }\n })\n\n if (matches > bestMatches) {\n bestPossibleDevice = pDev\n bestMatches = matches\n }\n })\n }\n if (bestPossibleDevice?.supplierPid) {\n article.availableDeviceId = bestPossibleDevice.manufacturerTypeDescr\n article.supplierPid = bestPossibleDevice.supplierPid\n originDevice = deviceList.find(el => {\n return (\n el.getManufacturertypedescr() ===\n bestPossibleDevice.manufacturerTypeDescr\n )\n })\n }\n }\n }\n }\n\n const features = originDevice && JSON.parse(originDevice?.getFeatures())\n\n if (features) {\n if (features[0] && features[0].Id === 'EC000125') { //Steckdose\n article = calculateTouchProtectionForTemplates(\n article,\n deviceList,\n articleColor,\n features[0].Feature,\n designInfomationen.touchProtection,\n additionalData\n )\n } else if (features[0] && features[0].Id === 'EC001264') { //Kommunikationsanschlussdose Kupfer\n let steckverbindung = features[0].Feature.find(el => el.Fname === 'EF002935') //Steckverbindertyp\n if (\n steckverbindung &&\n (steckverbindung.Fvalue === 'EV003197' || //2x RJ45 8(4)\n steckverbindung.Fvalue === 'EV000013' || //RJ45 8(8)\n steckverbindung.Fvalue === 'EV006999') //2x RJ45 8(8)\n ) {\n const description = {\n feature: 'EC001264', //Kommunikationsanschlussdose Kupfer\n filters: [\n {\n Id: 'EF000005', //Zusammenstellung\n Value: 'EV000078', //Basiselement\n },\n {\n Id: 'EF001579', //Geeignet für Anzahl Buchsen/Kupplungen\n Value: `${designInfomationen.dataSockets === 'Simplex' ? 1 : 2}`,\n },\n {\n Id: 'EF002935', //Steckverbindertyp\n //EV003197 2x RJ45 8(4)\n //EV000013 RJ45 8(8)\n //EV006999 2x RJ45 8(8)\n Value: ['EV003197', 'EV000013', 'EV006999'],\n },\n ],\n }\n const possibleDevices = calculatePossibleDevice(deviceList, [description], undefined, designRange?.serie)\n const possibleDevice = possibleDevices[0]\n if (possibleDevice) {\n article.supplierPid = possibleDevice.supplierPid\n const cplates = calculateDeviceForCPlate(\n possibleDevice.supplierPid,\n deviceList,\n JSON.parse(possibleDevice.features),\n articleColor,\n additionalData,\n article.additionalArticles,\n 'full',\n designRange?.serie\n )\n if (cplates?.length > 0) {\n const cplate = cplates.find(el => el.IsDefault) || cplates[0]\n article.wippe = cplate.supplierPid\n }\n }\n }\n } else if (features[0] && features[0].Id === 'EC000439') { //Antennensteckdose\n if (designInfomationen.satSockets === '4-Loch Ankaro') {\n article.supplierPid = 'Ankaro'\n const cplates = calculateDeviceForCPlate(\n article.supplierPid,\n deviceList,\n [{ Id: 'Ankaro' }],\n articleColor,\n additionalData,\n [],\n 'full',\n designRange?.serie\n )\n if (cplates?.length > 0) {\n const cplate = cplates.find(el => el.IsDefault) || cplates[0]\n article.wippe = cplate.supplierPid\n }\n } else if (designInfomationen.satSockets === '4-Loch Hirschmann') {\n article.supplierPid = 'Hirschmann'\n const cplates = calculateDeviceForCPlate(\n article.supplierPid,\n deviceList,\n [{ Id: 'Hirschmann' }],\n articleColor,\n additionalData,\n [],\n 'full',\n designRange?.serie\n )\n if (cplates?.length > 0) {\n const cplate = cplates.find(el => el.IsDefault) || cplates[0]\n article.wippe = cplate.supplierPid\n }\n }\n }\n }\n } else {\n article.availableDeviceId = article.identifier.replace('XX', articleColor)\n const originDevice = deviceList.find(el => {\n return el.getManufacturertypedescr() === article.availableDeviceId\n })\n\n \n\n if (originDevice) {\n article.supplierPid = originDevice?.getSupplierpid()\n } else {\n console.warn(`missing article: ${article.availableDeviceId}`)\n article.availableDeviceId = article.identifier.replace('XX', articleColor)\n const einsatz = deviceList.find(el => {\n return el.getManufacturertypedescr() === article.einsatz\n })\n if (einsatz && article.type.includes('wippe')) {\n const features = JSON.parse(einsatz.getFeatures())\n \n const possibleDevices = calculateDeviceForCPlate(\n einsatz.getSupplierpid(),\n deviceList,\n features,\n articleColor,\n additionalData,\n article.additionalArticles,\n article.type === 'wippeLinks'\n ? 'left'\n : article.type === 'wippeRechts'\n ? 'right'\n : 'full',\n designRange?.serie\n )\n if (possibleDevices.length > 0) {\n let device = possibleDevices.find(dev => dev.IsDefault) || possibleDevices[0]\n article.supplierPid = device.supplierPid\n } else {\n article.availableDeviceId = article.identifier.replace('XX', articleColor)\n const originDevice = deviceList.find(el => {\n return el.getManufacturertypedescr() === article.availableDeviceId\n })\n article.supplierPid = originDevice?.getSupplierpid()\n }\n }\n }\n }\n })\n\n\n templates = calulatedTemplates.filter(template => {\n let chk = template.deviceType === 'both'\n || designInfomationen.deviceType === template.deviceType\n\n template.combination.forEach(comb => {\n let combination = JSON.parse(JSON.stringify(comb))\n let devices = []\n articleNumbers.forEach(articleNumber => {\n if (articleNumber.identifier === combination.einsatz\n || articleNumber.identifier === combination.additionalDevice\n ) {\n if (articleNumber?.supplierPid) {\n devices.push(articleNumber)\n } else {\n chk = false\n }\n } \n })\n\n\n /*chk = chk || devices.reduce((val, dev) => {\n if (dev.type !== 'einsatz') {\n return val\n }\n const additionalDeviceData = additionalData.find(el => el.supplier_pid === dev.supplierPid)\n if (additionalDeviceData && designInfomationen?.deviceType !== undefined) {\n return val\n || ((designInfomationen.deviceType === 'conventional' && !additionalDeviceData.flex)\n || (designInfomationen.deviceType === 'flex' && additionalDeviceData.flex))\n }\n return val || designInfomationen.deviceType === 'conventional'\n }, false)*/\n })\n return chk\n }).map(template => { \n let returnObj = {\n rootEntityId: v4(),\n onStart: template.onStart,\n orientation: template.orientation,\n name: template.name,\n entities: {},\n chk: true,\n }\n\n let operationPoint = {\n id: returnObj.rootEntityId,\n type: 'operationPoint',\n devices: [],\n }\n\n template.combination.forEach(comb => {\n let combination = JSON.parse(JSON.stringify(comb))\n let einsatz = {\n id: v4(),\n parent: operationPoint.id,\n type: 'device',\n subtype: 'device',\n devices: [],\n onPiecelist: true,\n }\n articleNumbers.forEach(articleNumber => {\n if (articleNumber.identifier === combination.einsatz) {\n einsatz.availableDeviceId = articleNumber.supplierPid\n \n if (articleNumber.wippe) {\n combination.wippe = articleNumber.wippe\n }\n }\n })\n\n elementTypes.forEach(id => {\n if (combination[id]) {\n let device = {\n id: v4(),\n parent: einsatz.id,\n type: 'device',\n subtype: id === 'additionalDevice'\n ? 'device'\n : 'cplate',\n position: id === 'wippeLinks'\n ? 'left'\n : id === 'wippeRechts'\n ? 'right'\n : 'full',\n onPiecelist: true,\n }\n \n if (combination[id].includes('2CKA')) {\n device.availableDeviceId = combination[id]\n } else {\n articleNumbers.forEach(articleNumber => {\n if (articleNumber.identifier === combination[id]) {\n device.availableDeviceId = articleNumber.supplierPid\n }\n })\n }\n \n einsatz.devices.push(device.id)\n\n if (!device.availableDeviceId) {\n returnObj.chk = false\n }\n\n returnObj.entities[device.id] = device\n }\n })\n\n returnObj.entities[einsatz.id] = einsatz\n operationPoint.devices.push(einsatz.id)\n })\n returnObj.entities[operationPoint.id] = operationPoint\n \n return returnObj\n }).filter(returnObj => returnObj.chk)\n }\n }\n }\n\n return templates\n}\n","import { calculatePossibleDevice } from './calculatePossibleDevice'\n\nexport const calculateTouchProtectionForTemplates = (\n article,\n deviceList,\n articleColor,\n features,\n touchProtection,\n additionalData\n) => {\n let filters = []\n const description = {\n feature: 'EC000125', //Steckdose\n manufacturerTypeDescr: '-' + articleColor,\n }\n features.forEach(feature => {\n if (feature.Fname === 'EF000389') { //Mit erhöhtem Berührungsschutz\n filters.push({\n Id: feature.Fname,\n Value: `${touchProtection}`,\n })\n } else {\n filters.push({\n Id: feature.Fname,\n Value: feature.Fvalue,\n })\n }\n })\n\n const possibleDevices = calculatePossibleDevice(deviceList, [{ ...description, filters }], additionalData)\n\n const possibleDevice = possibleDevices.find(el => el.supplierPid === article.supplierPid)\n || possibleDevices[0]\n \n if (possibleDevice) {\n article.availableDeviceId = possibleDevice.manufacturerTypeDescr\n article.supplierPid = possibleDevice.supplierPid\n } else {\n filters = [\n {\n Id: 'EF000389', //Mit erhöhtem Berührungsschutz\n Value: `${touchProtection}`,\n }\n ]\n const possibleDevices2 = calculatePossibleDevice(deviceList, [{ ...description, filters }], additionalData)\n\n const possibleDevice2 = possibleDevices2.find(el => el.supplierPid === article.supplierPid)\n \n if (possibleDevice2) {\n article.availableDeviceId = possibleDevice2.manufacturerTypeDescr\n article.supplierPid = possibleDevice2.supplierPid\n } else {\n let bestPossibleDevice = {}\n if (possibleDevices.length > 0) {\n let bestMatches = 0\n possibleDevices2.forEach(pDev => {\n let matches = 0\n const pFeatures = JSON.parse(pDev.features)\n pFeatures[0].Feature.forEach(feature => {\n if (\n feature.Fname !== 'EF005474' && //Schutzart (IP)\n feature.Fname !== 'EF004293' && //Schlagfestigkeit\n feature.Fname !== 'EF002442' && //Befestigungsart\n feature.Fname !== 'EF000008' && //Breite\n feature.Fname !== 'EF000040' && //Höhe\n feature.Fname !== 'EF000049' && //Tiefe\n feature.Fname !== 'EF000846' && //Einbaubreite\n feature.Fname !== 'EF000332' && //Einbauhöhe\n feature.Fname !== 'EF009277' //Durchmesser Bohrung (Öffnung)\n ) {\n const matchedFeature = features.find(\n feat => feat.Fname === feature.Fname && feat.Fvalue === feature.Fvalue\n )\n if (matchedFeature) {\n matches++\n }\n }\n })\n if (matches > bestMatches) {\n bestPossibleDevice = pDev\n bestMatches = matches\n }\n })\n }\n if (bestPossibleDevice?.supplierPid) {\n article.availableDeviceId = bestPossibleDevice.manufacturerTypeDescr\n article.supplierPid = bestPossibleDevice.supplierPid\n }\n }\n }\n\n return article\n}\n","import { Machine, assign } from 'xstate'\n\nconst initialValues = {\n type: 'TYPE_NONE',\n}\n\nexport const calculate = (context, event, actionMeta) => {\n let value = JSON.parse(JSON.stringify(actionMeta.state?.value || initialValues))\n if (event?.payload?.identifier) {\n value[event.payload.identifier] = event.type\n }\n \n let formStatus = {}\n Object.keys(rtrMachine.states).forEach(key => {\n formStatus[key] = {\n open: key === 'type' ? true : false\n }\n })\n\n context = [{\n feature: ['EC010927', 'EC011309'], //EC010927 Raumthermostat oder EC011309 Raumthermostat/Uhrenthermostat\n filters: [\n ],\n additionalFilters: []\n }]\n \n return {\n descriptions: context,\n formStatus\n }\n}\n\nexport const rtrMachine = Machine(\n {\n id: 'rtr',\n type: 'parallel',\n context: {},\n states: {\n type: {\n initial: initialValues.type,\n on: {\n TYPE_NONE: 'type.TYPE_NONE',\n },\n states: {\n TYPE_NONE: {\n entry: ['calculate'],\n },\n },\n },\n },\n },\n {\n actions: {\n calculate: assign(calculate),\n },\n }\n)\n\nexport const possibleRtrClasses = {\n //EC010927 Raumthermostat\n //EC011309 Raumthermostat/Uhrenthermostat\n classes: ['EC010927', 'EC011309'],\n types: {\n 'TYPE_NONE': rtrMachine.initialState?.context?.descriptions,\n }\n}\n\nexport default rtrMachine\n","import { getDateFromProtobuf } from \"../components/availableDevices/duck\"\nexport const checkDeviceForClass = (devices, descriptions) => {\n return devices.filter((device, index) => {\n return checkDevicesForFeatures({features: device.getFeatures()}, descriptions)\n \n })\n}\n\nexport const checkDeviceForColor = (device, descriptions) => {\n if (descriptions[0].manufacturerTypeDescr) {\n if (Array.isArray(descriptions[0].manufacturerTypeDescr)) {\n let chk = false\n descriptions[0].manufacturerTypeDescr.forEach(desc => {\n if (device.manufacturerTypeDescr.includes(desc)) {\n if ((descriptions[0].manufacturerTypeDescr === '-182' && device.manufacturerTypeDescr.includes('-182K'))\n || (descriptions[0].manufacturerTypeDescr === '-212' && device.manufacturerTypeDescr.includes('-212K'))\n || (descriptions[0].manufacturerTypeDescr === '-214' && device.manufacturerTypeDescr.includes('-214K'))\n ) {\n chk = false\n } else if (descriptions[0].manufacturerTypeDescr === '-82' && device.manufacturerTypeDescr.includes('12-82')) {\n chk = false\n } else {\n chk = true\n }\n }\n })\n if (!chk) {\n return false\n }\n } else {\n if (!device.manufacturerTypeDescr.includes(descriptions[0].manufacturerTypeDescr)) {\n return false\n } else {\n if ((descriptions[0].manufacturerTypeDescr === '-182' && device.manufacturerTypeDescr.includes('-182K'))\n || (descriptions[0].manufacturerTypeDescr === '-212' && device.manufacturerTypeDescr.includes('-212K'))\n || (descriptions[0].manufacturerTypeDescr === '-214' && device.manufacturerTypeDescr.includes('-214K'))\n ) {\n return false\n }\n if (descriptions[0].manufacturerTypeDescr === '-82' && device.manufacturerTypeDescr.includes('12-82')) {\n return false\n }\n }\n }\n }\n return true\n} \n\nexport const checkDevicesForFeatures = (device, descriptions) => {\n let chk = false\n\n descriptions.forEach(description => {\n if (Array.isArray(description.feature)) {\n description.feature.forEach(feat => {\n if (device.features.includes(feat)) {\n chk = true\n }\n })\n } else {\n chk = device.features.includes(description.feature)\n }\n })\n return chk\n}\n\nexport const checkDevicesForFeatures2 = (device, descriptions) => {\n let chk = false\n\n descriptions.forEach((description, index) => {\n let chkDevice = false\n if (Array.isArray(description.feature)) {\n description.feature.forEach(feat => {\n if (device.features.includes(feat)) {\n chkDevice = true\n }\n })\n } else {\n chkDevice = device.features.includes(description.feature)\n }\n \n if (chkDevice) {\n let chk1 = true\n description.filters.forEach(filter => {\n if (Array.isArray(filter.Value)) {\n let arrayChk = false\n filter.Value.forEach(value => {\n if (device.features.includes(\n `\"Fname\": \"${filter.Id}\", \"Fvalue\": \"${value}\"`\n )) {\n arrayChk = true\n }\n })\n if (!arrayChk) {\n chk1 = false\n }\n } else {\n if (!device.features.includes(\n `\"Fname\": \"${filter.Id}\", \"Fvalue\": \"${filter.Value}\"`\n )) {\n chk1 = false\n }\n }\n })\n if (chk1) {\n chk = true\n }\n }\n })\n return chk\n}\n\nexport const checkForAdditionalFilters = (device, additionalData, descriptions, serie) => {\n let data = additionalData.find(el => {\n return el.supplier_pid === device.supplierPid\n })\n\n let chk = true\n if (data) {\n if (data.exclude && (data.exclude.all || serie && data.exclude[JSON.stringify(serie)])) {\n chk = false\n }\n }\n \n if (chk === true && descriptions[0].additionalFilters?.length > 0) {\n if (data) {\n descriptions[0].additionalFilters.forEach(key => {\n if (data[key] === \"0\" || data[key] === false || data[key] === undefined) {\n chk = false\n } \n })\n } else {\n chk = false\n }\n\n }\n return chk\n}\n\nexport const calculatePossibleDevice = (deviceList, descriptions, additionalData = [], serie = null) => {\n let devices = deviceList.map(dev => {\n return {\n supplierPid: dev.getSupplierpid(),\n manufacturerTypeDescr: dev.getManufacturertypedescr(),\n features: dev.getFeatures(),\n date: getDateFromProtobuf(dev.getInsertedat())\n }\n })\n\n\n if (descriptions && descriptions.length > 0) {\n devices = devices.filter(device => {\n let chk = checkDeviceForColor(device, descriptions)\n\n if (!chk) {\n return false\n }\n\n return checkDevicesForFeatures(device, descriptions)\n })\n\n devices = devices.filter(device => {\n return checkDevicesForFeatures2(device, descriptions)\n })\n\n if (additionalData && Array.isArray(additionalData) && additionalData.length > 0) {\n devices = devices.filter(device => {\n return checkForAdditionalFilters(device, additionalData, descriptions, serie)\n })\n }\n }\n return devices\n}","import v4 from 'node-uuid'\nimport omit from 'lodash/omit'\nimport {batchActions} from 'redux-batched-actions'\nimport {buildRoomFloorReference} from '../floor/duck'\nimport {\n getEntityResolved, setConfigValue,\n} from '../duck'\nimport {generateDeleteSequence} from '../helpers/index'\n\n// Actions\n//\nexport const ADD_ROOM = 'raumplaner/entities/ROOM/ADD'\nexport const CLONE_ROOM = 'raumplaner/entities/ROOM/CLONE'\nexport const REMOVE_ROOM = 'raumplaner/entities/ROOM/REMOVE'\nexport const ROOM_REFERENCE_OPERATION_POINT = 'raumplaner/entities/ROOM/REFERENCE_OPERATION_POINT'\nexport const ROOM_DEREFERENCE_OPERATION_POINT = 'raumplaner/entities/ROOM/DEREFERENCE_OPERATION_POINT'\n\n// Reducer\n//\nexport const roomInitialState = {\n type: 'room',\n id: null,\n parent: null,\n label: null,\n config: [],\n operationPoints: [],\n}\n\nfunction reducer(state = roomInitialState, action) {\n let operationPointIndex\n switch (action.type) {\n case CLONE_ROOM:\n return {\n ...state,\n id: action.roomId,\n parent: action.floorId,\n operationPoints: roomInitialState.operationPoints,\n }\n case ADD_ROOM:\n return {\n ...state,\n id: action.roomId,\n parent: action.floorId,\n }\n case ROOM_REFERENCE_OPERATION_POINT:\n return {\n ...state,\n operationPoints: [...state.operationPoints, action.operationPointId],\n }\n case ROOM_DEREFERENCE_OPERATION_POINT:\n operationPointIndex = state.operationPoints.indexOf(action.operationPointId)\n return {\n ...state,\n operationPoints: [...state.operationPoints.slice(0, operationPointIndex), ...state.operationPoints.slice(operationPointIndex + 1)],\n }\n default:\n return state\n }\n}\n\nexport default function roomListReducer(state = {byId: {}, allIds: []}, action) {\n let allIdIndex\n switch (action.type) {\n case CLONE_ROOM:\n return {\n ...state,\n byId: {\n ...state.byId,\n [action.roomId]: reducer(state.byId[action.originRoomId], action),\n },\n allIds: [...state.allIds, action.roomId],\n }\n case ADD_ROOM:\n return {\n ...state,\n byId: {\n ...state.byId,\n [action.roomId]: reducer(state.byId[action.roomId], action),\n },\n allIds: [...state.allIds, action.roomId],\n }\n case REMOVE_ROOM: {\n allIdIndex = state.allIds.indexOf(action.roomId)\n return {\n ...state,\n byId: omit(state.byId, [action.roomId]),\n allIds: [...state.allIds.slice(0, allIdIndex), ...state.allIds.slice(allIdIndex + 1)],\n }\n }\n case ROOM_REFERENCE_OPERATION_POINT:\n case ROOM_DEREFERENCE_OPERATION_POINT:\n return {\n ...state,\n byId: {\n ...state.byId,\n [action.roomId]: reducer(state.byId[action.roomId], action),\n },\n }\n default:\n return state\n }\n}\n\n// Action Creators\n//\nexport const addRoom = (floorId, roomId) => {\n return {\n type: ADD_ROOM,\n roomId,\n floorId,\n }\n}\n\nexport const createRoom = (\n floorId,\n roomId = v4(),\n serie,\n frameColor,\n cPlateColor,\n) => {\n const sequence = [\n addRoom(floorId, roomId),\n buildRoomFloorReference(floorId, roomId),\n ]\n\n if (serie) {\n sequence.push(setConfigValue(roomId, {type: 'serie', value: serie}))\n }\n\n if (frameColor) {\n setConfigValue(roomId, {type: 'frameColor', value: frameColor})\n }\n\n if (cPlateColor) {\n setConfigValue(roomId, {type: 'cplateColor', value: cPlateColor})\n }\n\n return batchActions(sequence)\n}\n\nexport const deleteRoom = roomId => {\n return {\n type: REMOVE_ROOM,\n roomId,\n }\n}\n\nexport const removeRoom = (room) => {\n return (dispatch, getState) => {\n if (!room.parent.hasOwnProperty('id')) {\n room = getEntityResolved(getState(), room.id)\n }\n return dispatch(generateDeleteSequence(getState(), room, 0))\n }\n}\n\nexport const referenceOperationPointWithRoom = (roomId, operationPointId) => {\n return {\n type: ROOM_REFERENCE_OPERATION_POINT,\n roomId,\n operationPointId,\n }\n}\n\nexport const dereferenceOperationPointWithRoom = (roomId, operationPointId) => {\n return {\n type: ROOM_DEREFERENCE_OPERATION_POINT,\n roomId,\n operationPointId,\n }\n}\n\n\nexport const buildOperationPointRoomReference = (roomId, OperationPointId) => {\n return referenceOperationPointWithRoom(roomId, OperationPointId)\n}\n\nexport const removeOperationPointRoomReference = (roomId, OperationPointId) => {\n return dereferenceOperationPointWithRoom(roomId, OperationPointId)\n}\n\nexport const copyRoom = (floorId, originRoomId, roomId = v4()) => {\n return {\n type: CLONE_ROOM,\n floorId,\n originRoomId,\n roomId,\n }\n}\n\nexport const cloneRoom = (floorId, originRoomId, roomId = v4()) => {\n return batchActions([copyRoom(floorId, originRoomId, roomId), buildRoomFloorReference(floorId, roomId)])\n}\n","import { dehydrate, hydrate } from 'react-query/hydration'\nimport { FETCH_CENTRALPLATE, FETCH_IMAGE } from '../components/api'\n\nexport async function persistQueryClient({ queryClient, persistor, maxAge = 1000 * 60 * 60 * 24, buster = '' }) {\n if (typeof window !== 'undefined') {\n // Subscribe to changes\n const saveClient = () => {\n const persistClient = {\n buster,\n timestamp: Date.now(),\n clientState: dehydrate(queryClient),\n }\n\n persistor.persistClient(persistClient)\n }\n\n // Attempt restore\n try {\n const persistedClient = await persistor.restoreClient()\n\n if (persistedClient) {\n if (persistedClient.timestamp) {\n const expired = Date.now() - persistedClient.timestamp > maxAge\n const busted = persistedClient.buster !== buster\n if (expired || busted) {\n persistor.removeClient()\n } else {\n hydrate(queryClient, persistedClient.clientState)\n }\n } else {\n persistor.removeClient()\n }\n }\n } catch (err) {\n persistor.removeClient()\n }\n\n // Subscribe to changes in the query cache to trigger the save\n queryClient.getQueryCache().subscribe(saveClient)\n }\n}\n\nexport function createLocalStoragePersistor({\n localStorageKey = `REACT_QUERY_OFFLINE_CACHE`,\n throttleTime = 1000,\n} = {}) {\n if (typeof localStorage !== 'undefined') {\n return {\n persistClient: throttle(persistedClient => {\n const filteredQueries = persistedClient.clientState.queries.filter(query => {\n const key = query.queryKey\n if (Array.isArray(key)) {\n return !key.includes(FETCH_IMAGE) && !key.includes(FETCH_CENTRALPLATE)\n } else {\n return key !== FETCH_IMAGE && !key.includes(FETCH_CENTRALPLATE)\n }\n })\n\n const filteredClient = {\n ...persistedClient,\n clientState: {\n ...persistedClient.clientState,\n queries: filteredQueries,\n }\n }\n\n localStorage.setItem(localStorageKey, JSON.stringify(filteredClient))\n }, throttleTime),\n restoreClient: () => {\n const cacheString = localStorage.getItem(localStorageKey)\n\n if (!cacheString) {\n return\n }\n\n return JSON.parse(cacheString)\n },\n removeClient: () => {\n localStorage.removeItem(localStorageKey)\n },\n }\n }\n\n return {\n persistClient: () => {},\n restoreClient: () => {},\n removeClient: () => {},\n }\n}\n\nfunction throttle(func, wait = 100) {\n let timer = null\n\n return function(...args) {\n if (timer === null) {\n timer = setTimeout(() => {\n func(...args)\n timer = null\n }, wait)\n }\n }\n}\n","import { QueryClient } from 'react-query'\nimport { persistQueryClient, createLocalStoragePersistor } from './persistQueryClient'\n\nexport const queryClient = new QueryClient({\n defaultOptions: {\n queries: {\n cacheTime: 1000 * 60 * 60 * 24, // 24 hours\n },\n },\n})\n\nconst localStoragePersistor = createLocalStoragePersistor({\n localStorageKey: `RAUMPLANER_QUERY_OFFLINE_CACHE_${process.env.NODE_ENV.toUpperCase()}`\n})\n\npersistQueryClient({\n queryClient,\n persistor: localStoragePersistor,\n})\n","import {v4} from 'node-uuid'\nimport {batchActions} from 'redux-batched-actions'\nimport {\n copyFloor,\n deleteFloor,\n dereferenceRoomWithFloor,\n referenceRoomWithFloor,\n setActiveRoom,\n} from '../floor/duck'\nimport {\n copyRoom,\n deleteRoom,\n referenceOperationPointWithRoom,\n dereferenceOperationPointWithRoom,\n} from '../room/duck'\nimport {\n copyOperationPoint,\n deleteOperationPoint,\n dereferenceDeviceWithOperationPoint,\n dereferenceFrameWithOperationPoint,\n getOrientation,\n referenceDeviceWithOperationPoint,\n referenceFrameWithOperationPoint,\n} from '../operationPoint/duck'\nimport {\n addFrameToOpertaionPoint,\n copyDevice,\n deleteDevice,\n} from '../device/duck'\nimport {\n entityAttributes,\n} from '../duck'\nimport {\n dereferenceFloorWithBuilding,\n referenceFloorWithBuilding,\n setActiveFloor,\n} from '../building/duck'\nimport { getEditableProject } from '../../projects/duck'\nimport { getDeviceList, getFrameMapping } from '../../availableDevices/duck'\nimport { calculateFrame } from '../../../logic/calculateFrame'\n\nexport function generateCloneSequence(state, entity, parentId, batch = 1, layer = 0, targetEntityId) {\n parentId = parentId || entity.parent.id || entity.parent\n let originSubId = entity.id\n let sequence = []\n for (let i = 0; i < batch; i++) {\n const newId = i === 0 && targetEntityId ? targetEntityId : v4()\n if (entity.parent) {\n switch (entity.parent.type + '.' + entity.type) {\n case 'building.floor':\n sequence.push(copyFloor(parentId, originSubId, newId))\n sequence.push(referenceFloorWithBuilding(parentId, newId))\n sequence.push(setActiveFloor(parentId, newId))\n break\n case 'floor.room':\n sequence.push(copyRoom(parentId, originSubId, newId, entity.position))\n sequence.push(referenceRoomWithFloor(parentId, newId))\n sequence.push(setActiveRoom(parentId, newId))\n break\n case 'room.operationPoint':\n sequence.push(copyOperationPoint(parentId, originSubId, newId))\n sequence.push(referenceOperationPointWithRoom(parentId, newId))\n break\n case 'operationPoint.device':\n sequence.push(copyDevice(parentId, originSubId, newId))\n sequence.push(referenceDeviceWithOperationPoint(parentId, newId))\n break\n case 'operationPoint.frame':\n sequence.push(copyDevice(parentId, originSubId, newId))\n sequence.push(referenceFrameWithOperationPoint(parentId, newId))\n break\n case 'device.device':\n case 'device.cplate':\n sequence.push(copyDevice(parentId, originSubId, newId))\n sequence.push(referenceDeviceWithOperationPoint(parentId, newId))\n break\n default:\n /*eslint-disable no-undef,no-console */\n if (process.env === 'dev') {\n console.warn('deviceType unhandled: ' + entity.parent.type + '.' + entity.type) //eslint-disable-line\n }\n /*eslint-enable no-undef,no-console */\n break\n }\n }\n\n for (let x = 0; x < entityAttributes.length; x++) {\n let entityAttribute = entityAttributes[x]\n if (entityAttribute === 'frame') {\n if (entity.hasOwnProperty(entityAttribute) && entity[entityAttribute]) {\n let subSequence = generateCloneSequence(state, entity[entityAttribute], newId, 1, layer + 1)\n sequence = sequence.concat(subSequence)\n }\n } else if (entity.hasOwnProperty(entityAttribute) && entity[entityAttribute].length > 0) {\n //eslint-disable-next-line no-loop-func\n entity[entityAttribute].map(subEntity => {\n let subSequence = generateCloneSequence(state, subEntity, newId, 1, layer + 1)\n sequence = sequence.concat(subSequence)\n return subEntity\n })\n }\n }\n }\n\n return sequence\n}\n\nexport const generateDeleteSequence = (state, entity, layer = 0) => {\n let actionSequence = []\n let subSequence\n\n const project = getEditableProject(state)\n const deviceList = getDeviceList(state)\n const frameMapping = getFrameMapping(state)\n \n switch (entity.type) {\n case 'floor':\n if (entity.rooms) {\n entity.rooms.map(room => {\n subSequence = generateDeleteSequence(state, room, layer + 1)\n actionSequence = actionSequence.concat(subSequence)\n return room\n })\n }\n actionSequence.push(dereferenceFloorWithBuilding(entity.parent.id, entity.id))\n actionSequence.push(deleteFloor(entity.id))\n break\n case 'room':\n if (entity.operationPoints) {\n entity.operationPoints.map(operationPoint => {\n subSequence = generateDeleteSequence(state, operationPoint, layer + 1)\n actionSequence = actionSequence.concat(subSequence)\n return operationPoint\n })\n }\n actionSequence.push(dereferenceRoomWithFloor(entity.parent.id, entity.id))\n actionSequence.push(deleteRoom(entity.id))\n break\n case 'operationPoint':\n if (entity.frame) {\n subSequence = generateDeleteSequence(state, entity.frame, layer + 1)\n actionSequence = actionSequence.concat(subSequence)\n }\n if (entity.devices) {\n entity.devices.map(device => {\n subSequence = generateDeleteSequence(state, device, layer + 1)\n actionSequence = actionSequence.concat(subSequence)\n return device\n })\n }\n actionSequence.push(dereferenceOperationPointWithRoom(entity.parent.id, entity.id))\n actionSequence.push(deleteOperationPoint(entity.id))\n break\n case 'device':\n case 'cplate':\n case 'frame':\n if (entity.devices) {\n entity.devices.map(device => {\n subSequence = generateDeleteSequence(state, device, layer + 1)\n actionSequence = actionSequence.concat(subSequence)\n return device\n })\n }\n actionSequence.push(dereferenceDeviceWithOperationPoint(entity.parent.id, entity.id))\n actionSequence.push(deleteDevice(entity.id))\n if (entity?.parent?.type === 'operationPoint' && entity.type === 'device' && layer === 0) {\n const frame = calculateFrame(\n deviceList,\n project?.data?.serie,\n entity?.parent?.devices.length ? entity?.parent.devices.length - 1 : 0,\n project?.data?.frameColor,\n getOrientation(entity?.parent),\n frameMapping\n )\n\n if (entity?.parent?.frame) {\n actionSequence.push(dereferenceFrameWithOperationPoint(entity.parent.id, entity.parent.frame))\n actionSequence.push(deleteDevice(entity.parent.frame))\n }\n\n if (frame) {\n actionSequence.push(addFrameToOpertaionPoint(frame ? frame.supplierPid : null, entity?.parent?.id))\n }\n }\n break\n default:\n break\n }\n if (layer === 0) {\n return batchActions(actionSequence)\n }\n\n return actionSequence\n}\n","import React, {lazy, Suspense, useEffect} from 'react'\nimport { HashRouter as Router } from 'react-router-dom'\n\nimport { ThemeProvider } from '@qmarketing/react-component-library'\n\nimport {IntlProvider} from 'react-intl';\n\nimport { gsap, CSSPlugin } from 'gsap/all'\n\nimport { ReactQueryDevtools } from 'react-query/devtools'\nimport { QueryClientProvider } from 'react-query'\n\n//Redux\nimport configureStore from './redux/store/configureStore'\nimport { Provider } from 'react-redux';\n\n//Toastify\nimport { ToastContainer } from 'react-toastify';\n\nimport { PersistGate } from 'redux-persist/integration/react';\n\nimport CircularProgress from '@material-ui/core/CircularProgress'\n\nimport './assets/css/slider/slick.css'\nimport './assets/css/slider/slick-theme.css'\nimport {queryClient} from './vendor/queryClient'\nimport messages_de from './assets/translations/de-DE.json';\n\nconst Layout = lazy(() => import('./components/layout'))\n\nconst messages = {\n de: messages_de,\n}\nconst language = 'de'\n\nconst formats = {\n number: {\n de: {\n style: 'currency',\n currency: 'EUR'\n }\n }\n};\n\ngsap.registerPlugin(CSSPlugin)\n\n\nexport default function App() {\n const {store, persistor} = configureStore({})\n \n useEffect(() => {\n const updateChannel = new BroadcastChannel('precache-channel');\n updateChannel.addEventListener('message', event => {\n window.location.reload();\n });\n }, [])\n \n return (\n
\n \n \n \n \n {\n if (err.code === \"MISSING_TRANSLATION\") {\n console.warn(\"Missing translation\", err.message);\n return;\n }\n throw err;\n }}\n >\n \n \n }>\n \n \n \n \n \n \n \n \n \n
\n )\n}\n","import React from 'react';\nimport ReactDOM from 'react-dom';\n//Toastify\nimport 'react-toastify/dist/ReactToastify.css';\n\nimport './index.css';\nimport App from './App';\n\nReactDOM.render(, document.getElementById('root'));\n","import { getEditableProject } from '../../components/projects/duck'\nimport { fetchUpdateProject, getIsLoggedIn } from '../../components/api'\nimport { getAllEntities } from '../../components/entities/duck'\n\nexport const updateProject = store => next => action => {\n let result = next(action)\n let actions = getActions(action)\n const isLoggedIn = getIsLoggedIn()\n const project = getEditableProject(store.getState())\n const entities = getAllEntities(store.getState())\n\n\n if (isLoggedIn && project?.ID !== 'local') {\n if (\n actions.find(\n action => action.type.includes('raumplaner/entities') || action.type.includes('raumplaner/projects')\n )\n ) {\n fetchUpdateProject(project, entities)\n }\n }\n return result\n}\n\nexport default updateProject\n\nconst getActions = action => {\n let actions = []\n if (action.type === 'BATCHING_REDUCER.BATCH') {\n action.payload.map(action => {\n actions = actions.concat(getActions(action))\n return null\n })\n } else {\n actions.push(action)\n }\n return actions\n}\n","import { createStore, compose, applyMiddleware } from 'redux';\nimport thunkMiddleware from 'redux-thunk';\nimport { persistReducer, persistStore } from 'redux-persist';\nimport storage from 'redux-persist/lib/storage'; // defaults to localStorage for web\nimport reducer from '../rootReducer';\nimport * as Sentry from '@sentry/react'; \nimport createSentryMiddleware from 'redux-sentry-middleware';\nimport updateProject from '../middleware/updateProject';\n\n// #region createStore : enhancer\nconst enhancer = compose(applyMiddleware(\n thunkMiddleware,\n createSentryMiddleware(Sentry, {\n // Optionally pass some options here.\n }),\n updateProject,\n));\n// #endregion\n\n// #region persisted reducer\nconst persistConfig = {\n key: 'root',\n version: 1,\n storage,\n migrate: (state) => {\n return Promise.resolve(state)\n },\n blacklist: ['availableDevices', 'favorites']\n};\n\nconst persistedReducer = persistReducer(persistConfig, reducer);\n// #endregion\n\n// #region store initialization\nexport default function configureStore(initialState) {\n const store = createStore(persistedReducer, initialState, enhancer);\n const persistor = persistStore(store);\n return { store, persistor };\n}\n// #endregion\n","import v4 from 'node-uuid'\nimport last from 'lodash/last'\nimport omit from 'lodash/omit'\nimport {batchActions} from 'redux-batched-actions'\n\nimport {buildFloorBuildingReference} from '../building/duck'\nimport {generateDeleteSequence} from '../helpers'\nimport {createRoom} from '../room/duck'\nimport { setConfigValue } from '../duck'\n\n// Action Types\n//\nexport const ADD_FLOOR = 'raumplaner/entities/FLOOR/ADD'\nexport const CLONE_FLOOR = 'raumplaner/entities/FLOOR/CLONE'\nexport const REMOVE_FLOOR = 'raumplaner/entities/FLOOR/REMOVE'\n\nexport const FLOOR_REFERENCE_ROOM = 'raumplaner/entities/FLOOR/REFERENCE_ROOM'\nexport const FLOOR_DEREFERENCE_ROOM = 'raumplaner/entities/FLOOR/DEREFERENCE_ROOM'\n\nexport const SET_ACTIVE_ROOM = 'raumplaner/entities/FLOOR/SET_ACTIVE_ROOM'\n\n// Reducer\n//\nexport const floorInitialState = {\n type: 'floor',\n id: null,\n label: null,\n parent: null,\n rooms: [],\n config: [],\n activeRoom: null,\n}\n\nfunction reducer(state = floorInitialState, action) {\n let roomIndex\n let rooms\n switch (action.type) {\n case CLONE_FLOOR:\n return {\n ...state,\n id: action.floorId,\n parent: action.buildingId,\n rooms: floorInitialState.rooms,\n activeRoom: floorInitialState.activeRoom,\n }\n case ADD_FLOOR:\n return {\n ...state,\n id: action.floorId,\n parent: action.buildingId,\n }\n case FLOOR_REFERENCE_ROOM:\n return {\n ...state,\n rooms: [...state.rooms, action.roomId],\n }\n case FLOOR_DEREFERENCE_ROOM:\n roomIndex = state.rooms.indexOf(action.roomId)\n rooms = [...state.rooms.slice(0, roomIndex), ...state.rooms.slice(roomIndex + 1)]\n return {\n ...state,\n rooms: rooms,\n activeRoom: rooms[roomIndex] ? rooms[roomIndex] : last(rooms),\n }\n case SET_ACTIVE_ROOM:\n return {\n ...state,\n activeRoom: action.roomId,\n }\n default:\n return state\n }\n}\n\nexport default function floorListReducer(state = {byId: {}, allIds: []}, action) {\n let allIdIndex\n switch (action.type) {\n case CLONE_FLOOR:\n return {\n ...state,\n byId: {\n ...state.byId,\n [action.floorId]: reducer(state.byId[action.originFloorId], action),\n },\n allIds: [...state.allIds, action.floorId],\n }\n case ADD_FLOOR:\n return {\n ...state,\n byId: {\n ...state.byId,\n [action.floorId]: reducer(state.byId[action.floorId], action),\n },\n allIds: [...state.allIds, action.floorId],\n }\n //absolute pass\n case FLOOR_REFERENCE_ROOM:\n case FLOOR_DEREFERENCE_ROOM:\n case SET_ACTIVE_ROOM:\n return {\n ...state,\n byId: {\n ...state.byId,\n [action.floorId]: reducer(state.byId[action.floorId], action),\n },\n }\n case REMOVE_FLOOR:\n allIdIndex = state.allIds.indexOf(action.floorId)\n return {\n ...state,\n byId: omit(state.byId, [action.floorId]),\n allIds: [...state.allIds.slice(0, allIdIndex), ...state.allIds.slice(allIdIndex + 1)],\n }\n default:\n return state\n }\n}\n\n// Action Creators\n//\nexport const addFloor = (buildingId, floorId) => {\n return {\n type: ADD_FLOOR,\n floorId,\n buildingId,\n }\n}\n\nexport const deleteFloor = floorId => {\n return {\n type: REMOVE_FLOOR,\n floorId,\n }\n}\n\nexport const removeFloor = floor => {\n return (dispatch, getState) => {\n return dispatch(generateDeleteSequence(getState(), floor, 0, []))\n }\n}\n\nexport const createFloorWithRoom = (\n buildingId,\n floorId = v4(),\n roomId = v4(),\n serie,\n frameColor,\n cPlateColor,\n) => {\n const sequence = [\n createFloor(buildingId, floorId, serie, frameColor, cPlateColor),\n createRoom(floorId, roomId, serie, frameColor, cPlateColor),\n ]\n\n return batchActions(sequence)\n}\n\nexport const createFloor = (\n buildingId,\n floorId = v4(),\n serie,\n frameColor,\n cPlateColor,\n) => {\n const sequence = [\n addFloor(buildingId, floorId),\n buildFloorBuildingReference(buildingId, floorId),\n ]\n\n if (serie) {\n sequence.push(setConfigValue(floorId, {type: 'serie', value: serie}))\n }\n\n if (frameColor) {\n setConfigValue(floorId, {type: 'frameColor', value: frameColor})\n }\n\n if (cPlateColor) {\n setConfigValue(floorId, {type: 'cplateColor', value: cPlateColor})\n }\n\n return batchActions(sequence)\n}\n\nexport const referenceRoomWithFloor = (floorId, roomId) => {\n return {\n type: FLOOR_REFERENCE_ROOM,\n floorId,\n roomId,\n }\n}\n\nexport const dereferenceRoomWithFloor = (floorId, roomId) => {\n return {\n type: FLOOR_DEREFERENCE_ROOM,\n floorId,\n roomId,\n }\n}\n\nexport const setActiveRoom = (floorId, roomId) => {\n return {\n type: SET_ACTIVE_ROOM,\n floorId,\n roomId,\n }\n}\n\nexport const buildRoomFloorReference = (floorId, roomId) => {\n if (!floorId) {\n return batchActions([])\n }\n\n return batchActions([referenceRoomWithFloor(floorId, roomId), setActiveRoom(floorId, roomId)])\n}\n\nexport const removeRoomFloorReference = (floorId, roomId) => {\n return dereferenceRoomWithFloor(floorId, roomId)\n}\nexport const copyFloor = (buildingId, originFloorId, floorId = v4()) => {\n return {\n type: CLONE_FLOOR,\n buildingId,\n originFloorId,\n floorId,\n }\n}\n\nexport const cloneFloor = (buildingId, originFloorId, floorId = v4()) => {\n const sequence = [copyFloor(buildingId, originFloorId, floorId)]\n return batchActions(sequence)\n}\n","import Axios from 'axios'\nimport Cookies from 'js-cookie'\nimport { normalize, schema } from 'normalizr'\nimport { createSelector } from 'reselect'\nimport { toast } from 'react-toastify'\nimport { queryClient } from '../../vendor/queryClient'\nimport etimDB from '../../indexedDB/etimDB'\n\nexport const FETCH_SERIES = 'raumplaner/api/SERIES'\nexport const FETCH_COLORS = 'raumplaner/api/COLORS'\nexport const FETCH_FRAMEMAPPING = 'raumplaner/api/FRAMEMAPPING'\nexport const FETCH_CPLATEMAPPING = 'raumplaner/api/CPLATEMAPPING'\nexport const FETCH_CENTRALPLATE = 'raumplaner/api/CENTRALPLATE'\nexport const FETCH_CALCULATED_DATA = 'raumplaner/api/CALCULATED_DATA'\nexport const FETCH_FAVORITES = 'raumplaner/api/FAVORITES'\nexport const FETCH_DEVICES_PROTO = 'raumplaner/api/DEVICES_PROTO'\nexport const FETCH_USER_DATA = 'raumplaner/api/USER_DATA'\nexport const FETCH_IMAGE = 'raumplaner/api/FETCH_IMAGE'\nexport const FETCH_FRAME = 'raumplaner/api/FETCH_FRAME'\nexport const FETCH_FRAMEPOSITIONS = 'raumplaner/api/FETCH_FRAMEPOSITIONS'\nexport const FETCH_SYNONYMS = 'raumplaner/api/FETCH_SYNONYMS'\nexport const FETCH_PROJECTS = 'raumplaner/api/FETCH_PROJECTS'\nexport const FETCH_PROJECT = 'raumplaner/api/FETCH_PROJECT'\nexport const FETCH_GLOBAL_SETTINGS = 'raumplaner/api/FETCH_GLOBAL_SETTINGS'\nexport const FETCH_DESIGN_CHANGE_SPECIALTIES = 'raumplaner/api/FETCH_DESIGN_CHANGE_SPECIALTIES'\nexport const FETCH_DEVICE_CLASSES = 'raumplaner/api/FETCH_DEVICE_CLASSES'\nexport const FETCH_DEVICE_FEATURES = 'raumplaner/api/FETCH_DEVICE_FEATURES'\nexport const FETCH_DEVICE_VALUES = 'raumplaner/api/FETCH_DEVICE_VALUES'\n\nexport const getQueryCache = queryKey => {\n return queryClient.getQueryData(queryKey)\n}\n\nexport const getIsQueryFetching = queryKey => {\n return queryClient.getQueryState(queryKey)\n}\n\nexport const getIsLoadDevices = createSelector([], () => {\n return (\n queryClient.isFetching(FETCH_DEVICES_PROTO)\n || queryClient.isFetching(FETCH_CALCULATED_DATA)\n || queryClient.isFetching(FETCH_CPLATEMAPPING) \n || queryClient.isFetching(FETCH_FRAMEMAPPING)\n //|| queryClient.isFetching(FETCH_FAVORITES)\n )\n})\n\nconst seriesEntity = new schema.Entity('series', {}, { idAttribute: 'id' })\nconst seriesSchema = { series: [seriesEntity] }\n\nexport const fetchSeries = () => {\n return Axios({\n method: 'GET',\n url: process.env.REACT_APP_TERMINAL_API_URL + '/api/designranges',\n })\n .then(response => {\n if (response.status >= 400) {\n //eslint-disable-next-line no-throw-literal\n throw `${response.status} ${response.statusText}`\n }\n return response.data\n })\n .then(function(series) {\n return normalize({ series: series }, seriesSchema)\n })\n}\n\nconst colorsEntity = new schema.Entity('colors', {}, { idAttribute: 'id' })\nconst colorsSchema = { colors: [colorsEntity] }\n\nexport const fetchColors = () => {\n return Axios({\n method: 'GET',\n url: process.env.REACT_APP_TERMINAL_API_URL + '/api/colors',\n })\n .then(response => {\n if (response.status >= 400) {\n //eslint-disable-next-line no-throw-literal\n throw `${response.status} ${response.statusText}`\n }\n return response.data\n })\n .then(function(colors) {\n return normalize({ colors: colors }, colorsSchema)\n })\n}\n\nexport const fetchFrameMapping = () => {\n return Axios({\n method: 'GET',\n url: process.env.REACT_APP_API_URL + '/api/devices/frameMapping',\n }).then(response => {\n if (response.status >= 400) {\n //eslint-disable-next-line no-throw-literal\n throw `${response.status} ${response.statusText}`\n }\n return response.data\n })\n}\n\nexport const fetchCplateMapping = () => {\n return Axios({\n method: 'GET',\n url: process.env.REACT_APP_API_URL + '/api/devices/cplateMapping',\n }).then(response => {\n if (response.status >= 400) {\n //eslint-disable-next-line no-throw-literal\n throw `${response.status} ${response.statusText}`\n }\n return response.data\n })\n}\n\nexport const fetchDesginChangeSpecialties = () => {\n return Axios({\n method: 'GET',\n url: process.env.REACT_APP_API_URL + '/api/devices/designChangeSpecialties',\n }).then(response => {\n if (response.status >= 400) {\n //eslint-disable-next-line no-throw-literal\n throw `${response.status} ${response.statusText}`\n }\n return response.data\n })\n}\n\nexport function getFramePositions(rangeID = 28, frameTypeID = 5, width = 200, orientation = 'V') {\n if (frameTypeID === 0) {\n return Promise.resolve({\n width: width,\n height: width,\n position: [{x: 0, y: 0}]\n })\n }\n \n return Axios.post(`${process.env.REACT_APP_TERMINAL_API_URL}/api/framePositions`, {\n rangeID,\n frameTypeID,\n width,\n orientation,\n })\n .then(resp => {\n if (resp.status === 200) {\n return resp.data\n } else {\n return []\n }\n })\n .catch(() => {\n return Promise.resolve([])\n })\n}\n\nexport const fetchCalculatedData = () => {\n return Axios.get(`${process.env.REACT_APP_API_URL}/api/templates/calculate`)\n .then(response => {\n if (response.status >= 400) {\n //eslint-disable-next-line no-throw-literal\n throw `${response.status} ${response.statusText}`\n }\n return response.data\n })\n .then(function(data) {\n return data\n })\n}\n\nexport const fetchFavorites = () => {\n return Axios({\n method: 'GET',\n url: process.env.REACT_APP_API_URL + '/api/favorites',\n })\n .then(response => {\n if (response.status >= 400) {\n //eslint-disable-next-line no-throw-literal\n throw `${response.status} ${response.statusText}`\n }\n return response.data\n })\n .then(function(data) {\n if (data) {\n let favorites = data.map(el => {\n return {\n ...el,\n data: JSON.parse(el.data),\n }\n })\n\n return favorites\n }\n return []\n })\n}\n\nexport const fetchDevicesProto = () => {\n return Axios({\n method: 'GET',\n url: process.env.REACT_APP_API_URL + '/proto/devices',\n responseType: 'arraybuffer',\n })\n .then(response => {\n if (response.status >= 400) {\n //eslint-disable-next-line no-throw-literal\n throw `${response.status} ${response.statusText}`\n }\n return response.data\n })\n .then(buffer => {\n etimDB.etim.update('fetchDate', { value: new Date() })\n etimDB.etim.update('buffer', { value: buffer })\n return buffer\n })\n}\n\nexport const fetchSynoyms = () => {\n return Axios({\n method: 'GET',\n url: process.env.REACT_APP_API_URL + '/api/devices/synonyms',\n })\n .then(response => {\n if (response.status >= 400) {\n //eslint-disable-next-line no-throw-literal\n throw `${response.status} ${response.statusText}`\n }\n return response.data\n })\n .then(synonyms => {\n etimDB.etim.update('categoryLength', { value: synonyms.length })\n return synonyms\n })\n}\n\nexport const getFrameColors = createSelector(\n [args => args.series, args => args.frameMapping, args => args.colors],\n (series, frameMapping, colors) => {\n let frameColors = {}\n if (series && frameMapping && colors) {\n series.forEach(serie => {\n frameColors[serie.id] = frameMapping\n .filter(el => {\n return el.serie === parseInt(serie.id)\n })\n .map(el => {\n if (el.type && el.type !== '') {\n return {\n ...colors.entities.colors[el.colorId],\n type: el.type\n }\n }\n return colors.entities.colors[el.colorId]\n })\n })\n }\n return frameColors\n }\n)\n\nexport const getCplateColors = createSelector(\n [args => args.series, args => args.cPlateMapping, args => args.colors],\n (series, cPlateMapping, colors) => {\n let frameColors = {}\n if (series && cPlateMapping && colors) {\n series.forEach(serie => {\n frameColors[serie.id] = cPlateMapping\n .filter(el => {\n return el.serie === parseInt(serie.id)\n })\n .map(el => {\n return colors.entities.colors[el.colorId]\n })\n })\n }\n return frameColors\n }\n)\n\nexport const getFrameColorsOfSerie = createSelector(\n [args => args.serieId, args => args.frameMapping, args => args.colors],\n (serieId, frameMapping, colors) => {\n let frameColors = []\n if (serieId && frameMapping && colors) {\n frameColors = frameMapping\n .filter(el => {\n return el.serie === parseInt(serieId)\n })\n .map(el => {\n return colors.entities.colors[el.colorId]\n })\n }\n return frameColors\n }\n)\n\nexport const getCplateColorsOfSerie = createSelector(\n [args => args.serieId, args => args.cPlateMapping, args => args.colors],\n (serieId, cPlateMapping, colors) => {\n let frameColors = []\n if (serieId && cPlateMapping && colors) {\n frameColors = cPlateMapping\n .filter(el => {\n return el.serie === parseInt(serieId)\n })\n .map(el => {\n return colors.entities.colors[el.colorId]\n })\n }\n return frameColors\n }\n)\n\nexport const fetchImage = src => {\n return Axios({\n method: 'GET',\n url: src,\n responseType: 'arraybuffer',\n }).then(response => {\n if (response.status >= 400) {\n //eslint-disable-next-line no-throw-literal\n throw `${response.status} ${response.statusText}`\n }\n return 'data:img/png;base64,' + new Buffer(response.data, 'binary').toString('base64')\n })\n}\n\nexport const fetchUserData = () => {\n return Axios({\n method: 'GET',\n url: process.env.REACT_APP_MYBUILDINGSAPI + 'user', //eslint-disable-line no-undef\n }).then(response => {\n if (response.status >= 400) {\n //eslint-disable-next-line no-throw-literal\n throw `${response.status} ${response.statusText}`\n }\n return response.data\n })\n}\n\nexport const ssoAuth = code => {\n let xhr = new XMLHttpRequest()\n return new Promise((resolve, reject) => {\n var data = new FormData()\n data.append('client_id', process.env.REACT_APP_SSOCLIENTID)\n data.append('client_secret', process.env.REACT_APP_SSOCLIENTSECRET)\n data.append('grant_type', 'authorization_code')\n data.append('code', code)\n xhr.open('POST', process.env.REACT_APP_SSOURL + 'token', true)\n xhr.addEventListener('readystatechange', function() {\n if (this.readyState === 4) {\n if (this.status === 200) {\n const response = JSON.parse(xhr.responseText)\n Cookies.set('access_token', response['access_token'], { expires: 30 })\n Cookies.set('refresh_token', response['refresh_token'], { expires: 90 })\n resolve(true)\n } else {\n Cookies.remove('access_token')\n Cookies.remove('refresh_token')\n resolve(false)\n }\n }\n })\n xhr.send(data)\n })\n}\n\nexport const ssoRefresh = () => {\n let xhr = new XMLHttpRequest()\n return new Promise((resolve, reject) => {\n var data = new FormData()\n data.append('client_id', process.env.REACT_APP_SSOCLIENTID)\n data.append('client_secret', process.env.REACT_APP_SSOCLIENTSECRET)\n data.append('grant_type', 'refresh_token')\n data.append('refresh_token', Cookies.get('refresh_token'))\n xhr.open('POST', process.env.REACT_APP_SSOURL + 'token', true)\n xhr.addEventListener('readystatechange', function() {\n if (this.readyState === 4) {\n if (this.status === 200) {\n const response = JSON.parse(xhr.responseText)\n Cookies.set('access_token', response['access_token'], { expires: 30, secure: true, HttpOnly: true })\n Cookies.set('refresh_token', response['refresh_token'], { expires: 90, secure: true, HttpOnly: true })\n resolve(true)\n } else {\n Cookies.remove('access_token')\n Cookies.remove('refresh_token')\n queryClient.invalidateQueries(FETCH_USER_DATA)\n resolve(false)\n }\n }\n })\n xhr.send(data)\n })\n}\n\nAxios.interceptors.request.use(\n function(config) {\n const token = Cookies.get('access_token')\n\n if (token !== undefined) {\n config.headers.Authorization = `Bearer ${token}`\n }\n\n return config\n },\n function(err) {\n return Promise.reject(err)\n }\n)\n\nAxios.interceptors.response.use(\n function(response) {\n return response\n },\n function(error) {\n try {\n const {\n config,\n response: { status },\n } = error\n const originalRequest = config\n\n if (status === 401) {\n ssoRefresh().then(resp => {\n if (resp) {\n return originalRequest\n }\n })\n }\n return Promise.reject(error)\n } catch (e) {\n console.log('Auth. error')\n return Promise.reject(error)\n }\n }\n)\n\nexport const getIsDevicesFetching = state => getIsQueryFetching(FETCH_DEVICES_PROTO)\n/*export const getAvailableDeviceBuffer = () => getQueryCache(FETCH_DEVICES_PROTO) || new ArrayBuffer(0)\n\nexport const getDeviceList = createByteLengthEqualSelector(\n [getAvailableDeviceBuffer],\n (buffer) => {\n if (buffer && buffer.byteLength > 0) {\n return etimProto.DevicesProto.deserializeBinary(buffer).getDevicesList()\n }\n return []\n }\n)*/\n\nexport const getUser = () => getQueryCache(FETCH_USER_DATA) || {}\nexport const getUserName = () => getUser()?.username\nexport const isAdmin = () => {\n const user = getUser()\n if (user?.roles && Array.isArray(user.roles)) {\n return user.roles.find(el => el === 'ROLE_SSO_PLANSOFT_ADMIN')\n }\n return false\n}\n\nexport const getIsLoggedIn = () => {\n return getUser()?.username !== '' && Cookies.get('access_token') !== undefined\n}\nexport const getIsUserFetching = () => getIsQueryFetching[FETCH_USER_DATA]\n\nexport const fetchProjects = () => {\n return Axios({\n method: 'GET',\n url: process.env.REACT_APP_API_URL + '/api/projects',\n })\n .then(response => {\n if (response.status >= 400) {\n //eslint-disable-next-line no-throw-literal\n throw `${response.status} ${response.statusText}`\n }\n return response.data\n })\n .then(function(projects) {\n let mappedProjects = projects || []\n mappedProjects = mappedProjects.map((project, index) => {\n let data = JSON.parse(project.data)\n return {\n ...project,\n data,\n }\n })\n return mappedProjects\n })\n .catch(function(error) {\n //throwError(error)\n return Promise.reject(error)\n })\n}\n\nexport const fetchProject = id => {\n return Axios({\n method: 'GET',\n url: `${process.env.REACT_APP_API_URL}/api/projects/${id}`,\n })\n .then(response => {\n if (response.status >= 400) {\n //eslint-disable-next-line no-throw-literal\n throw `${response.status} ${response.statusText}`\n }\n return response.data\n })\n .then(function(project) {\n return project\n })\n .catch(function(error) {\n //throwError(error)\n return Promise.reject(error)\n })\n}\n\nexport const saveProject = (project, entities, intl) => {\n if (project) {\n return Axios({\n method: 'POST',\n url: process.env.REACT_APP_API_URL + `/api/projects`,\n data: {\n ...project.data,\n entities,\n },\n })\n .then(response => {\n if (response.status >= 400) {\n //eslint-disable-next-line no-throw-literal\n throw `${response.status} ${response.statusText}`\n }\n return response.data\n })\n .then(function(data) {\n toast.success(\n intl.formatMessage({\n id: `project.save.success`,\n defaultMessage: 'Projekt erfolgreich gespeichert.',\n })\n )\n let response = Promise.resolve(null)\n if (data?.id) {\n response = queryClient.fetchQuery(FETCH_PROJECT, () => fetchProject(data.id))\n }\n return response\n })\n .catch(function(error) {\n toast.error(\n intl.formatMessage({\n id: `project.save.error`,\n defaultMessage: 'Projekt speichern fehlgeschlagen.',\n })\n )\n //throwError(error)\n })\n } else {\n return Promise.resolve(null)\n }\n}\n\nexport const fetchUpdateProject = (project, entities) => {\n if (project) {\n return Axios({\n method: 'PUT',\n url: process.env.REACT_APP_API_URL + `/api/projects/${project.ID}`,\n data: {\n ...project.data,\n entities,\n },\n })\n .then(response => {\n if (response.status >= 400) {\n //eslint-disable-next-line no-throw-literal\n throw `${response.status} ${response.statusText}`\n }\n return response.data\n })\n .then(function() {\n return true\n })\n .catch(function(error) {\n //throwError(error)\n })\n } else {\n return Promise.resolve(null)\n }\n}\n\nexport const removeProject = id => {\n Axios({\n method: 'DELETE',\n url: process.env.REACT_APP_API_URL + `/api/projects/${id}`,\n })\n .then(response => {\n if (response.status >= 400) {\n //eslint-disable-next-line no-throw-literal\n throw `${response.status} ${response.statusText}`\n }\n return response.data\n })\n .catch(function(error) {\n //throwError(error)\n })\n}\n\nexport const fetchAdditionalDoorCommunicationData = () => {\n return Axios({\n method: 'GET',\n url: process.env.REACT_APP_API_URL + '/api/devices/additionalDoorCommunicationData',\n })\n .then(response => {\n if (response.status >= 400) {\n //eslint-disable-next-line no-throw-literal\n throw `${response.status} ${response.statusText}`\n }\n return response.data\n })\n .then(data => {\n return data.map(el => {\n if (el?.exclude) {\n el.exclude = JSON.parse(el.exclude)\n }\n return el\n })\n })\n}\n\nexport const fetchAdditionalBlindData = () => {\n return Axios({\n method: 'GET',\n url: process.env.REACT_APP_API_URL + '/api/devices/additionalBlindData',\n })\n .then(response => {\n if (response.status >= 400) {\n //eslint-disable-next-line no-throw-literal\n throw `${response.status} ${response.statusText}`\n }\n return response.data\n })\n .then(data => {\n return data.map(el => {\n if (el?.exclude) {\n el.exclude = JSON.parse(el.exclude)\n }\n return el\n })\n })\n}\n\nexport const fetchAdditionalCplateData = () => {\n return Axios({\n method: 'GET',\n url: process.env.REACT_APP_API_URL + '/api/devices/additionalCplateData',\n })\n .then(response => {\n if (response.status >= 400) {\n //eslint-disable-next-line no-throw-literal\n throw `${response.status} ${response.statusText}`\n }\n return response.data\n })\n .then(data => {\n return data.map(el => {\n if (el?.exclude) {\n el.exclude = JSON.parse(el.exclude)\n }\n return el\n })\n })\n}\n\nexport const fetchAdditionalDataData = () => {\n return Axios({\n method: 'GET',\n url: process.env.REACT_APP_API_URL + '/api/devices/additionalDataData',\n })\n .then(response => {\n if (response.status >= 400) {\n //eslint-disable-next-line no-throw-literal\n throw `${response.status} ${response.statusText}`\n }\n return response.data\n })\n .then(data => {\n return data.map(el => {\n if (el?.exclude) {\n el.exclude = JSON.parse(el.exclude)\n }\n return el\n })\n })\n}\n\nexport const fetchAdditionalDimmerData = () => {\n return Axios({\n method: 'GET',\n url: process.env.REACT_APP_API_URL + '/api/devices/additionalDimmerData',\n })\n .then(response => {\n if (response.status >= 400) {\n //eslint-disable-next-line no-throw-literal\n throw `${response.status} ${response.statusText}`\n }\n return response.data\n })\n .then(data => {\n return data.map(el => {\n if (el?.exclude) {\n el.exclude = JSON.parse(el.exclude)\n }\n return el\n })\n })\n}\n\nexport const fetchAdditionalMotionData = () => {\n return Axios({\n method: 'GET',\n url: process.env.REACT_APP_API_URL + '/api/devices/additionalMotionData',\n })\n .then(response => {\n if (response.status >= 400) {\n //eslint-disable-next-line no-throw-literal\n throw `${response.status} ${response.statusText}`\n }\n return response.data\n })\n .then(data => {\n return data.map(el => {\n if (el?.exclude) {\n el.exclude = JSON.parse(el.exclude)\n }\n return el\n })\n })\n}\n\nexport const fetchAdditionalSocketData = () => {\n return Axios({\n method: 'GET',\n url: process.env.REACT_APP_API_URL + '/api/devices/additionalSocketData',\n })\n .then(response => {\n if (response.status >= 400) {\n //eslint-disable-next-line no-throw-literal\n throw `${response.status} ${response.statusText}`\n }\n return response.data\n })\n .then(data => {\n return data.map(el => {\n if (el?.exclude) {\n el.exclude = JSON.parse(el.exclude)\n }\n return el\n })\n })\n}\n\nexport const fetchAdditionalSwitchData = () => {\n return Axios({\n method: 'GET',\n url: process.env.REACT_APP_API_URL + '/api/devices/additionalSwitchData',\n })\n .then(response => {\n if (response.status >= 400) {\n //eslint-disable-next-line no-throw-literal\n throw `${response.status} ${response.statusText}`\n }\n return response.data\n })\n .then(data => {\n return data.map(el => {\n if (el?.exclude) {\n el.exclude = JSON.parse(el.exclude)\n }\n return el\n })\n })\n}\n\nexport const fetchAdditionalRtrData = () => {\n return Axios({\n method: 'GET',\n url: process.env.REACT_APP_API_URL + '/api/devices/additionalRtrData',\n })\n .then(response => {\n if (response.status >= 400) {\n //eslint-disable-next-line no-throw-literal\n throw `${response.status} ${response.statusText}`\n }\n return response.data\n })\n .then(data => {\n return data.map(el => {\n if (el?.exclude) {\n el.exclude = JSON.parse(el.exclude)\n }\n return el\n })\n })\n}\n\nexport const fetchSpecialSocketData = () => {\n return Axios({\n method: 'GET',\n url: process.env.REACT_APP_API_URL + '/api/devices/specialSocketData',\n })\n .then(response => {\n if (response.status >= 400) {\n //eslint-disable-next-line no-throw-literal\n throw `${response.status} ${response.statusText}`\n }\n return response.data\n })\n .then(data => {\n return data\n })\n}\n\nexport const fetchGlobalSettings = () => {\n return Axios({\n method: 'GET',\n url: `${process.env.REACT_APP_API_URL}/api/globalSetting`,\n })\n .then(response => {\n if (response.status >= 400) {\n //eslint-disable-next-line no-throw-literal\n throw `${response.status} ${response.statusText}`\n }\n return response.data\n })\n .then(function(data) {\n return data\n })\n .catch(function(error) {\n //throwError(error)\n return Promise.reject(error)\n })\n}\n\nexport const saveGlobalSettings = data => {\n return Axios({\n method: 'POST',\n url: `${process.env.REACT_APP_API_URL}/api/globalSetting`,\n data,\n })\n .then(response => {\n if (response.status >= 400) {\n //eslint-disable-next-line no-throw-literal\n throw `${response.status} ${response.statusText}`\n }\n return response.data\n })\n .then(function(project) {\n return project\n })\n .catch(function(error) {\n //throwError(error)\n return Promise.reject(error)\n })\n}\n\nexport const fetchETIMChecksum = () => {\n return new Promise((resolve, reject) => {\n return Axios({\n method: 'GET',\n url: process.env.REACT_APP_API_URL + '/api/devices/checksum/catalog',\n })\n .then(response => {\n if (response.status >= 400) {\n //eslint-disable-next-line no-throw-literal\n throw `${response.status} ${response.statusText}`\n }\n return response.data\n })\n .then(function(checksum) {\n etimDB.etim.update('checksum', { value: checksum })\n return resolve(checksum)\n })\n .catch(function(error) {\n return reject(error)\n })\n })\n}\n\n\nexport const fetchDeviceClasses = () => {\n return Axios({\n method: 'GET',\n url: `${process.env.REACT_APP_API_URL}/api/devices/classes`,\n })\n .then(response => {\n if (response.status >= 400) {\n //eslint-disable-next-line no-throw-literal\n throw `${response.status} ${response.statusText}`\n }\n return response.data\n })\n .then(function(data) {\n return data\n })\n .catch(function(error) {\n //throwError(error)\n return Promise.reject(error)\n })\n}\n\nexport const fetchDeviceFeatures = () => {\n return Axios({\n method: 'GET',\n url: `${process.env.REACT_APP_API_URL}/api/devices/features`,\n })\n .then(response => {\n if (response.status >= 400) {\n //eslint-disable-next-line no-throw-literal\n throw `${response.status} ${response.statusText}`\n }\n return response.data\n })\n .then(function(data) {\n return data\n })\n .catch(function(error) {\n //throwError(error)\n return Promise.reject(error)\n })\n}\n\nexport const fetchDeviceValues = () => {\n return Axios({\n method: 'GET',\n url: `${process.env.REACT_APP_API_URL}/api/devices/values`,\n })\n .then(response => {\n if (response.status >= 400) {\n //eslint-disable-next-line no-throw-literal\n throw `${response.status} ${response.statusText}`\n }\n return response.data\n })\n .then(function(data) {\n return data\n })\n .catch(function(error) {\n //throwError(error)\n return Promise.reject(error)\n })\n}\n\nexport const exportPlansoft = (data) => {\n return Axios({\n method: \"POST\",\n url: process.env.REACT_APP_PLANSOFT_API_URL + \"/api/projects\",\n data,\n })\n}\n","import { calculatePossibleDevice } from \"./calculatePossibleDevice\"\n\nexport const getNoDevice = () => {\n return [\n 'Ankaro',\n 'Hirschmann'\n ]\n}\n\nexport const getFeatureClass = (features, possibleForAddionalArticles) => {\n const noDevice = getNoDevice()\n return possibleForAddionalArticles\n ? features.find(feature => {\n return feature.Id.includes('EC') || noDevice.find(id => id === feature.Id)\n })\n : null\n}\n\nexport const checkPossibleForAddionalArticles = (additionalArticles) => {\n const notPossibleAdditionalArticles = [\n '2CKA006800A2888',\n '2CKA006800A3041',\n '2CKA006800A3047',\n '2CKA006800A3044',\n '2CKA006500A0012',\n '2CKA006800A3050'\n ]\n return !notPossibleAdditionalArticles.find(id => {\n return !!additionalArticles.find(el => el.getSupplierpid() === id)\n })\n}\n\nexport const getAdditionalArticles = (additionalArticles, deviceList) => {\n let data = additionalArticles ? [...additionalArticles] : []\n \n return data.map(id => {\n return deviceList.find(el => el.getManufacturertypedescr() === id)\n })\n}\n\nexport const calculateDescritpions1 = (supplierPid, articleColor, additionalArticles, additionalData, serieId, features, possibleForAddionalArticles) => {\n\n let descriptions = []\n let description = {\n feature: 'EC000011', //Abdeckung/Bedienelement für Installationsschalterprogramme\n filters: [],\n }\n\n if (articleColor) {\n description.manufacturerTypeDescr = \"-\" + articleColor\n }\n\n const additionalArticleData = additionalData.find(el => el.supplier_pid === supplierPid)\n\n const featureClass = getFeatureClass(features, possibleForAddionalArticles)\n let description2 = null\n let description3 = null\n let description4 = null\n let bedienungsart = null\n let anzahlWippen = null\n if (featureClass) {\n switch (featureClass.Id) {\n case \"Ankaro\":\n //Einsatz/Abdeckung für Kommunikationstechnik\n description.feature = \"EC000018\"\n //Verwendung = Sat\n description.filters.push({Id: \"EF000133\", Value: \"EV003629\"})\n break;\n case \"Hirschmann\":\n //Einsatz/Abdeckung für Kommunikationstechnik\n description.feature = \"EC000018\"\n //Verwendung = Sat\n description.filters.push({Id: \"EF000133\", Value: \"EV003629\"})\n break;\n //mechanische Jalousiesteuerung\n case \"EC000044\":\n //Verwendungszweck Jalousie\n description.filters.push({Id: \"EF000133\", Value: \"EV003624\"}) \n bedienungsart = featureClass.Feature.find(el => el.Fname === \"EF000006\")?.Fvalue\n if (bedienungsart === \"EV000200\") {\n //Bedienunsart zweitelige Wippe\n description.filters.push({Id: \"EF000010\", Value: \"EV006540\"})\n } else if (bedienungsart === \"EV000092\") {\n //Bedienunsart Drehknopf\n description.filters.push({Id: \"EF000010\", Value: \"EV000092\"})\n } else if (bedienungsart === \"EV000175\") {\n //Bedienunsart Schlüssel\n description.filters.push({Id: \"EF000010\", Value: \"EV000175\"})\n }\n break\n //elektronische Jalousiesteuerung\n case \"EC000615\":\n //Verwendungszweck Jalousie\n description.filters.push({Id: \"EF000133\", Value: \"EV003624\"})\n //Bedienunsart einteilige Wippe\n description.filters.push({Id: \"EF000010\", Value: \"EV000316\"})\n break\n //Kommunikation TAE\n case \"EC001264\":\n description.feature = \"EC000018\"\n description2 = JSON.parse(JSON.stringify(description)) \n //Verwendungszweck TAE\n description.filters.push({Id: \"EF000133\", Value: \"EV000378\"})\n //Verwendungszweck D-Sub (keine Ahnung warum diese dann dort gelistet werden)\n description2.filters.push({Id: \"EF000133\", Value: \"EV000734\"})\n descriptions.push(description2)\n break\n //Kommunikation (UAE, TAE, Speaker)\n case \"EC000018\":\n description.feature = \"EC000018\"\n if (featureClass.Feature.find(f => f.Fname === 'EF000133' && f.Fvalue === 'EV000154')) { //Sonstige Geräte\n if (additionalArticleData?.uae) {\n //Verwendungszweck UAE/IAE\n description.filters.push({Id: \"EF000133\", Value: \"EV004378\"})\n //Für Art Linear Geräte\n description2 = {\n //Abdeckung/Bedienelement für Installationsschalterprogrammei\n feature: \"EC000018\",\n filters: [\n {\n Id: \"EF000133\", //Verwendungszweck\n Value: \"EV006388\" //Datenanschlussgehäuse\n },\n {\n Id: \"EF000005\", //Zusammenstellung\n Value:\"EV006351\" //Bedienelement\n },\n {\n Id: \"EF005709\", //mit Tragring\n Value: \"false\"\n }\n ]\n }\n if (articleColor) {\n description2.manufacturerTypeDescr = \"-\" + articleColor\n }\n \n \n //Überprüfung der Größe 1 oder 2-fach\n const size = featureClass.Feature.find(f => f.Fname === 'EF001579')\n if (size) {\n description.filters.push({Id: \"EF001579\", Value: size.Fvalue})\n description2.filters.push({Id: \"EF001579\", Value: size.Fvalue})\n }\n descriptions.push(description2)\n } else if (additionalArticleData?.speaker) {\n description2 = JSON.parse(JSON.stringify(description)) \n //Verwendungszweck TAE\n description.filters.push({Id: \"EF000133\", Value: \"EV000378\"})\n //Verwendungszweck D-Sub (keine Ahnung warum diese dann dort gelistet werden)\n description2.filters.push({Id: \"EF000133\", Value: \"EV000734\"})\n descriptions.push(description2)\n }\n } else if (featureClass.Feature.find(f => f.Fname === 'EF000133' && f.Fvalue === 'EV000378')) { //TAE Geräte\n description2 = JSON.parse(JSON.stringify(description)) \n //Verwendungszweck TAE\n description.filters.push({Id: \"EF000133\", Value: \"EV000378\"})\n //Verwendungszweck D-Sub (keine Ahnung warum diese dann dort gelistet werden)\n description2.filters.push({Id: \"EF000133\", Value: \"EV000734\"})\n descriptions.push(description2)\n }\n break\n //Kommunikation (Antenna)\n case \"EC000439\":\n description.feature = \"EC000018\"\n description2 = JSON.parse(JSON.stringify(description))\n description3 = JSON.parse(JSON.stringify(description))\n description4 = JSON.parse(JSON.stringify(description))\n //Verwendungszweck Sat\n description.filters.push({Id: \"EF000133\", Value: \"EV003629\"})\n description2.filters.push({Id: \"EF000133\", Value: \"EV003629\"})\n //Verwendungszweck Sonstige Geräte\n description3.filters.push({Id: \"EF000133\", Value: \"EV000154\"})\n description4.filters.push({Id: \"EF000133\", Value: \"EV000154\"})\n //ohne Tragring\n description3.filters.push({Id: \"EF005709\", Value: \"false\"})\n description4.filters.push({Id: \"EF005709\", Value: \"false\"})\n\n //Anzahl Buchsen 2 oder 3 möglich\n description.filters.push({Id: \"EF001579\", Value:\"2\"})\n description2.filters.push({Id: \"EF001579\", Value:\"3\"})\n description3.filters.push({Id: \"EF001579\", Value:\"2\"})\n description4.filters.push({Id: \"EF001579\", Value:\"3\"})\n descriptions.push(description2)\n descriptions.push(description3)\n descriptions.push(description4)\n break\n //Raumtemperaturregler¼\n case \"EC010927\":\n const bedienung = featureClass.Feature.find(f => f.Fname === \"EF002147\")?.Fvalue\n if (bedienung === \"EV008828\") { //Dreh\n description2 = JSON.parse(JSON.stringify(description))\n description3 = JSON.parse(JSON.stringify(description))\n //Verwendungszweck Thermostat\n description.filters.push({Id: \"EF000133\", Value: \"EV000615\"})\n description2.filters.push({Id: \"EF000133\", Value: \"EV000615\"})\n //Verwendungszweck sonstige Geräte\n description2.filters.push({Id: \"EF000133\", Value: \"EV000615\"})\n //Ausführung Dreh\n description.filters.push({Id: \"EF000010\", Value: \"EV000092\"})\n //Ausführung nicht gesetzt\n description2.filters.push({Id: \"EF000010\", Value: \"-\"})\n //Auufdruck Symbol \"1\"\n description2.filters.push({Id: \"EF003823\", Value: \"EV006497\"})\n //Auufdruck diverse Symbole\n description3.filters.push({Id: \"EF003823\", Value: \"EV001917\"})\n descriptions.push(description2)\n descriptions.push(description3)\n } else if (bedienung === \"EV006506\") { //Taster\n //Verwendungszweck Thermostat\n description.filters.push({Id: \"EF000133\", Value: \"EV000615\"})\n //Ausführung nicht gesetzt\n description.filters.push({Id: \"EF000010\", Value: \"-\"})\n //Aufdruck diverse Symbole\n description.filters.push({Id: \"EF003823\", Value: \"EV001917\"})\n } else if (bedienung === \"-\") { //nicht gesetzt\n //Verwendungszweck Zeitschalter\n description.filters.push({Id: \"EF000133\", Value: \"EV001731\"})\n description2 = JSON.parse(JSON.stringify(description))\n description3 = JSON.parse(JSON.stringify(description))\n //Ausführung Zentralplatte\n description.filters.push({Id: \"EF000010\", Value: \"EV000319\"})\n //Ausführung nicht gesetzt\n description2.filters.push({Id: \"EF000010\", Value: \"-\"})\n //Ausführung nicht gesetzt\n description3.filters.push({Id: \"EF000010\", Value: \"EV000317\"})\n descriptions.push(description2)\n descriptions.push(description3)\n }\n break\n //Raumtemperaturregler 2\n case \"EC011309\":\n //Verwendungszweck Zeitschalter\n description.filters.push({Id: \"EF000133\", Value: \"EV001731\"})\n description2 = JSON.parse(JSON.stringify(description))\n description3 = JSON.parse(JSON.stringify(description))\n //Ausführung Zentralplatte\n description.filters.push({Id: \"EF000010\", Value: \"EV000319\"})\n //Ausführung nicht gesetzt\n description2.filters.push({Id: \"EF000010\", Value: \"-\"})\n //Ausführung nicht gesetzt\n description3.filters.push({Id: \"EF000010\", Value: \"EV000317\"})\n descriptions.push(description2)\n descriptions.push(description3)\n break \n //Dimmer\n case \"EC000025\":\n bedienungsart = featureClass.Feature.find(f => f.Fname === \"EF000006\")?.Fvalue\n if (bedienungsart === \"EV000251\") {\n //Verwendung Dimmer\n description.filters.push({Id: \"EF000133\", Value: \"EV000944\"})\n //Ausführung Drehknopf\n description.filters.push({Id: \"EF000010\", Value: \"EV000092\"})\n } else if (bedienungsart === \"EV000554\") {\n //Bewegungsmelder\n description.feature = \"EC000138\"\n description.filters.push({Id: \"EF000010\", Value: \"EV004048\"})\n description.filters.push({Id: \"EF000003\", Value: \"EV000383\"})\n } else if (bedienungsart === \"EV008969\") {\n //Verwendung Dimmer\n description.filters.push({Id: \"EF000133\", Value: \"EV000944\"})\n description2 = JSON.parse(JSON.stringify(description))\n //Ausführung einteilige Taste\n description.filters.push({Id: \"EF000010\", Value: \"EV000317\"})\n //Ausführung zweiteilige Taste\n description.filters.push({Id: \"EF000010\", Value: \"EV007981\"})\n descriptions.push(description2)\n }\n break\n //Industrieschalter\n case \"EC001590\":\n anzahlWippen = featureClass.Feature.find(f => f.Fname === \"EF003816\")?.Fvalue\n if (anzahlWippen === \"2\") {\n //Ausführung zweiteilige Wippe\n description.filters.push({Id: \"EF000010\", Value: \"EV006540\"})\n } else {\n //Ausführung einteilige Wippe\n description.filters.push({Id: \"EF000010\", Value: \"EV000316\"})\n }\n break;\n //Dreistufen-Schalter\n case \"EC001036\":\n //Ausführung Drehknopf\n description.filters.push({Id: \"EF000010\", Value: \"EV000092\"})\n //Verwendung Stufenschalter\n description.filters.push({Id: \"EF000133\", Value: \"EV006495\"})\n //Symbol \"0\"\n description.filters.push({Id: \"EF003823\", Value: \"EV000556\"})\n break;\n //Taster\n case \"EC000029\":\n bedienungsart = featureClass.Feature.find(el => el.Fname === \"EF000006\")?.Fvalue\n if (bedienungsart === \"EV000407\") {\n anzahlWippen = featureClass.Feature.find(f => f.Fname === \"EF003816\")?.Fvalue\n if (anzahlWippen === \"2\") {\n //Ausführung zweiteilige Wippe\n description.filters.push({Id: \"EF000010\", Value: \"EV006540\"})\n } else {\n //Ausführung einteilige Wippe\n description.filters.push({Id: \"EF000010\", Value: \"EV000316\"})\n }\n } else if (bedienungsart === \"EV000239\") {\n //keinw Filterung siehe spezielle Filterung für 2020/01 US-101 und 2020/10 US-101\n }\n break;\n default:\n break\n }\n\n if (additionalArticles.length > 0) {\n additionalArticles.forEach(el => {\n if (el) {\n const additionalDeviceFeatures = JSON.parse(el.getFeatures())\n //Bedienelement intelligent oder Abdeckung/Bedienelement für Installationsschalterprogramme (OneTouch)\n if (additionalDeviceFeatures[0].Id === 'EC000205' || additionalDeviceFeatures[0].Id === 'EC000011') {\n //Bussystem-Tastwippe\n description.feature = \"EC002253\"\n description.filters = []\n //Bussystem KNX = false\n description.filters.push({Id: \"EF001499\", Value: \"false\"})\n //Funk bidirektional = true\n description.filters.push({Id: \"EF009466\", Value: \"true\"})\n } else if (additionalDeviceFeatures[0].Id === 'EC001588') {\n description.feature = null\n description.filters = []\n }\n }\n })\n }\n\n if (description.feature) {\n descriptions.push(description)\n }\n }\n return {description, descriptions}\n}\n\nexport const calculateDescritpions2 = (supplierPid, features, possibleForAddionalArticles, deviceList, description, descriptions, additionalData, serieId, additionalArticles, articleColor) => {\n const originDevice = deviceList.find(el => el.getSupplierpid() === supplierPid)\n \n const featureClass = possibleForAddionalArticles\n ? features.find(feature => {\n return feature.Id.includes('EC') || noDevice.find(id => id === feature.Id)\n })\n : null\n \n const noDevice = getNoDevice()\n\n const additionalArticleData = additionalData.find(el => el.supplier_pid === supplierPid)\n\n let possibleDevices = []\n\n if (featureClass) {\n //Keine Steckdosen (EC000125) oder Innenstation für Türkommunikation (EC000779)\n //da diese keine Zentralplatten benötigenz\n if (featureClass.Id !== \"EC000125\" && featureClass.Id !== \"EC000779\" ) {\n let devices = descriptions.length > 0\n ? calculatePossibleDevice(deviceList, descriptions, additionalData, serieId)\n : []\n possibleDevices = devices.map(device => {\n if (!device) {\n return null\n }\n device.possible = {}\n descriptions.forEach((desc, index) => {\n device.possible[index] = true\n if (device !== null) {\n device.IsDefault = true\n const features = JSON.parse(device.features)\n const featClass = features.find(feature => {\n return feature.Id.includes('EC')\n })\n \n //Spezielle Kalkulation for Raumtemperaturregler\n if (featureClass.Id === \"EC010927\") {\n if (originDevice) {\n if (originDevice.getManufacturertypedescr().includes('UHKEA')) {\n if (!device.manufacturerTypeDescr.includes('HKEA-')) {\n device.possible[index] = false\n }\n } else if (originDevice.getManufacturertypedescr().includes('UHK')\n && !originDevice.getManufacturertypedescr().includes('UHKTA-BT')\n && !originDevice.getManufacturertypedescr().includes('UHK-101')\n ) {\n if (!device.manufacturerTypeDescr.includes('HK-')) {\n device.possible[index] = false\n }\n } else if (originDevice.getManufacturertypedescr().includes('UTA')\n && !originDevice.getManufacturertypedescr().includes('UTA-BT')\n ) {\n if (!device.manufacturerTypeDescr.includes('TA-')) {\n device.possible[index] = false\n }\n } else {\n if (device.manufacturerTypeDescr.includes('HKEA-')\n || device.manufacturerTypeDescr.includes('HK-')\n || device.manufacturerTypeDescr.includes('TA-')\n ) {\n device.possible[index] = false\n }\n }\n\n if (device) {\n if (originDevice.getManufacturertypedescr() === '1094 U'\n || originDevice.getManufacturertypedescr() === '1097 U'\n ) {\n if (!device.manufacturerTypeDescr.includes('1794-')) {\n device.possible[index] = false\n }\n } else if (originDevice.getManufacturertypedescr() === '1094 U-101'\n || originDevice.getManufacturertypedescr() === '1097 U-101'\n || originDevice.getManufacturertypedescr() === '1099 UHK-101'\n ) {\n if (!device.manufacturerTypeDescr.includes('1794 R-')) {\n device.possible[index] = false\n }\n }\n\n\n if ((originDevice.getManufacturertypedescr().includes('1094')\n || originDevice.getManufacturertypedescr().includes('1097'))\n && !originDevice.getManufacturertypedescr().includes('-BT')\n ) {\n if (!device.manufacturerTypeDescr.includes('1794')) {\n device.possible[index] = false\n }\n } else if ((originDevice.getManufacturertypedescr().includes('1095')\n || originDevice.getManufacturertypedescr().includes('1096')\n || originDevice.getManufacturertypedescr().includes('1099'))\n && !originDevice.getManufacturertypedescr().includes('-BT')\n && !originDevice.getManufacturertypedescr().includes('1099 UHK-101')\n ) {\n if (!device.manufacturerTypeDescr.includes('1795')) {\n device.possible[index] = false\n }\n }\n }\n } else {\n device.possible[index] = false\n }\n }\n\n //Spezielle Kalkalation für Dimmer\n if (featureClass.Id === \"EC000025\") {\n if (device.manufacturerTypeDescr.includes('-510')) {\n device.possible[index] = false\n }\n\n if (originDevice.getManufacturertypedescr() === '6526 U') {\n if (!device.manufacturerTypeDescr.includes('6543-')) {\n device.possible[index] = false\n }\n }\n\n if (originDevice.getManufacturertypedescr() === '6565 Ur') {\n if (!device.manufacturerTypeDescr.includes('6545-')) {\n device.possible[index] = false\n }\n }\n\n if (!originDevice.getManufacturertypedescr().includes('J-')) {\n if (device.manufacturerTypeDescr.includes('J-')) {\n device.possible[index] = false\n }\n }\n\n }\n\n //Spezielle Kalkutlation mechanische Jalousiesteuerung\n if (featureClass.Id === \"EC000044\") {\n if (device.manufacturerTypeDescr.includes('JA/')) {\n device.possible[index] = false\n }\n }\n\n //Spezielle Kalkutlation Taster\n if (featureClass.Id === \"EC000029\") {\n if (originDevice.getManufacturertypedescr() === '2020/01 US-101'\n || originDevice.getManufacturertypedescr() === '2020/10 US-101'\n ) {\n if (!device.manufacturerTypeDescr.includes('2520-')\n && !device.manufacturerTypeDescr.includes('1720-')\n ) {\n device.possible[index] = false\n }\n }\n }\n \n if (device && featClass.Id === desc.feature) {\n desc.filters.forEach(filter => {\n featClass.Feature.forEach(feature => {\n let withoutIcon = true\n //Aufdruck/Kennzeichnung\n if (filter.Id === \"EF003823\") {\n withoutIcon = false\n }\n\n if (filter.Id === feature.Fname) {\n if (filter.Value !== feature.Fvalue) {\n device.possible[index] = false\n }\n }\n \n if (withoutIcon) {\n //Aufdruck/Kennzeichnung\n if (feature.Fname === \"EF003823\") {\n //ungleich ohne (EV000494) oder ohne Aufdruck (EV005886)\n if (feature.Fvalue !== \"EV000494\"\n && feature.Fvalue !== \"EV005886\") {\n device.IsDefault = false\n }\n }\n }\n\n //Mit Beschriftungsfeld\n if (feature.Fname === \"EF005040\" && feature.Fvalue === \"true\") {\n device.IsDefault = false\n }\n })\n })\n } else {\n device.possible[index] = false\n }\n }\n })\n return device\n }).filter(device => {\n return Object.keys(device.possible).some(key => {\n return device.possible[key] === true\n })\n })\n\n //Spezielle Kalkulation für Dimmer 2\n if (featureClass.Id === \"EC000025\") {\n const featClass = features.find(feature => {\n return feature.Id.includes('EC')\n })\n\n featClass.Feature.forEach(feature => {\n //Verwendbar mit Zeitschalter/Timer\n if (feature.Fname === \"EF003911\" && feature.Fvalue === \"true\") {\n featureClass.Feature.forEach(feature2 => {\n //Kein Seriendimmer\n if (feature2.Fname === \"EF003889\" && feature2.Fvalue === \"false\") {\n //Lastart == universal\n if (feature2.Fname === \"EF001508\" && feature2.Fvalue === \"EV000028\") {\n description = {\n feature: 'EC000615', //Jalousiesteuerung\n manufacturerTypeDescr: \"-\" + articleColor,\n filters: [\n {Id: \"EF000005\", Value: \"EV006350\"}, //Zusammenstellung = Bedienaufsatz\n ],\n }\n descriptions.push(description)\n possibleDevices = descriptions.length > 0\n ? calculatePossibleDevice(deviceList, descriptions)\n : []\n }\n }\n })\n }\n }) \n }\n }\n //Spezielle Kalkulation für Jalousiesteuerung, Elektronischer Schalter und Dimmer\n //in Verbindung mit Flex und den zusätzlichen Geräten, da sich die Anzahl der Wippen\n //anhand der zusätzlichen Artikel ergibt\n if (featureClass.Id === \"EC000615\" || featureClass.Id === \"EC001588\" || featureClass.Id === \"EC000025\") {\n if (additionalArticles.length > 0) {\n additionalArticles.forEach(el => {\n if (el) {\n const additionalDeviceFeatures = JSON.parse(el.getFeatures())\n //Zusätzliches Gerät vom Typ Bedienelement intelligent oder Abdeckung/Bedienelement für Installationsschalterprogramme\n if (additionalDeviceFeatures[0].Id === 'EC000205' || additionalDeviceFeatures[0].Id === 'EC000011') {\n //Ermittlung der Anzahl der Tasten\n let countButton = additionalDeviceFeatures[0].Feature.find(el => el.Fname === 'EF003144')\n if (!countButton) {\n //Wenn dieser Wert nicht gesetzt prüfen ob die Ausführung eine zweiteilige Wippe\n //sonst handelt es sich um eine einteilige Wippe\n let ausfuehrung = additionalDeviceFeatures[0].Feature.find(el => el.Fname === 'EF000010')\n \n if (ausfuehrung) {\n countButton = ausfuehrung.Fvalue === 'EV000317'\n ? {Fvalue: \"1\"}\n : ausfuehrung.Fvalue === 'EV007981'\n ? {Fvalue: \"2\"}\n : null\n }\n }\n\n if (countButton) {\n possibleDevices = possibleDevices.filter(el => {\n const additionalDeviceData = additionalData.find(el2 => el2.supplier_pid === el.supplierPid)\n if (!additionalDeviceData) {\n return true\n }\n \n if (additionalDeviceData?.feature?.find(el => {\n return el.fname === 'excludeFromFlex' && el.fvalue === 'true'\n })) {\n return false\n }\n \n if (countButton.Fvalue === '1') {\n return additionalDeviceData.orientation === 'full'\n }\n\n if (countButton.Fvalue === '2') {\n return additionalDeviceData.orientation === 'left'\n || additionalDeviceData.orientation === 'right'\n || additionalDeviceData.orientation === 'both'\n }\n\n return true\n })\n }\n }\n }\n })\n }\n }\n\n if (noDevice.find(id => id === featureClass.Id)) {\n possibleDevices = possibleDevices.filter(device => {\n const originDevice = deviceList.find(el => el.getSupplierpid() === device.supplierPid)\n if (originDevice) {\n return originDevice.getDescriptionlong().includes(featureClass.Id)\n } \n return false\n })\n }\n }\n\n return possibleDevices\n}\n\nexport const calculateForAdditionalData = (possibleDevices, additionalData, orientation) => {\n return possibleDevices.filter(device => {\n let additionalCplateData = additionalData.find(el => el.supplier_pid === device.supplierPid)\n if (additionalCplateData) {\n return additionalCplateData.orientation === orientation\n || ((orientation === 'left' || orientation === 'right') && additionalCplateData.orientation === 'both')\n }\n return true\n })\n}\n\nexport const calculateDeviceForCPlate = (supplierPid, deviceList, features, articleColor, additionalData, additionalArticles, orientation, serieId) => {\n const calculatedAdditionalArticles = getAdditionalArticles(additionalArticles, deviceList)\n \n const possibleForAddionalArticles = checkPossibleForAddionalArticles(calculatedAdditionalArticles)\n\n let {description, descriptions} = calculateDescritpions1(supplierPid, articleColor, calculatedAdditionalArticles, additionalData, serieId, features, possibleForAddionalArticles)\n\n let possibleDevices = calculateDescritpions2(supplierPid, features, possibleForAddionalArticles, deviceList, description, descriptions, additionalData, serieId, calculatedAdditionalArticles, articleColor)\n \n return calculateForAdditionalData(possibleDevices, additionalData, orientation)\n\n}\n\n","import v4 from 'node-uuid'\nimport last from 'lodash/last'\nimport omit from 'lodash/omit'\nimport {batchActions} from 'redux-batched-actions'\n\n// Actions\n//\nexport const ADD_BUILDING = 'raumplaner/entities/BUILDING/ADD'\nexport const REMOVE_BUILDING = 'raumplaner/entities/BUILDING/REMOVE'\nexport const CLONE_BUILDING = 'raumplaner/entities/BUILDING/CLONE'\n\nexport const REFERENCE_FLOOR = 'raumplaner/entities/BUILDING/REFERENCE_FLOOR'\nexport const DEREFERENCE_FLOOR = 'raumplaner/entities/BUILDING/DEREFERENCE_FLOOR'\nexport const SET_ACTIVE_FLOOR = 'raumplaner/entities/BUILDING/SET_ACTIVE_FLOOR'\n\n// Reducer\n//\nexport const buildingInitialState = {\n id: null,\n type: 'building',\n label: null,\n floors: [],\n activeFloor: null,\n}\n\nfunction reducer(state = buildingInitialState, action) {\n let floorIndex\n let floors\n switch (action.type) {\n case CLONE_BUILDING:\n return {\n ...state,\n id: action.buildingId,\n floors: [],\n }\n case ADD_BUILDING:\n return {\n ...state,\n id: action.buildingId,\n }\n case REFERENCE_FLOOR:\n return {\n ...state,\n floors: [...state.floors, action.floorId],\n }\n case DEREFERENCE_FLOOR:\n floorIndex = state.floors.indexOf(action.floorId)\n floors = [...state.floors.slice(0, floorIndex), ...state.floors.slice(floorIndex + 1)]\n return {\n ...state,\n floors: floors,\n activeFloor: floors[floorIndex] ? floors[floorIndex] : last(floors),\n }\n case SET_ACTIVE_FLOOR:\n return {\n ...state,\n activeFloor: action.floorId,\n }\n default:\n return state\n }\n}\n\nexport default function buildingListReducer(state = {byId: {}, allIds: []}, action) {\n let allIdIndex\n switch (action.type) {\n case CLONE_BUILDING:\n return {\n ...state,\n byId: {\n ...state.byId,\n [action.buildingId]: reducer(state.byId[action.originBuildingId], action),\n },\n allIds: [...state.allIds, action.buildingId],\n }\n case ADD_BUILDING:\n return {\n ...state,\n byId: {\n ...state.byId,\n [action.buildingId]: reducer(state.byId[action.buildingId], action),\n },\n allIds: [...state.allIds, action.buildingId],\n }\n case REFERENCE_FLOOR:\n case DEREFERENCE_FLOOR:\n case SET_ACTIVE_FLOOR:\n return {\n ...state,\n byId: {\n ...state.byId,\n [action.buildingId]: reducer(state.byId[action.buildingId], action),\n },\n }\n case REMOVE_BUILDING:\n allIdIndex = state.allIds.indexOf(action.buildingId)\n return {\n ...state,\n allIds: [...state.allIds.slice(0, allIdIndex), ...state.allIds.slice(allIdIndex + 1)],\n byId: omit(state.byId, [action.buildingId]),\n }\n default:\n return state\n }\n}\n\n// Action Creators\n//\nexport function addBuilding(buildingId) {\n return {\n type: ADD_BUILDING,\n buildingId,\n }\n}\n\nexport function deleteBuilding(buildingId) {\n return {\n type: REMOVE_BUILDING,\n buildingId,\n }\n}\n\nexport function removeBuilding(buildingId) {\n return batchActions([deleteBuilding(buildingId)])\n}\n\nexport function createBuilding(buildingId = v4()) {\n const sequence = [addBuilding(buildingId)]\n return batchActions(sequence)\n}\n\nexport function referenceFloorWithBuilding(\n buildingId,\n floorId,\n) {\n return {\n type: REFERENCE_FLOOR,\n buildingId,\n floorId,\n }\n}\n\nexport function dereferenceFloorWithBuilding(buildingId, floorId) {\n return {\n type: DEREFERENCE_FLOOR,\n buildingId,\n floorId,\n }\n}\n\nexport function setActiveFloor(buildingId, floorId) {\n return {\n type: SET_ACTIVE_FLOOR,\n buildingId,\n floorId,\n }\n}\n\nexport function buildFloorBuildingReference(\n buildingId,\n floorId,\n) {\n return batchActions([\n referenceFloorWithBuilding(buildingId, floorId),\n setActiveFloor(buildingId, floorId),\n ])\n}\n\nexport function removeFloorBuildingReference(buildingId, floorId) {\n return dereferenceFloorWithBuilding(buildingId, floorId)\n}\n\nexport function copyBuilding(Id, originBuildingId, buildingId = v4()) {\n return {\n type: CLONE_BUILDING,\n originBuildingId,\n buildingId,\n }\n}\n\nexport function cloneBuilding(originBuildingId, buildingId = v4()) {\n return batchActions([copyBuilding(originBuildingId, buildingId)])\n}\n","import { calculatePossibleDevice } from \"./calculatePossibleDevice\"\n\nexport const calculateFrames = (deviceList, serieId, frameSize, frameColor, orientation, frameMapping) => {\n if (frameSize === 0) {\n return []\n }\n \n const articleColor = frameMapping.find(el => {\n return el.serie === serieId && el.colorId === frameColor\n })?.articleColor\n\n let description = { \n feature: \"EC000007\", //Abdeckrahmen\n filters: [\n {\n Id: \"EF001035\", //Textfeld/Beschriftungsfläche\n Value: \"false\"\n }\n ]\n }\n\n if (articleColor) {\n description.manufacturerTypeDescr = \"-\" + articleColor\n }\n\n if (frameSize) {\n description.filters.push({\n Id: 'EF000074', //Anzahl der Einheiten\n Value: frameSize,\n })\n }\n\n if ((serieId === 27 || serieId === 61) && orientation === 'H') {\n description.filters.push({\n Id: \"EF003824\", //Montagerichtung\n Value: \"EV002314\" //horizontal\n })\n } else if ((serieId === 27 || serieId === 61) && orientation === 'V') {\n description.filters.push({\n Id: \"EF003824\", //Montagerichtung\n Value: \"EV001302\" //vertikal\n })\n } else {\n description.filters.push({\n Id: \"EF003824\", //Montagerichtung\n Value: \"EV000130\" //horizontal und vertikal\n })\n }\n const devices = calculatePossibleDevice(deviceList, [description], undefined, serieId)\n\n return devices.filter(device => {\n let match = true;\n let features = JSON.parse(device.features)\n const klappDeckel = features[0].Feature.find(feature => feature.Fname === 'EF000117') //Mit Klappdeckel\n if (klappDeckel) {\n match = klappDeckel.Fvalue !== 'true'\n }\n if (match\n && ((serieId !== 59 && serieId !== 53)\n || ((serieId === 59 || serieId === 53) && device.manufacturerTypeDescr.includes(frameColor+'K') === false\n ))\n ) {\n if (!device.manufacturerTypeDescr.includes('KA-')) {\n features.forEach(featureClass => {\n if (featureClass.Id === 'EC000007') { //Abdeckrahmen\n featureClass.Feature.forEach(feature => {\n description.filters.forEach(filter => {\n if (filter.Id === feature.Fname) {\n if (filter.Value.toString() !== feature.Fvalue.toString()) {\n match = false\n }\n }\n })\n })\n }\n })\n \n }\n }\n return match\n })\n}\n\nexport const calculateFrame = (deviceList, serieId, frameSize, frameColor, orientation, frameMapping) => {\n const devices = calculateFrames(deviceList, serieId, frameSize, frameColor, orientation, frameMapping)\n if (devices?.length > 0) {\n return devices[0]\n }\n return null\n}\n\nexport const calulatePossibleFrameSizes = (deviceList, serieId, frameSize, frameColor, orientation, frameMapping) => {\n const devices = calculateFrames(deviceList, serieId, frameSize, frameColor, orientation, frameMapping)\n if (Array.isArray(devices)) {\n return devices.map(device => {\n let size = undefined\n let features = JSON.parse(device.features)\n features.forEach(featureClass => {\n if (featureClass.Id === 'EC000007') { //Abdeckrahmen\n featureClass.Feature.forEach(feature => {\n if (feature.Fname === 'EF000074') { //Anzahl der Einheiten\n size = parseInt(feature.Fvalue)\n }\n })\n }\n })\n return size\n }).filter(size => size).sort()\n }\n return []\n}"],"sourceRoot":""}